|
@@ -2,20 +2,20 @@
|
2
|
2
|
* @Author: ysh
|
3
|
3
|
* @Date: 2024-02-27 14:49:15
|
4
|
4
|
* @LastEditors: Please set LastEditors
|
5
|
|
- * @LastEditTime: 2024-04-07 13:55:49
|
|
5
|
+ * @LastEditTime: 2024-04-07 16:53:39
|
6
|
6
|
-->
|
7
|
7
|
|
8
|
8
|
<template>
|
9
|
9
|
<div class="project-wrapper">
|
10
|
10
|
<!-- 项目登记 -->
|
11
|
|
- <h2 style="text-align: center;">项目登记</h2>
|
12
|
|
- <el-form :model="addForm" :rules="rules" label-width="100px" :disable="disable">
|
|
11
|
+ <h2 style="text-align: center">项目登记</h2>
|
|
12
|
+ <el-form :model="addForm" :rules="rules" label-width="100px" :disabled="disabled">
|
13
|
13
|
<el-form-item label="项目编号:" prop="projectNumber">
|
14
|
14
|
<el-input v-model="addForm.projectNumber"></el-input>
|
15
|
15
|
</el-form-item>
|
16
|
16
|
<el-form-item label="项目名称:" prop="projectName">
|
17
|
17
|
<el-input v-model="addForm.projectName"></el-input>
|
18
|
|
- </el-form-item>
|
|
18
|
+ </el-form-item>
|
19
|
19
|
<el-form-item label="项目类型:" prop="projectType">
|
20
|
20
|
<el-input v-model="addForm.projectType"></el-input>
|
21
|
21
|
</el-form-item>
|
|
@@ -29,7 +29,7 @@
|
29
|
29
|
</el-form-item>
|
30
|
30
|
<el-form-item label="甲方单位:" prop="partyA">
|
31
|
31
|
<el-autocomplete class="inline-input" v-model="addForm.partyA" :fetch-suggestions="querySearch"
|
32
|
|
- placeholder="请输入内容" style="width:100%"></el-autocomplete>
|
|
32
|
+ placeholder="请输入内容" style="width: 100%"></el-autocomplete>
|
33
|
33
|
<!-- <el-input v-model="addForm.partyA"></el-input> -->
|
34
|
34
|
</el-form-item>
|
35
|
35
|
<el-form-item label="联系人:" prop="contactPerson">
|
|
@@ -38,14 +38,14 @@
|
38
|
38
|
<el-form-item label="联系电话:" prop="telephone">
|
39
|
39
|
<el-input v-model="addForm.telephone"></el-input>
|
40
|
40
|
</el-form-item>
|
41
|
|
- <el-form-item label="项目概况:" prop="workList">
|
|
41
|
+ <el-form-item label="项目概况:">
|
42
|
42
|
<table border="1">
|
43
|
43
|
<tr>
|
44
|
|
- <td style="width:250px;">工作内容</td>
|
|
44
|
+ <td style="width: 250px">工作内容</td>
|
45
|
45
|
<td>等级或比例尺</td>
|
46
|
46
|
<td>单位</td>
|
47
|
47
|
<td>工作量</td>
|
48
|
|
- <td style="width:100px;">要求完成时间</td>
|
|
48
|
+ <td style="width: 100px">要求完成时间</td>
|
49
|
49
|
<td>备注</td>
|
50
|
50
|
</tr>
|
51
|
51
|
<tr v-for="(work, index) in workList" :key="index">
|
|
@@ -62,7 +62,7 @@
|
62
|
62
|
<el-input v-model="work.workload" clearable></el-input>
|
63
|
63
|
</td>
|
64
|
64
|
<td>
|
65
|
|
- <el-date-picker style="width:140px;" v-model="work.deadline" value-format="yyyy-MM-dd" type="date"
|
|
65
|
+ <el-date-picker style="width: 140px" v-model="work.deadline" value-format="yyyy-MM-dd" type="date"
|
66
|
66
|
placeholder="选择日期">
|
67
|
67
|
</el-date-picker>
|
68
|
68
|
</td>
|
|
@@ -70,50 +70,64 @@
|
70
|
70
|
<el-input v-model="work.remark" type="textarea" autosize clearable></el-input>
|
71
|
71
|
</td>
|
72
|
72
|
<td>
|
73
|
|
- <el-button type="danger" icon="el-icon-minus" size="mini" circle @click="deletWorkItem(index)"></el-button>
|
|
73
|
+ <el-button type="danger" icon="el-icon-minus" size="mini" circle
|
|
74
|
+ @click="deletWorkItem(index)"></el-button>
|
74
|
75
|
</td>
|
75
|
76
|
</tr>
|
76
|
77
|
</table>
|
77
|
78
|
|
78
|
79
|
<el-button icon="el-icon-plus" size="mini" @click="addWorkList"></el-button>
|
79
|
80
|
</el-form-item>
|
80
|
|
- <el-form-item label="项目登记人:" prop="projectRegistrantName">
|
81
|
|
- <el-tag>{{ addForm.projectRegistrantName }}</el-tag>
|
|
81
|
+ <el-form-item label="项目登记人:" prop="projectRegistrantUser.nickName">
|
|
82
|
+ <el-tag>{{ addForm.projectRegistrantUser.nickName }}</el-tag>
|
82
|
83
|
<!-- <el-input v-model="addForm.projectRegistrant"></el-input> -->
|
83
|
84
|
</el-form-item>
|
84
|
85
|
<el-form-item label="备注:" prop="remark">
|
85
|
86
|
<el-input v-model="addForm.remark" type="textarea" rows="3"></el-input>
|
86
|
87
|
</el-form-item>
|
87
|
|
-
|
88
|
88
|
</el-form>
|
89
|
|
- <div slot="footer" class="dialog-footer" style="text-align: center;">
|
90
|
|
- <el-button type="primary" @click="confirmAddForm">确 定</el-button>
|
91
|
|
- <el-button @click="cancel">取 消</el-button>
|
|
89
|
+ <div slot="footer" class="dialog-footer" style="text-align: center">
|
|
90
|
+ <el-button type="primary" @click="confirmAddForm" :disabled="disabled">确 定</el-button>
|
|
91
|
+ <el-button @click="cancel" :disabled="disabled">取 消</el-button>
|
92
|
92
|
</div>
|
93
|
|
-
|
94
|
|
-
|
95
|
93
|
</div>
|
96
|
94
|
</template>
|
97
|
95
|
|
98
|
96
|
<script>
|
99
|
97
|
import { mapGetters } from "vuex";
|
100
|
|
-import { listProject, addProject, updateProject, delProject,submitProject } from "@/api/oa/project/project";
|
101
|
|
-import { getUser } from '@/api/system/user'
|
102
|
|
-import { getUsersDeptLeaderByDept } from '@/api/system/post'
|
103
|
|
-import { complete, rejectTask, returnList, returnTask, getNextFlowNode, delegate, flowTaskForm, } from "@/api/flowable/todo";
|
|
98
|
+import {
|
|
99
|
+ listProject,
|
|
100
|
+ getProject,
|
|
101
|
+ addProject,
|
|
102
|
+ updateProject,
|
|
103
|
+ delProject,
|
|
104
|
+ submitProject,
|
|
105
|
+} from "@/api/oa/project/project";
|
|
106
|
+import { getUser } from "@/api/system/user";
|
|
107
|
+import { getUsersDeptLeaderByDept } from "@/api/system/post";
|
|
108
|
+import {
|
|
109
|
+ complete,
|
|
110
|
+ rejectTask,
|
|
111
|
+ returnList,
|
|
112
|
+ returnTask,
|
|
113
|
+ getNextFlowNode,
|
|
114
|
+ delegate,
|
|
115
|
+ flowTaskForm,
|
|
116
|
+} from "@/api/flowable/todo";
|
|
117
|
+import { getProjectWork } from "@/api/oa/project/projectWork";
|
104
|
118
|
export default {
|
105
|
119
|
props: {
|
106
|
|
- disable: {
|
|
120
|
+ disabled: {
|
107
|
121
|
type: Boolean,
|
108
|
|
- require: true
|
|
122
|
+ require: true,
|
109
|
123
|
},
|
110
|
124
|
taskForm: {
|
111
|
125
|
type: Object,
|
112
|
|
- required: true
|
113
|
|
- }
|
|
126
|
+ required: true,
|
|
127
|
+ },
|
114
|
128
|
},
|
115
|
129
|
computed: {
|
116
|
|
- ...mapGetters(["userId","name"]),
|
|
130
|
+ ...mapGetters(["userId", "name"]),
|
117
|
131
|
},
|
118
|
132
|
data() {
|
119
|
133
|
return {
|
|
@@ -121,67 +135,83 @@ export default {
|
121
|
135
|
queryParams: {
|
122
|
136
|
pageNum: 1,
|
123
|
137
|
pageSize: 10,
|
124
|
|
- projectNumber: '',
|
125
|
|
- projectLeader: '',
|
|
138
|
+ projectNumber: "",
|
|
139
|
+ projectLeader: "",
|
126
|
140
|
projectLeaderName: undefined,
|
127
|
|
- projectName: '',
|
|
141
|
+ projectName: "",
|
128
|
142
|
},
|
129
|
143
|
projectList: [],
|
130
|
144
|
total: 0,
|
131
|
145
|
loading: true,
|
132
|
146
|
modifyOpen: false,
|
133
|
147
|
addForm: {
|
134
|
|
- projectRegistrant:'',
|
135
|
|
- projectRegistrantName:''
|
|
148
|
+ projectRegistrant: "",
|
|
149
|
+ projectRegistrantUser: {
|
|
150
|
+ nickName: ''
|
|
151
|
+ }
|
136
|
152
|
},
|
137
|
153
|
rules: {
|
138
|
|
- projectNumber: [{ required: true, message: '请输入项目编号', trigger: 'blur' }],
|
139
|
|
- projectName: [{ required: true, message: '请输入项目名称', trigger: 'blur' }]
|
|
154
|
+ projectNumber: [{ required: true, message: "请输入项目编号", trigger: "blur" }],
|
|
155
|
+ projectName: [{ required: true, message: "请输入项目名称", trigger: "blur" }],
|
140
|
156
|
},
|
141
|
|
- workList: [{
|
142
|
|
- content: '',
|
143
|
|
- scale: '',
|
144
|
|
- unit: '',
|
145
|
|
- workload: '',
|
146
|
|
- deadline: '',
|
147
|
|
- remark: ''
|
148
|
|
- }],
|
149
|
|
- restaurants: [
|
150
|
|
- { "value": "中国电建集团成都勘测设计研究院有限公司" }
|
151
|
|
- ]
|
152
|
|
- }
|
|
157
|
+ workList: [
|
|
158
|
+ {
|
|
159
|
+ content: "",
|
|
160
|
+ scale: "",
|
|
161
|
+ unit: "",
|
|
162
|
+ workload: "",
|
|
163
|
+ deadline: "",
|
|
164
|
+ remark: "",
|
|
165
|
+ },
|
|
166
|
+ ],
|
|
167
|
+ restaurants: [{ value: "中国电建集团成都勘测设计研究院有限公司" }],
|
|
168
|
+ };
|
153
|
169
|
},
|
154
|
170
|
created() {
|
155
|
|
- this.addForm.projectRegistrant = this.userId
|
156
|
|
- this.addForm.projectRegistrantName = this.name
|
|
171
|
+ if (this.$route.query.taskName != '项目登记') {
|
|
172
|
+ this.getProjectInfo();
|
|
173
|
+ this.getProjectWorkList();
|
|
174
|
+ } else {
|
|
175
|
+ this.addForm.projectRegistrant = this.userId;
|
|
176
|
+ this.addForm.projectRegistrantUser.nickName = this.name;
|
|
177
|
+ }
|
157
|
178
|
this.getList();
|
158
|
179
|
},
|
159
|
|
- mounted() {
|
160
|
|
-
|
161
|
|
- },
|
|
180
|
+ mounted() { },
|
162
|
181
|
methods: {
|
163
|
182
|
// 查询项目列表
|
164
|
183
|
getList() {
|
165
|
|
- this.loading = true
|
|
184
|
+ this.loading = true;
|
166
|
185
|
listProject(this.queryParams).then(response => {
|
167
|
186
|
this.projectList = [];
|
168
|
187
|
for (let p of response.rows) {
|
169
|
188
|
if (p.projectLeader != null) {
|
170
|
189
|
getUser(Number(p.projectLeader)).then(res => {
|
171
|
190
|
p.projectLeaderName = res.data.nickName;
|
172
|
|
- })
|
|
191
|
+ });
|
173
|
192
|
}
|
174
|
193
|
this.projectList.push(p);
|
175
|
194
|
}
|
176
|
195
|
this.total = response.total;
|
177
|
196
|
this.loading = false;
|
|
197
|
+ });
|
|
198
|
+ },
|
|
199
|
+ getProjectInfo() {
|
|
200
|
+ getProject(this.$route.query.formId).then(res => {
|
|
201
|
+ this.addForm = res.data;
|
|
202
|
+ })
|
|
203
|
+ },
|
|
204
|
+ getProjectWorkList() {
|
|
205
|
+ getProjectWork(this.$route.query.formId).then(res => {
|
|
206
|
+ this.workList = res.data;
|
|
207
|
+ console.log(res);
|
178
|
208
|
})
|
179
|
209
|
},
|
180
|
210
|
confirmAddForm() {
|
181
|
211
|
this.addForm.projectId = this.taskForm.formId;
|
182
|
212
|
this.addForm.workList = this.workList;
|
183
|
213
|
let forms = new FormData();
|
184
|
|
- forms.append('form',JSON.stringify(this.addForm));
|
|
214
|
+ forms.append("form", JSON.stringify(this.addForm));
|
185
|
215
|
submitProject(forms).then(response => {
|
186
|
216
|
this.$modal.msgSuccess("新增成功");
|
187
|
217
|
this.getList();
|
|
@@ -194,28 +224,28 @@ export default {
|
194
|
224
|
this.$set(this.taskForm.variables, "approval", userId);
|
195
|
225
|
complete(this.taskForm).then(response => {
|
196
|
226
|
this.$modal.msgSuccess(response.msg);
|
197
|
|
- this.$emit('goBack')
|
|
227
|
+ this.$emit("goBack");
|
198
|
228
|
});
|
199
|
|
- })
|
200
|
|
- })
|
|
229
|
+ });
|
|
230
|
+ });
|
201
|
231
|
},
|
202
|
232
|
cancel() {
|
203
|
|
- this.addForm = {}
|
|
233
|
+ this.addForm = {};
|
204
|
234
|
},
|
205
|
235
|
addWorkList() {
|
206
|
236
|
this.workList.push({
|
207
|
|
- content: '',
|
208
|
|
- scale: '',
|
209
|
|
- unit: '',
|
210
|
|
- workload: '',
|
211
|
|
- deadline: '',
|
212
|
|
- remark: ''
|
|
237
|
+ content: "",
|
|
238
|
+ scale: "",
|
|
239
|
+ unit: "",
|
|
240
|
+ workload: "",
|
|
241
|
+ deadline: "",
|
|
242
|
+ remark: "",
|
213
|
243
|
});
|
214
|
244
|
},
|
215
|
245
|
deletWorkItem(index) {
|
216
|
|
- let arr = this.workList
|
|
246
|
+ let arr = this.workList;
|
217
|
247
|
if (arr.length == 1) {
|
218
|
|
- return
|
|
248
|
+ return;
|
219
|
249
|
}
|
220
|
250
|
if (index >= 0 && index < arr.length) {
|
221
|
251
|
arr.splice(index, 1);
|
|
@@ -223,17 +253,19 @@ export default {
|
223
|
253
|
},
|
224
|
254
|
querySearch(queryString, cb) {
|
225
|
255
|
var restaurants = this.restaurants;
|
226
|
|
- var results = queryString ? restaurants.filter(this.createFilter(queryString)) : restaurants;
|
|
256
|
+ var results = queryString
|
|
257
|
+ ? restaurants.filter(this.createFilter(queryString))
|
|
258
|
+ : restaurants;
|
227
|
259
|
// 调用 callback 返回建议列表的数据
|
228
|
260
|
cb(results);
|
229
|
261
|
},
|
230
|
262
|
createFilter(queryString) {
|
231
|
|
- return (restaurant) => {
|
232
|
|
- return (restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0);
|
|
263
|
+ return restaurant => {
|
|
264
|
+ return restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0;
|
233
|
265
|
};
|
234
|
266
|
},
|
235
|
267
|
},
|
236
|
|
-}
|
|
268
|
+};
|
237
|
269
|
</script>
|
238
|
270
|
|
239
|
271
|
<style lang="scss" scoped>
|
|
@@ -261,4 +293,28 @@ table {
|
261
|
293
|
/*设置背景颜色*/
|
262
|
294
|
/* background-color: #bfa; */
|
263
|
295
|
}
|
264
|
|
-</style>
|
|
296
|
+
|
|
297
|
+::v-deep .el-input.is-disabled .el-input__inner {
|
|
298
|
+ color: #686a6e;
|
|
299
|
+}
|
|
300
|
+
|
|
301
|
+::v-deep .el-textarea.is-disabled .el-textarea__inner,
|
|
302
|
+.el-radio__input.is-disabled+span.el-radio__label {
|
|
303
|
+ color: #686a6e;
|
|
304
|
+}
|
|
305
|
+
|
|
306
|
+::v-deep .el-radio__input.is-disabled+span.el-radio__label {
|
|
307
|
+ color: #686a6e;
|
|
308
|
+}
|
|
309
|
+
|
|
310
|
+::v-deep .el-radio__input.is-disabled.is-checked .el-radio__inner::after {
|
|
311
|
+ background-color: var(--current-color);
|
|
312
|
+ width: 6px;
|
|
313
|
+ height: 6px;
|
|
314
|
+}
|
|
315
|
+
|
|
316
|
+::v-deep .el-radio__input.is-disabled .el-radio__inner,
|
|
317
|
+.el-radio__input.is-disabled.is-checked .el-radio__inner {
|
|
318
|
+ border-color: var(--current-color);
|
|
319
|
+}
|
|
320
|
+</style>
|