Browse Source

新增技术交底、技术方案打印;

新增项目负责人可以查看项目预算;
修改项目预算生成预算表时的表格样式;
修改项目变更表单。
余思翰 10 months ago
parent
commit
1b929aed58

+ 3
- 1
oa-back/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/CmcPriceController.java View File

83
     {
83
     {
84
         CmcPriceRemark cmcPriceRemark = new CmcPriceRemark();
84
         CmcPriceRemark cmcPriceRemark = new CmcPriceRemark();
85
         cmcPriceRemark.setWorkType(workType);
85
         cmcPriceRemark.setWorkType(workType);
86
-        CmcPriceRemark priceRemark = cmcPriceRemarkService.selectCmcPriceRemarkList(cmcPriceRemark).get(0);
86
+        CmcPriceRemark priceRemark = new CmcPriceRemark();
87
+        if(cmcPriceRemarkService.selectCmcPriceRemarkList(cmcPriceRemark).size()>0)
88
+            priceRemark= cmcPriceRemarkService.selectCmcPriceRemarkList(cmcPriceRemark).get(0);
87
         return success(priceRemark.getRemark());
89
         return success(priceRemark.getRemark());
88
     }
90
     }
89
 
91
 

+ 7
- 1
oa-ui/src/utils/deleteResource.js View File

2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-06-13 17:07:59
3
  * @Date: 2024-06-13 17:07:59
4
  * @LastEditors: Please set LastEditors
4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-07-09 17:09:23
5
+ * @LastEditTime: 2024-08-02 17:02:24
6
  */
6
  */
7
 import request from '@/utils/request'
7
 import request from '@/utils/request'
8
 
8
 
62
       '/oa/borrow/:id',
62
       '/oa/borrow/:id',
63
       '/oa/borrowDetail/:id',
63
       '/oa/borrowDetail/:id',
64
     ]
64
     ]
65
+  },
66
+  {
67
+    procDefName: '项目变更',
68
+    apiUrl: [
69
+      '/oa/projectChange/:id',
70
+    ]
65
   }
71
   }
66
 ]
72
 ]
67
 
73
 

+ 1
- 1
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: 2024-08-01 10:11:59
5
+ * @LastEditTime: 2024-08-02 15:23:33
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div class="main">
8
   <div class="main">

+ 188
- 151
oa-ui/src/views/flowable/form/budget/components/budgetTable.vue View File

1
 <!--
1
 <!--
2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-05-10 15:50:41
3
  * @Date: 2024-05-10 15:50:41
4
- * @LastEditors: wrh
5
- * @LastEditTime: 2024-06-20 14:54:00
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-08-02 15:01:28
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div>
8
   <div>
9
     <h2 style="text-align:center;">项目直接生产成本预算表</h2>
9
     <h2 style="text-align:center;">项目直接生产成本预算表</h2>
10
-    <table border="1" class="table">
11
-      <tr>
12
-        <td style="width: 100px;">项目名称</td>
13
-        <td colspan="6">{{ projectForm.projectName }}</td>
14
-        <td>项目编号</td>
15
-        <td colspan="1">{{ projectForm.projectNumber }}</td>
16
-      </tr>
17
-      <tr>
18
-        <td :rowspan="workLen+2">直接成本</td>
19
-        <td>工作简述</td>
20
-        <td>工作内容</td>
21
-        <td>数量</td>
22
-        <td>单价</td>
23
-        <td>单位</td>
24
-        <td>系数</td>
25
-        <td>金额</td>
26
-        <td style="width: 250px;">备注</td>
27
-      </tr>
28
-      <tr v-for="work in budgetForm.contentList">
29
-        <td>{{ work.content }}</td>
30
-        <td>{{ work.workItem }}</td>
31
-        <td>{{ work.workload }}</td>
32
-        <td>{{ work.price }}</td>
33
-        <td>{{ work.unit }}</td>
34
-        <td>{{ work.coefficient }}</td>
35
-        <td>{{ work.settle }}</td>
36
-        <td>{{ work.remark ? work.remark : '' }}</td>
37
-      </tr>
38
-      <tr>
39
-        <td :colspan="6" class="head">直接成本合计</td>
40
-        <td :colspan="1" class="head">{{ budgetForm.settleExpense }}</td>
41
-        <td></td>
42
-      </tr>
43
-      <tr>
44
-        <td :rowspan="userLen + carLen + deviceLen + 2">间接成本</td>
45
-      </tr>
46
-      <tr v-if="userLen != 1">
47
-        <td :rowspan="userLen">人员</td>
48
-        <td>姓名</td>
49
-        <td>基本工资</td>
50
-        <td>岗位工资</td>
51
-        <td>人员成本(天)</td>
52
-        <!-- <td>进出场单价</td> -->
53
-        <td>预算天数</td>
54
-        <td>金额</td>
55
-        <td></td>
56
-      </tr>
57
-      <tr v-for="user in budgetForm.chooseUser" :key="'user' + user.userId">
58
-        <td>{{ user.nickName }}</td>
59
-        <td>1780</td>
60
-        <td>{{ user.salary.salary }}</td>
61
-        <td>{{ parseFloat((user.salary.salary + 1780) / 21.75).toFixed(2) }}</td>
62
-        <!-- <td>{{ user.inOutPrice }}</td> -->
63
-        <td>{{ user.days }}</td>
64
-        <td>{{ user.staffCost }}</td>
65
-        <td></td>
66
-      </tr>
67
-      <tr v-if="carLen != 1">
68
-        <td :rowspan="carLen">车辆</td>
69
-        <td>车牌号</td>
70
-        <td>油耗</td>
71
-        <td>总里程</td>
72
-        <td>折旧成本(天)</td>
73
-        <td>预算天数</td>
74
-        <td>金额</td>
75
-        <!-- <td></td> -->
76
-      </tr>
77
-      <tr v-for="car in budgetForm.chooseCar" :key="'car' + car.carId">
78
-        <td>{{ car.licensePlate }}</td>
79
-        <td>{{ car.mileage }}</td>
80
-        <td>{{ car.distance }}</td>
81
-        <td>{{ car.dayCost }}</td>
82
-        <td>{{ car.days }}</td>
83
-        <td>{{ car.expense }}</td>
84
-        <td></td>
85
-      </tr>
86
-      <tr v-if="deviceLen != 1">
87
-        <td :rowspan="deviceLen">设备</td>
88
-        <td>设备名称</td>
89
-        <td>规格型号</td>
90
-        <td>品牌</td>
91
-        <td>折旧成本(天)</td>
92
-        <td>预算天数</td>
93
-        <td>金额</td>
94
-        <!-- <td>备注</td> -->
95
-      </tr>
96
-      <tr v-for="device in budgetForm.chooseDevice" :key="'device' + device.deviceId">
97
-        <td>{{ device.name }}</td>
98
-        <td>{{ device.series }}</td>
99
-        <td>{{ device.brand }}</td>
100
-        <td>{{ device.dayCost }}</td>
101
-        <td>{{ device.days }}</td>
102
-        <td>{{ device.depreciation }}</td>
103
-        <td></td>
104
-      </tr>
105
-      <tr>
106
-        <td :colspan="6" class="head">间接成本合计</td>
107
-        <td :colspan="1" class="head">{{ budgetForm.fixCost }}</td>
108
-        <td></td>
109
-      </tr>
110
-      <tr class="head">
111
-        <td :colspan="3">外协费用</td>
112
-        <td :colspan="5">{{ budgetForm.outExpense }}</td>
113
-        <td>{{ budgetForm.outRemark }}</td>
114
-      </tr>
115
-      <tr class="head">
116
-        <td colspan="3">车船租赁</td>
117
-        <td :colspan="5">{{ budgetForm.rentExpense }}</td>
118
-        <td>{{ budgetForm.rentRemark }}</td>
119
-      </tr>
120
-      <tr class="head">
121
-        <td colspan="3">其他费用</td>
122
-        <td :colspan="5">{{ budgetForm.otherExpense }}</td>
123
-        <td>{{ budgetForm.otherRemark }}</td>
124
-      </tr>
125
-      <tr class="head">
126
-        <td colspan="3">税费成本</td>
127
-        <td :colspan="5">{{ budgetForm.taxExpense }}</td>
128
-        <td>{{ budgetForm.taxRemark }}</td>
129
-      </tr>
130
-      <tr class="head">
131
-        <td colspan="3">经营管理费用</td>
132
-        <td :colspan="5">{{ budgetForm.businessExpense }}</td>
133
-        <td>{{ budgetForm.businessRemark }}</td>
134
-      </tr>
135
-      <tr>
136
-        <td colspan="3" class="head">成本合计</td>
137
-        <td colspan="5" class="head">{{ costSum }}</td>
138
-      </tr>
139
-      <tr v-if="budgetForm.contract">
140
-        <td colspan="3" class="head">利润</td>
141
-        <td colspan="2" class="head">{{ profit }}</td>
142
-        <td colspan="3" class="head">合同总价约</td>
143
-        <td colspan="1" class="head">{{ budgetForm.contract ? budgetForm.contract.amount : '' }}</td>
144
-      </tr>
145
-    </table>
10
+    <el-descriptions :column="3" border class="descriptions">
11
+      <el-descriptions-item label="项目编号">
12
+        {{ projectForm.projectNumber }}
13
+      </el-descriptions-item>
14
+      <el-descriptions-item label="项目名称">
15
+        {{ projectForm.projectName }}
16
+      </el-descriptions-item>
17
+      <el-descriptions-item label="项目负责人">
18
+        {{ getUserName(projectForm.projectLeader) }}
19
+      </el-descriptions-item>
20
+      <el-descriptions-item label="承担部门">
21
+        {{ getDeptNames(projectForm.undertakingDept) }}
22
+      </el-descriptions-item>
23
+      <el-descriptions-item label="项目备注" :span="3">
24
+        {{ projectForm.remark }}
25
+      </el-descriptions-item>
26
+      <el-descriptions-item label="直接成本" :span="3">
27
+        <div>
28
+          <table border="1" style="width: 100%;">
29
+            <tr style="background-color:#f8f8f9">
30
+              <td style="width: 250px">工作简述</td>
31
+              <td style="width: 200px">工作内容</td>
32
+              <td style="width: 80px">数量</td>
33
+              <td style="width: 80px">单价</td>
34
+              <td style="width: 100px">单位</td>
35
+              <td style="width: 70px">系数</td>
36
+              <td style="width: 100px">金额</td>
37
+              <td style="width: 250px;">备注</td>
38
+            </tr>
39
+            <tr v-for="work in budgetForm.contentList">
40
+              <td>{{ work.content }}</td>
41
+              <td>{{ work.workItem }}</td>
42
+              <td>{{ work.workload }}</td>
43
+              <td>{{ work.price }}</td>
44
+              <td>{{ work.unit }}</td>
45
+              <td>{{ work.coefficient }}</td>
46
+              <td>{{ work.settle }}</td>
47
+              <td>{{ work.remark ? work.remark : '' }}</td>
48
+            </tr>
49
+            <tr>
50
+              <td :colspan="6" class="head">直接成本合计</td>
51
+              <td :colspan="1" class="head">{{ budgetForm.settleExpense }}</td>
52
+              <td></td>
53
+            </tr>
54
+          </table>
55
+        </div>
56
+      </el-descriptions-item>
57
+      <el-descriptions-item label="间接成本" :span="3">
58
+        <div>
59
+          <table border="1" style="width: 100%;">
60
+            <tr v-if="userLen != 1" style="background-color:#f8f8f9">
61
+              <td :rowspan="userLen" style="background-color:#f8f8f9">人员</td>
62
+              <td>姓名</td>
63
+              <td>基本工资</td>
64
+              <td>岗位工资</td>
65
+              <td>人员成本(天)</td>
66
+              <td>预算天数</td>
67
+              <td>金额</td>
68
+              <td>备注</td>
69
+            </tr>
70
+            <tr v-for="user in budgetForm.chooseUser" :key="'user' + user.userId">
71
+              <td>{{ user.nickName }}</td>
72
+              <td>1780</td>
73
+              <td>{{ user.salary.salary }}</td>
74
+              <td>{{ parseFloat((user.salary.salary + 1780) / 21.75).toFixed(2) }}</td>
75
+              <!-- <td>{{ user.inOutPrice }}</td> -->
76
+              <td>{{ user.days }}</td>
77
+              <td>{{ user.staffCost }}</td>
78
+              <td></td>
79
+            </tr>
80
+            <tr v-if="carLen != 1" style="background-color:#f8f8f9">
81
+              <td :rowspan="carLen" style="background-color:#f8f8f9">车辆</td>
82
+              <td>车牌号</td>
83
+              <td>油耗</td>
84
+              <td>总里程</td>
85
+              <td>折旧成本(天)</td>
86
+              <td>预算天数</td>
87
+              <td>金额</td>
88
+              <td>备注</td>
89
+            </tr>
90
+            <tr v-for="car in budgetForm.chooseCar" :key="'car' + car.carId">
91
+              <td>{{ car.licensePlate }}</td>
92
+              <td>{{ car.mileage }}</td>
93
+              <td>{{ car.distance }}</td>
94
+              <td>{{ car.dayCost }}</td>
95
+              <td>{{ car.days }}</td>
96
+              <td>{{ car.expense }}</td>
97
+              <td></td>
98
+            </tr>
99
+            <tr v-if="deviceLen != 1" style="background-color:#f8f8f9">
100
+              <td :rowspan="deviceLen" style="background-color:#f8f8f9">设备</td>
101
+              <td>设备名称</td>
102
+              <td>规格型号</td>
103
+              <td>品牌</td>
104
+              <td>折旧成本(天)</td>
105
+              <td>预算天数</td>
106
+              <td>金额</td>
107
+              <td>备注</td>
108
+            </tr>
109
+            <tr v-for="device in budgetForm.chooseDevice" :key="'device' + device.deviceId">
110
+              <td>{{ device.name }}</td>
111
+              <td>{{ device.series }}</td>
112
+              <td>{{ device.brand }}</td>
113
+              <td>{{ device.dayCost }}</td>
114
+              <td>{{ device.days }}</td>
115
+              <td>{{ device.depreciation }}</td>
116
+              <td></td>
117
+            </tr>
118
+            <tr>
119
+              <td :colspan="6" class="head">间接成本合计</td>
120
+              <td :colspan="1" class="head">{{ budgetForm.fixCost }}</td>
121
+              <td></td>
122
+            </tr>
123
+          </table>
124
+        </div>
125
+      </el-descriptions-item>
126
+      <el-descriptions-item label="外协费用" :span="1">
127
+        <div class="text-center">
128
+          {{ budgetForm.outExpense }}
129
+        </div>
130
+      </el-descriptions-item>
131
+      <el-descriptions-item label="备注" :span="2">
132
+        {{ budgetForm.outRemark }}
133
+      </el-descriptions-item>
134
+      <el-descriptions-item label="车船租赁" :span="1">
135
+        <div class="text-center">
136
+          {{ budgetForm.rentExpense }}
137
+        </div>
138
+      </el-descriptions-item>
139
+      <el-descriptions-item label="备注" :span="2">
140
+        {{ budgetForm.rentRemark }}
141
+      </el-descriptions-item>
142
+      <el-descriptions-item label="其他费用" :span="1">
143
+        <div class="text-center">
144
+          {{ budgetForm.otherExpense }}
145
+        </div>
146
+      </el-descriptions-item>
147
+      <el-descriptions-item label="备注" :span="2">
148
+        {{ budgetForm.otherRemark }}
149
+      </el-descriptions-item>
150
+      <el-descriptions-item label="税费成本" :span="1">
151
+        <div class="text-center">
152
+          {{ budgetForm.taxExpense }}
153
+        </div>
154
+      </el-descriptions-item>
155
+      <el-descriptions-item label="备注" :span="2">
156
+        {{ budgetForm.taxRemark }}
157
+      </el-descriptions-item>
158
+      <el-descriptions-item label="经营管理费用" :span="1">
159
+        <div class="text-center">
160
+          {{ budgetForm.businessExpense }}
161
+        </div>
162
+      </el-descriptions-item>
163
+      <el-descriptions-item label="备注" :span="2">
164
+        {{ budgetForm.businessRemark }}
165
+      </el-descriptions-item>
166
+      <el-descriptions-item label="预算成本合计" :span="3">
167
+        <div class="text-center head">¥ {{ costSum }}</div>
168
+      </el-descriptions-item>
169
+      <el-descriptions-item label="合同总价约" :span="2" v-if="budgetForm.contract">
170
+        {{ budgetForm.contract ? budgetForm.contract.amount : '' }}
171
+      </el-descriptions-item>
172
+      <el-descriptions-item label="利润" :span="1" v-if="budgetForm.contract">
173
+        {{ profit }}
174
+      </el-descriptions-item>
175
+    </el-descriptions>
146
   </div>
176
   </div>
147
 </template>
177
 </template>
148
 
178
 
160
   },
190
   },
161
   data() {
191
   data() {
162
     return {
192
     return {
163
-      userLen: 1,
164
-      carLen: 1,
165
-      deviceLen: 1,
193
+      userLen: 0,
194
+      carLen: 0,
195
+      deviceLen: 0,
166
       workLen: 1,
196
       workLen: 1,
167
       costSum: 0,
197
       costSum: 0,
168
       inOutPrice: '',
198
       inOutPrice: '',
169
-      profit:''
199
+      profit: ''
170
     }
200
     }
171
   },
201
   },
172
   created() {
202
   created() {
174
     this.carLen = this.budgetForm.chooseCar.length + 1;
204
     this.carLen = this.budgetForm.chooseCar.length + 1;
175
     this.deviceLen = this.budgetForm.chooseDevice.length + 1;
205
     this.deviceLen = this.budgetForm.chooseDevice.length + 1;
176
     this.workLen = this.budgetForm.contentList.length;
206
     this.workLen = this.budgetForm.contentList.length;
177
-    this.costSum = (Number(this.budgetForm.directExpense) + Number(this.budgetForm.fixCost) ).toFixed(2);
178
-    if(this.budgetForm.contract){
179
-      this.profit = (Number(this.budgetForm.contract.amount) - Number(this.costSum) ).toFixed(2)
207
+    this.costSum = (Number(this.budgetForm.directExpense) + Number(this.budgetForm.fixCost)).toFixed(2);
208
+    if (this.budgetForm.contract) {
209
+      this.profit = (Number(this.budgetForm.contract.amount) - Number(this.costSum)).toFixed(2)
180
     }
210
     }
181
     this.$emit('getTotal', this.costSum);
211
     this.$emit('getTotal', this.costSum);
182
   },
212
   },
184
 </script>
214
 </script>
185
 
215
 
186
 <style lang="scss" scoped>
216
 <style lang="scss" scoped>
187
-.table {
188
-  /*居中*/
189
-  // margin: 0 auto;
190
-  /*边框*/
191
-  /* border: 1px solid black; */
217
+table {
192
   text-align: center;
218
   text-align: center;
193
   border-collapse: collapse;
219
   border-collapse: collapse;
194
   margin: 0 auto;
220
   margin: 0 auto;
197
   /* background-color: #bfa; */
223
   /* background-color: #bfa; */
198
   td {
224
   td {
199
     padding: 5px;
225
     padding: 5px;
200
-    height: 40px;
201
   }
226
   }
202
 }
227
 }
203
 
228
 
207
   // color: #fff;
232
   // color: #fff;
208
   font-weight: bold;
233
   font-weight: bold;
209
 }
234
 }
235
+
236
+::v-deep .el-descriptions-item__label.is-bordered-label {
237
+  color: #5a5757;
238
+  background: rgba($color: #a9adb3, $alpha: 0.1);
239
+  width: 120px;
240
+  text-align: center;
241
+  min-width: 120px;
242
+}
243
+
244
+::v-deep .el-descriptions .is-bordered .el-descriptions-item__cell {
245
+  border: 1px solid #cdd0d3;
246
+}
210
 </style>
247
 </style>

+ 33
- 79
oa-ui/src/views/flowable/form/changeForm.vue View File

7
             <el-button type="primary" size="mini" @click="openProject = true" v-if="taskName == '变更登记'">选择项目</el-button>
7
             <el-button type="primary" size="mini" @click="openProject = true" v-if="taskName == '变更登记'">选择项目</el-button>
8
             <el-descriptions border v-if="isSelect" style="margin-top: 10px;" :column="2" direction="vertical">
8
             <el-descriptions border v-if="isSelect" style="margin-top: 10px;" :column="2" direction="vertical">
9
               <el-descriptions-item label="项目名称" label-class-name="my-label">{{ chooseProject.projectName
9
               <el-descriptions-item label="项目名称" label-class-name="my-label">{{ chooseProject.projectName
10
-              }}</el-descriptions-item>
10
+                }}</el-descriptions-item>
11
               <el-descriptions-item label="项目编号" label-class-name="my-label">{{ chooseProject.projectNumber
11
               <el-descriptions-item label="项目编号" label-class-name="my-label">{{ chooseProject.projectNumber
12
-              }}</el-descriptions-item>
13
-              <el-descriptions-item label="甲方单位" label-class-name="my-label">{{ chooseProject.partyA.partyName
14
-              }}</el-descriptions-item>
12
+                }}</el-descriptions-item>
13
+              <el-descriptions-item label="甲方单位" label-class-name="my-label">{{ chooseProject.partyA.partyAName
14
+                }}</el-descriptions-item>
15
               <el-descriptions-item label="项目类型" label-class-name="my-label">{{ chooseProject.projectType
15
               <el-descriptions-item label="项目类型" label-class-name="my-label">{{ chooseProject.projectType
16
-              }}</el-descriptions-item>
16
+                }}</el-descriptions-item>
17
               <el-descriptions-item label="承担部门" label-class-name="my-label">{{
17
               <el-descriptions-item label="承担部门" label-class-name="my-label">{{
18
-                chooseProject.undertakingDeptName
19
-              }}</el-descriptions-item>
18
+      chooseProject.undertakingDeptName
19
+    }}</el-descriptions-item>
20
               <el-descriptions-item label="项目负责人" label-class-name="my-label">{{ chooseProject.projectLeaderUser
20
               <el-descriptions-item label="项目负责人" label-class-name="my-label">{{ chooseProject.projectLeaderUser
21
-                ? chooseProject.projectLeaderUser.nickName : ''
22
-              }}</el-descriptions-item>=
21
+      ? chooseProject.projectLeaderUser.nickName : ''
22
+                }}</el-descriptions-item>=
23
             </el-descriptions>
23
             </el-descriptions>
24
           </el-form-item>
24
           </el-form-item>
25
-          <el-form-item label="变更内容">
26
-            <el-input type="textarea" :rows="10" v-model="form.content" :disabled="taskName != '项目登记'" />
25
+          <el-form-item label="变更内容" prop="content">
26
+            <el-input type="textarea" :rows="10" v-model="form.content" :disabled="taskName != '变更登记'" />
27
           </el-form-item>
27
           </el-form-item>
28
           <el-row>
28
           <el-row>
29
             <el-col :span="6" :xs="24" :offset="12">
29
             <el-col :span="6" :xs="24" :offset="12">
39
             </el-col>
39
             </el-col>
40
           </el-row>
40
           </el-row>
41
         </el-form>
41
         </el-form>
42
-        <div style="text-align: center;">
43
-          <el-button type="primary" @click="submitForm">确 定</el-button>
44
-          <el-button @click="cancel">取 消</el-button>
42
+        <div style="text-align: center;" v-if="taskName && taskName == '变更登记'">
43
+          <el-button type="primary" @click="submitForm">提交申请</el-button>
44
+        </div>
45
+        <div style="text-align: center;" v-if="taskName && taskName == '变更确认'">
46
+          <el-button type="primary" @click="submitForm">确认变更</el-button>
45
         </div>
47
         </div>
46
       </el-col>
48
       </el-col>
47
       <el-col :span="6" :xs="24" v-if="isFlow">
49
       <el-col :span="6" :xs="24" v-if="isFlow">
131
       registrantName: '',
133
       registrantName: '',
132
       // 表单校验
134
       // 表单校验
133
       rules: {
135
       rules: {
136
+        projectId: [
137
+          { required: true, message: '请选择项目编号', trigger: 'blur' }
138
+        ],
139
+        content: [
140
+          { required: true, message: '请输入变更内容', trigger: 'blur' }
141
+        ]
134
       }
142
       }
135
     };
143
     };
136
   },
144
   },
140
     if (this.$route.query.projectId) {
148
     if (this.$route.query.projectId) {
141
       getProject(this.$route.query.projectId).then(res => {
149
       getProject(this.$route.query.projectId).then(res => {
142
         if (res.data) {
150
         if (res.data) {
143
-          this.$set(this.form, 'projectId', res.data.projectId)
151
+          this.$set(this.form, 'projectId', res.data.projectId);
144
           this.handleSelectProject(res.data.projectId)
152
           this.handleSelectProject(res.data.projectId)
145
         }
153
         }
146
       })
154
       })
164
         else {
172
         else {
165
           this.formTotal = 1;
173
           this.formTotal = 1;
166
           this.form = res.data;
174
           this.form = res.data;
175
+          this.registrantName = res.data.registrantUser.nickName
167
           if (res.data.projectId) {
176
           if (res.data.projectId) {
168
             getProject(res.data.projectId).then(response => {
177
             getProject(res.data.projectId).then(response => {
169
               this.chooseProject = response.data;
178
               this.chooseProject = response.data;
213
         this.chooseProject = val[0]
222
         this.chooseProject = val[0]
214
         this.isSelect = true
223
         this.isSelect = true
215
         this.form.projectId = val[0].projectId
224
         this.form.projectId = val[0].projectId
225
+        this.$refs.form.validateField('projectId');
226
+        if (this.chooseProject.projectLeader)
227
+          this.leaderList.push(this.chooseProject.projectLeader);
228
+        getUsersDeptLeaderByDept({ deptId: 109 }).then(res => {
229
+          this.leaderList.push(res.data.userId);
230
+        })
216
         if (this.chooseProject.undertakingDept) {
231
         if (this.chooseProject.undertakingDept) {
217
           let arr = this.chooseProject.undertakingDept.split(',')
232
           let arr = this.chooseProject.undertakingDept.split(',')
218
           this.getLeader(arr);
233
           this.getLeader(arr);
230
         })
245
         })
231
       }
246
       }
232
     },
247
     },
233
-    // 取消按钮
234
-    cancel() {
235
-      this.open = false;
236
-      this.reset();
237
-    },
238
-    // 表单重置
239
-    reset() {
240
-      this.form = {
241
-        changeId: null,
242
-        projectId: null,
243
-        content: null,
244
-        registrant: null,
245
-        registerTime: null
246
-      };
247
-      this.resetForm("form");
248
-    },
249
-    /** 搜索按钮操作 */
250
-    handleQuery() {
251
-      this.queryParams.pageNum = 1;
252
-      this.getList();
253
-    },
254
-    /** 重置按钮操作 */
255
-    resetQuery() {
256
-      this.resetForm("queryForm");
257
-      this.handleQuery();
258
-    },
259
-    // 多选框选中数据
260
-    handleSelectionChange(selection) {
261
-      this.ids = selection.map(item => item.changeId)
262
-      this.single = selection.length !== 1
263
-      this.multiple = !selection.length
264
-    },
265
-    /** 新增按钮操作 */
266
-    handleAdd() {
267
-      this.reset();
268
-      this.open = true;
269
-      this.title = "添加cmc项目变更";
270
-    },
271
-    /** 修改按钮操作 */
272
-    handleUpdate(row) {
273
-      this.reset();
274
-      const changeId = row.changeId || this.ids
275
-      getProjectChange(changeId).then(response => {
276
-        this.form = response.data;
277
-        this.open = true;
278
-        this.title = "修改cmc项目变更";
279
-      });
280
-    },
281
     /** 提交按钮 */
248
     /** 提交按钮 */
282
     submitForm() {
249
     submitForm() {
283
       this.$refs["form"].validate(valid => {
250
       this.$refs["form"].validate(valid => {
317
         }
284
         }
318
       });
285
       });
319
     },
286
     },
320
-    /** 删除按钮操作 */
321
-    handleDelete(row) {
322
-      const changeIds = row.changeId || this.ids;
323
-      this.$modal.confirm('是否确认删除cmc项目变更编号为"' + changeIds + '"的数据项?').then(function () {
324
-        return delProjectChange(changeIds);
325
-      }).then(() => {
326
-        this.getList();
327
-        this.$modal.msgSuccess("删除成功");
328
-      }).catch(() => { });
329
-    },
330
-    /** 导出按钮操作 */
331
-    handleExport() {
332
-      this.download('oa/projectChange/export', {
333
-        ...this.queryParams
334
-      }, `projectChange_${new Date().getTime()}.xlsx`)
335
-    }
336
   }
287
   }
337
 };
288
 };
338
 </script>
289
 </script>
290
+<style lang="scss" scoped>
291
+@import "@/assets/styles/element-reset.scss";
292
+</style>

+ 6
- 3
oa-ui/src/views/flowable/form/components/conditionDisplay.vue View File

1
 <!--
1
 <!--
2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-04-23 17:08:16
3
  * @Date: 2024-04-23 17:08:16
4
- * @LastEditors: wrh
5
- * @LastEditTime: 2024-07-04 12:58:36
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-08-02 16:39:46
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div>
8
   <div>
30
     <brand-form :key="'brand'+taskForm.taskId" :taskForm="taskForm" :taskName="''" v-else-if="taskForm.procDefName == '品牌项目支付'"></brand-form>
30
     <brand-form :key="'brand'+taskForm.taskId" :taskForm="taskForm" :taskName="''" v-else-if="taskForm.procDefName == '品牌项目支付'"></brand-form>
31
     <deposit-form :key="'deposit'+taskForm.taskId" :taskForm="taskForm" :taskName="''" v-else-if="taskForm.procDefName == '保证金审批'"></deposit-form>
31
     <deposit-form :key="'deposit'+taskForm.taskId" :taskForm="taskForm" :taskName="''" v-else-if="taskForm.procDefName == '保证金审批'"></deposit-form>
32
     <device-form :key="'device'+taskForm.taskId" :taskForm="taskForm" :taskName="''" :formDisabled="true" v-else-if="taskForm.procDefName == '设备审批'"></device-form>
32
     <device-form :key="'device'+taskForm.taskId" :taskForm="taskForm" :taskName="''" :formDisabled="true" v-else-if="taskForm.procDefName == '设备审批'"></device-form>
33
+    <change-form :key="'change'+taskForm.taskId" :taskForm="taskForm" :taskName="''" v-else-if="taskForm.procDefName == '项目变更'"></change-form>
33
   </div>
34
   </div>
34
 </template>
35
 </template>
35
 
36
 
55
 import BrandForm from '../business/brandForm.vue';
56
 import BrandForm from '../business/brandForm.vue';
56
 import DepositForm from '../finance/depositForm.vue';
57
 import DepositForm from '../finance/depositForm.vue';
57
 import DeviceForm from '../oa/deviceForm.vue';
58
 import DeviceForm from '../oa/deviceForm.vue';
59
+import changeForm from "../changeForm.vue";
58
 export default {
60
 export default {
59
   props: {
61
   props: {
60
     passingParam: {
62
     passingParam: {
87
     BudgetTab,
89
     BudgetTab,
88
     BrandForm,
90
     BrandForm,
89
     DepositForm,
91
     DepositForm,
90
-    DeviceForm
92
+    DeviceForm,
93
+    changeForm
91
   },
94
   },
92
   data() {
95
   data() {
93
     return {
96
     return {

+ 176
- 0
oa-ui/src/views/flowable/form/components/planPrint.vue View File

1
+<template>
2
+  <div>
3
+    <div id="printPlan">
4
+      <h2 class="text-center title">技术交底记录表</h2>
5
+      <table border="1">
6
+        <tr>
7
+          <td :colspan="1" class="fontbold">项目名称</td>
8
+          <td :colspan="4">{{ form.projectName }}</td>
9
+          <td :colspan="2" class="fontbold">项目编号</td>
10
+          <td :colspan="2">{{ form.projectNumber }}</td>
11
+        </tr>
12
+        <tr>
13
+          <td :colspan="1" class="fontbold">承担部门</td>
14
+          <td :colspan="4">{{ getDeptNames(form.undertakingDept) }}</td>
15
+          <td :colspan="2" class="fontbold">项目负责人</td>
16
+          <td :colspan="2">{{ getUserName(form.projectLeader) }}</td>
17
+        </tr>
18
+        <tr>
19
+          <td :colspan="1" class="fontbold">技术负责人</td>
20
+          <td :colspan="4">{{ getUserName(form.technicalDirector) }}</td>
21
+          <td :colspan="1" class="fontbold">技术设计人</td>
22
+          <td :colspan="4" style="white-space: pre-wrap;">{{ getUserName(form.technicalDesigner) }}</td>
23
+        </tr>
24
+        <tr>
25
+          
26
+        </tr>
27
+        <tr>
28
+          <td :colspan="1" class="fontbold">质量检查员</td>
29
+          <td :colspan="8" style="white-space: pre-wrap;">{{ formartVal(form.qualityInspector) }}</td>
30
+        </tr>
31
+        <tr>
32
+          <td :colspan="1" class="fontbold">技术安排意见</td>
33
+          <td :colspan="4">{{ form.planComment }}</td>
34
+          <td :colspan="2" style="text-align:left;min-width:120px;">签名:<span class="auditor">{{
35
+            getUserName(form.technicalPlanner) }}</span></td>
36
+          <td :colspan="2" style="text-align:left;width:240px;">日期:{{ form.technicalTime }}</td>
37
+        </tr>
38
+        <tr>
39
+          <td :colspan="1" class="fontbold">方案说明</td>
40
+          <td :colspan="4">{{ form.designDescription }}</td>
41
+          <td :colspan="2" style="text-align:left;min-width:120px;">
42
+            签名:<span class="auditor">{{ getUserName(form.technicalDesigner) }}</span>
43
+          </td>
44
+          <td :colspan="2" style="text-align:left;width:240px;">日期:{{ form.technicalUploadTime }}</td>
45
+        </tr>
46
+        <tr>
47
+          <td :colspan="1" class="fontbold">技术方案审核意见</td>
48
+          <td :colspan="4">{{ form.technicalComment }}</td>
49
+          <td :colspan="2" style="text-align:left;min-width:120px;">
50
+            签名:<span class="auditor">{{ getUserName(form.technicalAuditor) }}</span>
51
+          </td>
52
+          <td :colspan="2" style="text-align:left;width:240px;">日期:{{ form.techApprovalTime }}</td>
53
+        </tr>
54
+        <tr>
55
+          <td :colspan="1" class="fontbold">总工程师审核意见</td>
56
+          <td :colspan="4">{{ form.manageComment }}</td>
57
+          <td :colspan="2" style="text-align:left;min-width:120px;">
58
+            签名:<span class="auditor">{{ getUserName(form.managerUserId) }}</span>
59
+          </td>
60
+          <td :colspan="2" style="text-align:left;width:240px;">日期:{{ form.manageApprovalTime }}</td>
61
+        </tr>
62
+      </table>
63
+    </div>
64
+    <div class="text-center mt20">
65
+      <el-button type="primary" v-print="print">确认打印</el-button>
66
+      <el-button @click="$emit('cancel')">取消</el-button>
67
+    </div>
68
+  </div>
69
+</template>
70
+
71
+<script>
72
+export default {
73
+  props: {
74
+    form: {
75
+      type: Object
76
+    }
77
+  },
78
+  data() {
79
+    return {
80
+      settleSum: {},
81
+      deptSettleList: [],
82
+      deductionsList: [],
83
+      actualSumSettle: '',
84
+      undertakingDept: [],
85
+      print: {
86
+        id: 'printPlan',
87
+        popTitle: '技术方案表', // 打印配置页上方标题
88
+        extraHead: '', //最上方的头部文字,附加在head标签上的额外标签,使用逗号分隔
89
+        preview: false, // 是否启动预览模式,默认是false(开启预览模式,可以先预览后打印)
90
+        previewTitle: '', // 打印预览的标题(开启预览模式后出现),
91
+        previewPrintBtnLabel: '', // 打印预览的标题的下方按钮文本,点击可进入打印(开启预览模式后出现)
92
+        zIndex: '', // 预览的窗口的z-index,默认是 20002(此值要高一些,这涉及到预览模式是否显示在最上面)
93
+        previewBeforeOpenCallback() { }, //预览窗口打开之前的callback(开启预览模式调用)
94
+        previewOpenCallback() { }, // 预览窗口打开之后的callback(开启预览模式调用)
95
+        beforeOpenCallback() { }, // 开启打印前的回调事件
96
+        openCallback() { }, // 调用打印之后的回调事件
97
+        closeCallback() { }, //关闭打印的回调事件(无法确定点击的是确认还是取消)
98
+        url: '',
99
+        standard: '',
100
+        extraCss: ''
101
+      }
102
+    }
103
+  },
104
+  methods:{
105
+    formartVal(val){
106
+      if (Array.isArray(val)) {
107
+        let newval = val.join(',');
108
+        let res = this.getUserNames(newval);
109
+        return res
110
+      }
111
+    }
112
+  }
113
+}
114
+</script>
115
+
116
+<style lang="scss" scoped>
117
+table {
118
+  /*边框*/
119
+  /* border: 1px solid black; */
120
+  width: 90%;
121
+  // text-align: center;
122
+  border-collapse: collapse;
123
+  margin: 0 auto;
124
+
125
+  /*设置背景颜色*/
126
+  /* background-color: #bfa; */
127
+  td {
128
+    padding: 5px;
129
+    // line-height: 30px;
130
+  }
131
+}
132
+
133
+.header {
134
+  font-family: '黑体';
135
+  font-size: 16px;
136
+  font-weight: bold;
137
+  line-height: 30px;
138
+}
139
+
140
+.bg {
141
+  background-color: #eee;
142
+  -webkit-print-color-adjust: exact;
143
+}
144
+
145
+.title {
146
+  font-family: '黑体';
147
+  font-size: 20px;
148
+  font-weight: bold;
149
+  line-height: 30px;
150
+}
151
+
152
+.fontbold {
153
+  font-weight: bold;
154
+  min-width: 150px;
155
+  text-align: center;
156
+}
157
+
158
+.conment-width {
159
+  // max-width: 200px;
160
+}
161
+
162
+
163
+@page {
164
+  size: auto;
165
+  /* 去除页脚 */
166
+  margin-bottom: 0;
167
+  // 横向A4
168
+  // size:A4 landscape;
169
+}
170
+
171
+@media print {
172
+  #print table {
173
+    width: 100%;
174
+  }
175
+}
176
+</style>

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

2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-07-30 16:56:08
3
  * @Date: 2024-07-30 16:56:08
4
  * @LastEditors: Please set LastEditors
4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-07-31 17:39:52
5
+ * @LastEditTime: 2024-08-02 09:26:11
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div>
8
   <div>
17
         </tr>
17
         </tr>
18
         <tr>
18
         <tr>
19
           <td :colspan="1" class="fontbold">承担部门</td>
19
           <td :colspan="1" class="fontbold">承担部门</td>
20
-          <td :colspan="4">{{ getDeptName(form.undertakingDept) }}</td>
20
+          <td :colspan="4">{{ getDeptNames(form.undertakingDept) }}</td>
21
           <td :colspan="2" class="fontbold">项目负责人</td>
21
           <td :colspan="2" class="fontbold">项目负责人</td>
22
           <td :colspan="2">{{ getUserName(form.projectLeader) }}</td>
22
           <td :colspan="2">{{ getUserName(form.projectLeader) }}</td>
23
         </tr>
23
         </tr>

+ 146
- 0
oa-ui/src/views/flowable/form/components/technicalPrint.vue View File

1
+<template>
2
+  <div>
3
+    <div id="printTechnical">
4
+      <h2 class="text-center title">技术交底记录表</h2>
5
+      <table border="1">
6
+        <tr>
7
+          <td :colspan="1" class="fontbold">项目名称</td>
8
+          <td :colspan="4">{{ form.projectName }}</td>
9
+          <td :colspan="2" class="fontbold">项目编号</td>
10
+          <td :colspan="2">{{ form.projectNumber }}</td>
11
+        </tr>
12
+        <tr>
13
+          <td :colspan="1" class="fontbold">承担部门</td>
14
+          <td :colspan="4">{{ getDeptNames(form.undertakingDept) }}</td>
15
+          <td :colspan="2" class="fontbold">项目负责人</td>
16
+          <td :colspan="2">{{ getUserName(form.projectLeader) }}</td>
17
+        </tr>
18
+        <tr>
19
+          <td :colspan="1" class="fontbold">接受交底人</td>
20
+          <td :colspan="8">{{ getUserName(form.disclosureAccepter) }}</td>
21
+        </tr>
22
+        <tr>
23
+          <td :colspan="1" class="fontbold">技术交底内容</td>
24
+          <td :colspan="8" style="white-space: pre-wrap;">{{ form.content }}</td>
25
+        </tr>
26
+        <tr>
27
+          <td :colspan="1" class="fontbold">技术交底意见</td>
28
+          <td :colspan="4">{{ form.disclosureComment }}</td>
29
+          <td :colspan="2" style="text-align:left;min-width:120px;">签名:<span class="auditor">{{
30
+            getUserName(form.disclosurer) }}</span></td>
31
+          <td :colspan="2" style="text-align:left;width:240px;">日期:{{ form.disclosureTime }}</td>
32
+        </tr>
33
+        <tr>
34
+          <td :colspan="1" class="fontbold">接受交底意见</td>
35
+          <td :colspan="4">{{ form.acceptComment }}</td>
36
+          <td :colspan="2" style="text-align:left;min-width:120px;">
37
+            签名:<span class="auditor">{{ getUserName(form.disclosureAccepter) }}</span>
38
+          </td>
39
+          <td :colspan="2" style="text-align:left;width:240px;">日期:{{ form.acceptTime }}</td>
40
+        </tr>
41
+      </table>
42
+    </div>
43
+    <div class="text-center mt20">
44
+      <el-button type="primary" v-print="print">确认打印</el-button>
45
+      <el-button @click="$emit('cancel')">取消</el-button>
46
+    </div>
47
+  </div>
48
+</template>
49
+
50
+<script>
51
+export default {
52
+  props: {
53
+    form: {
54
+      type: Object
55
+    }
56
+  },
57
+  data() {
58
+    return {
59
+      settleSum: {},
60
+      deptSettleList: [],
61
+      deductionsList: [],
62
+      actualSumSettle: '',
63
+      undertakingDept: [],
64
+      print: {
65
+        id: 'printTechnical',
66
+        popTitle: '技术交底记录表', // 打印配置页上方标题
67
+        extraHead: '', //最上方的头部文字,附加在head标签上的额外标签,使用逗号分隔
68
+        preview: false, // 是否启动预览模式,默认是false(开启预览模式,可以先预览后打印)
69
+        previewTitle: '', // 打印预览的标题(开启预览模式后出现),
70
+        previewPrintBtnLabel: '', // 打印预览的标题的下方按钮文本,点击可进入打印(开启预览模式后出现)
71
+        zIndex: '', // 预览的窗口的z-index,默认是 20002(此值要高一些,这涉及到预览模式是否显示在最上面)
72
+        previewBeforeOpenCallback() { }, //预览窗口打开之前的callback(开启预览模式调用)
73
+        previewOpenCallback() { }, // 预览窗口打开之后的callback(开启预览模式调用)
74
+        beforeOpenCallback() { }, // 开启打印前的回调事件
75
+        openCallback() { }, // 调用打印之后的回调事件
76
+        closeCallback() { }, //关闭打印的回调事件(无法确定点击的是确认还是取消)
77
+        url: '',
78
+        standard: '',
79
+        extraCss: ''
80
+      }
81
+    }
82
+  },
83
+}
84
+</script>
85
+
86
+<style lang="scss" scoped>
87
+table {
88
+  /*边框*/
89
+  /* border: 1px solid black; */
90
+  width: 90%;
91
+  // text-align: center;
92
+  border-collapse: collapse;
93
+  margin: 0 auto;
94
+
95
+  /*设置背景颜色*/
96
+  /* background-color: #bfa; */
97
+  td {
98
+    padding: 5px;
99
+    // line-height: 30px;
100
+  }
101
+}
102
+
103
+.header {
104
+  font-family: '黑体';
105
+  font-size: 16px;
106
+  font-weight: bold;
107
+  line-height: 30px;
108
+}
109
+
110
+.bg {
111
+  background-color: #eee;
112
+  -webkit-print-color-adjust: exact;
113
+}
114
+
115
+.title {
116
+  font-family: '黑体';
117
+  font-size: 20px;
118
+  font-weight: bold;
119
+  line-height: 30px;
120
+}
121
+
122
+.fontbold {
123
+  font-weight: bold;
124
+  min-width: 150px;
125
+  text-align: center;
126
+}
127
+
128
+.conment-width {
129
+  // max-width: 200px;
130
+}
131
+
132
+
133
+@page {
134
+  size: auto;
135
+  /* 去除页脚 */
136
+  margin-bottom: 0;
137
+  // 横向A4
138
+  // size:A4 landscape;
139
+}
140
+
141
+@media print {
142
+  #print table {
143
+    width: 100%;
144
+  }
145
+}
146
+</style>

+ 15
- 17
oa-ui/src/views/flowable/form/finance/borrowForm.vue View File

133
               <el-form-item label="核准金额" prop="managerAmount">
133
               <el-form-item label="核准金额" prop="managerAmount">
134
                 <el-input v-model="form.managerAmount" placeholder="请输入核准金额"
134
                 <el-input v-model="form.managerAmount" placeholder="请输入核准金额"
135
                   :disabled="taskName != '分管审核' && taskName != '党工团审核'" />
135
                   :disabled="taskName != '分管审核' && taskName != '党工团审核'" />
136
-                <span style="color:#E74C3C" v-if="form.managerAmount && form.borrowUsage == 0">超过预算金额:{{
136
+                <span style="color:#E74C3C" v-if="exceed && form.managerAmount && form.borrowUsage == 0">超过预算金额:{{
137
     getMoreAmount('1') }}</span>
137
     getMoreAmount('1') }}</span>
138
               </el-form-item>
138
               </el-form-item>
139
             </el-col>
139
             </el-col>
279
             </el-col>
279
             </el-col>
280
           </el-row>
280
           </el-row>
281
         </el-form>
281
         </el-form>
282
-        <div style="text-align: center;" v-if="taskName !=''">
282
+        <div style="text-align: center;" v-if="taskName != ''">
283
           <el-button type="primary" @click="submitForm">提 交</el-button>
283
           <el-button type="primary" @click="submitForm">提 交</el-button>
284
         </div>
284
         </div>
285
       </el-col>
285
       </el-col>
454
             { required: true, message: '请输入部门负责人意见', trigger: 'blur' },
454
             { required: true, message: '请输入部门负责人意见', trigger: 'blur' },
455
           ],
455
           ],
456
         }
456
         }
457
-        // } else if (this.taskName == '项目部审核') {
458
-        //   this.rules = {
459
-        //     xmComment: [
460
-        //       { required: true, message: '请输入项目部校核意见', trigger: 'blur' }
461
-        //     ]
462
-        //   }
463
       } else if (this.taskName == '分管审核') {
457
       } else if (this.taskName == '分管审核') {
464
         this.rules = {
458
         this.rules = {
465
           managerComment: [
459
           managerComment: [
506
         else {
500
         else {
507
           this.formTotal = 1;
501
           this.formTotal = 1;
508
           this.form = res.data;
502
           this.form = res.data;
509
-          if (this.form.borrowUsage == '0') {
510
-            if ((this.totalBudget - this.form.applyAmount) < 0) {
511
-              this.exceed = true;
512
-            } else {
513
-              this.exceed = false;
514
-            }
515
-          } else {
516
-            this.exceed = false;
517
-          }
503
+
518
           this.hanldeChangeType();
504
           this.hanldeChangeType();
519
           this.handleSelectProject(res.data.projectId)
505
           this.handleSelectProject(res.data.projectId)
520
           this.getBudgetSettle()
506
           this.getBudgetSettle()
529
         let budget = budgetData.rows[0];
515
         let budget = budgetData.rows[0];
530
         this.totalBudget = budget.totalBudget
516
         this.totalBudget = budget.totalBudget
531
       }
517
       }
518
+      if (budgetData.total == 0) {
519
+        this.totalBudget = 0
520
+      }
521
+      if (this.form.borrowUsage == '0') {
522
+        if ((this.totalBudget - this.form.applyAmount) < 0) {
523
+          this.exceed = true;
524
+        } else {
525
+          this.exceed = false;
526
+        }
527
+      } else {
528
+        this.exceed = false;
529
+      }
532
       let borrow = await listBorrow({ projectId: this.form.projectId })
530
       let borrow = await listBorrow({ projectId: this.form.projectId })
533
       if (borrow.total != 0) {
531
       if (borrow.total != 0) {
534
         let borrowList = borrow.rows;
532
         let borrowList = borrow.rows;

+ 15
- 6
oa-ui/src/views/flowable/form/projectProcess/planTab.vue View File

1
 <!--
1
 <!--
2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-04-19 15:32:00
3
  * @Date: 2024-04-19 15:32:00
4
- * @LastEditors: wrh
5
- * @LastEditTime: 2024-07-08 18:00:55
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-08-02 10:43:19
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div class="app-container">
8
   <div class="app-container">
9
     <el-empty description="技术方案未编制" v-if="!haveTechnicalPlan"></el-empty>
9
     <el-empty description="技术方案未编制" v-if="!haveTechnicalPlan"></el-empty>
10
     <div v-if="haveTechnicalPlan">
10
     <div v-if="haveTechnicalPlan">
11
+      <el-button type="success" @click="openPrint = true">打印</el-button>
11
       <h3 class="text-center"><b>{{ form.projectNumber + '-' + form.projectName + ' 技术方案' }}</b></h3>
12
       <h3 class="text-center"><b>{{ form.projectNumber + '-' + form.projectName + ' 技术方案' }}</b></h3>
12
       <el-form ref="technicalPlan" :model="form" :rules="rules" label-width="125px" disabled>
13
       <el-form ref="technicalPlan" :model="form" :rules="rules" label-width="125px" disabled>
13
         <el-form-item label="项目编号:" prop="projectNumber">
14
         <el-form-item label="项目编号:" prop="projectNumber">
132
         </el-row>
133
         </el-row>
133
       </el-form>
134
       </el-form>
134
     </div>
135
     </div>
136
+    <el-dialog title="技术方案表格预览" :visible.sync="openPrint" width="65%" append-to-body>
137
+      <plan-print :form="form" @cancel="openPrint = false"></plan-print>
138
+    </el-dialog>
135
   </div>
139
   </div>
136
 </template>
140
 </template>
137
 
141
 
146
   addTechnicalPlan,
150
   addTechnicalPlan,
147
   updateTechnicalPlan,
151
   updateTechnicalPlan,
148
 } from "@/api/oa/technical/technicalPlan";
152
 } from "@/api/oa/technical/technicalPlan";
153
+import PlanPrint from '../components/planPrint.vue';
149
 export default {
154
 export default {
150
-  components: { technicalPlan },
155
+  components: { technicalPlan, PlanPrint },
151
   props: {
156
   props: {
152
     taskForm: {
157
     taskForm: {
153
       type: Object,
158
       type: Object,
181
       form: {},
186
       form: {},
182
       rules: {},
187
       rules: {},
183
       userList: [],
188
       userList: [],
189
+      openPrint:false,
184
     };
190
     };
185
   },
191
   },
186
   mounted() {
192
   mounted() {
206
             if (projectRes.data) {
212
             if (projectRes.data) {
207
               this.$set(this.form, "projectNumber", projectRes.data.projectNumber);
213
               this.$set(this.form, "projectNumber", projectRes.data.projectNumber);
208
               this.$set(this.form, "projectName", projectRes.data.projectName);
214
               this.$set(this.form, "projectName", projectRes.data.projectName);
215
+              this.$set(this.form, "projectLeader", projectRes.data.projectLeader);
216
+              this.$set(this.form, "undertakingDept", projectRes.data.undertakingDept);
209
             }
217
             }
210
           }
218
           }
211
         }
219
         }
221
         // 如果是一个字符串,则按逗号分割并转换为整数数组
229
         // 如果是一个字符串,则按逗号分割并转换为整数数组
222
         const qualityInspectorArr = form.qualityInspector.split(',').map(inspector => parseInt(inspector, 10));
230
         const qualityInspectorArr = form.qualityInspector.split(',').map(inspector => parseInt(inspector, 10));
223
         return qualityInspectorArr
231
         return qualityInspectorArr
224
-       } else if (form.qualityInspector === null || form.qualityInspector === undefined || form.qualityInspector === '') {
225
-         // 如果为空、null或undefined,则设置为空数组
232
+      } else if (form.qualityInspector === null || form.qualityInspector === undefined || form.qualityInspector === '') {
233
+        // 如果为空、null或undefined,则设置为空数组
226
         return []
234
         return []
227
-       }
235
+      }
228
     },
236
     },
229
     // 查询用户列表
237
     // 查询用户列表
230
     getUserList() {
238
     getUserList() {
244
 
252
 
245
 <style lang="scss" scoped>
253
 <style lang="scss" scoped>
246
 @import "@/assets/styles/element-reset.scss";
254
 @import "@/assets/styles/element-reset.scss";
255
+
247
 ::v-deep .el-input.is-disabled .el-input__inner {
256
 ::v-deep .el-input.is-disabled .el-input__inner {
248
   color: #686a6e;
257
   color: #686a6e;
249
 }
258
 }

+ 6
- 5
oa-ui/src/views/flowable/form/projectProcess/safeTab.vue View File

29
           <el-input v-model="form.insideComment" placeholder="请输入信息安全管理要求" type="textarea" :autosize="{ minRows: 8 }" />
29
           <el-input v-model="form.insideComment" placeholder="请输入信息安全管理要求" type="textarea" :autosize="{ minRows: 8 }" />
30
         </el-form-item>
30
         </el-form-item>
31
         <el-form-item label="安全交底意见" prop="disclosureComment">
31
         <el-form-item label="安全交底意见" prop="disclosureComment">
32
-          <el-input v-model="form.disclosureComment" placeholder="请输入安全交底意见" type="textarea" :autosize="{ minRows: 4 }" />
32
+          <el-input v-model="form.disclosureComment" placeholder="请输入安全交底意见" type="textarea"
33
+            :autosize="{ minRows: 4 }" />
33
         </el-form-item>
34
         </el-form-item>
34
         <el-row>
35
         <el-row>
35
           <el-col :span="6" :xs="24" :offset="12">
36
           <el-col :span="6" :xs="24" :offset="12">
62
       </el-form>
63
       </el-form>
63
     </div>
64
     </div>
64
     <el-dialog title="安全交底表格预览" :visible.sync="openPrint" width="65%" append-to-body>
65
     <el-dialog title="安全交底表格预览" :visible.sync="openPrint" width="65%" append-to-body>
65
-      <safe-print :form="form"></safe-print>
66
+      <safe-print :form="form" @cancel="openPrint = false"></safe-print>
66
     </el-dialog>
67
     </el-dialog>
67
   </div>
68
   </div>
68
 </template>
69
 </template>
95
     projectName(newval) {
96
     projectName(newval) {
96
       this.$set(this.form, "projectName", newval);
97
       this.$set(this.form, "projectName", newval);
97
     },
98
     },
98
-    'taskForm.formId'(){
99
+    'taskForm.formId'() {
99
       this.loading = true;
100
       this.loading = true;
100
       this.initForm();
101
       this.initForm();
101
     }
102
     }
107
       form: {},
108
       form: {},
108
       rules: {},
109
       rules: {},
109
       userList: [],
110
       userList: [],
110
-      loading:false,
111
-      openPrint:false,
111
+      loading: false,
112
+      openPrint: false,
112
     }
113
     }
113
   },
114
   },
114
   mounted() {
115
   mounted() {

+ 15
- 0
oa-ui/src/views/flowable/form/projectProcess/technicalTab.vue View File

1
+<!--
2
+ * @Author: ysh
3
+ * @Date: 2024-07-04 17:37:29
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-08-02 09:46:48
6
+-->
1
 <template>
7
 <template>
2
   <div class="app-container" v-loading="loading">
8
   <div class="app-container" v-loading="loading">
3
     <el-empty description="未进行技术交底" v-if="isEmpty"></el-empty>
9
     <el-empty description="未进行技术交底" v-if="isEmpty"></el-empty>
4
     <div v-if="!isEmpty">
10
     <div v-if="!isEmpty">
11
+      <el-button type="success" @click="openPrint = true">打印</el-button>
5
       <h3 class="text-center"><b>{{ form.projectNumber + '-' + form.projectName + ' 技术交底' }}</b></h3>
12
       <h3 class="text-center"><b>{{ form.projectNumber + '-' + form.projectName + ' 技术交底' }}</b></h3>
6
       <el-form ref="technicalForm" :model="form" :rules="rules" label-width="125px" disabled>
13
       <el-form ref="technicalForm" :model="form" :rules="rules" label-width="125px" disabled>
7
         <el-form-item label="项目编号:" prop="projectNumber">
14
         <el-form-item label="项目编号:" prop="projectNumber">
64
         </el-row>
71
         </el-row>
65
       </el-form>
72
       </el-form>
66
     </div>
73
     </div>
74
+    <el-dialog title="技术交底表格预览" :visible.sync="openPrint" width="65%" append-to-body>
75
+      <technical-print :form="form" @cancel="openPrint = false"></technical-print>
76
+    </el-dialog>
67
   </div>
77
   </div>
68
 </template>
78
 </template>
69
 
79
 
71
 import { listTechnical, getTechnical, delTechnical, addTechnical, updateTechnical } from "@/api/oa/technical/technical";
81
 import { listTechnical, getTechnical, delTechnical, addTechnical, updateTechnical } from "@/api/oa/technical/technical";
72
 import { listUser } from '@/api/system/user';
82
 import { listUser } from '@/api/system/user';
73
 import { getProject } from "@/api/oa/project/project";
83
 import { getProject } from "@/api/oa/project/project";
84
+import technicalPrint from '../components/technicalPrint.vue';
74
 export default {
85
 export default {
86
+  components: { technicalPrint },
75
   props: {
87
   props: {
76
     taskForm: {
88
     taskForm: {
77
       type: Object,
89
       type: Object,
106
       rules: {},
118
       rules: {},
107
       userList: [],
119
       userList: [],
108
       loading: false,
120
       loading: false,
121
+      openPrint:false,
109
     }
122
     }
110
   },
123
   },
111
   mounted() {
124
   mounted() {
127
               if (res.data) {
140
               if (res.data) {
128
                 this.$set(this.form, "projectNumber", res.data.projectNumber);
141
                 this.$set(this.form, "projectNumber", res.data.projectNumber);
129
                 this.$set(this.form, "projectName", res.data.projectName);
142
                 this.$set(this.form, "projectName", res.data.projectName);
143
+                this.$set(this.form, "projectLeader", res.data.projectLeader);
144
+                this.$set(this.form, "undertakingDept", res.data.undertakingDept);
130
                 this.loading = false;
145
                 this.loading = false;
131
               }
146
               }
132
             })
147
             })

+ 4
- 3
oa-ui/src/views/flowable/task/todo/detail/index.vue View File

1
 <!--
1
 <!--
2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-01-03 09:23:11
3
  * @Date: 2024-01-03 09:23:11
4
- * @LastEditors: wrh
5
- * @LastEditTime: 2024-07-04 13:07:30
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-08-02 16:18:05
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div class="app-container">
8
   <div class="app-container">
480
       if (this.taskName == '员工填报' || this.taskForm.procDefName == '用车审批' || this.taskForm.procDefName == '设备审批' || this.taskForm.procDefName == '项目流转'
480
       if (this.taskName == '员工填报' || this.taskForm.procDefName == '用车审批' || this.taskForm.procDefName == '设备审批' || this.taskForm.procDefName == '项目流转'
481
         || (this.taskForm.procDefName == '项目预算' && this.taskName != '预算审核') || this.taskForm.procDefName == '借款审批' || this.taskForm.procDefName == '安全交底' ||
481
         || (this.taskForm.procDefName == '项目预算' && this.taskName != '预算审核') || this.taskForm.procDefName == '借款审批' || this.taskForm.procDefName == '安全交底' ||
482
         this.taskForm.procDefName == '技术交底' || this.taskForm.procDefName == '技术方案' || this.taskForm.procDefName == '承接合同评审' || this.taskForm.procDefName == '分包合同评审'
482
         this.taskForm.procDefName == '技术交底' || this.taskForm.procDefName == '技术方案' || this.taskForm.procDefName == '承接合同评审' || this.taskForm.procDefName == '分包合同评审'
483
-        || this.taskForm.procDefName == '品牌项目支付' || this.taskForm.procDefName == '保证金审批' || this.taskForm.procDefName == '成果归档' || this.taskForm.procDefName == '项目结算') {
483
+        || this.taskForm.procDefName == '品牌项目支付' || this.taskForm.procDefName == '保证金审批' || this.taskForm.procDefName == '成果归档' || this.taskForm.procDefName == '项目结算'
484
+        || this.taskForm.procDefName == '项目变更') {
484
         return false
485
         return false
485
       } else {
486
       } else {
486
         return true
487
         return true

+ 1
- 1
oa-ui/src/views/oa/material/index.vue View File

105
       <el-table-column type="selection" width="55" align="center" />
105
       <el-table-column type="selection" width="55" align="center" />
106
       <el-table-column label="耗材id" align="center" prop="materialId" />
106
       <el-table-column label="耗材id" align="center" prop="materialId" />
107
       <el-table-column label="耗材名称" align="center" prop="name" />
107
       <el-table-column label="耗材名称" align="center" prop="name" />
108
-      <el-table-column label="耗材类别" align="center" prop="type" />
108
+      <!-- <el-table-column label="耗材类别" align="center" prop="type" /> -->
109
       <el-table-column label="规格型号" align="center" prop="series" />
109
       <el-table-column label="规格型号" align="center" prop="series" />
110
       <el-table-column label="耗材品牌" align="center" prop="brand" />
110
       <el-table-column label="耗材品牌" align="center" prop="brand" />
111
       <el-table-column label="存放地点" align="center" prop="place" />
111
       <el-table-column label="存放地点" align="center" prop="place" />

+ 17
- 11
oa-ui/src/views/oa/project/info.vue View File

207
                 <svg-icon slot="prefix" icon-class="form" />
207
                 <svg-icon slot="prefix" icon-class="form" />
208
                 项目预算编制
208
                 项目预算编制
209
               </template>
209
               </template>
210
-              <!-- v-hasPermi="['oa:project:edit']" -->
211
-              <el-link type="primary" @click="openBudget = true"  v-hasPermi="['oa:allproject:query']">项目预算表</el-link>
210
+              <el-link type="primary" @click="openBudget = true" v-if="isProjectLeader">项目预算表</el-link>
211
+              <div v-else>
212
+                <el-link type="primary" @click="openBudget = true" v-hasPermi="['oa:allproject:query']">项目预算表</el-link>
213
+              </div>
212
             </el-descriptions-item>
214
             </el-descriptions-item>
213
           </el-descriptions>
215
           </el-descriptions>
214
         </div>
216
         </div>
437
               <div>
439
               <div>
438
                 <el-table :data="projectChangeList">
440
                 <el-table :data="projectChangeList">
439
                   <el-table-column type="index" label="序号" width="55" align="center" />
441
                   <el-table-column type="index" label="序号" width="55" align="center" />
440
-                  <el-table-column label="项目编号" align="center" width="80" prop="project.projectNumber" />
441
-                  <el-table-column label="项目名称" align="center" prop="project.projectName" />
442
-                  <el-table-column label="承担部门" align="center" prop="undertakingDeptName" />
443
-                  <el-table-column label="项目负责人" align="center" width="90" prop="leaderUser.nickName" />
444
-                  <el-table-column label="变更内容" align="center" width="600" prop="content" />
442
+                  <!-- <el-table-column label="项目编号" align="center" width="80" prop="project.projectNumber" />
443
+                  <el-table-column label="项目名称" align="center" prop="project.projectName" /> -->
444
+                  <!-- <el-table-column label="承担部门" align="center" prop="undertakingDeptName" />
445
+                  <el-table-column label="项目负责人" align="center" width="90" prop="leaderUser.nickName" /> -->
446
+                  <el-table-column label="变更内容" align="center" prop="content" />
445
                   <el-table-column label="登记人" align="center" width="80" prop="registrantUser.nickName" />
447
                   <el-table-column label="登记人" align="center" width="80" prop="registrantUser.nickName" />
446
                   <el-table-column label="登记时间" align="center" prop="registerTime" width="100">
448
                   <el-table-column label="登记时间" align="center" prop="registerTime" width="100">
447
                     <template slot-scope="scope">
449
                     <template slot-scope="scope">
455
         </div>
457
         </div>
456
       </div>
458
       </div>
457
     </div>
459
     </div>
458
-    <el-dialog title="项目预算" :visible.sync="openBudget" width="1000px" append-to-body>
460
+    <el-dialog title="项目预算" :visible.sync="openBudget" width="70%" append-to-body>
459
       <budget-tab :taskForm="taskForm"></budget-tab>
461
       <budget-tab :taskForm="taskForm"></budget-tab>
460
     </el-dialog>
462
     </el-dialog>
461
     <el-dialog title="技术方案审批表" :visible.sync="openPlan" width="1000px" append-to-body>
463
     <el-dialog title="技术方案审批表" :visible.sync="openPlan" width="1000px" append-to-body>
580
       flowData: {},
582
       flowData: {},
581
       recordOpen: false,
583
       recordOpen: false,
582
       clickRow: {
584
       clickRow: {
583
-        procInsId:'',
584
-        deployId:''
585
-      }
585
+        procInsId: '',
586
+        deployId: ''
587
+      },
588
+      isProjectLeader: false
586
     }
589
     }
587
   },
590
   },
588
   methods: {
591
   methods: {
590
       getProject(projectId).then(res => {
593
       getProject(projectId).then(res => {
591
         if (res.data) {
594
         if (res.data) {
592
           this.project = res.data;
595
           this.project = res.data;
596
+          if (this.project.projectLeader == this.$store.state.user.id) {
597
+            this.isProjectLeader = true;
598
+          }
593
           let deptArr = this.project.undertakingDept.split(',');
599
           let deptArr = this.project.undertakingDept.split(',');
594
           let undertakingDept = []
600
           let undertakingDept = []
595
           for (let dept of deptArr) {
601
           for (let dept of deptArr) {

Loading…
Cancel
Save