Browse Source

新增人事管理初始学历专业等字段、新增管理员可发起项目预算流程

余思翰 3 months ago
parent
commit
3768f4e9cc

+ 0
- 1
oa-ui/src/views/contractStatistic/index.vue View File

237
       }
237
       }
238
     },
238
     },
239
     changePage() {
239
     changePage() {
240
-      debugger
241
       if (this.status == 'normal') {
240
       if (this.status == 'normal') {
242
         this.getContractList();
241
         this.getContractList();
243
       } else {
242
       } else {

+ 0
- 1
oa-ui/src/views/flowable/form/budget/budgetInfo.vue View File

491
     },
491
     },
492
     confirmSucess(taskName) {
492
     confirmSucess(taskName) {
493
       const params = { taskId: this.taskForm.taskId };
493
       const params = { taskId: this.taskForm.taskId };
494
-      debugger
495
       if (taskName == '分管审核') {
494
       if (taskName == '分管审核') {
496
         if (this.budgetForm.managerComment == '' || this.budgetForm.managerComment == null) {
495
         if (this.budgetForm.managerComment == '' || this.budgetForm.managerComment == null) {
497
           this.$modal.msgError('请填写审核意见');
496
           this.$modal.msgError('请填写审核意见');

+ 0
- 1
oa-ui/src/views/flowable/form/components/print/settlePrint.vue View File

205
     initTable() {
205
     initTable() {
206
       this.deductionsList = []  //扣除列表
206
       this.deductionsList = []  //扣除列表
207
       this.deptSettleList = []  //部门分配列表
207
       this.deptSettleList = []  //部门分配列表
208
-      debugger
209
       for (let s of this.settleList) {
208
       for (let s of this.settleList) {
210
         if (s.tableNumber == '0') {
209
         if (s.tableNumber == '0') {
211
           this.deductionsList.push(s)
210
           this.deductionsList.push(s)

+ 44
- 59
oa-ui/src/views/flowable/form/settleForm.vue View File

2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-04-30 09:03:14
3
  * @Date: 2024-04-30 09:03:14
4
  * @LastEditors: Please set LastEditors
4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2025-01-09 11:43:24
5
+ * @LastEditTime: 2025-02-26 14:48:48
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div class="app-container" v-loading="loading">
8
   <div class="app-container" v-loading="loading">
9
     <el-row :gutter="20">
9
     <el-row :gutter="20">
10
       <el-col :span="flowDisabled ? 19 : 24" :xs="24">
10
       <el-col :span="flowDisabled ? 19 : 24" :xs="24">
11
         <el-button type="success" icon="el-icon-printer" @click="printOpen = true">打印</el-button>
11
         <el-button type="success" icon="el-icon-printer" @click="printOpen = true">打印</el-button>
12
-        <h2 class="text-center">项目结算表</h2>
12
+        <h2 class="text-center">项目结算表 <span style="color:#f56c6c" v-if="isAppend">(追加结算)</span> </h2>
13
         <div class="mt20 mb20" v-if="showAlter && flowDisabled">
13
         <div class="mt20 mb20" v-if="showAlter && flowDisabled">
14
           <el-alert title="任务被退回,请修改后重新提交" type="error" :closable="false">
14
           <el-alert title="任务被退回,请修改后重新提交" type="error" :closable="false">
15
             <return-comment :taskForm="taskForm" @isReturn="isReturn"></return-comment>
15
             <return-comment :taskForm="taskForm" @isReturn="isReturn"></return-comment>
90
               </el-link>
90
               </el-link>
91
             </div>
91
             </div>
92
           </el-form-item>
92
           </el-form-item>
93
-          <!-- <el-form-item label="经营发展部审核结算单" prop="">
94
-            <FileUpload v-if="taskName == '经营发展部校核'" :limit="1" :filePathName="'项目结算/经营发展部审核结算单'"
95
-              :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf', 'rar', 'zip']" @input="setModifyDocument">
96
-            </FileUpload>
97
-            <div v-if="form.modifyDocument" class="upload-list">
98
-              <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + form.modifyDocument}`)">
99
-                {{ getFileName(form.modifyDocument) }}
100
-              </el-link>
101
-              <el-link class="ml20" type="warning" :href="`${baseUrl}${'/profile/upload' + form.modifyDocument}`"
102
-                :underline="false" target="_blank">
103
-                <span class="el-icon-download">下载文件</span>
104
-              </el-link>
105
-            </div>
106
-          </el-form-item>
107
-          <el-form-item label="分管领导审核结算单" prop="">
108
-            <FileUpload v-if="taskName == '分管审核'" :limit="1" :filePathName="'项目结算/分管领导审核结算单'"
109
-              :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf', 'rar', 'zip']" @input="setFinalDocument">
110
-            </FileUpload>
111
-            <div v-if="form.finalDocument" class="upload-list">
112
-              <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + form.finalDocument}`)">
113
-                {{ getFileName(form.finalDocument) }}
114
-              </el-link>
115
-              <el-link class="ml20" type="warning" :href="`${baseUrl}${'/profile/upload' + form.finalDocument}`"
116
-                :underline="false" target="_blank">
117
-                <span class="el-icon-download">下载文件</span>
118
-              </el-link>
119
-            </div>
120
-          </el-form-item> -->
121
 
93
 
122
           <div class="headers" v-hasRole="['leader', 'business']">
94
           <div class="headers" v-hasRole="['leader', 'business']">
123
             合同信息
95
             合同信息
238
                 <!-- <el-input-number style="width:100px" v-model="work.settle" clearable :controls="false"></el-input-number> -->
210
                 <!-- <el-input-number style="width:100px" v-model="work.settle" clearable :controls="false"></el-input-number> -->
239
                 <div>{{ work.settle }}</div>
211
                 <div>{{ work.settle }}</div>
240
                 <div v-if="taskName == '结算发起'">
212
                 <div v-if="taskName == '结算发起'">
241
-                  <el-button size="mini" type="text" v-if="Number(work.settle) <= 600 && Number(work.settle) != 0" @click="setSettle(work)">置为600</el-button>
242
-                  <el-button size="mini" type="text" v-if="Number(work.settle) <= 600 && Number(work.settle) != 0" @click="resetSettle(work)">还原</el-button>
213
+                  <el-button size="mini" type="text" v-if="Number(work.settle) <= 600 && Number(work.settle) != 0"
214
+                    @click="setSettle(work)">置为600</el-button>
215
+                  <el-button size="mini" type="text" v-if="Number(work.settle) <= 600 && Number(work.settle) != 0"
216
+                    @click="resetSettle(work)">还原</el-button>
243
                 </div>
217
                 </div>
244
               </td>
218
               </td>
245
               <td>
219
               <td>
282
                 <td style="width: 280px">备注</td>
256
                 <td style="width: 280px">备注</td>
283
                 <td style="width: 100px">操作</td>
257
                 <td style="width: 100px">操作</td>
284
               </tr>
258
               </tr>
285
-              <tr v-for="(  work, index  ) in settleSumList  " :key="index">
259
+              <tr v-for="(work, index) in settleSumList" :key="index">
286
                 <td>
260
                 <td>
287
                   {{ index + 1 }}
261
                   {{ index + 1 }}
288
                 </td>
262
                 </td>
318
                 <td style="width: 280px">备注</td>
292
                 <td style="width: 280px">备注</td>
319
                 <td style="width: 100px">操作</td>
293
                 <td style="width: 100px">操作</td>
320
               </tr>
294
               </tr>
321
-              <tr v-for="(  dept, index  ) in deptSettleList  " :key="index" v-if="dept.content != '实际结算总金额'">
295
+              <tr v-for="(dept, index) in deptSettleList" :key="index" v-if="dept.content != '实际结算总金额'">
322
                 <td :rowspan="deptSettleList.length" v-if="index == 0">
296
                 <td :rowspan="deptSettleList.length" v-if="index == 0">
323
                   {{ Number(actualSumSettle).toFixed(2) }}
297
                   {{ Number(actualSumSettle).toFixed(2) }}
324
                 </td>
298
                 </td>
526
     </el-dialog>
500
     </el-dialog>
527
 
501
 
528
     <el-dialog title="导入结算工作量" :visible.sync="importOpen" width="400px" append-to-body>
502
     <el-dialog title="导入结算工作量" :visible.sync="importOpen" width="400px" append-to-body>
529
-      <settle-import @getDataList="getImportSettleList" @cancel="importOpen = false" ></settle-import>
503
+      <settle-import @getDataList="getImportSettleList" @cancel="importOpen = false"></settle-import>
530
     </el-dialog>
504
     </el-dialog>
531
   </div>
505
   </div>
532
 </template>
506
 </template>
536
 import { flowXmlAndNode } from "@/api/flowable/definition";
510
 import { flowXmlAndNode } from "@/api/flowable/definition";
537
 import { parseTime } from "@/utils/ruoyi";
511
 import { parseTime } from "@/utils/ruoyi";
538
 import { listProject, getProject } from "@/api/oa/project/project";
512
 import { listProject, getProject } from "@/api/oa/project/project";
539
-import { deepClone } from "@/utils";
540
-import { listSettle, getSettle, delSettle, addSettle, updateSettle } from "@/api/oa/settle/settle";
541
-import { listSettleSummary, getSettleSummary, addSettleSummary, delSettleSummary, updateSettleSummary } from "@/api/oa/settle/settleSummary";
542
-import { listSettleWork, getSettleWork, addSettleWork, updateSettleWork, delSettleWork } from "@/api/oa/settle/settleWork";
543
-import { listProjectContract, addProjectContract } from "@/api/oa/contract/projectContract";
513
+import { listSettle, getSettle, addSettle, updateSettle } from "@/api/oa/settle/settle";
514
+import { listSettleSummary, addSettleSummary, delSettleSummary } from "@/api/oa/settle/settleSummary";
515
+import { listSettleWork, addSettleWork, delSettleWork } from "@/api/oa/settle/settleWork";
544
 import { getPrice, getPriceRemarkByWorkType } from "@/api/oa/price/price";
516
 import { getPrice, getPriceRemarkByWorkType } from "@/api/oa/price/price";
545
 import ChoosePrice from "./components/choosePrice.vue";
517
 import ChoosePrice from "./components/choosePrice.vue";
546
 import { getUser } from "@/api/system/user";
518
 import { getUser } from "@/api/system/user";
547
 import { getUserByRole } from "@/api/system/role";
519
 import { getUserByRole } from "@/api/system/role";
548
 import { getUserByPost } from "@/api/system/post";
520
 import { getUserByPost } from "@/api/system/post";
549
-import { complete, getNextFlowNode, returnTask, findReCommitTask, taskRecommit } from "@/api/flowable/todo";
550
-import { getUsersDeptLeader, getUsersDeptLeaderByDept, getUsersManageLeaderByDept, } from "@/api/system/post.js";
521
+import { complete, getNextFlowNode, findReCommitTask, taskRecommit } from "@/api/flowable/todo";
522
+import { getUsersDeptLeaderByDept, getUsersManageLeaderByDept, } from "@/api/system/post.js";
551
 import { listBudget } from "@/api/oa/budget/budget";
523
 import { listBudget } from "@/api/oa/budget/budget";
552
 import { listBudgetSettle } from "@/api/oa/budget/budgetSettle";
524
 import { listBudgetSettle } from "@/api/oa/budget/budgetSettle";
553
 import SettlePrint from "./components/print/settlePrint.vue";
525
 import SettlePrint from "./components/print/settlePrint.vue";
554
-import { getDept } from "@/api/system/dept";
555
-import { getContract } from "@/api/oa/contract/contract";
556
 import ChooseProject from "./components/chooseProject.vue";
526
 import ChooseProject from "./components/chooseProject.vue";
557
 import projectContractInfo from "./projectContractInfo.vue";
527
 import projectContractInfo from "./projectContractInfo.vue";
558
 import ReturnComment from '@/views/flowable/form/components/flowBtn/returnComment.vue';
528
 import ReturnComment from '@/views/flowable/form/components/flowBtn/returnComment.vue';
598
   data() {
568
   data() {
599
     return {
569
     return {
600
       baseUrl: process.env.VUE_APP_BASE_API,
570
       baseUrl: process.env.VUE_APP_BASE_API,
571
+      isAppend: false,//是否追加结算
601
       printOpen: false,
572
       printOpen: false,
602
       loading: false,
573
       loading: false,
603
       drawer: false,
574
       drawer: false,
663
       projectId: '',
634
       projectId: '',
664
       showAlter: true,
635
       showAlter: true,
665
       returnOpen: false,
636
       returnOpen: false,
666
-      importOpen:false,
637
+      importOpen: false,
667
     };
638
     };
668
   },
639
   },
669
   created() {
640
   created() {
708
       const res = await listSettle({ settleId: this.taskForm.formId });
679
       const res = await listSettle({ settleId: this.taskForm.formId });
709
       if (res.total === 1) {
680
       if (res.total === 1) {
710
         this.form = res.rows[0];
681
         this.form = res.rows[0];
682
+        this.getIsAppend(this.taskForm.formId, res.rows[0].projectId) //判断是否为追加结算
711
         this.flag = true;
683
         this.flag = true;
712
         const settleId = this.taskForm.formId;
684
         const settleId = this.taskForm.formId;
713
         const [
685
         const [
797
       this.loading = false;
769
       this.loading = false;
798
       this.deptList = this.$store.state.user.deptList
770
       this.deptList = this.$store.state.user.deptList
799
     },
771
     },
800
-
772
+    async getIsAppend(settleId, projectId) {
773
+      let res = await listSettle({ projectId });
774
+      if (res.total > 1) {
775
+        let arr = res.rows
776
+        const target = arr.find(item => item.settleId === settleId);
777
+        const parseTime = (timeStr) => Date.parse(timeStr);
778
+        const allTimestamps = arr.map(item => parseTime(item.reportTime));
779
+        const minTimestamp = Math.min(...allTimestamps);
780
+        const targetTimestamp = parseTime(target.reportTime);
781
+        const isAppend = targetTimestamp !== minTimestamp;
782
+        this.isAppend = isAppend;
783
+      }
784
+    },
801
     async getBudgetSettle() {
785
     async getBudgetSettle() {
802
       let budgetData = await listBudget({ projectId: this.form.projectId })
786
       let budgetData = await listBudget({ projectId: this.form.projectId })
803
       if (budgetData.total == 1) {
787
       if (budgetData.total == 1) {
1039
       this.calculateActualSumSettle();
1023
       this.calculateActualSumSettle();
1040
     },
1024
     },
1041
     // 置为600
1025
     // 置为600
1042
-    setSettle(work){
1026
+    setSettle(work) {
1043
       work.settle = 600;
1027
       work.settle = 600;
1044
       work.remark = '不足600,按600算';
1028
       work.remark = '不足600,按600算';
1045
       this.calculateSumSettle();
1029
       this.calculateSumSettle();
1046
       this.calculateActualSumSettle();
1030
       this.calculateActualSumSettle();
1047
     },
1031
     },
1048
-    resetSettle(work){
1032
+    resetSettle(work) {
1049
       work.remark = '';
1033
       work.remark = '';
1050
       this.calculateSettle(work)
1034
       this.calculateSettle(work)
1051
     },
1035
     },
1187
         }
1171
         }
1188
       }
1172
       }
1189
     },
1173
     },
1190
-    confirmProject(val) {
1174
+    async confirmProject(val) {
1191
       if (val.length == 1) {
1175
       if (val.length == 1) {
1192
         this.prOpen = false;
1176
         this.prOpen = false;
1193
         this.chooseProject = val[0];
1177
         this.chooseProject = val[0];
1194
-        this.$set(this.form, 'projectId', val[0].projectId)
1195
-        this.isSelect = true;
1178
+        let settleData = await listSettle({ projectId: val[0].projectId });
1179
+        console.log(settleData)
1180
+        if (settleData.total >= 1) {
1181
+          this.$modal.confirm('该项目已经发起过项目结算,是否追加结算?').then(() => {
1182
+            this.$set(this.form, 'projectId', val[0].projectId)
1183
+            this.isSelect = true;
1184
+            this.isAppend = true;
1185
+          })
1186
+        }
1196
       } else {
1187
       } else {
1197
         this.$message.error("项目只能选择一个!");
1188
         this.$message.error("项目只能选择一个!");
1198
         return;
1189
         return;
1203
       getPriceRemarkByWorkType({ workType }).then((res) => {
1194
       getPriceRemarkByWorkType({ workType }).then((res) => {
1204
         if (res.code == 200) {
1195
         if (res.code == 200) {
1205
           if (workType != undefined) this.$set(work, "noteTip", res.msg);
1196
           if (workType != undefined) this.$set(work, "noteTip", res.msg);
1206
-          // this.$notify({
1207
-          //   title: workType,
1208
-          //   dangerouslyUseHTMLString: true,
1209
-          //   message: res.msg,
1210
-          //   duration: 0
1211
-          // });
1212
         }
1197
         }
1213
       });
1198
       });
1214
     },
1199
     },
1226
         return this.form.dszComment
1211
         return this.form.dszComment
1227
       }
1212
       }
1228
     },
1213
     },
1229
-    getImportSettleList(val){
1214
+    getImportSettleList(val) {
1230
       this.settleWorkList = val;
1215
       this.settleWorkList = val;
1231
-      for(let work of this.settleWorkList){
1216
+      for (let work of this.settleWorkList) {
1232
         this.calculateSettle(work)
1217
         this.calculateSettle(work)
1233
       }
1218
       }
1234
       this.importOpen = false;
1219
       this.importOpen = false;

+ 48
- 15
oa-ui/src/views/flowable/task/myProcess/index.vue View 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-10-25 14:05:06
5
+ * @LastEditTime: 2025-02-26 17:16:24
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div class="app-container">
8
   <div class="app-container">
75
 
75
 
76
     <!-- 发起流程 -->
76
     <!-- 发起流程 -->
77
     <el-dialog :title="title" :visible.sync="open" width="400px" append-to-body>
77
     <el-dialog :title="title" :visible.sync="open" width="400px" append-to-body>
78
+      <div v-if="$store.getters.userId == 1">
79
+        <el-select v-model="queryType" style="width: 120px;">
80
+          <el-option label="项目编号" value="1"></el-option>
81
+          <el-option label="项目名称" value="2"></el-option>
82
+        </el-select>
83
+        <el-select v-model="projectId" clearable filterable remote reserve-keyword placeholder="请输入关键字"
84
+          :remote-method="remoteMethod" style="width: 300px;">
85
+          <el-option v-for="project in projectList" :key="project.projectId"
86
+            :label="project.projectNumber + '-' + project.projectName" :value="project.projectId">
87
+          </el-option>
88
+        </el-select>
89
+      </div>
78
       <progress-tree :definitionList="definitionList" @confirm="handleStartProcess"
90
       <progress-tree :definitionList="definitionList" @confirm="handleStartProcess"
79
         @close="open = false"></progress-tree>
91
         @close="open = false"></progress-tree>
80
     </el-dialog>
92
     </el-dialog>
105
 import conditionDisplay from '@/views/flowable/form/components/conditionDisplay.vue';
117
 import conditionDisplay from '@/views/flowable/form/components/conditionDisplay.vue';
106
 import { deleteResources } from "@/utils/deleteResource";
118
 import { deleteResources } from "@/utils/deleteResource";
107
 import { listPerformance } from "@/api/oa/performance/performance";
119
 import { listPerformance } from "@/api/oa/performance/performance";
120
+import { listProject } from '@/api/oa/project/project';
108
 export default {
121
 export default {
109
   name: "Deploy",
122
   name: "Deploy",
110
   components: {
123
   components: {
114
   },
127
   },
115
   data() {
128
   data() {
116
     return {
129
     return {
130
+      queryType: '1',
131
+      projectId: '',
132
+      projectList: [],
117
       // 遮罩层
133
       // 遮罩层
118
       loading: true,
134
       loading: true,
119
       processLoading: true,
135
       processLoading: true,
276
         })
292
         })
277
       }
293
       }
278
     },
294
     },
295
+    remoteMethod(val) {
296
+      let params1 = {
297
+        pageNum: 1,
298
+        pageSize: 20,
299
+        projectNumber: val
300
+      }
301
+      let params2 = {
302
+        pageNum: 1,
303
+        pageSize: 20,
304
+        projectName: val
305
+      }
306
+      let params = {};
307
+      if (this.queryType == '1') {
308
+        params = params1
309
+      } else {
310
+        params = params2
311
+      }
312
+      listProject(params).then(res => {
313
+        this.projectList = res.rows;
314
+      })
315
+    },
279
     /** 新增按钮操作 */
316
     /** 新增按钮操作 */
280
     handleAdd() {
317
     handleAdd() {
281
       this.open = true;
318
       this.open = true;
305
       let formId = new Snowflake(1n, 1n, 0n).nextId().toString();
342
       let formId = new Snowflake(1n, 1n, 0n).nextId().toString();
306
       getNextFlowNodeByStart({ deploymentId: row.deploymentId, variables: { formId: formId } }).then(res => {
343
       getNextFlowNodeByStart({ deploymentId: row.deploymentId, variables: { formId: formId } }).then(res => {
307
         let data = res.data;
344
         let data = res.data;
308
-        if (data.dataType === 'dynamic') {
345
+        if (data.dataType === 'dynamic' && row.name != '项目预算') {
309
           if (data.type === 'assignee') { // 指定人员
346
           if (data.type === 'assignee') { // 指定人员
310
             this.checkSendUser = true;
347
             this.checkSendUser = true;
311
             this.checkType = "single";
348
             this.checkType = "single";
331
           if (row.id) {
368
           if (row.id) {
332
             variables.variables = formData;
369
             variables.variables = formData;
333
             let routePath = this.getRoutePath(row);
370
             let routePath = this.getRoutePath(row);
371
+            if (row.name == '项目预算') {
372
+              variables.approval = 1;
373
+              formData.formId = this.projectId;
374
+            }
334
             // 启动流程并将表单数据加入流程变量
375
             // 启动流程并将表单数据加入流程变量
335
             definitionStart(row.id, JSON.stringify(variables)).then(res => {
376
             definitionStart(row.id, JSON.stringify(variables)).then(res => {
336
               this.$modal.msgSuccess(res.msg);
377
               this.$modal.msgSuccess(res.msg);
343
                 if (records.length == 1) {
384
                 if (records.length == 1) {
344
                   records = records[0]
385
                   records = records[0]
345
                 }
386
                 }
387
+                if(row.name == '项目预算'){
388
+                  this.open = false;
389
+                  this.getList();
390
+                  return
391
+                }
346
                 this.$router.push({
392
                 this.$router.push({
347
                   path: routePath,
393
                   path: routePath,
348
                   query: {
394
                   query: {
357
                   }
403
                   }
358
                 })
404
                 })
359
               })
405
               })
360
-              // this.goBack();
361
-              // this.$router.push({
362
-              //   path: '/flowable/task/myProcess/send/index',
363
-              //   query: {
364
-              //     deployId: row.deploymentId,
365
-              //     procDefId: row.id,
366
-              //     name: row.name
367
-              //   }
368
-              // })
369
             })
406
             })
370
           }
407
           }
371
         }
408
         }
372
       })
409
       })
373
-      // } else {
374
-
375
-      // }
376
-
377
     },
410
     },
378
     getRoutePath(row) {
411
     getRoutePath(row) {
379
       let path;
412
       let path;

+ 7
- 2
oa-ui/src/views/flowable/task/myProcess/progressTree.vue View File

1
 <!--
1
 <!--
2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-04-18 15:14:45
3
  * @Date: 2024-04-18 15:14:45
4
- * @LastEditors: wrh
5
- * @LastEditTime: 2024-07-04 13:06:39
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2025-02-26 15:03:14
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div>
8
   <div>
82
         else if (i.category == "project") {
82
         else if (i.category == "project") {
83
           if (i.name != "项目预算" && i.name != "安全交底" && i.name != "技术交底" && i.name != "技术方案")
83
           if (i.name != "项目预算" && i.name != "安全交底" && i.name != "技术交底" && i.name != "技术方案")
84
             this.treeData[1].children.push(i);
84
             this.treeData[1].children.push(i);
85
+          if (i.name == "项目预算") {
86
+            if (this.$store.getters.userId == 1) {
87
+              this.treeData[1].children.push(i);
88
+            }
89
+          }
85
         } else if (i.category == "finance") {
90
         } else if (i.category == "finance") {
86
           this.treeData[2].children.push(i);
91
           this.treeData[2].children.push(i);
87
         } else if (i.category == "oa") {
92
         } else if (i.category == "oa") {

+ 8
- 2
oa-ui/src/views/flowable/task/todo/index.vue View File

11
         </el-date-picker>
11
         </el-date-picker>
12
       </el-form-item>
12
       </el-form-item>
13
       <el-form-item label="标题">
13
       <el-form-item label="标题">
14
-        <el-input v-model="searchText" size="small"  @input="filterTitle()" clearable placeholder="仅搜索当前页面标题"></el-input>
14
+        <el-input v-model="searchText" size="small" @input="filterTitle()" clearable placeholder="仅搜索当前页面标题"></el-input>
15
       </el-form-item>
15
       </el-form-item>
16
       <el-form-item>
16
       <el-form-item>
17
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
17
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
50
       </el-table-column>
50
       </el-table-column>
51
     </el-table>
51
     </el-table>
52
 
52
 
53
-    <div class="mt20" style="font-size:12px;color:#e45656;text-align:right;">tips:标题搜索只搜索当前页码列表,可在右下角调整每页条数,若当前页面未查询到,可点击下一页;</div>
53
+    <div class="mt20" style="font-size:12px;color:#e45656;text-align:right;">
54
+      tips:标题搜索只搜索当前页码列表,可在右下角调整每页条数,若当前页面未查询到,可点击下一页;</div>
54
     <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
55
     <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
55
       @pagination="getList" />
56
       @pagination="getList" />
56
     <!--选择流程接收人-->
57
     <!--选择流程接收人-->
137
       this.filterList = this.todoList.filter(data => {
138
       this.filterList = this.todoList.filter(data => {
138
         if (data.title) {
139
         if (data.title) {
139
           return !this.searchText || data.title.toLowerCase().includes(this.searchText.toLowerCase())
140
           return !this.searchText || data.title.toLowerCase().includes(this.searchText.toLowerCase())
141
+        } else {
142
+          return data
140
         }
143
         }
141
       })
144
       })
142
     },
145
     },
184
     // 跳转到处理页面
187
     // 跳转到处理页面
185
     handleProcess(row) {
188
     handleProcess(row) {
186
       let path = this.getRoutePath(row);
189
       let path = this.getRoutePath(row);
190
+      if (this.$store.getters.userId == 1 && row.procDefName == '项目预算') {
191
+        path = '/applyForm/budgetApply'
192
+      }
187
       getProcessVariables(row.taskId).then(res => {
193
       getProcessVariables(row.taskId).then(res => {
188
         this.$router.push({
194
         this.$router.push({
189
           path: path,
195
           path: path,

+ 28
- 12
oa-ui/src/views/oa/staff/index.vue View File

207
               </el-radio-group>
207
               </el-radio-group>
208
             </el-form-item>
208
             </el-form-item>
209
             <el-form-item label="年龄" prop="age" v-if="form.userId != undefined">
209
             <el-form-item label="年龄" prop="age" v-if="form.userId != undefined">
210
-              {{ form.age + '岁' }}
210
+              {{ String(form.age).slice(0,2) + '岁' }}
211
             </el-form-item>
211
             </el-form-item>
212
             <el-form-item label="手机号码" prop="phonenumber">
212
             <el-form-item label="手机号码" prop="phonenumber">
213
               <el-input v-model="form.phonenumber" placeholder="请输入手机号码" maxlength="11" />
213
               <el-input v-model="form.phonenumber" placeholder="请输入手机号码" maxlength="11" />
221
             <el-form-item label="民族" prop="ethnic">
221
             <el-form-item label="民族" prop="ethnic">
222
               <el-input v-model="form.ethnic" placeholder="请输入民族" />
222
               <el-input v-model="form.ethnic" placeholder="请输入民族" />
223
             </el-form-item>
223
             </el-form-item>
224
-            <el-form-item label="毕业学校" prop="graduateSchool">
225
-              <el-input v-model="form.graduateSchool" placeholder="请输入毕业学校" />
226
-            </el-form-item>
227
-            <el-form-item label="专业" prop="major">
228
-              <el-input v-model="form.major" placeholder="请输入专业" />
224
+            <el-form-item label="初始学历专业" prop="initialDegree">
225
+              <el-col :span="12">
226
+                <el-select v-model="form.initialDegree" placeholder="请选择" style="width:100%;" clearable>
227
+                  <el-option v-for="dict in dict.type.sys_user_degree" :key="dict.value" :label="dict.label"
228
+                  :value="dict.value" />
229
+                </el-select>
230
+              </el-col>
231
+              <el-col :span="12">
232
+                <el-input v-model="form.initialMajor" placeholder="请输入专业" />
233
+              </el-col>
229
             </el-form-item>
234
             </el-form-item>
230
-            <el-form-item label="学历" prop="degree">
231
-              <el-select v-model="form.degree" clearable placeholder="请输入学历" style="width:100%;">
232
-                <el-option v-for="dict in dict.type.sys_user_degree" :key="dict.value" :label="dict.label"
235
+            <el-form-item label="最高学历专业" prop="degree">
236
+              <el-col :span="12">
237
+                <el-select v-model="form.degree" placeholder="请选择" style="width:100%;" clearable>
238
+                  <el-option v-for="dict in dict.type.sys_user_degree" :key="dict.value" :label="dict.label"
233
                   :value="dict.value" />
239
                   :value="dict.value" />
234
-              </el-select>
240
+                </el-select>
241
+              </el-col>
242
+              <el-col :span="12">
243
+                <el-input v-model="form.major" placeholder="请输入专业" />
244
+              </el-col>
245
+            </el-form-item>
246
+            <el-form-item label="毕业学校" prop="graduateSchool">
247
+              <el-input v-model="form.graduateSchool" placeholder="请输入毕业学校" />
235
             </el-form-item>
248
             </el-form-item>
236
             <el-form-item label="家庭住址" prop="homePlace">
249
             <el-form-item label="家庭住址" prop="homePlace">
237
               <el-input type="textarea" v-model="form.homePlace" placeholder="请输入家庭住址" />
250
               <el-input type="textarea" v-model="form.homePlace" placeholder="请输入家庭住址" />
271
                   :value="dict.value" />
284
                   :value="dict.value" />
272
               </el-select>
285
               </el-select>
273
             </el-form-item>
286
             </el-form-item>
287
+            <el-form-item label="职称证书专业" prop="titleProfession">
288
+              <el-input type="textarea" v-model="form.titleProfession" placeholder="职称证书专业" />
289
+            </el-form-item>
274
             <el-form-item label="执业证书">
290
             <el-form-item label="执业证书">
275
               <el-select v-model="form.certificates" multiple placeholder="请输入执业证书" style="width:100%;">
291
               <el-select v-model="form.certificates" multiple placeholder="请输入执业证书" style="width:100%;">
276
                 <el-option v-for="dict in dict.type.sys_user_certificates" :key="dict.value" :label="dict.label"
292
                 <el-option v-for="dict in dict.type.sys_user_certificates" :key="dict.value" :label="dict.label"
303
             </el-form-item>
319
             </el-form-item>
304
             <el-form-item label="岗级" prop="postlevel">
320
             <el-form-item label="岗级" prop="postlevel">
305
               <el-col :span="12">
321
               <el-col :span="12">
306
-                <el-select v-model="form.postLevel" placeholder="请选择" style="width:100%;">
322
+                <el-select v-model="form.postLevel" placeholder="请选择" style="width:100%;" clearable>
307
                   <el-option v-for="dict in dict.type.sys_user_postlevel" :key="dict.value" :label="dict.label"
323
                   <el-option v-for="dict in dict.type.sys_user_postlevel" :key="dict.value" :label="dict.label"
308
                     :value="dict.value" />
324
                     :value="dict.value" />
309
                 </el-select>
325
                 </el-select>
310
               </el-col>
326
               </el-col>
311
               <el-col :span="12">
327
               <el-col :span="12">
312
-                <el-select v-model="form.salaryLevel" placeholder="请选择" style="width:100%;">
328
+                <el-select v-model="form.salaryLevel" placeholder="请选择" style="width:100%;" clearable>
313
                   <el-option v-for="dict in dict.type.sys_user_salarylevel" :key="dict.value" :label="dict.label"
329
                   <el-option v-for="dict in dict.type.sys_user_salarylevel" :key="dict.value" :label="dict.label"
314
                     :value="dict.value" />
330
                     :value="dict.value" />
315
                 </el-select>
331
                 </el-select>

+ 12
- 2
oa-ui/src/views/oa/staff/info.vue View File

2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-03-22 14:50:46
3
  * @Date: 2024-03-22 14:50:46
4
  * @LastEditors: Please set LastEditors
4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-10-25 15:07:27
5
+ * @LastEditTime: 2025-02-26 17:09:25
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div class="bg" v-loading="loading">
8
   <div class="bg" v-loading="loading">
196
               value: this.form.major
196
               value: this.form.major
197
             },
197
             },
198
             {
198
             {
199
-              label: '学历:',
199
+              label: '最高学历:',
200
               icon: 'degree',
200
               icon: 'degree',
201
               value: this.selectDictLabel(this.dict.type.sys_user_degree, this.form.degree)
201
               value: this.selectDictLabel(this.dict.type.sys_user_degree, this.form.degree)
202
             },
202
             },
203
+            {
204
+              label: '初始专业:',
205
+              icon: 'major',
206
+              value: this.form.initialMajor
207
+            },
208
+            {
209
+              label: '初始学历:',
210
+              icon: 'degree',
211
+              value: this.selectDictLabel(this.dict.type.sys_user_degree, this.form.initialDegree)
212
+            },
203
             {
213
             {
204
               label: '合同签订:',
214
               label: '合同签订:',
205
               icon: 'contractSign',
215
               icon: 'contractSign',

Loading…
Cancel
Save