|
@@ -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: 2025-01-07 15:34:38
|
|
5
|
+ * @LastEditTime: 2025-02-21 10:20:56
|
6
|
6
|
-->
|
7
|
7
|
<template>
|
8
|
8
|
<div class="project-wrapper">
|
|
@@ -72,8 +72,9 @@
|
72
|
72
|
:percentage="scope.row.percentage" text-color="#fff"></el-progress>
|
73
|
73
|
</template>
|
74
|
74
|
</el-table-column>
|
75
|
|
- <el-table-column label="项目编号" align="center" key="projectNumber" prop="projectNumber" width="120px" sortable />
|
|
75
|
+ <el-table-column label="项目编号" align="center" key="projectNumber" prop="projectNumber" width="120px" sortable />
|
76
|
76
|
<el-table-column label="项目名称" align="center" key="projectName" prop="projectName" sortable />
|
|
77
|
+ <el-table-column label="合同编码" align="center" prop="contract.contractCode" sortable />
|
77
|
78
|
<el-table-column label="承担部门" align="center" key="undertakingDeptName" prop="undertakingDeptName" sortable />
|
78
|
79
|
<el-table-column label="项目负责人" align="center" key="projectLeaderName" prop="projectLeaderUser.nickName" sortable
|
79
|
80
|
width="120px" />
|
|
@@ -90,126 +91,18 @@
|
90
|
91
|
<template slot-scope="scope" v-if="scope.row.userId !== 1">
|
91
|
92
|
<el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)"
|
92
|
93
|
v-hasPermi="['oa:project:query']">查看</el-button>
|
93
|
|
- <!-- <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
|
94
|
|
- v-hasPermi="['oa:project:edit']">修改</el-button> -->
|
95
|
94
|
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
|
96
|
95
|
v-hasPermi="['oa:project:remove']">删除</el-button>
|
|
96
|
+ <el-button size="mini" type="text" icon="el-icon-document" @click="handleRelate(scope.row)"
|
|
97
|
+ v-hasPermi="['oa:project:relate']">关联合同</el-button>
|
97
|
98
|
</template>
|
98
|
99
|
</el-table-column>
|
99
|
100
|
</el-table>
|
100
|
101
|
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
|
101
|
102
|
:autoScroll="false" @pagination="getList" />
|
102
|
103
|
</el-card>
|
103
|
|
- <!-- 新建项目 -->
|
104
|
|
- <el-dialog :title="title" :visible.sync="addOpen" append-to-body>
|
105
|
|
- <el-form :model="addForm" :rules="rules" label-width="100px">
|
106
|
|
- <el-form-item label="项目编号:" prop="projectNumber">
|
107
|
|
- <el-input v-model="addForm.projectNumber"></el-input>
|
108
|
|
- </el-form-item>
|
109
|
|
- <el-form-item label="项目名称:" prop="projectName">
|
110
|
|
- <el-input v-model="addForm.projectName"></el-input>
|
111
|
|
- </el-form-item>
|
112
|
|
- <el-form-item label="项目负责人:" prop="projectLeader">
|
113
|
|
- <el-tag effect="plain" type="warning" style="margin-right: 10px;"
|
114
|
|
- v-if="addForm.projectLeaderName != undefined">{{
|
115
|
|
- addForm.projectLeaderName }}</el-tag>
|
116
|
|
- <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="choosePeople">选择</el-button>
|
117
|
|
- </el-form-item>
|
118
|
|
- <el-form-item label="项目类型:" prop="projectType">
|
119
|
|
- <el-input v-model="addForm.projectType"></el-input>
|
120
|
|
- </el-form-item>
|
121
|
|
- <el-form-item label="项目级别:" prop="projectLevel">
|
122
|
|
- <el-radio v-model="addForm.projectLevel" label="0">一般项目</el-radio>
|
123
|
|
- <el-radio v-model="addForm.projectLevel" label="1">重大项目</el-radio>
|
124
|
|
- </el-form-item>
|
125
|
|
- <el-form-item label="项目来源:" prop="projectSource">
|
126
|
|
- <el-radio v-model="addForm.projectSource" label="0">院内</el-radio>
|
127
|
|
- <el-radio v-model="addForm.projectSource" label="1">院外</el-radio>
|
128
|
|
- </el-form-item>
|
129
|
|
- <el-form-item label="甲方单位:" prop="partyA">
|
130
|
|
- <el-input v-model="addForm.partyA"></el-input>
|
131
|
|
- </el-form-item>
|
132
|
|
- <el-form-item label="联系人:" prop="contactPerson">
|
133
|
|
- <el-input v-model="addForm.contactPerson"></el-input>
|
134
|
|
- </el-form-item>
|
135
|
|
- <el-form-item label="联系电话:" prop="telephone">
|
136
|
|
- <el-input v-model="addForm.telephone"></el-input>
|
137
|
|
- </el-form-item>
|
138
|
|
- <el-form-item label="项目概况:" prop="projectRegistrant">
|
139
|
|
- <table border="1">
|
140
|
|
- <tr>
|
141
|
|
- <td style="width:250px;">工作内容</td>
|
142
|
|
- <td>等级或比例尺</td>
|
143
|
|
- <td>单位</td>
|
144
|
|
- <td>工作量</td>
|
145
|
|
- <td style="width:100px;">要求完成时间</td>
|
146
|
|
- <td>备注</td>
|
147
|
|
- </tr>
|
148
|
|
- <tr v-for="(work, index) in workList" :key="index">
|
149
|
|
- <td>
|
150
|
|
- <el-input v-model="work.content" type="textarea" autosize clearable></el-input>
|
151
|
|
- </td>
|
152
|
|
- <td>
|
153
|
|
- <el-input v-model="work.scale" clearable></el-input>
|
154
|
|
- </td>
|
155
|
|
- <td>
|
156
|
|
- <el-input v-model="work.unit" clearable></el-input>
|
157
|
|
- </td>
|
158
|
|
- <td>
|
159
|
|
- <el-input v-model="work.workload" clearable></el-input>
|
160
|
|
- </td>
|
161
|
|
- <td>
|
162
|
|
- <el-date-picker style="width:140px;" v-model="work.deadline" value-format="yyyy-MM-dd" type="date"
|
163
|
|
- placeholder="选择日期">
|
164
|
|
- </el-date-picker>
|
165
|
|
- </td>
|
166
|
|
- <td>
|
167
|
|
- <el-input v-model="work.remark" type="textarea" autosize clearable></el-input>
|
168
|
|
- </td>
|
169
|
|
- <td>
|
170
|
|
- <el-button type="danger" icon="el-icon-minus" size="mini" circle
|
171
|
|
- @click="deletWorkItem(index)"></el-button>
|
172
|
|
- </td>
|
173
|
|
- </tr>
|
174
|
|
- </table>
|
175
|
|
-
|
176
|
|
- <el-button icon="el-icon-plus" size="mini" @click="addWorkList"></el-button>
|
177
|
|
- </el-form-item>
|
178
|
|
- <el-form-item label="项目登记人:" prop="projectRegistrant">
|
179
|
|
- <el-input v-model="addForm.projectRegistrant"></el-input>
|
180
|
|
- </el-form-item>
|
181
|
|
- <el-form-item label="备注:" prop="projectRegistrant">
|
182
|
|
- <el-input v-model="addForm.remark" type="textarea" rows="3"></el-input>
|
183
|
|
- </el-form-item>
|
184
|
|
-
|
185
|
|
- </el-form>
|
186
|
|
- <div slot="footer" class="dialog-footer" style="text-align: center;">
|
187
|
|
- <el-button type="primary" @click="confirmAddForm">确 定</el-button>
|
188
|
|
- <el-button @click="cancel">取 消</el-button>
|
189
|
|
- </div>
|
190
|
|
- <!-- 人员选择对话框 -->
|
191
|
|
- <el-dialog width="30%" title="选择项目负责人" :visible.sync="peopleVisible" append-to-body>
|
192
|
|
- <el-form>
|
193
|
|
- <el-form-item label="部门:">
|
194
|
|
- <el-select v-model="peopleForm.deptId" @change="handleChangeDept">
|
195
|
|
- <el-option v-for="item in peopleForm.deptList" :key="item.deptId" :label="item.deptName"
|
196
|
|
- :value="item.deptId" v-if="item.deptName != '四川中水成勘院测绘工程有限责任公司'">
|
197
|
|
- </el-option>
|
198
|
|
- </el-select>
|
199
|
|
- </el-form-item>
|
200
|
|
- <el-form-item label="人员:">
|
201
|
|
- <el-select v-model="peopleForm.userId">
|
202
|
|
- <el-option v-for="item in peopleForm.userList" :key="item.userId" :label="item.nickName"
|
203
|
|
- :value="item.userId">
|
204
|
|
- </el-option>
|
205
|
|
- </el-select>
|
206
|
|
- </el-form-item>
|
207
|
|
- <el-form-item>
|
208
|
|
- <el-button @click="confirmPeople" type="primary">确定</el-button>
|
209
|
|
- <el-button @click="cancelChoosePeople">取消</el-button>
|
210
|
|
- </el-form-item>
|
211
|
|
- </el-form>
|
212
|
|
- </el-dialog>
|
|
104
|
+ <el-dialog title="关联合同" :visible.sync="relateOpen" width="60%" append-to-body>
|
|
105
|
+ <choose-contract @choose="confirmContract" @close="relateOpen = false"></choose-contract>
|
213
|
106
|
</el-dialog>
|
214
|
107
|
</div>
|
215
|
108
|
</template>
|
|
@@ -217,6 +110,7 @@
|
217
|
110
|
<script>
|
218
|
111
|
import { listProject, listProjectFuzzy, submitProject, modifyProject, delProject } from "@/api/oa/project/project";
|
219
|
112
|
import { listProjectProgress, getProjectProgress } from "@/api/oa/project/projectProgress";
|
|
113
|
+import { addProjectContract, delProjectContract } from "@/api/oa/contract/projectContract";
|
220
|
114
|
import { listDept } from '@/api/system/dept';
|
221
|
115
|
import { listUser, getUser } from '@/api/system/user';
|
222
|
116
|
import { mapGetters } from 'vuex';
|
|
@@ -225,8 +119,10 @@ import { listDefinition } from "@/api/flowable/definition";
|
225
|
119
|
import { definitionStart, flowXmlAndNode } from "@/api/flowable/definition";
|
226
|
120
|
import { todoList, getNextFlowNodeByStart } from "@/api/flowable/todo";
|
227
|
121
|
import { Snowflake } from '@/utils/snowFlake.js'
|
|
122
|
+import chooseContract from '@/views/flowable/form/components/chooseContract.vue';
|
228
|
123
|
|
229
|
124
|
export default {
|
|
125
|
+ components: { chooseContract },
|
230
|
126
|
name: 'Project',
|
231
|
127
|
computed: {
|
232
|
128
|
...mapGetters(['deptId', 'userId'])
|
|
@@ -247,6 +143,7 @@ export default {
|
247
|
143
|
total: 0,
|
248
|
144
|
loading: true,
|
249
|
145
|
addOpen: false,
|
|
146
|
+ relateOpen: false,
|
250
|
147
|
modifyOpen: false,
|
251
|
148
|
title: '',
|
252
|
149
|
addForm: {},
|
|
@@ -348,10 +245,6 @@ export default {
|
348
|
245
|
this.queryParams.pageNum = 1;
|
349
|
246
|
this.getList();
|
350
|
247
|
},
|
351
|
|
- handleAdd() {
|
352
|
|
- this.title = '新增项目'
|
353
|
|
- this.addOpen = true
|
354
|
|
- },
|
355
|
248
|
handleView(row) {
|
356
|
249
|
let id = row.projectId
|
357
|
250
|
this.$router.push(
|
|
@@ -376,6 +269,27 @@ export default {
|
376
|
269
|
this.$modal.msgSuccess("删除成功");
|
377
|
270
|
}).catch(() => { });
|
378
|
271
|
},
|
|
272
|
+ // 关联合同
|
|
273
|
+ handleRelate(row) {
|
|
274
|
+ this.relateOpen = true;
|
|
275
|
+ this.addForm = row
|
|
276
|
+ },
|
|
277
|
+ confirmContract(contract) {
|
|
278
|
+ const projectId = this.addForm.projectId;
|
|
279
|
+ let projectContract = {
|
|
280
|
+ projectId: projectId,
|
|
281
|
+ contractId: contract.contractId
|
|
282
|
+ }
|
|
283
|
+ if (!this.addForm.contract) {
|
|
284
|
+ addProjectContract(projectContract)
|
|
285
|
+ } else {
|
|
286
|
+ delProjectContract(this.addForm.contract.contractId).then(() => {
|
|
287
|
+ addProjectContract(projectContract)
|
|
288
|
+ });
|
|
289
|
+ }
|
|
290
|
+ this.getList();
|
|
291
|
+ this.relateOpen = false;
|
|
292
|
+ },
|
379
|
293
|
confirmAddForm() {
|
380
|
294
|
this.addForm.workList = this.workList;
|
381
|
295
|
let formData = new FormData();
|
|
@@ -546,7 +460,7 @@ export default {
|
546
|
460
|
}
|
547
|
461
|
return path
|
548
|
462
|
},
|
549
|
|
- sortIsFinshed(a,b){
|
|
463
|
+ sortIsFinshed(a, b) {
|
550
|
464
|
return Number(a.isFinished) - Number(b.isFinished)
|
551
|
465
|
}
|
552
|
466
|
},
|