Parcourir la source

修改分包合同、人员管理

余思翰 il y a 1 an
Parent
révision
e621e27cc8

+ 1
- 1
oa-ui/src/components/FileUpload/index.vue Voir le fichier

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

+ 5
- 5
oa-ui/src/views/flowable/form/business/contractForm.vue Voir le fichier

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

@@ -0,0 +1,45 @@
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 Voir le fichier

@@ -1,9 +1,15 @@
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 7
 <template>
2 8
   <div class="app-container">
3 9
     <el-row :gutter="20">
4 10
       <el-col :span="18" :xs="24">
5 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 13
           <el-divider></el-divider>
8 14
           <el-form-item label="项目编号:" prop="projectId">
9 15
             <el-button type="primary" size="mini" @click="open = true" v-if="taskName == '合同拟稿'">选择项目</el-button>
@@ -194,13 +200,13 @@
194 200
           <el-form-item label="线上会审:" v-if="commentOpen">
195 201
             <table border="1">
196 202
               <tr>
197
-                <td>序号</td>
203
+                <td style="width: 50px;">序号</td>
198 204
                 <td>会审部门</td>
199 205
                 <td>会审人</td>
200 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 210
               </tr>
205 211
               <tr v-for="(comment, index) in commentList" :key="index">
206 212
                 <td>
@@ -222,11 +228,31 @@
222 228
                 </td>
223 229
                 <td>
224 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 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 256
                 </td>
231 257
                 <td>
232 258
                   <span class="auditor"> {{ comment.commentUser ? comment.commentUser.nickName : '' }} </span>
@@ -279,10 +305,13 @@
279 305
               </tr>
280 306
               <tr>
281 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 315
                 </td>
287 316
               </tr>
288 317
               <tr>
@@ -306,7 +335,8 @@
306 335
             </table>
307 336
           </el-form-item>
308 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 340
           </el-form-item>
311 341
           <el-row>
312 342
             <el-col :span="6" :xs="24" :offset="12">
@@ -327,14 +357,19 @@
327 357
             </el-date-picker>
328 358
           </el-form-item>
329 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 361
           </el-form-item>
332 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 369
           </el-form-item>
335 370
         </el-form>
336 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 373
         </div>
339 374
       </el-col>
340 375
       <el-col :span="6" :xs="24">
@@ -371,11 +406,14 @@ import flow from '@/views/flowable/task/todo/detail/flow'
371 406
 import { flowXmlAndNode } from "@/api/flowable/definition";
372 407
 import { complete, rejectTask, returnList, returnTask, getNextFlowNode, delegate, flowTaskForm, } from "@/api/flowable/todo";
373 408
 import projectChoose from '../components/chooseProject.vue';
409
+import FileItem from './fileItem.vue';
410
+import { mapGetters } from "vuex";
374 411
 export default {
375 412
   dicts: ['cmc_scale_grade', 'cmc_unit'],
376 413
   components: {
377 414
     flow,
378
-    projectChoose
415
+    projectChoose,
416
+    FileItem
379 417
   },
380 418
   props: {
381 419
     taskName: {
@@ -385,11 +423,19 @@ export default {
385 423
     taskForm: {
386 424
       type: Object,
387 425
       required: true
426
+    },
427
+    formDisabled: {
428
+      type: Boolean,
429
+      default: false
388 430
     }
389 431
   },
432
+  computed: {
433
+    ...mapGetters(["userId"]),
434
+  },
390 435
   name: "SubContract",
391 436
   data() {
392 437
     return {
438
+      baseUrl: process.env.VUE_APP_BASE_API,
393 439
       draftUser: '',
394 440
       draftTime: undefined,
395 441
       managerUser: '',
@@ -518,6 +564,7 @@ export default {
518 564
       isSelect: false,
519 565
       formTotal: 0,
520 566
       flowData: {},
567
+      clickTd:{}
521 568
     };
522 569
   },
523 570
   created() {
@@ -813,10 +860,8 @@ export default {
813 860
     },
814 861
     /** 提交按钮 */
815 862
     submitForm() {
816
-      console.log(this.form);
817 863
       this.$refs["form"].validate(valid => {
818 864
         if (valid) {
819
-          debugger
820 865
           if (this.formTotal != 0) {
821 866
             updateSubContract(this.form).then(response => {
822 867
               this.$modal.msgSuccess("修改成功");
@@ -825,7 +870,6 @@ export default {
825 870
             });
826 871
             const params = { taskId: this.taskForm.taskId };
827 872
             getNextFlowNode(params).then(res => {
828
-          debugger
829 873
               if (this.taskName == '分管审核') {
830 874
                 complete(this.taskForm).then(response => {
831 875
                   this.$modal.msgSuccess(response.msg);
@@ -846,7 +890,6 @@ export default {
846 890
                 })
847 891
               }
848 892
               else if (this.taskName == '会议评审') {
849
-                debugger
850 893
                 this.meetingForm.contractId = this.form.subContractId;
851 894
                 let formData = new FormData();
852 895
                 let jsonForm = JSON.stringify(this.meetingForm);
@@ -937,7 +980,7 @@ export default {
937 980
         this.chooseProject = val[0]
938 981
         this.isSelect = true
939 982
         this.form.projectId = val[0].projectId
940
-        listProjectContract({ projectId: val.projectId }).then(response => {
983
+        listProjectContract({ projectId: this.form.projectId }).then(response => {
941 984
           if (response.rows) {
942 985
             for (let row of response.rows) {
943 986
               getContract(row.contractId).then(r => {
@@ -955,8 +998,35 @@ export default {
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 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,13 +1036,36 @@ export default {
966 1036
 @import "@/assets/styles/element-reset.scss";
967 1037
 
968 1038
 table {
969
-  /*居中*/
970
-  margin: 0 auto;
971 1039
   /*边框*/
972 1040
   /* border: 1px solid black; */
973 1041
   text-align: center;
974 1042
   border-collapse: collapse;
975 1043
   /*设置背景颜色*/
976 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 1071
 </style>

+ 23
- 18
oa-ui/src/views/flowable/form/components/conditionDisplay.vue Voir le fichier

@@ -2,23 +2,27 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-04-23 17:08:16
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-05-14 13:45:45
5
+ * @LastEditTime: 2024-05-15 14:32:16
6 6
 -->
7 7
 <template>
8 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 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 26
   </div>
23 27
 </template>
24 28
 
@@ -36,15 +40,16 @@ import SafeForm from '@/views/flowable/form/safeForm.vue';
36 40
 import SettleForm from '@/views/flowable/form/settleForm.vue';
37 41
 import BudgetInfo from '../budget/budgetInfo.vue';
38 42
 import ContractForm from '../business/contractForm.vue';
43
+import SubContract from '../business/subContract.vue';
39 44
 export default {
40 45
   props: {
41 46
     passingParam: {
42 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 55
   components: {
@@ -60,7 +65,8 @@ export default {
60 65
     SafeForm,
61 66
     SettleForm,
62 67
     BudgetInfo,
63
-    ContractForm
68
+    ContractForm,
69
+    SubContract
64 70
   },
65 71
   data() {
66 72
     return {
@@ -74,7 +80,6 @@ export default {
74 80
   },
75 81
   methods: {
76 82
     init(val) {
77
-      console.log(val);
78 83
       this.taskForm = val
79 84
       this.taskName = val.taskName
80 85
       this.procDefName = val.procDefName

+ 13
- 6
oa-ui/src/views/flowable/form/projectProcess/addproject.vue Voir le fichier

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-02-27 14:49:15
4 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 8
 <template>
@@ -18,7 +18,7 @@
18 18
         </el-col>
19 19
         <el-col :span="12">
20 20
           <el-form-item label="合同编码:">
21
-            <el-input v-model="contractCode"></el-input>
21
+            <el-input v-model="contractCode" disabled></el-input>
22 22
           </el-form-item>
23 23
         </el-col>
24 24
       </el-row>
@@ -29,7 +29,7 @@
29 29
         </el-col>
30 30
         <el-col :span="12">
31 31
           <el-form-item label="合同编号:">
32
-            <el-input v-model="contractNumber"></el-input>
32
+            <el-input v-model="contractNumber" disabled></el-input>
33 33
           </el-form-item>
34 34
         </el-col>
35 35
       </el-row>
@@ -72,10 +72,16 @@
72 72
                 :autosize="{ minRows: 4, maxRows: 10 }"></el-input>
73 73
             </td>
74 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 79
             </td>
77 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 85
             </td>
80 86
             <td>
81 87
               <el-input v-model="work.workload" clearable></el-input>
@@ -133,6 +139,7 @@ import { listProjectWork, addProjectWork } from "@/api/oa/project/projectWork";
133 139
 import { listProjectContract, addProjectContract } from "@/api/oa/contract/projectContract";
134 140
 import { listContract, getContract, delContract, addContract, updateContract } from "@/api/oa/contract/contract";
135 141
 export default {
142
+  dicts: ['cmc_scale_grade', 'cmc_unit'],
136 143
   props: {
137 144
     disabled: {
138 145
       type: Boolean,
@@ -225,7 +232,7 @@ export default {
225 232
       })
226 233
     },
227 234
     getProjectWorkList() {
228
-      listProjectWork({projectId: this.taskForm.formId}).then(res => {
235
+      listProjectWork({ projectId: this.taskForm.formId }).then(res => {
229 236
         this.workList = res.rows;
230 237
       })
231 238
     },

+ 2
- 2
oa-ui/src/views/index.vue Voir le fichier

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-01-03 09:23:11
4 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 8
 <template>
@@ -197,7 +197,7 @@ export default {
197 197
           icon: 'dept',
198 198
           bgColor: '#20B2AA',
199 199
           boxShadow: '0 5px 20px rgba(32,178,170,0.5)',
200
-          path: '/staff/user'
200
+          path: '/staff/people'
201 201
         }, {
202 202
           id: 9,
203 203
           name: '预算管理',

+ 176
- 95
oa-ui/src/views/oa/staff/index.vue Voir le fichier

@@ -49,54 +49,73 @@
49 49
 
50 50
       <el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
51 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 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 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 65
         <el-table-column label="性别" align="center" key="sex" prop="sex" v-if="columns[2].visible"
58 66
           :show-overflow-tooltip="true">
59 67
           <template slot-scope="scope">
60 68
             {{ scope.row.sex == 0 ? '男' : '女' }}
61 69
           </template>
62 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 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 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 76
           :show-overflow-tooltip="true">
69 77
           <template slot-scope="scope">
70 78
             {{ formatLevel(scope.row.postLevel, scope.row.salaryLevel,
71 79
       dict.type.sys_user_postlevel, dict.type.sys_user_salarylevel) }}
72 80
           </template>
73 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 83
           :show-overflow-tooltip="true">
76 84
           <template slot-scope="scope">
77 85
             {{ (dict.type.sys_user_titles[scope.row.titles]) ? (dict.type.sys_user_titles[scope.row.titles]).label : ""
78 86
             }}
79 87
           </template>
80 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 90
           :show-overflow-tooltip="true">
83 91
           <template slot-scope="scope">
84 92
             {{ formatCrtificates(dict.type.sys_user_certificates, scope.row.certificates) }}
85 93
           </template>
86 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 96
           :show-overflow-tooltip="true">
89 97
           <template slot-scope="scope">
90 98
             <span>{{ parseTime(scope.row.entryDate, '{y}-{m}') }}</span>
91 99
           </template>
92 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 102
           :show-overflow-tooltip="true">
95 103
           <template slot-scope="scope">
96
-            {{ scope.row.salary ? scope.row.salary.salary : "" }}
104
+            <span>{{ parseTime(scope.row.contractSign, '{y}-{m}-{d}') }}</span>
97 105
           </template>
98 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 119
           <template slot-scope="scope">
101 120
             <el-tag type="success" v-if="scope.row.status == 0">在职</el-tag>
102 121
             <el-tag type="danger" v-if="scope.row.status == 1">离职</el-tag>
@@ -123,58 +142,23 @@
123 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 146
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
128
-        <el-row>
147
+        <el-row :gutter="20">
129 148
           <el-col :span="12">
130 149
             <el-form-item label="姓名" prop="nickName">
131 150
               <el-input v-model="form.nickName" placeholder="请输入姓名" maxlength="30" />
132 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 154
             </el-form-item>
162
-          </el-col>
163
-        </el-row>
164
-        <el-row>
165
-          <el-col :span="12">
166 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 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 160
               </el-radio-group>
175 161
             </el-form-item>
176
-          </el-col>
177
-          <el-col :span="12">
178 162
             <el-form-item label="状态">
179 163
               <el-radio-group v-model="form.status">
180 164
                 <el-radio v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.value">
@@ -182,45 +166,98 @@
182 166
                 </el-radio>
183 167
               </el-radio-group>
184 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 199
           </el-col>
186
-        </el-row>
187
-        <el-row>
200
+
188 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 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 230
                 <el-option v-for="dict in dict.type.sys_user_titles" :key="dict.value" :label="dict.label"
192 231
                   :value="dict.value" />
193 232
               </el-select>
194 233
             </el-form-item>
195
-          </el-col>
196
-          <el-col :span="12">
197 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 236
                 <el-option v-for="dict in dict.type.sys_user_certificates" :key="dict.value" :label="dict.label"
200 237
                   :value="dict.value" />
201 238
               </el-select>
202 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 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 248
                 <el-option v-for="item in postOptions" :key="item.postId" :label="item.postName" :value="item.postId"
210 249
                   :disabled="item.status == 1"></el-option>
211 250
               </el-select>
212 251
             </el-form-item>
213
-          </el-col>
214
-          <el-col :span="12">
215 252
             <el-form-item label="岗级" prop="postlevel">
216 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 255
                   <el-option v-for="dict in dict.type.sys_user_postlevel" :key="dict.value" :label="dict.label"
219 256
                     :value="dict.value" />
220 257
                 </el-select>
221 258
               </el-col>
222 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 261
                   <el-option v-for="dict in dict.type.sys_user_salarylevel" :key="dict.value" :label="dict.label"
225 262
                     :value="dict.value" />
226 263
                 </el-select>
@@ -228,16 +265,6 @@
228 265
             </el-form-item>
229 266
           </el-col>
230 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 268
         <el-row>
242 269
           <el-col :span="24">
243 270
             <el-form-item label="备注">
@@ -246,7 +273,8 @@
246 273
           </el-col>
247 274
         </el-row>
248 275
       </el-form>
249
-      <div slot="footer" class="dialog-footer">
276
+
277
+      <div slot="footer" class="text-center">
250 278
         <el-button type="primary" @click="submitForm">确 定</el-button>
251 279
         <el-button @click="cancel">取 消</el-button>
252 280
       </div>
@@ -283,8 +311,9 @@ import Treeselect from "@riophae/vue-treeselect";
283 311
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
284 312
 
285 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 317
   components: { Treeselect },
289 318
   data() {
290 319
     return {
@@ -350,7 +379,7 @@ export default {
350 379
       // 查询参数
351 380
       queryParams: {
352 381
         pageNum: 1,
353
-        pageSize: 10,
382
+        pageSize: 20,
354 383
         userName: undefined,
355 384
         phonenumber: undefined,
356 385
         status: undefined,
@@ -358,13 +387,16 @@ export default {
358 387
       },
359 388
       // 列信息
360 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 402
       rules: {
@@ -417,7 +449,6 @@ export default {
417 449
       this.loading = true;
418 450
       listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
419 451
         this.userList = response.rows;
420
-        // this.userList = this.userList.slice(1)
421 452
         this.total = response.total;
422 453
         this.loading = false;
423 454
       }
@@ -539,6 +570,11 @@ export default {
539 570
       const userId = row.userId || this.ids;
540 571
       getUser(userId).then(response => {
541 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 578
         this.postOptions = response.posts;
543 579
         this.roleOptions = response.roles;
544 580
         this.$set(this.form, "postIds", response.postIds);
@@ -577,10 +613,12 @@ export default {
577 613
       this.$refs["form"].validate(valid => {
578 614
         if (valid) {
579 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 622
             updateUser(this.form).then(response => {
585 623
               this.$modal.msgSuccess("修改成功");
586 624
               this.open = false;
@@ -659,6 +697,49 @@ export default {
659 697
         this.certificates = outCrtificates.join(' / ')
660 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 Voir le fichier

@@ -1,8 +1,8 @@
1 1
 <!--
2 2
  * @Author: ysh
3 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 7
 <template>
8 8
   <div class="bg">
@@ -21,7 +21,7 @@
21 21
             <img :src="avatar" class="user-avatar" />
22 22
           </div>
23 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 25
         </div>
26 26
         <div class="info-item">
27 27
           <div class="item-label">
@@ -102,8 +102,8 @@ export default {
102 102
     ...mapGetters(["avatar"]),
103 103
   },
104 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 108
   data() {
109 109
     return {
@@ -160,7 +160,32 @@ export default {
160 160
     goBack() {
161 161
       let obj = { path: "/staff/info" }
162 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 Voir le fichier

@@ -1,8 +1,8 @@
1 1
 <!--
2 2
  * @Author: wrh
3 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 7
 <template>
8 8
   <div>
@@ -30,7 +30,7 @@
30 30
         <template slot="title">
31 31
           <div>
32 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 34
           </div>
35 35
         </template>
36 36
         <div>暂无信息,敬请期待</div>
@@ -42,7 +42,6 @@
42 42
 <script>
43 43
 
44 44
 import { listProject, getProject, getListByProjectLeader, delProject, addProject, updateProject } from "@/api/oa/project/project";
45
-
46 45
 export default {
47 46
   data() {
48 47
     return {
@@ -64,14 +63,19 @@ export default {
64 63
           projectLeader: 'XXX'
65 64
         }
66 65
       ],
67
-      activeNames: ['1']
66
+      activeNames: ['1'],
68 67
     }
69 68
   },
70 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 76
   methods: {
74 77
     handleChange(val) {
78
+
75 79
     },
76 80
     getListByProjectLeader() {
77 81
       let projectLeader = this.$route.query.userId;

Loading…
Annuler
Enregistrer