浏览代码

修改人员详情页,新增预算页

余思翰 1年前
父节点
当前提交
aa25e61f37

+ 1
- 0
oa-ui/src/assets/icons/svg/ArrowDown.svg 查看文件

@@ -0,0 +1 @@
1
+<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><path fill="currentColor" d="M12 14.308L8.192 10.5h7.616z"/></svg>

+ 1
- 0
oa-ui/src/assets/icons/svg/ArrowRight.svg 查看文件

@@ -0,0 +1 @@
1
+<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><path fill="currentColor" d="M10.5 16.3q-.2 0-.35-.137T10 15.8V8.2q0-.225.15-.362t.35-.138q.05 0 .35.15l3.625 3.625q.125.125.175.25t.05.275q0 .15-.05.275t-.175.25L10.85 16.15q-.075.075-.162.113t-.188.037"/></svg>

+ 1
- 0
oa-ui/src/assets/icons/svg/certificate.svg 查看文件

@@ -0,0 +1 @@
1
+<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><path fill="currentColor" fill-rule="evenodd" d="M14.285 2.142a3 3 0 0 0-4.57 0l-.042.05a1 1 0 0 1-.842.348l-.065-.005a3 3 0 0 0-3.23 3.231l.004.065a1 1 0 0 1-.348.842l-.05.042a3 3 0 0 0 0 4.57l.05.042a1 1 0 0 1 .348.842l-.005.065A3.002 3.002 0 0 0 8 15.429V22a1 1 0 0 0 1.555.832L12 21.202l2.445 1.63A1 1 0 0 0 16 22v-6.57a3.002 3.002 0 0 0 2.465-3.196l-.005-.065a1 1 0 0 1 .348-.842l.05-.042a3 3 0 0 0 0-4.57l-.05-.042a1 1 0 0 1-.348-.842l.005-.065a3 3 0 0 0-3.231-3.23l-.065.004a1 1 0 0 1-.842-.348zM10 20.132V16.15a3.002 3.002 0 0 0 4 0v3.98l-1.445-.963a1 1 0 0 0-1.11 0zm4.707-11.425a1 1 0 0 0-1.414-1.414L11 9.586l-.293-.293a1 1 0 0 0-1.414 1.414l1 1a1 1 0 0 0 1.414 0z" clip-rule="evenodd"/></svg>

+ 1
- 0
oa-ui/src/assets/icons/svg/postSalary.svg 查看文件

@@ -0,0 +1 @@
1
+<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 56 56"><path fill="currentColor" fill-rule="evenodd" d="M28 52C14.745 52 4 41.255 4 28S14.745 4 28 4s24 10.745 24 24s-10.745 24-24 24m9.831-35.143h-3.864l-5.71 10.21h-.095l-5.71-10.21h-3.88l6.965 11.817h-4.5v1.797h5.423V33h-5.423v1.797h5.423v4.564h3.467v-4.564h5.423V33h-5.423v-2.53h5.423v-1.797h-4.5z"/></svg>

+ 19
- 5
oa-ui/src/router/index.js 查看文件

@@ -1,8 +1,8 @@
1 1
 /*
2 2
  * @Author: ysh
3 3
  * @Date: 2024-01-03 09:23:11
4
- * @LastEditors: 
5
- * @LastEditTime: 2024-03-22 14:50:52
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-03-25 17:35:52
6 6
  */
7 7
 /*
8 8
  * @Author: ysh
@@ -193,14 +193,14 @@ export const constantRoutes = [
193 193
     ]
194 194
   },
195 195
   {
196
-    path: '/device/expense',
196
+    path: '/device/approval',
197 197
     component: Layout,
198 198
     hidden: true,
199 199
     children: [
200 200
       {
201 201
         path: '',
202
-        component: () => import('@/views/oa/device/expense'),
203
-        name: 'deviceExpense',
202
+        component: () => import('@/views/oa/device/approval'),
203
+        name: 'deviceApproval',
204 204
         meta: { title: '设备明细', icon: '' }
205 205
 
206 206
       }
@@ -217,6 +217,20 @@ export const constantRoutes = [
217 217
         name: 'staffInfo',
218 218
         meta: { title: '员工详情', icon: '' }
219 219
 
220
+      }
221
+    ]
222
+  },
223
+  {
224
+    path: '/budget/add',
225
+    component: Layout,
226
+    hidden: true,
227
+    children: [
228
+      {
229
+        path: '',
230
+        component: () => import('@/views/oa/budget/addBudget'),
231
+        name: 'addBudget',
232
+        meta: { title: '新增预算', icon: '' }
233
+
220 234
       }
221 235
     ]
222 236
   }

+ 18
- 4
oa-ui/src/views/index.vue 查看文件

@@ -1,8 +1,8 @@
1 1
 <!--
2 2
  * @Author: ysh
3 3
  * @Date: 2024-01-03 09:23:11
4
- * @LastEditors: wrh
5
- * @LastEditTime: 2024-03-21 14:50:16
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-03-25 15:08:15
6 6
 -->
7 7
 
8 8
 <template>
@@ -191,6 +191,20 @@ export default {
191 191
           bgColor: '#F7C59F',
192 192
           boxShadow: '0 5px 20px rgba(247,197,159,0.5)',
193 193
           path: '/tender'
194
+        }, {
195
+          id: 8,
196
+          name: '人事管理',
197
+          icon: 'dept',
198
+          bgColor: '#20B2AA',
199
+          boxShadow: '0 5px 20px rgba(32,178,170,0.5)',
200
+          path: '/staff'
201
+        }, {
202
+          id: 9,
203
+          name: '预算管理',
204
+          icon: 'form',
205
+          bgColor: '#E64A19',
206
+          boxShadow: '0 5px 20px rgba(230,74,25,0.5)',
207
+          path: '/budget'
194 208
         }
195 209
       ]
196 210
     }
@@ -294,8 +308,8 @@ export default {
294 308
 
295 309
   .nav-item {
296 310
     background-color: #ffffff;
297
-    max-width: 240px;
298
-    width: 220px;
311
+    // max-width: 240px;
312
+    // width: 220px;
299 313
     flex-grow: 1;
300 314
     height: 120px;
301 315
     border-radius: 10px;

+ 327
- 0
oa-ui/src/views/oa/budget/addBudget.vue 查看文件

@@ -0,0 +1,327 @@
1
+<!--
2
+ * @Author: ysh
3
+ * @Date: 2024-03-25 15:05:59
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-03-25 17:28:17
6
+-->
7
+<template>
8
+  <div>
9
+    <div class="header">
10
+      <div class="back">
11
+        <el-button type="primary" plain @click="goBack">返回</el-button>
12
+      </div>
13
+      <div class="title">
14
+        <div class="title-text">新增预算</div>
15
+        <div class="title-tips">请精准填写预算标准,对应的人员、设备、车辆可直接选择生成固定成本</div>
16
+      </div>
17
+    </div>
18
+    <div class="add-main">
19
+      <el-steps :active="activeStep" align-center finish-status="success">
20
+        <el-step title="选择项目" description="选择想要生成预算的项目"></el-step>
21
+        <el-step title="选择参与人员" description="选择参与的人员,得到人员预算"></el-step>
22
+        <el-step title="选择车辆和设备" description="选择车辆和设备,得到对应预算"></el-step>
23
+        <el-step title="其他预算开支项" description="项目预算其他项"></el-step>
24
+        <el-step title="生成预算表" description="生成最终的项目预算表"></el-step>
25
+      </el-steps>
26
+      <!-- 选择项目 -->
27
+      <div class="project" v-if="activeStep == 0">
28
+        <el-form ref="form1" :model="projectForm" :rules="projectRule" label-width="120px">
29
+          <el-form-item label="项目编号:" prop="projectNumber">
30
+            <div style="display: flex;">
31
+              <el-input v-model="projectForm.projectNumber" placeholder="请选择项目编号" disabled style="width:300px" />
32
+              <el-button @click="openProject = true">选择</el-button>
33
+            </div>
34
+          </el-form-item>
35
+          <el-form-item label="项目名称:" prop="projectName">
36
+            {{ projectForm.projectName }}
37
+          </el-form-item>
38
+          <el-form-item label="项目负责人:" prop="projectLeader">
39
+            {{ projectForm.projectLeader }}
40
+          </el-form-item>
41
+          <el-form-item label="项目类型:" prop="projectType">
42
+            {{ projectForm.projectType }}
43
+          </el-form-item>
44
+          <el-form-item label="项目概况:">
45
+            <table border="1">
46
+              <tr>
47
+                <td style="width:250px;">工作内容</td>
48
+                <td>等级或比例尺</td>
49
+                <td>单位</td>
50
+                <td>工作量</td>
51
+                <td style="width:100px;">要求完成时间</td>
52
+                <td>备注</td>
53
+              </tr>
54
+              <tr v-for="(work, index) in workList" :key="index">
55
+                <td>
56
+                  {{ work.content }}
57
+                </td>
58
+                <td>
59
+                  {{ work.scale }}
60
+                </td>
61
+                <td>
62
+                  {{ work.unit }}
63
+                </td>
64
+                <td>
65
+                  {{ work.workload }}
66
+                </td>
67
+                <td>
68
+                  {{ work.deadline }}
69
+                </td>
70
+                <td>
71
+                  {{ work.remark }}
72
+                </td>
73
+              </tr>
74
+            </table>
75
+          </el-form-item>
76
+          <el-form-item label="甲方单位:">
77
+            {{ projectForm.partyA }}
78
+          </el-form-item>
79
+          <el-form-item label="联系人:">
80
+            {{ projectForm.contactPerson }}
81
+          </el-form-item>
82
+          <el-form-item label="联系方式:">
83
+            {{ projectForm.telephone }}
84
+          </el-form-item>
85
+          <el-form-item label="备注:">
86
+            {{ projectForm.remark }}
87
+          </el-form-item>
88
+          <el-form-item label="项目登记人:">
89
+            {{ projectForm.projectRegistrant }}
90
+          </el-form-item>
91
+          <el-form-item label="登记时间:">
92
+            {{ projectForm.createTime }}
93
+          </el-form-item>
94
+        </el-form>
95
+      </div>
96
+      <!-- 选择参与人员 -->
97
+      <div class="staff" v-if="activeStep == 1">
98
+        <el-breadcrumb separator-class="el-icon-arrow-right">
99
+          <el-breadcrumb-item>选择项目</el-breadcrumb-item>
100
+          <el-breadcrumb-item>{{ projectForm.projectNumber }}</el-breadcrumb-item>
101
+          <el-breadcrumb-item>{{ projectForm.projectName }}</el-breadcrumb-item>
102
+          <el-breadcrumb-item>{{ projectForm.projectLeader }}</el-breadcrumb-item>
103
+        </el-breadcrumb>
104
+        <el-form ref="form2" :model="peopleForm">
105
+          <el-form-item label="选择人员:">
106
+
107
+          </el-form-item>
108
+        </el-form>
109
+      </div>
110
+      <el-divider></el-divider>
111
+      <div class="btn">
112
+        <el-button @click="activeStep -= 1" :disabled="activeStep == 0">上一步</el-button>
113
+        <el-button @click="confirmStep" type="primary" v-if="activeStep < 4">下一步</el-button>
114
+        <el-button @click="activeStep += 1" type="primary" v-if="activeStep == 4">生成预算表</el-button>
115
+      </div>
116
+    </div>
117
+
118
+    <el-dialog title="选择项目" :visible.sync="openProject" width="700px" append-to-body>
119
+      <el-form :inline="true">
120
+        <el-form-item label="项目编号" prop="projectNumber">
121
+          <el-input v-model="queryParams.projectNumber" placeholder="请输入项目编号" clearable
122
+            @keyup.enter.native="getProjectList" />
123
+        </el-form-item>
124
+        <el-form-item style="margin-bottom:0;display:none;">
125
+          <el-input></el-input>
126
+        </el-form-item>
127
+
128
+        <el-form-item>
129
+          <el-button @click="getProjectList" type="primary">搜索</el-button>
130
+        </el-form-item>
131
+      </el-form>
132
+      <el-table :data="projectList" style="margin-top: 30px;" height="600px">
133
+        <el-table-column type="index" width="50">
134
+        </el-table-column>
135
+        <el-table-column prop="isFinshed" label="状态" width="90px">
136
+          <template slot-scope="scope">
137
+            <el-tag :type="scope.row.isFinished === '0' ? 'success' : 'warning'" disable-transitions>
138
+              {{ scope.row.isFinished == '0' ? '进行中' : '已结束' }}
139
+            </el-tag>
140
+          </template>
141
+        </el-table-column>
142
+        <el-table-column label="项目编号" align="center" key="projectNumber" prop="projectNumber" />
143
+        <el-table-column label="项目名称" align="center" key="projectName" prop="projectName" width="200px" />
144
+        <el-table-column label="项目负责人" align="center" key="projectLeaderName" prop="projectLeaderName" />
145
+        <el-table-column align="center">
146
+          <template slot-scope="scope">
147
+            <el-button size="mini" type="text" @click="chooseProject(scope.row)">选择</el-button>
148
+          </template>
149
+        </el-table-column>
150
+      </el-table>
151
+      <div style="text-align: right;">
152
+        <el-pagination @current-change="getProjectList" :current-page.sync="queryParams.pageNum"
153
+          :page-size="queryParams.pageSize" layout="total, prev, pager, next" :total="projectTotal">
154
+        </el-pagination>
155
+      </div>
156
+    </el-dialog>
157
+  </div>
158
+</template>
159
+
160
+<script>
161
+import { listProject } from "@/api/oa/project/project";
162
+export default {
163
+  data() {
164
+    return {
165
+      activeStep: 0,
166
+      form: {},
167
+      openProject: false,
168
+      projectList: [],
169
+      queryParams: {
170
+        pageNum: 1,
171
+        pageSize: 10,
172
+        projectNumber: '',
173
+        projectLeader: '',
174
+        projectLeaderName: undefined,
175
+        projectName: '',
176
+      },
177
+      projectTotal: 0,
178
+      projectForm: {},
179
+      workList: [
180
+        {
181
+          content: '实景三维制作(影像分辨率优于5cm)',
182
+          scale: '1:500',
183
+          workload: '81',
184
+          unit: 'km²',
185
+          deadline: '2024-01-31',
186
+          remark: '此为备注此为备注此为备注此为备注此为备注此为备注'
187
+        }
188
+      ],
189
+      projectRule: {
190
+        projectNumber: [{ required: true, message: '请选择项目编号', trigger: 'blur' }],
191
+      },
192
+      peopleForm: {}
193
+    }
194
+  },
195
+  created() {
196
+    this.getProjectList();
197
+  },
198
+  methods: {
199
+    goBack() {
200
+      let obj = { path: "/budget/add" }
201
+      this.$tab.closeOpenPage(obj);
202
+      this.$router.push({ path: '/budget' });
203
+    },
204
+    // 查询项目列表
205
+    getProjectList() {
206
+      listProject(this.queryParams).then(response => {
207
+        this.projectList = response.rows;
208
+        this.projectTotal = response.total;
209
+      })
210
+    },
211
+    // 选择项目
212
+    chooseProject(row) {
213
+      this.projectForm = row;
214
+      this.openProject = false
215
+    },
216
+    confirmStep() {
217
+      if (this.projectForm.projectNumber == undefined) {
218
+        this.activeStep = 0;
219
+        this.$message.error(`请选择项目编号!`);
220
+      }
221
+      if(this.projectForm.projectNumber){
222
+        this.activeStep += 1;
223
+      }
224
+    }
225
+  },
226
+}
227
+</script>
228
+
229
+<style lang="scss" scoped>
230
+.header {
231
+  background-color: #fff;
232
+  height: 110px;
233
+  display: flex;
234
+  align-items: center;
235
+  border-bottom: 1px solid #EBEEF5;
236
+
237
+  .back {
238
+    margin-left: 30px;
239
+    flex: 1;
240
+  }
241
+
242
+  .title {
243
+    text-align: left;
244
+    flex: 24;
245
+    padding-left: 40px;
246
+
247
+    .title-text {
248
+      font-size: 20px;
249
+      font-weight: 700;
250
+    }
251
+
252
+    .title-tips {
253
+      font-size: 14px;
254
+      color: #5a5a5a;
255
+    }
256
+  }
257
+}
258
+
259
+.add-main {
260
+  padding: 20px;
261
+
262
+  .project {
263
+    padding-top: 50px;
264
+    width: 1000px;
265
+    margin: 0 auto;
266
+
267
+    .info-item {
268
+      line-height: 30px;
269
+      color: #5A5A5A;
270
+      font-size: 14px;
271
+      padding-left: 30px;
272
+      display: flex;
273
+      align-items: start;
274
+
275
+      .info-icon {
276
+        font-size: 20px;
277
+        margin-right: 10px;
278
+        vertical-align: middle;
279
+      }
280
+
281
+      .item-label {
282
+        max-width: 120px;
283
+        display: flex;
284
+        align-items: center;
285
+        font-size: 16px;
286
+      }
287
+
288
+      .item-value {
289
+        max-width: 260px;
290
+        // display: inline-block;
291
+      }
292
+    }
293
+  }
294
+
295
+  .staff {
296
+    width: 1200px;
297
+    margin: 0 auto;
298
+    padding-top: 50px;
299
+  }
300
+
301
+}
302
+
303
+.btn {
304
+  margin-top: 20px;
305
+  text-align: center;
306
+}
307
+
308
+table {
309
+  /*居中*/
310
+  margin: 0 auto;
311
+  /*边框*/
312
+  /* border: 1px solid black; */
313
+  text-align: center;
314
+  border-collapse: collapse;
315
+
316
+  /*设置背景颜色*/
317
+  /* background-color: #bfa; */
318
+  td {
319
+    padding: 3px;
320
+  }
321
+}
322
+
323
+::v-deep .el-input.is-disabled .el-input__inner {
324
+  background-color: #fff;
325
+  color: #5A5A5A;
326
+}
327
+</style>

+ 25
- 157
oa-ui/src/views/oa/budget/index.vue 查看文件

@@ -1,101 +1,9 @@
1 1
 <template>
2 2
   <div class="app-container">
3 3
     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
4
-      <el-form-item label="项目id" prop="projectId">
5
-        <el-input
6
-          v-model="queryParams.projectId"
7
-          placeholder="请输入项目id"
8
-          clearable
9
-          @keyup.enter.native="handleQuery"
10
-        />
11
-      </el-form-item>
12
-      <el-form-item label="人员成本" prop="staffCost">
13
-        <el-input
14
-          v-model="queryParams.staffCost"
15
-          placeholder="请输入人员成本"
16
-          clearable
17
-          @keyup.enter.native="handleQuery"
18
-        />
19
-      </el-form-item>
20
-      <el-form-item label="车辆成本" prop="carCost">
21
-        <el-input
22
-          v-model="queryParams.carCost"
23
-          placeholder="请输入车辆成本"
24
-          clearable
25
-          @keyup.enter.native="handleQuery"
26
-        />
27
-      </el-form-item>
28
-      <el-form-item label="设备成本" prop="deviceCost">
29
-        <el-input
30
-          v-model="queryParams.deviceCost"
31
-          placeholder="请输入设备成本"
32
-          clearable
33
-          @keyup.enter.native="handleQuery"
34
-        />
35
-      </el-form-item>
36
-      <el-form-item label="预结算额" prop="budgetSettle">
37
-        <el-input
38
-          v-model="queryParams.budgetSettle"
39
-          placeholder="请输入预结算额"
40
-          clearable
41
-          @keyup.enter.native="handleQuery"
42
-        />
43
-      </el-form-item>
44
-      <el-form-item label="外协费用" prop="outExpense">
45
-        <el-input
46
-          v-model="queryParams.outExpense"
47
-          placeholder="请输入外协费用"
48
-          clearable
49
-          @keyup.enter.native="handleQuery"
50
-        />
51
-      </el-form-item>
52
-      <el-form-item label="商务费用" prop="businessExpense">
53
-        <el-input
54
-          v-model="queryParams.businessExpense"
55
-          placeholder="请输入商务费用"
56
-          clearable
57
-          @keyup.enter.native="handleQuery"
58
-        />
59
-      </el-form-item>
60
-      <el-form-item label="车船租赁" prop="rentExpense">
61
-        <el-input
62
-          v-model="queryParams.rentExpense"
63
-          placeholder="请输入车船租赁"
64
-          clearable
65
-          @keyup.enter.native="handleQuery"
66
-        />
67
-      </el-form-item>
68
-      <el-form-item label="其他费用" prop="otherExpense">
69
-        <el-input
70
-          v-model="queryParams.otherExpense"
71
-          placeholder="请输入其他费用"
72
-          clearable
73
-          @keyup.enter.native="handleQuery"
74
-        />
75
-      </el-form-item>
76
-      <el-form-item label="预算总额" prop="totalExpense">
77
-        <el-input
78
-          v-model="queryParams.totalExpense"
79
-          placeholder="请输入预算总额"
80
-          clearable
81
-          @keyup.enter.native="handleQuery"
82
-        />
83
-      </el-form-item>
84
-      <el-form-item label="编制人" prop="compiler">
85
-        <el-input
86
-          v-model="queryParams.compiler"
87
-          placeholder="请输入编制人"
88
-          clearable
89
-          @keyup.enter.native="handleQuery"
90
-        />
91
-      </el-form-item>
92
-      <el-form-item label="审核人" prop="auditor">
93
-        <el-input
94
-          v-model="queryParams.auditor"
95
-          placeholder="请输入审核人"
96
-          clearable
97
-          @keyup.enter.native="handleQuery"
98
-        />
4
+      <el-form-item label="项目编号" prop="projectId">
5
+        <el-input v-model="queryParams.projectNumber" placeholder="请输入项目编号" clearable
6
+          @keyup.enter.native="handleQuery" />
99 7
       </el-form-item>
100 8
       <el-form-item>
101 9
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
@@ -105,46 +13,20 @@
105 13
 
106 14
     <el-row :gutter="10" class="mb8">
107 15
       <el-col :span="1.5">
108
-        <el-button
109
-          type="primary"
110
-          plain
111
-          icon="el-icon-plus"
112
-          size="mini"
113
-          @click="handleAdd"
114
-          v-hasPermi="['oa:budget:add']"
115
-        >新增</el-button>
16
+        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
17
+          v-hasPermi="['oa:budget:add']">新增</el-button>
116 18
       </el-col>
117 19
       <el-col :span="1.5">
118
-        <el-button
119
-          type="success"
120
-          plain
121
-          icon="el-icon-edit"
122
-          size="mini"
123
-          :disabled="single"
124
-          @click="handleUpdate"
125
-          v-hasPermi="['oa:budget:edit']"
126
-        >修改</el-button>
20
+        <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
21
+          v-hasPermi="['oa:budget:edit']">修改</el-button>
127 22
       </el-col>
128 23
       <el-col :span="1.5">
129
-        <el-button
130
-          type="danger"
131
-          plain
132
-          icon="el-icon-delete"
133
-          size="mini"
134
-          :disabled="multiple"
135
-          @click="handleDelete"
136
-          v-hasPermi="['oa:budget:remove']"
137
-        >删除</el-button>
24
+        <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
25
+          v-hasPermi="['oa:budget:remove']">删除</el-button>
138 26
       </el-col>
139 27
       <el-col :span="1.5">
140
-        <el-button
141
-          type="warning"
142
-          plain
143
-          icon="el-icon-download"
144
-          size="mini"
145
-          @click="handleExport"
146
-          v-hasPermi="['oa:budget:export']"
147
-        >导出</el-button>
28
+        <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
29
+          v-hasPermi="['oa:budget:export']">导出</el-button>
148 30
       </el-col>
149 31
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
150 32
     </el-row>
@@ -166,31 +48,16 @@
166 48
       <el-table-column label="审核人" align="center" prop="auditor" />
167 49
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
168 50
         <template slot-scope="scope">
169
-          <el-button
170
-            size="mini"
171
-            type="text"
172
-            icon="el-icon-edit"
173
-            @click="handleUpdate(scope.row)"
174
-            v-hasPermi="['oa:budget:edit']"
175
-          >修改</el-button>
176
-          <el-button
177
-            size="mini"
178
-            type="text"
179
-            icon="el-icon-delete"
180
-            @click="handleDelete(scope.row)"
181
-            v-hasPermi="['oa:budget:remove']"
182
-          >删除</el-button>
51
+          <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
52
+            v-hasPermi="['oa:budget:edit']">修改</el-button>
53
+          <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
54
+            v-hasPermi="['oa:budget:remove']">删除</el-button>
183 55
         </template>
184 56
       </el-table-column>
185 57
     </el-table>
186
-    
187
-    <pagination
188
-      v-show="total>0"
189
-      :total="total"
190
-      :page.sync="queryParams.pageNum"
191
-      :limit.sync="queryParams.pageSize"
192
-      @pagination="getList"
193
-    />
58
+
59
+    <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
60
+      @pagination="getList" />
194 61
 
195 62
     <!-- 添加或修改cmc预算管理对话框 -->
196 63
     <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
@@ -340,14 +207,15 @@ export default {
340 207
     // 多选框选中数据
341 208
     handleSelectionChange(selection) {
342 209
       this.ids = selection.map(item => item.budgetId)
343
-      this.single = selection.length!==1
210
+      this.single = selection.length !== 1
344 211
       this.multiple = !selection.length
345 212
     },
346 213
     /** 新增按钮操作 */
347 214
     handleAdd() {
348
-      this.reset();
349
-      this.open = true;
350
-      this.title = "添加cmc预算管理";
215
+      // this.reset();
216
+      // this.open = true;
217
+      // this.title = "添加cmc预算管理";
218
+      this.$router.push({ path: '/budget/add' })
351 219
     },
352 220
     /** 修改按钮操作 */
353 221
     handleUpdate(row) {
@@ -382,12 +250,12 @@ export default {
382 250
     /** 删除按钮操作 */
383 251
     handleDelete(row) {
384 252
       const budgetIds = row.budgetId || this.ids;
385
-      this.$modal.confirm('是否确认删除cmc预算管理编号为"' + budgetIds + '"的数据项?').then(function() {
253
+      this.$modal.confirm('是否确认删除cmc预算管理编号为"' + budgetIds + '"的数据项?').then(function () {
386 254
         return delBudget(budgetIds);
387 255
       }).then(() => {
388 256
         this.getList();
389 257
         this.$modal.msgSuccess("删除成功");
390
-      }).catch(() => {});
258
+      }).catch(() => { });
391 259
     },
392 260
     /** 导出按钮操作 */
393 261
     handleExport() {

+ 1
- 1
oa-ui/src/views/oa/device/approval.vue 查看文件

@@ -295,7 +295,7 @@ export default {
295 295
       })
296 296
     },
297 297
     goBack() {
298
-      let obj = { path: "/device/expense" }
298
+      let obj = { path: "/device/approval" }
299 299
       this.$tab.closeOpenPage(obj);
300 300
       this.$router.push({ path: '/device' });
301 301
     },

+ 15
- 0
oa-ui/src/views/oa/staff/changeRecord.vue 查看文件

@@ -0,0 +1,15 @@
1
+<template>
2
+  <div>
3
+
4
+  </div>
5
+</template>
6
+
7
+<script>
8
+  export default {
9
+    
10
+  }
11
+</script>
12
+
13
+<style lang="scss" scoped>
14
+
15
+</style>

+ 11
- 3
oa-ui/src/views/oa/staff/index.vue 查看文件

@@ -90,7 +90,7 @@
90 90
             <span>{{ parseTime(scope.row.entryDate, '{y}-{m}') }}</span>
91 91
           </template>
92 92
         </el-table-column>
93
-        <el-table-column label="固定成本(天)" align="center" key="salary" prop="salary.salary" v-if="columns[2].visible"
93
+        <el-table-column label="固定成本(天)" align="center" key="salary" prop="salary.salary"v-if="columns[2].visible"
94 94
           :show-overflow-tooltip="true">
95 95
           <template slot-scope="scope">
96 96
             {{ scope.row.salary ? scope.row.salary.salary : "" }}
@@ -236,6 +236,7 @@
236 236
                   :value="dict.value" />
237 237
               </el-select>
238 238
             </el-form-item>
239
+            </el-form-item>
239 240
           </el-col>
240 241
         </el-row>
241 242
         <el-row>
@@ -394,7 +395,8 @@ export default {
394 395
           }
395 396
         ]
396 397
       },
397
-      outCrtificates: []
398
+      certificates: '',
399
+      postSalary: ''
398 400
     };
399 401
   },
400 402
   watch: {
@@ -519,13 +521,17 @@ export default {
519 521
     },
520 522
     // 查看人员详情按钮
521 523
     handleView(row) {
524
+      console.log(row);
525
+      this.formatLevel(row.postLevel, row.salaryLevel, this.dict.type.sys_user_postlevel, this.dict.type.sys_user_salarylevel);
526
+      this.formatCrtificates(this.dict.type.sys_user_certificates, row.certificates)
522 527
       this.$router.push({
523 528
         path: '/staff/info',
524 529
         query: {
525 530
           userId: row.userId,
526 531
           nickName: row.nickName,
527 532
           postIds: this.form.postIds,
528
-          crtificates: this.crtificates
533
+          certificates: this.certificates,
534
+          postSalary: this.postSalary,
529 535
         }
530 536
       })
531 537
     },
@@ -639,6 +645,7 @@ export default {
639 645
       if (postLevel && salaryLevel) {
640 646
         let post = postLevelList[postLevel].label
641 647
         let salary = salaryLevelList[salaryLevel].label
648
+        this.postSalary = post + salary
642 649
         return post + salary
643 650
       } else {
644 651
         return ''
@@ -652,6 +659,7 @@ export default {
652 659
         for (let i of valArr) {
653 660
           outCrtificates.push(arr[i].label)
654 661
         }
662
+        this.certificates = outCrtificates.join(' / ')
655 663
         return outCrtificates.join(' / ')
656 664
       }
657 665
     }

+ 122
- 52
oa-ui/src/views/oa/staff/info.vue 查看文件

@@ -1,14 +1,20 @@
1
+<!--
2
+ * @Author: ysh
3
+ * @Date: 2024-03-22 14:50:46
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-03-25 13:56:25
6
+-->
1 7
 <template>
2 8
   <div class="bg">
3 9
     <div class="header">
4 10
       <div class="back">
5
-        <el-button type="primary" plain>返回</el-button>
11
+        <el-button type="primary" plain @click="goBack">返回</el-button>
6 12
       </div>
7 13
       <div class="title">
8 14
         {{ '【' + this.form.nickName + '】' }}详细信息
9 15
       </div>
10 16
     </div>
11
-    <el-row class="app-container" :gutter="20">
17
+    <el-row class="app-container">
12 18
       <el-col :span="6" class="userInfo">
13 19
         <div class="text-center">
14 20
           <div class="avatar">
@@ -18,48 +24,85 @@
18 24
           <div class="user-sex">{{ this.form.age + '岁 ' }} {{ this.form.sex == '0' ? ' 男' : ' 女' }}</div>
19 25
         </div>
20 26
         <div class="info-item">
21
-          <svg-icon icon-class="car" class="info-icon"></svg-icon>
22
-          <span class="item-label">职称:</span>
23
-          <span>{{ (dict.type.sys_user_titles[this.form.titles]) ?
27
+          <div class="item-label">
28
+            <svg-icon icon-class="car" class="info-icon"></svg-icon>
29
+            <div class="item-label">职称:</div>
30
+          </div>
31
+          <div>{{ (dict.type.sys_user_titles[this.form.titles]) ?
24 32
           (dict.type.sys_user_titles[this.form.titles]).label
25
-          : "" }}</span>
33
+          : "" }}</div>
34
+        </div>
35
+        <div class="info-item">
36
+          <div class="item-label">
37
+            <svg-icon icon-class="dept" class="info-icon"></svg-icon>
38
+            <div class="item-label">部门:</div>
39
+          </div>
40
+          <div>{{ postData }}</div>
41
+        </div>
42
+        <div class="info-item">
43
+          <div class="item-label">
44
+            <svg-icon icon-class="phone" class="info-icon"></svg-icon>
45
+            <div class="item-label">联系电话:</div>
46
+          </div>
47
+          <div class="item-value">{{ form.phonenumber }}</div>
48
+        </div>
49
+        <div class="info-item">
50
+          <div class="item-label">
51
+            <svg-icon icon-class="certificate" class="info-icon"></svg-icon>
52
+            执业证书:
53
+          </div>
54
+          <div class="item-value">{{ form.certificates }}</div>
26 55
         </div>
27 56
         <div class="info-item">
28
-          <svg-icon icon-class="dept" class="info-icon"></svg-icon>
29
-          <span class="item-label">部门:</span>
30
-          <span>{{ postData }}</span>
57
+          <div class="item-label">
58
+            <svg-icon icon-class="postSalary" class="info-icon"></svg-icon>
59
+            <div class="item-label">薪资岗级:</div>
60
+          </div>
61
+          <div>{{ form.postSalary }}</div>
31 62
         </div>
32 63
         <div class="info-item">
33
-          <svg-icon icon-class="telephone" class="info-icon"></svg-icon>
34
-          <span class="item-label">联系电话:</span>
35
-          <span>{{ form.phonenumber }}</span>
64
+          <div class="item-label">
65
+            <svg-icon icon-class="date" class="info-icon"></svg-icon>
66
+            <div class="item-label">入职时间:</div>
67
+          </div>
68
+          <div>{{ parseTime(form.entryDate, '{y}-{m}') }}</div>
36 69
         </div>
37 70
         <div class="info-item">
38
-          <svg-icon icon-class="telephone" class="info-icon"></svg-icon>
39
-          <span class="item-label">执业证书:</span>
40
-          <span>{{ }}</span>
71
+          <div class="item-label">
72
+            <svg-icon icon-class="rate" class="info-icon"></svg-icon>
73
+            <div class="item-label">状态:</div>
74
+          </div>
75
+          <div>{{ form.status }}</div>
41 76
         </div>
42 77
       </el-col>
43
-      <el-col :span="18"></el-col>
78
+      <el-col :span="17" class="stateInfo">
79
+        <el-tabs v-model="activeName" @tab-click="handleClick">
80
+          <el-tab-pane label="参与项目" name="1">
81
+            <projectInfo></projectInfo>
82
+          </el-tab-pane>
83
+          <el-tab-pane label="变更记录" name="2">
84
+            <changeRecord></changeRecord>
85
+          </el-tab-pane>
86
+        </el-tabs>
87
+      </el-col>
44 88
     </el-row>
45 89
   </div>
46 90
 </template>
47 91
 
48 92
 <script>
49
-import userAvatar from "@/views/system/user/profile/userAvatar.vue";
93
+import userAvatar from "@/views/system/user/profile/userAvatar.vue"
50 94
 import { getUser } from "@/api/system/user"
51
-import { mapGetters } from "vuex";
95
+import { mapGetters } from "vuex"
96
+import projectInfo from './projectInfo'
97
+import changeRecord from './changeRecord'
52 98
 export default {
53
-  components: { userAvatar },
99
+  components: { userAvatar, projectInfo, changeRecord },
54 100
   dicts: ['sys_normal_disable', 'sys_user_sex', 'sys_user_titles', 'sys_user_certificates', 'sys_user_pmlevel', 'sys_user_postlevel', 'sys_user_salarylevel'],
55 101
   computed: {
56 102
     ...mapGetters(["avatar"]),
57 103
   },
58 104
   created() {
59
-    if (this.$route.query) {
60
-      this.form.userId = this.$route.query.userId
61
-      this.form.nickName = this.$route.query.nickName
62
-    }
105
+
63 106
     this.getUserInfo(this.$route.query.userId);
64 107
   },
65 108
   data() {
@@ -72,7 +115,8 @@ export default {
72 115
         }
73 116
       },
74 117
       postOptions: [],
75
-      postData: ''
118
+      postData: '',
119
+      activeName: '1'
76 120
     }
77 121
   },
78 122
   methods: {
@@ -81,36 +125,45 @@ export default {
81 125
         console.log(res);
82 126
         this.postOptions = res.posts;
83 127
         if (res.data) {
84
-          this.formartForm(res.data);
85 128
           this.form = res.data;
86
-          let postArr = [];
87
-          for (let post of res.posts) {
88
-            for (let postid of res.postIds) {
89
-              if (postid == post.postId) {
90
-                postArr.push(post.postName)
91
-              }
92
-            }
93
-          }
94
-          this.postData = '中水成勘测绘公司-' + postArr.join('-')
129
+          this.formartForm(res);
95 130
         }
96 131
       })
97 132
     },
98
-    formartForm(user) {
99
-      // if (user.certificates != null && user.certificates != undefined && user.certificates != "") {
100
-      //   let arr = user.certificates.split(',');
101
-      //   let cerArr = this.dict.type.sys_user_certificates
102
-      //   cerArr.map(item =>{
103
-      //     for(let a of arr){
104
-      //       if(a == item.value){
105
-
106
-      //       }
107
-      //     }
108
-      //   })
109
-      // }
110
-      // console.log();
133
+    formartForm(res) {
134
+      if (this.$route.query) {
135
+        this.form.userId = this.$route.query.userId
136
+        this.form.nickName = this.$route.query.nickName
137
+        this.form.certificates = this.$route.query.certificates
138
+        this.form.postSalary = this.$route.query.postSalary
139
+      }
140
+      let postArr = [];
141
+      for (let post of res.posts) {
142
+        for (let postid of res.postIds) {
143
+          if (postid == post.postId) {
144
+            postArr.push(post.postName)
145
+          }
146
+        }
147
+      }
148
+      this.postData = '中水成勘测绘公司-' + postArr.join('-')
111 149
 
112
-    }
113
-  },
150
+      if (this.form.status == '0') {
151
+        this.form.status = '在职'
152
+      } else if (this.form.status == '1') {
153
+        this.form.status = '离职'
154
+      } else {
155
+        this.form.status = '退休'
156
+      }
157
+    },
158
+    handleClick() {
159
+
160
+    },
161
+    goBack() {
162
+      let obj = { path: "/staff/info" }
163
+      this.$tab.closeOpenPage(obj);
164
+      this.$router.push({ path: '/staff' });
165
+    },
166
+  }
114 167
 }
115 168
 </script>
116 169
 
@@ -142,6 +195,8 @@ export default {
142 195
 
143 196
 .userInfo {
144 197
   background-color: #fff;
198
+  height: 650px;
199
+  margin-right: 40px;
145 200
 
146 201
   .avatar {
147 202
     text-align: center;
@@ -169,8 +224,10 @@ export default {
169 224
   .info-item {
170 225
     line-height: 30px;
171 226
     color: #5A5A5A;
172
-    font-size: 16px;
227
+    font-size: 14px;
173 228
     padding-left: 30px;
229
+    display: flex;
230
+    align-items: start;
174 231
 
175 232
     .info-icon {
176 233
       font-size: 20px;
@@ -179,10 +236,23 @@ export default {
179 236
     }
180 237
 
181 238
     .item-label {
182
-      // width: 110px;
239
+      max-width: 120px;
240
+      display: flex;
241
+      align-items: center;
183 242
       // text-align: right;
184
-      display: inline-block;
243
+      // display: inline-block;
244
+    }
245
+
246
+    .item-value {
247
+      max-width: 260px;
248
+      // display: inline-block;
185 249
     }
186 250
   }
187 251
 }
252
+
253
+.stateInfo {
254
+  background-color: #fff;
255
+  height: 650px;
256
+  padding: 10px 30px 0;
257
+}
188 258
 </style>

+ 72
- 0
oa-ui/src/views/oa/staff/projectInfo.vue 查看文件

@@ -0,0 +1,72 @@
1
+<template>
2
+  <div>
3
+    <!-- <el-table :data="tableData" style="width: 100%">
4
+      <el-table-column type="expand">
5
+        <template slot-scope="props">
6
+          <div style="background-color: #F0F2F5;">
7
+            <el-descriptions direction="vertical" :column="3" border>
8
+              <el-descriptions-item label="工作内容">XXXXXX</el-descriptions-item>
9
+              <el-descriptions-item label="工作量">XXXXXX</el-descriptions-item>
10
+              <el-descriptions-item label="单位" :span="2">km²</el-descriptions-item>
11
+            </el-descriptions>
12
+          </div>
13
+        </template>
14
+</el-table-column>
15
+<el-table-column label="项目编号" prop="projectNumber">
16
+</el-table-column>
17
+<el-table-column label="项目名称" prop="projectName">
18
+</el-table-column>
19
+<el-table-column label="项目负责人" prop="projectLeader">
20
+</el-table-column>
21
+</el-table> -->
22
+    <el-collapse v-model="activeNames" @change="handleChange">
23
+      <el-collapse-item :name="item.projectNumber" v-for="item in tableData">
24
+        <template slot="title">
25
+          <div>
26
+            <svg-icon icon-class="ArrowRight" class="info-icon"></svg-icon>
27
+            {{ item.projectNumber + ' ' + ' ' + item.projectName + ' ' + ' ' + item.projectLeader }}
28
+          </div>
29
+        </template>
30
+        <div>暂无信息,敬请期待</div>
31
+      </el-collapse-item>
32
+    </el-collapse>
33
+  </div>
34
+</template>
35
+
36
+<script>
37
+export default {
38
+  data() {
39
+    return {
40
+      tableData: [
41
+        {
42
+          projectNumber: '2021C40',
43
+          projectName: '重庆轨道交通4号线西延伸段工程施工监测及控制测量',
44
+          projectLeader: 'XXX'
45
+        }, 
46
+        {
47
+          projectNumber: '2021C50',
48
+          projectName: '重庆轨道交通4号线西延伸段工程施工监测及控制测量',
49
+          projectLeader: 'XXX'
50
+        },
51
+        {
52
+          projectNumber: '2021C60',
53
+          projectName: '重庆轨道交通4号线西延伸段工程施工监测及控制测量',
54
+          projectLeader: 'XXX'
55
+        }
56
+      ],
57
+      activeNames: ['1']
58
+    }
59
+  },
60
+  methods: {
61
+    handleChange(val) {
62
+      console.log(val);
63
+    }
64
+  }
65
+}
66
+</script>
67
+
68
+<style lang="scss" scoped>
69
+.info-icon{
70
+  font-size: 20px;
71
+}
72
+</style>

正在加载...
取消
保存