onceSingleChangeDialog.vue 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. <template>
  2. <el-dialog
  3. title="单批单改"
  4. v-model="visible"
  5. width="680px"
  6. append-to-body
  7. draggable
  8. @close="cancel"
  9. >
  10. <el-form class="list-search-container" :inline="true">
  11. <el-form-item>
  12. <el-button
  13. type="primary"
  14. icon="Plus"
  15. :disabled="click"
  16. @click="handleAdd"
  17. >在此工序前添加新工序</el-button
  18. >
  19. <el-button type="danger" @click="handleDel" icon="delete"
  20. >删除</el-button
  21. >
  22. </el-form-item>
  23. </el-form>
  24. <div class="el-table-inner-container">
  25. <el-table
  26. ref="processTable"
  27. style="height: 500px"
  28. v-loading="loading"
  29. @selection-change="handleSelectionChange"
  30. :data="processList"
  31. >
  32. <el-table-column
  33. type="selection"
  34. :selectable="checkSelectable"
  35. width="50"
  36. align="center"
  37. />
  38. <el-table-column
  39. type="index"
  40. label="序号"
  41. width="50"
  42. align="center"
  43. ></el-table-column>
  44. <el-table-column label="工序名称" prop="processAlias" align="center" />
  45. <el-table-column
  46. label="工序编号"
  47. prop="processStepNumber"
  48. width="200"
  49. align="center"
  50. />
  51. </el-table>
  52. </div>
  53. <template #footer>
  54. <div class="dialog-footer">
  55. <el-button type="primary" @click="submitForm">确 定</el-button>
  56. <el-button @click="cancel">取 消</el-button>
  57. </div>
  58. </template>
  59. </el-dialog>
  60. <el-dialog
  61. title="选择工序"
  62. v-model="addProcess"
  63. width="800px"
  64. append-to-body
  65. draggable
  66. @close="processClose"
  67. >
  68. <div class="page-container column-container">
  69. <el-form style="padding: 16px" :inline="true">
  70. <el-form-item label="工序名称:">
  71. <el-input
  72. placeholder="请输入工序名称或简称"
  73. @keydown.enter.prevent
  74. @keyup.enter="handleQuery"
  75. clearable
  76. v-model="queryParams.keyword"
  77. style="width: 200px"
  78. />
  79. <el-button
  80. style="margin-left: 20px"
  81. type="primary"
  82. @click="handleSelect"
  83. >搜索</el-button
  84. >
  85. </el-form-item>
  86. </el-form>
  87. <div class="el-table-inner-container">
  88. <el-table height="95%" :data="addProcessList">
  89. <el-table-column
  90. label="工序编号"
  91. prop="processCode"
  92. align="center"
  93. ></el-table-column>
  94. <el-table-column
  95. label="工序名称"
  96. prop="processAlias"
  97. align="center"
  98. ></el-table-column>
  99. <el-table-column label="操作" width="80" align="center">
  100. <template #default="scope">
  101. <el-button
  102. link
  103. size="small"
  104. type="primary"
  105. icon="check"
  106. @click="handleProcess(scope.row)"
  107. >选择</el-button
  108. >
  109. </template>
  110. </el-table-column>
  111. </el-table>
  112. </div>
  113. <pagination
  114. v-show="total > 0"
  115. :total="total"
  116. v-model:page="queryParams.pageNum"
  117. v-model:limit="queryParams.pageSize"
  118. @pagination="handleSelect"
  119. />
  120. </div>
  121. </el-dialog>
  122. </template>
  123. <script setup>
  124. import { getDayworkItemProcess } from "@/api/business/daywork.js";
  125. import { getProcessList, addAmend } from "@/api/business/technologicalAmend.js";
  126. import { ref } from "vue";
  127. /** 变量 */
  128. const visible = ref(false);
  129. const loading = ref(false);
  130. const haveModified = ref(false); //是否已经修改
  131. const addProcess = ref(false); //新增工序弹窗
  132. const processTable = ref(null);
  133. const total = ref(0);
  134. const emit = defineEmits(["handleSaveSuccess"]);
  135. const ids = ref([]); //多选框选中数据
  136. const click = ref(true); //按钮不可点
  137. const addProcessList = ref([]); //新增选择工序列表
  138. const processList = ref([]); //工序列表
  139. const lot = ref({}); //批次信息
  140. const dayworkItem = ref({}); //报工信息
  141. const { proxy } = getCurrentInstance();
  142. /** 查询对象 */
  143. const queryParams = ref({
  144. keyword: "",
  145. pageNum: 1,
  146. pageSize: 10,
  147. });
  148. /*********************** 方法区 ****************************/
  149. /** 打开弹窗 */
  150. function open(id) {
  151. visible.value = true;
  152. loading.value = true;
  153. getDayworkItemProcess(id).then((res) => {
  154. lot.value = res.data.lot;
  155. dayworkItem.value = res.data.dayworkItem;
  156. processList.value = res.data.processDetails;
  157. loading.value = false;
  158. });
  159. }
  160. /** 新增工序弹窗搜索按钮操作 */
  161. function handleSelect() {
  162. getProcessList(queryParams.value).then((res) => {
  163. addProcessList.value = res.rows;
  164. total.value = res.total;
  165. });
  166. }
  167. /** 多选框选中数据 */
  168. function handleSelectionChange(selection) {
  169. ids.value = selection.map((item) => item.id);
  170. click.value = ids.value.length == 1 ? false : true;
  171. }
  172. /** 删除按钮操作 */
  173. function handleDel() {
  174. //查询选中数据
  175. const delRows = processTable.value.getSelectionRows();
  176. proxy.$modal.confirm("是否确认删除该条数据?").then(() => {
  177. processList.value = processList.value.filter(
  178. (item) => !delRows.includes(item)
  179. );
  180. });
  181. }
  182. /** 新增工序确认按钮 操作*/
  183. function handleProcess(row) {
  184. //查询选中工序位置
  185. const clickProcess = processTable.value.getSelectionRows();
  186. let indexNum = processList.value.findIndex((item) =>
  187. Object.is(item, clickProcess[0])
  188. );
  189. console.log("indexNum", indexNum);
  190. //获取新增工序上一条排序
  191. let num = processList.value[indexNum - 1].processStepNumber; //
  192. //复制选中数据
  193. let process = { ...processList.value[indexNum] };
  194. //修改新增数据
  195. process.processAlias = row.processAlias;
  196. process.processCode = row.processCode;
  197. process.processId = row.id;
  198. //插入数据
  199. processList.value.splice(indexNum, 0, process);
  200. //修改排序数据
  201. processList.value.forEach((item, index) => {
  202. if (index >= indexNum) {
  203. num = Number(num) + 1;
  204. item.processStepNumber = Number(num);
  205. }
  206. });
  207. haveModified.value = true;
  208. processClose();
  209. }
  210. /** 是否可选 */
  211. function checkSelectable(row) {
  212. if (dayworkItem.value) {
  213. return dayworkItem.value.status != 0
  214. ? row.processStepNumber > dayworkItem.value.processStepNumber
  215. : row.processStepNumber >= dayworkItem.value.processStepNumber;
  216. } else {
  217. return true;
  218. }
  219. }
  220. /** 添加新工序按钮操作 */
  221. function handleAdd() {
  222. // if (haveModified.value) {
  223. // proxy.$modal.msgError("只能修改一次工序数据");
  224. // return;
  225. // }
  226. handleSelect();
  227. addProcess.value = true;
  228. }
  229. /** 关闭新增工序弹窗 */
  230. function processClose() {
  231. addProcess.value = false;
  232. }
  233. /** 关闭弹窗 */
  234. function cancel() {
  235. visible.value = false;
  236. addProcess.value = false;
  237. haveModified.value = false;
  238. }
  239. /** 确定按钮 */
  240. function submitForm() {
  241. if (!haveModified.value) {
  242. proxy.$modal.msgError("未进行修改,清修改后再进行确认");
  243. return;
  244. } else {
  245. loading.value = true;
  246. addAmend(lot.value.id, processList.value).then((res) => {
  247. if (res.code == 200) {
  248. loading.value = true;
  249. proxy.$modal.msgSuccess("修改成功");
  250. emit("handleSaveSuccess", lot.value.lotCode);
  251. cancel();
  252. } else {
  253. loading.value = true;
  254. proxy.$modal.msgError(res.msg);
  255. }
  256. });
  257. }
  258. }
  259. /** 暴露给父组件的方法 */
  260. defineExpose({
  261. open,
  262. });
  263. </script>