@agile-team/wl-skills-kit 2.11.1 → 2.11.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +1 -1
  3. package/bin/wl-skills.js +27 -3
  4. package/files/.wl-skills/docs/jh-pagination.md +505 -505
  5. package/files/.wl-skills/docs/request.md +940 -940
  6. package/files/.wl-skills/guides/architecture.md +1 -1
  7. package/files/.wl-skills/skills/core/convention-audit/SKILL.md +3 -3
  8. package/files/.wl-skills/skills/core/spec-doc-parse/SKILL.md +332 -332
  9. package/files/.wl-skills/skills/core/spec-doc-parse/USAGE.md +97 -97
  10. package/files/.wl-skills/skills/sync/permission-sync/USAGE.md +107 -107
  11. package/files/.wl-skills/src/components/global/C_ParentView/index.vue +3 -3
  12. package/files/.wl-skills/src/components/global/C_RightToolbar/index.vue +157 -157
  13. package/files/.wl-skills/src/components/global/C_SvgIcon/index.vue +31 -31
  14. package/files/.wl-skills/src/components/global/C_SvgIcon/svgicon.js +10 -10
  15. package/files/.wl-skills/src/components/global/C_TagStatus/README.md +264 -264
  16. package/files/.wl-skills/src/components/global/C_TagStatus/config.ts +192 -192
  17. package/files/.wl-skills/src/components/global/C_TagStatus/index.vue +106 -106
  18. package/files/.wl-skills/src/components/global/C_TagStatus/types.ts +64 -64
  19. package/files/.wl-skills/src/components/global/C_Tree/README.md +153 -153
  20. package/files/.wl-skills/src/components/global/C_Tree/index.scss +42 -42
  21. package/files/.wl-skills/src/components/global/C_Tree/index.vue +78 -78
  22. package/files/.wl-skills/src/components/global/C_Tree/types.ts +59 -59
  23. package/files/.wl-skills/src/components/local/c_formModal/README.md +235 -235
  24. package/files/.wl-skills/src/components/local/c_formModal/data.ts +95 -95
  25. package/files/.wl-skills/src/components/local/c_formModal/index.scss +8 -8
  26. package/files/.wl-skills/src/components/local/c_formModal/index.vue +107 -107
  27. package/files/.wl-skills/src/components/local/c_formSections/data.ts +175 -175
  28. package/files/.wl-skills/src/components/local/c_formSections/index.scss +280 -280
  29. package/files/.wl-skills/src/components/local/c_formSections/index.vue +429 -429
  30. package/files/.wl-skills/src/components/local/c_listModal/data.ts +41 -41
  31. package/files/.wl-skills/src/components/local/c_listModal/index.vue +136 -136
  32. package/files/.wl-skills/src/components/local/c_spliterTitle/index.scss +25 -25
  33. package/files/.wl-skills/src/components/local/c_spliterTitle/index.vue +21 -21
  34. package/files/.wl-skills/src/components/remote/AGGrid/README.md +530 -530
  35. package/files/.wl-skills/src/components/remote/BaseForm/README.md +508 -508
  36. package/files/.wl-skills/src/components/remote/BaseQuery/README.md +865 -865
  37. package/files/.wl-skills/src/components/remote/BaseTable/README.md +941 -941
  38. package/files/.wl-skills/src/components/remote/BaseToolbar/README.md +496 -496
  39. package/files/.wl-skills/src/types/page.ts +24 -24
  40. package/files/.wl-skills/standards/04-coding-basics.md +39 -1
  41. package/files/.wl-skills/standards/09-typescript.md +26 -3
  42. package/files/.wl-skills/standards/index.md +2 -2
  43. package/files/.wl-skills/templates/README.md +44 -44
  44. package/files/.wl-skills/templates/produce/aiflow/mmwr-customer-apply-add/api.md +54 -54
  45. package/files/.wl-skills/templates/produce/aiflow/mmwr-customer-apply-add/data.ts +346 -346
  46. package/files/.wl-skills/templates/produce/aiflow/mmwr-customer-apply-add/index.scss +1 -1
  47. package/files/.wl-skills/templates/produce/aiflow/mmwr-customer-apply-add/index.vue +28 -28
  48. package/files/.wl-skills/templates/produce/aiflow/mmwr-customer-apply-add-form/data.ts +115 -115
  49. package/files/.wl-skills/templates/produce/aiflow/mmwr-customer-apply-add-form/index.scss +44 -44
  50. package/files/.wl-skills/templates/produce/aiflow/mmwr-customer-apply-add-form/index.vue +43 -43
  51. package/files/.wl-skills/templates/produce/aiflow/mmwr-customer-apply-change/data.ts +338 -338
  52. package/files/.wl-skills/templates/produce/aiflow/mmwr-customer-apply-change/index.scss +1 -1
  53. package/files/.wl-skills/templates/produce/aiflow/mmwr-customer-apply-change/index.vue +28 -28
  54. package/files/.wl-skills/templates/produce/aiflow/mmwr-customer-apply-change-form/data.ts +115 -115
  55. package/files/.wl-skills/templates/produce/aiflow/mmwr-customer-apply-change-form/index.scss +44 -44
  56. package/files/.wl-skills/templates/produce/aiflow/mmwr-customer-apply-change-form/index.vue +43 -43
  57. package/files/.wl-skills/templates/produce/aiflow/mmwr-customer-archive/api.md +88 -88
  58. package/files/.wl-skills/templates/produce/aiflow/mmwr-customer-archive/data.ts +601 -601
  59. package/files/.wl-skills/templates/produce/aiflow/mmwr-customer-archive/index.scss +1 -1
  60. package/files/.wl-skills/templates/produce/aiflow/mmwr-customer-archive/index.vue +64 -64
  61. package/files/.wl-skills/templates/produce/aiflow/mmwr-customer-detail/api.md +67 -67
  62. package/files/.wl-skills/templates/produce/aiflow/mmwr-customer-detail/data.ts +286 -286
  63. package/files/.wl-skills/templates/produce/aiflow/mmwr-customer-detail/index.scss +139 -139
  64. package/files/.wl-skills/templates/produce/aiflow/mmwr-customer-detail/index.vue +318 -318
  65. package/files/.wl-skills/templates/produce/aiflow/mmwr-temp-customer-archive/api.md +98 -98
  66. package/files/.wl-skills/templates/produce/aiflow/mmwr-temp-customer-archive/data.ts +543 -543
  67. package/files/.wl-skills/templates/produce/aiflow/mmwr-temp-customer-archive/index.scss +1 -1
  68. package/files/.wl-skills/templates/produce/aiflow/mmwr-temp-customer-archive/index.vue +52 -52
  69. package/files/.wl-skills/templates/sale/demo/add-demo/data.ts +518 -518
  70. package/files/.wl-skills/templates/sale/demo/billet-flame-cut-plan/data.ts +524 -524
  71. package/files/.wl-skills/templates/sale/demo/billet-flame-cut-plan/index.scss +154 -154
  72. package/files/.wl-skills/templates/sale/demo/billet-flame-cut-plan/index.vue +117 -117
  73. package/files/.wl-skills/templates/sale/demo/domestic-trade-order/data.ts +308 -308
  74. package/files/.wl-skills/templates/sale/demo/domestic-trade-order/index.scss +99 -99
  75. package/files/.wl-skills/templates/sale/demo/domestic-trade-order/index.vue +77 -77
  76. package/files/.wl-skills/templates/sale/demo/heat-batch-return/data.ts +367 -367
  77. package/files/.wl-skills/templates/sale/demo/heat-batch-return/index.scss +100 -100
  78. package/files/.wl-skills/templates/sale/demo/heat-batch-return/index.vue +170 -170
  79. package/files/.wl-skills/templates/sale/demo/heat-batch-return/meltDialog.vue +320 -320
  80. package/files/.wl-skills/templates/sale/demo/metallurgical-spec/data.ts +824 -824
  81. package/lib/ast-rules.js +304 -9
  82. package/mcp/config.js +46 -46
  83. package/mcp/registry.js +6 -1
  84. package/mcp/tools/projectTools.js +9 -1
  85. package/package.json +2 -2
@@ -1,367 +1,367 @@
1
- /*
2
- * @Author: ChenYu ycyplus@gmail.com
3
- * @Date: 2025-06-13 18:38:58
4
- * @LastEditors: ChenYu ycyplus@gmail.com
5
- * @LastEditTime: 2026-01-04 08:52:20
6
- * @FilePath: \cx-ui-sale\src\views\sale\demo\heat-batch-return\data.ts
7
- * @Description: 炉次返送 - 数据逻辑层
8
- * Copyright (c) 2025 by CHENY, All Rights Reserved 😎.
9
- */
10
- import { ref, reactive, h } from "vue";
11
- import { TableColumnDesc } from "@jhlc/common-core/src/components/table/base-table/type";
12
- import { ActionButtonDesc } from "@jhlc/common-core/src/components/toolbar/type";
13
- import type { BaseFormItemDesc } from "@jhlc/common-core/src/components/form/common/type";
14
- import axios from "axios";
15
- import { ElMessage } from "element-plus";
16
-
17
- // 计划炉号点击处理函数
18
- function handlePlanFurnaceNoClick(row: any) {
19
- ElMessage.info(`查看计划炉号: ${row.plannedFurnaceNumber} 的详细信息`);
20
- // 这里可以添加跳转到计划炉号详情页面或打开详情弹窗的逻辑
21
- }
22
-
23
- /**
24
- * 表格列配置 - 待返送
25
- */
26
- export const pendingColumnsConfig: TableColumnDesc<any>[] = [
27
- { type: "selection", width: 55 },
28
- {
29
- label: "计划炉号",
30
- name: "plannedFurnaceNumber",
31
- defaultSlot: ({ row }: any) => {
32
- return h(
33
- "span",
34
- {
35
- style: "color: #409eff; cursor: pointer; text-decoration: underline;",
36
- onClick: () => handlePlanFurnaceNoClick(row)
37
- },
38
- row.plannedFurnaceNumber
39
- );
40
- }
41
- },
42
- { label: "计划顺序号", name: "plannedSequenceNumber", width: 120 },
43
- { label: "熔炼号", name: "smeltingNumber", width: 150 },
44
- { label: "内部钢种", name: "internalSteelGrade", width: 120 },
45
- { label: "铸机号", name: "castingMachineNumber", width: 120 }
46
- ];
47
-
48
- /**
49
- * 表格列配置 - 已返送
50
- */
51
- export const returnedColumnsConfig: TableColumnDesc<any>[] = [
52
- { type: "selection", width: 55 },
53
- {
54
- label: "计划炉号",
55
- name: "plannedFurnaceNumber",
56
- defaultSlot: ({ row }: any) => {
57
- return h(
58
- "span",
59
- {
60
- style: "color: #409eff; cursor: pointer; text-decoration: underline;",
61
- onClick: () => handlePlanFurnaceNoClick(row)
62
- },
63
- row.plannedFurnaceNumber
64
- );
65
- }
66
- },
67
- { label: "计划顺序号", name: "plannedSequenceNumber", width: 120 },
68
- { label: "熔炼号", name: "smeltingNumber", width: 150 },
69
- { label: "内部钢种", name: "internalSteelGrade", width: 120 },
70
- { label: "铸机号", name: "castingMachineNumber", width: 120 }
71
- ];
72
-
73
- /**
74
- * Loading状态
75
- */
76
- export const pendingLoading = ref(false);
77
- export const returnedLoading = ref(false);
78
-
79
- /**
80
- * 待返送数据
81
- */
82
- export const pendingData = reactive({
83
- list: [] as any[],
84
- total: 0
85
- });
86
-
87
- /**
88
- * 已返送数据
89
- */
90
- export const returnedData = reactive({
91
- list: [] as any[],
92
- total: 0
93
- });
94
-
95
- /**
96
- * 待返送分页
97
- */
98
- export const pendingPagination = reactive({
99
- page: 1,
100
- pageSize: 15
101
- });
102
-
103
- /**
104
- * 已返送分页
105
- */
106
- export const returnedPagination = reactive({
107
- page: 1,
108
- pageSize: 15
109
- });
110
-
111
- /**
112
- * 选中的行
113
- */
114
- export const pendingSelectedRows = ref<any[]>([]);
115
- export const returnedSelectedRows = ref<any[]>([]);
116
-
117
- /**
118
- * API 配置 - 统一管理所有接口地址
119
- */
120
- export const API_CONFIG = {
121
- list: "/api/furnace-batch/list",
122
- save: "/api/furnace-batch/save",
123
- update: "/api/furnace-batch/update",
124
- getById: "/api/furnace-batch/getOneById"
125
- } as const;
126
-
127
- /**
128
- * 获取待返送数据
129
- */
130
- export const fetchPendingData = async () => {
131
- pendingLoading.value = true;
132
-
133
- try {
134
- const params = {
135
- page: pendingPagination.page,
136
- pageSize: pendingPagination.pageSize,
137
- type: "pending"
138
- };
139
-
140
- const response = await axios.get(API_CONFIG.list, { params });
141
-
142
- if (response.data.code === 200) {
143
- pendingData.list = response.data.data.list;
144
- pendingData.total = response.data.data.total;
145
- } else {
146
- ElMessage.error(response.data.message || "获取数据失败");
147
- }
148
- } catch (error) {
149
- console.error("获取待返送数据失败:", error);
150
- ElMessage.error("获取数据失败");
151
- } finally {
152
- pendingLoading.value = false;
153
- }
154
- };
155
-
156
- /**
157
- * 获取已返送数据
158
- */
159
- export const fetchReturnedData = async () => {
160
- returnedLoading.value = true;
161
-
162
- try {
163
- const params = {
164
- page: returnedPagination.page,
165
- pageSize: returnedPagination.pageSize,
166
- type: "returned"
167
- };
168
-
169
- const response = await axios.get(API_CONFIG.list, { params });
170
-
171
- if (response.data.code === 200) {
172
- returnedData.list = response.data.data.list;
173
- returnedData.total = response.data.data.total;
174
- } else {
175
- ElMessage.error(response.data.message || "获取数据失败");
176
- }
177
- } catch (error) {
178
- console.error("获取已返送数据失败:", error);
179
- ElMessage.error("获取数据失败");
180
- } finally {
181
- returnedLoading.value = false;
182
- }
183
- };
184
-
185
- /**
186
- * 待返送分页变化
187
- */
188
- export const handlePendingPageChange = (page: number) => {
189
- pendingPagination.page = page;
190
- fetchPendingData();
191
- };
192
-
193
- export const handlePendingSizeChange = (size: number) => {
194
- pendingPagination.pageSize = size;
195
- pendingPagination.page = 1;
196
- fetchPendingData();
197
- };
198
-
199
- /**
200
- * 已返送分页变化
201
- */
202
- export const handleReturnedPageChange = (page: number) => {
203
- returnedPagination.page = page;
204
- fetchReturnedData();
205
- };
206
-
207
- export const handleReturnedSizeChange = (size: number) => {
208
- returnedPagination.pageSize = size;
209
- returnedPagination.page = 1;
210
- fetchReturnedData();
211
- };
212
-
213
- /**
214
- * 选择变化
215
- */
216
- export const handlePendingSelectionChange = (selection: any[]) => {
217
- pendingSelectedRows.value = selection;
218
- };
219
-
220
- export const handleReturnedSelectionChange = (selection: any[]) => {
221
- returnedSelectedRows.value = selection;
222
- };
223
-
224
- /**
225
- * 查询
226
- */
227
- export const handleQuery = () => {
228
- pendingPagination.page = 1;
229
- returnedPagination.page = 1;
230
- fetchPendingData();
231
- fetchReturnedData();
232
- };
233
-
234
- /**
235
- * 新增返送炉次弹窗配置
236
- */
237
- export const modalConfig = {
238
- titlePrefix: "返送炉次",
239
- width: "60%",
240
- columns: 4,
241
- labelWidth: "90px",
242
- formItems: [
243
- {
244
- name: "ponoNumber",
245
- label: "PONO号",
246
- placeholder: "请输入"
247
- },
248
- {
249
- name: "continuousCasterNumber",
250
- label: "连铸机号",
251
- required: true,
252
- placeholder: "请选择",
253
- customProps: () => ({
254
- clearable: true,
255
- options: [
256
- { label: "1", value: "1" },
257
- { label: "2", value: "2" },
258
- { label: "3", value: "3" }
259
- ]
260
- })
261
- },
262
- {
263
- name: "internalSteelGrade",
264
- label: "内部钢种",
265
- required: true,
266
- placeholder: "请输入"
267
- },
268
- {
269
- name: "castSlabType",
270
- label: "铸坯类型",
271
- required: true,
272
- placeholder: "请选择",
273
- customProps: () => ({
274
- clearable: true,
275
- options: [
276
- { label: "类型1", value: "type1" },
277
- { label: "类型2", value: "type2" },
278
- { label: "类型3", value: "type3" }
279
- ]
280
- })
281
- },
282
- {
283
- name: "slabCount",
284
- label: "坯数",
285
- required: true,
286
- placeholder: "请输入",
287
- rules: [
288
- { required: true, message: "请输入坯数", trigger: "blur" },
289
- { pattern: /^\d+$/, message: "坯数必须为数字", trigger: "blur" }
290
- ]
291
- },
292
- {
293
- name: "thickness",
294
- label: "厚度",
295
- required: true,
296
- placeholder: "请输入",
297
- rules: [
298
- { required: true, message: "请输入厚度", trigger: "blur" },
299
- { pattern: /^\d+(\.\d+)?$/, message: "厚度必须为数字", trigger: "blur" }
300
- ]
301
- },
302
- {
303
- name: "width",
304
- label: "宽度",
305
- required: true,
306
- placeholder: "请输入",
307
- rules: [
308
- { required: true, message: "请输入宽度", trigger: "blur" },
309
- { pattern: /^\d+(\.\d+)?$/, message: "宽度必须为数字", trigger: "blur" }
310
- ]
311
- },
312
- {
313
- name: "length",
314
- label: "长度",
315
- required: true,
316
- placeholder: "请输入",
317
- rules: [
318
- { required: true, message: "请输入长度", trigger: "blur" },
319
- { pattern: /^\d+(\.\d+)?$/, message: "长度必须为数字", trigger: "blur" }
320
- ]
321
- },
322
- {
323
- name: "lengthUpperLimit",
324
- label: "长度上限",
325
- required: true,
326
- placeholder: "请输入",
327
- rules: [
328
- { required: true, message: "请输入长度上限", trigger: "blur" },
329
- {
330
- pattern: /^\d+(\.\d+)?$/,
331
- message: "长度上限必须为数字",
332
- trigger: "blur"
333
- }
334
- ]
335
- },
336
- {
337
- name: "widthUpperLimit",
338
- label: "宽度上限",
339
- required: true,
340
- placeholder: "请输入",
341
- rules: [
342
- { required: true, message: "请输入宽度上限", trigger: "blur" },
343
- {
344
- pattern: /^\d+(\.\d+)?$/,
345
- message: "宽度上限必须为数字",
346
- trigger: "blur"
347
- }
348
- ]
349
- }
350
- ] as BaseFormItemDesc<any>[],
351
- api: {
352
- getById: API_CONFIG.getById,
353
- save: API_CONFIG.save,
354
- update: API_CONFIG.update
355
- }
356
- };
357
-
358
- /**
359
- * 工具栏配置生成
360
- */
361
- export const getToolbarConfig = (callbacks: {
362
- onReturn: () => void;
363
- onQuery: () => void;
364
- }): ActionButtonDesc[] => [
365
- { label: "炉次返送", type: "primary", onClick: callbacks.onReturn },
366
- { label: "查询", type: "primary", onClick: callbacks.onQuery }
367
- ];
1
+ /*
2
+ * @Author: ChenYu ycyplus@gmail.com
3
+ * @Date: 2025-06-13 18:38:58
4
+ * @LastEditors: ChenYu ycyplus@gmail.com
5
+ * @LastEditTime: 2026-01-04 08:52:20
6
+ * @FilePath: \cx-ui-sale\src\views\sale\demo\heat-batch-return\data.ts
7
+ * @Description: 炉次返送 - 数据逻辑层
8
+ * Copyright (c) 2025 by CHENY, All Rights Reserved 😎.
9
+ */
10
+ import { ref, reactive, h } from "vue";
11
+ import { TableColumnDesc } from "@jhlc/common-core/src/components/table/base-table/type";
12
+ import { ActionButtonDesc } from "@jhlc/common-core/src/components/toolbar/type";
13
+ import type { BaseFormItemDesc } from "@jhlc/common-core/src/components/form/common/type";
14
+ import axios from "axios";
15
+ import { ElMessage } from "element-plus";
16
+
17
+ // 计划炉号点击处理函数
18
+ function handlePlanFurnaceNoClick(row: any) {
19
+ ElMessage.info(`查看计划炉号: ${row.plannedFurnaceNumber} 的详细信息`);
20
+ // 这里可以添加跳转到计划炉号详情页面或打开详情弹窗的逻辑
21
+ }
22
+
23
+ /**
24
+ * 表格列配置 - 待返送
25
+ */
26
+ export const pendingColumnsConfig: TableColumnDesc<any>[] = [
27
+ { type: "selection", width: 55 },
28
+ {
29
+ label: "计划炉号",
30
+ name: "plannedFurnaceNumber",
31
+ defaultSlot: ({ row }: any) => {
32
+ return h(
33
+ "span",
34
+ {
35
+ style: "color: #409eff; cursor: pointer; text-decoration: underline;",
36
+ onClick: () => handlePlanFurnaceNoClick(row)
37
+ },
38
+ row.plannedFurnaceNumber
39
+ );
40
+ }
41
+ },
42
+ { label: "计划顺序号", name: "plannedSequenceNumber", width: 120 },
43
+ { label: "熔炼号", name: "smeltingNumber", width: 150 },
44
+ { label: "内部钢种", name: "internalSteelGrade", width: 120 },
45
+ { label: "铸机号", name: "castingMachineNumber", width: 120 }
46
+ ];
47
+
48
+ /**
49
+ * 表格列配置 - 已返送
50
+ */
51
+ export const returnedColumnsConfig: TableColumnDesc<any>[] = [
52
+ { type: "selection", width: 55 },
53
+ {
54
+ label: "计划炉号",
55
+ name: "plannedFurnaceNumber",
56
+ defaultSlot: ({ row }: any) => {
57
+ return h(
58
+ "span",
59
+ {
60
+ style: "color: #409eff; cursor: pointer; text-decoration: underline;",
61
+ onClick: () => handlePlanFurnaceNoClick(row)
62
+ },
63
+ row.plannedFurnaceNumber
64
+ );
65
+ }
66
+ },
67
+ { label: "计划顺序号", name: "plannedSequenceNumber", width: 120 },
68
+ { label: "熔炼号", name: "smeltingNumber", width: 150 },
69
+ { label: "内部钢种", name: "internalSteelGrade", width: 120 },
70
+ { label: "铸机号", name: "castingMachineNumber", width: 120 }
71
+ ];
72
+
73
+ /**
74
+ * Loading状态
75
+ */
76
+ export const pendingLoading = ref(false);
77
+ export const returnedLoading = ref(false);
78
+
79
+ /**
80
+ * 待返送数据
81
+ */
82
+ export const pendingData = reactive({
83
+ list: [] as any[],
84
+ total: 0
85
+ });
86
+
87
+ /**
88
+ * 已返送数据
89
+ */
90
+ export const returnedData = reactive({
91
+ list: [] as any[],
92
+ total: 0
93
+ });
94
+
95
+ /**
96
+ * 待返送分页
97
+ */
98
+ export const pendingPagination = reactive({
99
+ page: 1,
100
+ pageSize: 15
101
+ });
102
+
103
+ /**
104
+ * 已返送分页
105
+ */
106
+ export const returnedPagination = reactive({
107
+ page: 1,
108
+ pageSize: 15
109
+ });
110
+
111
+ /**
112
+ * 选中的行
113
+ */
114
+ export const pendingSelectedRows = ref<any[]>([]);
115
+ export const returnedSelectedRows = ref<any[]>([]);
116
+
117
+ /**
118
+ * API 配置 - 统一管理所有接口地址
119
+ */
120
+ export const API_CONFIG = {
121
+ list: "/api/furnace-batch/list",
122
+ save: "/api/furnace-batch/save",
123
+ update: "/api/furnace-batch/update",
124
+ getById: "/api/furnace-batch/getOneById"
125
+ } as const;
126
+
127
+ /**
128
+ * 获取待返送数据
129
+ */
130
+ export const fetchPendingData = async () => {
131
+ pendingLoading.value = true;
132
+
133
+ try {
134
+ const params = {
135
+ page: pendingPagination.page,
136
+ pageSize: pendingPagination.pageSize,
137
+ type: "pending"
138
+ };
139
+
140
+ const response = await axios.get(API_CONFIG.list, { params });
141
+
142
+ if (response.data.code === 200) {
143
+ pendingData.list = response.data.data.list;
144
+ pendingData.total = response.data.data.total;
145
+ } else {
146
+ ElMessage.error(response.data.message || "获取数据失败");
147
+ }
148
+ } catch (error) {
149
+ console.error("获取待返送数据失败:", error);
150
+ ElMessage.error("获取数据失败");
151
+ } finally {
152
+ pendingLoading.value = false;
153
+ }
154
+ };
155
+
156
+ /**
157
+ * 获取已返送数据
158
+ */
159
+ export const fetchReturnedData = async () => {
160
+ returnedLoading.value = true;
161
+
162
+ try {
163
+ const params = {
164
+ page: returnedPagination.page,
165
+ pageSize: returnedPagination.pageSize,
166
+ type: "returned"
167
+ };
168
+
169
+ const response = await axios.get(API_CONFIG.list, { params });
170
+
171
+ if (response.data.code === 200) {
172
+ returnedData.list = response.data.data.list;
173
+ returnedData.total = response.data.data.total;
174
+ } else {
175
+ ElMessage.error(response.data.message || "获取数据失败");
176
+ }
177
+ } catch (error) {
178
+ console.error("获取已返送数据失败:", error);
179
+ ElMessage.error("获取数据失败");
180
+ } finally {
181
+ returnedLoading.value = false;
182
+ }
183
+ };
184
+
185
+ /**
186
+ * 待返送分页变化
187
+ */
188
+ export const handlePendingPageChange = (page: number) => {
189
+ pendingPagination.page = page;
190
+ fetchPendingData();
191
+ };
192
+
193
+ export const handlePendingSizeChange = (size: number) => {
194
+ pendingPagination.pageSize = size;
195
+ pendingPagination.page = 1;
196
+ fetchPendingData();
197
+ };
198
+
199
+ /**
200
+ * 已返送分页变化
201
+ */
202
+ export const handleReturnedPageChange = (page: number) => {
203
+ returnedPagination.page = page;
204
+ fetchReturnedData();
205
+ };
206
+
207
+ export const handleReturnedSizeChange = (size: number) => {
208
+ returnedPagination.pageSize = size;
209
+ returnedPagination.page = 1;
210
+ fetchReturnedData();
211
+ };
212
+
213
+ /**
214
+ * 选择变化
215
+ */
216
+ export const handlePendingSelectionChange = (selection: any[]) => {
217
+ pendingSelectedRows.value = selection;
218
+ };
219
+
220
+ export const handleReturnedSelectionChange = (selection: any[]) => {
221
+ returnedSelectedRows.value = selection;
222
+ };
223
+
224
+ /**
225
+ * 查询
226
+ */
227
+ export const handleQuery = () => {
228
+ pendingPagination.page = 1;
229
+ returnedPagination.page = 1;
230
+ fetchPendingData();
231
+ fetchReturnedData();
232
+ };
233
+
234
+ /**
235
+ * 新增返送炉次弹窗配置
236
+ */
237
+ export const modalConfig = {
238
+ titlePrefix: "返送炉次",
239
+ width: "60%",
240
+ columns: 4,
241
+ labelWidth: "90px",
242
+ formItems: [
243
+ {
244
+ name: "ponoNumber",
245
+ label: "PONO号",
246
+ placeholder: "请输入"
247
+ },
248
+ {
249
+ name: "continuousCasterNumber",
250
+ label: "连铸机号",
251
+ required: true,
252
+ placeholder: "请选择",
253
+ customProps: () => ({
254
+ clearable: true,
255
+ options: [
256
+ { label: "1", value: "1" },
257
+ { label: "2", value: "2" },
258
+ { label: "3", value: "3" }
259
+ ]
260
+ })
261
+ },
262
+ {
263
+ name: "internalSteelGrade",
264
+ label: "内部钢种",
265
+ required: true,
266
+ placeholder: "请输入"
267
+ },
268
+ {
269
+ name: "castSlabType",
270
+ label: "铸坯类型",
271
+ required: true,
272
+ placeholder: "请选择",
273
+ customProps: () => ({
274
+ clearable: true,
275
+ options: [
276
+ { label: "类型1", value: "type1" },
277
+ { label: "类型2", value: "type2" },
278
+ { label: "类型3", value: "type3" }
279
+ ]
280
+ })
281
+ },
282
+ {
283
+ name: "slabCount",
284
+ label: "坯数",
285
+ required: true,
286
+ placeholder: "请输入",
287
+ rules: [
288
+ { required: true, message: "请输入坯数", trigger: "blur" },
289
+ { pattern: /^\d+$/, message: "坯数必须为数字", trigger: "blur" }
290
+ ]
291
+ },
292
+ {
293
+ name: "thickness",
294
+ label: "厚度",
295
+ required: true,
296
+ placeholder: "请输入",
297
+ rules: [
298
+ { required: true, message: "请输入厚度", trigger: "blur" },
299
+ { pattern: /^\d+(\.\d+)?$/, message: "厚度必须为数字", trigger: "blur" }
300
+ ]
301
+ },
302
+ {
303
+ name: "width",
304
+ label: "宽度",
305
+ required: true,
306
+ placeholder: "请输入",
307
+ rules: [
308
+ { required: true, message: "请输入宽度", trigger: "blur" },
309
+ { pattern: /^\d+(\.\d+)?$/, message: "宽度必须为数字", trigger: "blur" }
310
+ ]
311
+ },
312
+ {
313
+ name: "length",
314
+ label: "长度",
315
+ required: true,
316
+ placeholder: "请输入",
317
+ rules: [
318
+ { required: true, message: "请输入长度", trigger: "blur" },
319
+ { pattern: /^\d+(\.\d+)?$/, message: "长度必须为数字", trigger: "blur" }
320
+ ]
321
+ },
322
+ {
323
+ name: "lengthUpperLimit",
324
+ label: "长度上限",
325
+ required: true,
326
+ placeholder: "请输入",
327
+ rules: [
328
+ { required: true, message: "请输入长度上限", trigger: "blur" },
329
+ {
330
+ pattern: /^\d+(\.\d+)?$/,
331
+ message: "长度上限必须为数字",
332
+ trigger: "blur"
333
+ }
334
+ ]
335
+ },
336
+ {
337
+ name: "widthUpperLimit",
338
+ label: "宽度上限",
339
+ required: true,
340
+ placeholder: "请输入",
341
+ rules: [
342
+ { required: true, message: "请输入宽度上限", trigger: "blur" },
343
+ {
344
+ pattern: /^\d+(\.\d+)?$/,
345
+ message: "宽度上限必须为数字",
346
+ trigger: "blur"
347
+ }
348
+ ]
349
+ }
350
+ ] as BaseFormItemDesc<any>[],
351
+ api: {
352
+ getById: API_CONFIG.getById,
353
+ save: API_CONFIG.save,
354
+ update: API_CONFIG.update
355
+ }
356
+ };
357
+
358
+ /**
359
+ * 工具栏配置生成
360
+ */
361
+ export const getToolbarConfig = (callbacks: {
362
+ onReturn: () => void;
363
+ onQuery: () => void;
364
+ }): ActionButtonDesc[] => [
365
+ { label: "炉次返送", type: "primary", onClick: callbacks.onReturn },
366
+ { label: "查询", type: "primary", onClick: callbacks.onQuery }
367
+ ];