Explorar el Código

新增设备审批里安排设备的操作;新增设备审批保存按钮;新增用车审批保存按钮;修改项目台账里流程图异常

余思翰 hace 10 meses
padre
commit
ffb6f65861

+ 2
- 2
oa-back/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/FlowTaskServiceImpl.java Ver fichero

1392
      * @return
1392
      * @return
1393
      */
1393
      */
1394
     @Override
1394
     @Override
1395
-    public AjaxResult flowXmlAndNodeByFormIdAndName(String formId, String id) {
1395
+    public AjaxResult flowXmlAndNodeByFormIdAndName(String formId, String name) {
1396
         try {
1396
         try {
1397
             List<FlowVarInst> flowVarInst = flowVarInstMapper.selectProcInstByVar(formId);
1397
             List<FlowVarInst> flowVarInst = flowVarInstMapper.selectProcInstByVar(formId);
1398
-            List<FlowProcDefDto> flowProcDefList = flowDeployMapper.selectDeployListById(id);
1398
+            List<FlowProcDefDto> flowProcDefList = flowDeployMapper.selectDeployListById(name);
1399
             AjaxResult result = flowXmlAndNode(flowVarInst.get(0).getProcInstId(), flowProcDefList.get(0).getDeploymentId());
1399
             AjaxResult result = flowXmlAndNode(flowVarInst.get(0).getProcInstId(), flowProcDefList.get(0).getDeploymentId());
1400
             if (result.isSuccess()) {
1400
             if (result.isSuccess()) {
1401
                 result.put("procInsId", flowVarInst.get(0).getProcInstId());
1401
                 result.put("procInsId", flowVarInst.get(0).getProcInstId());

+ 1
- 5
oa-back/ruoyi-system/src/main/resources/mapper/flowable/FlowDeployMapper.xml Ver fichero

41
         FROM
41
         FROM
42
             ACT_RE_PROCDEF rp
42
             ACT_RE_PROCDEF rp
43
                 LEFT JOIN ACT_RE_DEPLOYMENT rd ON rp.deployment_id_ = rd.id_
43
                 LEFT JOIN ACT_RE_DEPLOYMENT rd ON rp.deployment_id_ = rd.id_
44
-        <where>
45
-            <if test="id != null and id != ''">
46
-               and rd.id_ like concat('%', #{id}, '%')
47
-            </if>
48
-        </where>
44
+        where rd.id_ = #{param}
49
         order by rd.id_ asc
45
         order by rd.id_ asc
50
     </select>
46
     </select>
51
 
47
 

+ 58
- 14
oa-ui/src/views/flowable/form/budget/components/chooseDevice.vue Ver fichero

2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-03-27 11:10:26
3
  * @Date: 2024-03-27 11:10:26
4
  * @LastEditors: Please set LastEditors
4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-07-15 17:35:10
5
+ * @LastEditTime: 2024-07-29 11:19:05
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div>
8
   <div>
9
     <el-form :inline="true">
9
     <el-form :inline="true">
10
+      <el-form-item label="出厂编号:">
11
+        <el-input v-model="queryParams.code" clearable @keyup.enter.native="getList"></el-input>
12
+      </el-form-item>
10
       <el-form-item label="设备状态:">
13
       <el-form-item label="设备状态:">
11
         <el-select v-model="queryParams.status" filterable clearable @change="getList">
14
         <el-select v-model="queryParams.status" filterable clearable @change="getList">
12
           <el-option :value="'0'" label="被领用"></el-option>
15
           <el-option :value="'0'" label="被领用"></el-option>
26
       <el-form-item label="品牌:">
29
       <el-form-item label="品牌:">
27
         <el-input v-model="queryParams.brand" clearable @keyup.enter.native="getList"></el-input>
30
         <el-input v-model="queryParams.brand" clearable @keyup.enter.native="getList"></el-input>
28
       </el-form-item>
31
       </el-form-item>
29
-      <el-form-item label="出厂编号:">
30
-        <el-input v-model="queryParams.code" clearable @keyup.enter.native="getList"></el-input>
31
-      </el-form-item>
32
       <el-form-item>
32
       <el-form-item>
33
         <el-button @click="getList" type="primary">搜索</el-button>
33
         <el-button @click="getList" type="primary">搜索</el-button>
34
       </el-form-item>
34
       </el-form-item>
35
     </el-form>
35
     </el-form>
36
-    <el-table ref="chooseCar" :data="list" @selection-change="handleSelectionChange" :row-key="getRowKeys">
37
-      <el-table-column type="selection" width="50" align="center" :reserve-selection="true" />
36
+    <el-table ref="chooseDevice" :data="list" @selection-change="handleSelectionChange" :row-key="getRowKeys"
37
+      @current-change="handleCurrentChange" @row-dblclick="confirmChooseBySingle" :highlight-current-row="!multiple">
38
+      <el-table-column type="selection" width="50" align="center" :reserve-selection="true" v-if="multiple" />
38
       <el-table-column label="设备状态" align="center" prop="status">
39
       <el-table-column label="设备状态" align="center" prop="status">
39
         <template slot-scope="scope">
40
         <template slot-scope="scope">
40
           <el-tag :type="statusType(scope.row.status)">
41
           <el-tag :type="statusType(scope.row.status)">
56
     </div>
57
     </div>
57
     <div>
58
     <div>
58
       已选设备:
59
       已选设备:
59
-      <el-tag v-for="item in chooseList" style="margin: 5px;" :key="item.deviceIdId">
60
+      <el-tag v-if="multiple" v-for="item in chooseList" style="margin: 5px;" :key="item.deviceIdId">
60
         {{ item.name + '-' + item.series + '-' + item.brand }}
61
         {{ item.name + '-' + item.series + '-' + item.brand }}
61
       </el-tag>
62
       </el-tag>
63
+      <el-tag v-if="!multiple" style="margin: 5px;">{{ chooseList.name + '-' + chooseList.series + '-' +
64
+      chooseList.brand
65
+        }}</el-tag>
62
       <div style="text-align: center;margin-top: 20px;">
66
       <div style="text-align: center;margin-top: 20px;">
63
         <el-button type="primary" @click="confirmChoose">确认选择</el-button>
67
         <el-button type="primary" @click="confirmChoose">确认选择</el-button>
64
         <el-button @click="clearChoose">清空选择</el-button>
68
         <el-button @click="clearChoose">清空选择</el-button>
68
 </template>
72
 </template>
69
 
73
 
70
 <script>
74
 <script>
71
-import { listDevice,listDeviceName } from "@/api/oa/device/device";
75
+import { listDevice, listDeviceName } from "@/api/oa/device/device";
76
+import { multiply } from 'ol/transform';
72
 export default {
77
 export default {
78
+  props: {
79
+    multiple: {
80
+      type: Boolean,
81
+      default: true
82
+    }
83
+  },
84
+  watch: {
85
+    multiple(newval) {
86
+      if (newval) {
87
+        this.chooseList = []
88
+      } else {
89
+        this.chooseList = {}
90
+      }
91
+      this.getList();
92
+      this.getNameList();
93
+    }
94
+  },
73
   data() {
95
   data() {
74
     return {
96
     return {
75
       queryParams: {
97
       queryParams: {
76
         pageNum: 1,
98
         pageNum: 1,
77
         pageSize: 10,
99
         pageSize: 10,
78
-        type: '仪器设备'
100
+        type: '仪器设备',
101
+        status: '1'
79
       },
102
       },
80
       list: [],
103
       list: [],
81
       form: {},
104
       form: {},
82
       total: 0,
105
       total: 0,
83
       loading: false,
106
       loading: false,
84
-      chooseList: [],
107
+      chooseList: undefined,
85
       nameList: [],
108
       nameList: [],
86
     }
109
     }
87
   },
110
   },
88
   created() {
111
   created() {
112
+    if (this.multiply) {
113
+      this.chooseList = []
114
+    } else {
115
+      this.chooseList = {}
116
+    }
89
     this.getList();
117
     this.getList();
90
     this.getNameList();
118
     this.getNameList();
91
   },
119
   },
96
         this.list = response.rows;
124
         this.list = response.rows;
97
         this.total = response.total;
125
         this.total = response.total;
98
         this.loading = false;
126
         this.loading = false;
127
+        this.clearChoose();
99
       });
128
       });
100
     },
129
     },
101
-    getNameList(){
102
-      listDeviceName().then(res=>{
130
+    getNameList() {
131
+      listDeviceName().then(res => {
103
         this.nameList = res.data
132
         this.nameList = res.data
104
       })
133
       })
105
     },
134
     },
106
     handleSelectionChange(val) {
135
     handleSelectionChange(val) {
107
       this.chooseList = val
136
       this.chooseList = val
108
     },
137
     },
138
+    handleCurrentChange(val) {
139
+      if (!this.multiple) {
140
+        this.chooseList = val
141
+      }
142
+    },
109
     getRowKeys(row) {
143
     getRowKeys(row) {
110
       return row.deviceId;
144
       return row.deviceId;
111
     },
145
     },
112
     confirmChoose() {
146
     confirmChoose() {
113
       this.$emit('chooseList', this.chooseList)
147
       this.$emit('chooseList', this.chooseList)
114
     },
148
     },
149
+    confirmChooseBySingle() {
150
+      if (!this.multiple) {
151
+        if (this.chooseList)
152
+          this.$emit('chooseList', this.chooseList)
153
+      }
154
+    },
115
     clearChoose() {
155
     clearChoose() {
116
-      this.$refs.chooseCar.clearSelection();
156
+      if (this.multiple)
157
+        this.$refs.chooseDevice.clearSelection();
158
+      else {
159
+        this.chooseDevice = {}
160
+      }
117
     },
161
     },
118
     statusTypeText(row) {
162
     statusTypeText(row) {
119
       if (row == '0') {
163
       if (row == '0') {
132
         return '已报废'
176
         return '已报废'
133
       }
177
       }
134
     },
178
     },
135
-    statusType(row){
179
+    statusType(row) {
136
       if (row == '0') {
180
       if (row == '0') {
137
         return 'warning'
181
         return 'warning'
138
       }
182
       }

+ 60
- 21
oa-ui/src/views/flowable/form/oa/carForm.vue Ver fichero

2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-02-29 11:44:28
3
  * @Date: 2024-02-29 11:44:28
4
  * @LastEditors: Please set LastEditors
4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-07-23 10:23:54
5
+ * @LastEditTime: 2024-07-29 17:04:01
6
 -->
6
 -->
7
 
7
 
8
 <template>
8
 <template>
209
                 </el-col>
209
                 </el-col>
210
               </el-row>
210
               </el-row>
211
               <!-- 综合事务部管理人员填写 -->
211
               <!-- 综合事务部管理人员填写 -->
212
-              <el-form-item label="车牌号:">
212
+              <el-form-item label="车牌号:" prop="cars">
213
                 <el-checkbox-group v-model="form.cars" :disabled="taskName != '安排用车'">
213
                 <el-checkbox-group v-model="form.cars" :disabled="taskName != '安排用车'">
214
                   <el-checkbox :label="item.carId" v-for="item in carList" :key="item.carId" :value="item.carId"
214
                   <el-checkbox :label="item.carId" v-for="item in carList" :key="item.carId" :value="item.carId"
215
                     v-if="item.remark == null">
215
                     v-if="item.remark == null">
217
                   </el-checkbox>
217
                   </el-checkbox>
218
                 </el-checkbox-group>
218
                 </el-checkbox-group>
219
               </el-form-item>
219
               </el-form-item>
220
-              <el-form-item label="驾驶员:">
220
+              <el-form-item label="驾驶员:" prop="drivers">
221
                 <el-tag :key="'d' + index" class="mr10" v-for="item, index in chooseDriver">{{ item.nickName }}</el-tag>
221
                 <el-tag :key="'d' + index" class="mr10" v-for="item, index in chooseDriver">{{ item.nickName }}</el-tag>
222
                 <el-button v-if="taskName == '安排用车'" icon="el-icon-plus" @click="openCar = true"></el-button>
222
                 <el-button v-if="taskName == '安排用车'" icon="el-icon-plus" @click="openCar = true"></el-button>
223
-                <el-select v-if="taskName != '安排用车'" v-model="form.drivers" filterable multiple clearable
223
+                <!-- <el-select v-if="taskName != '安排用车'" v-model="form.drivers" filterable multiple clearable
224
                   style="width:420px" :disabled="taskName != '安排用车'">
224
                   style="width:420px" :disabled="taskName != '安排用车'">
225
                   <el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId"
225
                   <el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId"
226
                     v-if="item.nickName != 'admin'">
226
                     v-if="item.nickName != 'admin'">
227
                   </el-option>
227
                   </el-option>
228
-                </el-select>
228
+                </el-select> -->
229
               </el-form-item>
229
               </el-form-item>
230
               <el-row>
230
               <el-row>
231
                 <el-col :span="12" :xs="24">
231
                 <el-col :span="12" :xs="24">
233
                     <!-- <el-date-picker v-model="form.returnDate" clearable type="datetime" value-format="yyyy-MM-dd-HH-mm"
233
                     <!-- <el-date-picker v-model="form.returnDate" clearable type="datetime" value-format="yyyy-MM-dd-HH-mm"
234
                       placeholder="选择日期" :disabled="taskName != '安排用车'">
234
                       placeholder="选择日期" :disabled="taskName != '安排用车'">
235
                     </el-date-picker> -->
235
                     </el-date-picker> -->
236
-                    <el-date-picker v-model="form.returnDate" type="datetime" placeholder="选择日期时间" format="yyyy-MM-dd HH:mm" value-format="yyyy-MM-dd HH:mm" :disabled="taskName != '安排用车'">
236
+                    <el-date-picker v-model="form.returnDate" type="datetime" placeholder="选择日期时间"
237
+                      format="yyyy-MM-dd HH:mm" value-format="yyyy-MM-dd HH:mm" :disabled="taskName != '安排用车'">
237
                     </el-date-picker>
238
                     </el-date-picker>
238
                   </el-form-item>
239
                   </el-form-item>
239
                 </el-col>
240
                 </el-col>
250
               <el-button type="primary" @click="submit">提交申请</el-button>
251
               <el-button type="primary" @click="submit">提交申请</el-button>
251
             </el-row>
252
             </el-row>
252
             <el-row style="text-align: center;" v-else>
253
             <el-row style="text-align: center;" v-else>
254
+              <el-button type="warning" @click="saves()" v-if="taskName == '安排用车'">保存</el-button>
253
               <el-button type="primary" v-if="taskName" @click="completeApply">完成审批</el-button>
255
               <el-button type="primary" v-if="taskName" @click="completeApply">完成审批</el-button>
254
             </el-row>
256
             </el-row>
255
           </div>
257
           </div>
284
 import { getUsersDeptLeader, getUsersManageLeader, getDeptLeaders } from '@/api/system/post.js'
286
 import { getUsersDeptLeader, getUsersManageLeader, getDeptLeaders } from '@/api/system/post.js'
285
 import flow from '@/views/flowable/task/todo/detail/flow'
287
 import flow from '@/views/flowable/task/todo/detail/flow'
286
 import { flowXmlAndNode } from "@/api/flowable/definition";
288
 import { flowXmlAndNode } from "@/api/flowable/definition";
287
-import { listUser } from '@/api/system/user';
289
+import { listUser,getUser } from '@/api/system/user';
288
 import { getUserByRole } from "@/api/system/role";
290
 import { getUserByRole } from "@/api/system/role";
289
 import chooseUser from "@/views/flowable/form/budget/components/choosePeople.vue";
291
 import chooseUser from "@/views/flowable/form/budget/components/choosePeople.vue";
290
 import projectChoose from '@/views/flowable/form/components/chooseProject.vue';
292
 import projectChoose from '@/views/flowable/form/components/chooseProject.vue';
293
+import { number } from 'echarts';
291
 export default {
294
 export default {
292
   components: {
295
   components: {
293
     flow,
296
     flow,
403
     initRules() {
406
     initRules() {
404
       if (this.taskName == '用车申请') {
407
       if (this.taskName == '用车申请') {
405
         this.rules = {
408
         this.rules = {
406
-          projectNumber: [
407
-            { required: true, message: '请选择项目编号', trigger: 'change' },
409
+          projectId: [
410
+            { required: true, message: '请选择项目', trigger: 'blur' },
408
           ],
411
           ],
409
           passengers: [
412
           passengers: [
410
             { required: true, message: '请选择输入乘车人数', trigger: 'change' },
413
             { required: true, message: '请选择输入乘车人数', trigger: 'change' },
453
         this.rules = {
456
         this.rules = {
454
           dispatchComment: [
457
           dispatchComment: [
455
             { required: true, message: '请输入安排用车意见', trigger: 'blur' }
458
             { required: true, message: '请输入安排用车意见', trigger: 'blur' }
459
+          ],
460
+          cars: [
461
+            { required: true, message: '请选择车牌号', trigger: 'change' }
462
+          ],
463
+          drivers: [
464
+            { required: true, message: '请选择驾驶员', trigger: 'blur' }
465
+          ],
466
+          returnDate: [
467
+            { required: true, message: '请选择返回时间', trigger: 'change' }
468
+          ],
469
+          kilometers: [
470
+            { required: true, message: '请输入行驶公里', trigger: 'blur' }
456
           ]
471
           ]
457
         }
472
         }
458
       }
473
       }
492
               arr.push(parseInt(driver))
507
               arr.push(parseInt(driver))
493
             }
508
             }
494
             data.drivers = arr
509
             data.drivers = arr
510
+            this.chooseDriver = [];
511
+            for(let d of arr){
512
+              getUser(Number(d)).then(res=>{
513
+                this.chooseDriver.push(res.data)
514
+              })
515
+            }
495
           }
516
           }
496
           if (res.data.cars == null || res.data.cars == undefined || res.data.cars == "") {
517
           if (res.data.cars == null || res.data.cars == undefined || res.data.cars == "") {
497
             data.cars = []
518
             data.cars = []
537
             this.taskForm.formData = formData;
558
             this.taskForm.formData = formData;
538
             this.getNextFlowNodeApproval();
559
             this.getNextFlowNodeApproval();
539
           })
560
           })
561
+        } else {
562
+          this.$message.error('必填项未填写完毕')
540
         }
563
         }
541
       })
564
       })
542
     },
565
     },
543
-    completeApply() {
544
-      this.form.formId = this.taskForm.formId;
545
-      this.form.carApplyId = this.taskForm.formId;
566
+    saves() {
546
       let formData = new FormData();
567
       let formData = new FormData();
547
       let jsonForm = JSON.stringify(this.form);
568
       let jsonForm = JSON.stringify(this.form);
548
       formData.append("form", jsonForm);
569
       formData.append("form", jsonForm);
549
-      modifyCarApproval(formData);
550
-      const params = { taskId: this.taskForm.taskId };
551
-      // 获取下一个流程节点
552
-      getNextFlowNode(params).then(res => {
553
-        const data = res.data;
554
-        this.taskForm.formData = formData;
555
-        this.getNextFlowNodeApproval();
570
+      modifyCarApproval(formData).then(res=>{
571
+        this.$message.success('保存成功')
572
+      });
573
+    },
574
+    completeApply() {
575
+      this.$refs['carForm'].validate((valid) => {
576
+        if (valid) {
577
+          this.form.formId = this.taskForm.formId;
578
+          this.form.carApplyId = this.taskForm.formId;
579
+          let formData = new FormData();
580
+          let jsonForm = JSON.stringify(this.form);
581
+          formData.append("form", jsonForm);
582
+          modifyCarApproval(formData);
583
+          const params = { taskId: this.taskForm.taskId };
584
+          // 获取下一个流程节点
585
+          getNextFlowNode(params).then(res => {
586
+            const data = res.data;
587
+            this.taskForm.formData = formData;
588
+            this.getNextFlowNodeApproval();
589
+          })
590
+        } else {
591
+          this.$message.error('必填项未填写完毕')
592
+        }
556
       })
593
       })
557
     },
594
     },
558
     // 获取下一个审批人
595
     // 获取下一个审批人
689
         for (let d of this.chooseDriver) {
726
         for (let d of this.chooseDriver) {
690
           drivers.push(d.userId)
727
           drivers.push(d.userId)
691
         }
728
         }
692
-        this.form.drivers = drivers;
729
+        this.$set(this.form, 'drivers', drivers);
730
+        this.$refs.carForm.validateField('drivers');
693
       }
731
       }
694
       this.openCar = false;
732
       this.openCar = false;
695
     },
733
     },
700
       } else if (val.length == 1) {
738
       } else if (val.length == 1) {
701
         this.chooseProject = val[0]
739
         this.chooseProject = val[0]
702
         this.isSelect = true
740
         this.isSelect = true
703
-        this.form.projectId = val[0].projectId
741
+        this.$set(this.form, 'projectId', val[0].projectId);
742
+        this.$refs.carForm.validateField('projectId');
704
       }
743
       }
705
       this.openProject = false
744
       this.openProject = false
706
     },
745
     },

+ 103
- 52
oa-ui/src/views/flowable/form/oa/deviceForm.vue Ver fichero

1
 <!--
1
 <!--
2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-03-07 13:44:39
3
  * @Date: 2024-03-07 13:44:39
4
- * @LastEditors: wrh
5
- * @LastEditTime: 2024-07-26 13:54:55
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-07-29 15:41:35
6
 -->
6
 -->
7
 
7
 
8
 <template>
8
 <template>
18
               <el-row :gutter="20">
18
               <el-row :gutter="20">
19
                 <el-col :span="6" :xs="24">
19
                 <el-col :span="6" :xs="24">
20
                   <el-form-item label="申请人:" prop="user.nickName">
20
                   <el-form-item label="申请人:" prop="user.nickName">
21
-                    <!-- <el-input v-model="form.user"></el-input> -->
22
                     {{ form.applierUser ? form.applierUser.nickName : form.user.nickName }}
21
                     {{ form.applierUser ? form.applierUser.nickName : form.user.nickName }}
23
                   </el-form-item>
22
                   </el-form-item>
24
                 </el-col>
23
                 </el-col>
25
                 <el-col :span="6" :xs="24">
24
                 <el-col :span="6" :xs="24">
26
                   <el-form-item label="所在部门:" prop="dept.deptName">
25
                   <el-form-item label="所在部门:" prop="dept.deptName">
27
-                    <!-- <el-input v-model="form.deptName"></el-input> -->
28
                     {{ form.dept.deptName }}
26
                     {{ form.dept.deptName }}
29
                   </el-form-item>
27
                   </el-form-item>
30
                 </el-col>
28
                 </el-col>
39
               <el-form-item label="项目编号:" prop="projectId">
37
               <el-form-item label="项目编号:" prop="projectId">
40
                 <el-button type="primary" size="mini" @click="openProject = true"
38
                 <el-button type="primary" size="mini" @click="openProject = true"
41
                   v-if="taskName == '设备申请'">选择项目</el-button>
39
                   v-if="taskName == '设备申请'">选择项目</el-button>
42
-                <!-- <el-select v-model="form.projectId" filterable allow-create placeholder="请选择"
43
-                  @change="handleSelectProject" clearable :disabled="taskName != '设备申请'">
44
-                  <el-option v-for="item in projectList" :key="item.value" :label="item.projectNumber"
45
-                    :value="item.projectId">
46
-                  </el-option>
47
-                </el-select> -->
48
                 <el-descriptions border v-if="isSelect" style="margin-top: 10px;" :column="1">
40
                 <el-descriptions border v-if="isSelect" style="margin-top: 10px;" :column="1">
49
                   <el-descriptions-item label="项目编号" label-class-name="my-label">{{ chooseProject.projectNumber
41
                   <el-descriptions-item label="项目编号" label-class-name="my-label">{{ chooseProject.projectNumber
50
                     }}</el-descriptions-item>
42
                     }}</el-descriptions-item>
60
                     }}</el-descriptions-item>
52
                     }}</el-descriptions-item>
61
                 </el-descriptions>
53
                 </el-descriptions>
62
               </el-form-item>
54
               </el-form-item>
63
-              <el-form-item label="设备选择:">
64
-                <!-- <el-select style="width: 90%;" v-model="form.devices" filterable multiple placeholder="请选择" clearable
65
-                  disabled>
66
-                  <el-option v-for="item in deviceList" :key="item.deviceId" :disabled="item.status != 1" :label="item.name + '【' + (item.brand != null ? item.brand : '') + (item.series != null ? '-' + item.series + '】' : '')
67
-      + (item.code != null ? '(设备编号:' + item.code + ')' : '')" :value="item.deviceId">
68
-                  </el-option>
69
-                </el-select> -->
55
+              <el-form-item label="设备选择:" prop="devices">
70
                 <el-button type="primary" icon="el-icon-plus" size="mini" @click="openDevice = true"
56
                 <el-button type="primary" icon="el-icon-plus" size="mini" @click="openDevice = true"
71
                   :disabled="taskName != '设备申请'">选择设备</el-button>
57
                   :disabled="taskName != '设备申请'">选择设备</el-button>
72
                 <el-table :data="deviceList">
58
                 <el-table :data="deviceList">
73
                   <el-table-column label="序号" type="index" />
59
                   <el-table-column label="序号" type="index" />
60
+                  <el-table-column label="出厂编号" align="center" prop="code" />
74
                   <el-table-column label="设备品牌" align="center" prop="brand" />
61
                   <el-table-column label="设备品牌" align="center" prop="brand" />
75
                   <el-table-column label="设备名称" align="center" prop="name" />
62
                   <el-table-column label="设备名称" align="center" prop="name" />
76
                   <el-table-column label="规格型号" align="center" prop="series" />
63
                   <el-table-column label="规格型号" align="center" prop="series" />
77
-                  <el-table-column label="出厂编号" align="center" prop="code" />
78
                   <el-table-column label="存放地址" align="center" prop="place" />
64
                   <el-table-column label="存放地址" align="center" prop="place" />
79
                 </el-table>
65
                 </el-table>
80
               </el-form-item>
66
               </el-form-item>
106
               </el-row>
92
               </el-row>
107
               <!-- 安排设备意见 -->
93
               <!-- 安排设备意见 -->
108
               <el-divider></el-divider>
94
               <el-divider></el-divider>
109
-              <el-form-item label-width="120px" label="拟发放设备:">
110
-                <!-- <el-select style="width: 90%;" v-model="form.modifyDevices" filterable multiple placeholder="请选择"
111
-                  clearable disabled>
112
-                  <el-option v-for="item in deviceList" :key="item.deviceId" :disabled="item.status != 1" :label="item.name + '【' + (item.brand != null ? item.brand : '') + (item.series != null ? '-' + item.series + '】' : '')
113
-      + (item.code != null ? '(设备编号:' + item.code + ')' : '') + '📍' + item.place" :value="item.deviceId">
114
-                  </el-option>
115
-                </el-select> -->
116
-                <el-button type="primary" icon="el-icon-plus" size="mini" @click="openDevice = true"
117
-                  :disabled="taskName != '安排设备'">选择设备</el-button>
95
+              <el-form-item label-width="120px" label="拟发放设备:" prop="modifyDevices">
118
                 <el-table :data="modifyDeviceList">
96
                 <el-table :data="modifyDeviceList">
119
                   <el-table-column label="序号" type="index" />
97
                   <el-table-column label="序号" type="index" />
98
+                  <el-table-column label="出厂编号" align="center" prop="code" />
120
                   <el-table-column label="设备品牌" align="center" prop="brand" />
99
                   <el-table-column label="设备品牌" align="center" prop="brand" />
121
                   <el-table-column label="设备名称" align="center" prop="name" />
100
                   <el-table-column label="设备名称" align="center" prop="name" />
122
                   <el-table-column label="规格型号" align="center" prop="series" />
101
                   <el-table-column label="规格型号" align="center" prop="series" />
123
-                  <el-table-column label="出厂编号" align="center" prop="code" />
124
                   <el-table-column label="存放地址" align="center" prop="place" />
102
                   <el-table-column label="存放地址" align="center" prop="place" />
103
+                  <el-table-column label="操作" align="center" v-if="taskName == '安排设备'">
104
+                    <template slot-scope="scope">
105
+                      <el-button type="text" primary @click="replaceRowData(scope.row, scope.$index)">重新选择</el-button>
106
+                      <el-button type="text" style="color:#F56C6C"
107
+                        @click="deleteRowData(scope.row, scope.$index)">删除</el-button>
108
+                    </template>
109
+                  </el-table-column>
125
                 </el-table>
110
                 </el-table>
111
+                <el-button class="mt10" type="primary" size="mini" @click="addRowdata()" icon="el-icon-plus"
112
+                  :disabled="taskName != '安排设备'">新增设备</el-button>
126
               </el-form-item>
113
               </el-form-item>
127
               <el-form-item label="安排设备意见:" prop="dispatchComment" label-width="125px">
114
               <el-form-item label="安排设备意见:" prop="dispatchComment" label-width="125px">
128
                 <el-input type="textarea" :rows="3" placeholder="请输入安排设备意见" v-model="form.dispatchComment"
115
                 <el-input type="textarea" :rows="3" placeholder="请输入安排设备意见" v-model="form.dispatchComment"
185
               <el-button type="primary" @click="submit">提交申请</el-button>
172
               <el-button type="primary" @click="submit">提交申请</el-button>
186
             </el-row>
173
             </el-row>
187
             <el-row style="text-align: center;" v-else>
174
             <el-row style="text-align: center;" v-else>
188
-              <el-button type="primary" @click="completeApply" v-if="taskName">完成审批</el-button>
175
+              <el-button type="warning" @click="saves()">保存</el-button>
176
+              <el-button type="primary" @click="completeApply()" v-if="taskName">完成审批</el-button>
189
             </el-row>
177
             </el-row>
190
           </div>
178
           </div>
191
         </el-card>
179
         </el-card>
198
             <flow :flowData="flowData" />
186
             <flow :flowData="flowData" />
199
           </div>
187
           </div>
200
         </el-card>
188
         </el-card>
201
-
202
       </el-col>
189
       </el-col>
203
     </el-row>
190
     </el-row>
204
     <el-dialog title="选择项目" :visible.sync="openProject" width="70%" append-to-body>
191
     <el-dialog title="选择项目" :visible.sync="openProject" width="70%" append-to-body>
205
       <project-choose @chooseProject="confirmProject"></project-choose>
192
       <project-choose @chooseProject="confirmProject"></project-choose>
206
     </el-dialog>
193
     </el-dialog>
207
     <el-dialog title="选择仪器" :visible.sync="openDevice" width="70%" append-to-body>
194
     <el-dialog title="选择仪器" :visible.sync="openDevice" width="70%" append-to-body>
208
-      <choose-device @chooseList="confirmDevice"></choose-device>
195
+      <choose-device :multiple="multiple" @chooseList="confirmDevice"></choose-device>
209
     </el-dialog>
196
     </el-dialog>
210
   </div>
197
   </div>
211
 </template>
198
 </template>
297
       deviceList: [],
284
       deviceList: [],
298
       grantDeviceList: [],
285
       grantDeviceList: [],
299
       modifyDeviceList: [],
286
       modifyDeviceList: [],
300
-      formTotal: 0
287
+      formTotal: 0,
288
+      clicDevice: {},
289
+      clickRowIndex: 0,
290
+      multiple: true,
301
     }
291
     }
302
   },
292
   },
303
   mounted() {
293
   mounted() {
308
     initRules() {
298
     initRules() {
309
       if (this.taskName == '设备申请') {
299
       if (this.taskName == '设备申请') {
310
         this.rules = {
300
         this.rules = {
301
+          projectId: [
302
+            { required: true, message: '请选择项目', trigger: 'blur' },
303
+          ],
311
           devices: [
304
           devices: [
312
             { required: true, message: '请选择申请设备', trigger: 'change' },
305
             { required: true, message: '请选择申请设备', trigger: 'change' },
313
           ],
306
           ],
320
           applyReason: [
313
           applyReason: [
321
             { required: true, message: '请输入申领理由', trigger: 'blur' },
314
             { required: true, message: '请输入申领理由', trigger: 'blur' },
322
           ],
315
           ],
316
+          devices: [
317
+            { required: true, message: '请选择设备', trigger: 'blur' },
318
+          ]
323
         }
319
         }
324
       } else if (this.taskName == '分管审核') {
320
       } else if (this.taskName == '分管审核') {
325
         this.rules = {
321
         this.rules = {
369
           }
365
           }
370
           if (res.data.modifyDevices == null || res.data.modifyDevices == undefined || res.data.modifyDevices == "") {
366
           if (res.data.modifyDevices == null || res.data.modifyDevices == undefined || res.data.modifyDevices == "") {
371
             data.modifyDevices = []
367
             data.modifyDevices = []
372
-            this.modifyDeviceList = []
368
+            this.modifyDeviceList = this.deviceList
373
           } else {
369
           } else {
374
             data.modifyDevices = data.modifyDevices.split(',');
370
             data.modifyDevices = data.modifyDevices.split(',');
375
             let arr = []
371
             let arr = []
411
             this.taskForm.formData = formData;
407
             this.taskForm.formData = formData;
412
             this.getNextFlowNodeApproval();
408
             this.getNextFlowNodeApproval();
413
           })
409
           })
410
+        } else {
411
+          this.$message.error('必填项未填写完毕')
412
+        }
413
+      })
414
+    },
415
+    saves() {
416
+      this.$refs['deviceForm'].validate((valid) => {
417
+        if (valid) {
418
+          this.form.formId = this.taskForm.formId;
419
+          this.form.deviceApplyId = this.taskForm.formId;
420
+          let formData = new FormData();
421
+          let jsonForm = JSON.stringify(this.form);
422
+          formData.append("form", jsonForm);
423
+          if (this.formTotal != 0) {
424
+            modifyDeviceApproval(formData).then(res => {
425
+              this.$message.success('保存成功')
426
+            });
427
+          }
428
+        } else {
429
+          this.$message.error('必填项未填写完毕')
414
         }
430
         }
415
       })
431
       })
416
     },
432
     },
417
     completeApply() {
433
     completeApply() {
418
-      this.form.formId = this.taskForm.formId;
419
-      this.form.deviceApplyId = this.taskForm.formId;
420
-      let formData = new FormData();
421
-      let jsonForm = JSON.stringify(this.form);
422
-      formData.append("form", jsonForm);
423
-      modifyDeviceApproval(formData);
424
-      const params = { taskId: this.taskForm.taskId };
425
-      // 获取下一个流程节点
426
-      getNextFlowNode(params).then(res => {
427
-        const data = res.data;
428
-        this.taskForm.formData = formData;
429
-        this.getNextFlowNodeApproval();
434
+      this.$refs['deviceForm'].validate((valid) => {
435
+        if (valid) {
436
+          this.form.formId = this.taskForm.formId;
437
+          this.form.deviceApplyId = this.taskForm.formId;
438
+          let formData = new FormData();
439
+          let jsonForm = JSON.stringify(this.form);
440
+          formData.append("form", jsonForm);
441
+          modifyDeviceApproval(formData);
442
+          const params = { taskId: this.taskForm.taskId };
443
+          // 获取下一个流程节点
444
+          getNextFlowNode(params).then(res => {
445
+            const data = res.data;
446
+            this.taskForm.formData = formData;
447
+            this.getNextFlowNodeApproval();
448
+          })
449
+        } else {
450
+          this.$message.error('必填项未填写完毕')
451
+        }
430
       })
452
       })
431
     },
453
     },
432
     // 获取下一个审批人
454
     // 获取下一个审批人
537
       } else if (val.length == 1) {
559
       } else if (val.length == 1) {
538
         this.chooseProject = val[0]
560
         this.chooseProject = val[0]
539
         this.isSelect = true
561
         this.isSelect = true
540
-        this.form.projectId = val[0].projectId
562
+        this.$set(this.form, 'projectId', val[0].projectId);
563
+        this.$refs.deviceForm.validateField('projectId');
541
       }
564
       }
542
       this.openProject = false
565
       this.openProject = false
543
     },
566
     },
544
     confirmDevice(val) {
567
     confirmDevice(val) {
545
       if (val) {
568
       if (val) {
546
         let list = []
569
         let list = []
547
-        for (let v of val) {
548
-          list.push(v.deviceId)
549
-        }
550
         if (this.taskName == '设备申请') {
570
         if (this.taskName == '设备申请') {
551
-          this.form.devices = list
571
+          for (let v of val) {
572
+            list.push(v.deviceId)
573
+          }
574
+          this.$set(this.form, 'devices', list);
575
+          this.$refs.deviceForm.validateField('devices');
552
           this.deviceList = val;
576
           this.deviceList = val;
553
         } else if (this.taskName == '安排设备') {
577
         } else if (this.taskName == '安排设备') {
554
-          this.form.modifyDevices = list
555
-          this.modifyDeviceList = val;
578
+          if (!this.multiple) {
579
+            this.$set(this.modifyDeviceList, this.clickRowIndex, val);
580
+          } else {
581
+            for (let i of val) {
582
+              this.modifyDeviceList.push(i);
583
+            }
584
+          }
585
+          for (let j of this.modifyDeviceList) {
586
+            list.push(j.deviceId)
587
+          }
588
+          this.form.modifyDevices = list;
556
         }
589
         }
557
       }
590
       }
558
       this.openDevice = false;
591
       this.openDevice = false;
592
+    },
593
+    replaceRowData(row, rowIndex) {
594
+      this.openDevice = true;
595
+      this.clicDevice = row;
596
+      this.clickRowIndex = rowIndex;
597
+      this.multiple = false;
598
+    },
599
+    deleteRowData(row, rowIndex) {
600
+      let list = [];
601
+      this.modifyDeviceList = this.modifyDeviceList.slice(0, rowIndex).concat(this.modifyDeviceList.slice(rowIndex + 1));
602
+      for (let j of this.modifyDeviceList) {
603
+        list.push(j.deviceId)
604
+      }
605
+      this.form.modifyDevices = list;
606
+    },
607
+    addRowdata() {
608
+      this.openDevice = true;
609
+      this.multiple = true;
559
     }
610
     }
560
   },
611
   },
561
 }
612
 }

+ 15
- 7
oa-ui/src/views/flowable/form/projectProcess/technicalTab.vue Ver fichero

17
           </el-select>
17
           </el-select>
18
         </el-form-item>
18
         </el-form-item>
19
         <el-form-item label="技术交底内容" prop="content">
19
         <el-form-item label="技术交底内容" prop="content">
20
-          <el-input v-model="form.content" placeholder="请输入技术交底内容" type="textarea"
21
-            :autosize="{ minRows: 8 }" />
20
+          <el-input v-model="form.content" placeholder="请输入技术交底内容" type="textarea" :autosize="{ minRows: 8 }" />
22
         </el-form-item>
21
         </el-form-item>
23
         <el-form-item label="附件" prop="document">
22
         <el-form-item label="附件" prop="document">
24
-          <el-input v-model="form.document" placeholder="请输入附件" type="textarea"
25
-            :autosize="{ minRows: 8 }" />
23
+          <div v-if="form.document">
24
+            <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + form.document}`)">
25
+              {{ getFileName(form.document) }}
26
+            </el-link>
27
+            <el-link class="ml20" type="warning" :href="`${baseUrl}${'/profile/upload' + form.document}`"
28
+              :underline="false" target="_blank">
29
+              <span class="el-icon-download">下载文件</span>
30
+            </el-link>
31
+          </div>
26
         </el-form-item>
32
         </el-form-item>
27
         <el-form-item label="技术交底意见" prop="disclosureComment">
33
         <el-form-item label="技术交底意见" prop="disclosureComment">
28
-          <el-input v-model="form.disclosureComment" placeholder="请输入技术交底意见" type="textarea" :autosize="{ minRows: 4 }" />
34
+          <el-input v-model="form.disclosureComment" placeholder="请输入技术交底意见" type="textarea"
35
+            :autosize="{ minRows: 4 }" />
29
         </el-form-item>
36
         </el-form-item>
30
         <el-row>
37
         <el-row>
31
           <el-col :span="6" :xs="24" :offset="12">
38
           <el-col :span="6" :xs="24" :offset="12">
86
     projectName(newval) {
93
     projectName(newval) {
87
       this.$set(this.form, "projectName", newval);
94
       this.$set(this.form, "projectName", newval);
88
     },
95
     },
89
-    'taskForm.formId'(){
96
+    'taskForm.formId'() {
90
       this.loading = true;
97
       this.loading = true;
91
       this.initForm();
98
       this.initForm();
92
     }
99
     }
93
   },
100
   },
94
   data() {
101
   data() {
95
     return {
102
     return {
103
+      baseUrl: process.env.VUE_APP_BASE_API,
96
       isEmpty: true,
104
       isEmpty: true,
97
       form: {},
105
       form: {},
98
       rules: {},
106
       rules: {},
99
       userList: [],
107
       userList: [],
100
-      loading:false,
108
+      loading: false,
101
     }
109
     }
102
   },
110
   },
103
   mounted() {
111
   mounted() {

+ 3
- 3
oa-ui/src/views/oa/project/info.vue Ver fichero

740
     },
740
     },
741
     async clickProcess() {
741
     async clickProcess() {
742
       if (this.$route.query.projectId) {
742
       if (this.$route.query.projectId) {
743
-        let resData = await flowXmlAndNodeByFormId({ formId: this.$route.query.projectId, name: '项目流转' })
743
+        let resData = await flowXmlAndNodeByFormId({ formId: this.$route.query.projectId, name: '3001' })
744
         this.flowData = resData.data;
744
         this.flowData = resData.data;
745
         this.drawerOpen = true;
745
         this.drawerOpen = true;
746
-        let resData2 = await flowXmlAndNodeByFormId({ formId: this.$route.query.projectId, name: '项目流转' })
746
+        let resData2 = await flowXmlAndNodeByFormId({ formId: this.$route.query.projectId, name: '3001' })
747
         this.flowData = resData2.data;
747
         this.flowData = resData2.data;
748
         this.drawerOpen = true;
748
         this.drawerOpen = true;
749
       }
749
       }
750
     },
750
     },
751
     async clickRecords() {
751
     async clickRecords() {
752
-      let resData = await flowXmlAndNodeByFormId({ formId: this.$route.query.projectId, name: '项目流转' })
752
+      let resData = await flowXmlAndNodeByFormId({ formId: this.$route.query.projectId, name: '3001' })
753
       let { procInsId, deployId } = resData
753
       let { procInsId, deployId } = resData
754
       this.clickRow = { procInsId, deployId }
754
       this.clickRow = { procInsId, deployId }
755
       this.recordOpen = true;
755
       this.recordOpen = true;

Loading…
Cancelar
Guardar