ソースを参照

修改项目预算的预算表,新增项目流转的核定工作

余思翰 11ヶ月前
コミット
052711ceef

+ 0
- 1
oa-back/ruoyi-flowable/src/main/java/com/ruoyi/flowable/oa/CallSafeActivityExecutionListener.java ファイルの表示

@@ -15,6 +15,5 @@ public class CallSafeActivityExecutionListener implements ExecutionListener {
15 15
         SysUserPostMapper userPostMapper = SpringUtils.getBean(SysUserPostMapper.class);
16 16
         String userId = userPostMapper.selectUserListByPostName("专职安全员").get(0).getUserId().toString();
17 17
         Authentication.setAuthenticatedUserId(userId);
18
-        delegateExecution.setVariable("approval", userId);
19 18
     }
20 19
 }

+ 10895
- 8999
oa-back/sql/cmc_oa(小余测试数据).sql
ファイル差分が大きすぎるため省略します
ファイルの表示


+ 3
- 2
oa-ui/src/main.js ファイルの表示

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-01-03 09:23:11
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-06-05 09:39:10
5
+ * @LastEditTime: 2024-07-08 10:58:08
6 6
  */
7 7
 import Vue from 'vue'
8 8
 
@@ -25,7 +25,7 @@ import './permission' // permission control
25 25
 import { getDicts } from "@/api/system/dict/data";
26 26
 import { getConfigKey } from "@/api/system/config";
27 27
 import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels, 
28
-  handleTree, getUserName, getFileName, reviewWord,getDeptName,getUserNames } from "@/utils/ruoyi";
28
+  handleTree, getUserName, getFileName, reviewWord,getDeptName,getUserNames,getDeptNames } from "@/utils/ruoyi";
29 29
 // 标题组件
30 30
 import RowTitle from '@/components/RowTitle'
31 31
 
@@ -67,6 +67,7 @@ Vue.prototype.handleTree = handleTree
67 67
 Vue.prototype.publicData = publicData
68 68
 Vue.prototype.getUserName = getUserName
69 69
 Vue.prototype.getUserNames = getUserNames
70
+Vue.prototype.getDeptNames = getDeptNames
70 71
 Vue.prototype.getDeptName = getDeptName
71 72
 Vue.prototype.getFileName = getFileName
72 73
 Vue.prototype.reviewWord = reviewWord

+ 12
- 0
oa-ui/src/utils/ruoyi.js ファイルの表示

@@ -281,6 +281,18 @@ export function getDeptName(deptId) {
281 281
   }
282 282
 }
283 283
 
284
+export function getDeptNames(ids) {
285
+  if (!ids) {
286
+    return '';
287
+  }
288
+  return ids.split(',').map(id => {
289
+    // 使用trim去除id两侧的空白字符  
290
+    const trimmedId = id.trim();
291
+    let dept = this.$store.state.user.deptList.find(item => item.deptId === Number(trimmedId));
292
+    return dept ? dept.deptName.trim() : ''; // 如果user不存在,返回一个空字符串或者其他默认值  
293
+  }).join(',');
294
+}
295
+
284 296
 export function getFileName(name) {
285 297
   if (name) {
286 298
     let arr = name.split("/");

+ 19
- 10
oa-ui/src/views/flowable/form/budget/addBudget.vue ファイルの表示

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-03-25 15:05:59
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-06-13 15:53:25
5
+ * @LastEditTime: 2024-07-08 10:45:42
6 6
 -->
7 7
 <template>
8 8
   <div>
@@ -463,7 +463,7 @@ import {
463 463
   delegate,
464 464
   flowTaskForm,
465 465
 } from "@/api/flowable/todo";
466
-import { getUsersDeptLeaderByDept } from "@/api/system/post";
466
+import { getUsersDeptLeaderByDept, getUsersManageLeaderByDept } from "@/api/system/post";
467 467
 export default {
468 468
   components: {
469 469
     choosePeople,
@@ -814,16 +814,25 @@ export default {
814 814
       this.budgetForm.carCost = carCost;
815 815
       this.budgetForm.deviceCost = deviceCost;
816 816
     },
817
-    submitComplete() {
817
+    async submitComplete() {
818 818
       const params = { taskId: this.taskForm.taskId };
819
-      getNextFlowNode(params).then(res => {
820
-        getUsersDeptLeaderByDept({ deptId: 107 }).then(res => {
821
-          let userId = res.data.userId;
822
-          this.$set(this.taskForm.variables, "approval", userId);
823
-          complete(this.taskForm).then(response => {
824
-            this.$modal.msgSuccess(response.msg);
825
-            this.$emit("goBack");
819
+      const deptIdsStr = this.projectForm.undertakingDept;
820
+      const deptIdsArr = (deptIdsStr.split(',')).map(Number);
821
+      let approvalList = []
822
+      for (let deptId of deptIdsArr) {
823
+        let res = await getUsersManageLeaderByDept({ deptId })
824
+        if (res.code == 200 && res.data) {
825
+          res.data.forEach(element => {
826
+            approvalList.push(element.userId)
826 827
           });
828
+        }
829
+      }
830
+      this.$set(this.taskForm.variables, "approvalList", approvalList); //得到各部门的分管领导列表
831
+      // 提交到下一个流程
832
+      getNextFlowNode(params).then(res => {
833
+        complete(this.taskForm).then(response => {
834
+          this.$modal.msgSuccess(response.msg);
835
+          this.$emit("goBack");
827 836
         });
828 837
       });
829 838
     },

+ 2
- 2
oa-ui/src/views/flowable/form/budget/budget.vue ファイルの表示

@@ -2,12 +2,12 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-04-08 16:08:33
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-06-05 10:16:54
5
+ * @LastEditTime: 2024-07-08 14:20:03
6 6
 -->
7 7
 <template>
8 8
   <div>
9 9
     <add-budget :taskName="taskName" :taskForm="taskForm" @goBack="goBack" v-if="taskName == '预算编制'"></add-budget>
10
-    <budget-info :taskName="taskName" :taskForm="taskForm" @goBack="goBack" v-if="taskName == '预算审核' || taskName == '预算批准'"></budget-info>
10
+    <budget-info :taskName="taskName" :taskForm="taskForm" @goBack="goBack" v-if="taskName == '分管审核' || taskName == '总经理审核' || taskName == '预算批准'"></budget-info>
11 11
   </div>
12 12
 </template>
13 13
 

+ 242
- 337
oa-ui/src/views/flowable/form/budget/budgetInfo.vue ファイルの表示

@@ -1,13 +1,15 @@
1 1
 <!--
2 2
  * @Author: ysh
3 3
  * @Date: 2024-04-03 16:28:09
4
- * @LastEditors: wrh
5
- * @LastEditTime: 2024-06-20 18:31:18
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-07-08 14:27:10
6 6
 -->
7 7
 <template>
8 8
   <div class="main">
9
-    <div v-if="taskName == '预算审核'">
10
-      <h2 class="text-center">项目信息</h2>
9
+    <div>
10
+      <h2 class="text-center">项目直接生产成本预算表</h2>
11
+      <p style="text-align: center;">编制人:{{ budgetForm.compilerUser ? budgetForm.compilerUser.nickName : '' }} | 审核人:{{
12
+        budgetForm.auditorUser ? budgetForm.auditorUser.nickName : '' }}</p>
11 13
       <el-descriptions :column="3" border class="descriptions">
12 14
         <el-descriptions-item label="项目编号">
13 15
           {{ projectForm.projectNumber }}
@@ -18,13 +20,16 @@
18 20
         <el-descriptions-item label="项目负责人">
19 21
           {{ getUserName(projectForm.projectLeader) }}
20 22
         </el-descriptions-item>
23
+        <el-descriptions-item label="承担部门">
24
+          {{ getDeptNames(projectForm.undertakingDept) }}
25
+        </el-descriptions-item>
21 26
         <el-descriptions-item label="项目备注" :span="3">
22 27
           {{ projectForm.remark }}
23 28
         </el-descriptions-item>
24
-        <el-descriptions-item label="项目概况">
29
+        <el-descriptions-item label="项目概况" :span="3">
25 30
           <div>
26 31
             <table border="1" style="width: 100%;">
27
-              <tr>
32
+              <tr style="background-color:#f8f8f9">
28 33
                 <td style="width: 250px">工作内容</td>
29 34
                 <td style="width: 100px">等级或比例尺</td>
30 35
                 <td style="width: 100px">单位</td>
@@ -55,321 +60,212 @@
55 60
             </table>
56 61
           </div>
57 62
         </el-descriptions-item>
63
+        <el-descriptions-item label="直接成本" :span="3">
64
+          <table border="1" style="width:100%">
65
+            <tr style="background-color:#f8f8f9">
66
+              <td :rowspan="workLen + 2">直接成本</td>
67
+              <td>工作简述</td>
68
+              <td>工作内容</td>
69
+              <td>数量</td>
70
+              <td>单价</td>
71
+              <td>单位</td>
72
+              <td>系数</td>
73
+              <td>金额</td>
74
+              <td style="min-width: 150px;">备注</td>
75
+            </tr>
76
+            <tr v-for="work in workList">
77
+              <td>{{ work.content }}</td>
78
+              <td>{{ work.cmcPrice ? work.cmcPrice.workItem : '' }}</td>
79
+              <td v-if="taskName == '分管审核' || taskName == '总经理审核'">
80
+                <el-input-number :controls="false" style="width:100px;" v-model="work.workload"
81
+                  @change="computeWorkSettle(work)"></el-input-number>
82
+              </td>
83
+              <td v-else>
84
+                {{ work.workload }}
85
+              </td>
86
+              <td>{{ work.price }}</td>
87
+              <td>{{ work.unit }}</td>
88
+              <td v-if="taskName == '分管审核' || taskName == '总经理审核'">
89
+                <el-input-number :controls="false" style="width:100px;" v-model="work.coefficient"
90
+                  @change="computeWorkSettle(work)"></el-input-number>
91
+                <el-button type="text" @click="getCoefficientRemark(work)">系数备注</el-button>
92
+              </td>
93
+              <td v-else>
94
+                {{ work.coefficient }}
95
+              </td>
96
+              <td>{{ work.settle }}</td>
97
+              <td>{{ work.remark ? work.remark : '' }}</td>
98
+            </tr>
99
+            <tr>
100
+              <td :colspan="6" class="head">直接成本合计</td>
101
+              <td :colspan="1" class="head">{{ budgetForm.settleExpense }}</td>
102
+              <td></td>
103
+            </tr>
104
+          </table>
105
+        </el-descriptions-item>
106
+        <el-descriptions-item label="间接成本" :span="3">
107
+          <table border="1" style="width:100%">
108
+            <tr v-if="userLen != 1" style="background-color:#f8f8f9">
109
+              <td :rowspan="userLen">人员</td>
110
+              <td>姓名</td>
111
+              <td>基本工资</td>
112
+              <td>岗位工资</td>
113
+              <td>人员成本(天)</td>
114
+              <td>预算天数</td>
115
+              <td>金额</td>
116
+              <td>备注</td>
117
+            </tr>
118
+            <tr v-for="user in chooseUser" :key="'user' + user.userId">
119
+              <td>{{ user.user ? user.user.nickName : '' }}</td>
120
+              <td>1780</td>
121
+              <td>{{ user.salary.salary }}</td>
122
+              <td>{{ parseFloat((user.salary.salary + 1780) / 21.75).toFixed(2) }}</td>
123
+              <td v-if="taskName == '分管审核' || taskName == '总经理审核'">
124
+                <el-input-number :controls="false" style="width:100px;" v-model="user.days"
125
+                  @blur="computedFixCostSettle(user, 'user')"></el-input-number>
126
+              </td>
127
+              <td v-else>
128
+                {{ user.days }}
129
+              </td>
130
+              <td>{{ user.staffCost }}</td>
131
+              <td></td>
132
+            </tr>
133
+            <tr v-if="carLen != 1" style="background-color:#f8f8f9">
134
+              <td :rowspan="carLen">车辆</td>
135
+              <td>车牌号</td>
136
+              <td>油耗</td>
137
+              <td>总里程</td>
138
+              <td>折旧成本(天)</td>
139
+              <td>预算天数</td>
140
+              <td>金额</td>
141
+            </tr>
142
+            <tr v-for="car in chooseCar" :key="'car' + car.carId">
143
+              <td>{{ car.car ? car.car.licensePlate : '' }}</td>
144
+              <td>{{ car.mileage }}</td>
145
+              <td v-if="taskName == '分管审核' || taskName == '总经理审核'">
146
+                <el-input-number :controls="false" style="width:100px;" v-model="car.distance"
147
+                  @blur="computedFixCostSettle(car, 'car')"></el-input-number>
148
+              </td>
149
+              <td v-else>
150
+                {{ car.distance }}
151
+              </td>
152
+              <td>{{ car.car ? car.car.dayCost : '' }}</td>
153
+              <td v-if="taskName == '分管审核' || taskName == '总经理审核'">
154
+                <el-input-number :controls="false" style="width:100px;" v-model="car.days"
155
+                  @blur="computedFixCostSettle(car, 'car')"></el-input-number>
156
+              </td>
157
+              <td v-else>
158
+                {{ car.days }}
159
+              </td>
160
+              <td>{{ car.expense }}</td>
161
+              <td></td>
162
+            </tr>
163
+            <tr v-if="deviceLen != 1" style="background-color:#f8f8f9">
164
+              <td :rowspan="deviceLen">设备</td>
165
+              <td>设备名称</td>
166
+              <td>规格型号</td>
167
+              <td>品牌</td>
168
+              <td>折旧成本(天)</td>
169
+              <td>预算天数</td>
170
+              <td>金额</td>
171
+            </tr>
172
+            <tr v-for="device in chooseDevice" :key="'device' + device.deviceId">
173
+              <td>{{ device.device ? device.device.name : '' }}</td>
174
+              <td>{{ device.device ? device.device.series : '' }}</td>
175
+              <td>{{ device.device ? device.device.brand : '' }}</td>
176
+              <td>{{ device.device ? device.device.dayCost : '' }}</td>
177
+              <td v-if="taskName == '分管审核' || taskName == '总经理审核'">
178
+                <el-input-number :controls="false" style="width:100px;" v-model="device.days"
179
+                  @blur="computedFixCostSettle(device, 'device')"></el-input-number>
180
+              </td>
181
+              <td v-else>
182
+                {{ device.days }}
183
+              </td>
184
+              <td>{{ device.depreciation }}</td>
185
+              <td></td>
186
+            </tr>
187
+            <tr>
188
+              <td :colspan="6" class="head">间接成本合计</td>
189
+              <td :colspan="1" class="head">{{ budgetForm.fixCost }}</td>
190
+              <td></td>
191
+            </tr>
192
+          </table>
193
+        </el-descriptions-item>
194
+        <el-descriptions-item label="外协费用" :span="3">
195
+          <div v-if="taskName == '分管审核' || taskName == '总经理审核'">
196
+            <el-input-number :controls="false" style="width:100%;" v-model="budgetForm.outExpense"
197
+              @blur="computedDirectExpense()"></el-input-number>
198
+          </div>
199
+          <div v-else class="text-center">
200
+            {{ budgetForm.outExpense }}
201
+          </div>
202
+        </el-descriptions-item>
203
+        <el-descriptions-item label="车船租赁" :span="3">
204
+          <div v-if="taskName == '分管审核' || taskName == '总经理审核'">
205
+            <el-input-number :controls="false" style="width:100%;" v-model="budgetForm.rentExpense"
206
+              @blur="computedDirectExpense()"></el-input-number>
207
+          </div>
208
+          <div v-else class="text-center">
209
+            {{ budgetForm.rentExpense }}
210
+          </div>
211
+        </el-descriptions-item>
212
+        <el-descriptions-item label="其他费用" :span="3">
213
+          <div v-if="taskName == '分管审核' || taskName == '总经理审核'">
214
+            <el-input-number :controls="false" style="width:100%;" v-model="budgetForm.otherExpense"
215
+              @blur="computedDirectExpense()"></el-input-number>
216
+          </div>
217
+          <div v-else class="text-center">
218
+            {{ budgetForm.otherExpense }}
219
+          </div>
220
+        </el-descriptions-item>
221
+        <el-descriptions-item label="税费成本" :span="3">
222
+          <div v-if="taskName == '分管审核' || taskName == '总经理审核'">
223
+            <el-input-number :controls="false" style="width:100%;" v-model="budgetForm.taxExpense"
224
+              @blur="computedDirectExpense()"></el-input-number>
225
+          </div>
226
+          <div v-else class="text-center">
227
+            {{ budgetForm.taxExpense }}
228
+          </div>
229
+        </el-descriptions-item>
230
+        <el-descriptions-item label="经营管理费用" :span="3">
231
+          <div v-if="taskName == '分管审核' || taskName == '总经理审核'">
232
+            <el-input-number :controls="false" style="width:100%;" v-model="budgetForm.businessExpense"
233
+              @blur="computedDirectExpense()"></el-input-number>
234
+          </div>
235
+          <div v-else class="text-center">
236
+            {{ budgetForm.businessExpense }}
237
+          </div>
238
+        </el-descriptions-item>
239
+        <el-descriptions-item label="预算成本合计" :span="3">
240
+          <div class="text-center" style="font-weight:bold;font-size:18px;color:orange">
241
+            {{ budgetForm.totalBudget }}
242
+          </div>
243
+          <div class="text-center">
244
+            (简写:{{ (budgetForm.totalBudget / 10000).toFixed(4) + '万' }})
245
+          </div>
246
+        </el-descriptions-item>
247
+        <el-descriptions-item label="合同总价约" :span="3"
248
+          v-if="taskName == '分管审核' || taskName == '总经理审核' || taskName == '预算批准'">
249
+          <div class="text-center" style="font-weight:bold;font-size:18px;color:#409EFF">
250
+            {{ contract.contractId ? contract.amount : '' }}
251
+          </div>
252
+          <div class="text-center">
253
+            (简写:{{ contract.contractId ? (contract.amount / 10000).toFixed(4) + '万' : '' }})
254
+          </div>
255
+        </el-descriptions-item>
256
+        <el-descriptions-item label="利润" :span="3"
257
+          v-if="taskName == '分管审核' || taskName == '总经理审核' || taskName == '预算批准'">
258
+          <div class="text-center" style="font-weight:bold;font-size:18px;color:#67C23A">
259
+            {{ profit.toFixed(2) }}
260
+          </div>
261
+          <div class="text-center">
262
+            (简写:{{ (profit / 10000).toFixed(4) + '万' }})
263
+          </div>
264
+        </el-descriptions-item>
58 265
       </el-descriptions>
59 266
     </div>
60
-    <h2 style="text-align: center">项目直接生产成本预算表</h2>
61
-    <p style="text-align: center;">编制人:{{ budgetForm.compilerUser ? budgetForm.compilerUser.nickName : '' }} | 审核人:{{
62
-      budgetForm.auditorUser ? budgetForm.auditorUser.nickName : '' }}</p>
63
-    <table border="1" class="table" v-if="taskName == '预算审核'">
64
-      <tr>
65
-        <td style="width: 100px;">项目名称</td>
66
-        <td colspan="6">{{ budgetForm.project ? budgetForm.project.projectName : '' }}</td>
67
-        <td style="min-width: 100px;">项目编号</td>
68
-        <td colspan="1">{{ budgetForm.project ? budgetForm.project.projectNumber : '' }}</td>
69
-      </tr>
70
-      <tr>
71
-        <td :rowspan="workLen + 2">直接成本</td>
72
-        <td>工作简述</td>
73
-        <td>工作内容</td>
74
-        <td>数量</td>
75
-        <td>单价</td>
76
-        <td>单位</td>
77
-        <td>系数</td>
78
-        <td>金额</td>
79
-        <td style="min-width: 150px;">备注</td>
80
-      </tr>
81
-      <tr v-for="work in workList">
82
-        <td>{{ work.content }}</td>
83
-        <td>{{ work.cmcPrice ? work.cmcPrice.workItem : '' }}</td>
84
-        <td>
85
-          <el-input-number :controls="false" style="width:100px;" v-model="work.workload"
86
-            @change="computeWorkSettle(work)"></el-input-number>
87
-        </td>
88
-        <td>{{ work.price }}</td>
89
-        <td>{{ work.unit }}</td>
90
-        <td>
91
-          <el-input-number :controls="false" style="width:100px;" v-model="work.coefficient"
92
-            @change="computeWorkSettle(work)"></el-input-number>
93
-          <el-button type="text" @click="getCoefficientRemark(work)">系数备注</el-button>
94
-        </td>
95
-        <td>{{ work.settle }}</td>
96
-        <td>{{ work.remark ? work.remark : '' }}</td>
97
-      </tr>
98
-      <tr>
99
-        <td :colspan="6" class="head">直接成本合计</td>
100
-        <td :colspan="1" class="head">{{ budgetForm.settleExpense }}</td>
101
-        <td></td>
102
-      </tr>
103
-      <tr>
104
-        <td :rowspan="userLen + carLen + deviceLen + 2">间接成本</td>
105
-      </tr>
106
-      <tr v-if="userLen != 1">
107
-        <td :rowspan="userLen">人员</td>
108
-        <td>姓名</td>
109
-        <td>基本工资</td>
110
-        <td>岗位工资</td>
111
-        <td>人员成本(天)</td>
112
-        <td>预算天数</td>
113
-        <td>金额</td>
114
-        <td></td>
115
-      </tr>
116
-      <tr v-for="user in chooseUser" :key="'user' + user.userId">
117
-        <td>{{ user.user ? user.user.nickName : '' }}</td>
118
-        <td>1780</td>
119
-        <td>{{ user.salary.salary }}</td>
120
-        <td>{{ parseFloat((user.salary.salary + 1780) / 21.75).toFixed(2) }}</td>
121
-        <td>
122
-          <el-input-number :controls="false" style="width:100px;" v-model="user.days"
123
-            @blur="computedFixCostSettle(user, 'user')"></el-input-number>
124
-        </td>
125
-        <td>{{ user.staffCost }}</td>
126
-        <td></td>
127
-      </tr>
128
-      <tr v-if="carLen != 1">
129
-        <td :rowspan="carLen">车辆</td>
130
-        <td>车牌号</td>
131
-        <td>油耗</td>
132
-        <td>总里程</td>
133
-        <td>折旧成本(天)</td>
134
-        <td>预算天数</td>
135
-        <td>金额</td>
136
-      </tr>
137
-      <tr v-for="car in chooseCar" :key="'car' + car.carId">
138
-        <td>{{ car.car ? car.car.licensePlate : '' }}</td>
139
-        <td>{{ car.mileage }}</td>
140
-        <td>
141
-          <el-input-number :controls="false" style="width:100px;" v-model="car.distance"
142
-            @blur="computedFixCostSettle(car, 'car')"></el-input-number>
143
-        </td>
144
-        <td>{{ car.car ? car.car.dayCost : '' }}</td>
145
-        <td>
146
-          <el-input-number :controls="false" style="width:100px;" v-model="car.days"
147
-            @blur="computedFixCostSettle(car, 'car')"></el-input-number>
148
-        </td>
149
-        <td>{{ car.expense }}</td>
150
-        <td></td>
151
-      </tr>
152
-      <tr v-if="deviceLen != 1">
153
-        <td :rowspan="deviceLen">设备</td>
154
-        <td>设备名称</td>
155
-        <td>规格型号</td>
156
-        <td>品牌</td>
157
-        <td>折旧成本(天)</td>
158
-        <td>预算天数</td>
159
-        <td>金额</td>
160
-      </tr>
161
-      <tr v-for="device in chooseDevice" :key="'device' + device.deviceId">
162
-        <td>{{ device.device ? device.device.name : '' }}</td>
163
-        <td>{{ device.device ? device.device.series : '' }}</td>
164
-        <td>{{ device.device ? device.device.brand : '' }}</td>
165
-        <td>{{ device.device ? device.device.dayCost : '' }}</td>
166
-        <td>
167
-          <el-input-number :controls="false" style="width:100px;" v-model="device.days"
168
-            @blur="computedFixCostSettle(device, 'device')"></el-input-number>
169
-        </td>
170
-        <td>{{ device.depreciation }}</td>
171
-        <td></td>
172
-      </tr>
173
-      <tr>
174
-        <td :colspan="6" class="head">间接成本合计</td>
175
-        <td :colspan="1" class="head">{{ budgetForm.fixCost }}</td>
176
-        <td></td>
177
-      </tr>
178
-      <tr class="head">
179
-        <td :colspan="3">外协费用</td>
180
-        <td :colspan="5">
181
-          <el-input-number :controls="false" style="width:100%;" v-model="budgetForm.outExpense"
182
-            @blur="computedDirectExpense()"></el-input-number>
183
-        </td>
184
-        <td>
185
-          <el-input type="textarea" v-model="budgetForm.outRemark"></el-input>
186
-        </td>
187
-      </tr>
188
-      <tr class="head">
189
-        <td colspan="3">车船租赁</td>
190
-        <td :colspan="5">
191
-          <el-input-number :controls="false" style="width:100%;" v-model="budgetForm.rentExpense"
192
-            @blur="computedDirectExpense()"></el-input-number>
193
-        </td>
194
-        <td>
195
-          <el-input type="textarea" v-model="budgetForm.rentRemark"></el-input>
196
-        </td>
197
-      </tr>
198
-      <tr class="head">
199
-        <td colspan="3">其他费用</td>
200
-        <td :colspan="5">
201
-          <el-input-number :controls="false" style="width:100%;" v-model="budgetForm.otherExpense"
202
-            @blur="computedDirectExpense()"></el-input-number>
203
-        </td>
204
-        <td>
205
-          <el-input type="textarea" v-model="budgetForm.otherRemark"></el-input>
206
-        </td>
207
-      </tr>
208
-      <tr class="head">
209
-        <td colspan="3">税费成本</td>
210
-        <td :colspan="5">
211
-          <el-input-number :controls="false" style="width:100%;" v-model="budgetForm.taxExpense"
212
-            @blur="computedDirectExpense()"></el-input-number>
213
-        </td>
214
-        <td>
215
-          <el-input type="textarea" v-model="budgetForm.taxRemark"></el-input>
216
-        </td>
217
-      </tr>
218
-      <tr class="head">
219
-        <td colspan="3">经营管理费用</td>
220
-        <td :colspan="5">
221
-          <el-input-number :controls="false" style="width:100%;" v-model="budgetForm.businessExpense"
222
-            @blur="computedDirectExpense()"></el-input-number>
223
-        </td>
224
-        <td>
225
-          <el-input type="textarea" v-model="budgetForm.businessRemark"></el-input>
226
-        </td>
227
-      </tr>
228
-      <tr>
229
-        <td colspan="3" class="head">成本合计</td>
230
-        <td colspan="5" class="head">{{ budgetForm.totalBudget }}</td>
231
-      </tr>
232
-      <tr v-if="contract.contractId">
233
-        <td colspan="3" class="head">利润</td>
234
-        <td colspan="2" class="head">{{ profit.toFixed(2) }}</td>
235
-        <td colspan="3" class="head">合同总价约</td>
236
-        <td colspan="1" class="head">{{ contract.contractId ? contract.amount : '' }}</td>
237
-      </tr>
238
-    </table>
239
-    <table border="1" class="table" v-else>
240
-      <tr>
241
-        <td style="width: 100px;">项目名称</td>
242
-        <td colspan="6">{{ budgetForm.project ? budgetForm.project.projectName : '' }}</td>
243
-        <td style="min-width: 100px;">项目编号</td>
244
-        <td colspan="1">{{ budgetForm.project ? budgetForm.project.projectNumber : '' }}</td>
245
-      </tr>
246
-      <tr>
247
-        <td :rowspan="workLen + 2">直接成本</td>
248
-        <td>工作简述</td>
249
-        <td>工作内容</td>
250
-        <td>数量</td>
251
-        <td>单价</td>
252
-        <td>单位</td>
253
-        <td>系数</td>
254
-        <td>金额</td>
255
-        <td style="min-width: 150px;">备注</td>
256
-      </tr>
257
-      <tr v-for="work in workList">
258
-        <td>{{ work.content }}</td>
259
-        <td>{{ work.cmcPrice ? work.cmcPrice.workItem : '' }}</td>
260
-        <td>{{ work.workload }}</td>
261
-        <td>{{ work.price }}</td>
262
-        <td>{{ work.unit }}</td>
263
-        <td>{{ work.coefficient }}</td>
264
-        <td>{{ work.settle }}</td>
265
-        <td>{{ work.remark ? work.remark : '' }}</td>
266
-      </tr>
267
-      <tr>
268
-        <td :colspan="6" class="head">直接成本合计</td>
269
-        <td :colspan="1" class="head">{{ budgetForm.settleExpense }}</td>
270
-        <td></td>
271
-      </tr>
272
-      <tr>
273
-        <td :rowspan="userLen + carLen + deviceLen + 2">间接成本</td>
274
-      </tr>
275
-      <tr v-if="userLen != 1">
276
-        <td :rowspan="userLen">人员</td>
277
-        <td>姓名</td>
278
-        <td>基本工资</td>
279
-        <td>岗位工资</td>
280
-        <td>人员成本(天)</td>
281
-        <td>预算天数</td>
282
-        <td>金额</td>
283
-        <td></td>
284
-      </tr>
285
-      <tr v-for="user, index in chooseUser" :key="'user' + index">
286
-        <td>{{ user.user ? user.user.nickName : '' }}</td>
287
-        <td>1780</td>
288
-        <td>{{ user.salary.salary }}</td>
289
-        <td>{{ parseFloat((user.salary.salary + 1780) / 21.75).toFixed(2) }}</td>
290
-        <td>{{ user.days }}</td>
291
-        <td>{{ user.staffCost }}</td>
292
-        <td></td>
293
-      </tr>
294
-      <tr v-if="carLen != 1">
295
-        <td :rowspan="carLen">车辆</td>
296
-        <td>车牌号</td>
297
-        <td>油耗</td>
298
-        <td>总里程</td>
299
-        <td>折旧成本(天)</td>
300
-        <td>预算天数</td>
301
-        <td>金额</td>
302
-      </tr>
303
-      <tr v-for="car, index in chooseCar" :key="'car' + index">
304
-        <td>{{ car.car ? car.car.licensePlate : '' }}</td>
305
-        <td>{{ car.mileage }}</td>
306
-        <td>{{ car.distance }}</td>
307
-        <td>{{ car.car ? car.car.dayCost : '' }}</td>
308
-        <td>{{ car.days }}</td>
309
-        <td>{{ car.expense }}</td>
310
-        <td></td>
311
-      </tr>
312
-      <tr v-if="deviceLen != 1">
313
-        <td :rowspan="deviceLen">设备</td>
314
-        <td>设备名称</td>
315
-        <td>规格型号</td>
316
-        <td>品牌</td>
317
-        <td>折旧成本(天)</td>
318
-        <td>预算天数</td>
319
-        <td>金额</td>
320
-      </tr>
321
-      <tr v-for="device, index in chooseDevice" :key="'device' + index">
322
-        <td>{{ device.device ? device.device.name : '' }}</td>
323
-        <td>{{ device.device ? device.device.series : '' }}</td>
324
-        <td>{{ device.device ? device.device.brand : '' }}</td>
325
-        <td>{{ device.device ? device.device.dayCost : '' }}</td>
326
-        <td>{{ device.days }}</td>
327
-        <td>{{ device.depreciation }}</td>
328
-        <td></td>
329
-      </tr>
330
-      <tr>
331
-        <td :colspan="6" class="head">间接成本合计</td>
332
-        <td :colspan="1" class="head">{{ budgetForm.fixCost }}</td>
333
-        <td></td>
334
-      </tr>
335
-      <tr class="head">
336
-        <td :colspan="3">外协费用</td>
337
-        <td :colspan="5">{{ budgetForm.outExpense }}</td>
338
-        <td>{{ budgetForm.outRemark }}</td>
339
-      </tr>
340
-      <tr class="head">
341
-        <td colspan="3">车船租赁</td>
342
-        <td :colspan="5">{{ budgetForm.rentExpense }}</td>
343
-        <td>{{ budgetForm.rentRemark }}</td>
344
-      </tr>
345
-      <tr class="head">
346
-        <td colspan="3">其他费用</td>
347
-        <td :colspan="5">{{ budgetForm.otherExpense }}</td>
348
-        <td>{{ budgetForm.otherRemark }}</td>
349
-      </tr>
350
-      <tr class="head">
351
-        <td colspan="3">税费成本</td>
352
-        <td :colspan="5">{{ budgetForm.taxExpense }}</td>
353
-        <td>{{ budgetForm.taxRemark }}</td>
354
-      </tr>
355
-      <tr class="head">
356
-        <td colspan="3">经营管理费用</td>
357
-        <td :colspan="5">{{ budgetForm.businessExpense }}</td>
358
-        <td>{{ budgetForm.businessRemark }}</td>
359
-      </tr>
360
-      <tr>
361
-        <td colspan="3" class="head">预算总额</td>
362
-        <td colspan="5" class="head">{{ budgetForm.totalBudget }}</td>
363
-      </tr>
364
-      <tr v-if="contract.contractId">
365
-        <td colspan="3" class="head">利润</td>
366
-        <td colspan="2" class="head">{{ profit.toFixed(2) }}</td>
367
-        <td colspan="3" class="head">合同总价约</td>
368
-        <td colspan="1" class="head">{{ contract.contractId ? contract.amount : '' }}</td>
369
-      </tr>
370
-    </table>
371
-    <el-row v-if="taskName == '预算审核' || taskName == '预算批准'" class="text-center mt20 mb20">
372
-      <el-button type="success" size="mini" @click="confirmSucess(taskName)">审批通过</el-button>
267
+    <el-row v-if="taskName == '分管审核' || taskName == '总经理审核' || taskName == '预算批准'" class="text-center mt20 mb20">
268
+      <el-button type="success" @click="confirmSucess(taskName)">审批通过</el-button>
373 269
     </el-row>
374 270
   </div>
375 271
 </template>
@@ -389,6 +285,7 @@ import { complete, rejectTask, returnList, returnTask, getNextFlowNode, delegate
389 285
 import { getUser } from '@/api/system/user'
390 286
 import { getUsersManageLeaderByDept } from '@/api/system/post'
391 287
 import { getPriceRemarkByWorkType } from '@/api/oa/price/price'
288
+import { getUserByPost } from "@/api/system/post";
392 289
 export default {
393 290
   computed: {
394 291
     ...mapGetters(["name", "userId"]),
@@ -484,14 +381,6 @@ export default {
484 381
     getProjectList() {
485 382
       getProject(this.taskForm.formId).then(response => {
486 383
         this.projectForm = response.data;
487
-        let deptId = response.data.undertakingDept.split(',');
488
-        for (let d of deptId) {
489
-          getUsersManageLeaderByDept({ deptId: Number(d) }).then(res => {
490
-            if (res.data) {
491
-              this.managerList.push(res.data.userId)
492
-            }
493
-          })
494
-        }
495 384
       });
496 385
     },
497 386
     getProjectWorkList() {
@@ -501,16 +390,31 @@ export default {
501 390
     },
502 391
     confirmSucess(taskName) {
503 392
       const params = { taskId: this.taskForm.taskId };
504
-      if (taskName == '预算审核') {
393
+      if (taskName == '分管审核') {
505 394
         this.updateBudgetForm();
506 395
         getNextFlowNode(params).then(res => {
507
-          this.$set(this.taskForm.variables, "approvalList", this.managerList);
508
-          complete(this.taskForm).then(response => {
509
-            this.$modal.msgSuccess(response.msg);
510
-            this.$emit("goBack");
511
-          });
396
+          getUserByPost({ postName: "总经理" }).then(res => {
397
+            const userId = res.data[0].userId;
398
+            this.$set(this.taskForm.variables, "approval", userId);
399
+            complete(this.taskForm).then(response => {
400
+              this.$modal.msgSuccess(response.msg);
401
+              this.$emit("goBack");
402
+            });
403
+          })
404
+
512 405
         })
513
-      } else if (taskName == '预算批准') {
406
+      } else if (taskName == '总经理审核') {
407
+        getNextFlowNode(params).then(res => {
408
+          getUserByPost({ postName: "董事长" }).then(res => {
409
+            const userId = res.data[0].userId;
410
+            this.$set(this.taskForm.variables, "approval", userId);
411
+            complete(this.taskForm).then(response => {
412
+              this.$modal.msgSuccess(response.msg);
413
+              this.$emit("goBack");
414
+            });
415
+          })
416
+        })
417
+      } else {
514 418
         getNextFlowNode(params).then(res => {
515 419
           complete(this.taskForm).then(response => {
516 420
             this.$modal.msgSuccess(response.msg);
@@ -671,7 +575,7 @@ table {
671 575
 }
672 576
 
673 577
 .descriptions {
674
-  width: 1200px;
578
+  width: 100%;
675 579
   margin: 0 auto;
676 580
 }
677 581
 
@@ -683,8 +587,9 @@ table {
683 587
 ::v-deep .el-descriptions-item__label.is-bordered-label {
684 588
   color: #5a5757;
685 589
   background: rgba($color: #a9adb3, $alpha: 0.1);
686
-  width: 150px;
687
-  min-width: 150px;
590
+  width: 110px;
591
+  text-align: center;
592
+  min-width: 110px;
688 593
 }
689 594
 
690 595
 ::v-deep .el-descriptions .is-bordered .el-descriptions-item__cell {

+ 0
- 1
oa-ui/src/views/flowable/form/business/subContract.vue ファイルの表示

@@ -739,7 +739,6 @@ export default {
739 739
                 if (comment.deptId == 105)
740 740
                   getDeptLeadersByDeptId({ deptId: comment.deptId }).then(res => {
741 741
                     comment.userId = res.data[1].userId;
742
-                    console.log(comment.userId);
743 742
                   })
744 743
                 else
745 744
                   getUsersDeptLeaderByDept({ deptId: comment.deptId }).then(res => {

+ 26
- 63
oa-ui/src/views/flowable/form/projectProcess/addproject.vue ファイルの表示

@@ -2,12 +2,12 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-03-18 11:00:04
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-07-05 18:13:54
5
+ * @LastEditTime: 2024-07-08 18:19:39
6 6
 -->
7 7
 <template>
8 8
   <div class="project-wrapper">
9 9
     <!-- 项目登记 -->
10
-    <h2 style="text-align: center" id="scrollToMe">项目登记及安排</h2>
10
+    <h2 style="text-align: center" id="scrollToMe">项目登记</h2>
11 11
     <el-form ref="projectAdd" :model="addForm" :rules="rules" label-width="110px" :disabled="disabled">
12 12
       <el-form-item label="项目编号:" prop="projectNumber">
13 13
         <el-input v-model="addForm.projectNumber"></el-input>
@@ -48,7 +48,7 @@
48 48
       <el-form-item label="联系电话:" prop="telephone">
49 49
         <el-input v-model="addForm.telephone"></el-input>
50 50
       </el-form-item>
51
-      <el-form-item label="项目概况:">
51
+      <!-- <el-form-item label="项目概况:">
52 52
         <table border="1">
53 53
           <tr>
54 54
             <td style="width: 180px">工作内容</td>
@@ -94,9 +94,9 @@
94 94
         </table>
95 95
 
96 96
         <el-button icon="el-icon-plus" size="mini" @click="addWorkList"></el-button>
97
-      </el-form-item>
97
+      </el-form-item> -->
98 98
       <!-- 项目安排 -->
99
-      <arrange-project ref="arrange" :taskForm="taskForm" :taskName="'项目登记'" :disabled="disabled"></arrange-project>
99
+      <!-- <arrange-project ref="arrange" :taskForm="taskForm" :taskName="'项目登记'" :disabled="disabled"></arrange-project> -->
100 100
       <!--  -->
101 101
       <el-form-item label="任务书上传:" prop="taskDocument">
102 102
         <div v-if="addForm.taskDocument" class="upload-list">
@@ -133,9 +133,8 @@
133 133
       </el-row>
134 134
     </el-form>
135 135
     <div slot="footer" class="dialog-footer" style="text-align: center">
136
-      <el-button type="warning" @click="save" :disabled="disabled"> 存</el-button>
136
+      <el-button type="warning" @click="save" :disabled="disabled"> 存</el-button>
137 137
       <el-button type="primary" @click="confirmAddForm" :disabled="disabled">提 交</el-button>
138
-      <!-- <el-button @click="cancel" :disabled="disabled">取 消</el-button> -->
139 138
     </div>
140 139
     <el-dialog title="选择合同" :visible.sync="openContract" width="1000px" append-to-body>
141 140
       <choose-contract @choose="setContract" @close="openContract = false"></choose-contract>
@@ -148,8 +147,8 @@ import { parseTime } from "@/utils/ruoyi";
148 147
 import { mapGetters } from "vuex";
149 148
 import { listProject, getProject, addProject, updateProject, delProject } from "@/api/oa/project/project";
150 149
 import { getUser } from "@/api/system/user";
151
-import { getUsersDeptLeaderByDept, getDeptLeadersByDeptId } from "@/api/system/post";
152
-import { complete, rejectTask, returnList, returnTask, getNextFlowNode, delegate, flowTaskForm } from "@/api/flowable/todo";
150
+import { getUsersDeptLeaderByDept } from "@/api/system/post";
151
+import { complete, getNextFlowNode } from "@/api/flowable/todo";
153 152
 import { listProjectWork, addProjectWork, delProjectWork } from "@/api/oa/project/projectWork";
154 153
 import { listProjectContract, addProjectContract } from "@/api/oa/contract/projectContract";
155 154
 import { listContract, getContract, delContract, addContract, updateContract } from "@/api/oa/contract/contract";
@@ -253,7 +252,7 @@ export default {
253 252
       if (datas.rows.length > 0) {
254 253
         this.formTotal = 1
255 254
         this.getProjectInfo(this.taskForm.formId)
256
-        this.getProjectWorkList();
255
+        // this.getProjectWorkList();
257 256
       } else {
258 257
         this.addForm.projectRegistrant = this.userId;
259 258
         this.registrantUser = this.name;
@@ -297,23 +296,15 @@ export default {
297 296
     },
298 297
     // 暂存
299 298
     async save() {
300
-      // 新增数据
299
+      // 新增项目数据
301 300
       if (this.formTotal == 0) {
302 301
         this.$refs['projectAdd'].validate((vaild) => {
303 302
           if (vaild) {
304 303
             this.addForm.projectId = this.taskForm.formId;
305
-            for (let work of this.workList) {
306
-              work.projectId = this.taskForm.formId;
307
-              addProjectWork(work);
308
-            }
309
-            let addLog = addProject(this.addForm).then(response => {
310
-              this.$modal.msgSuccess("新增成功");
304
+            addProject(this.addForm).then(response => {
305
+              this.$modal.msgSuccess("项目登记成功");
311 306
               this.getList();
312
-              this.$refs.arrange.save();
313 307
             });
314
-            if (addLog.code == 200) {
315
-              this.$refs.arrange.save()
316
-            }
317 308
             let contractId = this.chooseContractInfo.contractId ? this.chooseContractInfo.contractId : ''
318 309
             let pcobj = { projectId: this.taskForm.formId, contractId }
319 310
             if (contractId != '') {
@@ -327,56 +318,28 @@ export default {
327 318
           }
328 319
         })
329 320
       } else {
330
-        let updateLog = await updateProject(this.addForm).then(
321
+        // 修改项目数据
322
+        updateProject(this.addForm).then(
331 323
           this.$modal.msgSuccess("保存成功")
332 324
         );
333
-        if (updateLog.code == 200) {
334
-          this.$refs.arrange.save()
335
-        }
336
-        await delProjectWork(this.taskForm.formId).then(res => {
337
-          this.workList.forEach(work => {
338
-            work.projectId = this.taskForm.formId;
339
-            addProjectWork(work);
340
-          })
341
-        })
342 325
       }
343 326
     },
344 327
     async confirmAddForm() {
345
-      let leaderData = await getDeptLeadersByDeptId({ deptId: 105 })
346
-      let approvalId = [];
328
+      let leaderData = await getUsersDeptLeaderByDept({ deptId: 109 })
329
+      let approvalId;
347 330
       if (leaderData.data) {
348
-        leaderData.data.forEach(item => {
349
-          approvalId.push(item.userId)
350
-        })
331
+        approvalId = leaderData.data.userId
351 332
       }
352
-      this.$set(this.taskForm.variables, "approvalList", approvalId);
333
+      this.$set(this.taskForm.variables, "approval", approvalId);
334
+      this.$set(this.taskForm.variables, "formId", this.taskForm.formId);
353 335
       this.save()
354
-      this.$confirm('项目安排之后会自动发起预算编制、技术方案、技术交底、安全交底四个子流程,将无法进行撤回操作,是否继续提交?', '提示', {
355
-        confirmButtonText: '确定',
356
-        cancelButtonText: '取消',
357
-        type: 'warning'
358
-      }).then(() => {
359
-        let budgetInitiator = this.$refs.arrange.peopleForm
360
-        if (this.addForm.projectLeader) {
361
-          budgetInitiator = this.addForm.projectLeader
362
-        } else {
363
-          budgetInitiator = this.$refs.arrange.peopleForm.userId
364
-        }
365
-        if(budgetInitiator == '' || budgetInitiator == null || budgetInitiator == undefined){
366
-          return this.$message.error('请选择项目负责人!')
367
-        }
368
-        console.log(budgetInitiator);
369
-        this.$set(this.taskForm.variables, "formId", this.taskForm.formId);
370
-        this.$set(this.taskForm.variables, "budgetInitiator", budgetInitiator);
371
-        const params = { taskId: this.taskForm.taskId };
372
-        // 获取下一个流程节点
373
-        getNextFlowNode(params).then(res => {
374
-          console.log(this.taskForm);
375
-          complete(this.taskForm).then(response => {
376
-            this.$modal.msgSuccess(response.msg);
377
-            this.$emit('goBack');
378
-          });
379
-        })
336
+      const params = { taskId: this.taskForm.taskId };
337
+      // 获取下一个流程节点
338
+      getNextFlowNode(params).then(res => {
339
+        complete(this.taskForm).then(response => {
340
+          this.$modal.msgSuccess(response.msg);
341
+          this.$emit('goBack');
342
+        });
380 343
       })
381 344
     },
382 345
     // 查询业主单位列表

+ 22
- 18
oa-ui/src/views/flowable/form/projectProcess/arrangeProject.vue ファイルの表示

@@ -2,11 +2,11 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-03-19 09:24:06
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-07-05 18:04:35
5
+ * @LastEditTime: 2024-07-08 18:52:08
6 6
 -->
7 7
 <template>
8 8
   <div class="app-container">
9
-    <!-- <h2 style="text-align: center;">项目安排</h2> -->
9
+    <h2 style="text-align: center;">项目安排</h2>
10 10
     <el-form ref="arrangeForm" :model="form" :rules="rules" label-width="120px" :disabled="disabled">
11 11
       <el-row :gutter="20">
12 12
         <el-col :span="12" :xs="24">
@@ -66,7 +66,7 @@
66 66
                 <span class="el-icon-download">下载文件</span>
67 67
               </el-link>
68 68
             </div>
69
-            <FileUpload v-if="taskName == '项目登记'" ref="orz" :limit="1" :filePathName="'组织交底文件'"
69
+            <FileUpload v-if="taskName == '项目安排'" ref="orz" :limit="1" :filePathName="'组织交底文件'"
70 70
               :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']" @input="setOrganizeDocument">
71 71
             </FileUpload>
72 72
           </el-form-item>
@@ -96,17 +96,17 @@
96 96
         </el-form-item>
97 97
       </el-form>
98 98
     </el-dialog>
99
-    <!-- <div slot="footer" class="dialog-footer" style="text-align: center;">
99
+    <div slot="footer" class="dialog-footer" style="text-align: center;">
100
+      <!-- <el-button type="warning" @click="save" :disabled="disabled">保 存</el-button> -->
100 101
       <el-button type="primary" @click="confirmPlanForm" :disabled="disabled">提 交</el-button>
101
-      <el-button @click="cancel" :disabled="disabled">取 消</el-button>
102
-    </div> -->
102
+    </div>
103 103
   </div>
104 104
 </template>
105 105
 
106 106
 <script>
107 107
 import { listDept } from '@/api/system/dept'
108 108
 import { listUser } from '@/api/system/user'
109
-import { getUsersDeptLeaderByDept } from '@/api/system/post'
109
+import { getUsersDeptLeaderByDept, getDeptLeadersByDeptId } from '@/api/system/post'
110 110
 import { complete, rejectTask, returnList, returnTask, getNextFlowNode, delegate, flowTaskForm, } from "@/api/flowable/todo";
111 111
 import { listProject, getProject, addProject, updateProject, delProject, submitProject, modifyProject } from "@/api/oa/project/project";
112 112
 export default {
@@ -245,21 +245,25 @@ export default {
245 245
         confirmButtonText: '确定',
246 246
         cancelButtonText: '取消',
247 247
         type: 'warning'
248
-      }).then(() => {
248
+      }).then(async () => {
249 249
         this.save();
250
+        let resData = await getDeptLeadersByDeptId({ deptId: 105 });
251
+        let approvalId;
252
+        if (resData.data) {
253
+          approvalId = resData.data[0].userId;
254
+        }
255
+        console.log(approvalId);
250 256
         const params = { taskId: this.taskForm.taskId };
251 257
         // 获取下一个流程节点
252 258
         getNextFlowNode(params).then(res => {
253
-          this.$set(this.taskForm.variables, "formId", this.taskForm.formId);
254
-          this.$set(this.taskForm.variables, "budgetInitiator", this.peopleForm.userId);
255
-          getUsersDeptLeaderByDept({ deptId: 105 }).then(res => {
256
-            let userId = res.data.userId;
257
-            this.$set(this.taskForm.variables, "approval", userId);
258
-            complete(this.taskForm).then(response => {
259
-              this.$modal.msgSuccess(response.msg);
260
-              this.$emit('goBack');
261
-            });
262
-          })
259
+        this.$set(this.taskForm.variables, "formId", this.taskForm.formId);
260
+        this.$set(this.taskForm.variables, "budgetInitiator", this.peopleForm.userId || this.form.projectLeader);
261
+        this.$set(this.taskForm.variables, "planInitiator", this.peopleForm.userId || this.form.projectLeader);
262
+        this.$set(this.taskForm.variables, "approval", approvalId);
263
+          complete(this.taskForm).then(response => {
264
+            this.$modal.msgSuccess(response.msg);
265
+            this.$emit('goBack');
266
+          });
263 267
         })
264 268
       })
265 269
 

+ 207
- 0
oa-ui/src/views/flowable/form/projectProcess/assessWork.vue ファイルの表示

@@ -0,0 +1,207 @@
1
+<!--
2
+ * @Author: ysh
3
+ * @Date: 2024-07-08 16:16:27
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-07-08 18:16:07
6
+-->
7
+<template>
8
+  <div class="app-container">
9
+    <h2 style="text-align: center" id="scrollToMe">核定工作</h2>
10
+    <el-form :model="form" :disabled="disabled" label-width="100px">
11
+      <el-form-item label="项目任务书:">
12
+        <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + form.taskDocument}`)">
13
+          {{ getFileName(form.taskDocument) }}
14
+        </el-link>
15
+        <el-link class="ml20" type="warning" :href="`${baseUrl}${'/profile/upload' + form.taskDocument}`"
16
+          :underline="false" target="_blank">
17
+          <span class="el-icon-download">下载文件</span>
18
+        </el-link>
19
+      </el-form-item>
20
+      <el-form-item label="核定工作量:">
21
+        <table class="table" border="1">
22
+          <tr>
23
+            <td style="width: 180px">工作内容</td>
24
+            <td>等级或比例尺</td>
25
+            <td>单位</td>
26
+            <td>工作量</td>
27
+            <td style="width: 100px">要求完成时间</td>
28
+            <td>备注</td>
29
+          </tr>
30
+          <tr v-for="(work, index) in workList" :key="index">
31
+            <td>
32
+              <el-input v-model="work.content" type="textarea" clearable
33
+                :autosize="{ minRows: 4, maxRows: 10 }"></el-input>
34
+            </td>
35
+            <td>
36
+              <el-select v-model="work.scale" placeholder="请选择" clearable>
37
+                <el-option v-for="dict in dict.type.cmc_scale_grade" :key="dict.value" :label="dict.label"
38
+                  :value="dict.label" />
39
+              </el-select>
40
+            </td>
41
+            <td>
42
+              <el-select v-model="work.unit" placeholder="请选择" clearable>
43
+                <el-option v-for="dict in dict.type.cmc_unit" :key="dict.value" :label="dict.label"
44
+                  :value="dict.label" />
45
+              </el-select>
46
+            </td>
47
+            <td>
48
+              <el-input v-model="work.workload" clearable></el-input>
49
+            </td>
50
+            <td>
51
+              <el-date-picker style="width: 140px" v-model="work.deadline" value-format="yyyy-MM-dd" type="date"
52
+                placeholder="选择日期">
53
+              </el-date-picker>
54
+            </td>
55
+            <td>
56
+              <el-input v-model="work.remark" type="textarea" clearable
57
+                :autosize="{ minRows: 4, maxRows: 10 }"></el-input>
58
+            </td>
59
+            <td>
60
+              <el-button type="text" style="color:#F56C6C" size="mini" @click="deletWorkItem(index)">删除行</el-button>
61
+            </td>
62
+          </tr>
63
+        </table>
64
+        <el-button icon="el-icon-plus" type="primary" plain size="mini" @click="addWorkList"></el-button>
65
+      </el-form-item>
66
+    </el-form>
67
+
68
+    <div slot="footer" class="dialog-footer" style="text-align: center;">
69
+      <el-button type="warning" @click="save" :disabled="disabled">保 存</el-button>
70
+      <el-button type="primary" @click="confirm" :disabled="disabled">提 交</el-button>
71
+    </div>
72
+  </div>
73
+</template>
74
+
75
+<script>
76
+import { listProject, getProject, addProject, updateProject, delProject } from "@/api/oa/project/project";
77
+import { listProjectWork, addProjectWork, delProjectWork } from "@/api/oa/project/projectWork";
78
+import { getUsersDeptLeaderByDept, getDeptLeadersByDeptId } from "@/api/system/post";
79
+import { complete, getNextFlowNode } from "@/api/flowable/todo";
80
+export default {
81
+  dicts: ['cmc_scale_grade', 'cmc_unit'],
82
+  props: {
83
+    disabled: {
84
+      type: Boolean
85
+    },
86
+    taskForm: {
87
+      type: Object,
88
+      required: true
89
+    },
90
+    taskName: {
91
+      type: String,
92
+      required: true
93
+    }
94
+  },
95
+  data() {
96
+    return {
97
+      baseUrl: process.env.VUE_APP_BASE_API,
98
+      form: {},
99
+      total: 0,
100
+      workList: [
101
+        {
102
+          content: "",
103
+          scale: "",
104
+          unit: "",
105
+          workload: "",
106
+          deadline: undefined,
107
+          remark: "",
108
+        },
109
+      ],
110
+
111
+    }
112
+  },
113
+  created() {
114
+
115
+  },
116
+  mounted() {
117
+    if (this.taskName != '项目登记')
118
+      this.initForm();
119
+  },
120
+  methods: {
121
+    async initForm() {
122
+      let projectRes = await getProject(this.taskForm.formId)
123
+      if (projectRes.code == 200 && projectRes.data) {
124
+        this.form = projectRes.data
125
+        this.total = 1
126
+        this.getProjectWorkList();
127
+      }
128
+    },
129
+    getProjectWorkList() {
130
+      listProjectWork({ projectId: this.taskForm.formId }).then(res => {
131
+        this.workList = res.rows;
132
+      })
133
+    },
134
+    addWorkList() {
135
+      this.workList.push({
136
+        content: "",
137
+        scale: "",
138
+        unit: "",
139
+        workload: "",
140
+        deadline: undefined,
141
+        remark: "",
142
+      });
143
+    },
144
+    deletWorkItem(index) {
145
+      let arr = this.workList;
146
+      if (arr.length == 1) {
147
+        return;
148
+      }
149
+      if (index >= 0 && index < arr.length) {
150
+        arr.splice(index, 1);
151
+      }
152
+    },
153
+    // 更新工作量
154
+    updateWorkList() {
155
+      delProjectWork(this.taskForm.formId).then(res => {
156
+        this.workList.forEach(work => {
157
+          work.projectId = this.taskForm.formId;
158
+          addProjectWork(work);
159
+        })
160
+        this.$message.success('保存成功')
161
+      })
162
+    },
163
+    // 保存按钮
164
+    save() {
165
+      if (!this.total) {
166
+        this.workList.forEach(work => {
167
+          work.projectId = this.taskForm.formId;
168
+          addProjectWork(work).then(res => {
169
+            this.$message.success('保存成功')
170
+          });
171
+        })
172
+      } else {
173
+        this.updateWorkList();
174
+      }
175
+    },
176
+    async confirm() {
177
+      this.save();
178
+      let resData = await getDeptLeadersByDeptId({ deptId: 105 });
179
+      let approval;
180
+      if (resData.data) {
181
+        approval = resData.data[1].userId;
182
+      }
183
+      this.$set(this.taskForm.variables, "approval", approval);
184
+      const params = { taskId: this.taskForm.taskId };
185
+      getNextFlowNode(params).then(res => {
186
+        complete(this.taskForm).then(response => {
187
+          this.$modal.msgSuccess(response.msg);
188
+          this.$emit('goBack');
189
+        });
190
+      })
191
+    }
192
+  },
193
+}
194
+</script>
195
+
196
+<style lang="scss" scoped>
197
+table {
198
+  /*居中*/
199
+  margin: 0 auto;
200
+  /*边框*/
201
+  /* border: 1px solid black; */
202
+  text-align: center;
203
+  border-collapse: collapse;
204
+  /*设置背景颜色*/
205
+  /* background-color: #bfa; */
206
+}
207
+</style>

+ 14
- 12
oa-ui/src/views/flowable/form/projectProcess/businessReview.vue ファイルの表示

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-04-08 13:56:14
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-07-05 15:28:33
5
+ * @LastEditTime: 2024-07-08 17:48:47
6 6
 -->
7 7
 <template>
8 8
   <div class="app-container">
@@ -96,17 +96,19 @@ export default {
96 96
     },
97 97
     getDeptManageLeader() {
98 98
       getProject(this.taskForm.formId).then(res => {
99
-        let deptId = res.data.undertakingDept.split(',');
100
-        this.$store.commit('SET_UNDERDEPTID', deptId);
101
-        this.managerList = []
102
-        for (let d of deptId) {
103
-          getUsersManageLeaderByDept({ deptId: Number(d) }).then(resopnse => {
104
-            if (resopnse.data) {
105
-              resopnse.data.forEach(element => {
106
-                this.managerList.push(element.userId)
107
-              });
108
-            }
109
-          })
99
+        if (res.data && res.data.undertakingDept) {
100
+          let deptId = res.data.undertakingDept.split(',');
101
+          this.$store.commit('SET_UNDERDEPTID', deptId);
102
+          this.managerList = []
103
+          for (let d of deptId) {
104
+            getUsersManageLeaderByDept({ deptId: Number(d) }).then(resopnse => {
105
+              if (resopnse.data) {
106
+                resopnse.data.forEach(element => {
107
+                  this.managerList.push(element.userId)
108
+                });
109
+              }
110
+            })
111
+          }
110 112
         }
111 113
       })
112 114
     },

+ 19
- 15
oa-ui/src/views/flowable/form/projectProcess/index.vue ファイルの表示

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-02-27 14:49:15
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-07-05 09:31:03
5
+ * @LastEditTime: 2024-07-08 16:19:34
6 6
 -->
7 7
 
8 8
 <template>
@@ -14,21 +14,12 @@
14 14
             <addproject :taskForm="taskForm" :taskName="taskName" :disabled="taskName != '项目登记'" @goBack="goBack">
15 15
             </addproject>
16 16
           </el-tab-pane>
17
-          <!-- <el-tab-pane label="项目安排" name="项目安排">
17
+          <el-tab-pane label="核定工作" name="核定工作">
18
+            <assess-work :taskForm="taskForm" :taskName="taskName" :disabled="taskName != '核定工作'" @goBack="goBack"></assess-work>
19
+          </el-tab-pane>
20
+          <el-tab-pane label="项目安排" name="项目安排">
18 21
             <arrangeProject :taskForm="taskForm" :taskName="'项目安排'" :disabled="taskName != '项目安排'" @goBack="goBack">
19 22
             </arrangeProject>
20
-          </el-tab-pane> -->
21
-          <el-tab-pane label="项目预算" name="项目预算">
22
-            <budget-tab :taskForm="taskForm" @goBack="goBack"></budget-tab>
23
-          </el-tab-pane>
24
-          <el-tab-pane label="安全交底" name="安全交底">
25
-            <safe-tab :taskForm="taskForm" @goBack="goBack"></safe-tab>
26
-          </el-tab-pane>
27
-          <el-tab-pane label="技术交底" name="技术交底">
28
-            <technical-tab :taskForm="taskForm" @goBack="goBack"></technical-tab>
29
-          </el-tab-pane>
30
-          <el-tab-pane label="技术方案" name="技术方案">
31
-            <plan-tab :taskForm="taskForm" :taskName="taskName" @goBack="goBack"></plan-tab>
32 23
           </el-tab-pane>
33 24
           <el-tab-pane label="经营审核" name="经营审核">
34 25
             <business-review :taskForm="taskForm" :taskName="taskName" :disabled="taskName != '经营审核'"
@@ -46,6 +37,18 @@
46 37
             <in-progress :taskForm="taskForm" :taskName="taskName" :disabled="taskName != '项目生产'"
47 38
               @goBack="goBack"></in-progress>
48 39
           </el-tab-pane>
40
+          <el-tab-pane label="项目预算" name="项目预算">
41
+            <budget-tab :taskForm="taskForm" @goBack="goBack"></budget-tab>
42
+          </el-tab-pane>
43
+          <el-tab-pane label="安全交底" name="安全交底">
44
+            <safe-tab :taskForm="taskForm" @goBack="goBack"></safe-tab>
45
+          </el-tab-pane>
46
+          <el-tab-pane label="技术交底" name="技术交底">
47
+            <technical-tab :taskForm="taskForm" @goBack="goBack"></technical-tab>
48
+          </el-tab-pane>
49
+          <el-tab-pane label="技术方案" name="技术方案">
50
+            <plan-tab :taskForm="taskForm" :taskName="taskName" @goBack="goBack"></plan-tab>
51
+          </el-tab-pane>
49 52
         </el-tabs>
50 53
       </el-col>
51 54
       <el-col :span="6" :xs="24">
@@ -77,6 +80,7 @@ import BudgetTab from './budgetTab.vue'
77 80
 import planTab from './planTab.vue'
78 81
 import SafeTab from './safeTab.vue'
79 82
 import technicalTab from './technicalTab.vue'
83
+import AssessWork from './assessWork.vue'
80 84
 export default {
81 85
   props: {
82 86
     taskName: {
@@ -86,7 +90,7 @@ export default {
86 90
       type: Object,
87 91
     }
88 92
   },
89
-  components: { addproject, arrangeProject, businessReview, flow, ManageReview, ScConfirm, InProgress, BudgetTab, planTab, SafeTab, technicalTab },
93
+  components: { addproject, arrangeProject, businessReview, flow, ManageReview, ScConfirm, InProgress, BudgetTab, planTab, SafeTab, technicalTab, AssessWork },
90 94
   data() {
91 95
     return {
92 96
       activeName: '项目登记',

+ 0
- 1
oa-ui/src/views/flowable/task/myProcess/send/index.vue ファイルの表示

@@ -283,7 +283,6 @@ export default {
283 283
         } else {
284 284
           this.$set(variables, "approval", this.checkValues);
285 285
         }
286
-        console.log(variables, "流程发起提交表单数据")
287 286
         // 启动流程并将表单数据加入流程变量
288 287
         definitionStart(this.procDefId, JSON.stringify(variables)).then(res => {
289 288
           this.$modal.msgSuccess(res.msg);

+ 0
- 1
oa-ui/src/views/oa/manage/index.vue ファイルの表示

@@ -225,7 +225,6 @@ export default {
225 225
     },
226 226
     /** 提交按钮 */
227 227
     submitForm() {
228
-      console.log(this.form);
229 228
       this.$refs["form"].validate(valid => {
230 229
         if (valid) {
231 230
           if (!this.isAdd) {

+ 28
- 26
oa-ui/src/views/oa/project/index.vue ファイルの表示

@@ -1,8 +1,8 @@
1 1
 <!--
2 2
  * @Author: ysh
3 3
  * @Date: 2024-02-27 14:49:15
4
- * @LastEditors: wrh
5
- * @LastEditTime: 2024-06-25 14:50:36
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-07-08 14:36:12
6 6
 -->
7 7
 <template>
8 8
   <div class="project-wrapper">
@@ -14,7 +14,8 @@
14 14
             @keyup.enter.native="handleQuery" />
15 15
         </el-form-item>
16 16
         <el-form-item label="项目名称" prop="projectName">
17
-          <el-input v-model="queryParams.projectName" placeholder="请输入项目名称" clearable @keyup.enter.native="handleQuery" />
17
+          <el-input v-model="queryParams.projectName" placeholder="请输入项目名称" clearable
18
+            @keyup.enter.native="handleQuery" />
18 19
         </el-form-item>
19 20
         <el-form-item label="项目负责人" prop="projectLeader">
20 21
           <el-select v-model="queryParams.projectLeader" clearable filterable placeholder="请输入项目负责人" size="large"
@@ -129,7 +130,7 @@
129 130
         <el-form-item label="项目负责人:" prop="projectLeader">
130 131
           <el-tag effect="plain" type="warning" style="margin-right: 10px;"
131 132
             v-if="addForm.projectLeaderName != undefined">{{
132
-              addForm.projectLeaderName }}</el-tag>
133
+        addForm.projectLeaderName }}</el-tag>
133 134
           <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="choosePeople">选择</el-button>
134 135
         </el-form-item>
135 136
         <el-form-item label="项目类型:" prop="projectType">
@@ -294,32 +295,33 @@ export default {
294 295
   },
295 296
   methods: {
296 297
     // 查询项目列表
297
-    getList() {
298
+    async getList() {
298 299
       this.loading = true
299
-      getIsDeptLeader({ deptId: this.deptId }).then(res => {
300
-        if (this.deptId > 107 && res.data == false) {
300
+      if (this.deptId > 107) {
301
+        let response = await getIsDeptLeader({ deptId: this.deptId })
302
+        if (response.data == false) {
301 303
           this.queryParams.undertakingDept = this.deptId
302 304
         }
303
-        listProject(this.queryParams).then(response => {
304
-          this.projectList = response.rows;
305
-          this.total = response.total;
306
-          this.loading = false;
307
-          for (let project of this.projectList) {
308
-            getProjectProgress(project.projectId).then(res => {
309
-              if (res.data) {
310
-                let len = res.data.length
311
-                if (len != 0) {
312
-                  this.$set(project, 'percentage', Number(res.data[len - 1].percentage))
313
-                } else {
314
-                  this.$set(project, 'percentage', 0)
315
-                }
316
-                if (project.isFinished == '1') {
317
-                  this.$set(project, 'percentage', 100)
318
-                }
305
+      }
306
+      listProject(this.queryParams).then(response => {
307
+        this.projectList = response.rows;
308
+        this.total = response.total;
309
+        this.loading = false;
310
+        for (let project of this.projectList) {
311
+          getProjectProgress(project.projectId).then(res => {
312
+            if (res.data) {
313
+              let len = res.data.length
314
+              if (len != 0) {
315
+                this.$set(project, 'percentage', Number(res.data[len - 1].percentage))
316
+              } else {
317
+                this.$set(project, 'percentage', 0)
319 318
               }
320
-            })
321
-          }
322
-        })
319
+              if (project.isFinished == '1') {
320
+                this.$set(project, 'percentage', 100)
321
+              }
322
+            }
323
+          })
324
+        }
323 325
       })
324 326
     },
325 327
     getDeptList() {

読み込み中…
キャンセル
保存