浏览代码

修改付款进度权限

余思翰 3 个月前
父节点
当前提交
7b17b4ebe3

+ 134
- 110
oa-ui-app/pages/components/ProjectPicker.vue 查看文件

1
 <!-- components/ProjectPicker.vue -->
1
 <!-- components/ProjectPicker.vue -->
2
 <template>
2
 <template>
3
-		<uni-popup ref="popup" type="bottom" @maskClick="close">
4
-			<view class="modal-container">
5
-				<!-- 搜索框 -->
6
-				<view class="search-box">
7
-					<uni-icons type="search" size="18" color="#999" />
8
-					<input class="search-input" placeholder="输入项目编号/名称搜索" v-model="searchKeyword" @input="handleSearch" />
9
-				</view>
3
+	<uni-popup ref="popup" type="bottom" @maskClick="close">
4
+		<view class="modal-container">
5
+			<!-- 搜索框 -->
6
+			<view class="search-box">
7
+				<uni-data-select v-model="keyword" :localdata="keywordData" :clear="false" style="width: 30rpx;"></uni-data-select>
8
+				<uni-icons type="search" size="18" color="#999" />
9
+				<input class="search-input" placeholder="输入项目编号/名称搜索" v-model="searchKeyword" @input="handleSearch" />
10
+			</view>
10
 
11
 
11
-				<!-- 项目列表 -->
12
-				<scroll-view scroll-y class="list-container" @scrolltolower="loadMore" :scroll-top="scrollTop">
13
-					<view v-for="(item,index) in projectList" :key="'p' + index" class="list-item"
14
-						:class="{ selected: selectedProject && selectedProject.projectId === item.projectId }" @click="handleSelect(item)">
15
-						<view class="item-content">
16
-							<text class="project-id">{{ item.projectId }}</text>
17
-							<text class="project-name">{{ item.projectName }}</text>
18
-						</view>
19
-						<uni-icons v-if="selectedProject && selectedProject.projectId === item.projectId" type="checkmarkempty" color="#007AFF" size="18" />
12
+			<!-- 项目列表 -->
13
+			<scroll-view scroll-y class="list-container" @scrolltolower="loadMore" :scroll-top="scrollTop">
14
+				<view v-for="(item,index) in projectList" :key="'p' + index" class="list-item"
15
+					:class="{ selected: selectedProject && selectedProject.projectId === item.projectId }"
16
+					@click="handleSelect(item)">
17
+					<view class="item-content">
18
+						<text class="project-id">{{ item.projectNumber }}</text>
19
+						<text class="project-name">{{ item.projectName }}</text>
20
 					</view>
20
 					</view>
21
-					
22
-					<!-- 加载状态 -->
23
-					<view class="loading-status">
24
-						<text v-if="loading">加载中...</text>
25
-						<text v-else-if="!hasMore">没有更多了</text>
26
-					</view>
27
-				</scroll-view>
21
+					<uni-icons v-if="selectedProject && selectedProject.projectId === item.projectId" type="checkmarkempty"
22
+						color="#007AFF" size="18" />
23
+				</view>
28
 
24
 
29
-				<!-- 底部操作 -->
30
-				<view class="footer">
31
-					<button class="btn" @click="close">取消</button>
32
-					<button class="btn confirm-btn" @click="confirm">确定</button>
25
+				<!-- 加载状态 -->
26
+				<view class="loading-status">
27
+					<text v-if="loading">加载中...</text>
28
+					<text v-else-if="!hasMore">没有更多了</text>
33
 				</view>
29
 				</view>
30
+			</scroll-view>
31
+
32
+			<!-- 底部操作 -->
33
+			<view class="footer">
34
+				<button class="btn" @click="close">取消</button>
35
+				<button class="btn confirm-btn" @click="confirm">确定</button>
34
 			</view>
36
 			</view>
35
-		</uni-popup>
37
+		</view>
38
+	</uni-popup>
36
 </template>
39
 </template>
37
 
40
 
38
 <script>
41
 <script>
68
 				hasMore: true, // 是否还有更多
71
 				hasMore: true, // 是否还有更多
69
 				loading: false, // 加载状态
72
 				loading: false, // 加载状态
70
 				scrollTop: 0, // 滚动位置
73
 				scrollTop: 0, // 滚动位置
71
-				selectedProject: null // 当前选中项目
74
+				selectedProject: null, // 当前选中项目
75
+				keyword: 'projectNumber',
76
+				keywordData: [{
77
+						text: '项目编号',
78
+						value: 'projectNumber',
79
+					},
80
+					{
81
+						text: '项目名称',
82
+						value: 'projectName'
83
+					}
84
+				]
72
 			};
85
 			};
73
 		},
86
 		},
74
 		watch: {
87
 		watch: {
107
 
120
 
108
 				this.loading = true;
121
 				this.loading = true;
109
 				try {
122
 				try {
110
-					const res = await listProject({
111
-						keyword: this.searchKeyword,
112
-						pageNum: this.pageNum,
113
-						pageSize: this.pageSize
114
-					});
123
+					const keyword = this.keyword
124
+					let res;
125
+					if (keyword == 'projectNumber') {
126
+						res = await listProject({
127
+							projectNumber: this.searchKeyword,
128
+							pageNum: this.currentPage,
129
+							pageSize: this.pageSize
130
+						});
131
+					}else{
132
+						res = await listProject({
133
+							projectName: this.searchKeyword,
134
+							pageNum: this.currentPage,
135
+							pageSize: this.pageSize
136
+						});
137
+					}
138
+
115
 					console.log(res)
139
 					console.log(res)
116
 					this.projectList = this.currentPage === 1 ?
140
 					this.projectList = this.currentPage === 1 ?
117
 						res.rows : [...this.projectList, ...res.rows];
141
 						res.rows : [...this.projectList, ...res.rows];
145
 
169
 
146
 			// 选择项目
170
 			// 选择项目
147
 			handleSelect(item) {
171
 			handleSelect(item) {
148
-				this.selectedProject = this.selectedProject?.id === item.id ? null : item;
172
+				this.selectedProject = this.selectedProject?.projectId === item.projectId ? null : item;
149
 			},
173
 			},
150
 
174
 
151
 			// 确认选择
175
 			// 确认选择
166
 </script>
190
 </script>
167
 
191
 
168
 <style lang="scss" scoped>
192
 <style lang="scss" scoped>
169
-.modal-container {
170
-  background: #fff;
171
-  border-radius: 16px 16px 0 0;
172
-  max-height: 70vh;
173
-  padding: 20px;
174
-}
175
-
176
-.search-box {
177
-  display: flex;
178
-  align-items: center;
179
-  padding: 10px;
180
-  background: #f5f5f5;
181
-  border-radius: 8px;
182
-  margin-bottom: 15px;
183
-
184
-  .search-input {
185
-    flex: 1;
186
-    margin-left: 8px;
187
-    font-size: 14px;
188
-  }
189
-}
190
-
191
-.list-container {
192
-  max-height: 50vh;
193
-  margin-bottom: 15px;
194
-
195
-  .list-item {
196
-    display: flex;
197
-    align-items: center;
198
-    justify-content: space-between;
199
-    padding: 12px;
200
-    border-bottom: 1px solid #eee;
201
-
202
-    &.selected {
203
-      background-color: #f8f8f8;
204
-    }
205
-
206
-    .item-content {
207
-      flex: 1;
208
-
209
-      .project-id {
210
-        color: #666;
211
-        font-size: 12px;
212
-        margin-right: 8px;
213
-      }
214
-
215
-      .project-name {
216
-        color: #333;
217
-        font-size: 14px;
218
-      }
219
-    }
220
-  }
221
-
222
-  .loading-status {
223
-    text-align: center;
224
-    padding: 10px;
225
-    color: #999;
226
-    font-size: 12px;
227
-  }
228
-}
229
-
230
-.footer {
231
-  display: flex;
232
-  gap: 15px;
233
-
234
-  .btn {
235
-    flex: 1;
236
-    border-radius: 8px;
237
-
238
-    &.confirm-btn {
239
-      background-color: #007AFF;
240
-      color: #fff;
241
-    }
242
-  }
243
-}
193
+	.modal-container {
194
+		background: #fff;
195
+		border-radius: 16px 16px 0 0;
196
+		max-height: 70vh;
197
+		padding: 20px;
198
+	}
199
+
200
+	.search-box {
201
+		display: flex;
202
+		align-items: center;
203
+		padding: 10px;
204
+		background: #f5f5f5;
205
+		border-radius: 8px;
206
+		margin-bottom: 15px;
207
+
208
+		.search-input {
209
+			flex: 1;
210
+			margin-left: 8px;
211
+			font-size: 14px;
212
+		}
213
+	}
214
+
215
+	.list-container {
216
+		max-height: 50vh;
217
+		margin-bottom: 15px;
218
+
219
+		.list-item {
220
+			display: flex;
221
+			align-items: center;
222
+			justify-content: space-between;
223
+			padding: 12px;
224
+			border-bottom: 1px solid #eee;
225
+
226
+			&.selected {
227
+				background-color: #f8f8f8;
228
+			}
229
+
230
+			.item-content {
231
+				flex: 1;
232
+
233
+				.project-id {
234
+					color: #666;
235
+					font-size: 12px;
236
+					margin-right: 8px;
237
+				}
238
+
239
+				.project-name {
240
+					color: #333;
241
+					font-size: 14px;
242
+				}
243
+			}
244
+		}
245
+
246
+		.loading-status {
247
+			text-align: center;
248
+			padding: 10px;
249
+			color: #999;
250
+			font-size: 12px;
251
+		}
252
+	}
253
+
254
+	.footer {
255
+		display: flex;
256
+		gap: 15px;
257
+
258
+		.btn {
259
+			flex: 1;
260
+			border-radius: 8px;
261
+
262
+			&.confirm-btn {
263
+				background-color: #007AFF;
264
+				color: #fff;
265
+			}
266
+		}
267
+	}
244
 </style>
268
 </style>

+ 49
- 8
oa-ui-app/pages/message/apply/components/declare/declare.vue 查看文件

24
 			</uni-forms-item>
24
 			</uni-forms-item>
25
 			<!-- 是否零星项目 -->
25
 			<!-- 是否零星项目 -->
26
 			<uni-forms-item label="是否零星项目" required class="form-item" name="isScattered">
26
 			<uni-forms-item label="是否零星项目" required class="form-item" name="isScattered">
27
-				<uni-data-checkbox v-model="formData.isScattered" :localdata="isScatteredOptions"></uni-data-checkbox>
27
+				<uni-data-checkbox v-model="isScattered" :localdata="isScatteredOptions"></uni-data-checkbox>
28
 			</uni-forms-item>
28
 			</uni-forms-item>
29
 
29
 
30
 			<!-- 选择项目 -->
30
 			<!-- 选择项目 -->
31
-			<uni-forms-item label="选择项目" required class="form-item" v-if="!formData.isScattered" name="projectId">
31
+			<uni-forms-item label="选择项目" required class="form-item" v-if="!isScattered" name="projectId">
32
 				<!-- <ProjectPicker v-model="formData.projectId" placeholder="请选择项目" :labelKey="'projectName'"
32
 				<!-- <ProjectPicker v-model="formData.projectId" placeholder="请选择项目" :labelKey="'projectName'"
33
 					:valueKey="'projectId'" @change="handleProjectChange"
33
 					:valueKey="'projectId'" @change="handleProjectChange"
34
 					:customStyle="{ borderColor: '#e5e5e5', borderRadius: '8px' }" v-if="taskName == '工作填报'" /> -->
34
 					:customStyle="{ borderColor: '#e5e5e5', borderRadius: '8px' }" v-if="taskName == '工作填报'" /> -->
35
 				<!-- <ProjectInfo :project="projectObj" v-else></ProjectInfo> -->
35
 				<!-- <ProjectInfo :project="projectObj" v-else></ProjectInfo> -->
36
-				<button @click="openProject = true">选择项目</button>
36
+				<u-button type="primary" @click="openProject = true" v-if="taskName == '工作填报'">选择项目</u-button>
37
 				<ProjectPicker :visible.sync="openProject" :selected.sync="selectedProject" @confirm="handleConfirm" />
37
 				<ProjectPicker :visible.sync="openProject" :selected.sync="selectedProject" @confirm="handleConfirm" />
38
+				<ProjectInfo :project="projectObj"></ProjectInfo>
38
 			</uni-forms-item>
39
 			</uni-forms-item>
39
 
40
 
40
 			<!-- 工作类别 -->
41
 			<!-- 工作类别 -->
68
 				</uni-easyinput>
69
 				</uni-easyinput>
69
 			</uni-forms-item>
70
 			</uni-forms-item>
70
 
71
 
72
+			<uni-forms-item label="系数" required class="form-item" name="coefficient" v-if="taskName != '工作填报'">
73
+				<uni-easyinput type="number" v-model="formData.coefficient" placeholder="请输入系数" :styles="inputStyle"
74
+					@input="countMoney">
75
+				</uni-easyinput>
76
+			</uni-forms-item>
77
+
78
+			<uni-forms-item label="工天单价" class="form-item" v-if="taskName != '工作填报'">
79
+				<u-tag :text="formData.price+'/人天'" type="success" plain></u-tag>
80
+			</uni-forms-item>
81
+
82
+			<uni-forms-item label="预估绩效" class="form-item" v-if="taskName != '工作填报'">
83
+				<u-tag :text="'¥'+money" type="primary" plain></u-tag>
84
+			</uni-forms-item>
71
 			<!-- 提交按钮 -->
85
 			<!-- 提交按钮 -->
72
 			<button class="save-btn" @click="save">保存</button>
86
 			<button class="save-btn" @click="save">保存</button>
73
 			<button class="submit-btn margin-top-xs" type="primary" @click="submitForm">提交</button>
87
 			<button class="submit-btn margin-top-xs" type="primary" @click="submitForm">提交</button>
119
 			return {
133
 			return {
120
 				openProject: false,
134
 				openProject: false,
121
 				selectedProject: null,
135
 				selectedProject: null,
136
+				isScattered: 0,
122
 				formData: {
137
 				formData: {
123
-					isScattered: 0,
138
+					userId: null,
124
 					projectId: '',
139
 					projectId: '',
125
 					workType: '',
140
 					workType: '',
126
 					workItem: '',
141
 					workItem: '',
127
 					workContent: '',
142
 					workContent: '',
128
 					workLoad: '',
143
 					workLoad: '',
129
-					submitTime: parseTime(new Date(), "{y}-{m}-{d}")
144
+					price: 216,
145
+					submitTime: ''
130
 				},
146
 				},
147
+				money: '',
131
 				rules: {
148
 				rules: {
132
 					isScattered: {
149
 					isScattered: {
133
 						rules: [{
150
 						rules: [{
204
 		methods: {
221
 		methods: {
205
 			handleConfirm(project) {
222
 			handleConfirm(project) {
206
 				console.log('选中的项目:', project);
223
 				console.log('选中的项目:', project);
207
-				this.selectedProject = project
224
+				this.selectedProject = project;
225
+				this.projectObj = project;
208
 			},
226
 			},
209
 			initForm() {
227
 			initForm() {
210
 				getDeclare(this.taskForm.formId).then(res => {
228
 				getDeclare(this.taskForm.formId).then(res => {
211
 					if (res.data) {
229
 					if (res.data) {
212
 						this.hasForm = true;
230
 						this.hasForm = true;
213
 						this.formData = res.data;
231
 						this.formData = res.data;
232
+						console.log(res.data)
214
 						if (res.data.projectId) {
233
 						if (res.data.projectId) {
215
-							this.formData.isScattered = 0;
234
+							this.isScattered = 0;
216
 						} else {
235
 						} else {
217
-							this.formData.isScattered = 1;
236
+							this.isScattered = 1;
218
 						}
237
 						}
219
 						res.data.project.projectLeader = res.data.projectLeader
238
 						res.data.project.projectLeader = res.data.projectLeader
220
 						this.projectObj = res.data.project;
239
 						this.projectObj = res.data.project;
240
+						this.selectedProject = res.data.project;
221
 						this.bindWorkTypeChange(this.formData.workType);
241
 						this.bindWorkTypeChange(this.formData.workType);
242
+						this.countMoney();
222
 					} else {
243
 					} else {
223
 						this.hasForm = false;
244
 						this.hasForm = false;
224
 					}
245
 					}
246
+					if (this.taskName == '工作填报') {
247
+						this.formData.submitTime = parseTime(new Date(), "{y}-{m}-{d}");
248
+						this.formData.userId = this.$store.getters.userId;
249
+						console.log(this.$store.getters)
250
+					}
225
 				})
251
 				})
226
 			},
252
 			},
227
 			bindProjectChange(e) {
253
 			bindProjectChange(e) {
265
 					this.projects = res.rows
291
 					this.projects = res.rows
266
 				})
292
 				})
267
 			},
293
 			},
294
+			countMoney() {
295
+				let result = parseFloat(this.formData.price * this.formData.workLoad * this.formData.coefficient)
296
+				console.log(result)
297
+				this.money = result.toFixed(2)
298
+			},
268
 			async save() {
299
 			async save() {
300
+				if (!this.isScattered) {
301
+					this.formData.projectId = this.projectObj.projectId;
302
+				} else {
303
+					this.formData.projectId = ''
304
+				}
269
 				if (this.hasForm) {
305
 				if (this.hasForm) {
270
 					let updateRes = await updateDeclare(this.formData);
306
 					let updateRes = await updateDeclare(this.formData);
271
 				} else {
307
 				} else {
272
 					this.formData.formId = this.taskForm.formId;
308
 					this.formData.formId = this.taskForm.formId;
273
 					let addRes = await addDeclare(this.formData);
309
 					let addRes = await addDeclare(this.formData);
310
+					if (addRes.code == 200) {
311
+						this.hasForm = true;
312
+					} else {
313
+						this.hasForm = false;
314
+					}
274
 				}
315
 				}
275
 				uni.showToast({
316
 				uni.showToast({
276
 					title: '保存成功',
317
 					title: '保存成功',

+ 7
- 6
oa-ui-app/store/getters.js 查看文件

1
 const getters = {
1
 const getters = {
2
-  token: state => state.user.token,
3
-  avatar: state => state.user.avatar,
4
-  name: state => state.user.name,
5
-  roles: state => state.user.roles,
6
-  permissions: state => state.user.permissions
2
+	token: state => state.user.token,
3
+	avatar: state => state.user.avatar,
4
+	name: state => state.user.name,
5
+	roles: state => state.user.roles,
6
+	permissions: state => state.user.permissions,
7
+	userId: state => state.user.id,
7
 }
8
 }
8
-export default getters
9
+export default getters

+ 9
- 3
oa-ui-app/store/modules/user.js 查看文件

12
     name: storage.get(constant.name),
12
     name: storage.get(constant.name),
13
     avatar: storage.get(constant.avatar),
13
     avatar: storage.get(constant.avatar),
14
     roles: storage.get(constant.roles),
14
     roles: storage.get(constant.roles),
15
-    permissions: storage.get(constant.permissions)
15
+    permissions: storage.get(constant.permissions),
16
+    id: storage.get(constant.id),
16
   },
17
   },
17
 
18
 
18
   mutations: {
19
   mutations: {
34
     SET_PERMISSIONS: (state, permissions) => {
35
     SET_PERMISSIONS: (state, permissions) => {
35
       state.permissions = permissions
36
       state.permissions = permissions
36
       storage.set(constant.permissions, permissions)
37
       storage.set(constant.permissions, permissions)
37
-    }
38
+    },
39
+    SET_ID: (state, id) => {
40
+      state.id = id
41
+      storage.set(constant.id, id)
42
+    },
38
   },
43
   },
39
 
44
 
40
   actions: {
45
   actions: {
61
         getInfo().then(res => {
66
         getInfo().then(res => {
62
           const user = res.user
67
           const user = res.user
63
           const avatar = (user == null || user.avatar == "" || user.avatar == null) ? require("@/static/images/profile.jpg") : baseUrl + user.avatar
68
           const avatar = (user == null || user.avatar == "" || user.avatar == null) ? require("@/static/images/profile.jpg") : baseUrl + user.avatar
64
-          const username = (user == null || user.userName == "" || user.userName == null) ? "" : user.userName
69
+          const username = (user == null || user.nickName == "" || user.nickName == null) ? "" : user.nickName
65
           if (res.roles && res.roles.length > 0) {
70
           if (res.roles && res.roles.length > 0) {
66
             commit('SET_ROLES', res.roles)
71
             commit('SET_ROLES', res.roles)
67
             commit('SET_PERMISSIONS', res.permissions)
72
             commit('SET_PERMISSIONS', res.permissions)
68
           } else {
73
           } else {
69
             commit('SET_ROLES', ['ROLE_DEFAULT'])
74
             commit('SET_ROLES', ['ROLE_DEFAULT'])
70
           }
75
           }
76
+					commit('SET_ID', user.userId)
71
           commit('SET_NAME', username)
77
           commit('SET_NAME', username)
72
           commit('SET_AVATAR', avatar)
78
           commit('SET_AVATAR', avatar)
73
           resolve(res)
79
           resolve(res)

+ 2
- 2
oa-ui/src/views/flowable/form/components/print/projectPrint.vue 查看文件

82
             </el-row>
82
             </el-row>
83
           </td>
83
           </td>
84
         </tr>
84
         </tr>
85
-        <tr>
85
+        <!-- <tr>
86
           <td class="fontbold">
86
           <td class="fontbold">
87
             生产部门确认
87
             生产部门确认
88
           </td>
88
           </td>
97
               </el-col>
97
               </el-col>
98
             </el-row>
98
             </el-row>
99
           </td>
99
           </td>
100
-        </tr>
100
+        </tr> -->
101
       </table>
101
       </table>
102
     </div>
102
     </div>
103
     <div class="text-center mt20">
103
     <div class="text-center mt20">

+ 8
- 7
oa-ui/src/views/oa/contract/components/paymentProgress.vue 查看文件

2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2025-02-12 13:40:48
3
  * @Date: 2025-02-12 13:40:48
4
  * @LastEditors: Please set LastEditors
4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2025-02-13 10:29:05
5
+ * @LastEditTime: 2025-02-14 15:32:51
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div>
8
   <div>
33
         </el-input>
33
         </el-input>
34
       </el-form-item>
34
       </el-form-item>
35
       <el-form-item label="合同备注" prop="remark">
35
       <el-form-item label="合同备注" prop="remark">
36
-        <el-input type="textarea" disabled v-model="form.remark" :autosize="{minRows:4}" />
36
+        <el-input type="textarea" disabled v-model="form.remark" :autosize="{ minRows: 4 }" />
37
       </el-form-item>
37
       </el-form-item>
38
       <el-form-item style="text-align: left;" label="回款进度">
38
       <el-form-item style="text-align: left;" label="回款进度">
39
         <table border="1" style="width:100%" v-loading="loading">
39
         <table border="1" style="width:100%" v-loading="loading">
114
       sumAmount: 0,
114
       sumAmount: 0,
115
       sumPercent: 0,
115
       sumPercent: 0,
116
       loading: true,
116
       loading: true,
117
-      isDisabled:true,
117
+      isDisabled: true,
118
     }
118
     }
119
   },
119
   },
120
   watch: {
120
   watch: {
128
     this.isDisabledFn();
128
     this.isDisabledFn();
129
   },
129
   },
130
   methods: {
130
   methods: {
131
-    isDisabledFn(){
132
-      if(this.$store.getters.roles.includes('finance')){
131
+    isDisabledFn() {
132
+      let roles = ['finance', 'nfinance']
133
+      if (this.$store.getters.roles.some(e => roles.includes(e))) {
133
         this.isDisabled = false
134
         this.isDisabled = false
134
-      }else{
135
+      } else {
135
         this.isDisabled = true
136
         this.isDisabled = true
136
       }
137
       }
137
     },
138
     },
185
     },
186
     },
186
     changePercentage(paid) {
187
     changePercentage(paid) {
187
       let percent = ((paid.paidAmount / this.form.amount) * 100).toFixed(2);
188
       let percent = ((paid.paidAmount / this.form.amount) * 100).toFixed(2);
188
-      paid.paidPercentage = percent;
189
+      paid.paidPercentage = Number(percent);
189
       this.getSum();
190
       this.getSum();
190
     },
191
     },
191
     async confirm() {
192
     async confirm() {

+ 4
- 3
oa-ui/src/views/oa/contract/components/subProgress.vue 查看文件

2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2025-02-12 13:40:48
3
  * @Date: 2025-02-12 13:40:48
4
  * @LastEditors: Please set LastEditors
4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2025-02-13 10:33:15
5
+ * @LastEditTime: 2025-02-14 15:34:18
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div>
8
   <div>
123
   },
123
   },
124
   methods: {
124
   methods: {
125
     isDisabledFn(){
125
     isDisabledFn(){
126
-      if(this.$store.getters.roles.includes('finance')){
126
+      let roles = ['finance', 'nfinance']
127
+      if(this.$store.getters.roles.some(e => roles.includes(e))){
127
         this.isDisabled = false
128
         this.isDisabled = false
128
       }else{
129
       }else{
129
         this.isDisabled = true
130
         this.isDisabled = true
179
     },
180
     },
180
     changePercentage(paid) {
181
     changePercentage(paid) {
181
       let percent = ((paid.paidAmount / this.form.subAmount) * 100).toFixed(2);
182
       let percent = ((paid.paidAmount / this.form.subAmount) * 100).toFixed(2);
182
-      paid.paidPercentage = percent;
183
+      paid.paidPercentage = Number(percent);
183
       this.getSum();
184
       this.getSum();
184
     },
185
     },
185
     async confirm() {
186
     async confirm() {

+ 2
- 2
oa-ui/src/views/oa/contract/index.vue 查看文件

50
       <el-table-column label="合同编码(公司)" align="center" prop="contractCode" />
50
       <el-table-column label="合同编码(公司)" align="center" prop="contractCode" />
51
       <el-table-column label="合同编号(业主)" align="center" prop="contractNumber" />
51
       <el-table-column label="合同编号(业主)" align="center" prop="contractNumber" />
52
       <!-- <el-table-column label="履约保证金" align="center" prop="deposit" /> -->
52
       <!-- <el-table-column label="履约保证金" align="center" prop="deposit" /> -->
53
-      <el-table-column label="合同文件" align="center" prop="contractDocument" show-overflow-tooltip>
53
+      <!-- <el-table-column label="合同文件" align="center" prop="contractDocument" show-overflow-tooltip>
54
         <template slot-scope="scope">
54
         <template slot-scope="scope">
55
           <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + scope.row.contractDocument}`)">
55
           <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + scope.row.contractDocument}`)">
56
             {{ getFileName(scope.row.contractDocument) }}
56
             {{ getFileName(scope.row.contractDocument) }}
57
           </el-link>
57
           </el-link>
58
         </template>
58
         </template>
59
-      </el-table-column>
59
+      </el-table-column> -->
60
       <el-table-column label="拟稿日期" align="center" prop="draftTime">
60
       <el-table-column label="拟稿日期" align="center" prop="draftTime">
61
         <template slot-scope="scope">
61
         <template slot-scope="scope">
62
           <span>{{ parseTime(scope.row.draftTime, '{y}-{m}-{d}') }}</span>
62
           <span>{{ parseTime(scope.row.draftTime, '{y}-{m}-{d}') }}</span>

+ 4
- 3
oa-ui/src/views/oa/contract/subContract.vue 查看文件

2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-06-21 18:52:00
3
  * @Date: 2024-06-21 18:52:00
4
  * @LastEditors: Please set LastEditors
4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2025-02-13 10:40:03
5
+ * @LastEditTime: 2025-02-14 15:25:53
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div class="app-container">
8
   <div class="app-container">
50
       <el-table-column label="分包合同金额" align="center" prop="subAmount" />
50
       <el-table-column label="分包合同金额" align="center" prop="subAmount" />
51
       <el-table-column label="承接单位" align="center" prop="partner.partnerName" />
51
       <el-table-column label="承接单位" align="center" prop="partner.partnerName" />
52
       <!-- <el-table-column label="承接单位联系人" align="center" prop="contactPerson" /> -->
52
       <!-- <el-table-column label="承接单位联系人" align="center" prop="contactPerson" /> -->
53
-      <el-table-column label="合同文件" align="center" prop="contractDocument" show-overflow-tooltip>
53
+      <!-- <el-table-column label="合同文件" align="center" prop="contractDocument" show-overflow-tooltip>
54
         <template slot-scope="scope">
54
         <template slot-scope="scope">
55
           <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + scope.row.contractDocument}`)">
55
           <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + scope.row.contractDocument}`)">
56
             {{ getFileName(scope.row.contractDocument) }}
56
             {{ getFileName(scope.row.contractDocument) }}
57
           </el-link>
57
           </el-link>
58
         </template>
58
         </template>
59
-      </el-table-column>
59
+      </el-table-column> -->
60
       <el-table-column label="拟稿日期" align="center" prop="draftTime">
60
       <el-table-column label="拟稿日期" align="center" prop="draftTime">
61
         <template slot-scope="scope">
61
         <template slot-scope="scope">
62
           <span>{{ parseTime(scope.row.draftTime, '{y}-{m}-{d}') }}</span>
62
           <span>{{ parseTime(scope.row.draftTime, '{y}-{m}-{d}') }}</span>
118
     <el-dialog :title="title" :visible.sync="openInfo" append-to-body width="60%">
118
     <el-dialog :title="title" :visible.sync="openInfo" append-to-body width="60%">
119
       <sub-contract :taskForm="taskForm" :taskName="''" :flowDisabled="false"></sub-contract>
119
       <sub-contract :taskForm="taskForm" :taskName="''" :flowDisabled="false"></sub-contract>
120
     </el-dialog>
120
     </el-dialog>
121
+    
121
     <!-- 回款进度 -->
122
     <!-- 回款进度 -->
122
     <el-dialog :title="title" :visible.sync="progressOpen" width="50%" append-to-body>
123
     <el-dialog :title="title" :visible.sync="progressOpen" width="50%" append-to-body>
123
       <sub-progress :form="progressContract" @cancel="progressOpen = false" @getList="getList"></sub-progress>
124
       <sub-progress :form="progressContract" @cancel="progressOpen = false" @getList="getList"></sub-progress>

正在加载...
取消
保存