Sfoglia il codice sorgente

修改分包合同、人员管理

余思翰 1 anno fa
parent
commit
e621e27cc8

+ 1
- 1
oa-ui/src/components/FileUpload/index.vue Vedi File

45
         <el-link :href="`${baseUrl}${file.url}`" :underline="false" target="_blank">
45
         <el-link :href="`${baseUrl}${file.url}`" :underline="false" target="_blank">
46
           <span class="el-icon-document"> {{ getFileName(file.name) }} </span>
46
           <span class="el-icon-document"> {{ getFileName(file.name) }} </span>
47
         </el-link>
47
         </el-link>
48
-        <div class="ele-upload-list__item-content-action">
48
+        <div class="ele-upload-list__item-content-action" :disabled="disabled">
49
           <el-link :underline="false" @click="handleDelete(index)" type="danger"
49
           <el-link :underline="false" @click="handleDelete(index)" type="danger"
50
             >删除</el-link
50
             >删除</el-link
51
           >
51
           >

+ 5
- 5
oa-ui/src/views/flowable/form/business/contractForm.vue Vedi File

2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-05-10 15:31:57
3
  * @Date: 2024-05-10 15:31:57
4
  * @LastEditors: Please set LastEditors
4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-05-14 17:46:47
5
+ * @LastEditTime: 2024-05-15 11:51:21
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div class="app-container">
8
   <div class="app-container">
84
 
84
 
85
           </el-row>
85
           </el-row>
86
           <el-form-item label="合同文件" prop="contractDocument">
86
           <el-form-item label="合同文件" prop="contractDocument">
87
-            <FileUpload v-if="taskName == '合同拟稿'" ref="contractFile" :limit="1" :filePathName="'合同文件'"
87
+            <FileUpload v-if="taskName == '合同拟稿'" ref="contractFile" :limit="1" :filePathName="'承接合同文件'"
88
               :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']" @input="getContractPath"></FileUpload>
88
               :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']" @input="getContractPath"></FileUpload>
89
             <div v-if="taskName != '合同拟稿'">
89
             <div v-if="taskName != '合同拟稿'">
90
               <transition-group class="upload-file-list el-upload-list el-upload-list--text" name="el-fade-in-linear"
90
               <transition-group class="upload-file-list el-upload-list el-upload-list--text" name="el-fade-in-linear"
252
                     :disabled="taskName != '线上会审' || (taskName == '线上会审' && comment.userId != userId)"></el-input>
252
                     :disabled="taskName != '线上会审' || (taskName == '线上会审' && comment.userId != userId)"></el-input>
253
                 </td>
253
                 </td>
254
                 <td style="text-align:left;" @click="clickFile(comment)">
254
                 <td style="text-align:left;" @click="clickFile(comment)">
255
-                  <FileUpload v-if="comment.document == ''" ref="hs" :limit="1" :filePathName="'合同文件'"
255
+                  <FileUpload v-if="comment.document == ''" ref="hs" :limit="1" :filePathName="'承接合同文件'"
256
                     :disabled="taskName != '线上会审' || (taskName == '线上会审' && !comment.commentUser)"
256
                     :disabled="taskName != '线上会审' || (taskName == '线上会审' && !comment.commentUser)"
257
                     :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']" @input="setCommentDocument">
257
                     :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']" @input="setCommentDocument">
258
                   </FileUpload>
258
                   </FileUpload>
329
               <tr>
329
               <tr>
330
                 <td>评审意见表</td>
330
                 <td>评审意见表</td>
331
                 <td colspan="5">
331
                 <td colspan="5">
332
-                  <FileUpload v-if="taskName == '会议评审'" ref="contractFile" :limit="1" :filePathName="'合同文件'"
332
+                  <FileUpload v-if="taskName == '会议评审'" ref="contractFile" :limit="1" :filePathName="'承接合同文件'"
333
                     :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']" @input="getMeetingPath"></FileUpload>
333
                     :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']" @input="getMeetingPath"></FileUpload>
334
                   <!-- <el-input v-model="meetingForm.document" clearable :disabled="taskName != '会议评审'"></el-input> -->
334
                   <!-- <el-input v-model="meetingForm.document" clearable :disabled="taskName != '会议评审'"></el-input> -->
335
                 </td>
335
                 </td>
382
           <el-form-item label="签订扫描件" prop="signScan">
382
           <el-form-item label="签订扫描件" prop="signScan">
383
             <!-- <el-input v-model="form.signScan" placeholder="请输入签订扫描件" :disabled="taskName != '合同签订'" /> -->
383
             <!-- <el-input v-model="form.signScan" placeholder="请输入签订扫描件" :disabled="taskName != '合同签订'" /> -->
384
             <FileUpload v-if="form.signScan == null || form.signScan == ''" ref="contractFile" :limit="1"
384
             <FileUpload v-if="form.signScan == null || form.signScan == ''" ref="contractFile" :limit="1"
385
-              :filePathName="'合同文件'" :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']" @input="getSignScanPath">
385
+              :filePathName="'承接合同文件'" :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']" @input="getSignScanPath">
386
             </FileUpload>
386
             </FileUpload>
387
             <div v-if="form.signScan != null && form.signScan != ''">
387
             <div v-if="form.signScan != null && form.signScan != ''">
388
               <transition-group class="upload-file-list el-upload-list el-upload-list--text" name="el-fade-in-linear"
388
               <transition-group class="upload-file-list el-upload-list el-upload-list--text" name="el-fade-in-linear"

+ 45
- 0
oa-ui/src/views/flowable/form/business/fileItem.vue Vedi File

1
+<template>
2
+  <div>
3
+    <transition-group class="upload-file-list el-upload-list el-upload-list--text" name="el-fade-in-linear" tag="ul">
4
+      <li key="li01" class="el-upload-list__item ele-upload-list__item-content">
5
+        <el-link :href="`${baseUrl}${'/profile/upload' + document}`" :underline="false" target="_blank">
6
+          <span class="el-icon-document" style="color:#0011ff;text-decoration: underline;">
7
+            {{ getFileName(document) }}
8
+          </span>
9
+        </el-link>
10
+        <!-- <div class="ele-upload-list__item-content-action" v-if="taskName == '会议评审'">
11
+          <el-link :underline="false" @click="handleFileDelete(meetingForm, 'document')" type="danger">删除</el-link>
12
+        </div> -->
13
+      </li>
14
+    </transition-group>
15
+  </div>
16
+</template>
17
+
18
+<script>
19
+export default {
20
+  props: {
21
+    document: {
22
+      type: String,
23
+      default: ''
24
+    }
25
+  },
26
+  data() {
27
+    return {
28
+      baseUrl: process.env.VUE_APP_BASE_API,
29
+    }
30
+  },
31
+  methods: {
32
+    getFileName(name) {
33
+      if (name) {
34
+        let arr = name.split('/')
35
+        return arr[arr.length - 1];
36
+      }
37
+    },
38
+    handleFileDelete() {
39
+
40
+    }
41
+  }
42
+}
43
+</script>
44
+
45
+<style lang="scss" scoped></style>

+ 119
- 26
oa-ui/src/views/flowable/form/business/subContract.vue Vedi File

1
+<!--
2
+ * @Author: ysh
3
+ * @Date: 2024-05-10 15:31:57
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-05-15 14:32:41
6
+-->
1
 <template>
7
 <template>
2
   <div class="app-container">
8
   <div class="app-container">
3
     <el-row :gutter="20">
9
     <el-row :gutter="20">
4
       <el-col :span="18" :xs="24">
10
       <el-col :span="18" :xs="24">
5
         <h2 class="text-center">分包合同评审表</h2>
11
         <h2 class="text-center">分包合同评审表</h2>
6
-        <el-form ref="form" :model="form" :rules="rules" label-width="130px">
12
+        <el-form ref="form" :model="form" :rules="rules" label-width="130px" :formDisabled="formDisabled">
7
           <el-divider></el-divider>
13
           <el-divider></el-divider>
8
           <el-form-item label="项目编号:" prop="projectId">
14
           <el-form-item label="项目编号:" prop="projectId">
9
             <el-button type="primary" size="mini" @click="open = true" v-if="taskName == '合同拟稿'">选择项目</el-button>
15
             <el-button type="primary" size="mini" @click="open = true" v-if="taskName == '合同拟稿'">选择项目</el-button>
194
           <el-form-item label="线上会审:" v-if="commentOpen">
200
           <el-form-item label="线上会审:" v-if="commentOpen">
195
             <table border="1">
201
             <table border="1">
196
               <tr>
202
               <tr>
197
-                <td>序号</td>
203
+                <td style="width: 50px;">序号</td>
198
                 <td>会审部门</td>
204
                 <td>会审部门</td>
199
                 <td>会审人</td>
205
                 <td>会审人</td>
200
                 <td>会审意见</td>
206
                 <td>会审意见</td>
201
-                <td>会审附件</td>
202
-                <td>签名</td>
203
-                <td>日期</td>
207
+                <td style="width: 200px;">会审附件</td>
208
+                <td style="width: 90px;">签名</td>
209
+                <td style="width: 100px;">日期</td>
204
               </tr>
210
               </tr>
205
               <tr v-for="(comment, index) in commentList" :key="index">
211
               <tr v-for="(comment, index) in commentList" :key="index">
206
                 <td>
212
                 <td>
222
                 </td>
228
                 </td>
223
                 <td>
229
                 <td>
224
                   <el-input v-model="comment.comment" type="textarea" clearable :autosize="{ minRows: 4, maxRows: 10 }"
230
                   <el-input v-model="comment.comment" type="textarea" clearable :autosize="{ minRows: 4, maxRows: 10 }"
225
-                    :disabled="taskName != '线上会审' || (taskName == '线上会审' && !comment.commentUser)"></el-input>
231
+                    :disabled="taskName != '线上会审' || (taskName == '线上会审' && comment.userId != userId)"></el-input>
226
                 </td>
232
                 </td>
227
-                <td>
228
-                  <el-input v-model="comment.document" clearable
229
-                    :disabled="taskName != '线上会审' || (taskName == '线上会审' && !comment.commentUser)"></el-input>
233
+                <!-- 线上会审附件 -->
234
+                <td @click="clickFile(comment)">
235
+                  <FileUpload v-if="comment.document == ''" ref="hs" :limit="1" :filePathName="'分包合同文件'"
236
+                    :disabled="taskName != '线上会审' || (taskName == '线上会审' && !comment.commentUser)"
237
+                    :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']" @input="setCommentDocument">
238
+                  </FileUpload>
239
+                  <div v-if="comment.document != ''">
240
+                    <transition-group class="upload-file-list el-upload-list el-upload-list--text"
241
+                      name="el-fade-in-linear" tag="ul">
242
+                      <li key="li01" class="el-upload-list__item ele-upload-list__item-content">
243
+                        <el-link :href="`${baseUrl}${'/profile/upload' + comment.document}`" :underline="false"
244
+                          target="_blank">
245
+                          <span class="el-icon-document" style="color:#0011ff;text-decoration: underline;">
246
+                            {{ getFileName(comment.document) }}
247
+                          </span>
248
+                        </el-link>
249
+                        <div class="ele-upload-list__item-content-action" v-if="comment.userId == userId">
250
+                          <el-link :underline="false" @click="handleFileDelete(comment, 'document')"
251
+                            type="danger">删除</el-link>
252
+                        </div>
253
+                      </li>
254
+                    </transition-group>
255
+                  </div>
230
                 </td>
256
                 </td>
231
                 <td>
257
                 <td>
232
                   <span class="auditor"> {{ comment.commentUser ? comment.commentUser.nickName : '' }} </span>
258
                   <span class="auditor"> {{ comment.commentUser ? comment.commentUser.nickName : '' }} </span>
279
               </tr>
305
               </tr>
280
               <tr>
306
               <tr>
281
                 <td>评审意见表</td>
307
                 <td>评审意见表</td>
282
-                <td colspan="5">
283
-                  <!-- <el-input v-model="meetingForm.document" clearable :disabled="taskName != '会议评审'"></el-input> -->
284
-                  <FileUpload v-if="taskName == '会议评审'" ref="contractFile" :limit="1" :filePathName="'合同文件'"
285
-                    :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']" @input="getMeetingPath"></FileUpload>
308
+                <td colspan="5" style="text-align:left;">
309
+                  <FileUpload v-if="taskName == '会议评审'" ref="contractFile" :limit="1" :filePathName="'分包合同文件'"
310
+                    :disabled="taskName != '会议评审'" :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']"
311
+                    @input="getMeetingPath"></FileUpload>
312
+                  <div v-if="taskName != '会议评审'">
313
+                    <file-item :document="meetingForm.document"></file-item>
314
+                  </div>
286
                 </td>
315
                 </td>
287
               </tr>
316
               </tr>
288
               <tr>
317
               <tr>
306
             </table>
335
             </table>
307
           </el-form-item>
336
           </el-form-item>
308
           <el-form-item label="分管审批意见" prop="remark">
337
           <el-form-item label="分管审批意见" prop="remark">
309
-            <el-input v-model="form.managerComment" placeholder="请输入分管审批意见" :disabled="taskName != '分管审核'" />
338
+            <el-input v-model="form.managerComment" type="textarea" placeholder="请输入分管审批意见"
339
+              :disabled="taskName != '分管审核'" />
310
           </el-form-item>
340
           </el-form-item>
311
           <el-row>
341
           <el-row>
312
             <el-col :span="6" :xs="24" :offset="12">
342
             <el-col :span="6" :xs="24" :offset="12">
327
             </el-date-picker>
357
             </el-date-picker>
328
           </el-form-item>
358
           </el-form-item>
329
           <el-form-item label="签订备注" prop="signRemark">
359
           <el-form-item label="签订备注" prop="signRemark">
330
-            <el-input v-model="form.signRemark" placeholder="请输入签订备注" :disabled="taskName != '合同签订'" />
360
+            <el-input v-model="form.signRemark" type="textarea" placeholder="请输入签订备注" :disabled="taskName != '合同签订'" />
331
           </el-form-item>
361
           </el-form-item>
332
           <el-form-item label="签订扫描件" prop="signScan">
362
           <el-form-item label="签订扫描件" prop="signScan">
333
-            <el-input v-model="form.signScan" placeholder="请输入签订扫描件" :disabled="taskName != '合同签订'" />
363
+            <FileUpload v-if="taskName == '合同签订'" :limit="1" :filePathName="'分包合同文件'"
364
+              :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']" @input="getSignScanPath">
365
+            </FileUpload>
366
+            <div v-if="taskName != '合同签订'">
367
+              <file-item :document="form.signScan"></file-item>
368
+            </div>
334
           </el-form-item>
369
           </el-form-item>
335
         </el-form>
370
         </el-form>
336
         <div style="text-align: center;">
371
         <div style="text-align: center;">
337
-          <el-button type="primary" @click="submitForm">提 交</el-button>
372
+          <el-button type="primary" @click="submitForm" :disabled="formDisabled">提 交</el-button>
338
         </div>
373
         </div>
339
       </el-col>
374
       </el-col>
340
       <el-col :span="6" :xs="24">
375
       <el-col :span="6" :xs="24">
371
 import { flowXmlAndNode } from "@/api/flowable/definition";
406
 import { flowXmlAndNode } from "@/api/flowable/definition";
372
 import { complete, rejectTask, returnList, returnTask, getNextFlowNode, delegate, flowTaskForm, } from "@/api/flowable/todo";
407
 import { complete, rejectTask, returnList, returnTask, getNextFlowNode, delegate, flowTaskForm, } from "@/api/flowable/todo";
373
 import projectChoose from '../components/chooseProject.vue';
408
 import projectChoose from '../components/chooseProject.vue';
409
+import FileItem from './fileItem.vue';
410
+import { mapGetters } from "vuex";
374
 export default {
411
 export default {
375
   dicts: ['cmc_scale_grade', 'cmc_unit'],
412
   dicts: ['cmc_scale_grade', 'cmc_unit'],
376
   components: {
413
   components: {
377
     flow,
414
     flow,
378
-    projectChoose
415
+    projectChoose,
416
+    FileItem
379
   },
417
   },
380
   props: {
418
   props: {
381
     taskName: {
419
     taskName: {
385
     taskForm: {
423
     taskForm: {
386
       type: Object,
424
       type: Object,
387
       required: true
425
       required: true
426
+    },
427
+    formDisabled: {
428
+      type: Boolean,
429
+      default: false
388
     }
430
     }
389
   },
431
   },
432
+  computed: {
433
+    ...mapGetters(["userId"]),
434
+  },
390
   name: "SubContract",
435
   name: "SubContract",
391
   data() {
436
   data() {
392
     return {
437
     return {
438
+      baseUrl: process.env.VUE_APP_BASE_API,
393
       draftUser: '',
439
       draftUser: '',
394
       draftTime: undefined,
440
       draftTime: undefined,
395
       managerUser: '',
441
       managerUser: '',
518
       isSelect: false,
564
       isSelect: false,
519
       formTotal: 0,
565
       formTotal: 0,
520
       flowData: {},
566
       flowData: {},
567
+      clickTd:{}
521
     };
568
     };
522
   },
569
   },
523
   created() {
570
   created() {
813
     },
860
     },
814
     /** 提交按钮 */
861
     /** 提交按钮 */
815
     submitForm() {
862
     submitForm() {
816
-      console.log(this.form);
817
       this.$refs["form"].validate(valid => {
863
       this.$refs["form"].validate(valid => {
818
         if (valid) {
864
         if (valid) {
819
-          debugger
820
           if (this.formTotal != 0) {
865
           if (this.formTotal != 0) {
821
             updateSubContract(this.form).then(response => {
866
             updateSubContract(this.form).then(response => {
822
               this.$modal.msgSuccess("修改成功");
867
               this.$modal.msgSuccess("修改成功");
825
             });
870
             });
826
             const params = { taskId: this.taskForm.taskId };
871
             const params = { taskId: this.taskForm.taskId };
827
             getNextFlowNode(params).then(res => {
872
             getNextFlowNode(params).then(res => {
828
-          debugger
829
               if (this.taskName == '分管审核') {
873
               if (this.taskName == '分管审核') {
830
                 complete(this.taskForm).then(response => {
874
                 complete(this.taskForm).then(response => {
831
                   this.$modal.msgSuccess(response.msg);
875
                   this.$modal.msgSuccess(response.msg);
846
                 })
890
                 })
847
               }
891
               }
848
               else if (this.taskName == '会议评审') {
892
               else if (this.taskName == '会议评审') {
849
-                debugger
850
                 this.meetingForm.contractId = this.form.subContractId;
893
                 this.meetingForm.contractId = this.form.subContractId;
851
                 let formData = new FormData();
894
                 let formData = new FormData();
852
                 let jsonForm = JSON.stringify(this.meetingForm);
895
                 let jsonForm = JSON.stringify(this.meetingForm);
937
         this.chooseProject = val[0]
980
         this.chooseProject = val[0]
938
         this.isSelect = true
981
         this.isSelect = true
939
         this.form.projectId = val[0].projectId
982
         this.form.projectId = val[0].projectId
940
-        listProjectContract({ projectId: val.projectId }).then(response => {
983
+        listProjectContract({ projectId: this.form.projectId }).then(response => {
941
           if (response.rows) {
984
           if (response.rows) {
942
             for (let row of response.rows) {
985
             for (let row of response.rows) {
943
               getContract(row.contractId).then(r => {
986
               getContract(row.contractId).then(r => {
955
         })
998
         })
956
       }
999
       }
957
     },
1000
     },
1001
+    getFileName(name) {
1002
+      if (name) {
1003
+        let arr = name.split('/')
1004
+        return arr[arr.length - 1];
1005
+      }
1006
+    },
958
     getMeetingPath(val) {
1007
     getMeetingPath(val) {
959
-
1008
+      let arr = val.split('/upload')
1009
+      this.meetingForm.document = arr[1]
1010
+      if (val == "") {
1011
+        this.meetingForm.document = ""
1012
+      }
1013
+    },
1014
+    getSignScanPath(val) {
1015
+      let arr = val.split('/upload')
1016
+      this.form.signScan = arr[1]
1017
+      if (val == "") {
1018
+        this.form.signScan = ""
1019
+      }
1020
+    },
1021
+    handleFileDelete(key, val) {
1022
+      key[val] = ''
1023
+    },
1024
+    setCommentDocument(val) {
1025
+      let arr = val.split('/upload');
1026
+      this.clickTd.document = arr[1];
1027
+    },
1028
+    clickFile(val) {
1029
+      this.clickTd = val
960
     },
1030
     },
961
   }
1031
   }
962
 };
1032
 };
966
 @import "@/assets/styles/element-reset.scss";
1036
 @import "@/assets/styles/element-reset.scss";
967
 
1037
 
968
 table {
1038
 table {
969
-  /*居中*/
970
-  margin: 0 auto;
971
   /*边框*/
1039
   /*边框*/
972
   /* border: 1px solid black; */
1040
   /* border: 1px solid black; */
973
   text-align: center;
1041
   text-align: center;
974
   border-collapse: collapse;
1042
   border-collapse: collapse;
975
   /*设置背景颜色*/
1043
   /*设置背景颜色*/
976
   /* background-color: #bfa; */
1044
   /* background-color: #bfa; */
1045
+  td {
1046
+    padding: 5px;
1047
+  }
1048
+}
1049
+
1050
+.upload-file-uploader {
1051
+  margin-bottom: 5px;
1052
+}
1053
+
1054
+.upload-file-list .el-upload-list__item {
1055
+  border: 1px solid #e4e7ed;
1056
+  line-height: 2;
1057
+  margin-bottom: 10px;
1058
+  position: relative;
1059
+}
1060
+
1061
+.upload-file-list .ele-upload-list__item-content {
1062
+  display: flex;
1063
+  justify-content: space-between;
1064
+  align-items: center;
1065
+  color: inherit;
1066
+}
1067
+
1068
+.ele-upload-list__item-content-action .el-link {
1069
+  margin-right: 10px;
977
 }
1070
 }
978
 </style>
1071
 </style>

+ 23
- 18
oa-ui/src/views/flowable/form/components/conditionDisplay.vue Vedi File

2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-04-23 17:08:16
3
  * @Date: 2024-04-23 17:08:16
4
  * @LastEditors: Please set LastEditors
4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-05-14 13:45:45
5
+ * @LastEditTime: 2024-05-15 14:32:16
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div>
8
   <div>
9
-    <sc-table :taskForm="taskForm" :tableForm="tableForm" v-if="taskForm.procDefName == '生产部门考核'"></sc-table>
10
-    <jy-table :taskForm="taskForm" :tableForm="tableForm" v-else-if="taskForm.procDefName == '经营发展部考核'"></jy-table>
11
-    <js-table :taskForm="taskForm" :tableForm="tableForm" v-else-if="taskForm.procDefName == '技术质量部考核'"></js-table>
12
-    <xm-table :taskForm="taskForm" :tableForm="tableForm" v-else-if="taskForm.procDefName == '项目管理部考核'"></xm-table>
13
-    <cw-table :taskForm="taskForm" :tableForm="tableForm" v-else-if="taskForm.procDefName == '财务部考核'"></cw-table>
14
-    <zh-table :taskForm="taskForm" :tableForm="tableForm" v-else-if="taskForm.procDefName == '综合事务部考核'"></zh-table>
15
-    <project-process :taskForm="taskForm" :taskName="''" v-else-if="taskForm.procDefName == '项目流转'"></project-process>
9
+    <sc-table :key="'sc'+taskForm.taskId" :taskForm="taskForm" :tableForm="tableForm" v-if="taskForm.procDefName == '生产部门考核'"></sc-table>
10
+    <jy-table :key="'jy'+taskForm.taskId" :taskForm="taskForm" :tableForm="tableForm" v-else-if="taskForm.procDefName == '经营发展部考核'"></jy-table>
11
+    <js-table :key="'js'+taskForm.taskId" :taskForm="taskForm" :tableForm="tableForm" v-else-if="taskForm.procDefName == '技术质量部考核'"></js-table>
12
+    <xm-table :key="'xm'+taskForm.taskId" :taskForm="taskForm" :tableForm="tableForm" v-else-if="taskForm.procDefName == '项目管理部考核'"></xm-table>
13
+    <cw-table :key="'cw'+taskForm.taskId" :taskForm="taskForm" :tableForm="tableForm" v-else-if="taskForm.procDefName == '财务部考核'"></cw-table>
14
+    <zh-table :key="'zh'+taskForm.taskId" :taskForm="taskForm" :tableForm="tableForm" v-else-if="taskForm.procDefName == '综合事务部考核'"></zh-table>
15
+    <project-process :key="'pro'+taskForm.taskId" :taskForm="taskForm" :taskName="''" v-else-if="taskForm.procDefName == '项目流转'"></project-process>
16
     <car-form :taskForm="taskForm" :taskName="''" v-else-if="taskForm.procDefName == '用车审批'"></car-form>
16
     <car-form :taskForm="taskForm" :taskName="''" v-else-if="taskForm.procDefName == '用车审批'"></car-form>
17
-    <technical-form :taskForm="taskForm" v-else-if="taskForm.procDefName == '技术交底'"></technical-form>
18
-    <safe-form :taskForm="taskForm" v-else-if="taskForm.procDefName == '安全交底'"></safe-form>
19
-    <settle-form :taskForm="taskForm" :taskName="''" :disabled="true" v-else-if="taskForm.procDefName == '项目结算'"></settle-form>
20
-    <budget-info :taskForm="taskForm" v-else-if="taskForm.procDefName == '项目预算'"></budget-info>
21
-    <contract-form :taskForm="taskForm" :taskName="''" :formDisabled="true" v-else-if="taskForm.procDefName == '承接合同评审'"></contract-form>
17
+    <technical-form :key="'tec'+taskForm.taskId" :taskForm="taskForm" v-else-if="taskForm.procDefName == '技术交底'"></technical-form>
18
+    <safe-form :key="'safe'+taskForm.taskId" :taskForm="taskForm" v-else-if="taskForm.procDefName == '安全交底'"></safe-form>
19
+    <settle-form :key="'fb'+taskForm.taskId" :taskForm="taskForm" :taskName="''" :disabled="true"
20
+      v-else-if="taskForm.procDefName == '项目结算'"></settle-form>
21
+    <budget-info :key="'budget'+taskForm.taskId" :taskForm="taskForm" v-else-if="taskForm.procDefName == '项目预算'"></budget-info>
22
+    <contract-form :key="'cj'+taskForm.taskId" :taskForm="taskForm" :taskName="''" :formDisabled="true"
23
+      v-else-if="taskForm.procDefName == '承接合同评审'"></contract-form>
24
+    <sub-contract :key="'sub'+taskForm.taskId" :taskForm="taskForm" :taskName="''" :formDisabled="true"
25
+      v-else-if="taskForm.procDefName == '分包合同评审'"></sub-contract>
22
   </div>
26
   </div>
23
 </template>
27
 </template>
24
 
28
 
36
 import SettleForm from '@/views/flowable/form/settleForm.vue';
40
 import SettleForm from '@/views/flowable/form/settleForm.vue';
37
 import BudgetInfo from '../budget/budgetInfo.vue';
41
 import BudgetInfo from '../budget/budgetInfo.vue';
38
 import ContractForm from '../business/contractForm.vue';
42
 import ContractForm from '../business/contractForm.vue';
43
+import SubContract from '../business/subContract.vue';
39
 export default {
44
 export default {
40
   props: {
45
   props: {
41
     passingParam: {
46
     passingParam: {
42
       type: Object
47
       type: Object
43
     }
48
     }
44
   },
49
   },
45
-  watch:{
46
-    passingParam(newval,old){
47
-      this.init(newval)
50
+  watch: {
51
+    'passingParam.taskId'(newval, old){
52
+      this.init(this.passingParam)
48
     }
53
     }
49
   },
54
   },
50
   components: {
55
   components: {
60
     SafeForm,
65
     SafeForm,
61
     SettleForm,
66
     SettleForm,
62
     BudgetInfo,
67
     BudgetInfo,
63
-    ContractForm
68
+    ContractForm,
69
+    SubContract
64
   },
70
   },
65
   data() {
71
   data() {
66
     return {
72
     return {
74
   },
80
   },
75
   methods: {
81
   methods: {
76
     init(val) {
82
     init(val) {
77
-      console.log(val);
78
       this.taskForm = val
83
       this.taskForm = val
79
       this.taskName = val.taskName
84
       this.taskName = val.taskName
80
       this.procDefName = val.procDefName
85
       this.procDefName = val.procDefName

+ 13
- 6
oa-ui/src/views/flowable/form/projectProcess/addproject.vue Vedi File

2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-02-27 14:49:15
3
  * @Date: 2024-02-27 14:49:15
4
  * @LastEditors: Please set LastEditors
4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-04-30 11:36:20
5
+ * @LastEditTime: 2024-05-15 14:40:45
6
 -->
6
 -->
7
 
7
 
8
 <template>
8
 <template>
18
         </el-col>
18
         </el-col>
19
         <el-col :span="12">
19
         <el-col :span="12">
20
           <el-form-item label="合同编码:">
20
           <el-form-item label="合同编码:">
21
-            <el-input v-model="contractCode"></el-input>
21
+            <el-input v-model="contractCode" disabled></el-input>
22
           </el-form-item>
22
           </el-form-item>
23
         </el-col>
23
         </el-col>
24
       </el-row>
24
       </el-row>
29
         </el-col>
29
         </el-col>
30
         <el-col :span="12">
30
         <el-col :span="12">
31
           <el-form-item label="合同编号:">
31
           <el-form-item label="合同编号:">
32
-            <el-input v-model="contractNumber"></el-input>
32
+            <el-input v-model="contractNumber" disabled></el-input>
33
           </el-form-item>
33
           </el-form-item>
34
         </el-col>
34
         </el-col>
35
       </el-row>
35
       </el-row>
72
                 :autosize="{ minRows: 4, maxRows: 10 }"></el-input>
72
                 :autosize="{ minRows: 4, maxRows: 10 }"></el-input>
73
             </td>
73
             </td>
74
             <td>
74
             <td>
75
-              <el-input v-model="work.scale" clearable></el-input>
75
+              <el-select v-model="work.scale" placeholder="请选择" clearable>
76
+                <el-option v-for="dict in dict.type.cmc_scale_grade" :key="dict.value" :label="dict.label"
77
+                  :value="dict.label" />
78
+              </el-select>
76
             </td>
79
             </td>
77
             <td>
80
             <td>
78
-              <el-input v-model="work.unit" clearable></el-input>
81
+              <el-select v-model="work.unit" placeholder="请选择" clearable>
82
+                <el-option v-for="dict in dict.type.cmc_unit" :key="dict.value" :label="dict.label"
83
+                  :value="dict.label" />
84
+              </el-select>
79
             </td>
85
             </td>
80
             <td>
86
             <td>
81
               <el-input v-model="work.workload" clearable></el-input>
87
               <el-input v-model="work.workload" clearable></el-input>
133
 import { listProjectContract, addProjectContract } from "@/api/oa/contract/projectContract";
139
 import { listProjectContract, addProjectContract } from "@/api/oa/contract/projectContract";
134
 import { listContract, getContract, delContract, addContract, updateContract } from "@/api/oa/contract/contract";
140
 import { listContract, getContract, delContract, addContract, updateContract } from "@/api/oa/contract/contract";
135
 export default {
141
 export default {
142
+  dicts: ['cmc_scale_grade', 'cmc_unit'],
136
   props: {
143
   props: {
137
     disabled: {
144
     disabled: {
138
       type: Boolean,
145
       type: Boolean,
225
       })
232
       })
226
     },
233
     },
227
     getProjectWorkList() {
234
     getProjectWorkList() {
228
-      listProjectWork({projectId: this.taskForm.formId}).then(res => {
235
+      listProjectWork({ projectId: this.taskForm.formId }).then(res => {
229
         this.workList = res.rows;
236
         this.workList = res.rows;
230
       })
237
       })
231
     },
238
     },

+ 2
- 2
oa-ui/src/views/index.vue Vedi File

2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-01-03 09:23:11
3
  * @Date: 2024-01-03 09:23:11
4
  * @LastEditors: Please set LastEditors
4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-03-27 09:52:37
5
+ * @LastEditTime: 2024-05-15 15:48:32
6
 -->
6
 -->
7
 
7
 
8
 <template>
8
 <template>
197
           icon: 'dept',
197
           icon: 'dept',
198
           bgColor: '#20B2AA',
198
           bgColor: '#20B2AA',
199
           boxShadow: '0 5px 20px rgba(32,178,170,0.5)',
199
           boxShadow: '0 5px 20px rgba(32,178,170,0.5)',
200
-          path: '/staff/user'
200
+          path: '/staff/people'
201
         }, {
201
         }, {
202
           id: 9,
202
           id: 9,
203
           name: '预算管理',
203
           name: '预算管理',

+ 176
- 95
oa-ui/src/views/oa/staff/index.vue Vedi File

49
 
49
 
50
       <el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
50
       <el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
51
         <el-table-column type="selection" width="50" align="center" />
51
         <el-table-column type="selection" width="50" align="center" />
52
+        <el-table-column label="序号" width="50" align="center" prop="userId">
53
+          <template slot-scope="scope">
54
+            {{ scope.row.userId - 1 }}
55
+          </template>
56
+        </el-table-column>
52
         <!-- <el-table-column label="用户编号" align="center" key="userId" prop="userId" v-if="columns[0].visible" /> -->
57
         <!-- <el-table-column label="用户编号" align="center" key="userId" prop="userId" v-if="columns[0].visible" /> -->
53
-        <el-table-column label="姓名" align="center" key="nickName" prop="nickName" v-if="columns[2].visible"
54
-          :show-overflow-tooltip="true" />
55
-        <el-table-column label="年龄" align="center" key="age" prop="age" v-if="columns[2].visible"
58
+        <el-table-column label="姓名" align="center" key="nickName" prop="nickName" v-if="columns[0].visible"
56
           :show-overflow-tooltip="true" />
59
           :show-overflow-tooltip="true" />
60
+        <el-table-column label="年龄" align="center" key="age" prop="age" v-if="columns[1].visible">
61
+          <template slot-scope="scope">
62
+            {{ getAgeByIdCard(scope.row.idCard)  }}
63
+          </template>
64
+        </el-table-column>
57
         <el-table-column label="性别" align="center" key="sex" prop="sex" v-if="columns[2].visible"
65
         <el-table-column label="性别" align="center" key="sex" prop="sex" v-if="columns[2].visible"
58
           :show-overflow-tooltip="true">
66
           :show-overflow-tooltip="true">
59
           <template slot-scope="scope">
67
           <template slot-scope="scope">
60
             {{ scope.row.sex == 0 ? '男' : '女' }}
68
             {{ scope.row.sex == 0 ? '男' : '女' }}
61
           </template>
69
           </template>
62
         </el-table-column>
70
         </el-table-column>
63
-        <el-table-column label="手机号码" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible"
71
+        <el-table-column label="手机号码" align="center" key="phonenumber" prop="phonenumber" v-if="columns[3].visible"
64
           width="120" />
72
           width="120" />
65
-        <el-table-column label="部门" align="center" key="deptName" prop="dept.deptName" v-if="columns[3].visible"
73
+        <el-table-column label="部门" align="center" key="deptName" prop="dept.deptName" v-if="columns[4].visible"
66
           :show-overflow-tooltip="true" />
74
           :show-overflow-tooltip="true" />
67
-        <el-table-column label="岗级" align="center" key="postLevel" v-if="columns[3].visible"
75
+        <el-table-column label="岗级" align="center" key="postLevel" v-if="columns[5].visible"
68
           :show-overflow-tooltip="true">
76
           :show-overflow-tooltip="true">
69
           <template slot-scope="scope">
77
           <template slot-scope="scope">
70
             {{ formatLevel(scope.row.postLevel, scope.row.salaryLevel,
78
             {{ formatLevel(scope.row.postLevel, scope.row.salaryLevel,
71
       dict.type.sys_user_postlevel, dict.type.sys_user_salarylevel) }}
79
       dict.type.sys_user_postlevel, dict.type.sys_user_salarylevel) }}
72
           </template>
80
           </template>
73
         </el-table-column>
81
         </el-table-column>
74
-        <el-table-column label="职称" align="center" key="titles" prop="titles" v-if="columns[2].visible"
82
+        <el-table-column label="职称" align="center" key="titles" prop="titles" v-if="columns[6].visible"
75
           :show-overflow-tooltip="true">
83
           :show-overflow-tooltip="true">
76
           <template slot-scope="scope">
84
           <template slot-scope="scope">
77
             {{ (dict.type.sys_user_titles[scope.row.titles]) ? (dict.type.sys_user_titles[scope.row.titles]).label : ""
85
             {{ (dict.type.sys_user_titles[scope.row.titles]) ? (dict.type.sys_user_titles[scope.row.titles]).label : ""
78
             }}
86
             }}
79
           </template>
87
           </template>
80
         </el-table-column>
88
         </el-table-column>
81
-        <el-table-column label="执业证书" align="center" key="certificates" prop="certificates" v-if="columns[2].visible"
89
+        <el-table-column label="执业证书" align="center" key="certificates" prop="certificates" v-if="columns[7].visible"
82
           :show-overflow-tooltip="true">
90
           :show-overflow-tooltip="true">
83
           <template slot-scope="scope">
91
           <template slot-scope="scope">
84
             {{ formatCrtificates(dict.type.sys_user_certificates, scope.row.certificates) }}
92
             {{ formatCrtificates(dict.type.sys_user_certificates, scope.row.certificates) }}
85
           </template>
93
           </template>
86
         </el-table-column>
94
         </el-table-column>
87
-        <el-table-column label="入职年月" align="center" key="entryDate" prop="entryDate" v-if="columns[2].visible"
95
+        <el-table-column label="入职年月" align="center" key="entryDate" prop="entryDate" v-if="columns[8].visible"
88
           :show-overflow-tooltip="true">
96
           :show-overflow-tooltip="true">
89
           <template slot-scope="scope">
97
           <template slot-scope="scope">
90
             <span>{{ parseTime(scope.row.entryDate, '{y}-{m}') }}</span>
98
             <span>{{ parseTime(scope.row.entryDate, '{y}-{m}') }}</span>
91
           </template>
99
           </template>
92
         </el-table-column>
100
         </el-table-column>
93
-        <el-table-column label="固定成本(天)" align="center" key="salary" prop="salary.salary"v-if="columns[2].visible"
101
+        <el-table-column label="合同签订" align="center" key="contractSign" prop="contractSign" v-if="columns[8].visible"
94
           :show-overflow-tooltip="true">
102
           :show-overflow-tooltip="true">
95
           <template slot-scope="scope">
103
           <template slot-scope="scope">
96
-            {{ scope.row.salary ? scope.row.salary.salary : "" }}
104
+            <span>{{ parseTime(scope.row.contractSign, '{y}-{m}-{d}') }}</span>
97
           </template>
105
           </template>
98
         </el-table-column>
106
         </el-table-column>
99
-        <el-table-column label="状态" align="center" key="status" v-if="columns[5].visible">
107
+        <el-table-column label="合同期满" align="center" key="contractExpire" prop="contractExpire" v-if="columns[8].visible"
108
+          :show-overflow-tooltip="true">
109
+          <template slot-scope="scope">
110
+            <span>{{ parseTime(scope.row.contractExpire, '{y}-{m}-{d}') }}</span>
111
+          </template>
112
+        </el-table-column>
113
+        <!-- <el-table-column label="固定成本(天)" align="center" key="salary" prop="salary.salary" :show-overflow-tooltip="true">
114
+          <template slot-scope="scope">
115
+            {{ scope.row.salary ? scope.row.salary.salary : "" }}
116
+          </template>
117
+        </el-table-column> -->
118
+        <el-table-column label="状态" align="center" key="status" v-if="columns[9].visible">
100
           <template slot-scope="scope">
119
           <template slot-scope="scope">
101
             <el-tag type="success" v-if="scope.row.status == 0">在职</el-tag>
120
             <el-tag type="success" v-if="scope.row.status == 0">在职</el-tag>
102
             <el-tag type="danger" v-if="scope.row.status == 1">离职</el-tag>
121
             <el-tag type="danger" v-if="scope.row.status == 1">离职</el-tag>
123
     </el-row>
142
     </el-row>
124
 
143
 
125
     <!-- 添加或修改用户配置对话框 -->
144
     <!-- 添加或修改用户配置对话框 -->
126
-    <el-dialog :title="title" :visible.sync="open" width="700px" append-to-body>
145
+    <el-dialog :title="title" :visible.sync="open" width="900px" append-to-body>
127
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
146
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
128
-        <el-row>
147
+        <el-row :gutter="20">
129
           <el-col :span="12">
148
           <el-col :span="12">
130
             <el-form-item label="姓名" prop="nickName">
149
             <el-form-item label="姓名" prop="nickName">
131
               <el-input v-model="form.nickName" placeholder="请输入姓名" maxlength="30" />
150
               <el-input v-model="form.nickName" placeholder="请输入姓名" maxlength="30" />
132
             </el-form-item>
151
             </el-form-item>
133
-          </el-col>
134
-          <el-col :span="12">
135
-            <el-form-item label="归属部门" prop="deptId">
136
-              <treeselect v-model="form.deptId" :options="deptOptions" :show-count="true" placeholder="请选择归属部门" />
137
-            </el-form-item>
138
-          </el-col>
139
-        </el-row>
140
-        <el-row>
141
-          <el-col :span="12">
142
-            <el-form-item v-if="form.userId == undefined" label="用户名称" prop="userName">
143
-              <el-input v-model="form.userName" placeholder="请输入用户名称" maxlength="30" />
144
-            </el-form-item>
145
-          </el-col>
146
-          <el-col :span="12">
147
-            <el-form-item label="入职年月" prop="entryDate">
148
-              <el-date-picker v-model="form.entryDate" type="month" placeholder="请输入入职年月" />
149
-            </el-form-item>
150
-          </el-col>
151
-        </el-row>
152
-        <el-row>
153
-          <el-col :span="12">
154
-            <el-form-item label="手机号码" prop="phonenumber">
155
-              <el-input v-model="form.phonenumber" placeholder="请输入手机号码" maxlength="11" />
156
-            </el-form-item>
157
-          </el-col>
158
-          <el-col :span="12">
159
-            <el-form-item label="出生年月" prop="birthday">
160
-              <el-date-picker v-model="form.birthday" type="month" placeholder="请输入出生年月" />
152
+            <el-form-item v-if="form.userId == undefined" label="登录账号" prop="userName">
153
+              <el-input v-model="form.userName" placeholder="请输入登录账号" maxlength="30" />
161
             </el-form-item>
154
             </el-form-item>
162
-          </el-col>
163
-        </el-row>
164
-        <el-row>
165
-          <el-col :span="12">
166
             <el-form-item label="用户性别">
155
             <el-form-item label="用户性别">
167
-              <!-- <el-select v-model="form.sex" placeholder="请选择性别">
168
-                <el-option v-for="dict in dict.type.sys_user_sex" :key="dict.value" :label="dict.label"
169
-                  :value="dict.value"></el-option>
170
-              </el-select> -->
171
               <el-radio-group v-model="form.sex">
156
               <el-radio-group v-model="form.sex">
172
-                <el-radio v-for="dict in dict.type.sys_user_sex" :key="dict.value" :label="dict.value">{{ dict.label
173
-                  }}</el-radio>
157
+                <el-radio v-for="dict in dict.type.sys_user_sex" :key="dict.value" :label="dict.value">
158
+                  {{ dict.label }}
159
+                </el-radio>
174
               </el-radio-group>
160
               </el-radio-group>
175
             </el-form-item>
161
             </el-form-item>
176
-          </el-col>
177
-          <el-col :span="12">
178
             <el-form-item label="状态">
162
             <el-form-item label="状态">
179
               <el-radio-group v-model="form.status">
163
               <el-radio-group v-model="form.status">
180
                 <el-radio v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.value">
164
                 <el-radio v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.value">
182
                 </el-radio>
166
                 </el-radio>
183
               </el-radio-group>
167
               </el-radio-group>
184
             </el-form-item>
168
             </el-form-item>
169
+            <el-form-item label="年龄" prop="age">
170
+              {{ form.age + '岁' }}
171
+            </el-form-item>
172
+            <el-form-item label="手机号码" prop="phonenumber">
173
+              <el-input v-model="form.phonenumber" placeholder="请输入手机号码" maxlength="11" />
174
+            </el-form-item>
175
+            <el-form-item label="身份证" prop="idCard">
176
+              <el-input v-model="form.idCard" placeholder="请输入身份证号码" maxlength="18" />
177
+            </el-form-item>
178
+            <el-form-item label="籍贯" prop="nativePlace">
179
+              <el-input v-model="form.nativePlace" placeholder="请输入籍贯" />
180
+            </el-form-item>
181
+            <el-form-item label="民族" prop="ethnic">
182
+              <el-input v-model="form.ethnic" placeholder="请输入民族" />
183
+            </el-form-item>
184
+            <el-form-item label="毕业学校" prop="graduateSchool">
185
+              <el-input v-model="form.graduateSchool" placeholder="请输入毕业学校" />
186
+            </el-form-item>
187
+            <el-form-item label="专业" prop="major">
188
+              <el-input v-model="form.major" placeholder="请输入专业" />
189
+            </el-form-item>
190
+            <el-form-item label="学历" prop="degree">
191
+              <el-select v-model="form.degree" clearable placeholder="请输入学历" style="width:100%;">
192
+                <el-option v-for="dict in dict.type.sys_user_degree" :key="dict.value" :label="dict.label"
193
+                  :value="dict.value" />
194
+              </el-select>
195
+            </el-form-item>
196
+            <el-form-item label="家庭住址" prop="homePlace">
197
+              <el-input type="textarea" v-model="form.homePlace" placeholder="请输入家庭住址" />
198
+            </el-form-item>
185
           </el-col>
199
           </el-col>
186
-        </el-row>
187
-        <el-row>
200
+
188
           <el-col :span="12">
201
           <el-col :span="12">
202
+            <el-form-item label="归属部门" prop="deptId" style="width:100%;">
203
+              <treeselect v-model="form.deptId" :options="deptOptions" :show-count="true" placeholder="请选择归属部门" />
204
+            </el-form-item>
205
+            <el-form-item label="入职年月" prop="entryDate">
206
+              <el-date-picker v-model="form.entryDate" type="month" placeholder="请输入入职年月" style="width:100%;"
207
+                value-format="yyyy-MM" />
208
+            </el-form-item>
209
+            <el-form-item label="合同签订" prop="contractSign">
210
+              <el-date-picker v-model="form.contractSign" type="month" placeholder="请输入合同签订" style="width:100%;"
211
+                value-format="yyyy-MM-dd" />
212
+            </el-form-item>
213
+            <el-form-item label="合同期满" prop="contractExpire">
214
+              <el-date-picker v-model="form.contractExpire" type="month" placeholder="请输入合同期满" style="width:100%;"
215
+                value-format="yyyy-MM-dd" />
216
+            </el-form-item>
217
+            <el-form-item label="出生年月" prop="birthday">
218
+              <el-date-picker v-model="form.birthday" type="month" placeholder="请输入出生年月" style="width:100%;"
219
+                value-format="yyyy-MM" />
220
+            </el-form-item>
221
+            <el-form-item label="政治面貌" prop="politicalAffiliation">
222
+              <el-select v-model="form.politicalAffiliation" multiple clearable placeholder="请选择政治面貌"
223
+                style="width:100%;">
224
+                <el-option v-for="dict in dict.type.sys_user_political" :key="dict.value" :label="dict.label"
225
+                  :value="dict.value" />
226
+              </el-select>
227
+            </el-form-item>
189
             <el-form-item label="技术职称">
228
             <el-form-item label="技术职称">
190
-              <el-select v-model="form.titles" clearable placeholder="请输入技术职称">
229
+              <el-select v-model="form.titles" clearable placeholder="请输入技术职称" style="width:100%;">
191
                 <el-option v-for="dict in dict.type.sys_user_titles" :key="dict.value" :label="dict.label"
230
                 <el-option v-for="dict in dict.type.sys_user_titles" :key="dict.value" :label="dict.label"
192
                   :value="dict.value" />
231
                   :value="dict.value" />
193
               </el-select>
232
               </el-select>
194
             </el-form-item>
233
             </el-form-item>
195
-          </el-col>
196
-          <el-col :span="12">
197
             <el-form-item label="执业证书">
234
             <el-form-item label="执业证书">
198
-              <el-select v-model="form.certificates" multiple placeholder="请输入执业证书">
235
+              <el-select v-model="form.certificates" multiple placeholder="请输入执业证书" style="width:100%;">
199
                 <el-option v-for="dict in dict.type.sys_user_certificates" :key="dict.value" :label="dict.label"
236
                 <el-option v-for="dict in dict.type.sys_user_certificates" :key="dict.value" :label="dict.label"
200
                   :value="dict.value" />
237
                   :value="dict.value" />
201
               </el-select>
238
               </el-select>
202
             </el-form-item>
239
             </el-form-item>
203
-          </el-col>
204
-        </el-row>
205
-        <el-row>
206
-          <el-col :span="12">
240
+            <el-form-item label="项目经理">
241
+              <el-select v-model="form.pmLevel" placeholder="请输入项目经理等级" style="width:100%;">
242
+                <el-option v-for="dict in dict.type.sys_user_pmlevel" :key="dict.value" :label="dict.label"
243
+                  :value="dict.value" />
244
+              </el-select>
245
+            </el-form-item>
207
             <el-form-item label="岗位">
246
             <el-form-item label="岗位">
208
-              <el-select v-model="form.postIds" multiple placeholder="请选择岗位">
247
+              <el-select v-model="form.postIds" multiple placeholder="请选择岗位" style="width:100%;">
209
                 <el-option v-for="item in postOptions" :key="item.postId" :label="item.postName" :value="item.postId"
248
                 <el-option v-for="item in postOptions" :key="item.postId" :label="item.postName" :value="item.postId"
210
                   :disabled="item.status == 1"></el-option>
249
                   :disabled="item.status == 1"></el-option>
211
               </el-select>
250
               </el-select>
212
             </el-form-item>
251
             </el-form-item>
213
-          </el-col>
214
-          <el-col :span="12">
215
             <el-form-item label="岗级" prop="postlevel">
252
             <el-form-item label="岗级" prop="postlevel">
216
               <el-col :span="12">
253
               <el-col :span="12">
217
-                <el-select v-model="form.postLevel" placeholder="请选择">
254
+                <el-select v-model="form.postLevel" placeholder="请选择" style="width:100%;">
218
                   <el-option v-for="dict in dict.type.sys_user_postlevel" :key="dict.value" :label="dict.label"
255
                   <el-option v-for="dict in dict.type.sys_user_postlevel" :key="dict.value" :label="dict.label"
219
                     :value="dict.value" />
256
                     :value="dict.value" />
220
                 </el-select>
257
                 </el-select>
221
               </el-col>
258
               </el-col>
222
               <el-col :span="12">
259
               <el-col :span="12">
223
-                <el-select v-model="form.salaryLevel" placeholder="请选择">
260
+                <el-select v-model="form.salaryLevel" placeholder="请选择" style="width:100%;">
224
                   <el-option v-for="dict in dict.type.sys_user_salarylevel" :key="dict.value" :label="dict.label"
261
                   <el-option v-for="dict in dict.type.sys_user_salarylevel" :key="dict.value" :label="dict.label"
225
                     :value="dict.value" />
262
                     :value="dict.value" />
226
                 </el-select>
263
                 </el-select>
228
             </el-form-item>
265
             </el-form-item>
229
           </el-col>
266
           </el-col>
230
         </el-row>
267
         </el-row>
231
-        <el-row>
232
-          <el-col :span="12">
233
-            <el-form-item label="项目经理">
234
-              <el-select v-model="form.pmLevel" placeholder="请输入项目经理等级">
235
-                <el-option v-for="dict in dict.type.sys_user_pmlevel" :key="dict.value" :label="dict.label"
236
-                  :value="dict.value" />
237
-              </el-select>
238
-            </el-form-item>
239
-          </el-col>
240
-        </el-row>
241
         <el-row>
268
         <el-row>
242
           <el-col :span="24">
269
           <el-col :span="24">
243
             <el-form-item label="备注">
270
             <el-form-item label="备注">
246
           </el-col>
273
           </el-col>
247
         </el-row>
274
         </el-row>
248
       </el-form>
275
       </el-form>
249
-      <div slot="footer" class="dialog-footer">
276
+
277
+      <div slot="footer" class="text-center">
250
         <el-button type="primary" @click="submitForm">确 定</el-button>
278
         <el-button type="primary" @click="submitForm">确 定</el-button>
251
         <el-button @click="cancel">取 消</el-button>
279
         <el-button @click="cancel">取 消</el-button>
252
       </div>
280
       </div>
283
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
311
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
284
 
312
 
285
 export default {
313
 export default {
286
-  name: "User",
287
-  dicts: ['sys_normal_disable', 'sys_user_sex', 'sys_user_titles', 'sys_user_certificates', 'sys_user_pmlevel', 'sys_user_postlevel', 'sys_user_salarylevel'],
314
+  name: "Staff",
315
+  dicts: ['sys_normal_disable', 'sys_user_sex', 'sys_user_titles', 'sys_user_certificates',
316
+    'sys_user_pmlevel', 'sys_user_postlevel', 'sys_user_salarylevel', 'sys_user_political', 'sys_user_degree'],
288
   components: { Treeselect },
317
   components: { Treeselect },
289
   data() {
318
   data() {
290
     return {
319
     return {
350
       // 查询参数
379
       // 查询参数
351
       queryParams: {
380
       queryParams: {
352
         pageNum: 1,
381
         pageNum: 1,
353
-        pageSize: 10,
382
+        pageSize: 20,
354
         userName: undefined,
383
         userName: undefined,
355
         phonenumber: undefined,
384
         phonenumber: undefined,
356
         status: undefined,
385
         status: undefined,
358
       },
387
       },
359
       // 列信息
388
       // 列信息
360
       columns: [
389
       columns: [
361
-        { key: 0, label: `用户编号`, visible: true },
362
-        { key: 1, label: `用户名称`, visible: true },
363
-        { key: 2, label: `用户昵称`, visible: true },
364
-        { key: 3, label: `部门`, visible: true },
365
-        { key: 4, label: `手机号码`, visible: true },
366
-        { key: 5, label: `状态`, visible: true },
367
-        { key: 6, label: `创建时间`, visible: true }
390
+        { key: 0, label: `姓名`, visible: true },
391
+        { key: 1, label: `年龄`, visible: true },
392
+        { key: 2, label: `性别`, visible: true },
393
+        { key: 3, label: `手机号码`, visible: true },
394
+        { key: 4, label: `部门`, visible: true },
395
+        { key: 5, label: `岗级`, visible: true },
396
+        { key: 6, label: `职称`, visible: true },
397
+        { key: 7, label: `执业证书`, visible: true },
398
+        { key: 8, label: `入职年月`, visible: true },
399
+        { key: 9, label: `状态`, visible: true },
368
       ],
400
       ],
369
       // 表单校验
401
       // 表单校验
370
       rules: {
402
       rules: {
417
       this.loading = true;
449
       this.loading = true;
418
       listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
450
       listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
419
         this.userList = response.rows;
451
         this.userList = response.rows;
420
-        // this.userList = this.userList.slice(1)
421
         this.total = response.total;
452
         this.total = response.total;
422
         this.loading = false;
453
         this.loading = false;
423
       }
454
       }
539
       const userId = row.userId || this.ids;
570
       const userId = row.userId || this.ids;
540
       getUser(userId).then(response => {
571
       getUser(userId).then(response => {
541
         this.form = response.data;
572
         this.form = response.data;
573
+        if (this.form.politicalAffiliation) {
574
+          this.form.politicalAffiliation = this.form.politicalAffiliation.split('、')
575
+        }
576
+        this.form.birthday = this.getBirthdayByIdCard(this.form.idCard);
577
+        this.form.age = this.getAgeByIdCard(this.form.idCard);
542
         this.postOptions = response.posts;
578
         this.postOptions = response.posts;
543
         this.roleOptions = response.roles;
579
         this.roleOptions = response.roles;
544
         this.$set(this.form, "postIds", response.postIds);
580
         this.$set(this.form, "postIds", response.postIds);
577
       this.$refs["form"].validate(valid => {
613
       this.$refs["form"].validate(valid => {
578
         if (valid) {
614
         if (valid) {
579
           if (this.form.userId != undefined) {
615
           if (this.form.userId != undefined) {
580
-            if (this.form.certificates != "" && this.form.certificates != undefined && this.form.certificates != null)
581
-              this.form.certificates = this.form.certificates.join(',')
582
-            else
583
-              this.form.certificates = '';
616
+            // if (this.form.certificates != "" && this.form.certificates != undefined && this.form.certificates != null)
617
+            //   this.form.certificates = this.form.certificates.join(',')
618
+            // else
619
+            //   this.form.certificates = '';
620
+            this.form.certificates = this.formatArrayToString(this.form.certificates,',');
621
+            this.form.politicalAffiliation = this.formatArrayToString(this.form.politicalAffiliation,'、')
584
             updateUser(this.form).then(response => {
622
             updateUser(this.form).then(response => {
585
               this.$modal.msgSuccess("修改成功");
623
               this.$modal.msgSuccess("修改成功");
586
               this.open = false;
624
               this.open = false;
659
         this.certificates = outCrtificates.join(' / ')
697
         this.certificates = outCrtificates.join(' / ')
660
         return outCrtificates.join(' / ')
698
         return outCrtificates.join(' / ')
661
       }
699
       }
700
+    },
701
+
702
+    getBirthdayByIdCard(idCard) {
703
+      // 使用 substring() 方法和 split() 方法提取出生年月日信息
704
+      const birthday = [idCard.substr(6, 4), idCard.substr(10, 2), idCard.substr(12, 2)].join('-')
705
+      // 使用 Date 对象的 toISOString() 方法将出生年月日信息转换为日期格式
706
+      const date = new Date(birthday);
707
+      const formattedDate = this.parseTime(date, '{y}-{m}-{d}')
708
+      return formattedDate;
709
+    },
710
+    getAgeByIdCard(idCard) {
711
+      const sexAndAge = {}
712
+      //获取用户身份证号码
713
+      const userCard = idCard
714
+      //如果用户身份证号码为undefined则返回空
715
+      if (!userCard) {
716
+        return sexAndAge
717
+      }
718
+      // 获取出生日期
719
+      const yearBirth = userCard.substring(6, 10)
720
+      const monthBirth = userCard.substring(10, 12)
721
+      const dayBirth = userCard.substring(12, 14)
722
+      // 获取当前年月日并计算年龄
723
+      const myDate = new Date()
724
+      const monthNow = myDate.getMonth() + 1
725
+      const dayNow = myDate.getDate()
726
+      let age = myDate.getFullYear() - yearBirth
727
+
728
+      if (monthNow < monthBirth || (monthNow == monthBirth && dayNow < dayBirth)) {
729
+        age--
730
+      }
731
+      // 得到年龄
732
+      sexAndAge.age = age
733
+      return sexAndAge.age
734
+    },
735
+    formatArrayToString(str, splitStr) {
736
+      let newStr ="";
737
+      if (str) {
738
+        newStr = str.join(splitStr)
739
+      } else {
740
+        newStr = ""
741
+      }
742
+      return newStr
662
     }
743
     }
663
   }
744
   }
664
 };
745
 };

+ 31
- 6
oa-ui/src/views/oa/staff/info.vue Vedi File

1
 <!--
1
 <!--
2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-03-22 14:50:46
3
  * @Date: 2024-03-22 14:50:46
4
- * @LastEditors: wrh
5
- * @LastEditTime: 2024-03-27 16:33:09
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-05-15 19:09:21
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div class="bg">
8
   <div class="bg">
21
             <img :src="avatar" class="user-avatar" />
21
             <img :src="avatar" class="user-avatar" />
22
           </div>
22
           </div>
23
           <div class="user-name">{{ this.form.nickName }}</div>
23
           <div class="user-name">{{ this.form.nickName }}</div>
24
-          <div class="user-sex">{{ this.form.age + '岁 ' }} {{ this.form.sex == '0' ? ' 男' : ' 女' }}</div>
24
+          <div class="user-sex">{{ getAgeByIdCard(this.form.idCard) + '岁' }} {{ this.form.sex == '0' ? ' 男' : ' 女' }}</div>
25
         </div>
25
         </div>
26
         <div class="info-item">
26
         <div class="info-item">
27
           <div class="item-label">
27
           <div class="item-label">
102
     ...mapGetters(["avatar"]),
102
     ...mapGetters(["avatar"]),
103
   },
103
   },
104
   created() {
104
   created() {
105
-
106
-    this.getUserInfo(this.$route.query.userId);
105
+    if (this.$route.query)
106
+      this.getUserInfo(this.$route.query.userId);
107
   },
107
   },
108
   data() {
108
   data() {
109
     return {
109
     return {
160
     goBack() {
160
     goBack() {
161
       let obj = { path: "/staff/info" }
161
       let obj = { path: "/staff/info" }
162
       this.$tab.closeOpenPage(obj);
162
       this.$tab.closeOpenPage(obj);
163
-      this.$router.push({ path: '/staff/user' });
163
+      this.$router.push({ path: '/staff/people' });
164
+    },
165
+    getAgeByIdCard(idCard) {
166
+      const sexAndAge = {}
167
+      //获取用户身份证号码
168
+      const userCard = idCard
169
+      //如果用户身份证号码为undefined则返回空
170
+      if (!userCard) {
171
+        return sexAndAge
172
+      }
173
+      // 获取出生日期
174
+      const yearBirth = userCard.substring(6, 10)
175
+      const monthBirth = userCard.substring(10, 12)
176
+      const dayBirth = userCard.substring(12, 14)
177
+      // 获取当前年月日并计算年龄
178
+      const myDate = new Date()
179
+      const monthNow = myDate.getMonth() + 1
180
+      const dayNow = myDate.getDate()
181
+      let age = myDate.getFullYear() - yearBirth
182
+
183
+      if (monthNow < monthBirth || (monthNow == monthBirth && dayNow < dayBirth)) {
184
+        age--
185
+      }
186
+      // 得到年龄
187
+      sexAndAge.age = age
188
+      return sexAndAge.age
164
     },
189
     },
165
   }
190
   }
166
 }
191
 }

+ 10
- 6
oa-ui/src/views/oa/staff/projectInfo.vue Vedi File

1
 <!--
1
 <!--
2
  * @Author: wrh
2
  * @Author: wrh
3
  * @Date: 2024-03-25 17:38:39
3
  * @Date: 2024-03-25 17:38:39
4
- * @LastEditors: wrh
5
- * @LastEditTime: 2024-03-27 16:30:37
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-05-15 19:05:45
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div>
8
   <div>
30
         <template slot="title">
30
         <template slot="title">
31
           <div>
31
           <div>
32
             <svg-icon icon-class="ArrowRight" class="info-icon"></svg-icon>
32
             <svg-icon icon-class="ArrowRight" class="info-icon"></svg-icon>
33
-            {{ item.projectNumber + ' ' + ' ' + item.projectName + ' ' + ' ' + item.projectLeaderUser.nickName }}
33
+            <!-- {{ item.projectNumber + ' ' + ' ' + item.projectName + ' ' + ' ' + item.projectLeaderUser.nickName }} -->
34
           </div>
34
           </div>
35
         </template>
35
         </template>
36
         <div>暂无信息,敬请期待</div>
36
         <div>暂无信息,敬请期待</div>
42
 <script>
42
 <script>
43
 
43
 
44
 import { listProject, getProject, getListByProjectLeader, delProject, addProject, updateProject } from "@/api/oa/project/project";
44
 import { listProject, getProject, getListByProjectLeader, delProject, addProject, updateProject } from "@/api/oa/project/project";
45
-
46
 export default {
45
 export default {
47
   data() {
46
   data() {
48
     return {
47
     return {
64
           projectLeader: 'XXX'
63
           projectLeader: 'XXX'
65
         }
64
         }
66
       ],
65
       ],
67
-      activeNames: ['1']
66
+      activeNames: ['1'],
68
     }
67
     }
69
   },
68
   },
70
   created() {
69
   created() {
71
-    this.getListByProjectLeader();
70
+    // this.getListByProjectLeader();
71
+    if(this.$route.query){
72
+      let userId = this.$route.query.userId
73
+      this.getUserInfo(userId)
74
+    }
72
   },
75
   },
73
   methods: {
76
   methods: {
74
     handleChange(val) {
77
     handleChange(val) {
78
+
75
     },
79
     },
76
     getListByProjectLeader() {
80
     getListByProjectLeader() {
77
       let projectLeader = this.$route.query.userId;
81
       let projectLeader = this.$route.query.userId;

Loading…
Annulla
Salva