Ver código fonte

编写项目台账详情

余思翰 1 ano atrás
pai
commit
d9512b301b

+ 20
- 0
oa-ui/src/router/index.js Ver arquivo

@@ -1,3 +1,9 @@
1
+/*
2
+ * @Author: ysh
3
+ * @Date: 2024-01-03 09:23:11
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-05-29 09:47:50
6
+ */
1 7
 /*
2 8
  * @Author: ysh
3 9
  * @Date: 2024-01-03 09:23:11
@@ -287,6 +293,20 @@ export const constantRoutes = [
287 293
         name: 'settleApply',
288 294
         meta: { title: '项目结算', icon: '' }
289 295
 
296
+      }
297
+    ]
298
+  },
299
+  {
300
+    path: '/project/info',
301
+    component: Layout,
302
+    hidden: true,
303
+    children: [
304
+      {
305
+        path: '',
306
+        component: () => import('@/views/oa/project/info'),
307
+        name: 'projectInfo',
308
+        meta: { title: '项目详情', icon: '' }
309
+
290 310
       }
291 311
     ]
292 312
   }

+ 2
- 2
oa-ui/src/views/flowable/form/projectProcess/arrangeProject.vue Ver arquivo

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-03-19 09:24:06
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-05-24 09:28:54
5
+ * @LastEditTime: 2024-05-29 16:44:31
6 6
 -->
7 7
 <template>
8 8
   <div class="app-container">
@@ -60,7 +60,7 @@
60 60
               @input="setOrganizeDocument">
61 61
             </FileUpload>
62 62
             <div v-if="$route.query.taskName != '项目安排'" class="upload-list">
63
-              <el-link :href="`${baseUrl}${'/profile/upload' + form.organizeDocument}`" :underline="false"
63
+              <el-link type="primary" :href="`${baseUrl}${'/profile/upload' + form.organizeDocument}`" :underline="false"
64 64
                 target="_blank">
65 65
                 <span class="el-icon-document"> {{ getFileName(form.organizeDocument) }} </span>
66 66
               </el-link>

+ 3
- 3
oa-ui/src/views/flowable/form/projectProcess/inProgress.vue Ver arquivo

@@ -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-28 15:49:18
5
+ * @LastEditTime: 2024-05-29 15:31:52
6 6
 -->
7 7
 <template>
8 8
   <div>
@@ -206,12 +206,12 @@ export default {
206 206
     },
207 207
   },
208 208
   created() {
209
-    // if (this.taskName == "项目生产") {
209
+    if (this.taskName != "项目登记") {
210 210
       // this.doesItExistBudget(this.taskForm.formId);
211 211
       this.initProgress();
212 212
       this.getUserList();
213 213
       this.getCarList();
214
-    // }
214
+    }
215 215
   },
216 216
   mounted() {
217 217
   },

+ 69
- 11
oa-ui/src/views/oa/project/index.vue Ver arquivo

@@ -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-28 17:51:56
5
+ * @LastEditTime: 2024-05-29 11:13:40
6 6
 -->
7 7
 <template>
8 8
   <div class="project-wrapper">
@@ -13,13 +13,21 @@
13 13
           <el-input v-model="queryParams.projectNumber" placeholder="请输入项目编号" clearable
14 14
             @keyup.enter.native="handleQuery" />
15 15
         </el-form-item>
16
+        <el-form-item label="项目名称" prop="projectName">
17
+          <el-input v-model="queryParams.projectName" placeholder="请输入项目名称" clearable
18
+            @keyup.enter.native="handleQuery" />
19
+        </el-form-item>
16 20
         <el-form-item label="项目负责人" prop="projectLeader">
17
-          <el-select v-model="queryParams.projectLeader" clearable filterable placeholder="请输入项目负责人" size="large" style="width: 240px" @keyup.enter.native="handleQuery">
21
+          <el-select v-model="queryParams.projectLeader" clearable filterable placeholder="请输入项目负责人" size="large"
22
+            style="width: 240px" @keyup.enter.native="handleQuery">
18 23
             <el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId" />
19 24
           </el-select>
20 25
         </el-form-item>
21
-        <el-form-item label="项目名称" prop="projectName">
22
-          <el-input v-model="queryParams.projectName" placeholder="请输入项目名称" clearable @keyup.enter.native="handleQuery" />
26
+        <el-form-item label="状态" prop="isFinished">
27
+          <el-select v-model="queryParams.isFinished" clearable>
28
+            <el-option label="进行中" value="0"></el-option>
29
+            <el-option label="已结束" value="1"></el-option>
30
+          </el-select>
23 31
         </el-form-item>
24 32
         <el-form-item>
25 33
           <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
@@ -72,16 +80,29 @@
72 80
       <el-table v-loading="loading" :data="projectList" style="margin-top: 30px;">
73 81
         <el-table-column type="index" width="50">
74 82
         </el-table-column>
75
-        <el-table-column prop="isFinshed" label="状态" width="90px">
83
+        <el-table-column prop="isFinshed" align="center" label="状态" width="90px">
76 84
           <template slot-scope="scope">
77 85
             <el-tag :type="scope.row.isFinished === '0' ? 'success' : 'warning'" disable-transitions>
78 86
               {{ scope.row.isFinished == '0' ? '进行中' : '已结束' }}
79 87
             </el-tag>
80 88
           </template>
81 89
         </el-table-column>
90
+        <el-table-column prop="percentage" align="center" label="生产进度" width="120px">
91
+          <template slot-scope="scope">
92
+            <el-progress :text-inside="true" :stroke-width="26" :status="formatStatus(scope.row.percentage)"
93
+              :percentage="scope.row.percentage" text-color="#fff"></el-progress>
94
+          </template>
95
+        </el-table-column>
82 96
         <el-table-column label="项目编号" align="center" key="projectNumber" prop="projectNumber" />
83 97
         <el-table-column label="项目名称" align="center" key="projectName" prop="projectName" />
84 98
         <el-table-column label="项目负责人" align="center" key="projectLeaderName" prop="projectLeaderUser.nickName" />
99
+        <el-table-column label="项目级别" align="center" key="projectLevel" prop="projectLevel">
100
+          <template slot-scope="scope">
101
+            <el-tag :type="scope.row.projectLevel === '0' ? 'info' : 'danger'" disable-transitions>
102
+              {{ scope.row.projectLevel == '0' ? '一般项目' : '重大项目' }}
103
+            </el-tag>
104
+          </template>
105
+        </el-table-column>
85 106
         <el-table-column label="操作" align="center" width="160" class-name="small-padding fixed-width">
86 107
           <template slot-scope="scope" v-if="scope.row.userId !== 1">
87 108
             <el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)"
@@ -107,7 +128,8 @@
107 128
         </el-form-item>
108 129
         <el-form-item label="项目负责人:" prop="projectLeader">
109 130
           <el-tag effect="plain" type="warning" style="margin-right: 10px;"
110
-            v-if="addForm.projectLeaderName != undefined">{{ addForm.projectLeaderName }}</el-tag>
131
+            v-if="addForm.projectLeaderName != undefined">{{
132
+        addForm.projectLeaderName }}</el-tag>
111 133
           <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="choosePeople">选择</el-button>
112 134
         </el-form-item>
113 135
         <el-form-item label="项目类型:" prop="projectType">
@@ -217,9 +239,14 @@
217 239
 
218 240
 <script>
219 241
 import { listProject, submitProject, modifyProject, delProject } from "@/api/oa/project/project";
220
-import { listDept } from '@/api/system/dept'
221
-import { listUser, getUser } from '@/api/system/user'
242
+import { listProjectProgress, getProjectProgress } from "@/api/oa/project/projectProgress";
243
+import { listDept } from '@/api/system/dept';
244
+import { listUser, getUser } from '@/api/system/user';
245
+import { mapGetters } from 'vuex';
222 246
 export default {
247
+  computed: {
248
+    ...mapGetters(['deptId'])
249
+  },
223 250
   data() {
224 251
     return {
225 252
       userList: [],
@@ -268,10 +295,26 @@ export default {
268 295
     // 查询项目列表
269 296
     getList() {
270 297
       this.loading = true
298
+      this.queryParams.undertakingDept = this.deptId
271 299
       listProject(this.queryParams).then(response => {
272 300
         this.projectList = response.rows;
273 301
         this.total = response.total;
274 302
         this.loading = false;
303
+        for (let project of this.projectList) {
304
+          getProjectProgress(project.projectId).then(res => {
305
+            if (res.data) {
306
+              debugger
307
+              let len = res.data.length
308
+              if (len != 0) {
309
+                this.$set(project, 'percentage', Number(res.data[len - 1].percentage))
310
+              } else {
311
+                this.$set(project, 'percentage', 0)
312
+              }
313
+
314
+              console.log(this.projectList);
315
+            }
316
+          })
317
+        }
275 318
       })
276 319
     },
277 320
     getDeptList() {
@@ -283,7 +326,7 @@ export default {
283 326
       })
284 327
     },
285 328
     getUserList() {
286
-      listUser({pageNum: 1, pageSize: 9999}).then(res => {
329
+      listUser({ pageNum: 1, pageSize: 9999 }).then(res => {
287 330
         this.userList = res.rows
288 331
       })
289 332
     },
@@ -295,8 +338,12 @@ export default {
295 338
       this.title = '新增项目'
296 339
       this.addOpen = true
297 340
     },
298
-    handleView(row){
299
-
341
+    handleView(row) {
342
+      let id = row.projectId
343
+      this.$router.push({
344
+        path: '/project/info',
345
+        query: { projectId: id }
346
+      })
300 347
     },
301 348
     handleUpdate(row) {
302 349
       this.addForm = row;
@@ -388,6 +435,17 @@ export default {
388 435
       this.peopleForm.deptId = '';
389 436
       this.peopleForm.userId = '';
390 437
       this.peopleVisible = false;
438
+    },
439
+    formatStatus(row) {
440
+      if (row <= 20) {
441
+        return 'exception'
442
+      } else if (row > 20 && row <= 50) {
443
+        return 'warning'
444
+      } else if (row > 50 && row <= 80) {
445
+        return ''
446
+      } else {
447
+        return 'success'
448
+      }
391 449
     }
392 450
   },
393 451
 }

+ 470
- 0
oa-ui/src/views/oa/project/info.vue Ver arquivo

@@ -0,0 +1,470 @@
1
+<template>
2
+  <div class="app-container">
3
+    <div class="header">
4
+      <el-button icon="el-icon-d-arrow-left" plain type="primary" class="back" @click="goBack">返回</el-button>
5
+      <h1>{{ '【' + project.projectNumber + '】' + project.projectName }}</h1>
6
+    </div>
7
+    <el-divider></el-divider>
8
+
9
+    <div class="content">
10
+      <div class="box1">
11
+        <div class="title">项目基本信息
12
+          <div class="line"></div>
13
+        </div>
14
+        <div class="info mt20">
15
+          <el-descriptions class="descriptions" border :column="column" style="text-align: center;">
16
+            <el-descriptions-item>
17
+              <template slot="label">
18
+                <svg-icon slot="prefix" icon-class="number" />
19
+                项目编号
20
+              </template>
21
+              {{ project.projectNumber }}
22
+            </el-descriptions-item>
23
+            <el-descriptions-item>
24
+              <template slot="label">
25
+                <svg-icon slot="prefix" icon-class="clipboard" />
26
+                项目名称
27
+              </template>
28
+              {{ project.projectName }}
29
+            </el-descriptions-item>
30
+            <el-descriptions-item>
31
+              <template slot="label">
32
+                <svg-icon slot="prefix" icon-class="JamYelpSquare" />
33
+                项目类型
34
+              </template>
35
+              {{ project.projectType }}
36
+            </el-descriptions-item>
37
+            <el-descriptions-item>
38
+              <template slot="label">
39
+                <svg-icon slot="prefix" icon-class="guide" />
40
+                项目来源
41
+              </template>
42
+              {{ project.projectSource == '0' ? '院内' : '院外' }}
43
+            </el-descriptions-item>
44
+            <el-descriptions-item>
45
+              <template slot="label">
46
+                <svg-icon slot="prefix" icon-class="pmLevel" />
47
+                项目级别
48
+              </template>
49
+              <el-tag :type="project.projectLevel === '0' ? 'info' : 'danger'">
50
+                {{ project.projectLevel == '0' ? '一般项目' : '重大项目' }}
51
+              </el-tag>
52
+            </el-descriptions-item>
53
+            <el-descriptions-item>
54
+              <template slot="label">
55
+                <svg-icon slot="prefix" icon-class="school" />
56
+                甲方单位
57
+              </template>
58
+              {{ project.partyA }}
59
+            </el-descriptions-item>
60
+            <el-descriptions-item>
61
+              <template slot="label">
62
+                <svg-icon slot="prefix" icon-class="peoples" />
63
+                联系人
64
+              </template>
65
+              {{ project.contactPerson }}
66
+            </el-descriptions-item>
67
+            <el-descriptions-item>
68
+              <template slot="label">
69
+                <svg-icon slot="prefix" icon-class="phone" />
70
+                联系电话
71
+              </template>
72
+              {{ project.telephone }}
73
+            </el-descriptions-item>
74
+            <el-descriptions-item>
75
+              <template slot="label">
76
+                <svg-icon slot="prefix" icon-class="contractSign" />
77
+                合同编码
78
+              </template>
79
+              {{ contractCode }}
80
+            </el-descriptions-item>
81
+            <el-descriptions-item>
82
+              <template slot="label">
83
+                <svg-icon slot="prefix" icon-class="number" />
84
+                合同编号
85
+              </template>
86
+              {{ contractNumber }}
87
+            </el-descriptions-item>
88
+            <el-descriptions-item>
89
+              <template slot="label">
90
+                <svg-icon slot="prefix" icon-class="dept" />
91
+                承担部门
92
+              </template>
93
+              {{ project.undertakingDeptName }}
94
+            </el-descriptions-item>
95
+            <el-descriptions-item>
96
+              <template slot="label">
97
+                <svg-icon slot="prefix" icon-class="user" />
98
+                项目登记人
99
+              </template>
100
+              {{ getUserName(project.projectRegistrant) }}
101
+            </el-descriptions-item>
102
+            <el-descriptions-item>
103
+              <template slot="label">
104
+                <svg-icon slot="prefix" icon-class="date" />
105
+                项目登记时间
106
+              </template>
107
+              {{ project.registerTime }}
108
+            </el-descriptions-item>
109
+            <el-descriptions-item :span="3">
110
+              <template slot="label">
111
+                <svg-icon slot="prefix" icon-class="file" />
112
+                项目任务书
113
+              </template>
114
+              <el-link type="primary" :href="`${baseUrl}${'/profile/upload' + project.taskDocument}`" :underline="false"
115
+                target="_blank">
116
+                <span class="el-icon-document"> {{ getFileName(project.taskDocument) }} </span>
117
+              </el-link>
118
+            </el-descriptions-item>
119
+            <el-descriptions-item :span="3">
120
+              <template slot="label">
121
+                <svg-icon slot="prefix" icon-class="build" />
122
+                项目概况
123
+              </template>
124
+              <div>
125
+                <el-table :data="workList">
126
+                  <el-table-column type="index" width="50" />
127
+                  <el-table-column label="工作内容" prop="content" />
128
+                  <el-table-column label="比例尺" prop="scale" />
129
+                  <el-table-column label="单位" prop="unit" />
130
+                  <el-table-column label="工作量" prop="workload" />
131
+                  <el-table-column label="要求完成时间" prop="deadline" />
132
+                </el-table>
133
+              </div>
134
+            </el-descriptions-item>
135
+            <el-descriptions-item>
136
+              <template slot="label">
137
+                <svg-icon slot="prefix" icon-class="edit" />
138
+                项目备注
139
+              </template>
140
+              {{ project.remark }}
141
+            </el-descriptions-item>
142
+          </el-descriptions>
143
+        </div>
144
+      </div>
145
+      <div class="box1 mt20">
146
+        <div class="title">项目管理部安排
147
+          <div class="line"></div>
148
+        </div>
149
+        <div class="info mt20">
150
+          <el-descriptions class="descriptions" border :column="4" style="text-align: center;">
151
+            <el-descriptions-item>
152
+              <template slot="label">
153
+                <svg-icon slot="prefix" icon-class="dept" />
154
+                承担部门
155
+              </template>
156
+              {{ project.undertakingDeptName }}
157
+            </el-descriptions-item>
158
+            <el-descriptions-item>
159
+              <template slot="label">
160
+                <svg-icon slot="prefix" icon-class="peoples" />
161
+                部门负责人
162
+              </template>
163
+              {{ deptLeaderList.join(',') }}
164
+            </el-descriptions-item>
165
+            <el-descriptions-item>
166
+              <template slot="label">
167
+                <svg-icon slot="prefix" icon-class="user" />
168
+                项目负责人
169
+              </template>
170
+              {{ project.projectLeaderUser ? project.projectLeaderUser.nickName : "" }}
171
+            </el-descriptions-item>
172
+            <el-descriptions-item>
173
+              <template slot="label">
174
+                <svg-icon slot="prefix" icon-class="user" />
175
+                现场负责人
176
+              </template>
177
+              {{ getUserName(project.siteLeader) }}
178
+            </el-descriptions-item>
179
+            <el-descriptions-item>
180
+              <template slot="label">
181
+                <svg-icon slot="prefix" icon-class="date" />
182
+                组织交底时间
183
+              </template>
184
+              {{ project.organizeTime }}
185
+            </el-descriptions-item>
186
+            <el-descriptions-item>
187
+              <template slot="label">
188
+                <svg-icon slot="prefix" icon-class="date" />
189
+                项目预算
190
+              </template>
191
+              <!-- v-hasPermi="['oa:project:edit']" -->
192
+              <el-link type="primary" @click="openBudget = true">预算表</el-link>
193
+            </el-descriptions-item>
194
+            <el-descriptions-item>
195
+              <template slot="label">
196
+                <svg-icon slot="prefix" icon-class="documentation" />
197
+                组织交底文档
198
+              </template>
199
+              <el-link type="primary" :href="`${baseUrl}${'/profile/upload' + project.organizeDocument}`"
200
+                :underline="false" target="_blank">
201
+                <span class="el-icon-document"> {{ getFileName(project.organizeDocument) }} </span>
202
+              </el-link>
203
+            </el-descriptions-item>
204
+          </el-descriptions>
205
+        </div>
206
+      </div>
207
+      <div class="box1 mt20">
208
+        <div class="title">任务审核情况
209
+          <div class="line"></div>
210
+        </div>
211
+        <div class="info mt20">
212
+          <el-descriptions class="descriptions" border :column="1" style="text-align: center;">
213
+            <el-descriptions-item>
214
+              <template slot="label">
215
+                <svg-icon slot="prefix" icon-class="user" />
216
+                经营发展部审核
217
+              </template>
218
+              <div>
219
+                <el-input disabled type="textarea" v-model="projectComment.jyComment"></el-input>
220
+                <div class="sign mt10">
221
+                  <div class="mr20">签名:<span class="auditor">{{ projectComment.jyUser ? projectComment.jyUser.nickName : '' }}</span>
222
+                  </div>
223
+                  <div class="ml20"><span>审核时间:{{ projectComment.jyApprovalTime }}</span></div>
224
+                </div>
225
+              </div>
226
+            </el-descriptions-item>
227
+            <el-descriptions-item>
228
+              <template slot="label">
229
+                <svg-icon slot="prefix" icon-class="user" />
230
+                分管领导批准
231
+              </template>
232
+              <div>
233
+                <el-input disabled type="textarea" v-model="projectComment.manageComment"></el-input>
234
+                <div class="sign mt10">
235
+                  <div class="mr20">签名:<span class="auditor">{{ projectComment.managerUser ? projectComment.managerUser.nickName : '' }}</span>
236
+                  </div>
237
+                  <div class="ml20"><span>审核时间:{{ projectComment.manageApprovalTime }}</span></div>
238
+                </div>
239
+              </div>
240
+            </el-descriptions-item>
241
+            <el-descriptions-item>
242
+              <template slot="label">
243
+                <svg-icon slot="prefix" icon-class="user" />
244
+                生产部门确认
245
+              </template>
246
+              <div>
247
+                <el-input disabled type="textarea" v-model="projectComment.scComment"></el-input>
248
+                <div class="sign mt10">
249
+                  <div class="mr20">签名:<span class="auditor">{{ projectComment.scApproverName }}</span>
250
+                  </div>
251
+                  <div class="ml20"><span>审核时间:{{ projectComment.scApprovalTime }}</span></div>
252
+                </div>
253
+              </div>
254
+            </el-descriptions-item>
255
+          </el-descriptions>
256
+        </div>
257
+      </div>
258
+    </div>
259
+    <el-dialog title="项目预算" :visible.sync="openBudget" width="1000px" append-to-body>
260
+      <budget-info :taskForm="taskForm" :taskName="''"></budget-info>
261
+    </el-dialog>
262
+  </div>
263
+</template>
264
+
265
+<script>
266
+import { getDept } from "@/api/system/dept";
267
+import { getUsersDeptLeaderByDept } from '@/api/system/post'
268
+import { listUser, getUser } from "@/api/system/user";
269
+import { listProject, getProject, submitProject, modifyProject, delProject } from "@/api/oa/project/project";
270
+import { listProjectWork, addProjectWork } from "@/api/oa/project/projectWork";
271
+import { listProjectComment, getProjectComment } from "@/api/oa/project/projectComment";
272
+import { listProjectProgress, getProjectProgress } from "@/api/oa/project/projectProgress";
273
+import { listProjectContract, addProjectContract } from "@/api/oa/contract/projectContract";
274
+import { listContract, getContract, delContract, addContract, updateContract } from "@/api/oa/contract/contract";
275
+import budgetInfo from '../../flowable/form/budget/budgetInfo.vue';
276
+export default {
277
+  components: { budgetInfo },
278
+  created() {
279
+    this.getUserList();
280
+    if (this.$route.query) {
281
+      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);
286
+    }
287
+  },
288
+  data() {
289
+    return {
290
+      baseUrl: process.env.VUE_APP_BASE_API,
291
+      project: {},
292
+      activeName: '1',
293
+      column: 3,
294
+      userList: [],
295
+      workList: [],
296
+      deptLeaderList: [],
297
+      contractCode: "",
298
+      contractNumber: "",
299
+      openBudget: false,
300
+      taskForm: {
301
+        formId: ''
302
+      },
303
+      projectComment: {}
304
+    }
305
+  },
306
+  methods: {
307
+    getProjectInfo(projectId) {
308
+      getProject(projectId).then(res => {
309
+        if (res.data) {
310
+          this.project = res.data;
311
+          let deptArr = this.project.undertakingDept.split(',');
312
+          let undertakingDept = []
313
+          for (let dept of deptArr) {
314
+            getDept(dept).then(res => {
315
+              if (res.data) {
316
+                undertakingDept.push(res.data.deptName);
317
+                this.$set(this.project, 'undertakingDeptName', undertakingDept.join(','))
318
+              }
319
+            })
320
+            getUsersDeptLeaderByDept({ deptId: Number(dept) }).then(res => {
321
+              this.deptLeaderList.push(res.data.nickName);
322
+              console.log(this.deptLeaderList);
323
+            })
324
+          }
325
+        }
326
+      })
327
+    },
328
+    getUserList() {
329
+      listUser({
330
+        pageNum: 1,
331
+        pageSize: 9999
332
+      }).then(res => {
333
+        if (res.code == 200) {
334
+          this.userList = res.rows
335
+        }
336
+      })
337
+    },
338
+    // 获取项目相关合同编号
339
+    getContractDataList(projectId) {
340
+      listProjectContract({ projectId }).then(res => {
341
+        if (res.rows) {
342
+          for (let row of res.rows) {
343
+            getContract(row.contractId).then(res => {
344
+              if (res.data) {
345
+                if (this.contractCode != '') {
346
+                  this.contractCode = this.contractCode + '、' + res.data.contractCode;
347
+                } else {
348
+                  this.contractCode = res.data.contractCode;
349
+                }
350
+                if (this.contractNumber != '') {
351
+                  this.contractNumber = this.contractNumber + '、' + res.data.contractNumber;
352
+                } else {
353
+                  this.contractNumber = res.data.contractNumber;
354
+                }
355
+              }
356
+            })
357
+          }
358
+        }
359
+      })
360
+    },
361
+    getProjectWorkList(projectId) {
362
+      listProjectWork({ projectId }).then(res => {
363
+        this.workList = res.rows;
364
+      })
365
+    },
366
+    getProjectCommentList(projectId) {
367
+      getProjectComment(projectId).then(res => {
368
+        console.log(res);
369
+        if (res.data) {
370
+          this.projectComment = res.data
371
+        }
372
+      })
373
+    },
374
+    getUserName(userId) {
375
+      if (userId) {
376
+        let arr = this.userList.filter(item => item.userId == userId)
377
+        if (arr.length == 1) {
378
+          let name = arr[0].nickName
379
+          return name
380
+        }
381
+
382
+      }
383
+    },
384
+    getUserListName(userIdArr) {
385
+      debugger
386
+      if (userIdArr) {
387
+        for (let user of userIdArr) {
388
+
389
+        }
390
+      }
391
+
392
+    },
393
+    getFileName(name) {
394
+      if (name != null) {
395
+        let arr = name.split('/')
396
+        return arr[arr.length - 1];
397
+      }
398
+    },
399
+    goBack() {
400
+      let obj = { path: "/project/info" }
401
+      this.$tab.closeOpenPage(obj);
402
+      this.$router.push({ path: '/project' });
403
+    },
404
+  },
405
+}
406
+</script>
407
+
408
+<style lang="scss" scoped>
409
+@import "@/assets/styles/element-reset.scss";
410
+
411
+.header {
412
+  position: relative;
413
+  text-align: center;
414
+
415
+  .back {
416
+    position: absolute;
417
+    left: 12px;
418
+    top: -10px;
419
+  }
420
+}
421
+
422
+.content {
423
+  background-color: #f3f5f7;
424
+  padding: 20px 20px 40px 20px;
425
+
426
+  .box1 {
427
+    width: 100%;
428
+    background-color: #ffffff;
429
+  }
430
+
431
+  .info {
432
+    padding: 20px;
433
+  }
434
+
435
+  .title {
436
+    font-size: 18px;
437
+    font-weight: bold;
438
+    padding: 20px 35px 0px;
439
+    position: relative;
440
+
441
+    .line {
442
+      position: absolute;
443
+      top: 22px;
444
+      left: 20px;
445
+      width: 4px;
446
+      height: 20px;
447
+      border-radius: 20px;
448
+      background-color: #303133;
449
+    }
450
+  }
451
+}
452
+
453
+.sign {
454
+  display: flex;
455
+  justify-content: flex-end;
456
+  align-items: center;
457
+  padding-right: 80px;
458
+  /* 如果需要垂直居中 */
459
+}
460
+
461
+::v-deep .el-descriptions-item__label.is-bordered-label {
462
+  color: #5a5757;
463
+  background: rgba($color: #a9adb3, $alpha: 0.1);
464
+  width: 150px;
465
+}
466
+
467
+::v-deep .el-descriptions .is-bordered .el-descriptions-item__cell {
468
+  border: 1px solid #cdd0d3;
469
+}
470
+</style>

Carregando…
Cancelar
Salvar