浏览代码

新增调岗审批

qyx 3 小时前
父节点
当前提交
aff88a3802

+ 2
- 0
.vscode/settings.json 查看文件

@@ -0,0 +1,2 @@
1
+{
2
+}

+ 1
- 1
oa-back/ruoyi-admin/src/main/resources/application-druid.yml 查看文件

@@ -6,7 +6,7 @@ spring:
6 6
         druid:
7 7
             # 主库数据源
8 8
             master:
9
-                url: jdbc:mysql://localhost:3306/cmc_oa?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true
9
+                url: jdbc:mysql://localhost:3306/oa_test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true
10 10
                 username: root
11 11
                 password: 123456
12 12
 #                password: cmcroot

+ 6
- 6
oa-back/ruoyi-system/src/main/java/com/ruoyi/oa/domain/CmcTransfer.java 查看文件

@@ -42,7 +42,7 @@ public class CmcTransfer extends BaseEntity
42 42
     private SysDept beforeDept;
43 43
 
44 44
     /** 调整前岗位id */
45
-    private Long beforePostId;
45
+    private String beforePostId;
46 46
     @Excel(name = "调整前岗位")
47 47
     private String beforePostName;
48 48
     private SysPost beforePost;
@@ -54,7 +54,7 @@ public class CmcTransfer extends BaseEntity
54 54
     private SysDept afterDept;
55 55
 
56 56
     /** 调整后岗位id */
57
-    private Long afterPostId;
57
+    private String afterPostId;
58 58
     @Excel(name = "调整后岗位")
59 59
     private String afterPostName;
60 60
     private SysPost afterPost;
@@ -170,12 +170,12 @@ public class CmcTransfer extends BaseEntity
170 170
     {
171 171
         return beforeDeptId;
172 172
     }
173
-    public void setBeforePostId(Long beforePostId) 
173
+    public void setBeforePostId(String beforePostId) 
174 174
     {
175 175
         this.beforePostId = beforePostId;
176 176
     }
177 177
 
178
-    public Long getBeforePostId() 
178
+    public String getBeforePostId() 
179 179
     {
180 180
         return beforePostId;
181 181
     }
@@ -188,12 +188,12 @@ public class CmcTransfer extends BaseEntity
188 188
     {
189 189
         return afterDeptId;
190 190
     }
191
-    public void setAfterPostId(Long afterPostId) 
191
+    public void setAfterPostId(String afterPostId) 
192 192
     {
193 193
         this.afterPostId = afterPostId;
194 194
     }
195 195
 
196
-    public Long getAfterPostId() 
196
+    public String getAfterPostId() 
197 197
     {
198 198
         return afterPostId;
199 199
     }

+ 6
- 0
oa-ui/src/utils/deleteResource.js 查看文件

@@ -156,6 +156,12 @@ const apiEndpoints = [
156 156
       '/oa/titleEval/:id',
157 157
     ]
158 158
   },
159
+  {
160
+    procDefName: '调岗审批',
161
+    apiUrl: [
162
+      '/oa/transfer/:id',
163
+    ]
164
+  },
159 165
 ]
160 166
 
161 167
 // 编写一个方法来处理删除请求,并同时发送所有API请求  

+ 5
- 1
oa-ui/src/views/flowable/form/components/conditionDisplay.vue 查看文件

@@ -63,6 +63,8 @@
63 63
       v-else-if="taskForm.procDefName == '项目核算'"></budget-adjust>
64 64
     <titles-form :key="'titles' + taskForm.taskId" :taskForm="taskForm" :taskName="''" :isFlow="true"
65 65
       v-else-if="taskForm.procDefName == '职称评审'"></titles-form>
66
+    <transfer-form :key="'titles' + taskForm.taskId" :taskForm="taskForm" :taskName="''" :isFlow="true"
67
+      v-else-if="taskForm.procDefName == '调岗审批'"></transfer-form>
66 68
   </div>
67 69
 </template>
68 70
 
@@ -98,6 +100,7 @@ import performanceForm from '@/views/flowable/form/performance/performanceForm.v
98 100
 import StudyForm from "@/views/flowable/form//oa/studyForm.vue";
99 101
 import BudgetAdjust from '@/views/flowable/form/budget/adjust/budgetAdjust.vue';
100 102
 import TitlesForm from '@/views/flowable/form/oa/titlesForm.vue';
103
+import TransferForm from '@/views/flowable/form/oa/transferForm.vue';
101 104
 export default {
102 105
   props: {
103 106
     passingParam: {
@@ -139,7 +142,8 @@ export default {
139 142
     performanceForm,
140 143
     StudyForm,
141 144
     BudgetAdjust,
142
-    TitlesForm
145
+    TitlesForm,
146
+    TransferForm
143 147
   },
144 148
   data() {
145 149
     return {

+ 5
- 1
oa-ui/src/views/flowable/form/components/detailDisplay.vue 查看文件

@@ -58,6 +58,8 @@
58 58
       @goBack="goBack"></adjust-index>
59 59
     <titles-form :taskName="taskName" :taskForm="taskForm" v-else-if="taskForm.procDefName == '职称评审'"
60 60
       @goBack="goBack"></titles-form>
61
+    <transfer-form :taskName="taskName" :taskForm="taskForm" v-else-if="taskForm.procDefName == '调岗审批'"
62
+      @goBack="goBack"></transfer-form>
61 63
   </div>
62 64
 </template>
63 65
 
@@ -93,6 +95,7 @@ import PerformanceForm from '@/views/flowable/form/performance/performanceForm.v
93 95
 import StudyForm from "@/views/flowable/form/oa/studyForm.vue";
94 96
 import AdjustIndex from '@/views/flowable/form/budget/adjust/adjustIndex.vue';
95 97
 import TitlesForm from '@/views/flowable/form/oa/titlesForm.vue';
98
+import TransferForm from '@/views/flowable/form/oa/transferForm.vue';
96 99
 export default {
97 100
   components: {
98 101
     ScTable,
@@ -125,7 +128,8 @@ export default {
125 128
     PerformanceForm,
126 129
     StudyForm,
127 130
     AdjustIndex,
128
-    TitlesForm
131
+    TitlesForm,
132
+    TransferForm
129 133
   },
130 134
   props: {
131 135
     taskForm: {

+ 537
- 0
oa-ui/src/views/flowable/form/oa/transferForm.vue 查看文件

@@ -0,0 +1,537 @@
1
+<!--
2
+ * @Author: ysh
3
+ * @Date: 2025-08-18 10:59:25
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2025-08-19 16:33:56
6
+-->
7
+<template>
8
+  <div>
9
+    <el-row :gutter="20">
10
+      <el-col :span="isFlow ? 18 : 24" :xs="24">
11
+        <h2 style="text-align: center;">调岗申请表</h2>
12
+        <div class="mt20 mb20" v-if="showAlter">
13
+          <el-alert title="任务被退回,请修改后重新提交" type="error" :closable="false">
14
+            <return-comment :taskForm="taskForm" @isReturn="isReturn"></return-comment>
15
+          </el-alert>
16
+        </div>
17
+        <el-form :model="form" :rules="formRules" ref="form" label-width="175px" :disabled="taskName == ''"
18
+          class="mt20">
19
+            <!-- 申请人 -->
20
+            <el-row :gutter="20" >
21
+                <el-col :md="12" :span="24">
22
+                    <el-form-item label="申请人:" prop="applier" >
23
+                        <span class="auditor">{{ getUserName(form.applier) }}</span>
24
+                    </el-form-item>
25
+                </el-col>
26
+                <el-col :md="12" :span="24">
27
+                    <el-form-item label="申请时间" prop="applyDate">
28
+                        <el-date-picker style="width:140px;" v-model="form.applyDate" value-format="yyyy-MM-dd" type="date"
29
+                    placeholder="选择日期" disabled>
30
+                    </el-date-picker>
31
+                    </el-form-item>
32
+                </el-col>
33
+            </el-row>
34
+
35
+            <!-- 调整前所在部门及岗位 -->
36
+            <el-row :gutter="20" >
37
+                <el-col :md="12" :span="24">
38
+                    <el-form-item label="调整前所在部门:" prop="beforeDeptId" :disabled="taskName != '调岗申请'">
39
+                    {{ getDept(form) }}
40
+                    </el-form-item>
41
+                </el-col>
42
+                <el-col :md="12" :span="24">
43
+                    <el-form-item label="调整前所在岗位:" prop="postList" >
44
+                    <el-select v-model="postList.beforePostList" placeholder="请选择岗位" style="width:100%;" multiple :disabled="taskName != '调岗申请'" @change="$forceUpdate()">
45
+                        <el-option v-for="item in beforepostOptions" :key="item.postId" :label="item.postName" :value="item.postId">
46
+                        </el-option>
47
+                    </el-select>
48
+                    </el-form-item>
49
+                </el-col>
50
+            </el-row>
51
+
52
+            <!-- 调整后所在部门及岗位: -->
53
+            <el-row :gutter="20" :disabled="taskName != '调岗申请'">
54
+                <el-col :md="12" :span="24">
55
+                    <el-form-item label="调整后所在部门:" prop="afterDeptId">
56
+                        <el-select v-model="form.afterDeptId"  placeholder="请选择部门" :disabled="taskName != '调岗申请'">
57
+                            <el-option v-for="item in this.$store.state.user.deptList" :key="item.deptId" :label="item.deptName" :value="item.deptId">
58
+                            </el-option>
59
+                        </el-select>
60
+                    </el-form-item>
61
+                </el-col>
62
+                <el-col :md="12" :span="24">
63
+                    <el-form-item label="调整后所在岗位:" prop="postList">
64
+                    <el-select v-model="postList.afterPostList" placeholder="请选择岗位" style="width:100%;" multiple :disabled="taskName != '调岗申请'" @change="$forceUpdate()">
65
+                        <el-option v-for="item in allpostOptions" :key="item.postId" :label="item.postName" :value="item.postId">
66
+                        </el-option>
67
+                    </el-select>
68
+                    </el-form-item>
69
+                </el-col>
70
+             </el-row>
71
+
72
+            <el-divider></el-divider>
73
+
74
+          <!-- 调整前所在部门意见 -->
75
+            <el-form-item label="调整前所在部门意见" prop="beforeDeptComment" label-width="140px">
76
+                <el-input type="textarea" v-model="form.beforeDeptComment" :autosize="{ minRows: 4 }"
77
+                :disabled="taskName != '调前部门审批'"></el-input>
78
+                <auditor-row ref="beforeRef" :isCurrent="taskName == '调前部门审批'"
79
+                :signature="form.beforeDeptLeader ? form.beforeDeptLeader : null" :signTime="form.beforeDeptTime"></auditor-row>
80
+            </el-form-item>
81
+            <!-- 调整后所在部门意见 -->
82
+            <el-form-item label="调整后所在部门意见" prop="afterDeptComment" label-width="140px">
83
+                <el-input type="textarea" v-model="form.afterDeptComment" :autosize="{ minRows: 4 }"
84
+                :disabled="taskName != '调后部门审批'"></el-input>
85
+                <auditor-row ref="afterRef" :isCurrent="taskName == '调后部门审批'"
86
+                :signature="form.afterDeptLeader ? form.afterDeptLeader : null" :signTime="form.afterDeptTime"></auditor-row>
87
+            </el-form-item>
88
+            <!-- 综合事务部意见: -->
89
+            <el-form-item label="综合事务部意见:" prop="zhComment" label-width="130px">
90
+                <el-input type="textarea" v-model="form.zhComment" :autosize="{ minRows: 4 }"
91
+                :disabled="taskName != '综合事务部审批'"></el-input>
92
+                <auditor-row ref="zhRef" :isCurrent="taskName == '综合事务部审批'"
93
+                :signature="form.zhUserId ? form.zhUserId : null" :signTime="form.zhTime"></auditor-row>
94
+            </el-form-item>
95
+            <!-- 分管审核意见: -->
96
+            <el-form-item label="分管审核意见:" prop="managerComment" label-width="130px">
97
+                <el-input type="textarea" v-model="form.managerComment" :autosize="{ minRows: 4 }"
98
+                :disabled="taskName != '分管审批'"></el-input>
99
+                <auditor-row ref="fgRef" :isCurrent="taskName == '分管审批'"
100
+                :signature="form.managerUserId ? form.managerUserId : null" :signTime="form.managerTime"></auditor-row>
101
+            </el-form-item>
102
+            <!-- 总经理审批意见: -->
103
+            <el-form-item label="总经理审批意见:" prop="zjlComment" label-width="130px">
104
+                <el-input type="textarea" v-model="form.zjlComment" :autosize="{ minRows: 4 }"
105
+                :disabled="taskName != '总经理审批'"></el-input>
106
+                <auditor-row ref="zjlRef" :isCurrent="taskName == '总经理审批'"
107
+                :signature="form.zjlUserId ? form.zjlUserId : null" :signTime="form.zjlTime"></auditor-row>
108
+            </el-form-item>
109
+        </el-form>
110
+
111
+        <!-- 操作按钮 -->
112
+        <div style="text-align: center;" v-if="taskName" class="mt30">
113
+          <el-button type="warning" @click="saveDraft">保存</el-button>
114
+          <el-button type="danger" @click="returnOpen = true" v-if="taskName != '调岗申请'">退回</el-button>
115
+          <el-button type="primary" @click="submitForm">{{ taskName != '总经理审批' ? '提交下一个流程' : '批准' }}</el-button>
116
+        </div>
117
+      </el-col>
118
+      <el-col :span="6" :xs="24" v-if="isFlow">
119
+        <el-card>
120
+          <h2 style="text-align: center;">流程进度</h2>
121
+          <div>
122
+            <flow :flowData="flowData" />
123
+          </div>
124
+        </el-card>
125
+      </el-col>
126
+    </el-row>
127
+
128
+    <el-dialog title="退回" :visible.sync="returnOpen" width="40%" append-to-body>
129
+      <return-btn :taskForm="taskForm" :comment="commentByRole()" @goBack="$emit('goBack')" @saves=""
130
+        @cancel="returnOpen = false"></return-btn>
131
+    </el-dialog>
132
+  </div>
133
+</template>
134
+
135
+<script>
136
+import flow from '@/views/flowable/task/todo/detail/flow'
137
+import { flowXmlAndNode } from "@/api/flowable/definition";
138
+import { listTransfer, getTransfer, delTransfer, addTransfer, updateTransfer } from "@/api/oa/transfer/transfer";
139
+import { complete, getNextFlowNode } from "@/api/flowable/todo";
140
+import { allocatedUserList } from "@/api/system/role";
141
+import ReturnComment from "@/views/flowable/form/components/flowBtn/returnComment.vue";
142
+import ReturnBtn from "@/views/flowable/form/components/flowBtn/returnBtn.vue";
143
+import { getUser, updateUser } from "@/api/system/user";
144
+import { getUsersDeptLeaderByDept, getUsersManageLeaderByDept, getUserByPost,delPost } from '@/api/system/post';
145
+import AuditorRow from '@/views/flowable/form/components/auditorRow.vue';
146
+export default {
147
+  components: {
148
+    flow,
149
+    ReturnComment,
150
+    ReturnBtn,
151
+    AuditorRow
152
+  },
153
+  props: {
154
+    taskName: {
155
+      type: String,
156
+      required: true
157
+    },
158
+    taskForm: {
159
+      type: Object,
160
+      required: true
161
+    },
162
+    isFlow: {
163
+      type: Boolean,
164
+      default: true
165
+    }
166
+  },
167
+  created() {
168
+    if (this.isFlow)
169
+      flowXmlAndNode({ procInsId: this.taskForm.procInsId, deployId: this.taskForm.deployId }).then(res => {
170
+        this.flowData = res.data;
171
+      })
172
+    // 初始化表单数据
173
+    this.initFormData(),
174
+    this.getPostbyUserId()
175
+  },
176
+  data() {
177
+    return {
178
+      baseUrl: process.env.VUE_APP_BASE_API,
179
+      flowData: {},
180
+      isEdit: false,
181
+      // 调整前岗位选项
182
+      beforepostOptions: [],
183
+      // 所有岗位选项
184
+      allpostOptions: [],
185
+      // 岗位
186
+      posts: [],
187
+      postList:{
188
+        beforePostList: [],
189
+        afterPostList: [],
190
+      },
191
+      form: {
192
+        transferId: null,
193
+        applier: null,
194
+        applyDate: null,
195
+        beforeDeptId: null,
196
+        beforePostId: null,
197
+        afterDeptId: null,
198
+        afterPostId: null,
199
+        beforeDeptComment: null,
200
+        beforeDeptLeader: null,
201
+        beforeDeptTime: null,
202
+        afterDeptComment: null,
203
+        afterDeptTime: null,
204
+        afterDeptLeader: null,
205
+        zhComment: null,
206
+        zhTime: null,
207
+        zhUserId: null,
208
+        managerComment: null,
209
+        managerTime: null,
210
+        managerUserId: null,
211
+        zjlComment: null,
212
+        zjlTime: null,
213
+        zjlUserId: null
214
+      },
215
+      rules: {},
216
+      returnOpen: false,
217
+      showAlter: true
218
+    }
219
+  },
220
+  computed: {
221
+    // 动态生成验证规则
222
+    formRules() {
223
+      if (this.taskName == '') {
224
+        return {}; // 当taskName为空时,不进行验证
225
+      }
226
+
227
+      return {
228
+        beforePostList: [
229
+          { required: true, message: '请选择调整前岗位', trigger: 'change', type: 'array'  }
230
+        ],
231
+        afterDeptId: [
232
+          { required: true, message: '请选择调整后部门', trigger: 'change' }
233
+        ],
234
+        afterPostList: [
235
+          { required: true, message: '请选择调整后岗位', trigger: 'change', type: 'array' }
236
+        ]
237
+      };
238
+    }
239
+  },
240
+  methods: {
241
+    // 初始化表单数据
242
+    initFormData() {
243
+      getTransfer(this.taskForm.formId).then(res => {
244
+        if (res.data) {
245
+          this.form = res.data;
246
+          this.isEdit = true;
247
+          this.postList.beforePostList = this.form.beforePostId.split(',').map(item => item.trim())
248
+                                    .filter(item => item !== '') .map(item => Number(item)).filter(num => !isNaN(num)); 
249
+          this.postList.afterPostList = this.form.afterPostId.split(',').map(item => item.trim())
250
+                                    .filter(item => item !== '') .map(item => Number(item)).filter(num => !isNaN(num));
251
+        } else {
252
+          this.form.applier = this.$store.state.user.id;
253
+          this.form.applyDate = this.parseTime(new Date(), '{y}-{m}-{d}');
254
+        }
255
+      })
256
+    },
257
+    // 保存
258
+    async saveDraft() {
259
+      if (this.taskName == '') {
260
+        this.$message.info('当前为只读模式,无法保存')
261
+        return;
262
+      }
263
+      if (this.taskName == '调岗申请') {
264
+        this.form.beforePostId = this.postList.beforePostList.join(',');
265
+        this.form.afterPostId = this.postList.afterPostList.join(',');
266
+      }else if (this.taskName == '调前部门审批') {
267
+        this.form.beforeDeptLeader = this.$refs.beforeRef.localSignatureUserId;
268
+        this.form.beforeDeptTime = this.$refs.beforeRef.loaclSignTime;
269
+      } else if (this.taskName == '调后部门审批') {
270
+        this.form.afterDeptLeader = this.$refs.afterRef.localSignatureUserId;
271
+        this.form.afterDeptTime = this.$refs.afterRef.loaclSignTime;
272
+      } else if (this.taskName == '综合事务部审批') {
273
+        this.form.zhUserId = this.$refs.zhRef.localSignatureUserId;
274
+        this.form.zhTime = this.$refs.zhRef.loaclSignTime;
275
+      } else if (this.taskName == '分管审批') {
276
+        this.form.managerUserId = this.$refs.fgRef.localSignatureUserId;
277
+        this.form.managerTime = this.$refs.fgRef.loaclSignTime;
278
+      } else if (this.taskName == '总经理审批') {
279
+        this.form.zjlUserId = this.$refs.zjlRef.localSignatureUserId;
280
+        this.form.zjlTime = this.$refs.zjlRef.loaclSignTime;
281
+      }
282
+
283
+      if (this.isEdit) {
284
+        await updateTransfer(this.form);
285
+      } else {
286
+        this.form.transferId = this.taskForm.formId;
287
+        await addTransfer(this.form);
288
+        this.isEdit = true;
289
+      }
290
+      this.$message.success('保存成功')
291
+    },
292
+    // 提交表单
293
+    submitForm() {
294
+      if (this.taskName == '') {
295
+        this.$message.info('当前为只读模式,无法提交')
296
+        return;
297
+      }
298
+
299
+      this.$refs.form.validate((valid) => {
300
+        if (valid) {
301
+          let msg = '确认提交调岗申请表?';
302
+          if (this.taskName == '总经理审批') {
303
+            msg = '最后一个节点,提交将无法修改,是否确认提交?';
304
+          }
305
+          this.$confirm(msg, '提示', {
306
+            confirmButtonText: '确定',
307
+            cancelButtonText: '取消',
308
+            type: 'warning'
309
+          }).then(() => {
310
+            this.submitFlow()
311
+          }).catch(() => {
312
+            this.$message.info('已取消提交')
313
+          })
314
+        } else {
315
+          this.$message.error('请完善表单信息')
316
+          return false
317
+        }
318
+      })
319
+    },
320
+    async submitFlow() {
321
+      await this.saveDraft();
322
+
323
+      if (this.taskName == '调岗申请') {  
324
+        const res = await getUsersDeptLeaderByDept({ deptId: this.form.beforeDeptId });
325
+        this.$set(this.taskForm.variables, "approval", res.data.userId);
326
+      } else if (this.taskName == '调前部门审批') {
327
+        const res = await getUsersDeptLeaderByDept({ deptId: this.form.afterDeptId });
328
+        this.$set(this.taskForm.variables, "approval", res.data.userId);
329
+      } else if (this.taskName == '调后部门审批') {
330
+        const res = await getUsersDeptLeaderByDept({ deptId: 104 });
331
+        this.$set(this.taskForm.variables, "approval", res.data.userId);
332
+      } else if (this.taskName == '综合事务部审批') {
333
+        let res = await getUsersManageLeaderByDept({ deptId: this.form.afterDeptId });
334
+        this.$set(this.taskForm.variables, "approval", res.data[0].userId);
335
+      } else if (this.taskName == '分管审批') {
336
+        const res = await getUserByPost({ postName: "总经理" });
337
+        this.$set(this.taskForm.variables, "approval", res.data[0].userId);
338
+      }else if(this.taskName=='总经理审批'){
339
+        this.updateUserDeptAndPost();
340
+      }
341
+
342
+      await getNextFlowNode({ taskId: this.taskForm.taskId });
343
+      const response = await complete(this.taskForm);
344
+      this.$modal.msgSuccess(response.msg);
345
+      this.$emit('goBack');
346
+    },
347
+
348
+    //获取职位
349
+    getPostbyUserId() {
350
+      if(this.taskName=="调岗申请"){
351
+        getUser(this.$store.state.user.id).then(response => {
352
+          this.allpostOptions = response.posts;
353
+          for (let p of response.posts) {
354
+            for (let ids of response.postIds) {
355
+              if (p.postId == ids) {
356
+                this.beforepostOptions.push(p);
357
+              }
358
+            }
359
+          }
360
+        });
361
+      }else{
362
+        getUser(this.$store.state.user.id).then(response => {
363
+          console.log(this.$store.state.user.id);
364
+          console.log(response);
365
+          this.allpostOptions = response.posts;
366
+          this.beforepostOptions = response.posts;
367
+        });
368
+      }
369
+    },
370
+    //获取部门
371
+    getDept(val){
372
+      if(this.taskName=="调岗申请"){
373
+        for (let p of this.$store.state.user.deptList) {
374
+        if (p.deptId == this.$store.state.user.deptId) {
375
+          this.form.beforeDeptId = p.deptId;
376
+          return p.deptName;
377
+        }}
378
+      }else{
379
+        for (let p of this.$store.state.user.deptList) {
380
+        if (p.deptId == val.beforeDeptId) {
381
+          return p.deptName;
382
+        }
383
+      }
384
+      }
385
+    },
386
+    //转换岗位id格式
387
+    postIdConvert(val){
388
+      // 处理空值
389
+      if (val === null || val === undefined || val === '') {
390
+        return '';
391
+      }
392
+      if (Array.isArray(val)) {
393
+        return val.map(num => String(num)).join(',');
394
+      }
395
+      if (typeof val === 'string') {
396
+        return val.split(',')
397
+          .map(item => item.trim())
398
+          .filter(item => item !== '')
399
+          .map(item => Number(item))
400
+          .filter(num => !isNaN(num));
401
+      }
402
+      return '';
403
+    },
404
+    //更新用户部门和岗位
405
+    async updateUserDeptAndPost(){
406
+      const userinfo = await getUser(Number(this.form.applier));
407
+      userinfo.data.deptId = this.form.afterDeptId;
408
+      userinfo.data.postIds = this.form.afterPostId.split(',').map(item => Number(item.trim())).filter(num => !isNaN(num));
409
+      updateUser(userinfo.data).then(response => {
410
+       this.$modal.msgSuccess("修改成功");
411
+      });
412
+    },
413
+    isReturn(val) {
414
+      this.showAlter = val;
415
+    },
416
+    commentByRole() {
417
+      if (this.taskName == '调前部门审批') {
418
+        return this.form.beforeDeptComment
419
+      } else if (this.taskName == '调后部门审批') {
420
+        return this.form.afterDeptComment
421
+      } else if (this.taskName == '综合事务部审批') {
422
+        return this.form.zhComment
423
+      } else if (this.taskName == '分管审批') {
424
+        return this.form.managerComment
425
+      } else if (this.taskName == '总经理审批') {
426
+        return this.form.zjlComment
427
+      } 
428
+    },
429
+  }
430
+}
431
+</script>
432
+
433
+<style lang="scss" scoped>
434
+@import "@/assets/styles/element-reset.scss";
435
+
436
+.process-steps {
437
+  margin: 20px 0;
438
+  padding: 20px;
439
+  background: #f8f9fa;
440
+  border-radius: 8px;
441
+}
442
+
443
+.current-step-info {
444
+  margin: 20px 0;
445
+
446
+  .step-header {
447
+    display: flex;
448
+    align-items: center;
449
+    margin-bottom: 8px;
450
+
451
+    i {
452
+      color: #409eff;
453
+      margin-right: 8px;
454
+      font-size: 16px;
455
+    }
456
+
457
+    .step-title {
458
+      font-weight: bold;
459
+      color: #303133;
460
+      font-size: 16px;
461
+    }
462
+  }
463
+
464
+  .step-description {
465
+    color: #606266;
466
+    font-size: 14px;
467
+    line-height: 1.5;
468
+  }
469
+}
470
+
471
+.form-section {
472
+  margin-bottom: 30px;
473
+  padding: 20px;
474
+  border: 1px solid #e4e7ed;
475
+  border-radius: 8px;
476
+  background: #fff;
477
+
478
+  .section-title {
479
+    display: flex;
480
+    align-items: center;
481
+    margin-bottom: 20px;
482
+    padding-bottom: 10px;
483
+    border-bottom: 2px solid #409eff;
484
+
485
+    i {
486
+      color: #409eff;
487
+      margin-right: 8px;
488
+      font-size: 18px;
489
+    }
490
+
491
+    svg {
492
+      color: #409eff;
493
+      margin-right: 8px;
494
+      font-size: 18px;
495
+    }
496
+
497
+    span {
498
+      font-size: 16px;
499
+      font-weight: bold;
500
+      color: #303133;
501
+    }
502
+  }
503
+}
504
+
505
+.sign {
506
+  display: flex;
507
+  justify-content: flex-end;
508
+  align-items: center;
509
+  padding-right: 80px;
510
+  line-height: 30px;
511
+  /* 如果需要垂直居中 */
512
+}
513
+
514
+.mt20 {
515
+  margin-top: 20px;
516
+}
517
+
518
+.mt30 {
519
+  margin-top: 30px;
520
+}
521
+
522
+.mb20 {
523
+  margin-bottom: 20px;
524
+}
525
+
526
+.ml20 {
527
+  margin-left: 20px;
528
+}
529
+
530
+.mr20 {
531
+  margin-right: 20px;
532
+}
533
+
534
+.mt10 {
535
+  margin-top: 10px;
536
+}
537
+</style>

+ 6
- 0
package-lock.json 查看文件

@@ -0,0 +1,6 @@
1
+{
2
+  "name": "cmc-oa",
3
+  "lockfileVersion": 3,
4
+  "requires": true,
5
+  "packages": {}
6
+}

正在加载...
取消
保存