Procházet zdrojové kódy

新增设备管理明细

余思翰 před 1 rokem
rodič
revize
cf092e3e25

+ 14
- 0
oa-ui/src/router/index.js Zobrazit soubor

@@ -186,6 +186,20 @@ export const constantRoutes = [
186 186
       }
187 187
     ]
188 188
   },
189
+  {
190
+    path: '/device/expense',
191
+    component: Layout,
192
+    hidden: true,
193
+    children: [
194
+      {
195
+        path: '',
196
+        component: () => import('@/views/oa/device/expense'),
197
+        name: 'carExpense',
198
+        meta: { title: '设备明细', icon: '' }
199
+
200
+      }
201
+    ]
202
+  }
189 203
 ]
190 204
 
191 205
 // 动态路由,基于用户权限动态去加载

+ 8
- 8
oa-ui/src/views/flowable/form/carForm.vue Zobrazit soubor

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-02-29 11:44:28
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-03-13 14:17:12
5
+ * @LastEditTime: 2024-03-14 09:33:02
6 6
 -->
7 7
 <!--
8 8
  * @Author: wrh
@@ -93,25 +93,25 @@
93 93
               </el-row>
94 94
               <el-divider></el-divider>
95 95
               <!-- 部门审核意见 -->
96
-              <el-form-item label="部门审核意见:" prop="deptComment" label-width="120px"  v-if="taskName != '工会审核'">
96
+              <el-form-item label="部门审核意见:" prop="deptComment" label-width="120px" v-if="taskForm.procDefName == '用车审批'">
97 97
                 <el-input type="textarea" :rows="2" placeholder="请输入部门审核意见" v-model="form.deptComment"
98 98
                   :disabled="taskName != '部门审核'">
99 99
                 </el-input>
100 100
               </el-form-item>
101 101
               <!-- 分管审核意见 -->
102
-              <el-form-item label="分管审核意见:" prop="managerComment" label-width="120px"  v-if="taskName != '工会审核'">
102
+              <el-form-item label="分管审核意见:" prop="managerComment" label-width="120px" v-if="taskForm.procDefName == '用车审批'">
103 103
                 <el-input type="textarea" :rows="2" placeholder="请输入分管审核意见" v-model="form.managerComment"
104 104
                   :disabled="taskName != '分管审核'">
105 105
                 </el-input>
106 106
               </el-form-item>
107 107
               <!-- 工会审核意见 -->
108
-              <el-form-item label="工会审核意见:" prop="unionComment" label-width="120px" v-if="taskName == '工会审核'">
108
+              <el-form-item label="工会审核意见:" prop="unionComment" label-width="120px" v-if="taskForm.procDefName == '用车审批(工会)'">
109 109
                 <el-input type="textarea" :rows="2" placeholder="请输入工会审核意见" v-model="form.unionComment"
110 110
                   :disabled="taskName != '工会审核'">
111 111
                 </el-input>
112 112
               </el-form-item>
113 113
               <!-- 安排用车意见 -->
114
-              <el-form-item label="安排用车意见:" prop="dispatchComment" label-width="120px">
114
+              <el-form-item label="安排用车意见:" prop="dispatchComment" label-width="120px" v-if="taskForm.procDefName == '用车审批'">
115 115
                 <el-input type="textarea" :rows="2" placeholder="请输入安排用车意见" v-model="form.dispatchComment"
116 116
                   :disabled="taskName != '安排用车'">
117 117
                 </el-input>
@@ -343,7 +343,7 @@ export default {
343 343
       this.loading = true
344 344
       listProject({
345 345
         pageNum: 1,
346
-        pageSize: 9999999999
346
+        pageSize: 99999999
347 347
       }).then(response => {
348 348
         this.projectList = response.rows;
349 349
       })
@@ -364,7 +364,7 @@ export default {
364 364
     getCarList() {
365 365
       listCar({
366 366
         pageNum: 1,
367
-        pageSize: 9999999999
367
+        pageSize: 99999999
368 368
       }).then(response => {
369 369
         this.carList = response.rows;
370 370
       })
@@ -374,7 +374,7 @@ export default {
374 374
     getDriverList() {
375 375
       listDriver({
376 376
         pageNum: 1,
377
-        pageSize: 9999999999
377
+        pageSize: 99999999
378 378
       }).then(response => {
379 379
         this.driverList = response.rows;
380 380
       })

+ 2
- 2
oa-ui/src/views/flowable/task/todo/index.vue Zobrazit soubor

@@ -18,9 +18,9 @@
18 18
 
19 19
     <el-row :gutter="10" class="mb8">
20 20
       <el-col :span="1.5">
21
-        <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
21
+        <!-- <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
22 22
           v-hasPermi="['system:deployment:remove']">删除
23
-        </el-button>
23
+        </el-button> -->
24 24
       </el-col>
25 25
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
26 26
     </el-row>

+ 115
- 41
oa-ui/src/views/index.vue Zobrazit soubor

@@ -2,13 +2,13 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-01-03 09:23:11
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-03-12 17:28:04
5
+ * @LastEditTime: 2024-03-14 14:22:50
6 6
 -->
7 7
 
8 8
 <template>
9 9
   <div class="app-container home">
10 10
     <el-row style="height:350px;" :gutter="20">
11
-      <el-col :span="8">
11
+      <el-col :span="6">
12 12
         <div class="header">个人信息</div>
13 13
         <div class="user-wrapper">
14 14
           <div class="avatar">
@@ -17,28 +17,33 @@
17 17
           <div class="username">
18 18
             <div>{{ user.nickName }}</div>
19 19
             <div style="font-size: 14px;color:#bbb;font-weight:lighter;">
20
-              <el-tag type="warning">{{ user.postLevel == null ? '未设置职位': user.postLevel}}</el-tag>
20
+              <el-tag type="warning">{{ post.length == 0 ? '未设置职位' : post.join(' / ') }}</el-tag>
21 21
             </div>
22 22
           </div>
23 23
           <div class="user-info">
24
-            <table>
25
-              <tr>
26
-                <td>部门</td>
27
-                <td></td>
28
-              </tr>
29
-            </table>
24
+            <el-row :gutter="20" style="margin:10px">
25
+              <el-col :span="10" style="text-align: right;">所属部门:</el-col>
26
+              <el-col :span="14" style="text-align: left;">{{ user.dept.deptName }}</el-col>
27
+            </el-row>
28
+            <el-row :gutter="20">
29
+              <el-col :span="10" style="text-align: right;">技术职称:</el-col>
30
+              <el-col :span="14" style="text-align: left;">{{ user.titles }}</el-col>
31
+            </el-row>
30 32
           </div>
31 33
         </div>
32 34
       </el-col>
33
-      <el-col :span="16" :xs="24">
35
+      <el-col :span="18" :xs="24">
34 36
         <div class="header">快捷入口</div>
35 37
         <div class="nav-wrapper">
36 38
           <div class="nav-item" v-for="nav in navItem" @click="goToPath(nav.id)">
37
-            <div class="nav-logo" :style="{ 'background-color': nav.bgColor, 'box-shadow': nav.boxShadow }">
38
-              <div class="icon">
39
-                <svg-icon slot="prefix" :icon-class="nav.icon" class="el-input__icon input-icon" />
39
+            <el-badge :value="formartBadge(nav.id)" :max="99" class="item">
40
+              <div class="nav-logo" :style="{ 'background-color': nav.bgColor, 'box-shadow': nav.boxShadow }">
41
+                <div class="icon">
42
+                  <svg-icon slot="prefix" :icon-class="nav.icon" class="el-input__icon input-icon" />
43
+                </div>
40 44
               </div>
41
-            </div>
45
+            </el-badge>
46
+
42 47
             <div class="nav-text">{{ nav.name }}</div>
43 48
           </div>
44 49
         </div>
@@ -57,6 +62,26 @@
57 62
       <el-col :span="8">
58 63
         <div class="header">公告</div>
59 64
         <div class="notice-content">
65
+          <el-table v-loading="noticeLoading" :data="noticeList" height="320px">
66
+            <!-- <el-table-column label="序号" align="center" prop="noticeId" width="100" /> -->
67
+            <el-table-column label="公告类型" align="center" prop="noticeType" width="100">
68
+              <template slot-scope="scope">
69
+                <dict-tag :options="dict.type.sys_notice_type" :value="scope.row.noticeType" />
70
+              </template>
71
+            </el-table-column>
72
+            <el-table-column label="公告标题" align="center" prop="noticeTitle" :show-overflow-tooltip="true" />
73
+            <el-table-column label="创建者" align="center" prop="createBy" width="100" />
74
+            <el-table-column label="创建时间" align="center" prop="createTime" width="100">
75
+              <template slot-scope="scope">
76
+                <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
77
+              </template>
78
+            </el-table-column>
79
+          </el-table>
80
+          <div style="text-align: right;margin-top: 20px;">
81
+            <el-pagination @current-change="getNotice" :current-page.sync="noticeQueryParams.pageNum"
82
+              :page-size="noticeQueryParams.pageSize" layout="total, prev, pager, next,jumper" :total="noticeTotal">
83
+            </el-pagination>
84
+          </div>
60 85
 
61 86
         </div>
62 87
       </el-col>
@@ -72,29 +97,42 @@
72 97
 
73 98
 <script>
74 99
 import { mapGetters } from "vuex";
75
-import { getUserProfile } from "@/api/system/user";
100
+import { getUserProfile, getUser } from "@/api/system/user";
76 101
 import { listProject } from "@/api/oa/project/project";
77 102
 import { todoList } from "@/api/flowable/todo";
78 103
 import { finishedList } from "@/api/flowable/finished";
79
-import Calendar from '@/components/Calendar'
104
+import Calendar from '@/components/Calendar';
105
+import { listNotice } from "@/api/system/notice";
80 106
 export default {
107
+  dicts: ['sys_notice_status', 'sys_notice_type'],
81 108
   components: {
82 109
     Calendar
83 110
   },
84 111
   computed: {
85
-    ...mapGetters(["avatar"]),
112
+    ...mapGetters(["avatar", "userId"]),
86 113
   },
87 114
   created() {
88
-    this.getUser();
115
+    this.getUserbyId();
89 116
     this.getDetail();
90 117
     this.getProject();
118
+    this.getNotice();
91 119
   },
92 120
   data() {
93 121
     return {
94 122
       times: new Date(),
95
-      user: {},
123
+      user: {
124
+        dept: {}
125
+      },
126
+      post: [],
96 127
       noticeData: [],
97 128
       projectData: [],
129
+      noticeList: [],// 公告表格数据
130
+      noticeTotal: 0,
131
+      noticeLoading: true,
132
+      noticeQueryParams: {
133
+        pageNum: 1,
134
+        pageSize: 10
135
+      },
98 136
       projectQueryParams: {
99 137
         pageNum: 1,
100 138
         pageSize: 16
@@ -161,22 +199,27 @@ export default {
161 199
         this.$router.push({ path: "/device" });
162 200
       }
163 201
     },
164
-    getUser() {
165
-      getUserProfile().then(response => {
202
+    getUserbyId() {
203
+      getUser(this.userId).then(response => {
166 204
         this.user = response.data;
167
-        console.log(this.user);
168
-        // for (let d of this.dict.type.sys_user_engineerlevel) {
169
-        //   if (d.value == response.data.engineerLevel) {
170
-        //     console.log(d);
171
-        //     this.engineerLevel = d.label
172
-        //   }
173
-        // }
174
-        // for (let t of this.dict.type.sys_user_titles) {
175
-        //   if (t.value == response.data.titles) {
176
-        //     console.log(t);
177
-        //     this.titles = t.label
178
-        //   }
179
-        // }
205
+        for (let p of response.posts) {
206
+          for (let ids of response.postIds) {
207
+            if (p.postId == ids) {
208
+              this.post.push(p.postName)
209
+            }
210
+          }
211
+        }
212
+        this.getDicts("sys_user_titles").then(res => {
213
+          console.log(res);
214
+          if (this.user.titles != "" && this.user.titles != null && this.user.titles != undefined) {
215
+            let titles = this.user.titles.split(',');
216
+            let arr = []
217
+            for (let t of titles) {
218
+              arr.push(res.data[t].dictLabel)
219
+            }
220
+            this.user.titles = arr.join(' / ')
221
+          }
222
+        })
180 223
       });
181 224
     },
182 225
     // 获取项目列表
@@ -191,8 +234,7 @@ export default {
191 234
       todoList({
192 235
         pageNum: 1,
193 236
         pageSize: 10,
194
-        name: null,
195
-        category: 'assess'
237
+        name: null
196 238
       }).then(response => {
197 239
         this.detail = response.data.total;
198 240
       });
@@ -214,6 +256,21 @@ export default {
214 256
         this.finish = response.data.total;
215 257
       })
216 258
     },
259
+    // 获取公告列表
260
+    getNotice() {
261
+      listNotice(this.noticeQueryParams).then(response => {
262
+        this.noticeList = response.rows;
263
+        this.noticeTotal = response.total;
264
+        this.noticeLoading = false;
265
+      });
266
+    },
267
+    formartBadge(id) {
268
+      if (id == 2) {
269
+        return this.detail
270
+      } else {
271
+        return null
272
+      }
273
+    }
217 274
   }
218 275
 }
219 276
 </script>
@@ -296,7 +353,13 @@ export default {
296 353
     font-family: '微软雅黑';
297 354
   }
298 355
 
299
-  .user-info {}
356
+  .user-info {
357
+    text-align: center;
358
+
359
+    table {
360
+      margin: 0 auto;
361
+    }
362
+  }
300 363
 }
301 364
 
302 365
 .notice-content {
@@ -304,6 +367,7 @@ export default {
304 367
   height: 400px;
305 368
   background-color: #ffffff;
306 369
   border-radius: 15px;
370
+  padding: 20px 15px 0;
307 371
 }
308 372
 
309 373
 .calendar-warpper {
@@ -323,9 +387,11 @@ export default {
323 387
 ::v-deep .el-calendar-table .el-calendar-day {
324 388
   height: 39px;
325 389
   text-align: center;
326
-  line-height: 22px;
390
+  line-height: 26px;
391
+}
392
+::v-deep .el-calendar-table .el-calendar-day:hover {
393
+  color: #242d42;
327 394
 }
328
-
329 395
 ::v-deep .el-calendar__body {
330 396
   padding: 15px 31px 10px;
331 397
 }
@@ -336,10 +402,18 @@ export default {
336 402
 
337 403
 ::v-deep .el-calendar-table td.is-today {
338 404
   background-color: #1890ff;
405
+  border-radius: 10px;
339 406
   color: #ffffff;
407
+  box-shadow: 0 0 10px rgba($color: #1890ff, $alpha: 0.2);
340 408
 }
341 409
 
342 410
 ::v-deep .el-calendar-table td.is-selected {
343
-  color: #242d42;
411
+  // color: #242d42;
412
+}
413
+::v-deep .el-calendar-table td{
414
+  border-right: none;
415
+}
416
+::v-deep .el-table .el-table__header-wrapper th, .el-table .el-table__fixed-header-wrapper th{
417
+  background-color: #ffffff;
344 418
 }
345
-</style>
419
+</style>

+ 4
- 2
oa-ui/src/views/oa/car/expense.vue Zobrazit soubor

@@ -86,7 +86,7 @@
86 86
     </el-descriptions>
87 87
     <!-- 费用明细 -->
88 88
     <el-divider></el-divider>
89
-    
89
+
90 90
     <el-card>
91 91
       <el-row :gutter="10" class="mb8">
92 92
         <el-col :span="1.5">
@@ -145,7 +145,7 @@
145 145
           </el-select>
146 146
         </el-form-item>
147 147
         <el-form-item label="费用金额" prop="expense">
148
-          <el-input v-model="form.expense" placeholder="请输入费用金额" />
148
+          <el-input v-model="form.expense" placeholder="请输入费用金额" style="width:150px" /> <el-tag>元</el-tag>
149 149
         </el-form-item>
150 150
         <el-form-item label="发生日期" prop="occurDate">
151 151
           <el-date-picker clearable v-model="form.occurDate" type="date" value-format="yyyy-MM-dd"
@@ -233,6 +233,8 @@ export default {
233 233
       })
234 234
     },
235 235
     goBack() {
236
+      let obj = { path: "/car/expense" }
237
+      this.$tab.closeOpenPage(obj);
236 238
       this.$router.push({ path: '/car' });
237 239
     },
238 240
     /** 搜索按钮操作 */

+ 1
- 0
oa-ui/src/views/oa/car/index.vue Zobrazit soubor

@@ -62,6 +62,7 @@
62 62
         </template>
63 63
       </el-table-column>
64 64
       <el-table-column label="单日成本" align="center" prop="dayCost" />
65
+      <el-table-column label="备注" align="center" prop="remark" />
65 66
       <el-table-column label="操作" align="center" width="200px">
66 67
 
67 68
         <template slot-scope="scope">

+ 371
- 0
oa-ui/src/views/oa/device/expense.vue Zobrazit soubor

@@ -0,0 +1,371 @@
1
+<template>
2
+  <div class="app-container">
3
+    <div class="header">
4
+      <el-button icon="el-icon-d-arrow-left" plain type="primary" class="back" @click="goBack">返回</el-button>
5
+      <h1>{{ '【' + deviceInfo.licensePlate + '】' }}设备明细</h1>
6
+    </div>
7
+    <el-divider></el-divider>
8
+    <el-descriptions class="descriptions" :column="column" border style="text-align: center;">
9
+      <el-descriptions-item>
10
+        <template slot="label">
11
+          <svg-icon slot="prefix" icon-class="car" class="el-input__icon input-icon" />
12
+          车牌号
13
+        </template>
14
+        {{ deviceInfo.licensePlate }}
15
+      </el-descriptions-item>
16
+      <el-descriptions-item>
17
+        <template slot="label">
18
+          <svg-icon slot="prefix" icon-class="Branding" class="el-input__icon input-icon" />
19
+          品牌
20
+        </template>
21
+        {{ deviceInfo.brand }}
22
+      </el-descriptions-item>
23
+      <el-descriptions-item>
24
+        <template slot="label">
25
+          <svg-icon slot="prefix" icon-class="PhAppStoreLogoFill" class="el-input__icon input-icon" />
26
+          系列
27
+        </template>
28
+        {{ deviceInfo.series }}
29
+      </el-descriptions-item>
30
+      <el-descriptions-item>
31
+        <template slot="label">
32
+          <svg-icon slot="prefix" icon-class="cost" class="el-input__icon input-icon" />
33
+          总价
34
+        </template>
35
+        {{ deviceInfo.cost }}
36
+      </el-descriptions-item>
37
+      <el-descriptions-item>
38
+        <template slot="label">
39
+          <svg-icon slot="prefix" icon-class="date" class="el-input__icon input-icon" />
40
+          上牌时间
41
+        </template>
42
+        {{ parseTime(deviceInfo.acquisitionTime, '{y}-{m}-{d}') }}
43
+      </el-descriptions-item>
44
+      <el-descriptions-item>
45
+        <template slot="label">
46
+          <i class="el-icon-user-solid"></i>
47
+          驾驶员
48
+        </template>
49
+        {{ deviceInfo.driver }}
50
+      </el-descriptions-item>
51
+      <el-descriptions-item>
52
+        <template slot="label">
53
+          <svg-icon slot="prefix" icon-class="date" class="el-input__icon input-icon" />
54
+          预计使用年限
55
+        </template>
56
+        {{ deviceInfo.expectLife }}
57
+      </el-descriptions-item>
58
+      <el-descriptions-item>
59
+        <template slot="label">
60
+          <svg-icon slot="prefix" icon-class="car" class="el-input__icon input-icon" />
61
+          预计行驶里程(万千米)
62
+        </template>
63
+        {{ deviceInfo.expectKm }}
64
+      </el-descriptions-item>
65
+      <el-descriptions-item>
66
+        <template slot="label">
67
+          <svg-icon slot="prefix" icon-class="JamYelpSquare" class="el-input__icon input-icon" />
68
+          是否为租车
69
+        </template>
70
+        {{ deviceInfo.isRent == '0' ? '否' : '是' }}
71
+      </el-descriptions-item>
72
+      <el-descriptions-item>
73
+        <template slot="label">
74
+          <svg-icon slot="prefix" icon-class="TeenyiconsYenSolid" class="el-input__icon input-icon" />
75
+          单日成本
76
+        </template>
77
+        {{ deviceInfo.dayCost }}
78
+      </el-descriptions-item>
79
+      <el-descriptions-item>
80
+        <template slot="label">
81
+          <svg-icon slot="prefix" icon-class="remark" class="el-input__icon input-icon" />
82
+          备注
83
+        </template>
84
+        {{ deviceInfo.remark }}
85
+      </el-descriptions-item>
86
+    </el-descriptions>
87
+    <!-- 费用明细 -->
88
+    <el-divider></el-divider>
89
+
90
+    <el-card>
91
+      <el-row :gutter="10" class="mb8">
92
+        <el-col :span="1.5">
93
+          <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">新增</el-button>
94
+        </el-col>
95
+        <el-col :span="1.5">
96
+          <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single"
97
+            @click="handleUpdate">修改</el-button>
98
+        </el-col>
99
+        <el-col :span="1.5">
100
+          <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple"
101
+            @click="handleDelete">删除</el-button>
102
+        </el-col>
103
+        <el-col :span="1.5">
104
+          <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport">导出</el-button>
105
+        </el-col>
106
+      </el-row>
107
+      <el-table v-loading="loading" :data="expenseList" @selection-change="handleSelectionChange">
108
+        <el-table-column type="selection" width="55" align="center" />
109
+        <el-table-column type="index" width="55" align="center" label="序号" />
110
+        <el-table-column label="费用类型" align="center" prop="expenseType">
111
+          <template slot-scope="scope">
112
+            <el-tag :type="typeStyle(scope.row.expenseType)">{{ expenseTypeText(scope.row.expenseType) }}</el-tag>
113
+          </template>
114
+        </el-table-column>
115
+        <el-table-column label="费用金额" align="center" prop="expense">
116
+          <template slot-scope="scope">
117
+            {{ scope.row.expense + '元' }}
118
+          </template>
119
+        </el-table-column>
120
+        <el-table-column label="发生日期" align="center" prop="occurDate" width="180">
121
+          <template slot-scope="scope">
122
+            {{ scope.row.occurDate }}
123
+          </template>
124
+        </el-table-column>
125
+        <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
126
+          <template slot-scope="scope">
127
+            <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
128
+              v-hasPermi="['oa:carExpense:edit']">修改</el-button>
129
+            <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
130
+              v-hasPermi="['oa:carExpense:remove']">删除</el-button>
131
+          </template>
132
+        </el-table-column>
133
+      </el-table>
134
+      <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
135
+        @pagination="getList" />
136
+    </el-card>
137
+    <!-- 添加明细 -->
138
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
139
+      <el-form ref="expenseForm" :model="form" :rules="rules" label-width="100px">
140
+        <el-form-item label="费用类型" prop="expenseType">
141
+          <el-select v-model="form.expenseType" placeholder="请选择" clearable>
142
+            <el-option label="保险费" value="0"></el-option>
143
+            <el-option label="维修/保养费" value="1"></el-option>
144
+            <el-option label="轮胎费" value="2"></el-option>
145
+          </el-select>
146
+        </el-form-item>
147
+        <el-form-item label="费用金额" prop="expense">
148
+          <el-input v-model="form.expense" placeholder="请输入费用金额" style="width:150px" /> <el-tag>元</el-tag>
149
+        </el-form-item>
150
+        <el-form-item label="发生日期" prop="occurDate">
151
+          <el-date-picker clearable v-model="form.occurDate" type="date" value-format="yyyy-MM-dd"
152
+            placeholder="请选择发生日期">
153
+          </el-date-picker>
154
+        </el-form-item>
155
+      </el-form>
156
+      <div slot="footer" class="dialog-footer">
157
+        <el-button type="primary" @click="submitForm">确 定</el-button>
158
+        <el-button @click="cancel">取 消</el-button>
159
+      </div>
160
+    </el-dialog>
161
+  </div>
162
+</template>
163
+
164
+<script>
165
+import { getCar } from '@/api/oa/car/car.js'
166
+import { getDevice } from '@/api/oa/device/device.js'
167
+import { listCarExpense, getCarExpense, delCarExpense, addCarExpense, updateCarExpense } from "@/api/oa/car/carExpense";
168
+export default {
169
+  data() {
170
+    let validateExpense = (rule, value, callback) => {
171
+      setTimeout(() => {
172
+        if (!value) {
173
+          return callback(new Error('请输入金额'));
174
+        }
175
+        if (!this.isNumber(Number(value))) {
176
+          callback(new Error('请输入数字值'));
177
+        } else {
178
+          callback();
179
+        }
180
+      }, 100)
181
+    }
182
+    return {
183
+      column: 4,
184
+      deviceInfo: {},
185
+      expenseList: [],
186
+      queryParams: {
187
+        pageNum: 1,
188
+        pageSize: 10,
189
+      },
190
+      total: 0,
191
+      multiple: true,
192
+      // 选中数组
193
+      ids: [],
194
+      // 非单个禁用
195
+      single: true,
196
+      title: '',
197
+      open: false,
198
+      form: {},
199
+      rules: {
200
+        expenseType: [
201
+          { required: true, message: '请选择费用类型', trigger: 'change' }
202
+        ],
203
+        expense: [
204
+          { validator: validateExpense, required: true, trigger: 'blur' },
205
+        ],
206
+        occurDate: [
207
+          { required: true, message: '请选择发生日期', trigger: 'change' },
208
+        ],
209
+      },
210
+      loading: false
211
+    }
212
+  },
213
+  created() {
214
+    if (this.$route.query) {
215
+      getDevice(this.$route.query.deviceId).then(res => {
216
+        console.log(res);
217
+        this.deviceInfo = res.data;
218
+      })
219
+      this.getList();
220
+    }
221
+    if (this.$store.state.app.device == 'desktop') {
222
+
223
+    } else {
224
+      this.column = 1
225
+    }
226
+  },
227
+  methods: {
228
+    getList() {
229
+      this.queryParams.carId = this.$route.query.carId
230
+      listCarExpense(this.queryParams).then(res => {
231
+        console.log(res);
232
+        this.expenseList = res.rows;
233
+        this.total = res.total;
234
+      })
235
+    },
236
+    goBack() {
237
+      let obj = { path: "/car/expense" }
238
+      this.$tab.closeOpenPage(obj);
239
+      this.$router.push({ path: '/car' });
240
+    },
241
+    /** 搜索按钮操作 */
242
+    handleQuery() {
243
+      this.queryParams.pageNum = 1;
244
+      this.getList();
245
+    },
246
+    // 多选框选中数据
247
+    handleSelectionChange(selection) {
248
+      this.ids = selection.map(item => item.carExpenseId)
249
+      this.single = selection.length !== 1
250
+      this.multiple = !selection.length
251
+    },
252
+    handleAdd() {
253
+      this.reset();
254
+      this.open = true;
255
+      this.title = "添加车辆明细";
256
+    },
257
+    handleUpdate(row) {
258
+      this.reset();
259
+      const carExpenseId = row.carExpenseId || this.ids
260
+      getCarExpense(carExpenseId).then(response => {
261
+        this.form = response.data;
262
+        this.open = true;
263
+        this.title = "修改车辆明细";
264
+      });
265
+    },
266
+    handleDelete(row) {
267
+      debugger
268
+      const carExpenseIds = row.carExpenseId || this.ids;
269
+      this.$modal.confirm('是否确认删除车辆费用编号为"' + carExpenseIds + '"的数据项?').then(function () {
270
+        return delCarExpense(carExpenseIds);
271
+      }).then(() => {
272
+        this.getList();
273
+        this.$modal.msgSuccess("删除成功");
274
+      }).catch(() => { });
275
+    },
276
+    handleExport() {
277
+      this.download('oa/carExpense/export', {
278
+        ...this.queryParams
279
+      }, `carExpense_${new Date().getTime()}.xlsx`)
280
+    },
281
+    // 表单重置
282
+    reset() {
283
+      this.form = {
284
+        carExpenseId: null,
285
+        carId: null,
286
+        expenseType: null,
287
+        expense: null,
288
+        occurDate: null
289
+      };
290
+      this.resetForm("expenseForm");
291
+    },
292
+    submitForm() {
293
+      this.$refs["expenseForm"].validate(valid => {
294
+        if (valid) {
295
+          this.form.carId = this.$route.query.carId
296
+          if (this.form.carExpenseId != null) {
297
+            updateCarExpense(this.form).then(response => {
298
+              this.$modal.msgSuccess("修改成功");
299
+              this.open = false;
300
+              this.getList();
301
+            });
302
+          } else {
303
+            addCarExpense(this.form).then(response => {
304
+              this.$modal.msgSuccess("新增成功");
305
+              this.open = false;
306
+              this.getList();
307
+            });
308
+          }
309
+        }
310
+      });
311
+    },
312
+    cancel() {
313
+      this.open = false;
314
+      this.reset();
315
+    },
316
+    isNumber(value) {
317
+      return typeof value === 'number' && /^\d+(\.\d+)?$/.test(value);
318
+    },
319
+    expenseTypeText(row) {
320
+      if (row == '0') {
321
+        return '保险费'
322
+      }
323
+      if (row == '1') {
324
+        return '维修/保养费'
325
+      }
326
+      if (row == '2') {
327
+        return '轮胎费'
328
+      }
329
+    },
330
+    typeStyle(row) {
331
+      if (row == '0') {
332
+        return 'primary'
333
+      }
334
+      if (row == '1') {
335
+        return 'warning'
336
+      }
337
+      if (row == '2') {
338
+        return 'success'
339
+      }
340
+    }
341
+  },
342
+}
343
+</script>
344
+
345
+<style lang="scss" scoped>
346
+.header {
347
+  position: relative;
348
+  text-align: center;
349
+
350
+  .back {
351
+    position: absolute;
352
+    left: 12px;
353
+    top: -10px;
354
+  }
355
+}
356
+
357
+.descriptions {
358
+  padding: 20px 50px;
359
+}
360
+
361
+
362
+::v-deep .el-descriptions-item__label.is-bordered-label {
363
+  color: #121212;
364
+  background: rgba($color: #46a6ff, $alpha: 0.1);
365
+  width: 200px;
366
+}
367
+
368
+::v-deep .el-descriptions .is-bordered .el-descriptions-item__cell {
369
+  border: 1px solid #2d3f62;
370
+}
371
+</style>

+ 128
- 32
oa-ui/src/views/oa/device/index.vue Zobrazit soubor

@@ -1,12 +1,12 @@
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="设备编号" prop="code">
5
-        <el-input v-model="queryParams.code" placeholder="请输入设备编号" clearable @keyup.enter.native="handleQuery" />
4
+      <el-form-item label="出厂编号" prop="code">
5
+        <el-input v-model="queryParams.code" placeholder="请输入出厂编号" clearable @keyup.enter.native="handleQuery" />
6 6
       </el-form-item>
7 7
 
8
-      <el-form-item label="设备系列" prop="series">
9
-        <el-input v-model="queryParams.series" placeholder="请输入设备系列" clearable @keyup.enter.native="handleQuery" />
8
+      <el-form-item label="设备名称" prop="name">
9
+        <el-input v-model="queryParams.name" placeholder="请输入设备名称" clearable @keyup.enter.native="handleQuery" />
10 10
       </el-form-item>
11 11
       <el-form-item>
12 12
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
@@ -37,28 +37,39 @@
37 37
     <el-table v-loading="loading" :data="deviceList" @selection-change="handleSelectionChange">
38 38
       <el-table-column type="selection" width="55" align="center" />
39 39
       <!-- <el-table-column label="设备id" align="center" prop="deviceId" /> -->
40
-      <el-table-column label="设备编号" align="center" prop="code" />
40
+      <el-table-column label="出厂编号" align="center" prop="code" />
41
+      <el-table-column label="设备名称" align="center" prop="name" />
41 42
       <el-table-column label="设备类别" align="center" prop="type" />
42
-      <el-table-column label="设备系列" align="center" prop="series" />
43
+      <el-table-column label="规格型号" align="center" prop="series" />
43 44
       <el-table-column label="购置时间" align="center" prop="acquisitionTime" width="180">
44 45
         <template slot-scope="scope">
45 46
           <span>{{ parseTime(scope.row.acquisitionTime, '{y}-{m}-{d}') }}</span>
46 47
         </template>
47 48
       </el-table-column>
48
-      <el-table-column label="总价" align="center" prop="cost">
49
+      <el-table-column label="购买价格" align="center" prop="cost">
49 50
 
50 51
         <template slot-scope="scope">
51 52
           {{ scope.row.cost + '万元' }}
52 53
         </template>
53 54
       </el-table-column>
54 55
       <el-table-column label="预计使用年限" align="center" prop="expectLife" />
56
+      <el-table-column label="设备品牌" align="center" prop="brand" />
57
+      <el-table-column label="单日成本" align="center" prop="dayCost" />
58
+      <el-table-column label="存放地点" align="center" prop="place" />
59
+      <el-table-column label="校验周期(年)" align="center" prop="checkTerm" />
60
+      <el-table-column label="保修期(月)" align="center" prop="warranty" />
61
+      <el-table-column label="校验日期" align="center" prop="checkTime" />
62
+      <el-table-column label="管理部门" align="center" prop="manageDept" />
63
+      <el-table-column label="备注" align="center" prop="remark" />
55 64
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
56 65
 
57 66
         <template slot-scope="scope">
67
+          <el-button size="mini" type="text" icon="el-icon-plus" @click="handleAddDetail(scope.row)"
68
+            v-hasPermi="['oa:car:edit']">添加明细</el-button>
58 69
           <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
59 70
             v-hasPermi="['oa:device:edit']">修改</el-button>
60
-          <el-button size="mini" type="text" icon="el-icon-delete" style="color: #fc0000;" @click="handleDelete(scope.row)"
61
-            v-hasPermi="['oa:device:remove']">删除</el-button>
71
+          <el-button size="mini" type="text" icon="el-icon-delete" style="color: #fc0000;"
72
+            @click="handleDelete(scope.row)" v-hasPermi="['oa:device:remove']">删除</el-button>
62 73
         </template>
63 74
       </el-table-column>
64 75
     </el-table>
@@ -67,31 +78,106 @@
67 78
       @pagination="getList" />
68 79
 
69 80
     <!-- 添加或修改cmc设备信息对话框 -->
70
-    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
81
+    <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
71 82
       <el-form ref="form" :model="form" :rules="rules" label-width="100px">
72
-        <el-form-item label="设备编号" prop="code">
73
-          <el-input v-model="form.code" placeholder="请输入设备编号" />
74
-        </el-form-item>
75
-        <el-form-item label="设备系列" prop="series">
76
-          <el-input v-model="form.series" placeholder="请输入设备系列" />
77
-        </el-form-item>
78
-        <el-form-item label="设备类别" prop="type">
79
-          <el-input v-model="form.type" placeholder="请输入设备类别" />
80
-        </el-form-item>
81
-        <el-form-item label="购置时间" prop="acquisitionTime">
82
-          <el-date-picker clearable v-model="form.acquisitionTime" type="date" value-format="yyyy-MM-dd"
83
-            placeholder="请选择购置时间">
84
-          </el-date-picker>
85
-        </el-form-item>
86
-        <el-form-item label="总价" prop="cost">
87
-          <el-input style="width:130px;margin-right:10px;" v-model="form.cost" placeholder="请输入金额" />
88
-          <span>万元</span>
89
-        </el-form-item>
90
-        <el-form-item label="预计使用年限" prop="expectLife">
91
-          <el-input v-model="form.expectLife" placeholder="请输入年限" style="width:130px;margin-right:10px;" />
92
-          <span>年</span>
93
-        </el-form-item>
83
+        <el-row :gutter="20">
84
+          <el-col :span="12">
85
+            <el-form-item label="出厂编号" prop="code">
86
+              <el-input v-model="form.code" placeholder="请输入出厂编号" />
87
+            </el-form-item>
88
+          </el-col>
89
+          <el-col :span="12">
90
+            <el-form-item label="设备名称" prop="name">
91
+              <el-input v-model="form.name" placeholder="请输入设备名称" />
92
+            </el-form-item>
93
+          </el-col>
94
+        </el-row>
95
+        <el-row :gutter="20">
96
+          <el-col :span="12">
97
+            <el-form-item label="购置时间" prop="acquisitionTime">
98
+              <el-date-picker clearable v-model="form.acquisitionTime" type="date" value-format="yyyy-MM-dd"
99
+                placeholder="请选择购置时间">
100
+              </el-date-picker>
101
+            </el-form-item>
102
+          </el-col>
103
+          <el-col :span="12">
104
+            <el-form-item label="规格型号" prop="series">
105
+              <el-input v-model="form.series" placeholder="请输入规格型号" />
106
+            </el-form-item>
107
+          </el-col>
108
+        </el-row>
109
+        <el-row :gutter="20">
110
+          <el-col :span="12">
111
+            <el-form-item label="预计使用年限" prop="expectLife">
112
+              <el-input v-model="form.expectLife" placeholder="请输入年限" style="width:130px;margin-right:10px;" />
113
+              <span>年</span>
114
+            </el-form-item>
115
+          </el-col>
116
+          <el-col :span="12">
117
+            <el-form-item label="购买价格" prop="cost">
118
+              <el-input style="width:130px;margin-right:10px;" v-model="form.cost" placeholder="请输入金额" />
119
+              <span>万元</span>
120
+            </el-form-item>
121
+          </el-col>
122
+        </el-row>
123
+        <el-row :gutter="20">
124
+          <el-col :span="12">
125
+            <el-form-item label="设备品牌" prop="brand">
126
+              <el-input v-model="form.brand" placeholder="请输入设备品牌" />
127
+            </el-form-item>
128
+          </el-col>
129
+          <el-col :span="12">
130
+            <el-form-item label="单日成本" prop="dayCost">
131
+              <el-input v-model="form.dayCost" placeholder="请输入单日成本" />
132
+            </el-form-item>
133
+          </el-col>
134
+        </el-row>
135
+        <el-row :gutter="20">
136
+          <el-col :span="12">
137
+            <el-form-item label="存放地点" prop="place">
138
+              <el-input v-model="form.place" placeholder="请输入存放地点" />
139
+            </el-form-item>
140
+          </el-col>
141
+          <el-col :span="12">
142
+            <el-form-item label="管理部门" prop="manageDept">
143
+              <el-input v-model="form.manageDept" placeholder="请输入管理部门" />
144
+            </el-form-item>
145
+
146
+          </el-col>
147
+        </el-row>
148
+        <el-row :gutter="20">
149
+          <el-col :span="12">
150
+            <el-form-item label="校验周期" prop="checkTerm">
151
+              <el-input v-model="form.checkTerm" placeholder="请输入校验周期" />
152
+            </el-form-item>
153
+          </el-col>
154
+          <el-col :span="12">
155
+            <el-form-item label="校验日期" prop="checkTime">
156
+              <el-date-picker clearable v-model="form.checkTime" type="date" value-format="yyyy-MM-dd"
157
+                placeholder="请选择校验日期">
158
+              </el-date-picker>
159
+            </el-form-item>
160
+          </el-col>
161
+        </el-row>
162
+        <el-row :gutter="20">
163
+          <el-col :span="12">
164
+            <el-form-item label="保修期" prop="warranty">
165
+              <el-input v-model="form.warranty" placeholder="请输入保修期" />
166
+            </el-form-item>
167
+          </el-col>
168
+          <el-col :span="12">
169
+
170
+          </el-col>
171
+        </el-row>
172
+        <el-row :gutter="20">
173
+          <el-col :span="24">
174
+            <el-form-item label="备注" prop="remark">
175
+              <el-input type="textarea" v-model="form.remark" placeholder="请输入备注" />
176
+            </el-form-item>
177
+          </el-col>
178
+        </el-row>
94 179
       </el-form>
180
+
95 181
       <div slot="footer" class="dialog-footer">
96 182
         <el-button type="primary" @click="submitForm">确 定</el-button>
97 183
         <el-button @click="cancel">取 消</el-button>
@@ -196,6 +282,16 @@ export default {
196 282
       this.open = true;
197 283
       this.title = "添加设备信息";
198 284
     },
285
+    // 新增明细按钮
286
+    handleAddDetail(row) {
287
+      console.log(row);
288
+      this.$router.push({
289
+        path: '/device/expense',
290
+        query: {
291
+          deviceId: row.deviceId,
292
+        }
293
+      })
294
+    },
199 295
     /** 修改按钮操作 */
200 296
     handleUpdate(row) {
201 297
       this.reset();

Loading…
Zrušit
Uložit