浏览代码

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

余思翰 10 个月前
父节点
当前提交
ffb6f65861

+ 2
- 2
oa-back/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/FlowTaskServiceImpl.java 查看文件

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

+ 1
- 5
oa-back/ruoyi-system/src/main/resources/mapper/flowable/FlowDeployMapper.xml 查看文件

@@ -41,11 +41,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
41 41
         FROM
42 42
             ACT_RE_PROCDEF rp
43 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 45
         order by rd.id_ asc
50 46
     </select>
51 47
 

+ 58
- 14
oa-ui/src/views/flowable/form/budget/components/chooseDevice.vue 查看文件

@@ -2,11 +2,14 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-03-27 11:10:26
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-07-15 17:35:10
5
+ * @LastEditTime: 2024-07-29 11:19:05
6 6
 -->
7 7
 <template>
8 8
   <div>
9 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 13
       <el-form-item label="设备状态:">
11 14
         <el-select v-model="queryParams.status" filterable clearable @change="getList">
12 15
           <el-option :value="'0'" label="被领用"></el-option>
@@ -26,15 +29,13 @@
26 29
       <el-form-item label="品牌:">
27 30
         <el-input v-model="queryParams.brand" clearable @keyup.enter.native="getList"></el-input>
28 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 32
       <el-form-item>
33 33
         <el-button @click="getList" type="primary">搜索</el-button>
34 34
       </el-form-item>
35 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 39
       <el-table-column label="设备状态" align="center" prop="status">
39 40
         <template slot-scope="scope">
40 41
           <el-tag :type="statusType(scope.row.status)">
@@ -56,9 +57,12 @@
56 57
     </div>
57 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 61
         {{ item.name + '-' + item.series + '-' + item.brand }}
61 62
       </el-tag>
63
+      <el-tag v-if="!multiple" style="margin: 5px;">{{ chooseList.name + '-' + chooseList.series + '-' +
64
+      chooseList.brand
65
+        }}</el-tag>
62 66
       <div style="text-align: center;margin-top: 20px;">
63 67
         <el-button type="primary" @click="confirmChoose">确认选择</el-button>
64 68
         <el-button @click="clearChoose">清空选择</el-button>
@@ -68,24 +72,48 @@
68 72
 </template>
69 73
 
70 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 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 95
   data() {
74 96
     return {
75 97
       queryParams: {
76 98
         pageNum: 1,
77 99
         pageSize: 10,
78
-        type: '仪器设备'
100
+        type: '仪器设备',
101
+        status: '1'
79 102
       },
80 103
       list: [],
81 104
       form: {},
82 105
       total: 0,
83 106
       loading: false,
84
-      chooseList: [],
107
+      chooseList: undefined,
85 108
       nameList: [],
86 109
     }
87 110
   },
88 111
   created() {
112
+    if (this.multiply) {
113
+      this.chooseList = []
114
+    } else {
115
+      this.chooseList = {}
116
+    }
89 117
     this.getList();
90 118
     this.getNameList();
91 119
   },
@@ -96,24 +124,40 @@ export default {
96 124
         this.list = response.rows;
97 125
         this.total = response.total;
98 126
         this.loading = false;
127
+        this.clearChoose();
99 128
       });
100 129
     },
101
-    getNameList(){
102
-      listDeviceName().then(res=>{
130
+    getNameList() {
131
+      listDeviceName().then(res => {
103 132
         this.nameList = res.data
104 133
       })
105 134
     },
106 135
     handleSelectionChange(val) {
107 136
       this.chooseList = val
108 137
     },
138
+    handleCurrentChange(val) {
139
+      if (!this.multiple) {
140
+        this.chooseList = val
141
+      }
142
+    },
109 143
     getRowKeys(row) {
110 144
       return row.deviceId;
111 145
     },
112 146
     confirmChoose() {
113 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 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 162
     statusTypeText(row) {
119 163
       if (row == '0') {
@@ -132,7 +176,7 @@ export default {
132 176
         return '已报废'
133 177
       }
134 178
     },
135
-    statusType(row){
179
+    statusType(row) {
136 180
       if (row == '0') {
137 181
         return 'warning'
138 182
       }

+ 60
- 21
oa-ui/src/views/flowable/form/oa/carForm.vue 查看文件

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-02-29 11:44:28
4 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 8
 <template>
@@ -209,7 +209,7 @@
209 209
                 </el-col>
210 210
               </el-row>
211 211
               <!-- 综合事务部管理人员填写 -->
212
-              <el-form-item label="车牌号:">
212
+              <el-form-item label="车牌号:" prop="cars">
213 213
                 <el-checkbox-group v-model="form.cars" :disabled="taskName != '安排用车'">
214 214
                   <el-checkbox :label="item.carId" v-for="item in carList" :key="item.carId" :value="item.carId"
215 215
                     v-if="item.remark == null">
@@ -217,15 +217,15 @@
217 217
                   </el-checkbox>
218 218
                 </el-checkbox-group>
219 219
               </el-form-item>
220
-              <el-form-item label="驾驶员:">
220
+              <el-form-item label="驾驶员:" prop="drivers">
221 221
                 <el-tag :key="'d' + index" class="mr10" v-for="item, index in chooseDriver">{{ item.nickName }}</el-tag>
222 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 224
                   style="width:420px" :disabled="taskName != '安排用车'">
225 225
                   <el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId"
226 226
                     v-if="item.nickName != 'admin'">
227 227
                   </el-option>
228
-                </el-select>
228
+                </el-select> -->
229 229
               </el-form-item>
230 230
               <el-row>
231 231
                 <el-col :span="12" :xs="24">
@@ -233,7 +233,8 @@
233 233
                     <!-- <el-date-picker v-model="form.returnDate" clearable type="datetime" value-format="yyyy-MM-dd-HH-mm"
234 234
                       placeholder="选择日期" :disabled="taskName != '安排用车'">
235 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 238
                     </el-date-picker>
238 239
                   </el-form-item>
239 240
                 </el-col>
@@ -250,6 +251,7 @@
250 251
               <el-button type="primary" @click="submit">提交申请</el-button>
251 252
             </el-row>
252 253
             <el-row style="text-align: center;" v-else>
254
+              <el-button type="warning" @click="saves()" v-if="taskName == '安排用车'">保存</el-button>
253 255
               <el-button type="primary" v-if="taskName" @click="completeApply">完成审批</el-button>
254 256
             </el-row>
255 257
           </div>
@@ -284,10 +286,11 @@ import { complete, rejectTask, returnList, returnTask, getNextFlowNode, delegate
284 286
 import { getUsersDeptLeader, getUsersManageLeader, getDeptLeaders } from '@/api/system/post.js'
285 287
 import flow from '@/views/flowable/task/todo/detail/flow'
286 288
 import { flowXmlAndNode } from "@/api/flowable/definition";
287
-import { listUser } from '@/api/system/user';
289
+import { listUser,getUser } from '@/api/system/user';
288 290
 import { getUserByRole } from "@/api/system/role";
289 291
 import chooseUser from "@/views/flowable/form/budget/components/choosePeople.vue";
290 292
 import projectChoose from '@/views/flowable/form/components/chooseProject.vue';
293
+import { number } from 'echarts';
291 294
 export default {
292 295
   components: {
293 296
     flow,
@@ -403,8 +406,8 @@ export default {
403 406
     initRules() {
404 407
       if (this.taskName == '用车申请') {
405 408
         this.rules = {
406
-          projectNumber: [
407
-            { required: true, message: '请选择项目编号', trigger: 'change' },
409
+          projectId: [
410
+            { required: true, message: '请选择项目', trigger: 'blur' },
408 411
           ],
409 412
           passengers: [
410 413
             { required: true, message: '请选择输入乘车人数', trigger: 'change' },
@@ -453,6 +456,18 @@ export default {
453 456
         this.rules = {
454 457
           dispatchComment: [
455 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,6 +507,12 @@ export default {
492 507
               arr.push(parseInt(driver))
493 508
             }
494 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 517
           if (res.data.cars == null || res.data.cars == undefined || res.data.cars == "") {
497 518
             data.cars = []
@@ -537,22 +558,38 @@ export default {
537 558
             this.taskForm.formData = formData;
538 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 567
       let formData = new FormData();
547 568
       let jsonForm = JSON.stringify(this.form);
548 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,7 +726,8 @@ export default {
689 726
         for (let d of this.chooseDriver) {
690 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 732
       this.openCar = false;
695 733
     },
@@ -700,7 +738,8 @@ export default {
700 738
       } else if (val.length == 1) {
701 739
         this.chooseProject = val[0]
702 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 744
       this.openProject = false
706 745
     },

+ 103
- 52
oa-ui/src/views/flowable/form/oa/deviceForm.vue 查看文件

@@ -1,8 +1,8 @@
1 1
 <!--
2 2
  * @Author: ysh
3 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 8
 <template>
@@ -18,13 +18,11 @@
18 18
               <el-row :gutter="20">
19 19
                 <el-col :span="6" :xs="24">
20 20
                   <el-form-item label="申请人:" prop="user.nickName">
21
-                    <!-- <el-input v-model="form.user"></el-input> -->
22 21
                     {{ form.applierUser ? form.applierUser.nickName : form.user.nickName }}
23 22
                   </el-form-item>
24 23
                 </el-col>
25 24
                 <el-col :span="6" :xs="24">
26 25
                   <el-form-item label="所在部门:" prop="dept.deptName">
27
-                    <!-- <el-input v-model="form.deptName"></el-input> -->
28 26
                     {{ form.dept.deptName }}
29 27
                   </el-form-item>
30 28
                 </el-col>
@@ -39,12 +37,6 @@
39 37
               <el-form-item label="项目编号:" prop="projectId">
40 38
                 <el-button type="primary" size="mini" @click="openProject = true"
41 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 40
                 <el-descriptions border v-if="isSelect" style="margin-top: 10px;" :column="1">
49 41
                   <el-descriptions-item label="项目编号" label-class-name="my-label">{{ chooseProject.projectNumber
50 42
                     }}</el-descriptions-item>
@@ -60,21 +52,15 @@
60 52
                     }}</el-descriptions-item>
61 53
                 </el-descriptions>
62 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 56
                 <el-button type="primary" icon="el-icon-plus" size="mini" @click="openDevice = true"
71 57
                   :disabled="taskName != '设备申请'">选择设备</el-button>
72 58
                 <el-table :data="deviceList">
73 59
                   <el-table-column label="序号" type="index" />
60
+                  <el-table-column label="出厂编号" align="center" prop="code" />
74 61
                   <el-table-column label="设备品牌" align="center" prop="brand" />
75 62
                   <el-table-column label="设备名称" align="center" prop="name" />
76 63
                   <el-table-column label="规格型号" align="center" prop="series" />
77
-                  <el-table-column label="出厂编号" align="center" prop="code" />
78 64
                   <el-table-column label="存放地址" align="center" prop="place" />
79 65
                 </el-table>
80 66
               </el-form-item>
@@ -106,23 +92,24 @@
106 92
               </el-row>
107 93
               <!-- 安排设备意见 -->
108 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 96
                 <el-table :data="modifyDeviceList">
119 97
                   <el-table-column label="序号" type="index" />
98
+                  <el-table-column label="出厂编号" align="center" prop="code" />
120 99
                   <el-table-column label="设备品牌" align="center" prop="brand" />
121 100
                   <el-table-column label="设备名称" align="center" prop="name" />
122 101
                   <el-table-column label="规格型号" align="center" prop="series" />
123
-                  <el-table-column label="出厂编号" align="center" prop="code" />
124 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 110
                 </el-table>
111
+                <el-button class="mt10" type="primary" size="mini" @click="addRowdata()" icon="el-icon-plus"
112
+                  :disabled="taskName != '安排设备'">新增设备</el-button>
126 113
               </el-form-item>
127 114
               <el-form-item label="安排设备意见:" prop="dispatchComment" label-width="125px">
128 115
                 <el-input type="textarea" :rows="3" placeholder="请输入安排设备意见" v-model="form.dispatchComment"
@@ -185,7 +172,8 @@
185 172
               <el-button type="primary" @click="submit">提交申请</el-button>
186 173
             </el-row>
187 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 177
             </el-row>
190 178
           </div>
191 179
         </el-card>
@@ -198,14 +186,13 @@
198 186
             <flow :flowData="flowData" />
199 187
           </div>
200 188
         </el-card>
201
-
202 189
       </el-col>
203 190
     </el-row>
204 191
     <el-dialog title="选择项目" :visible.sync="openProject" width="70%" append-to-body>
205 192
       <project-choose @chooseProject="confirmProject"></project-choose>
206 193
     </el-dialog>
207 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 196
     </el-dialog>
210 197
   </div>
211 198
 </template>
@@ -297,7 +284,10 @@ export default {
297 284
       deviceList: [],
298 285
       grantDeviceList: [],
299 286
       modifyDeviceList: [],
300
-      formTotal: 0
287
+      formTotal: 0,
288
+      clicDevice: {},
289
+      clickRowIndex: 0,
290
+      multiple: true,
301 291
     }
302 292
   },
303 293
   mounted() {
@@ -308,6 +298,9 @@ export default {
308 298
     initRules() {
309 299
       if (this.taskName == '设备申请') {
310 300
         this.rules = {
301
+          projectId: [
302
+            { required: true, message: '请选择项目', trigger: 'blur' },
303
+          ],
311 304
           devices: [
312 305
             { required: true, message: '请选择申请设备', trigger: 'change' },
313 306
           ],
@@ -320,6 +313,9 @@ export default {
320 313
           applyReason: [
321 314
             { required: true, message: '请输入申领理由', trigger: 'blur' },
322 315
           ],
316
+          devices: [
317
+            { required: true, message: '请选择设备', trigger: 'blur' },
318
+          ]
323 319
         }
324 320
       } else if (this.taskName == '分管审核') {
325 321
         this.rules = {
@@ -369,7 +365,7 @@ export default {
369 365
           }
370 366
           if (res.data.modifyDevices == null || res.data.modifyDevices == undefined || res.data.modifyDevices == "") {
371 367
             data.modifyDevices = []
372
-            this.modifyDeviceList = []
368
+            this.modifyDeviceList = this.deviceList
373 369
           } else {
374 370
             data.modifyDevices = data.modifyDevices.split(',');
375 371
             let arr = []
@@ -411,22 +407,48 @@ export default {
411 407
             this.taskForm.formData = formData;
412 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 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,25 +559,54 @@ export default {
537 559
       } else if (val.length == 1) {
538 560
         this.chooseProject = val[0]
539 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 565
       this.openProject = false
543 566
     },
544 567
     confirmDevice(val) {
545 568
       if (val) {
546 569
         let list = []
547
-        for (let v of val) {
548
-          list.push(v.deviceId)
549
-        }
550 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 576
           this.deviceList = val;
553 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 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 查看文件

@@ -17,15 +17,22 @@
17 17
           </el-select>
18 18
         </el-form-item>
19 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 21
         </el-form-item>
23 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 32
         </el-form-item>
27 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 36
         </el-form-item>
30 37
         <el-row>
31 38
           <el-col :span="6" :xs="24" :offset="12">
@@ -86,18 +93,19 @@ export default {
86 93
     projectName(newval) {
87 94
       this.$set(this.form, "projectName", newval);
88 95
     },
89
-    'taskForm.formId'(){
96
+    'taskForm.formId'() {
90 97
       this.loading = true;
91 98
       this.initForm();
92 99
     }
93 100
   },
94 101
   data() {
95 102
     return {
103
+      baseUrl: process.env.VUE_APP_BASE_API,
96 104
       isEmpty: true,
97 105
       form: {},
98 106
       rules: {},
99 107
       userList: [],
100
-      loading:false,
108
+      loading: false,
101 109
     }
102 110
   },
103 111
   mounted() {

+ 3
- 3
oa-ui/src/views/oa/project/info.vue 查看文件

@@ -740,16 +740,16 @@ export default {
740 740
     },
741 741
     async clickProcess() {
742 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 744
         this.flowData = resData.data;
745 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 747
         this.flowData = resData2.data;
748 748
         this.drawerOpen = true;
749 749
       }
750 750
     },
751 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 753
       let { procInsId, deployId } = resData
754 754
       this.clickRow = { procInsId, deployId }
755 755
       this.recordOpen = true;

正在加载...
取消
保存