Selaa lähdekoodia

修改生产部门表格界面

余思翰 1 vuosi sitten
vanhempi
commit
fdae72eec1

+ 59
- 16
oa-ui/src/views/flowable/form/scForm.vue Näytä tiedosto

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-01-19 16:29:01
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-01-25 16:49:50
5
+ * @LastEditTime: 2024-01-29 15:46:38
6 6
 -->
7 7
 <template>
8 8
   <div>
@@ -13,15 +13,20 @@
13 13
           </el-option>
14 14
         </el-select>
15 15
       </el-form-item>
16
+      <el-form-item label="工作自述:">
17
+        <el-input style="width:900px" type="textarea" :rows="2" placeholder="请输入内容" v-model="form['selfAssess']">
18
+        </el-input>
19
+      </el-form-item>
16 20
       <el-form-item label="选择考核项:">
17 21
         <el-checkbox-group v-model="checkedBtn" @change="assessChangeFn">
18
-          <el-checkbox v-for="sc, index in AssessmentContent" :label="sc.label" :key="index" :value="sc.value">{{ sc.label
22
+          <el-checkbox v-for="sc, index in AssessmentContent" :label="sc.label" :key="index">{{ sc.label
19 23
           }}</el-checkbox>
20 24
         </el-checkbox-group>
21 25
       </el-form-item>
22 26
       <div class="tips" v-if="tipsShow">请至少选择一项考核项</div>
23 27
       <el-row type="flex" style="flex-wrap:wrap;">
24
-        <el-card v-for="item in checkedBtn" style="flex:1;margin:10px;min-width: 400px;max-width: 450px;">
28
+        <el-card v-for="item, index in checkedBtn" style="flex:1;margin:10px;min-width: 400px;max-width: 450px;"
29
+          :key="index">
25 30
           <div slot="header" class="clearfix">
26 31
             <strong>{{ item }}</strong>
27 32
             <el-button style="float: right; padding: 3px 0" type="text" @click="closeItem(item)">关闭</el-button>
@@ -38,7 +43,7 @@
38 43
                   <td v-if="!Array.isArray(child.label)">{{ child.label }}</td>
39 44
                   <td v-else>
40 45
                     <el-checkbox-group v-model="form.f07">
41
-                      <el-checkbox v-for="label in child.label" :label="label"></el-checkbox>
46
+                      <el-checkbox v-for="label, index in child.label" :label="label" :key="'k' + index"></el-checkbox>
42 47
                     </el-checkbox-group>
43 48
                   </td>
44 49
                   <td v-if="Array.isArray(child.label)">
@@ -62,7 +67,8 @@
62 67
                   <td>承担角色</td>
63 68
                   <td colspan="2">
64 69
                     <el-checkbox-group v-model="form['role' + ass.value.slice(-2)]">
65
-                      <el-checkbox v-for="role in ass.role" :label="role.slice(-2)">{{ getRoleLabel(role) }}</el-checkbox>
70
+                      <el-checkbox v-for="role, index in ass.role" :label="role.slice(-2)" :key="'kk' + index">{{
71
+                        getRoleLabel(role) }}</el-checkbox>
66 72
                     </el-checkbox-group>
67 73
                   </td>
68 74
                 </tr>
@@ -80,12 +86,16 @@
80 86
           </el-scrollbar>
81 87
         </el-card>
82 88
       </el-row>
89
+      <el-form-item label="其他工作:">
90
+        <el-input style="width:900px" type="textarea" :rows="2" placeholder="请输入内容" v-model="form['otherWork']">
91
+        </el-input>
92
+      </el-form-item>
83 93
       <el-row>
84 94
         <el-button @click="generateForm" type="primary">生成考核表</el-button>
85 95
       </el-row>
86 96
     </el-form>
87 97
     <el-dialog title="" :visible.sync="taskOpen" width="65%" append-to-body>
88
-      <ScTable :tableForm="noNullForm"></ScTable>
98
+      <ScTable :tableForm="noNullForm" ref="scTable" @submit="submit"></ScTable>
89 99
     </el-dialog>
90 100
   </div>
91 101
 </template>
@@ -94,6 +104,8 @@
94 104
 import { SCContent } from '@/assets/datas/SCContent'
95 105
 import { MessageBox } from 'element-ui'
96 106
 import ScTable from './scTable.vue';
107
+import { Snowflake } from '@/utils/snowFlake.js'
108
+import { submitAssess } from '@/api/oa/assess/assess.js'
97 109
 export default {
98 110
   dicts: ['cmc_skill'],
99 111
   components: { ScTable },
@@ -114,10 +126,11 @@ export default {
114 126
   },
115 127
   watch: {},
116 128
   mounted() {
129
+
117 130
   },
118 131
   methods: {
119 132
     initForm() {
120
-      for (let i = 0; i < SCContent.length; i++) {
133
+      for (let i = 0; i < SCContent.length + 1; i++) {
121 134
         if (i.toString().length == 1) {
122 135
           this.$set(this.form, 'role' + '0' + i, []);
123 136
         }
@@ -127,27 +140,51 @@ export default {
127 140
       }
128 141
     },
129 142
     // 提交表单
130
-    submit() {
131
-      MessageBox.confirm('是否确认提交?', '任务提交', { confirmButtonText: '确认', cancelButtonText: '取消', type: 'warning' }).then(() => {
132
-
133
-        // this.$emit('submit', noNullForm);
143
+    submit(tableForm) {
144
+      MessageBox.confirm('确认提交?', '任务提交', { confirmButtonText: '确认', cancelButtonText: '取消', type: 'warning' }).then(() => {
145
+        tableForm.formId = new Snowflake(1n, 1n, 0n).nextId().toString();
146
+        console.log(tableForm);
147
+        let formData = new FormData();
148
+        let form = JSON.stringify(tableForm);
149
+        formData.append("form", form);
150
+        submitAssess(formData).then(res => {
151
+          this.taskOpen = false;
152
+          this.$emit('submit', tableForm);
153
+        });
134 154
       }).catch(() => {
135 155
       });
136 156
     },
137 157
     // 生成考核表格
138 158
     generateForm() {
159
+      let flag = 0;
139 160
       if (this.checkedBtn.length == 0) {
140 161
         this.tipsShow = true;
141 162
         return
142 163
       }
143
-      this.taskOpen = true;
144
-      console.log(this.form);
145 164
       for (let f in this.form) {
146
-        if (this.form[f] != "" && this.form[f] != [] && this.form[f] != undefined) {
165
+        if (this.form[f] != "" && this.form[f] != [] && this.form[f] !== undefined) {
166
+          this.$set(this.noNullForm, f, this.form[f])
167
+        }
168
+        if (f.indexOf('familiar') != -1) {
147 169
           this.$set(this.noNullForm, f, this.form[f])
148 170
         }
149 171
       }
150
-      console.log(this.noNullForm);
172
+      for (let btn of this.checkedBtn) {
173
+        let ids = this.changeLabelToValue(btn);
174
+        if (this.form['familiar' + ids] == undefined || this.form['role' + ids].length == 0) {
175
+          this.$message.error('承担角色和熟练程度为必填项,请完善!');
176
+          flag = 0
177
+          break
178
+        } else {
179
+          flag = 1
180
+        }
181
+      }
182
+      if (flag) {
183
+        this.taskOpen = true;
184
+        if (this.$refs.scTable != undefined) {
185
+          this.$refs.scTable.formatForm();
186
+        }
187
+      }
151 188
     },
152 189
     closeItem(item) {
153 190
       let index = this.checkedBtn.indexOf(item);
@@ -184,7 +221,6 @@ export default {
184 221
       return role.substring(0, len - 2);
185 222
     },
186 223
     mustNumber(val, event) {
187
-      console.log(event);
188 224
       let regex = /^\d+(\.\d{1,2})?$/;
189 225
       let newElement = document.createElement("div");
190 226
       newElement.innerHTML = '工作量必须是数字';
@@ -195,6 +231,13 @@ export default {
195 231
         this.inputTips = true;
196 232
         event.target.parentNode.appendChild(newElement, event.target)
197 233
       }
234
+    },
235
+    changeLabelToValue(label) {
236
+      for (let s of SCContent) {
237
+        if (s.label == label) {
238
+          return s.value.slice(-2)
239
+        }
240
+      }
198 241
     }
199 242
   }
200 243
 }

+ 486
- 574
oa-ui/src/views/flowable/form/scTable.vue
File diff suppressed because it is too large
Näytä tiedosto


+ 1
- 1
oa-ui/src/views/flowable/task/myProcess/detail/index.vue Näytä tiedosto

@@ -15,7 +15,7 @@
15 15
          </el-col>
16 16
         </el-tab-pane> -->
17 17
         <el-tab-pane label="表单信息" name="1">
18
-          <ScTable></ScTable>
18
+          <!-- <ScTable></ScTable> -->
19 19
         </el-tab-pane>
20 20
         <!--流程流转记录-->
21 21
         <el-tab-pane label="流转记录" name="2">

+ 1
- 5
oa-ui/src/views/flowable/task/myProcess/send/index.vue Näytä tiedosto

@@ -17,7 +17,7 @@
17 17
           </el-col>
18 18
         </el-tab-pane> -->
19 19
         <el-tab-pane label="表单信息" name="1">
20
-            <scform @submit="submits"></scform>
20
+          <scform @submit="submits"></scform>
21 21
         </el-tab-pane>
22 22
         <!--流程图-->
23 23
         <el-tab-pane label="流程图" name="2">
@@ -96,12 +96,8 @@ export default {
96 96
   },
97 97
   methods: {
98 98
     submits(form) {
99
-      console.log(form);
100 99
       getNextFlowNodeByStart({ deploymentId: this.deployId, variables: {} }).then(res => {
101
-        console.log(res);
102
-        debugger
103 100
         let data = res.data
104
-        this.formData = { aaa: '1111' };
105 101
         if (data.dataType === 'dynamic') {
106 102
           if (data.type === 'assignee') { // 指定人员
107 103
             this.checkSendUser = true;

+ 44
- 49
oa-ui/src/views/flowable/task/todo/detail/index.vue Näytä tiedosto

@@ -9,24 +9,27 @@
9 9
       </div>
10 10
       <el-tabs tab-position="top" v-model="activeName" @tab-click="handleClick">
11 11
         <!--表单信息-->
12
-        <el-tab-pane label="表单信息" name="1">
12
+        <!-- <el-tab-pane label="表单信息" name="1">
13 13
           <el-col :span="16" :offset="4">
14 14
             <div class="test-form">
15
-              <!--              <parser :key="new Date().getTime()" :form-conf="variablesData"/>-->
16
-              <parser :key="new Date().getTime()" :form-conf="variablesData" @submit="submitForm" ref="parser"/>
15
+                           <parser :key="new Date().getTime()" :form-conf="variablesData"/>
16
+              <parser :key="new Date().getTime()" :form-conf="variablesData" @submit="submitForm" ref="parser" />
17 17
 
18 18
             </div>
19 19
             <div style="margin-left:15%;margin-bottom: 20px;font-size: 14px;">
20 20
               <el-button v-if="!formKeyExist" icon="el-icon-edit-outline" type="success" size="mini"
21
-                         @click="handleComplete">审批
21
+                @click="handleComplete">审批
22 22
               </el-button>
23
-              <!--                <el-button  icon="el-icon-edit-outline" type="primary" size="mini" @click="handleDelegate">委派</el-button>-->
24
-              <!--                <el-button  icon="el-icon-edit-outline" type="primary" size="mini" @click="handleAssign">转办</el-button>-->
25
-              <!--                <el-button  icon="el-icon-edit-outline" type="primary" size="mini" @click="handleDelegate">签收</el-button>-->
26
-                           <el-button icon="el-icon-refresh-left" type="warning" size="mini" @click="handleReturn">退回</el-button>
27
-                           <el-button icon="el-icon-circle-close" type="danger" size="mini" @click="handleReject">驳回</el-button>
23
+                             <el-button  icon="el-icon-edit-outline" type="primary" size="mini" @click="handleDelegate">委派</el-button>
24
+                             <el-button  icon="el-icon-edit-outline" type="primary" size="mini" @click="handleAssign">转办</el-button>
25
+                             <el-button  icon="el-icon-edit-outline" type="primary" size="mini" @click="handleDelegate">签收</el-button>
26
+              <el-button icon="el-icon-refresh-left" type="warning" size="mini" @click="handleReturn">退回</el-button>
27
+              <el-button icon="el-icon-circle-close" type="danger" size="mini" @click="handleReject">驳回</el-button>
28 28
             </div>
29 29
           </el-col>
30
+        </el-tab-pane> -->
31
+        <el-tab-pane label="表单信息" name="1">
32
+          
30 33
         </el-tab-pane>
31 34
         <!--流程流转记录-->
32 35
         <el-tab-pane label="流转记录" name="2">
@@ -34,12 +37,8 @@
34 37
           <el-col :span="16" :offset="4">
35 38
             <div class="block">
36 39
               <el-timeline>
37
-                <el-timeline-item
38
-                  v-for="(item,index ) in flowRecordList"
39
-                  :key="index"
40
-                  :icon="setIcon(item.finishTime)"
41
-                  :color="setColor(item.finishTime)"
42
-                >
40
+                <el-timeline-item v-for="(item, index ) in flowRecordList" :key="index" :icon="setIcon(item.finishTime)"
41
+                  :color="setColor(item.finishTime)">
43 42
                   <p style="font-weight: 700">{{ item.taskName }}</p>
44 43
                   <el-card :body-style="{ padding: '10px' }">
45 44
                     <el-descriptions class="margin-top" :column="1" size="small" border>
@@ -77,7 +76,7 @@
77 76
         </el-tab-pane>
78 77
         <!--流程图-->
79 78
         <el-tab-pane label="流程图" name="3">
80
-          <flow :flowData="flowData"/>
79
+          <flow :flowData="flowData" />
81 80
         </el-tab-pane>
82 81
       </el-tabs>
83 82
       <!--审批任务-->
@@ -91,8 +90,8 @@
91 90
             <el-checkbox v-model="taskForm.check">备选项</el-checkbox>
92 91
           </el-form-item>
93 92
           <el-form-item label="处理意见" label-width="80px" prop="comment"
94
-                        :rules="[{ required: true, message: '请输入处理意见', trigger: 'blur' }]">
95
-            <el-input type="textarea" v-model="taskForm.comment" placeholder="请输入处理意见"/>
93
+            :rules="[{ required: true, message: '请输入处理意见', trigger: 'blur' }]">
94
+            <el-input type="textarea" v-model="taskForm.comment" placeholder="请输入处理意见" />
96 95
           </el-form-item>
97 96
         </el-form>
98 97
         <span slot="footer" class="dialog-footer">
@@ -105,47 +104,41 @@
105 104
         <el-form ref="taskForm" :model="taskForm" label-width="80px">
106 105
           <el-form-item label="退回节点" prop="targetKey">
107 106
             <el-radio-group v-model="taskForm.targetKey">
108
-              <el-radio-button
109
-                v-for="item in returnTaskList"
110
-                :key="item.id"
111
-                :label="item.id"
112
-              >{{ item.name }}
107
+              <el-radio-button v-for="item in returnTaskList" :key="item.id" :label="item.id">{{ item.name }}
113 108
               </el-radio-button>
114 109
             </el-radio-group>
115 110
           </el-form-item>
116
-          <el-form-item label="退回意见" prop="comment"
117
-                        :rules="[{ required: true, message: '请输入意见', trigger: 'blur' }]">
118
-            <el-input style="width: 50%" type="textarea" v-model="taskForm.comment" placeholder="请输入意见"/>
111
+          <el-form-item label="退回意见" prop="comment" :rules="[{ required: true, message: '请输入意见', trigger: 'blur' }]">
112
+            <el-input style="width: 50%" type="textarea" v-model="taskForm.comment" placeholder="请输入意见" />
119 113
           </el-form-item>
120 114
         </el-form>
121 115
         <span slot="footer" class="dialog-footer">
122
-              <el-button @click="returnOpen = false">取 消</el-button>
123
-              <el-button type="primary" @click="taskReturn">确 定</el-button>
124
-          </span>
116
+          <el-button @click="returnOpen = false">取 消</el-button>
117
+          <el-button type="primary" @click="taskReturn">确 定</el-button>
118
+        </span>
125 119
       </el-dialog>
126 120
       <!--驳回流程-->
127 121
       <el-dialog :title="rejectTitle" :visible.sync="rejectOpen" width="40%" append-to-body>
128 122
         <el-form ref="taskForm" :model="taskForm" label-width="80px">
129
-          <el-form-item label="驳回意见" prop="comment"
130
-                        :rules="[{ required: true, message: '请输入意见', trigger: 'blur' }]">
131
-            <el-input style="width: 50%" type="textarea" v-model="taskForm.comment" placeholder="请输入意见"/>
123
+          <el-form-item label="驳回意见" prop="comment" :rules="[{ required: true, message: '请输入意见', trigger: 'blur' }]">
124
+            <el-input style="width: 50%" type="textarea" v-model="taskForm.comment" placeholder="请输入意见" />
132 125
           </el-form-item>
133 126
         </el-form>
134 127
         <span slot="footer" class="dialog-footer">
135
-            <el-button @click="rejectOpen = false">取 消</el-button>
136
-            <el-button type="primary" @click="taskReject">确 定</el-button>
137
-          </span>
128
+          <el-button @click="rejectOpen = false">取 消</el-button>
129
+          <el-button type="primary" @click="taskReject">确 定</el-button>
130
+        </span>
138 131
       </el-dialog>
139 132
     </el-card>
140 133
   </div>
141 134
 </template>
142 135
 
143 136
 <script>
144
-import {flowRecord} from "@/api/flowable/finished";
137
+import { flowRecord } from "@/api/flowable/finished";
145 138
 import FlowUser from '@/components/flow/User'
146 139
 import FlowRole from '@/components/flow/Role'
147 140
 import Parser from '@/components/parser/Parser'
148
-import {getProcessVariables, flowXmlAndNode, definitionStart} from "@/api/flowable/definition";
141
+import { getProcessVariables, flowXmlAndNode, definitionStart } from "@/api/flowable/definition";
149 142
 import {
150 143
   complete,
151 144
   rejectTask,
@@ -158,7 +151,7 @@ import {
158 151
 } from "@/api/flowable/todo";
159 152
 import flow from '@/views/flowable/task/todo/detail/flow'
160 153
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
161
-import {listUser} from "@/api/system/user";
154
+import { listUser } from "@/api/system/user";
162 155
 
163 156
 export default {
164 157
   name: "Record",
@@ -209,7 +202,7 @@ export default {
209 202
         variables: {
210 203
           variables: {}
211 204
         },
212
-        check:true
205
+        check: true
213 206
       },
214 207
       assignee: null,
215 208
       formConf: {}, // 默认表单数据
@@ -252,7 +245,7 @@ export default {
252 245
   methods: {
253 246
     handleClick(tab, event) {
254 247
       if (tab.name === '3') {
255
-        flowXmlAndNode({procInsId: this.taskForm.procInsId, deployId: this.taskForm.deployId}).then(res => {
248
+        flowXmlAndNode({ procInsId: this.taskForm.procInsId, deployId: this.taskForm.deployId }).then(res => {
256 249
           this.flowData = res.data;
257 250
         })
258 251
       }
@@ -300,7 +293,7 @@ export default {
300 293
     /** 流程流转记录 */
301 294
     getFlowRecordList(procInsId, deployId) {
302 295
       const that = this
303
-      const params = {procInsId: procInsId, deployId: deployId}
296
+      const params = { procInsId: procInsId, deployId: deployId }
304 297
       flowRecord(params).then(res => {
305 298
         that.flowRecordList = res.data.flowList;
306 299
       }).catch(res => {
@@ -328,8 +321,10 @@ export default {
328 321
     getFlowTaskForm(taskId) {
329 322
       if (taskId) {
330 323
         // 提交流程申请时填写的表单存入了流程变量中后续任务处理时需要展示
331
-        flowTaskForm({taskId: taskId}).then(res => {
324
+        flowTaskForm({ taskId: taskId }).then(res => {
325
+          debugger
332 326
           this.variablesData = res.data.formData;
327
+          console.log( res.data.formData);
333 328
           this.taskForm.variables = res.data.formData;
334 329
           this.formKeyExist = res.data.formKeyExist;
335 330
         });
@@ -342,7 +337,7 @@ export default {
342 337
       this.submitForm(null);
343 338
     },
344 339
     /** 用户审批任务 */
345
-    taskComplete() {      
340
+    taskComplete() {
346 341
       this.$set(this.taskForm.variables, "pass", "通过");
347 342
       if (!this.taskForm.variables && this.checkSendUser) {
348 343
         this.$modal.msgError("请选择流程接收人员!");
@@ -386,7 +381,7 @@ export default {
386 381
     /** 返回页面 */
387 382
     goBack() {
388 383
       // 关闭当前标签页并返回上个页面
389
-      const obj = { path: "/task/todo", query: { t: Date.now()} };
384
+      const obj = { path: "/task/todo", query: { t: Date.now() } };
390 385
       this.$tab.closeOpenPage(obj);
391 386
     },
392 387
     /** 驳回任务 */
@@ -398,9 +393,9 @@ export default {
398 393
     taskReject() {
399 394
       this.$set(this.taskForm.variables, "pass", "驳回");
400 395
       complete(this.taskForm).then(response => {
401
-          this.$modal.msgSuccess(response.msg);
402
-          this.goBack();
403
-        });
396
+        this.$modal.msgSuccess(response.msg);
397
+        this.goBack();
398
+      });
404 399
       // this.$refs["taskForm"].validate(valid => {
405 400
       //   if (valid) {
406 401
       //     rejectTask(this.taskForm).then(res => {
@@ -456,7 +451,7 @@ export default {
456 451
     /** 申请流程表单数据提交 */
457 452
     submitForm(formData) {
458 453
       // 根据当前任务或者流程设计配置的下一步节点 todo 暂时未涉及到考虑网关、表达式和多节点情况
459
-      const params = {taskId: this.taskForm.taskId}
454
+      const params = { taskId: this.taskForm.taskId }
460 455
       getNextFlowNode(params).then(res => {
461 456
         const data = res.data;
462 457
         this.taskForm.formData = formData;
@@ -507,7 +502,7 @@ export default {
507 502
   margin-bottom: 20px;
508 503
 }
509 504
 
510
-.el-tag + .el-tag {
505
+.el-tag+.el-tag {
511 506
   margin-left: 10px;
512 507
 }
513 508
 

Loading…
Peruuta
Tallenna