Sfoglia il codice sorgente

修改项目信息界面

余思翰 1 anno fa
parent
commit
4f6f82258d

+ 694
- 223
oa-back/sql/cmc_oa(小余测试数据).sql
File diff soppresso perché troppo grande
Vedi File


+ 8
- 1
oa-ui/src/views/flowable/form/components/settlePrint.vue Vedi File

@@ -156,6 +156,11 @@ export default {
156 156
       type: Array
157 157
     }
158 158
   },
159
+  watch:{
160
+    settleList(val){
161
+      this.initTable();
162
+    }
163
+  },
159 164
   data() {
160 165
     return {
161 166
       settleSum: {},
@@ -183,10 +188,12 @@ export default {
183 188
     }
184 189
   },
185 190
   mounted() {
186
-    this.initTable();
191
+    
187 192
   },
188 193
   methods: {
189 194
     initTable() {
195
+      this.deductionsList = []
196
+      this.deptSettleList = []
190 197
       for (let s of this.settleList) {
191 198
         if (s.tableNumber == '0') {
192 199
           this.deductionsList.push(s)

+ 80
- 18
oa-ui/src/views/flowable/form/inProgress/settleData.vue Vedi File

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-05-10 14:45:03
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-05-28 18:35:30
5
+ * @LastEditTime: 2024-05-30 15:57:17
6 6
 -->
7 7
 <template>
8 8
   <div class="mt20">
@@ -20,11 +20,11 @@
20 20
       <el-table-column type="index" label="序号" width="50" />
21 21
       <el-table-column label="上报人" prop="reporterName" />
22 22
       <el-table-column label="申请时间" prop="reportTime" width="100" />
23
-      <el-table-column label="综合事务部意见" prop="zhComment" show-overflow-tooltip  width="120" />
24
-      <el-table-column label="技术质量部意见" prop="jsComment" show-overflow-tooltip  width="120" />
25
-      <el-table-column label="项目管理部意见" prop="xmComment" show-overflow-tooltip  width="120" />
26
-      <el-table-column label="承担部门意见" prop="deptComment" show-overflow-tooltip  width="120" />
27
-      <el-table-column label="经营管理部意见" prop="jyComment" show-overflow-tooltip  width="120" />
23
+      <el-table-column label="综合事务部意见" prop="zhComment" show-overflow-tooltip width="120" />
24
+      <el-table-column label="技术质量部意见" prop="jsComment" show-overflow-tooltip width="120" />
25
+      <el-table-column label="项目管理部意见" prop="xmComment" show-overflow-tooltip width="120" />
26
+      <el-table-column label="承担部门意见" prop="deptComment" show-overflow-tooltip width="120" />
27
+      <el-table-column label="经营管理部意见" prop="jyComment" show-overflow-tooltip width="120" />
28 28
       <el-table-column label="分管审核意见" prop="managerComment" show-overflow-tooltip width="120" />
29 29
       <el-table-column label="总经理意见" prop="gmComment" show-overflow-tooltip width="120" />
30 30
       <el-table-column label="操作" fixed="right" header-align="center">
@@ -33,28 +33,33 @@
33 33
         </template>
34 34
       </el-table-column>
35 35
     </el-table>
36
-    <el-dialog title="结算明细" :visible.sync="open" append-to-body>
37
-      <el-table :data="summaryList" style="width: 100%">
38
-        <el-table-column type="index" label="序号" width="50" />
39
-        <el-table-column prop="content" label="内容" />
40
-        <el-table-column prop="amount" label="结算金额" />
41
-        <el-table-column prop="remark" label="备注" />
42
-      </el-table>
36
+    <el-dialog title="结算明细" :visible.sync="open" append-to-body width="65%">
37
+      <settle-print :form="clickRow" :chooseProject="chooseProject" :workList="workList"
38
+        :settleList="summaryList"></settle-print>
43 39
     </el-dialog>
44 40
   </div>
45 41
 </template>
46 42
 
47 43
 <script>
44
+import { getProject } from "@/api/oa/project/project";
48 45
 import { listSettle, getSettle, delSettle, addSettle, updateSettle } from "@/api/oa/settle/settle";
46
+import { listSettleWork } from '@/api/oa/settle/settleWork';
47
+import { listSettleSummary } from '@/api/oa/settle/settleSummary';
48
+import { getPrice } from "@/api/oa/price/price";
49 49
 import { listDefinition } from "@/api/flowable/definition";
50 50
 import { getNextFlowNodeByStart } from "@/api/flowable/todo";
51 51
 import { definitionStart } from "@/api/flowable/definition";
52 52
 import { todoList } from "@/api/flowable/todo";
53 53
 import { MessageBox } from 'element-ui'
54
-import { getUser } from "@/api/system/user";
54
+import { listUser, getUser } from "@/api/system/user";
55 55
 import { Snowflake } from '@/utils/snowFlake.js'
56
-import { listSettleSummary } from '@/api/oa/settle/settleSummary'
56
+import SettleForm from '../settleForm.vue';
57
+import SettlePrint from '../components/settlePrint.vue';
57 58
 export default {
59
+  components: {
60
+    SettleForm,
61
+    SettlePrint
62
+  },
58 63
   props: {
59 64
     taskForm: {
60 65
       type: Object,
@@ -66,14 +71,31 @@ export default {
66 71
       open: false,
67 72
       dataList: [],
68 73
       definitionList: [], //流程列表
69
-      summaryList:[]
74
+      summaryList: [],
75
+      workList: [],
76
+      settleList: [],
77
+      userList:[],
78
+      chooseProject: {},
79
+      clickRow: {}
70 80
     }
71 81
   },
72 82
   mounted() {
83
+    this.getUserList();
73 84
     this.getSettleData();
74 85
     this.listDefinition();
86
+    this.getChooseProject();
75 87
   },
76 88
   methods: {
89
+    getUserList() {
90
+      listUser({
91
+        pageNum: 1,
92
+        pageSize: 9999
93
+      }).then(res => {
94
+        if (res.code == 200) {
95
+          this.userList = res.rows
96
+        }
97
+      })
98
+    },
77 99
     getSettleData() {
78 100
       listSettle({ projectId: this.taskForm.formId }).then(res => {
79 101
         if (res.code == 200) {
@@ -84,8 +106,33 @@ export default {
84 106
         }
85 107
       })
86 108
     },
109
+    getChooseProject() {
110
+      getProject(this.taskForm.formId).then(res => {
111
+        if (res.data)
112
+          this.chooseProject = res.data
113
+      })
114
+    },
115
+    getSettleWorkList(settleId) {
116
+      listSettleWork({ pageNum: 1, pageSize: 9999, settleId }).then(res => {
117
+        if (res.code == 200) {
118
+          this.workList = res.rows;
119
+          for (let work of this.workList) {
120
+            getPrice(work.priceId).then(res => {
121
+              if (res.data) {
122
+                this.$set(work, "scale", res.data.scaleGrade);
123
+                this.$set(work, "unit", res.data.unit);
124
+                if (work.groundType == "0") {
125
+                  work.price = res.data.commonPrice;
126
+                } else {
127
+                  work.price = res.data.complexPrice;
128
+                }
129
+              }
130
+            });
131
+          }
132
+        }
133
+      })
134
+    },
87 135
     getReporter(row) {
88
-      console.log(row);
89 136
       getUser(row.reporter).then(res => {
90 137
         this.$set(row, 'reporterName', res.data.nickName)
91 138
       })
@@ -107,10 +154,25 @@ export default {
107 154
       });
108 155
     },
109 156
     handleLook(row) {
110
-      console.log(row);
157
+      this.clickRow = row
158
+      this.clickRow.zhUserName = this.getUserNickName(row.zhUserId);
159
+      this.clickRow.jsUserName = this.getUserNickName(row.jsUserId);
160
+      this.clickRow.xmUserName = this.getUserNickName(row.xmUserId);
161
+      this.clickRow.deptUserName = this.getUserNickName(row.deptUserId);
162
+      this.clickRow.jyUserName = this.getUserNickName(row.jyUserId);
163
+      this.clickRow.managerUserName = this.getUserNickName(row.managerUserId);
164
+      this.clickRow.gmUserName = this.getUserNickName(row.gmUserId);
111 165
       this.getSummaryList(row.settleId)
166
+      this.getSettleWorkList(row.settleId)
112 167
       this.open = true
113 168
     },
169
+    getUserNickName(id){
170
+      for(let user of this.userList){
171
+        if(user.userId == id){
172
+          return user.nickName
173
+        }
174
+      }
175
+    },
114 176
     addSettleFlow() {
115 177
       let row = this.definitionList[0];
116 178
       let formId = new Snowflake(1n, 1n, 0n).nextId().toString();

+ 48
- 5
oa-ui/src/views/flowable/form/projectProcess/inProgress.vue Vedi File

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-04-15 09:35:41
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-05-29 15:31:52
5
+ * @LastEditTime: 2024-05-30 10:51:38
6 6
 -->
7 7
 <template>
8 8
   <div>
@@ -44,6 +44,15 @@
44 44
             }}</el-tag>
45 45
           <el-button class="ml10" @click="openCar = true" type="primary" size="mini" icon="el-icon-plus"></el-button> -->
46 46
         </el-form-item>
47
+        <el-form-item label="使用设备:">
48
+          <el-tooltip class="item" effect="dark" content="直接获取设备申请中的设备,若无车辆,则需要先提交项目的设备申请" placement="top-end">
49
+            <el-select v-model="form.devices" multiple disabled style="width:90%">
50
+              <el-option v-for="item in deviceList" :key="item.deviceId" :label="item.name + '【' + (item.brand != null ? item.brand : '') + (item.series != null ? '-' + item.series + '】' : '')
51
+        + (item.code != null ? '(设备编号:' + item.code + ')' : '') + '📍' + item.place" :value="item.deviceId">
52
+              </el-option>
53
+            </el-select>
54
+          </el-tooltip>
55
+        </el-form-item>
47 56
         <el-row :gutter="20">
48 57
           <el-col :span="11">
49 58
             <el-form-item label="进场时间:">
@@ -132,9 +141,11 @@ import { complete, rejectTask, returnList, returnTask, getNextFlowNode, delegate
132 141
 import { listProjectProgress, getProjectProgress, addProjectProgress, delProjectProgress } from "@/api/oa/project/projectProgress";
133 142
 import { getProject, updateProject } from "@/api/oa/project/project";
134 143
 import { getCar } from "@/api/oa/car/car";
135
-import { listCarApproval, getCarApproval } from '@/api/oa/car/carApproval'
144
+import { listCarApproval, getCarApproval } from '@/api/oa/car/carApproval';
136 145
 import { listUser } from '@/api/system/user';
137
-import { listCar } from '@/api/oa/car/car'
146
+import { listCar } from '@/api/oa/car/car';
147
+import { listDevice, getDevice } from "@/api/oa/device/device";
148
+import { listDeviceApproval } from "@/api/oa/device/deviceApproval"
138 149
 import borrowData from '../inProgress/borrowData.vue';
139 150
 import SettleData from '../inProgress/settleData.vue';
140 151
 import ChoosePeople from '../budget/components/choosePeople.vue';
@@ -193,6 +204,7 @@ export default {
193 204
       budgetId: "",
194 205
       userList: [],
195 206
       carList: [],
207
+      deviceList: [],
196 208
       participates: [],
197 209
       chooseCar: [],
198 210
       chooseDriver: [],
@@ -211,6 +223,7 @@ export default {
211 223
       this.initProgress();
212 224
       this.getUserList();
213 225
       this.getCarList();
226
+      this.getDeviceList();
214 227
     }
215 228
   },
216 229
   mounted() {
@@ -230,7 +243,10 @@ export default {
230 243
           if (res.data.drivers) {
231 244
             this.form.drivers = (res.data.drivers.split(',')).map(Number);
232 245
           }
233
-          if (!(res.data.cars && res.data.drivers)) {
246
+          if (res.data.devices) {
247
+            this.form.devices = (res.data.devices.split(',')).map(Number);
248
+          }
249
+          if (!(res.data.cars && res.data.drivers && res.data.devices)) {
234 250
             this.getCarAndDriver();
235 251
           }
236 252
         }
@@ -260,7 +276,6 @@ export default {
260 276
     // 通过用车审批表获取车辆和驾驶员信息
261 277
     getCarAndDriver() {
262 278
       listCarApproval({ projectId: this.taskForm.formId }).then(res => {
263
-        console.log(res);
264 279
         if (res.rows) {
265 280
           this.form.drivers = []
266 281
           this.form.cars = []
@@ -281,6 +296,21 @@ export default {
281 296
           }
282 297
         }
283 298
       })
299
+      listDeviceApproval({ projectId: this.taskForm.formId }).then(res => {
300
+        console.log(res.rows);
301
+        if (res.rows) {
302
+          this.form.devices = []
303
+          for (let data of res.rows) {
304
+            if (data.devices) {
305
+              let devices = data.devices.split(',');
306
+              devices = devices.map(Number);
307
+              devices.map(item => {
308
+                this.form.devices.push(Number(item));
309
+              });
310
+            }
311
+          }
312
+        }
313
+      })
284 314
     },
285 315
     addProgressList() {
286 316
       this.progressList.push({
@@ -319,11 +349,15 @@ export default {
319 349
       this.form.projectId = this.taskForm.formId;
320 350
       this.form.cars = this.form.cars.length != 0 ? this.form.cars.join(',') : '';
321 351
       this.form.drivers = this.form.drivers.length != 0 ? this.form.drivers.join(',') : '';
352
+      this.form.devices = this.form.devices.length != 0 ? this.form.devices.join(',') : '';
322 353
       // this.participates = this.participates.map(item => item.userId)
323 354
       this.form.participates = this.participates.join(',')
324 355
       console.log(this.form);
325 356
       updateProject(this.form).then(res => {
326 357
         this.$message.success("保存成功");
358
+        this.form.cars = (this.form.cars.split(',')).map(Number);
359
+        this.form.drivers = (this.form.drivers.split(',')).map(Number);
360
+        this.form.devices = (this.form.devices.split(',')).map(Number);
327 361
       });
328 362
     },
329 363
     // 查询用户列表
@@ -338,6 +372,15 @@ export default {
338 372
         this.carList = res.rows
339 373
       })
340 374
     },
375
+    getDeviceList() {
376
+      listDevice({
377
+        pageNum: 1,
378
+        pageSize: 99999999,
379
+        type: '仪器设备'
380
+      }).then(res => {
381
+        this.deviceList = res.rows
382
+      })
383
+    },
341 384
     submitNextFlow() {
342 385
       this.$confirm('项目结束后不可再修改,请问是否确定结束?', '提示', {
343 386
         confirmButtonText: '确定',

+ 14
- 3
oa-ui/src/views/flowable/form/projectProcess/safeTab.vue Vedi File

@@ -2,7 +2,7 @@
2 2
   <div class="app-container">
3 3
     <el-empty description="未进行安全交底" v-if="isEmpty"></el-empty>
4 4
     <div v-if="!isEmpty">
5
-      <h3 class="text-center">{{ form.projectNumber + '-' + form.projectName + ' 安全交底' }}</h3>
5
+      <h3 class="text-center"><b>{{ form.projectNumber + '-' + form.projectName + ' 安全交底' }}</b></h3>
6 6
       <el-form ref="safeForm" :model="form" :rules="rules" label-width="125px" disabled>
7 7
         <el-form-item label="项目编号:" prop="projectNumber">
8 8
           {{ form.projectNumber }}
@@ -54,6 +54,7 @@
54 54
 <script>
55 55
 import { listSafe, getSafe, delSafe, addSafe, updateSafe } from "@/api/oa/safe/safe";
56 56
 import { listUser } from '@/api/system/user';
57
+import { getProject } from "@/api/oa/project/project";
57 58
 export default {
58 59
   props: {
59 60
     taskForm: {
@@ -96,8 +97,18 @@ export default {
96 97
         if (res.data) {
97 98
           this.isEmpty = false;
98 99
           this.form = res.data;
99
-          this.$set(this.form, "projectNumber", this.projectNumber);
100
-          this.$set(this.form, "projectName", this.projectName);
100
+          if (this.projectNumber != '' && this.projectName != '') {
101
+            this.$set(this.form, "projectNumber", this.projectNumber);
102
+            this.$set(this.form, "projectName", this.projectName);
103
+          } else {
104
+            getProject(this.taskForm.formId).then(res => {
105
+              console.log(res);
106
+              if (res.data) {
107
+                this.$set(this.form, "projectNumber", res.data.projectNumber);
108
+                this.$set(this.form, "projectName", res.data.projectName);
109
+              }
110
+            })
111
+          }
101 112
         }
102 113
       });
103 114
     },

+ 16
- 5
oa-ui/src/views/flowable/form/projectProcess/technicalTab.vue Vedi File

@@ -2,13 +2,13 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-04-19 15:32:00
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-05-23 14:35:16
5
+ * @LastEditTime: 2024-05-30 13:52:57
6 6
 -->
7 7
 <template>
8 8
   <div class="app-container">
9 9
     <el-empty description="技术方案未编制" v-if="!haveTechnical"></el-empty>
10 10
     <div v-if="haveTechnical">
11
-      <h3 class="text-center">{{ form.projectNumber + '-' + form.projectName + ' 技术交底' }}</h3>
11
+      <h3 class="text-center"><b>{{ form.projectNumber + '-' + form.projectName + ' 技术交底' }}</b></h3>
12 12
       <el-form ref="technicalForm" :model="form" :rules="rules" label-width="125px" disabled>
13 13
         <el-form-item label="项目编号:" prop="projectNumber">
14 14
           {{ form.projectNumber }}
@@ -103,7 +103,7 @@
103 103
         <el-row>
104 104
           <el-col :span="6" :xs="24" :offset="12">
105 105
             <el-form-item label="签名" prop="manager">
106
-              <span class="auditor"> {{ form.managerUser }} </span>
106
+              <span class="auditor"> {{ form.managerUser? form.managerUser.nickName:''}} </span>
107 107
             </el-form-item>
108 108
           </el-col>
109 109
           <el-col :span="6">
@@ -120,6 +120,7 @@
120 120
 <script>
121 121
 import technicalForm from "../technicalForm.vue";
122 122
 import { listUser } from "@/api/system/user";
123
+import { getProject } from "@/api/oa/project/project";
123 124
 import {
124 125
   listTechnical,
125 126
   getTechnical,
@@ -171,8 +172,18 @@ export default {
171 172
         if (res.data) {
172 173
           this.haveTechnical = true;
173 174
           this.form = res.data;
174
-          this.$set(this.form, "projectNumber", this.projectNumber);
175
-          this.$set(this.form, "projectName", this.projectName);
175
+          if (this.projectNumber != '' && this.projectName != '') {
176
+            this.$set(this.form, "projectNumber", this.projectNumber);
177
+            this.$set(this.form, "projectName", this.projectName);
178
+          } else {
179
+            getProject(this.taskForm.formId).then(res => {
180
+              console.log(res);
181
+              if (res.data) {
182
+                this.$set(this.form, "projectNumber", res.data.projectNumber);
183
+                this.$set(this.form, "projectName", res.data.projectName);
184
+              }
185
+            })
186
+          }
176 187
           let data = res.data;
177 188
           if (res.data.qualityInspector == null || res.data.qualityInspector == undefined || res.data.qualityInspector == "") {
178 189
             data.qualityInspector = []

+ 9
- 9
oa-ui/src/views/flowable/form/settleForm.vue Vedi File

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-04-30 09:03:14
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-05-28 19:08:56
5
+ * @LastEditTime: 2024-05-30 15:05:58
6 6
 -->
7 7
 <template>
8 8
   <div class="app-container" v-loading="loading">
@@ -111,8 +111,7 @@
111 111
               :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']" @input="setFinalDocument">
112 112
             </FileUpload>
113 113
             <div v-if="taskName != '分管审核' && form.finalDocument" class="upload-list">
114
-              <el-link :href="`${baseUrl}${'/profile/upload' + form.finalDocument}`" :underline="false"
115
-                target="_blank">
114
+              <el-link :href="`${baseUrl}${'/profile/upload' + form.finalDocument}`" :underline="false" target="_blank">
116 115
                 <span class="el-icon-document" style="color:#00f;"> {{ getFileName(form.finalDocument) }} </span>
117 116
               </el-link>
118 117
             </div>
@@ -449,6 +448,7 @@ import { complete, getNextFlowNode } from "@/api/flowable/todo";
449 448
 import { getUsersDeptLeader, getUsersDeptLeaderByDept, getUsersManageLeaderByDept } from '@/api/system/post.js'
450 449
 import SettlePrint from './components/settlePrint.vue';
451 450
 import { getDept } from "@/api/system/dept"
451
+import { getContract } from "@/api/oa/contract/contract";
452 452
 import ChooseProject from './components/chooseProject.vue';
453 453
 export default {
454 454
   components: {
@@ -476,7 +476,7 @@ export default {
476 476
   },
477 477
   data() {
478 478
     return {
479
-      baseUrl:process.env.VUE_APP_BASE_API,
479
+      baseUrl: process.env.VUE_APP_BASE_API,
480 480
       printOpen: false,
481 481
       loading: true,
482 482
       drawer: false,
@@ -908,8 +908,8 @@ export default {
908 908
       getSettle(this.taskForm.formId).then(res => {
909 909
         if (res.data) {
910 910
           updateSettle(this.form);
911
-          this.addSettleWorkFn(settleId);
912
-          this.addSettleSummaryFn(settleId);
911
+          this.updateSettleWorkFn(settleId);
912
+          this.updateSettleSummaryFn(settleId);
913 913
         } else {
914 914
           addSettle(this.form).then(res => {
915 915
             this.addSettleWorkFn(settleId);
@@ -996,13 +996,13 @@ export default {
996 996
       }
997 997
     },
998 998
     setSettleDocument(val) {
999
-      this.getDoc(val,'settleDocument')
999
+      this.getDoc(val, 'settleDocument')
1000 1000
     },
1001 1001
     setModifyDocument(val) {
1002
-      this.getDoc(val,'modifyDocument')
1002
+      this.getDoc(val, 'modifyDocument')
1003 1003
     },
1004 1004
     setFinalDocument(val) {
1005
-      this.getDoc(val,'finalDocument')
1005
+      this.getDoc(val, 'finalDocument')
1006 1006
     },
1007 1007
     getDoc(val, name) {
1008 1008
       if (val) {

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

@@ -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-05-15 15:48:32
5
+ * @LastEditTime: 2024-05-30 17:27:56
6 6
 -->
7 7
 
8 8
 <template>
@@ -183,7 +183,7 @@ export default {
183 183
           icon: 'lock',
184 184
           bgColor: '#0be1bd',
185 185
           boxShadow: '0 5px 20px rgba(11,225,189,0.5)',
186
-          path: '/device'
186
+          path: '/device/equipment'
187 187
         }, {
188 188
           id: 7,
189 189
           name: '投标管理',
@@ -198,14 +198,15 @@ export default {
198 198
           bgColor: '#20B2AA',
199 199
           boxShadow: '0 5px 20px rgba(32,178,170,0.5)',
200 200
           path: '/staff/people'
201
-        }, {
202
-          id: 9,
203
-          name: '预算管理',
204
-          icon: 'form',
205
-          bgColor: '#E64A19',
206
-          boxShadow: '0 5px 20px rgba(230,74,25,0.5)',
207
-          path: '/budget'
208
-        }
201
+        }, 
202
+        // {
203
+        //   id: 9,
204
+        //   name: '预算管理',
205
+        //   icon: 'form',
206
+        //   bgColor: '#E64A19',
207
+        //   boxShadow: '0 5px 20px rgba(230,74,25,0.5)',
208
+        //   path: '/budget'
209
+        // }
209 210
       ]
210 211
     }
211 212
   },

+ 4
- 3
oa-ui/src/views/oa/project/index.vue Vedi File

@@ -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-05-29 11:13:40
5
+ * @LastEditTime: 2024-05-30 17:38:17
6 6
 -->
7 7
 <template>
8 8
   <div class="project-wrapper">
@@ -295,7 +295,9 @@ export default {
295 295
     // 查询项目列表
296 296
     getList() {
297 297
       this.loading = true
298
-      this.queryParams.undertakingDept = this.deptId
298
+      if(this.deptId > 104){
299
+        this.queryParams.undertakingDept = this.deptId
300
+      }
299 301
       listProject(this.queryParams).then(response => {
300 302
         this.projectList = response.rows;
301 303
         this.total = response.total;
@@ -303,7 +305,6 @@ export default {
303 305
         for (let project of this.projectList) {
304 306
           getProjectProgress(project.projectId).then(res => {
305 307
             if (res.data) {
306
-              debugger
307 308
               let len = res.data.length
308 309
               if (len != 0) {
309 310
                 this.$set(project, 'percentage', Number(res.data[len - 1].percentage))

+ 189
- 13
oa-ui/src/views/oa/project/info.vue Vedi File

@@ -7,6 +7,7 @@
7 7
     <el-divider></el-divider>
8 8
 
9 9
     <div class="content">
10
+      <!-- 项目基本信息 -->
10 11
       <div class="box1">
11 12
         <div class="title">项目基本信息
12 13
           <div class="line"></div>
@@ -142,6 +143,7 @@
142 143
           </el-descriptions>
143 144
         </div>
144 145
       </div>
146
+      <!-- 项目管理部安排 -->
145 147
       <div class="box1 mt20">
146 148
         <div class="title">项目管理部安排
147 149
           <div class="line"></div>
@@ -204,6 +206,7 @@
204 206
           </el-descriptions>
205 207
         </div>
206 208
       </div>
209
+      <!-- 任务审核情况  -->
207 210
       <div class="box1 mt20">
208 211
         <div class="title">任务审核情况
209 212
           <div class="line"></div>
@@ -218,7 +221,9 @@
218 221
               <div>
219 222
                 <el-input disabled type="textarea" v-model="projectComment.jyComment"></el-input>
220 223
                 <div class="sign mt10">
221
-                  <div class="mr20">签名:<span class="auditor">{{ projectComment.jyUser ? projectComment.jyUser.nickName : '' }}</span>
224
+                  <div class="mr20">签名:<span class="auditor">{{ projectComment.jyUser ? projectComment.jyUser.nickName :
225
+        ''
226
+                      }}</span>
222 227
                   </div>
223 228
                   <div class="ml20"><span>审核时间:{{ projectComment.jyApprovalTime }}</span></div>
224 229
                 </div>
@@ -232,7 +237,8 @@
232 237
               <div>
233 238
                 <el-input disabled type="textarea" v-model="projectComment.manageComment"></el-input>
234 239
                 <div class="sign mt10">
235
-                  <div class="mr20">签名:<span class="auditor">{{ projectComment.managerUser ? projectComment.managerUser.nickName : '' }}</span>
240
+                  <div class="mr20">签名:<span class="auditor">{{ projectComment.managerUser ?
241
+        projectComment.managerUser.nickName : '' }}</span>
236 242
                   </div>
237 243
                   <div class="ml20"><span>审核时间:{{ projectComment.manageApprovalTime }}</span></div>
238 244
                 </div>
@@ -255,10 +261,131 @@
255 261
           </el-descriptions>
256 262
         </div>
257 263
       </div>
264
+
265
+      <div class="box1 mt20">
266
+        <div class="title">项目生产情况
267
+          <div class="line"></div>
268
+        </div>
269
+        <div class="info mt20">
270
+          <el-descriptions class="descriptions" border :column="2" style="text-align: center;">
271
+            <el-descriptions-item :span="2">
272
+              <template slot="label">
273
+                <svg-icon slot="prefix" icon-class="form" />
274
+                安全交底记录表
275
+              </template>
276
+              <el-link type="primary" @click="openSafe = true">安全交底记录表</el-link>
277
+            </el-descriptions-item>
278
+            <el-descriptions-item :span="2">
279
+              <template slot="label">
280
+                <svg-icon slot="prefix" icon-class="form" />
281
+                技术交底记录表
282
+              </template>
283
+              <el-link type="primary" @click="openTech = true">技术交底记录表</el-link>
284
+            </el-descriptions-item>
285
+            <el-descriptions-item :span="2">
286
+              <template slot="label">
287
+                <svg-icon slot="prefix" icon-class="equipment" />
288
+                申请设备
289
+              </template>
290
+              <el-select v-model="devices" multiple disabled style="width:100%">
291
+                <el-option v-for="item in deviceList" :key="item.deviceId" :label="item.name + '【' + (item.brand != null ? item.brand : '') + (item.series != null ? '-' + item.series + '】' : '')
292
+        + (item.code != null ? '(设备编号:' + item.code + ')' : '') + '📍' + item.place" :value="item.deviceId">
293
+                </el-option>
294
+              </el-select>
295
+            </el-descriptions-item>
296
+            <el-descriptions-item :span="2">
297
+              <template slot="label">
298
+                <svg-icon slot="prefix" icon-class="car" />
299
+                使用车辆
300
+              </template>
301
+              <el-select v-model="cars" multiple disabled style="width:100%">
302
+                <el-option v-for="item in carList" :label="item.licensePlate + item.brand" :value="item.carId"
303
+                  :key="item.carId">
304
+                </el-option>
305
+              </el-select>
306
+            </el-descriptions-item>
307
+            <el-descriptions-item :span="2">
308
+              <template slot="label">
309
+                <svg-icon slot="prefix" icon-class="peoples" />
310
+                驾驶员
311
+              </template>
312
+              <el-select v-model="drivers" multiple disabled style="width:100%">
313
+                <el-option v-for="item in userList" :label="item.nickName" :value="item.userId" :key="item.userId">
314
+                </el-option>
315
+              </el-select>
316
+            </el-descriptions-item>
317
+            <el-descriptions-item :span="2">
318
+              <template slot="label">
319
+                <svg-icon slot="prefix" icon-class="dept" />
320
+                参与人员
321
+              </template>
322
+              <el-select v-model="participates" multiple disabled style="width:100%">
323
+                <el-option v-for="item in userList" :label="item.nickName" :value="item.userId" :key="item.userId">
324
+                </el-option>
325
+              </el-select>
326
+            </el-descriptions-item>
327
+            <el-descriptions-item>
328
+              <template slot="label">
329
+                <svg-icon slot="prefix" icon-class="date" />
330
+                进场时间
331
+              </template>
332
+              {{ project.entryTime }}
333
+            </el-descriptions-item>
334
+            <el-descriptions-item>
335
+              <template slot="label">
336
+                <svg-icon slot="prefix" icon-class="date" />
337
+                撤场时间
338
+              </template>
339
+              {{ project.exitTime }}
340
+            </el-descriptions-item>
341
+            <el-descriptions-item :span="2">
342
+              <template slot="label">
343
+                <svg-icon slot="prefix" icon-class="date" />
344
+                项目进度
345
+              </template>
346
+              <div>
347
+                <el-table :data="progressList">
348
+                  <el-table-column type="index" width="50" />
349
+                  <el-table-column label="截至日期" prop="date" />
350
+                  <el-table-column label="累计总进度(%)" prop="percentage" />
351
+                  <el-table-column label="情况说明" prop="situation" />
352
+                </el-table>
353
+              </div>
354
+            </el-descriptions-item>
355
+            <el-descriptions-item :span="2">
356
+              <template slot="label">
357
+                <svg-icon slot="prefix" icon-class="date" />
358
+                项目借款
359
+              </template>
360
+              <borrow-data :taskForm="taskForm"></borrow-data>
361
+            </el-descriptions-item>
362
+            <el-descriptions-item :span="2">
363
+              <template slot="label">
364
+                <svg-icon slot="prefix" icon-class="date" />
365
+                成果汇交
366
+              </template>
367
+              {{'xxxx'}}
368
+            </el-descriptions-item>
369
+            <el-descriptions-item :span="2">
370
+              <template slot="label">
371
+                <svg-icon slot="prefix" icon-class="date" />
372
+                产值结算
373
+              </template>
374
+              <settle-data :taskForm="taskForm"></settle-data>
375
+            </el-descriptions-item>
376
+          </el-descriptions>
377
+        </div>
378
+      </div>
258 379
     </div>
259 380
     <el-dialog title="项目预算" :visible.sync="openBudget" width="1000px" append-to-body>
260 381
       <budget-info :taskForm="taskForm" :taskName="''"></budget-info>
261 382
     </el-dialog>
383
+    <el-dialog title="安全交底记录表" :visible.sync="openSafe" width="1000px" append-to-body>
384
+      <safe-tab :taskForm="taskForm"></safe-tab>
385
+    </el-dialog>
386
+    <el-dialog title="技术交底记录表" :visible.sync="openTech" width="1000px" append-to-body>
387
+      <technical-tab :taskForm="taskForm"></technical-tab>
388
+    </el-dialog>
262 389
   </div>
263 390
 </template>
264 391
 
@@ -266,23 +393,33 @@
266 393
 import { getDept } from "@/api/system/dept";
267 394
 import { getUsersDeptLeaderByDept } from '@/api/system/post'
268 395
 import { listUser, getUser } from "@/api/system/user";
269
-import { listProject, getProject, submitProject, modifyProject, delProject } from "@/api/oa/project/project";
396
+import { getProject } from "@/api/oa/project/project";
270 397
 import { listProjectWork, addProjectWork } from "@/api/oa/project/projectWork";
271 398
 import { listProjectComment, getProjectComment } from "@/api/oa/project/projectComment";
272 399
 import { listProjectProgress, getProjectProgress } from "@/api/oa/project/projectProgress";
273 400
 import { listProjectContract, addProjectContract } from "@/api/oa/contract/projectContract";
274 401
 import { listContract, getContract, delContract, addContract, updateContract } from "@/api/oa/contract/contract";
402
+import { listDevice } from "@/api/oa/device/device";
403
+import { listCar } from '@/api/oa/car/car';
275 404
 import budgetInfo from '../../flowable/form/budget/budgetInfo.vue';
405
+import SafeTab from '../../flowable/form/projectProcess/safeTab.vue';
406
+import TechnicalTab from '../../flowable/form/projectProcess/technicalTab.vue';
407
+import SettleData from '../../flowable/form/inProgress/settleData.vue';
408
+import BorrowData from '../../flowable/form/inProgress/borrowData.vue';
276 409
 export default {
277
-  components: { budgetInfo },
410
+  components: { budgetInfo, SafeTab, TechnicalTab, SettleData, BorrowData },
278 411
   created() {
279 412
     this.getUserList();
413
+    this.getDeviceList();
414
+    this.getCarList();
280 415
     if (this.$route.query) {
281 416
       this.taskForm.formId = this.$route.query.projectId
282
-      this.getProjectInfo(this.$route.query.projectId)
283
-      this.getProjectWorkList(this.$route.query.projectId)
284
-      this.getProjectCommentList(this.$route.query.projectId)
285
-      this.getContractDataList(this.$route.query.projectId);
417
+      let projectId = this.$route.query.projectId
418
+      this.getProjectInfo(projectId)
419
+      this.getProjectWorkList(projectId)
420
+      this.getProjectCommentList(projectId)
421
+      this.getContractDataList(projectId);
422
+      this.getProjectProgressList(projectId);
286 423
     }
287 424
   },
288 425
   data() {
@@ -292,15 +429,24 @@ export default {
292 429
       activeName: '1',
293 430
       column: 3,
294 431
       userList: [],
432
+      deviceList: [],
433
+      carList: [],
295 434
       workList: [],
296 435
       deptLeaderList: [],
436
+      progressList: [],
297 437
       contractCode: "",
298 438
       contractNumber: "",
299 439
       openBudget: false,
440
+      openSafe: false,
441
+      openTech: false,
300 442
       taskForm: {
301 443
         formId: ''
302 444
       },
303
-      projectComment: {}
445
+      projectComment: {},
446
+      devices: [],
447
+      cars: [],
448
+      drivers: [],
449
+      participates: []
304 450
     }
305 451
   },
306 452
   methods: {
@@ -319,9 +465,20 @@ export default {
319 465
             })
320 466
             getUsersDeptLeaderByDept({ deptId: Number(dept) }).then(res => {
321 467
               this.deptLeaderList.push(res.data.nickName);
322
-              console.log(this.deptLeaderList);
323 468
             })
324 469
           }
470
+          if (this.project.devices) {
471
+            this.devices = (this.project.devices.split(',')).map(Number)
472
+          }
473
+          if (this.project.cars) {
474
+            this.cars = (this.project.cars.split(',')).map(Number)
475
+          }
476
+          if (this.project.drivers) {
477
+            this.drivers = (this.project.drivers.split(',')).map(Number)
478
+          }
479
+          if (this.project.participates) {
480
+            this.participates = (this.project.participates.split(',')).map(Number)
481
+          }
325 482
         }
326 483
       })
327 484
     },
@@ -335,6 +492,28 @@ export default {
335 492
         }
336 493
       })
337 494
     },
495
+    getDeviceList() {
496
+      listDevice({
497
+        pageNum: 1,
498
+        pageSize: 99999999,
499
+        type: '仪器设备'
500
+      }).then(res => {
501
+        this.deviceList = res.rows
502
+      })
503
+    },
504
+    getCarList() {
505
+      listCar({ pageSize: 9999, pageNum: 1 }).then(res => {
506
+        this.carList = res.rows
507
+      })
508
+    },
509
+    getProjectProgressList(projectId) {
510
+      getProjectProgress(projectId).then(res => {
511
+        if (res.data) {
512
+          this.progressList = res.data;
513
+
514
+        }
515
+      });
516
+    },
338 517
     // 获取项目相关合同编号
339 518
     getContractDataList(projectId) {
340 519
       listProjectContract({ projectId }).then(res => {
@@ -365,7 +544,6 @@ export default {
365 544
     },
366 545
     getProjectCommentList(projectId) {
367 546
       getProjectComment(projectId).then(res => {
368
-        console.log(res);
369 547
         if (res.data) {
370 548
           this.projectComment = res.data
371 549
         }
@@ -382,13 +560,11 @@ export default {
382 560
       }
383 561
     },
384 562
     getUserListName(userIdArr) {
385
-      debugger
386 563
       if (userIdArr) {
387 564
         for (let user of userIdArr) {
388 565
 
389 566
         }
390 567
       }
391
-
392 568
     },
393 569
     getFileName(name) {
394 570
       if (name != null) {

Loading…
Annulla
Salva