Browse Source

修改网页端预算显示的问题;

新增移动端项目首页。
余思翰 3 months ago
parent
commit
ce8e7dd1e3

+ 10
- 0
oa-ui-app/api/qywx/index.js View File

1
+import request from '@/utils/request'
2
+
3
+// 发送企业微信消息
4
+export function sendQyMessage(data) {
5
+  return request({
6
+    url: '/qywx/message/send',
7
+    method: 'post',
8
+    data: data
9
+  })
10
+} 

+ 9
- 7
oa-ui-app/pages.json View File

1
-/*
2
- * @Author: ysh
3
- * @Date: 2025-01-15 14:42:34
4
- * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2025-02-20 10:20:46
6
- */
7
 {
1
 {
8
 	"pages": [{
2
 	"pages": [{
9
 			"path": "pages/login",
3
 			"path": "pages/login",
96
 		{
90
 		{
97
 			"path": "pages/message/myProcess/index",
91
 			"path": "pages/message/myProcess/index",
98
 			"style": {
92
 			"style": {
99
-				"navigationBarTitleText": "我的流程"
93
+				"navigationBarTitleText": "我的流程",
94
+				"enablePullDownRefresh": true
100
 			}
95
 			}
101
 		},
96
 		},
102
 		{
97
 		{
119
 			{
114
 			{
120
 				"navigationBarTitleText" : "借款审批"
115
 				"navigationBarTitleText" : "借款审批"
121
 			}
116
 			}
117
+		},
118
+		{
119
+			"path" : "pages/project/projectInfo",
120
+			"style" : 
121
+			{
122
+				"navigationBarTitleText" : "项目详情"
123
+			}
122
 		}
124
 		}
123
 	],
125
 	],
124
 	"tabBar": {
126
 	"tabBar": {

+ 84
- 68
oa-ui-app/pages/index.vue View File

6
         <text class="search-title">搜索条件</text>
6
         <text class="search-title">搜索条件</text>
7
         <text class="search-icon">{{ isSearchExpanded ? '收起' : '展开' }}</text>
7
         <text class="search-icon">{{ isSearchExpanded ? '收起' : '展开' }}</text>
8
       </view>
8
       </view>
9
-      
9
+
10
       <view class="search-content" v-if="isSearchExpanded">
10
       <view class="search-content" v-if="isSearchExpanded">
11
         <view class="search-item">
11
         <view class="search-item">
12
           <text>项目编号</text>
12
           <text>项目编号</text>
47
     <view class="list-box">
47
     <view class="list-box">
48
       <view class="list-header">
48
       <view class="list-header">
49
         <text class="title">测绘项目列表</text>
49
         <text class="title">测绘项目列表</text>
50
-        <view class="header-btns">
50
+        <!-- <view class="header-btns">
51
           <button type="primary" size="mini" @tap="handleRegister">登记项目</button>
51
           <button type="primary" size="mini" @tap="handleRegister">登记项目</button>
52
           <button type="default" size="mini" @tap="handleExport">导出项目</button>
52
           <button type="default" size="mini" @tap="handleExport">导出项目</button>
53
-        </view>
53
+        </view> -->
54
       </view>
54
       </view>
55
 
55
 
56
-      <scroll-view 
57
-        scroll-y 
58
-        class="list-scroll"
59
-        @scrolltolower="loadMore"
60
-        :refresher-enabled="true"
61
-        :refresher-triggered="isRefreshing"
62
-        @refresherrefresh="onRefresh"
63
-      >
56
+      <scroll-view scroll-y class="list-scroll" id="projectList" :scroll-into-view="scrollToId" 
57
+        :scroll-with-animation="true" @scrolltolower="loadMore" :refresher-enabled="true"
58
+        :refresher-triggered="isRefreshing" @refresherrefresh="onRefresh" @scroll="onScroll">
64
         <view class="list-content">
59
         <view class="list-content">
60
+          <view id="top"></view>
65
           <view class="project-card" v-for="(item, index) in projectList" :key="index">
61
           <view class="project-card" v-for="(item, index) in projectList" :key="index">
66
             <!-- 卡片头部 -->
62
             <!-- 卡片头部 -->
67
             <view class="card-header">
63
             <view class="card-header">
110
             <!-- 卡片底部 -->
106
             <!-- 卡片底部 -->
111
             <view class="card-footer">
107
             <view class="card-footer">
112
               <button type="primary" size="mini" @tap="handleView(item)">查看</button>
108
               <button type="primary" size="mini" @tap="handleView(item)">查看</button>
113
-              <button type="warn" size="mini" @tap="handleDelete(item)">删除</button>
114
-              <button type="default" size="mini" @tap="handleRelate(item)">关联合同</button>
115
             </view>
109
             </view>
116
           </view>
110
           </view>
117
         </view>
111
         </view>
122
         <text v-if="hasMore">上拉加载更多</text>
116
         <text v-if="hasMore">上拉加载更多</text>
123
         <text v-else>没有更多数据了</text>
117
         <text v-else>没有更多数据了</text>
124
       </view>
118
       </view>
119
+
120
+      <!-- 回到顶部按钮 -->
121
+      <view class="back-to-top" v-if="showBackToTop" @tap="scrollToTop">
122
+        <text class="iconfont">
123
+          <uv-icon size="28" name="arrow-upward" color="#fcfcfc"></uv-icon>
124
+        </text>
125
+      </view>
125
     </view>
126
     </view>
126
   </view>
127
   </view>
127
 </template>
128
 </template>
131
 import { getProjectProgress } from "@/api/oa/project/projectProgress";
132
 import { getProjectProgress } from "@/api/oa/project/projectProgress";
132
 import { listDept } from '@/api/system/dept';
133
 import { listDept } from '@/api/system/dept';
133
 import { listUser } from '@/api/system/user';
134
 import { listUser } from '@/api/system/user';
135
+import { checkPermi } from '@/utils/permission';
134
 
136
 
135
 export default {
137
 export default {
136
   data() {
138
   data() {
153
       selectedLeader: '',
155
       selectedLeader: '',
154
       selectedDept: '',
156
       selectedDept: '',
155
       hasMore: true,
157
       hasMore: true,
156
-      isRefreshing: false
158
+      isRefreshing: false,
159
+      showBackToTop: false,
160
+      scrollTop: 0,
161
+      scrollToId: ''
157
     }
162
     }
158
   },
163
   },
159
   onLoad() {
164
   onLoad() {
165
     toggleSearch() {
170
     toggleSearch() {
166
       this.isSearchExpanded = !this.isSearchExpanded;
171
       this.isSearchExpanded = !this.isSearchExpanded;
167
     },
172
     },
168
-    
173
+
169
     resetQuery() {
174
     resetQuery() {
170
       this.queryParams = {
175
       this.queryParams = {
171
         pageNum: 1,
176
         pageNum: 1,
180
       this.selectedDept = '';
185
       this.selectedDept = '';
181
       this.handleQuery();
186
       this.handleQuery();
182
     },
187
     },
183
-    
188
+
184
     async getList() {
189
     async getList() {
185
       this.loading = true;
190
       this.loading = true;
186
       try {
191
       try {
187
-        const response = this.queryParams.queryString ? 
188
-          await listProjectFuzzy(this.queryParams) : 
192
+        const deptId = this.$store.getters.deptId;
193
+        if (deptId > 106 && deptId != 109) {
194
+          let response = await checkPermi(['oa:allproject:query'])
195
+          if (response == false) {
196
+            this.queryParams.undertakingDept = deptId
197
+          }
198
+        }
199
+        const response = this.queryParams.queryString ?
200
+          await listProjectFuzzy(this.queryParams) :
189
           await listProject(this.queryParams);
201
           await listProject(this.queryParams);
190
-        
202
+
191
         if (this.queryParams.pageNum === 1) {
203
         if (this.queryParams.pageNum === 1) {
192
           this.projectList = response.rows;
204
           this.projectList = response.rows;
193
         } else {
205
         } else {
194
           this.projectList = [...this.projectList, ...response.rows];
206
           this.projectList = [...this.projectList, ...response.rows];
195
         }
207
         }
196
-        
208
+
197
         this.total = response.total;
209
         this.total = response.total;
198
         this.hasMore = this.projectList.length < this.total;
210
         this.hasMore = this.projectList.length < this.total;
199
-        
211
+
200
         for (let project of this.projectList) {
212
         for (let project of this.projectList) {
201
           const res = await getProjectProgress(project.projectId);
213
           const res = await getProjectProgress(project.projectId);
202
           if (res.data && res.data.length > 0) {
214
           if (res.data && res.data.length > 0) {
203
-            project.percentage = Number(res.data[res.data.length - 1].percentage);
215
+            this.$set(project, 'percentage', Number(res.data[res.data.length - 1].percentage));
204
           } else {
216
           } else {
205
-            project.percentage = 0;
217
+            this.$set(project, 'percentage', 0);
206
           }
218
           }
207
           if (project.isFinished === '1') {
219
           if (project.isFinished === '1') {
208
-            project.percentage = 100;
220
+            this.$set(project, 'percentage', 100);
209
           }
221
           }
210
         }
222
         }
211
       } catch (error) {
223
       } catch (error) {
218
         this.isRefreshing = false;
230
         this.isRefreshing = false;
219
       }
231
       }
220
     },
232
     },
221
-    
233
+
222
     async getDeptList() {
234
     async getDeptList() {
223
       try {
235
       try {
224
         const res = await listDept({});
236
         const res = await listDept({});
233
         });
245
         });
234
       }
246
       }
235
     },
247
     },
236
-    
248
+
237
     async getUserList() {
249
     async getUserList() {
238
       try {
250
       try {
239
         const res = await listUser({ pageNum: 1, pageSize: 9999 });
251
         const res = await listUser({ pageNum: 1, pageSize: 9999 });
248
         });
260
         });
249
       }
261
       }
250
     },
262
     },
251
-    
263
+
252
     handleQuery() {
264
     handleQuery() {
253
       this.queryParams.pageNum = 1;
265
       this.queryParams.pageNum = 1;
254
       this.getList();
266
       this.getList();
255
     },
267
     },
256
-    
268
+
257
     handleLeaderChange(e) {
269
     handleLeaderChange(e) {
258
       const index = e.detail.value;
270
       const index = e.detail.value;
259
       this.queryParams.projectLeader = this.userList[index].value;
271
       this.queryParams.projectLeader = this.userList[index].value;
260
       this.selectedLeader = this.userList[index].text;
272
       this.selectedLeader = this.userList[index].text;
261
       this.handleQuery();
273
       this.handleQuery();
262
     },
274
     },
263
-    
275
+
264
     handleDeptChange(e) {
276
     handleDeptChange(e) {
265
       const index = e.detail.value;
277
       const index = e.detail.value;
266
       this.queryParams.undertakingDept = this.deptList[index].value;
278
       this.queryParams.undertakingDept = this.deptList[index].value;
267
       this.selectedDept = this.deptList[index].text;
279
       this.selectedDept = this.deptList[index].text;
268
       this.handleQuery();
280
       this.handleQuery();
269
     },
281
     },
270
-    
282
+
271
     handleView(row) {
283
     handleView(row) {
272
       uni.navigateTo({
284
       uni.navigateTo({
273
-        url: `/pages/project/info?id=${row.projectId}&projectName=${encodeURIComponent(row.projectName)}`
285
+        url: `/pages/project/projectInfo?projectId=${row.projectId}`
274
       });
286
       });
275
     },
287
     },
276
-    
277
-    handleDelete(row) {
278
-      uni.showModal({
279
-        title: '提示',
280
-        content: `是否确认删除项目编号为"${row.projectNumber}"的数据项?`,
281
-        success: async (res) => {
282
-          if (res.confirm) {
283
-            try {
284
-              await delProject(row.projectId);
285
-              this.getList();
286
-              uni.showToast({
287
-                title: '删除成功',
288
-                icon: 'success'
289
-              });
290
-            } catch (error) {
291
-              uni.showToast({
292
-                title: '删除失败',
293
-                icon: 'none'
294
-              });
295
-            }
296
-          }
297
-        }
298
-      });
299
-    },
300
-    
288
+
301
     handleRegister() {
289
     handleRegister() {
302
       uni.navigateTo({
290
       uni.navigateTo({
303
         url: '/pages/project/register'
291
         url: '/pages/project/register'
304
       });
292
       });
305
     },
293
     },
306
-    
294
+
307
     handleExport() {
295
     handleExport() {
308
       uni.showToast({
296
       uni.showToast({
309
         title: '导出功能开发中',
297
         title: '导出功能开发中',
310
         icon: 'none'
298
         icon: 'none'
311
       });
299
       });
312
     },
300
     },
313
-    
314
-    handleRelate(row) {
315
-      uni.showToast({
316
-        title: '关联合同功能开发中',
317
-        icon: 'none'
318
-      });
319
-    },
320
-    
301
+
321
     loadMore() {
302
     loadMore() {
322
       if (this.hasMore) {
303
       if (this.hasMore) {
323
         this.queryParams.pageNum++;
304
         this.queryParams.pageNum++;
324
         this.getList();
305
         this.getList();
325
       }
306
       }
326
     },
307
     },
327
-    
308
+
328
     onRefresh() {
309
     onRefresh() {
329
       this.isRefreshing = true;
310
       this.isRefreshing = true;
330
       this.queryParams.pageNum = 1;
311
       this.queryParams.pageNum = 1;
331
       this.getList();
312
       this.getList();
332
     },
313
     },
333
-    
314
+
334
     getProgressColor(percentage) {
315
     getProgressColor(percentage) {
335
       if (!percentage) return '#ff4d4f';
316
       if (!percentage) return '#ff4d4f';
336
       if (percentage <= 20) return '#ff4d4f';
317
       if (percentage <= 20) return '#ff4d4f';
337
       if (percentage <= 50) return '#faad14';
318
       if (percentage <= 50) return '#faad14';
338
       if (percentage <= 80) return '#1890ff';
319
       if (percentage <= 80) return '#1890ff';
339
       return '#52c41a';
320
       return '#52c41a';
321
+    },
322
+
323
+    onScroll(e) {
324
+      this.scrollTop = e.detail.scrollTop;
325
+      this.showBackToTop = this.scrollTop > 300;
326
+    },
327
+
328
+    scrollToTop() {
329
+      this.scrollToId = 'top';
330
+      setTimeout(() => {
331
+        this.scrollToId = '';
332
+      }, 300);
340
     }
333
     }
341
   }
334
   }
342
 }
335
 }
524
 }
517
 }
525
 
518
 
526
 .info-row .label {
519
 .info-row .label {
527
-  width: 160rpx;
520
+  width: 170rpx;
528
   color: #909399;
521
   color: #909399;
529
   font-size: 28rpx;
522
   font-size: 28rpx;
530
 }
523
 }
573
   color: #909399;
566
   color: #909399;
574
   font-size: 28rpx;
567
   font-size: 28rpx;
575
 }
568
 }
569
+
570
+.back-to-top {
571
+  position: fixed;
572
+  right: 30rpx;
573
+  bottom: 100rpx;
574
+  width: 80rpx;
575
+  height: 80rpx;
576
+  background-color: rgba(0, 0, 0, 0.5);
577
+  border-radius: 50%;
578
+  display: flex;
579
+  align-items: center;
580
+  justify-content: center;
581
+  z-index: 999;
582
+}
583
+
584
+.back-to-top .iconfont {
585
+  color: #fff;
586
+  font-size: 40rpx;
587
+}
588
+
589
+.icon-top:before {
590
+  content: "↑";
591
+}
576
 </style>
592
 </style>

+ 134
- 26
oa-ui-app/pages/login.vue View File

3
     <view class="logo-content align-center justify-center flex">
3
     <view class="logo-content align-center justify-center flex">
4
       <image style="width: 100rpx;height: 100rpx;" :src="globalConfig.appInfo.logo" mode="widthFix">
4
       <image style="width: 100rpx;height: 100rpx;" :src="globalConfig.appInfo.logo" mode="widthFix">
5
       </image>
5
       </image>
6
-      <text class="title">CMC综合办公系统</text>
6
+      <text class="title">CMC智联云枢办公系统</text>
7
     </view>
7
     </view>
8
     <view class="login-form-content">
8
     <view class="login-form-content">
9
       <view class="input-item flex align-center">
9
       <view class="input-item flex align-center">
31
       <text @click="handleUserAgrement" class="text-blue">《用户协议》</text>
31
       <text @click="handleUserAgrement" class="text-blue">《用户协议》</text>
32
       <text @click="handlePrivacy" class="text-blue">《隐私协议》</text>
32
       <text @click="handlePrivacy" class="text-blue">《隐私协议》</text>
33
     </view> -->
33
     </view> -->
34
+    <view class="copyright-info">©2025 CMC智联云枢办公系统 版权所有</view>
34
   </view>
35
   </view>
35
 </template>
36
 </template>
36
 
37
 
114
 
115
 
115
 <style lang="scss">
116
 <style lang="scss">
116
   page {
117
   page {
117
-    background-color: #ffffff;
118
+    background: linear-gradient(135deg, #f5f7fa 0%, #e4e8eb 100%);
119
+    min-height: 100vh;
120
+    position: relative;
121
+    overflow: hidden;
122
+
123
+    &::before,
124
+    &::after {
125
+      content: '';
126
+      position: absolute;
127
+      width: 300px;
128
+      height: 300px;
129
+      border-radius: 50%;
130
+      z-index: 0;
131
+    }
132
+
133
+    &::before {
134
+      background: linear-gradient(45deg, rgba(33, 150, 243, 0.1), rgba(25, 118, 210, 0.1));
135
+      top: -100px;
136
+      right: -100px;
137
+      animation: float 6s ease-in-out infinite;
138
+    }
139
+
140
+    &::after {
141
+      background: linear-gradient(45deg, rgba(33, 150, 243, 0.08), rgba(25, 118, 210, 0.08));
142
+      bottom: -150px;
143
+      left: -150px;
144
+      animation: float 8s ease-in-out infinite reverse;
145
+    }
118
   }
146
   }
119
 
147
 
120
   .normal-login-container {
148
   .normal-login-container {
121
     width: 100%;
149
     width: 100%;
150
+    padding: 0 30rpx;
151
+    box-sizing: border-box;
152
+    position: relative;
153
+    z-index: 1;
154
+    min-height: 100vh;
155
+    display: flex;
156
+    flex-direction: column;
157
+
158
+    &::before {
159
+      content: '';
160
+      position: absolute;
161
+      top: 50%;
162
+      left: 50%;
163
+      transform: translate(-50%, -50%);
164
+      width: 600px;
165
+      height: 600px;
166
+      background: radial-gradient(circle, rgba(33, 150, 243, 0.03) 0%, rgba(33, 150, 243, 0) 70%);
167
+      z-index: -1;
168
+    }
122
 
169
 
123
     .logo-content {
170
     .logo-content {
124
       width: 100%;
171
       width: 100%;
125
       font-size: 21px;
172
       font-size: 21px;
126
       text-align: center;
173
       text-align: center;
127
-      padding-top: 15%;
174
+      padding-top: 25%;
175
+      animation: fadeInDown 0.8s ease-out;
128
 
176
 
129
       image {
177
       image {
130
-        border-radius: 4px;
178
+        border-radius: 12px;
179
+        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
180
+        transition: transform 0.3s ease;
181
+        
182
+        &:hover {
183
+          transform: scale(1.05);
184
+        }
131
       }
185
       }
132
 
186
 
133
       .title {
187
       .title {
134
         margin-left: 10px;
188
         margin-left: 10px;
189
+        background: linear-gradient(45deg, #2196F3, #1976D2);
190
+        -webkit-background-clip: text;
191
+        color: transparent;
192
+        font-weight: 600;
135
       }
193
       }
136
     }
194
     }
137
 
195
 
138
     .login-form-content {
196
     .login-form-content {
139
       text-align: center;
197
       text-align: center;
140
       margin: 20px auto;
198
       margin: 20px auto;
141
-      margin-top: 15%;
142
-      width: 80%;
199
+      margin-top: 10%;
200
+      width: 90%;
201
+      animation: fadeInUp 0.8s ease-out;
143
 
202
 
144
       .input-item {
203
       .input-item {
145
         margin: 20px auto;
204
         margin: 20px auto;
146
-        background-color: #f5f6f7;
205
+        background-color: rgba(255, 255, 255, 0.9);
147
         height: 45px;
206
         height: 45px;
148
-        border-radius: 20px;
207
+        border-radius: 25px;
208
+        box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
209
+        transition: all 0.3s ease;
210
+        border: 1px solid transparent;
211
+
212
+        &:focus-within {
213
+          border-color: #2196F3;
214
+          box-shadow: 0 2px 12px rgba(33, 150, 243, 0.1);
215
+        }
149
 
216
 
150
         .icon {
217
         .icon {
151
           font-size: 38rpx;
218
           font-size: 38rpx;
152
-          margin-left: 10px;
153
-          color: #999;
219
+          margin-left: 20px;
220
+          color: #2196F3;
154
         }
221
         }
155
 
222
 
156
         .input {
223
         .input {
159
           line-height: 20px;
226
           line-height: 20px;
160
           text-align: left;
227
           text-align: left;
161
           padding-left: 15px;
228
           padding-left: 15px;
229
+          color: #333;
230
+          
231
+          &::placeholder {
232
+            color: #999;
233
+          }
162
         }
234
         }
163
-
164
       }
235
       }
165
 
236
 
166
       .login-btn {
237
       .login-btn {
167
         margin-top: 40px;
238
         margin-top: 40px;
168
         height: 45px;
239
         height: 45px;
169
-      }
240
+        background: linear-gradient(45deg, #2196F3, #1976D2);
241
+        border: none;
242
+        font-weight: 600;
243
+        letter-spacing: 1px;
244
+        transition: all 0.3s ease;
245
+        box-shadow: 0 4px 12px rgba(33, 150, 243, 0.2);
170
 
246
 
171
-      .xieyi {
172
-        color: #333;
173
-        margin-top: 20px;
174
-      }
175
-      
176
-      .login-code {
177
-        height: 38px;
178
-        float: right;
179
-      
180
-        .login-code-img {
181
-          height: 38px;
182
-          position: absolute;
183
-          margin-left: 10px;
184
-          width: 200rpx;
247
+        &:active {
248
+          transform: translateY(2px);
249
+          box-shadow: 0 2px 6px rgba(33, 150, 243, 0.2);
185
         }
250
         }
186
       }
251
       }
187
     }
252
     }
188
   }
253
   }
189
 
254
 
255
+  .copyright-info {
256
+    width: 100%;
257
+    text-align: center;
258
+    position: fixed;
259
+    left: 0;
260
+    bottom: 30rpx;
261
+    color: #666;
262
+    font-size: 22rpx;
263
+    letter-spacing: 1rpx;
264
+    z-index: 1;
265
+    opacity: 0.8;
266
+  }
267
+
268
+  @keyframes float {
269
+    0%, 100% {
270
+      transform: translateY(0) rotate(0deg);
271
+    }
272
+    50% {
273
+      transform: translateY(-20px) rotate(5deg);
274
+    }
275
+  }
276
+
277
+  @keyframes fadeInDown {
278
+    from {
279
+      opacity: 0;
280
+      transform: translateY(-20px);
281
+    }
282
+    to {
283
+      opacity: 1;
284
+      transform: translateY(0);
285
+    }
286
+  }
287
+
288
+  @keyframes fadeInUp {
289
+    from {
290
+      opacity: 0;
291
+      transform: translateY(20px);
292
+    }
293
+    to {
294
+      opacity: 1;
295
+      transform: translateY(0);
296
+    }
297
+  }
190
 </style>
298
 </style>

+ 2
- 1
oa-ui-app/pages/message/myProcess/index.vue View File

2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2025-02-19 15:36:34
3
  * @Date: 2025-02-19 15:36:34
4
  * @LastEditors: Please set LastEditors
4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2025-05-23 15:42:14
5
+ * @LastEditTime: 2025-05-26 10:46:52
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <view class="page-container">
8
   <view class="page-container">
158
       this.myProcessList = res.data.list;
158
       this.myProcessList = res.data.list;
159
       this.mescroll.endSuccess(res.data.length)
159
       this.mescroll.endSuccess(res.data.length)
160
       this.mescroll.endErr()
160
       this.mescroll.endErr()
161
+      uni.stopPullDownRefresh();
161
     },
162
     },
162
     // mescroll上拉加载回调
163
     // mescroll上拉加载回调
163
     async upCallback(page) {
164
     async upCallback(page) {

+ 1034
- 0
oa-ui-app/pages/project/projectInfo.vue
File diff suppressed because it is too large
View File


+ 14
- 4
oa-ui/src/views/flowable/form/budget/adjust/newBudgetInfo.vue View File

2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2025-05-07 11:01:39
3
  * @Date: 2025-05-07 11:01:39
4
  * @LastEditors: Please set LastEditors
4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2025-05-21 14:16:47
5
+ * @LastEditTime: 2025-05-27 16:27:15
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div class="main" v-loading="loading">
8
   <div class="main" v-loading="loading">
33
       <el-descriptions-item label="预算表单备注" :span="5">
33
       <el-descriptions-item label="预算表单备注" :span="5">
34
         {{ budgetForm.remark }}
34
         {{ budgetForm.remark }}
35
       </el-descriptions-item>
35
       </el-descriptions-item>
36
+      <el-descriptions-item label="预算附件" :span="5" v-if="budgetForm.document">
37
+        <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + budgetForm.document}`)">
38
+          {{ getFileName(budgetForm.document) }}
39
+        </el-link>
40
+        <el-link class="ml20" type="warning" :href="`${baseUrl}${'/profile/upload' + budgetForm.document}`"
41
+          :underline="false" target="_blank">
42
+          <span class="el-icon-download">下载文件</span>
43
+        </el-link>
44
+      </el-descriptions-item>
36
       <el-descriptions-item label="项目计划工作量" :span="3">
45
       <el-descriptions-item label="项目计划工作量" :span="3">
37
         <div>
46
         <div>
38
           <table border="1" style="width: 100%;">
47
           <table border="1" style="width: 100%;">
118
             <td style="width:120px">金额</td>
127
             <td style="width:120px">金额</td>
119
             <td style="width:120px">备注</td>
128
             <td style="width:120px">备注</td>
120
           </tr>
129
           </tr>
121
-          <tr v-for="staff, index in innerStaffList" :key="'user' + staff.userId">
130
+          <tr v-for="staff, index in innerStaffList" :key="'innerUser' + staff.userId">
122
             <td>{{ index + 1 }}</td>
131
             <td>{{ index + 1 }}</td>
123
             <td>{{ staff.user ? staff.user.nickName : '' }}</td>
132
             <td>{{ staff.user ? staff.user.nickName : '' }}</td>
124
             <td>{{ staff.dayCost }}</td>
133
             <td>{{ staff.dayCost }}</td>
165
             <td style="width:120px">金额</td>
174
             <td style="width:120px">金额</td>
166
             <td style="width:120px">备注</td>
175
             <td style="width:120px">备注</td>
167
           </tr>
176
           </tr>
168
-          <tr v-for="staff, index in outerStaffList" :key="'user' + staff.userId">
177
+          <tr v-for="staff, index in outerStaffList" :key="'outUser' + staff.userId">
169
             <td>{{ index + 1 }}</td>
178
             <td>{{ index + 1 }}</td>
170
             <td>{{ staff.user ? staff.user.nickName : '' }}</td>
179
             <td>{{ staff.user ? staff.user.nickName : '' }}</td>
171
             <td>{{ staff.dayCost }}</td>
180
             <td>{{ staff.dayCost }}</td>
523
   },
532
   },
524
   data() {
533
   data() {
525
     return {
534
     return {
535
+      baseUrl: process.env.VUE_APP_BASE_API,
526
       loading: true,
536
       loading: true,
527
       budgetForm: {},
537
       budgetForm: {},
528
       project: {},
538
       project: {},
844
 }
854
 }
845
 
855
 
846
 .main {
856
 .main {
847
-  width: 85%;
857
+  width: 90%;
848
   margin: 0 auto;
858
   margin: 0 auto;
849
   text-align: center;
859
   text-align: center;
850
 }
860
 }

+ 12
- 8
oa-ui/src/views/flowable/form/budget/budgetInfo.vue View File

2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-04-03 16:28:09
3
  * @Date: 2024-04-03 16:28:09
4
  * @LastEditors: Please set LastEditors
4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2025-05-19 17:08:57
5
+ * @LastEditTime: 2025-05-27 15:11:17
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div class="main">
8
   <div class="main">
123
               <td></td>
123
               <td></td>
124
               <td style="min-width:80px">金额</td>
124
               <td style="min-width:80px">金额</td>
125
             </tr>
125
             </tr>
126
-            <tr v-for="user in chooseUser" :key="'user' + user.userId">
126
+            <tr v-for="user, index in chooseUser" :key="'user' + user.userId + index">
127
               <td>{{ user.user ? user.user.nickName : '' }}</td>
127
               <td>{{ user.user ? user.user.nickName : '' }}</td>
128
               <td>1780</td>
128
               <td>1780</td>
129
               <td>
129
               <td>
463
 
463
 
464
             for (let work of this.workList) {
464
             for (let work of this.workList) {
465
               if (work.groundType == '0') {
465
               if (work.groundType == '0') {
466
-                work.price = work.cmcPrice.commonPrice
467
-                work.scaleGrade = work.cmcPrice.scaleGrade
468
-                work.unit = work.cmcPrice.unit
466
+                if (work.cmcPrice) {
467
+                  work.price = work.cmcPrice.commonPrice
468
+                  work.scaleGrade = work.cmcPrice.scaleGrade
469
+                  work.unit = work.cmcPrice.unit
470
+                }
469
               } else {
471
               } else {
470
-                work.price = work.cmcPrice.complexPrice
471
-                work.scaleGrade = work.cmcPrice.scaleGrade
472
-                work.unit = work.cmcPrice.unit
472
+                if (work.cmcPrice) {
473
+                  work.price = work.cmcPrice.complexPrice
474
+                  work.scaleGrade = work.cmcPrice.scaleGrade
475
+                  work.unit = work.cmcPrice.unit
476
+                }
473
               }
477
               }
474
             }
478
             }
475
             this.loading = false;
479
             this.loading = false;

+ 14
- 12
oa-ui/src/views/flowable/form/budget/deviceTable.vue View File

2
   <div>
2
   <div>
3
     <el-form ref="form" :model="form" style="padding: 20px 100px 0">
3
     <el-form ref="form" :model="form" style="padding: 20px 100px 0">
4
       <el-form-item label="选择设备:">
4
       <el-form-item label="选择设备:">
5
-        <span v-if="chooseDevice.length != 0">
6
-          <el-tag effect="plain" type="success" v-for="item in chooseDevice" style="margin: 5px; font-size: 14px"
5
+        <span v-if="chooseDeviceList.length != 0">
6
+          <el-tag effect="plain" type="success" v-for="item in chooseDeviceList" style="margin: 5px; font-size: 14px"
7
             :key="item.code">
7
             :key="item.code">
8
             {{ item.name + "-" + item.series + "-" + item.brand }}
8
             {{ item.name + "-" + item.series + "-" + item.brand }}
9
           </el-tag>
9
           </el-tag>
10
         </span>
10
         </span>
11
         <el-button type="success" plain icon="el-icon-plus" @click="openDevice = true" size="mini">选择</el-button>
11
         <el-button type="success" plain icon="el-icon-plus" @click="openDevice = true" size="mini">选择</el-button>
12
       </el-form-item>
12
       </el-form-item>
13
-      <el-form-item v-if="chooseDevice.length != 0">
13
+      <el-form-item v-if="chooseDeviceList.length != 0">
14
         <table border="1">
14
         <table border="1">
15
           <tr>
15
           <tr>
16
             <td :colspan="6" class="head">设备成本预算</td>
16
             <td :colspan="6" class="head">设备成本预算</td>
23
             <td style="width: 100px">预算天数</td>
23
             <td style="width: 100px">预算天数</td>
24
             <td style="width: 100px">总额</td>
24
             <td style="width: 100px">总额</td>
25
           </tr>
25
           </tr>
26
-          <tr v-for="device in chooseDevice" :key="device.deviceId">
26
+          <tr v-for="device in chooseDeviceList" :key="device.deviceId">
27
             <td>{{ device.name }}</td>
27
             <td>{{ device.name }}</td>
28
             <td>{{ device.series }}</td>
28
             <td>{{ device.series }}</td>
29
             <td>{{ device.brand }}</td>
29
             <td>{{ device.brand }}</td>
68
       form: {
68
       form: {
69
         deviceCost: 0
69
         deviceCost: 0
70
       },
70
       },
71
-      chooseDevice: [],
71
+      chooseDeviceList: [],
72
       openDevice: false,
72
       openDevice: false,
73
     }
73
     }
74
   },
74
   },
81
     budgetId() {
81
     budgetId() {
82
       this.initForm()
82
       this.initForm()
83
     },
83
     },
84
-    chooseDevice: {
84
+    chooseDeviceList: {
85
       handler(newVal) {
85
       handler(newVal) {
86
         this.$emit('chooseDevice', newVal)
86
         this.$emit('chooseDevice', newVal)
87
       },
87
       },
96
     initForm() {
96
     initForm() {
97
       if (this.budgetId != '') {
97
       if (this.budgetId != '') {
98
         listBudgetDevice({ pageSize: 100, budgetId: this.budgetId }).then((res) => {
98
         listBudgetDevice({ pageSize: 100, budgetId: this.budgetId }).then((res) => {
99
-          this.chooseDevice = res.rows;
100
-          for (let device of this.chooseDevice) {
99
+          this.chooseDeviceList = res.rows;
100
+          for (let device of this.chooseDeviceList) {
101
             device.brand = device.device.brand
101
             device.brand = device.device.brand
102
             device.depreciation = device.device.dayCost
102
             device.depreciation = device.device.dayCost
103
             device.name = device.device.name
103
             device.name = device.device.name
109
     },
109
     },
110
     initDeviceCost() {
110
     initDeviceCost() {
111
       let deviceCost = 0;
111
       let deviceCost = 0;
112
-      for (let device of this.chooseDevice) {
112
+      for (let device of this.chooseDeviceList) {
113
         deviceCost = deviceCost + Number(device.amount);
113
         deviceCost = deviceCost + Number(device.amount);
114
       }
114
       }
115
       this.form.deviceCost = deviceCost.toFixed(2)
115
       this.form.deviceCost = deviceCost.toFixed(2)
116
     },
116
     },
117
     getChooseDevice(val) {
117
     getChooseDevice(val) {
118
-      this.chooseDevice = val;
118
+      this.chooseDeviceList = val;
119
       this.openDevice = false;
119
       this.openDevice = false;
120
-      this.chooseDevice.depreciation = val.device.dayCost;
120
+      for (let v of val) {
121
+        v.depreciation = v.dayCost;
122
+      }
121
       this.recalculateCost(val, 'amount', 'deviceCost');
123
       this.recalculateCost(val, 'amount', 'deviceCost');
122
     },
124
     },
123
     calculateDeviceTotal(device) {
125
     calculateDeviceTotal(device) {
124
       let total = Number(device.depreciation) * Number(device.days);
126
       let total = Number(device.depreciation) * Number(device.days);
125
       total = isNaN(total) ? 0 : total
127
       total = isNaN(total) ? 0 : total
126
       this.$set(device, "amount", total.toFixed(2));
128
       this.$set(device, "amount", total.toFixed(2));
127
-      this.getCost("amount", "deviceCost", this.chooseDevice);
129
+      this.getCost("amount", "deviceCost", this.chooseDeviceList);
128
     },
130
     },
129
     recalculateCost(arr, name, formName) {
131
     recalculateCost(arr, name, formName) {
130
       let sum = arr.reduce((accumulator, item) => {
132
       let sum = arr.reduce((accumulator, item) => {

+ 1
- 1
oa-ui/src/views/flowable/form/budget/staffTable.vue View File

314
       let total = 0;
314
       let total = 0;
315
       if (user.type === '外业') {
315
       if (user.type === '外业') {
316
         // 外业人员计算方式
316
         // 外业人员计算方式
317
-        user.performance = 200 * Number(user.days) * Number(user.coefficient);
317
+        user.performance = (200 * Number(user.days) * Number(user.coefficient)).toFixed(2);
318
       }
318
       }
319
       if (!user.dayCost) {
319
       if (!user.dayCost) {
320
         user.dayCost = (parseFloat(((user.salary.salary + 1780) * 12) / 365) + user.socialSecurityUnit + user.houseFund).toFixed(2);
320
         user.dayCost = (parseFloat(((user.salary.salary + 1780) * 12) / 365) + user.socialSecurityUnit + user.houseFund).toFixed(2);

+ 1
- 2
oa-ui/src/views/flowable/form/components/conditionDisplay.vue View File

2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-04-23 17:08:16
3
  * @Date: 2024-04-23 17:08:16
4
  * @LastEditors: Please set LastEditors
4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2025-05-19 16:30:37
5
+ * @LastEditTime: 2025-05-27 16:07:26
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div>
8
   <div>
31
       v-else-if="taskForm.procDefName == '项目结算'"></settle-form>
31
       v-else-if="taskForm.procDefName == '项目结算'"></settle-form>
32
     <settle-other :key="'so' + taskForm.taskId" :taskForm="taskForm" :taskName="''" :disabled="true"
32
     <settle-other :key="'so' + taskForm.taskId" :taskForm="taskForm" :taskName="''" :disabled="true"
33
       v-else-if="taskForm.procDefName == '其他结算'"></settle-other>
33
       v-else-if="taskForm.procDefName == '其他结算'"></settle-other>
34
-    <!-- <budget-in :key="'budget'+taskForm.taskId" :taskForm="taskForm" v-else-if="taskForm.procDefName == '项目预算'"></budget-in> -->
35
     <budget-tab :key="'budget' + taskForm.taskId" :taskForm="taskForm"
34
     <budget-tab :key="'budget' + taskForm.taskId" :taskForm="taskForm"
36
       v-else-if="taskForm.procDefName == '项目预算'"></budget-tab>
35
       v-else-if="taskForm.procDefName == '项目预算'"></budget-tab>
37
     <contract-form :key="'cj' + taskForm.taskId" :taskForm="taskForm" :taskName="''" :formDisabled="true"
36
     <contract-form :key="'cj' + taskForm.taskId" :taskForm="taskForm" :taskName="''" :formDisabled="true"

+ 13
- 12
oa-ui/src/views/flowable/form/projectProcess/budgetTab.vue View File

1
 <!--
1
 <!--
2
  * @Author: wrh
2
  * @Author: wrh
3
  * @Date: 2024-04-26 17:52:02
3
  * @Date: 2024-04-26 17:52:02
4
- * @LastEditors: wrh
5
- * @LastEditTime: 2024-04-29 14:32:50
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2025-05-27 16:06:46
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div class="app-container" v-loading="loading">
8
   <div class="app-container" v-loading="loading">
10
     <div v-if="haveBudget">
10
     <div v-if="haveBudget">
11
       <!-- <h3 class="text-center">{{ title }}</h3> -->
11
       <!-- <h3 class="text-center">{{ title }}</h3> -->
12
       <div>
12
       <div>
13
-        <budget-info :taskForm="taskForm"></budget-info>
13
+        <budget-info :taskForm="taskForm" v-if="isOld"></budget-info>
14
+        <new-budget-info :taskForm="taskForm" v-else></new-budget-info>
14
       </div>
15
       </div>
15
     </div>
16
     </div>
16
   </div>
17
   </div>
24
 import { listBudgetStaff } from "@/api/oa/budget/budgetStaff";
25
 import { listBudgetStaff } from "@/api/oa/budget/budgetStaff";
25
 import { listProjectWork } from "@/api/oa/project/projectWork";
26
 import { listProjectWork } from "@/api/oa/project/projectWork";
26
 import BudgetInfo from "../budget/budgetInfo.vue";
27
 import BudgetInfo from "../budget/budgetInfo.vue";
28
+import NewBudgetInfo from "../budget/adjust/newBudgetInfo.vue";
27
 export default {
29
 export default {
28
   components: {
30
   components: {
29
     BudgetInfo,
31
     BudgetInfo,
32
+    NewBudgetInfo,
30
   },
33
   },
31
   props: {
34
   props: {
32
     taskForm: Object,
35
     taskForm: Object,
46
       title: "",
49
       title: "",
47
       form: {},
50
       form: {},
48
       loading: true,
51
       loading: true,
49
-      workList: [],
50
-      budgetId:''
52
+      budgetId: '',
53
+      isOld: false,
51
     };
54
     };
52
   },
55
   },
53
   mounted() {
56
   mounted() {
64
         if (res.total != 0) {
67
         if (res.total != 0) {
65
           this.haveBudget = true;
68
           this.haveBudget = true;
66
           this.budgetId = res.rows[0].budgetId;
69
           this.budgetId = res.rows[0].budgetId;
67
-          listProjectWork({projectId: projectId}).then(res => {
68
-            if (res.rows) {
69
-              this.workList = res.rows;
70
-            }
71
-            listBudgetSettle({budgetId: this.budgetId}).then(res => {
72
-            });
73
-          });
70
+          if (res.rows[0].project.projectNumber.substring(0, 4) >= 2025) {
71
+            this.isOld = false;
72
+          } else {
73
+            this.isOld = true;
74
+          }
74
         }
75
         }
75
       });
76
       });
76
     },
77
     },

+ 46
- 46
oa-ui/src/views/oa/budget/index.vue View File

26
     </el-form>
26
     </el-form>
27
 
27
 
28
     <el-row :gutter="10" class="mb8">
28
     <el-row :gutter="10" class="mb8">
29
-      <!-- <el-col :span="1.5">
30
-        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
31
-          v-hasPermi="['oa:budget:add']">新增</el-button>
32
-      </el-col> -->
33
-      <!-- <el-col :span="1.5">
34
-        <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
35
-          v-hasPermi="['oa:budget:edit']">修改</el-button>
36
-      </el-col> -->
37
-      <!-- <el-col :span="1.5">
38
-        <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
39
-          v-hasPermi="['oa:budget:remove']">删除</el-button>
40
-      </el-col> -->
41
       <el-col :span="1.5">
29
       <el-col :span="1.5">
42
         <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
30
         <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
43
           v-hasPermi="['oa:budget:export']">导出</el-button>
31
           v-hasPermi="['oa:budget:export']">导出</el-button>
44
       </el-col>
32
       </el-col>
45
-      <!-- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> -->
46
     </el-row>
33
     </el-row>
47
 
34
 
48
     <el-table v-loading="loading" :data="budgetList" @selection-change="handleSelectionChange">
35
     <el-table v-loading="loading" :data="budgetList" @selection-change="handleSelectionChange">
63
           {{ getUserName(scope.row.auditor) }}
50
           {{ getUserName(scope.row.auditor) }}
64
         </template>
51
         </template>
65
       </el-table-column>
52
       </el-table-column>
53
+      <el-table-column label="是否核算" align="center" class-name="small-padding fixed-width">
54
+        <template slot-scope="scope">
55
+          <el-tag v-if="scope.row.isAdjust" type="success">是</el-tag>
56
+          <el-tag v-else type="danger">否</el-tag>
57
+        </template>
58
+      </el-table-column>
66
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
59
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
67
         <template slot-scope="scope">
60
         <template slot-scope="scope">
68
-          <el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)"
69
-            v-hasPermi="['oa:budget:query']">查看</el-button>
70
-          <!-- <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
71
-            v-hasPermi="['oa:budget:edit']">修改</el-button>
72
-          <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
73
-            v-hasPermi="['oa:budget:remove']">删除</el-button> -->
61
+          <el-button size="mini" type="text" icon="el-icon-tickets" @click="handleNewView(scope.row)"
62
+            v-hasPermi="['oa:budget:query']">新版预算</el-button>
63
+          <el-button size="mini" type="text" icon="el-icon-document-remove" @click="handleView(scope.row)"
64
+            v-hasPermi="['oa:budget:query']">旧版预算</el-button>
65
+          <el-button size="mini" type="text" icon="el-icon-document-checked" @click="handleAdjust(scope.row)"
66
+            v-hasRole="['leader']" v-if="scope.row.isAdjust">查看核算</el-button>
74
         </template>
67
         </template>
75
       </el-table-column>
68
       </el-table-column>
76
     </el-table>
69
     </el-table>
83
       <form-data :form="form" @close="open = false"></form-data>
76
       <form-data :form="form" @close="open = false"></form-data>
84
     </el-dialog>
77
     </el-dialog>
85
 
78
 
86
-    <el-dialog :title="title" :visible.sync="infoOpen" width="70%" append-to-body>
87
-      <budget-adjust :taskForm="taskForm" :taskName="''" :row="clickRow" v-show="isAdjust"></budget-adjust>
88
-      <div v-show="!isAdjust">
89
-        <budget-info :taskForm="taskForm" :taskName="''" v-show="isOld"></budget-info>
90
-        <new-budget-info :taskForm="taskForm" :taskName="''" v-show="!isOld"></new-budget-info>
91
-      </div>
79
+    <el-dialog title="新版预算" :visible.sync="newInfoOpen" width="70%" append-to-body>
80
+      <new-budget-info :taskForm="taskForm" :taskName="''"></new-budget-info>
81
+    </el-dialog>
82
+    <el-dialog title="旧版预算" :visible.sync="infoOpen" width="70%" append-to-body>
83
+      <budget-info :taskForm="taskForm" :taskName="''"></budget-info>
84
+    </el-dialog>
85
+    <el-dialog title="项目核算" :visible.sync="adjustOpen" width="70%" append-to-body>
86
+      <budget-adjust :taskForm="taskForm" :taskName="''" :row="clickRow"></budget-adjust>
92
     </el-dialog>
87
     </el-dialog>
93
   </div>
88
   </div>
94
 </template>
89
 </template>
162
       queryType: '1',
157
       queryType: '1',
163
       isOld: false,
158
       isOld: false,
164
       clickRow: {},
159
       clickRow: {},
165
-      isAdjust: false
160
+      isAdjust: false,
161
+      adjustOpen: false,
162
+      newInfoOpen: false,
166
     };
163
     };
167
   },
164
   },
168
   created() {
165
   created() {
172
     /** 查询cmc预算管理列表 */
169
     /** 查询cmc预算管理列表 */
173
     getList() {
170
     getList() {
174
       this.loading = true;
171
       this.loading = true;
175
-      listBudget(this.queryParams).then(response => {
172
+      listBudget(this.queryParams).then(async response => {
176
         this.budgetList = response.rows;
173
         this.budgetList = response.rows;
174
+        for (let i of this.budgetList) {
175
+          let res = await listCheck({ budgetId: i.budgetId });
176
+          if (res.rows.length > 0) {
177
+            this.$set(i, 'isAdjust', true);
178
+          } else {
179
+            this.$set(i, 'isAdjust', false);
180
+          }
181
+        }
177
         this.total = response.total;
182
         this.total = response.total;
178
         this.loading = false;
183
         this.loading = false;
179
       });
184
       });
255
       this.title = "添加预算";
260
       this.title = "添加预算";
256
     },
261
     },
257
     async handleView(row) {
262
     async handleView(row) {
258
-      this.isAdjust = this.$store.getters.roles.includes('leader') || this.$store.getters.roles.includes('finance')
259
-        || this.$store.getters.roles.includes('nfinance') || this.$store.getters.roles.includes('admin');
260
-      if (this.isAdjust) {
261
-        let res = await listCheck({ budgetId: row.budgetId });
262
-        if (res.rows.length > 0) {
263
-          this.taskForm.formId = res.rows[0].checkId;
264
-        } else {
265
-          this.taskForm.formId = row.projectId;
266
-          this.isAdjust = false;
267
-        }
268
-      } else {
269
-        this.taskForm.formId = row.projectId;
270
-      }
271
       this.clickRow = row;
263
       this.clickRow = row;
272
-      let old = Number(row.project.projectNumber.substring(0, 4));
273
-      if (old >= 2025) {
274
-        this.isOld = false;
275
-      } else {
276
-        this.isOld = true;
277
-      }
264
+      this.taskForm.formId = row.projectId;
278
       this.infoOpen = true;
265
       this.infoOpen = true;
279
     },
266
     },
267
+    handleNewView(row) {
268
+      this.taskForm.formId = row.projectId;
269
+      this.clickRow = row;
270
+      this.newInfoOpen = true;
271
+    },
272
+    async handleAdjust(row) {
273
+      let res = await listCheck({ budgetId: row.budgetId });
274
+      if (res.rows.length > 0) {
275
+        this.taskForm.formId = res.rows[0].checkId;
276
+      }
277
+      this.clickRow = row;
278
+      this.adjustOpen = true;
279
+    },
280
     /** 修改按钮操作 */
280
     /** 修改按钮操作 */
281
     handleUpdate(row) {
281
     handleUpdate(row) {
282
       this.reset();
282
       this.reset();

Loading…
Cancel
Save