inl-ui 0.0.74 → 0.0.76

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.
@@ -0,0 +1,161 @@
1
+ import { defineComponent, ref, watch, reactive } from "vue";
2
+
3
+ import { cloneDeep } from "lodash";
4
+
5
+ const columns = [
6
+ {
7
+ dataIndex: "name",
8
+ title: "名称",
9
+ ellipsis: true,
10
+ },
11
+ // {
12
+ // dataIndex: "location",
13
+ // title: "设备位置",
14
+ // ellipsis: true,
15
+ // },
16
+ {
17
+ key: "loops",
18
+ title: "控制回路",
19
+ ellipsis: true,
20
+ },
21
+ {
22
+ dataIndex: "relevanceType",
23
+ title: "关联关系",
24
+ width: 100,
25
+ },
26
+ ];
27
+
28
+ export default defineComponent({
29
+ props: {
30
+ showRelevance: {
31
+ type: Boolean,
32
+ default: false,
33
+ },
34
+ selectedRelevanceList: {
35
+ type: Array,
36
+ default: () => [],
37
+ },
38
+ currentRow: {
39
+ type: Object,
40
+ default: () => ({}),
41
+ },
42
+ },
43
+
44
+ emits: ["update:showRelevance", "toUpdate"],
45
+
46
+ setup(props, context) {
47
+ const relevanceList = ref<any>([]);
48
+
49
+ watch(
50
+ () => props.showRelevance,
51
+ (nval) => {
52
+ if (nval) {
53
+ getRelevanceList();
54
+
55
+ selectedRow.selectedRows = props.selectedRelevanceList;
56
+ selectedRow.selectedRowKeys = props.selectedRelevanceList.map(
57
+ (device: any) => device.id
58
+ );
59
+ }
60
+ }
61
+ );
62
+
63
+ const getRelevanceList = () => {
64
+ const { upstreamDevices, downstreamDevices } = props.currentRow;
65
+ const upList = upstreamDevices.map((up) => {
66
+ up.relevanceType = "上游";
67
+ return up;
68
+ });
69
+
70
+ const downList = downstreamDevices.map((down) => {
71
+ down.relevanceType = "下游";
72
+ return down;
73
+ });
74
+
75
+ relevanceList.value = [...upList, ...downList];
76
+ };
77
+
78
+ const ok = async () => {
79
+ context.emit("toUpdate", selectedRow.selectedRows);
80
+ cancelModal();
81
+ };
82
+
83
+ const cancelModal = () => {
84
+ context.emit("update:showRelevance", false);
85
+
86
+ relevanceList.value = [];
87
+
88
+ selectedRow.selectedRowKeys = [];
89
+ selectedRow.selectedRows = [];
90
+
91
+ relevanceList.value = [];
92
+ };
93
+
94
+ const selectedRow: any = reactive({
95
+ selectedRowKeys: [],
96
+ selectedRows: [],
97
+ });
98
+
99
+ const onSelect = (selectedRowKeys: any[], selectedRows: any) => {
100
+ // console.log(selectedRowKeys, selectedRows);
101
+ selectedRow.selectedRowKeys = selectedRowKeys;
102
+ selectedRow.selectedRows = selectedRows;
103
+ };
104
+
105
+ return () => (
106
+ <div class="SelectRelevance">
107
+ <a-modal
108
+ v-model={[props.showRelevance, "visible"]}
109
+ title="添加关联设备"
110
+ width="1000px"
111
+ centered
112
+ wrapClassName="SelectRelevanceModal"
113
+ onCancel={cancelModal}
114
+ v-slots={{
115
+ footer: () => (
116
+ <div class="modal_footer">
117
+ <a-button onClick={cancelModal}>取消</a-button>
118
+ <a-button type="primary" onClick={ok}>
119
+ 确定
120
+ </a-button>
121
+ </div>
122
+ ),
123
+ }}
124
+ >
125
+ <a-table
126
+ pagination={false}
127
+ columns={columns}
128
+ dataSource={relevanceList.value}
129
+ // class="cus-table"
130
+ rowKey="id"
131
+ rowSelection={{
132
+ onChange: onSelect,
133
+ selectedRowKeys: selectedRow.selectedRowKeys,
134
+ type: "checkbox",
135
+ // getCheckboxProps: (record: any) => {
136
+ // return {
137
+ // disabled: props.selectedRelevanceList
138
+ // .map((relevance: any) => {
139
+ // return relevance.id;
140
+ // })
141
+ // .includes(record.id),
142
+ // name: record.name,
143
+ // };
144
+ // },
145
+ }}
146
+ v-slots={{
147
+ bodyCell: ({ column, record, index }: any) => {
148
+ // console.log(text, column, record, index);
149
+
150
+ // 控制回路
151
+ if (column.key === "loops") {
152
+ return record.loops.join(";");
153
+ }
154
+ },
155
+ }}
156
+ ></a-table>
157
+ </a-modal>
158
+ </div>
159
+ );
160
+ },
161
+ });
@@ -11,16 +11,16 @@ import {
11
11
  Col,
12
12
  message,
13
13
  } from "ant-design-vue";
14
- import {
15
- PlusOutlined,
16
- MinusSquareOutlined,
17
- SearchOutlined,
18
- } from "@ant-design/icons-vue";
19
- import useTableList from "@/pageComponent/hooks/useTableList";
14
+ import { PlusOutlined, MinusSquareOutlined } from "@ant-design/icons-vue";
15
+
20
16
  import { cloneDeep } from "lodash";
21
17
 
22
18
  import dayjs, { Dayjs } from "dayjs";
23
19
 
20
+ import SelectDevice from "./SelectDevice";
21
+
22
+ import { getStatus } from "../../utils";
23
+
24
24
  import pssApi from "@/api/pss";
25
25
 
26
26
  const Format = "YYYY-MM-DD HH:mm";
@@ -101,11 +101,22 @@ export default defineComponent({
101
101
  ],
102
102
  });
103
103
 
104
+ watch(
105
+ () => props.showCreate,
106
+ (val) => {
107
+ if (val) {
108
+ formState.value.stopTime = dayjs().format(Format);
109
+ formState.value.supplyTime = dayjs().format(Format);
110
+ }
111
+ }
112
+ );
113
+
104
114
  const formRef = ref();
105
115
  const formState = ref({
106
116
  bus: 0,
107
117
  attempt: "1", // 1需要 0不需要
108
118
  deviceList: [] as any, // 设备列表
119
+ relevanceList: [] as any, // 关联设备列表
109
120
  stopTime: dayjs().format(Format),
110
121
  supplyTime: dayjs().format(Format),
111
122
  // stopTime: null,
@@ -115,90 +126,27 @@ export default defineComponent({
115
126
  causetext: "",
116
127
  });
117
128
 
118
- const selectRows: any = ref([]);
119
- const selectedList: any = ref([]);
120
-
121
- const eqModal: any = reactive({
122
- visible: false,
123
- dataSource: [],
124
- columns: [
125
- {
126
- dataIndex: "name",
127
- title: "名称",
128
- ellipsis: true,
129
- },
130
- {
131
- dataIndex: "location",
132
- title: "设备位置",
133
- ellipsis: true,
134
- },
135
- {
136
- dataIndex: "loop",
137
- title: "控制回路",
138
- ellipsis: true,
139
- },
140
- ],
141
- });
142
-
143
- const searchFormRef = ref();
144
- const searchForm = reactive({
145
- deviceName: "", // 设备名称
146
- deviceCode: "", // 设备编码
147
- });
148
- const devicesLoading = ref(false);
149
-
150
- // 查询设备
151
- const searchDeviceList = async () => {
152
- devicesLoading.value = true;
153
- const res: any = await pssApi.getDeviceList(searchForm);
154
- eqModal.dataSource = res.data.map((item: any) => {
155
- item.loop = item.loops.join(",");
156
- return item;
157
- });
158
- devicesLoading.value = false;
159
- };
160
-
161
- // 添加设备
162
- const addEq = async () => {
163
- try {
164
- searchDeviceList();
129
+ const showDevice = ref(false);
130
+ const currentRow = ref<any>();
165
131
 
166
- selectRows.value = [];
167
- selectedList.value = [];
168
- eqModal.visible = true;
169
- } catch (error) {
170
- console.log(error);
171
- }
172
- };
132
+ const toUpdateDevice = async (deviceList, relevanceList) => {
133
+ formState.value.deviceList = [];
134
+ deviceList.forEach(async (device: any) => {
135
+ const { data } = await pssApi.applyLoop(device.id);
136
+ device.equmentId = device.id;
137
+ device.list = data;
173
138
 
174
- const onSelectEq = (selectedRowKeys: any, selectedRows: any) => {
175
- // console.log(selectedRowKeys, selectedRows);
176
- selectRows.value = selectedRowKeys;
177
- selectedList.value = selectedRows;
178
- };
139
+ formState.value.deviceList.push(device);
140
+ });
179
141
 
180
- const sureAddEq = async () => {
181
- if (selectedList.value.length > 0) {
182
- const old = cloneDeep(formState.value.deviceList);
183
- formState.value.deviceList = [];
142
+ formState.value.relevanceList = [];
143
+ relevanceList.forEach(async (relevance: any) => {
144
+ const { data } = await pssApi.applyLoop(relevance.id);
145
+ relevance.equmentId = relevance.id;
146
+ relevance.list = data;
184
147
 
185
- nextTick(() => {
186
- formState.value.deviceList = [...old, ...selectedList.value];
187
- formState.value.deviceList.forEach(async (device: any) => {
188
- const { data } = await pssApi.applyLoop(device.id);
189
- device.equmentId = device.id;
190
- device.list = data;
191
- });
192
- });
193
-
194
- cancelAddEq();
195
- } else {
196
- message.info("请选择设备");
197
- }
198
- };
199
-
200
- const cancelAddEq = () => {
201
- eqModal.visible = false;
148
+ formState.value.relevanceList.push(relevance);
149
+ });
202
150
  };
203
151
 
204
152
  const ok = async () => {
@@ -209,8 +157,24 @@ export default defineComponent({
209
157
  .add(formState.value.duration, "h")
210
158
  .format(Format);
211
159
 
160
+ const upstreamEqumentLoopDtos: any = [];
161
+ const downstreamEqumentLoopDtos: any = [];
162
+ formState.value.relevanceList.forEach((relevance: any, index: number) => {
163
+ if (relevance.relevanceType === "上游") {
164
+ upstreamEqumentLoopDtos.push(relevance);
165
+ } else {
166
+ downstreamEqumentLoopDtos.push(relevance);
167
+ }
168
+ });
169
+
170
+ const equments = {
171
+ ...formState.value.deviceList[0],
172
+ upstreamEqumentLoopDtos,
173
+ downstreamEqumentLoopDtos,
174
+ };
175
+
212
176
  const param = {
213
- equments: formState.value.deviceList, // 设备信息
177
+ equments, // 所有设备信息
214
178
  busId: typeColumns[formState.value.bus].value, // stopSupplyPower(低压停送电) stopPower(低压停电) supplyPower(低压送电)
215
179
  busName: typeColumns[formState.value.bus].label, // 业务名称
216
180
  attempt: formState.value.attempt, // 试车流程
@@ -229,21 +193,12 @@ export default defineComponent({
229
193
  context.emit("refresh");
230
194
  };
231
195
 
232
- watch(
233
- () => props.showCreate,
234
- (val) => {
235
- if (val) {
236
- formState.value.stopTime = dayjs().format(Format);
237
- formState.value.supplyTime = dayjs().format(Format);
238
- }
239
- }
240
- );
241
-
242
196
  const cancelModal = () => {
243
197
  context.emit("update:showCreate", false);
244
198
  nextTick(() => {
245
199
  formRef.value.resetFields();
246
200
  formState.value.deviceList = [];
201
+ formState.value.relevanceList = [];
247
202
  });
248
203
  };
249
204
 
@@ -254,14 +209,15 @@ export default defineComponent({
254
209
  title="新建工单"
255
210
  width="850px"
256
211
  wrapClassName="newOrder_modal"
212
+ centered
257
213
  onCancel={cancelModal}
258
214
  v-slots={{
259
215
  footer: () => (
260
216
  <div class="modal_footer">
217
+ <Button onClick={cancelModal}>取消</Button>
261
218
  <Button type="primary" onClick={ok}>
262
219
  保存
263
220
  </Button>
264
- <Button onClick={cancelModal}>取消</Button>
265
221
  </div>
266
222
  ),
267
223
  }}
@@ -311,7 +267,11 @@ export default defineComponent({
311
267
  >
312
268
  <div class="content flex">
313
269
  <div class="line flex-center">
314
- <Button onClick={addEq}>
270
+ <Button
271
+ onClick={() => {
272
+ showDevice.value = true;
273
+ }}
274
+ >
315
275
  <PlusOutlined />
316
276
  添加设备
317
277
  </Button>
@@ -319,7 +279,8 @@ export default defineComponent({
319
279
  <div class="all">
320
280
  已选:
321
281
  <span class="num">
322
- {formState.value.deviceList.length}
282
+ {formState.value.deviceList.length +
283
+ formState.value.relevanceList.length}
323
284
  </span>
324
285
  台设备
325
286
  </div>
@@ -331,15 +292,21 @@ export default defineComponent({
331
292
  (device: any, index: number) => (
332
293
  <div class="device" key={device.id}>
333
294
  <div class="titleLine flex-center">
334
- <span class="title">
335
- {/* {device.code} */}
336
- {device.name}
337
- </span>
295
+ <div class="left flex">
296
+ <div class="title" title={device.name}>
297
+ 主设备:{device.name}
298
+ </div>
299
+ <div class="state">
300
+ 运行信号:
301
+ {getStatus(device.runStatus)}
302
+ </div>
303
+ </div>
338
304
 
339
305
  <Button
340
306
  type="link"
341
307
  onClick={() => {
342
308
  formState.value.deviceList.splice(index, 1);
309
+ formState.value.relevanceList = [];
343
310
  }}
344
311
  >
345
312
  <MinusSquareOutlined />
@@ -384,6 +351,75 @@ export default defineComponent({
384
351
  )}
385
352
  </div>
386
353
  )}
354
+
355
+ {formState.value.relevanceList.length > 0 && (
356
+ <div class="relevanceBox">
357
+ {formState.value.relevanceList.map(
358
+ (relevance: any, index: number) => (
359
+ <div class="relevance" key={relevance.id}>
360
+ <div class="titleLine flex-center">
361
+ <div class="left flex">
362
+ <div class="title" title={relevance.name}>
363
+ {relevance.relevanceType}设备:
364
+ {relevance.name}
365
+ </div>
366
+ <div class="state">
367
+ 运行信号:
368
+ {getStatus(relevance.runStatus)}
369
+ </div>
370
+ </div>
371
+
372
+ <Button
373
+ type="link"
374
+ onClick={() => {
375
+ formState.value.relevanceList.splice(
376
+ index,
377
+ 1
378
+ );
379
+ }}
380
+ >
381
+ <MinusSquareOutlined />
382
+ </Button>
383
+ </div>
384
+
385
+ <div class="loop">
386
+ <FormItem
387
+ name={["relevanceList", index, "loopIds"]}
388
+ rules={{
389
+ required: true,
390
+ message: "请选择",
391
+ }}
392
+ >
393
+ <a-checkbox-group
394
+ v-model={[relevance.loopIds, "value"]}
395
+ style="width: 100%; max-height: 110px; overflow-y: auto;"
396
+ >
397
+ <a-row>
398
+ <a-col span="3">
399
+ <div class="title">控制回路</div>
400
+ </a-col>
401
+ {relevance?.list?.map(
402
+ (loop: any, idx: number) => (
403
+ <a-col span="7">
404
+ <a-checkbox
405
+ key={loop.key}
406
+ value={loop.key}
407
+ >
408
+ {/* {loop.key}-{loop.value} */}
409
+ {loop.value}
410
+ </a-checkbox>
411
+ </a-col>
412
+ )
413
+ )}
414
+ </a-row>
415
+ </a-checkbox-group>
416
+ </FormItem>
417
+ </div>
418
+ </div>
419
+ )
420
+ )}
421
+ </div>
422
+ )}
387
423
  </div>
388
424
  </FormItem>
389
425
 
@@ -472,143 +508,15 @@ export default defineComponent({
472
508
  </div>
473
509
  </Modal>
474
510
 
475
- <Modal
476
- v-model={[eqModal.visible, "visible"]}
477
- title="添加设备"
478
- width="1200px"
479
- wrapClassName="newOrder_device_modal"
480
- onCancel={cancelAddEq}
481
- v-slots={{
482
- footer: () => (
483
- <div class="modal_footer">
484
- <Button type="primary" onClick={sureAddEq}>
485
- 确定
486
- </Button>
487
- <Button onClick={cancelAddEq}>取消</Button>
488
- </div>
489
- ),
511
+ <SelectDevice
512
+ v-model={[showDevice.value, "showDevice"]}
513
+ currentRow={currentRow.value}
514
+ oldDeviceList={formState.value.deviceList}
515
+ oldRelevanceList={formState.value.relevanceList}
516
+ onToUpdate={(deviceList, relevanceList) => {
517
+ toUpdateDevice(deviceList, relevanceList);
490
518
  }}
491
- >
492
- <div class="deviceModal_content flex" style="">
493
- <div class="left flex flex1">
494
- <Form
495
- ref={searchFormRef}
496
- model={searchForm}
497
- labelCol={{ span: 8 }}
498
- wrapperCol={{ span: 16 }}
499
- labelAlign="right"
500
- onSubmit={searchDeviceList}
501
- >
502
- <Row gutter={24}>
503
- <Col span={8}>
504
- <FormItem label="设备名称" name="deviceName">
505
- <a-input
506
- v-model={[searchForm.deviceName, "value"]}
507
- placeholder="请输入"
508
- allow-clear
509
- ></a-input>
510
- </FormItem>
511
- </Col>
512
- <Col span={8}>
513
- <FormItem label="设备编码" name="deviceCode">
514
- <a-input
515
- v-model={[searchForm.deviceCode, "value"]}
516
- placeholder="请输入"
517
- allow-clear
518
- ></a-input>
519
- </FormItem>
520
- </Col>
521
- <Col span={8} class="align-r">
522
- <a-space>
523
- <a-button type="primary" html-type="submit">
524
- 查询
525
- </a-button>
526
-
527
- <a-button
528
- onClick={() => {
529
- searchFormRef.value.resetFields();
530
- searchDeviceList();
531
- }}
532
- >
533
- 重置
534
- </a-button>
535
- </a-space>
536
- </Col>
537
- </Row>
538
- </Form>
539
-
540
- <div class="tableBox">
541
- <Table
542
- pagination={false}
543
- columns={eqModal.columns}
544
- dataSource={eqModal.dataSource}
545
- // class="cus-table"
546
- rowKey="id"
547
- loading={devicesLoading.value}
548
- rowSelection={{
549
- onChange: onSelectEq,
550
- selectedRowKeys: selectRows.value,
551
- type: "checkbox",
552
- getCheckboxProps: (record: any) => {
553
- const oldDeviceIdList = formState.value.deviceList.map(
554
- (device: any) => device.id
555
- );
556
-
557
- return {
558
- disabled: oldDeviceIdList.includes(record.id),
559
- name: record.name,
560
- };
561
- },
562
- }}
563
- ></Table>
564
- </div>
565
- </div>
566
-
567
- <div class="right flex">
568
- <div class="top flex-center">
569
- <div>已选{selectedList.value.length}台设备</div>
570
- <a-button
571
- type="link"
572
- onClick={() => {
573
- selectRows.value = [];
574
- selectedList.value = [];
575
- }}
576
- >
577
- 清空
578
- </a-button>
579
- </div>
580
-
581
- <div class="activedBox">
582
- {selectedList.value.map((selected: any, idx: number) => {
583
- // const name = `${selected.code}${selected.name}`;
584
- const name = selected.name;
585
- const textLength = 10;
586
- const title = name.length > textLength ? name : "";
587
- return (
588
- <a-tag
589
- class="tag"
590
- title={title}
591
- key={selected.id}
592
- closable
593
- onClose={() => {
594
- const index = selectedList.value.findIndex(
595
- (item: any) => item.id === selected.id
596
- );
597
- selectRows.value.splice(index, 1);
598
-
599
- selectedList.value.splice(idx, 1);
600
- }}
601
- >
602
- {name.length > textLength
603
- ? `${name.slice(0, textLength)}...`
604
- : name}
605
- </a-tag>
606
- );
607
- })}
608
- </div>
609
- </div>
610
- </div>
611
- </Modal>
519
+ />
612
520
  </div>
613
521
  );
614
522
  },
@@ -10,6 +10,8 @@ import Info from "@/pageComponent/views/pss/components/Info";
10
10
 
11
11
  import dayjs, { Dayjs } from "dayjs";
12
12
 
13
+ import { getStatus } from "../utils";
14
+
13
15
  import pssApi from "@/api/pss";
14
16
 
15
17
  const Format = "YYYY-MM-DD HH:mm";
@@ -220,6 +222,11 @@ export default defineComponent({
220
222
  // key: "numAndName",
221
223
  width: 200,
222
224
  },
225
+ {
226
+ key: "runStatus",
227
+ title: "运行信号",
228
+ width: 100,
229
+ },
223
230
  {
224
231
  title: "回路数量",
225
232
  key: "loopsNum",
@@ -747,6 +754,11 @@ export default defineComponent({
747
754
  // );
748
755
  // }
749
756
 
757
+ // 运行信号
758
+ if (column.key === "runStatus") {
759
+ return getStatus(record.runStatus);
760
+ }
761
+
750
762
  // 回路数量
751
763
  if (column.key === "loopsNum") {
752
764
  return <span>{record.loops.length}个</span>;