duwendi 1 year ago
parent
commit
c19cfcee85

+ 34 - 6
src/api/article_liao.js

@@ -166,17 +166,41 @@ export default {
166 166
   dashDataDockingPage(params){
167 167
     return axios.get('/dash/data/docking/page', {params})
168 168
   },
169
-  //从业人员资质管理
170
-  dashEmployeeQualificationQualifications(params){
171
-    return axios.get('/dash/employee/qualification/qualifications', {params})
172
-  },
173
-  //从业人员考核管理
169
+  //数据对接删除
174 170
   dashDataDockingDelete(params){
175 171
     return axios.post('/dash/data/docking/delete', params)
176 172
   },
173
+  //从业人员资质分页列表
174
+  dashEmployeeQualificationQualifications(params){
175
+    return axios.get('/dash/employee/qualification/page', {params})
176
+  },
177
+  // 新增从业人员资质
178
+  addQualification(params){
179
+    return axios.post('/dash/employee/qualification/add', params)
180
+  },
181
+  // 修改从业人员资质
182
+  editQualification(params){
183
+    return axios.post('/dash/employee/qualification/edit', params)
184
+  },
185
+  // 删除从业人员资质 /dash/employee/qualification/delete
186
+  deleteQualification(params){
187
+    return axios.post('/dash/employee/qualification/delete', params)
188
+  },
177 189
   //从业人员考核
178 190
   dashEmployeeQualificationExamine(params){
179
-    return axios.get('/dash/employee/qualification/examine', params)
191
+    return axios.get('/dash/employee/qualification/examine/page', {params})
192
+  },
193
+  // 新增从业人员考核
194
+  addExamine(params){
195
+    return axios.post('/dash/employee/qualification/examine/add', params)
196
+  },
197
+  // 修改从业人员考核
198
+  editExamine(params){
199
+    return axios.post('/dash/employee/qualification/examine/edit', params)
200
+  },
201
+  // 删除从业人员考核
202
+  deleteExamine(params){
203
+    return axios.post('/dash/employee/qualification/examine/delete', params)
180 204
   },
181 205
   //车主停车欠费情况
182 206
   dashCarOwnerCreditPage(params){
@@ -214,5 +238,9 @@ export default {
214 238
   dashBusinessOverviewInfoPage(params){
215 239
     return axios.get('/dash/business/overview/infoPage', {params})
216 240
   },
241
+  // 停车场码表
242
+  parkDic(params) {
243
+    return axios.get(`/dash/customer/complaint/list`, {params})
244
+  },
217 245
 
218 246
 }

+ 4 - 0
src/api/article_z.js

@@ -95,6 +95,10 @@ export default {
95 95
   khtsSave(params) {
96 96
     return axios.post(`/dash/customer/complaint/save`, params)
97 97
   },
98
+  // 客户投诉监管_客诉登记删除
99
+  khtsDelete(params) {
100
+    return axios.post(`/dash/customer/complaint/delete`, params)
101
+  },
98 102
   // 客户投诉监管_停车场码表
99 103
   parkDic(params) {
100 104
     return axios.get(`/dash/customer/complaint/list`, {params})

+ 1 - 1
src/assets/css/element_ui.css

@@ -4,7 +4,7 @@
4 4
 }
5 5
 
6 6
 .el-form .el-form-item {
7
-  margin-bottom: 0px;
7
+  /*margin-bottom: 0px;*/
8 8
 }
9 9
 
10 10
 

+ 202 - 20
src/pages/index/components/berth_road.vue

@@ -1,5 +1,35 @@
1 1
 <template>
2 2
   <div class="body-wrapper">
3
+    <el-form class="form-wrapper" :inline="true" :model="formInline1">
4
+      <el-form-item label="行政区">
5
+        <el-select clearable  v-model="formInline1.regionCode" placeholder="请选择" popper-class="cur-select">
6
+          <el-option v-for="item in districtOptions"  :key="item.label" :label="item.label" :value="item.value"></el-option>
7
+        </el-select>
8
+      </el-form-item>
9
+      <el-form-item label="街道">
10
+        <el-input  v-model="formInline1.streetName" placeholder="请输入"></el-input>
11
+      </el-form-item>
12
+      <el-form-item label="停车场">
13
+        <el-select clearable v-model="formInline1.parkId" placeholder="请选择" popper-class="cur-select">
14
+          <el-option v-for="item in carOptions" :key="item.parkId" :label="item.carParkName" :value="item.parkId"></el-option>
15
+        </el-select>
16
+      </el-form-item>
17
+      <el-form-item label="查询日期">
18
+        <el-date-picker
19
+          clearable
20
+          v-model="formInline1.time"
21
+          type="daterange"
22
+          range-separator="至"
23
+          start-placeholder="开始日期"
24
+          value-format="yyyy-MM-dd"
25
+          end-placeholder="结束日期">
26
+        </el-date-picker>
27
+      </el-form-item>
28
+      <el-form-item>
29
+        <el-button type="primary" @click="queryAll">查询</el-button>
30
+      </el-form-item>
31
+    </el-form>
32
+    <br>
3 33
     <div style="display: flex; justify-content: space-between;">
4 34
       <div style="width: 50%; height: 300px">
5 35
         <div align="center" style="color: white">泊位饱和度</div>
@@ -107,6 +137,7 @@ import linechart from "@/components/lineChart";
107 137
 import barchart from "@/components/barChart";
108 138
 import vtable from "@/components/vtableNew";
109 139
 import api from "@/api/article_liao";
140
+import options from '@/util/options'
110 141
 
111 142
 
112 143
 export default {
@@ -118,6 +149,14 @@ export default {
118 149
   },
119 150
   data() {
120 151
     return {
152
+      districtOptions: options.districtOptions,
153
+      carOptions: [],
154
+      formInline1: {
155
+        parkId: '',
156
+        time: [],
157
+        regionCode: '',
158
+        streetName: ''
159
+      },
121 160
       modelPieColor: ["#4382f6", "#9078f8", "#79a7db", "#FF9800"],
122 161
       modelData: {
123 162
         list: []
@@ -129,16 +168,36 @@ export default {
129 168
     }
130 169
   },
131 170
   mounted() {
132
-    this.dashBerthRoadStat1()
133
-    this.dashBerthRoadStat2()
134
-    this.dashBerthRoadStat3()
135
-    this.dashBerthRoadStat4()
136
-    this.dashBerthRoadStat5()
171
+    this.getParkDic()
172
+    this.queryAll()
137 173
   },
138 174
   watch: {
139 175
 
140 176
   },
141 177
   methods: {
178
+    getParkDic() {
179
+      api.parkDic().then(res => {
180
+        this.carOptions = res.data || [];
181
+      })
182
+    },
183
+    queryAll() {
184
+      let params = {...this.formInline1}
185
+      if (
186
+        this.formInline1.time && this.formInline1.time.length === 2 &&
187
+        this.formInline1.time[1] !== ""
188
+      ) {
189
+        this.formInline1.time[0] = this.formInline1.time[0].substring(0, 10) + " 00:00:00";
190
+        this.formInline1.time[1] = this.formInline1.time[1].substring(0, 10) + " 23:59:59";
191
+        params.begin= this.formInline1.time[0]
192
+        params.end = this.formInline1.time[1]
193
+      }
194
+      delete params.time
195
+      this.dashBerthRoadStat1(params)
196
+      this.dashBerthRoadStat2(params)
197
+      this.dashBerthRoadStat3(params)
198
+      this.dashBerthRoadStat4(params)
199
+      this.dashBerthRoadStat5(params)
200
+    },
142 201
     lineTooltipFormat1(params) {
143 202
       const data = params[0].data;
144 203
       return `<div class="line-tooltip">
@@ -186,28 +245,28 @@ export default {
186 245
         params[0].data.cs || "--"}个</div>
187 246
 </div>`;
188 247
     },
189
-    dashBerthRoadStat1(){
190
-      api.dashBerthRoadStat1().then(res =>{
248
+    dashBerthRoadStat1(params){
249
+      api.dashBerthRoadStat1(params).then(res =>{
191 250
         this.bardata = res.data
192 251
       })
193 252
     },
194
-    dashBerthRoadStat2(){
195
-      api.dashBerthRoadStat2().then(res =>{
253
+    dashBerthRoadStat2(params){
254
+      api.dashBerthRoadStat2(params).then(res =>{
196 255
         this.linedata1 = res.data
197 256
       })
198 257
     },
199
-    dashBerthRoadStat3(){
200
-      api.dashBerthRoadStat3().then(res =>{
258
+    dashBerthRoadStat3(params){
259
+      api.dashBerthRoadStat3(params).then(res =>{
201 260
         this.modelData.list = res.data
202 261
       })
203 262
     },
204
-    dashBerthRoadStat4(){
205
-      api.dashBerthRoadStat4().then(res =>{
263
+    dashBerthRoadStat4(params){
264
+      api.dashBerthRoadStat4(params).then(res =>{
206 265
         this.linedata = res.data
207 266
       })
208 267
     },
209
-    dashBerthRoadStat5(){
210
-      api.dashBerthRoadStat5().then(res =>{
268
+    dashBerthRoadStat5(params){
269
+      api.dashBerthRoadStat5(params).then(res =>{
211 270
         this.linedata2 = res.data
212 271
       })
213 272
     },
@@ -215,16 +274,139 @@ export default {
215 274
 }
216 275
 </script>
217 276
 <style  lang="scss" scoped>
277
+.form-wrapper {
278
+  margin-bottom: 20px;
279
+}
280
+
281
+/deep/ .el-input__inner {
282
+  background: #2d3744;
283
+  border: none;
284
+  border-radius: 0;
285
+}
286
+
287
+/deep/ .el-select {
288
+  height: 40px;
289
+
290
+  .el-input__inner {
291
+    height: 40px;
292
+  }
293
+
294
+  .el-input__prefix, .el-input__suffix {
295
+    height: 40px;
296
+  }
297
+
298
+  /* 下面设置右侧按钮居中 */
299
+  .el-input__suffix {
300
+    top: 0px;
301
+    display: flex;
302
+    justify-content: center;
303
+    align-items: center;
304
+    flex-wrap: nowrap;
305
+    flex-direction: row;
306
+    align-content: flex-start;
307
+  }
308
+
309
+  /* 输入框加上上下边是 32px + 2px =34px */
310
+  .el-input__icon {
311
+    line-height: 0px;
312
+  }
313
+}
314
+
315
+/deep/ .form-wrapper .el-button {
316
+  background: linear-gradient(90deg, #0158d9, #3c97e4);
317
+  width: 100px;
318
+  height: 40px;
319
+}
320
+
218 321
 .body-wrapper {
219
-  width: 100%;
220
-  height: 100%;
221
-  box-sizing: border-box;
322
+  padding: 20px;
222 323
   background: #0c0c0c;
324
+  .button-block{
325
+    text-align: right;
326
+    margin-bottom: 20px;
327
+  }
328
+  .table-pagination{
329
+    text-align: right;
330
+  }
331
+  .search-card{
332
+    font-size: 24px;
333
+    font-weight: bold;
334
+    color: #3498db;
335
+    margin-bottom: 20px;
336
+    .input-wrapper{
337
+      width: 36%;
338
+    }
339
+  }
340
+}
341
+.audit-dialog{
342
+  .mg-bt{
343
+    margin-bottom: 24px;
344
+  }
345
+  .label{
346
+    text-align: right;
347
+  }
223 348
 }
224 349
 
225
-.model-pie-body {
350
+.charts_all {
351
+  display: flex;
352
+  justify-content: space-around;
226 353
   width: 100%;
227
-  height: 99%;
354
+  height: 400px;
355
+}
356
+
357
+.charts {
358
+  width: 30%;
359
+  height: 300px;
360
+}
361
+
362
+.btn_save {
363
+  background-color: #3498db;
364
+  color: #ffffff;
365
+  padding: 10px 20px;
366
+  cursor: pointer;
367
+  border: none;
368
+  border-radius: 4px;
369
+  font-size: 16px;
370
+  height: 40px;
371
+}
372
+
373
+.sel {
374
+  height: 200px;
375
+  margin-right: 10px;
376
+}
377
+
378
+.input-search {
379
+  width: 100%;
380
+  padding: 10px;
381
+  margin-bottom: 20px;
382
+  box-sizing: border-box;
383
+  background-color: #2a2a2a;
384
+  border: 1px solid #333;
385
+  color: #ffffff;
386
+}
387
+
388
+.audit-dialog {
389
+  .mg-bt {
390
+    margin-bottom: 24px;
391
+  }
392
+
393
+  .label {
394
+    text-align: right;
395
+  }
396
+
397
+  .form-div {
398
+    /deep/ .el-input__inner {
399
+      height: 35px;
400
+      width: 100%;
401
+      border: 1px solid #a6a5a5;
402
+      color: #fff;
403
+      background: #2d3744;
404
+    }
405
+
406
+    /deep/ .el-input__icon {
407
+      //line-height: 35px;
408
+    }
409
+  }
228 410
 }
229 411
 
230 412
 

+ 202 - 21
src/pages/index/components/berth_road_out.vue

@@ -1,5 +1,35 @@
1 1
 <template>
2 2
   <div class="body-wrapper">
3
+    <el-form class="form-wrapper" :inline="true" :model="formInline1">
4
+      <el-form-item label="行政区">
5
+        <el-select clearable  v-model="formInline1.regionCode" placeholder="请选择" popper-class="cur-select">
6
+          <el-option v-for="item in districtOptions"  :key="item.label" :label="item.label" :value="item.value"></el-option>
7
+        </el-select>
8
+      </el-form-item>
9
+      <el-form-item label="街道">
10
+        <el-input  v-model="formInline1.streetName" placeholder="请输入"></el-input>
11
+      </el-form-item>
12
+      <el-form-item label="停车场">
13
+        <el-select clearable v-model="formInline1.parkId" placeholder="请选择" popper-class="cur-select">
14
+          <el-option v-for="item in carOptions" :key="item.parkId" :label="item.carParkName" :value="item.parkId"></el-option>
15
+        </el-select>
16
+      </el-form-item>
17
+      <el-form-item label="查询日期">
18
+        <el-date-picker
19
+          clearable
20
+          v-model="formInline1.time"
21
+          type="daterange"
22
+          range-separator="至"
23
+          start-placeholder="开始日期"
24
+          value-format="yyyy-MM-dd"
25
+          end-placeholder="结束日期">
26
+        </el-date-picker>
27
+      </el-form-item>
28
+      <el-form-item>
29
+        <el-button type="primary" @click="queryAll">查询</el-button>
30
+      </el-form-item>
31
+    </el-form>
32
+    <br>
3 33
     <div style="display: flex; justify-content: space-between;">
4 34
       <div style="width: 50%; height: 300px">
5 35
         <div align="center" style="color: white">泊位饱和度</div>
@@ -107,6 +137,7 @@ import linechart from "@/components/lineChart";
107 137
 import barchart from "@/components/barChart";
108 138
 import vtable from "@/components/vtableNew";
109 139
 import api from "@/api/article_liao";
140
+import options from '@/util/options'
110 141
 
111 142
 export default {
112 143
   components: {
@@ -117,6 +148,14 @@ export default {
117 148
   },
118 149
   data() {
119 150
     return {
151
+      districtOptions: options.districtOptions,
152
+      carOptions: [],
153
+      formInline1: {
154
+        parkId: '',
155
+        time: [],
156
+        regionCode: '',
157
+        streetName: ''
158
+      },
120 159
       modelPieColor: ["#4382f6", "#9078f8", "#79a7db", "#FF9800"],
121 160
       modelData: {
122 161
         list: []
@@ -129,17 +168,36 @@ export default {
129 168
     }
130 169
   },
131 170
   mounted() {
132
-    this.dashBertRroadOutStat1()
133
-    this.dashBertRroadOutStat2()
134
-    this.dashBertRroadOutStat3()
135
-    this.dashBertRroadOutStat4()
136
-    this.dashBertRroadOutStat5()
171
+    this.getParkDic()
172
+    this.queryAll()
137 173
   },
138 174
   watch: {
139 175
 
140 176
   },
141 177
   methods: {
142
-
178
+    getParkDic() {
179
+      api.parkDic().then(res => {
180
+        this.carOptions = res.data || [];
181
+      })
182
+    },
183
+    queryAll() {
184
+      let params = {...this.formInline1}
185
+      if (
186
+        this.formInline1.time && this.formInline1.time.length === 2 &&
187
+        this.formInline1.time[1] !== ""
188
+      ) {
189
+        this.formInline1.time[0] = this.formInline1.time[0].substring(0, 10) + " 00:00:00";
190
+        this.formInline1.time[1] = this.formInline1.time[1].substring(0, 10) + " 23:59:59";
191
+        params.begin= this.formInline1.time[0]
192
+        params.end = this.formInline1.time[1]
193
+      }
194
+      delete params.time
195
+      this.dashBertRroadOutStat1(params)
196
+      this.dashBertRroadOutStat2(params)
197
+      this.dashBertRroadOutStat3(params)
198
+      this.dashBertRroadOutStat4(params)
199
+      this.dashBertRroadOutStat5(params)
200
+    },
143 201
     lineTooltipFormat1(params) {
144 202
       const data = params[0].data;
145 203
       return `<div class="line-tooltip">
@@ -187,28 +245,28 @@ export default {
187 245
         params[0].data.cs || "--"}个</div>
188 246
 </div>`;
189 247
     },
190
-    dashBertRroadOutStat1(){
191
-      api.dashBertRroadOutStat1().then(res =>{
248
+    dashBertRroadOutStat1(params){
249
+      api.dashBertRroadOutStat1(params).then(res =>{
192 250
         this.bardata = res.data
193 251
       })
194 252
     },
195
-    dashBertRroadOutStat2(){
196
-      api.dashBertRroadOutStat2().then(res =>{
253
+    dashBertRroadOutStat2(params){
254
+      api.dashBertRroadOutStat2(params).then(res =>{
197 255
         this.linedata1 = res.data
198 256
       })
199 257
     },
200
-    dashBertRroadOutStat3(){
201
-      api.dashBertRroadOutStat3().then(res =>{
258
+    dashBertRroadOutStat3(params){
259
+      api.dashBertRroadOutStat3(params).then(res =>{
202 260
         this.modelData.list = res.data
203 261
       })
204 262
     },
205
-    dashBertRroadOutStat4(){
206
-      api.dashBertRroadOutStat4().then(res =>{
263
+    dashBertRroadOutStat4(params){
264
+      api.dashBertRroadOutStat4(params).then(res =>{
207 265
         this.linedata = res.data
208 266
       })
209 267
     },
210
-    dashBertRroadOutStat5(){
211
-      api.dashBertRroadOutStat5().then(res =>{
268
+    dashBertRroadOutStat5(params){
269
+      api.dashBertRroadOutStat5(params).then(res =>{
212 270
         this.linedata2 = res.data
213 271
       })
214 272
     },
@@ -216,16 +274,139 @@ export default {
216 274
 }
217 275
 </script>
218 276
 <style  lang="scss" scoped>
277
+.form-wrapper {
278
+  margin-bottom: 20px;
279
+}
280
+
281
+/deep/ .el-input__inner {
282
+  background: #2d3744;
283
+  border: none;
284
+  border-radius: 0;
285
+}
286
+
287
+/deep/ .el-select {
288
+  height: 40px;
289
+
290
+  .el-input__inner {
291
+    height: 40px;
292
+  }
293
+
294
+  .el-input__prefix, .el-input__suffix {
295
+    height: 40px;
296
+  }
297
+
298
+  /* 下面设置右侧按钮居中 */
299
+  .el-input__suffix {
300
+    top: 0px;
301
+    display: flex;
302
+    justify-content: center;
303
+    align-items: center;
304
+    flex-wrap: nowrap;
305
+    flex-direction: row;
306
+    align-content: flex-start;
307
+  }
308
+
309
+  /* 输入框加上上下边是 32px + 2px =34px */
310
+  .el-input__icon {
311
+    line-height: 0px;
312
+  }
313
+}
314
+
315
+/deep/ .form-wrapper .el-button {
316
+  background: linear-gradient(90deg, #0158d9, #3c97e4);
317
+  width: 100px;
318
+  height: 40px;
319
+}
320
+
219 321
 .body-wrapper {
220
-  width: 100%;
221
-  height: 100%;
222
-  box-sizing: border-box;
322
+  padding: 20px;
223 323
   background: #0c0c0c;
324
+  .button-block{
325
+    text-align: right;
326
+    margin-bottom: 20px;
327
+  }
328
+  .table-pagination{
329
+    text-align: right;
330
+  }
331
+  .search-card{
332
+    font-size: 24px;
333
+    font-weight: bold;
334
+    color: #3498db;
335
+    margin-bottom: 20px;
336
+    .input-wrapper{
337
+      width: 36%;
338
+    }
339
+  }
340
+}
341
+.audit-dialog{
342
+  .mg-bt{
343
+    margin-bottom: 24px;
344
+  }
345
+  .label{
346
+    text-align: right;
347
+  }
224 348
 }
225 349
 
226
-.model-pie-body {
350
+.charts_all {
351
+  display: flex;
352
+  justify-content: space-around;
227 353
   width: 100%;
228
-  height: 99%;
354
+  height: 400px;
355
+}
356
+
357
+.charts {
358
+  width: 30%;
359
+  height: 300px;
360
+}
361
+
362
+.btn_save {
363
+  background-color: #3498db;
364
+  color: #ffffff;
365
+  padding: 10px 20px;
366
+  cursor: pointer;
367
+  border: none;
368
+  border-radius: 4px;
369
+  font-size: 16px;
370
+  height: 40px;
371
+}
372
+
373
+.sel {
374
+  height: 200px;
375
+  margin-right: 10px;
376
+}
377
+
378
+.input-search {
379
+  width: 100%;
380
+  padding: 10px;
381
+  margin-bottom: 20px;
382
+  box-sizing: border-box;
383
+  background-color: #2a2a2a;
384
+  border: 1px solid #333;
385
+  color: #ffffff;
386
+}
387
+
388
+.audit-dialog {
389
+  .mg-bt {
390
+    margin-bottom: 24px;
391
+  }
392
+
393
+  .label {
394
+    text-align: right;
395
+  }
396
+
397
+  .form-div {
398
+    /deep/ .el-input__inner {
399
+      height: 35px;
400
+      width: 100%;
401
+      border: 1px solid #a6a5a5;
402
+      color: #fff;
403
+      background: #2d3744;
404
+    }
405
+
406
+    /deep/ .el-input__icon {
407
+      //line-height: 35px;
408
+    }
409
+  }
229 410
 }
230 411
 
231 412
 

+ 170 - 51
src/pages/index/components/customer_complaint.vue

@@ -7,31 +7,79 @@
7 7
     <el-form class="form-wrapper" :inline="true" :model="formInline">
8 8
       <el-form-item label="投诉类型">
9 9
         <el-select clearable v-model="formInline.comType" placeholder="投诉类型" popper-class="cur-select">
10
-          <el-option label="全部" value=""></el-option>
11
-          <el-option label="经营服务类停车问题" value="经营服务类停车问题"></el-option>
12
-          <el-option label="非法经营停车问题" value="非法经营停车问题"></el-option>
13
-          <el-option label="不提供税票" value="不提供税票"></el-option>
14
-          <el-option label="设备问题" value="设备问题"></el-option>
10
+          <el-option
11
+            v-for="item in complaintOptions"
12
+            :key="item.value"
13
+            :label="item.label"
14
+            :value="item.value">
15
+          </el-option>
16
+        </el-select>
17
+      </el-form-item>
18
+      <el-form-item label="停车场">
19
+        <el-select clearable v-model="formInline.parkId" placeholder="请选择" popper-class="cur-select">
20
+          <el-option v-for="item in carOptions" :key="item.parkId" :label="item.carParkName" :value="item.parkId"></el-option>
15 21
         </el-select>
16 22
       </el-form-item>
17 23
       <el-form-item>
18 24
         <el-button type="primary" @click="onSubmit">查询</el-button>
25
+        <el-button type="primary" @click="handleAdd">客诉登记</el-button>
19 26
       </el-form-item>
20 27
     </el-form>
21 28
     <br>
22 29
     <br>
23
-    <br>
24
-    <br>
25 30
     <el-table :data="tableData" style="background: #2a2a2a;border-color: #333;">
31
+      <el-table-column
32
+        label="序号"
33
+        type="index"
34
+        :index="indexMethod">
35
+      </el-table-column>
26 36
       <el-table-column v-for="(item, index) in columns" :key="index" :label="item.label" :prop="item.key">
27 37
       </el-table-column>
38
+      <el-table-column
39
+        label="操作"
40
+        width="200">
41
+        <template slot-scope="scope" style="display: inline-block">
42
+          <el-popconfirm title="确定删除吗?" @confirm="deleteRow(scope.row)">
43
+            <el-button type="danger" slot="reference">删除</el-button>
44
+          </el-popconfirm>
45
+        </template>
46
+      </el-table-column>
28 47
     </el-table>
29 48
     <div class="table-pagination">
30
-      <el-pagination :background="false" layout="total, prev, pager, next" :total="total" @current-change="handlePageChange"
49
+      <el-pagination :background="false" layout="total, prev, pager, next" :total="total"
50
+                     @current-change="handlePageChange"
31 51
                      :current-page.sync="pageNum" :page-size.sync="pageSize">
32 52
       </el-pagination>
33 53
     </div>
34
-
54
+    <el-form class="form-wrapper" :inline="true" :model="formInline1">
55
+      <el-form-item label="行政区">
56
+        <el-select clearable  v-model="formInline1.regionCode" placeholder="请选择" popper-class="cur-select">
57
+          <el-option v-for="item in districtOptions"  :key="item.label" :label="item.label" :value="item.value"></el-option>
58
+        </el-select>
59
+      </el-form-item>
60
+      <el-form-item label="街道">
61
+        <el-input  v-model="formInline1.streetName" placeholder="请输入"></el-input>
62
+      </el-form-item>
63
+      <el-form-item label="停车场">
64
+        <el-select clearable v-model="formInline1.parkId" placeholder="请选择" popper-class="cur-select">
65
+          <el-option v-for="item in carOptions" :key="item.parkId" :label="item.carParkName" :value="item.parkId"></el-option>
66
+        </el-select>
67
+      </el-form-item>
68
+      <el-form-item label="查询日期">
69
+        <el-date-picker
70
+          clearable
71
+          v-model="formInline1.time"
72
+          type="daterange"
73
+          range-separator="至"
74
+          start-placeholder="开始日期"
75
+          value-format="yyyy-MM-dd"
76
+          end-placeholder="结束日期">
77
+        </el-date-picker>
78
+      </el-form-item>
79
+      <el-form-item>
80
+        <el-button type="primary" @click="getModelDataData">查询</el-button>
81
+      </el-form-item>
82
+    </el-form>
35 83
     <div class="charts_all">
36 84
       <div class="charts">
37 85
         <piechart
@@ -52,35 +100,39 @@
52 100
       width="60%"
53 101
       height="600px"
54 102
       custom-class="audit-dialog">
55
-      <el-form  class="form-div"  style="height: 120px"   ref="formLabelAlign" label-position="left" label-width="120px" :model="formLabelAlign" >
56
-        <el-form-item label="投诉类型" required>
57
-          <el-select clearable v-model="formLabelAlign.comType" placeholder="请选择">
58
-            <el-option label="源汇区" value="源汇区"></el-option>
59
-            <el-option label="郾城区" value="郾城区"></el-option>
60
-            <el-option label="召陵区" value="召陵区"></el-option>
61
-            <el-option label="舞阳县" value="舞阳县"></el-option>
62
-            <el-option label="临颍县" value="临颍县"></el-option>
103
+      <el-form class="form-div" style="height: 120px" :rules="rules" ref="formLabelAlign" label-position="left" label-width="120px"
104
+               :model="formLabelAlign">
105
+        <el-form-item label="投诉类型"  prop="comType">
106
+          <el-select v-model="formLabelAlign.comType" placeholder="请选择">
107
+            <el-option
108
+              v-for="item in complaintOptions"
109
+              :key="item.value"
110
+              :label="item.label"
111
+              :value="item.value">
112
+            </el-option>
63 113
           </el-select>
64 114
         </el-form-item>
65
-        <el-form-item label="投诉停车场" required>
66
-          <el-select clearable  v-model="formLabelAlign.parkId" placeholder="请选择" popper-class="cur-select">
67
-            <el-option v-for="item in carOptions"  :key="item.id" :label="item.carParkName" :value="item.id"></el-option>
115
+        <el-form-item label="投诉停车场" prop="parkId">
116
+          <el-select v-model="formLabelAlign.parkId" placeholder="请选择" popper-class="cur-select">
117
+            <el-option v-for="item in carOptions" :key="item.parkId" :label="item.carParkName" :value="item.parkId"></el-option>
68 118
           </el-select>
69 119
         </el-form-item>
70
-        <el-form-item label="投诉内容" required>
71
-          <el-input v-model="formLabelAlign.comContent" placeholder="投诉内容"/>
120
+        <el-form-item prop="comContent" label="投诉内容">
121
+          <el-input type="text" maxlength="50" show-word-limit  v-model="formLabelAlign.comContent" placeholder="投诉内容"/>
72 122
         </el-form-item>
73 123
       </el-form>
74
-      <span slot="footer" class="dialog-footer">
75
-            <el-button @click="dialogVisible = false">取 消</el-button>
124
+      <div slot="footer" class="dialog-footer" style="margin-top: 10px;">
125
+            <el-button @click="handleCancel('formLabelAlign')">取 消</el-button>
76 126
             <el-button type="primary" @click="handleConfirm('formLabelAlign')">确 定</el-button>
77
-        </span>
127
+        </div>
78 128
     </el-dialog>
79 129
   </div>
80 130
 </template>
81 131
 <script>
82 132
 import piechart from "@/components/pieChart";
83 133
 import api from "@/api/article_z";
134
+import options from '@/util/options'
135
+import {validateInput} from '@/util/common'
84 136
 
85 137
 export default {
86 138
   components: {
@@ -88,9 +140,30 @@ export default {
88 140
   },
89 141
   data() {
90 142
     return {
143
+      rules: {
144
+        comType: [
145
+          { required: true, message: '请选择投诉类型', trigger: 'change' }
146
+        ],
147
+        parkId: [
148
+          { required: true, message: '请选择车场', trigger: 'change' }
149
+        ],
150
+        comContent: [
151
+          { required: true, message: '请输入投诉内容', trigger: 'blur' },
152
+          { validator: validateInput, trigger: "blur" },
153
+        ]
154
+      },
91 155
       formInline: {
92
-        comType: ''
156
+        comType: '',
157
+        parkId: ''
158
+      },
159
+      formInline1: {
160
+        parkId: '',
161
+        time: [],
162
+        regionCode: '',
163
+        streetName: ''
93 164
       },
165
+      districtOptions: options.districtOptions,
166
+      complaintOptions: options.complaintOptions,
94 167
       options: [{
95 168
         value: '经营服务类停车问题',
96 169
         label: '经营服务类停车问题'
@@ -116,7 +189,7 @@ export default {
116 189
         },
117 190
         {
118 191
           label: '所属停车场',
119
-          key: 'carParkName'
192
+          key: 'parkName'
120 193
         },
121 194
         {
122 195
           label: '处理状态',
@@ -128,7 +201,7 @@ export default {
128 201
         }
129 202
       ],
130 203
       carOptions: [],
131
-      modelPieColor: ["#4382f6","#9078f8","#C1FFC1","#1E90FF"],
204
+      modelPieColor: ["#4382f6", "#9078f8", "#C1FFC1", "#1E90FF"],
132 205
       modelData: [],
133 206
       tableData: [],
134 207
       total: 0,
@@ -137,8 +210,9 @@ export default {
137 210
       radio: '2',
138 211
       dialogVisible: false,
139 212
       formLabelAlign: {
140
-        mid: '',
141
-        searchWords:''
213
+        parkId: '',
214
+        comType: '',
215
+        comContent: ''
142 216
       },
143 217
       selRow: undefined,
144 218
       searchWords: undefined,
@@ -150,36 +224,58 @@ export default {
150 224
     this.getTableData()
151 225
     this.getModelDataData()
152 226
   },
153
-  watch: {
154
-  },
227
+  watch: {},
155 228
   methods: {
229
+    indexMethod(index) {
230
+      return this.pageSize * (this.pageNum - 1) + index + 1
231
+    },
156 232
     onSubmit() {
157 233
       this.pageNum = 1
158 234
       this.getTableData()
159 235
     },
160 236
     getParkDic() {
161
-      api.parkDic().then(res=>{
237
+      api.parkDic().then(res => {
162 238
         this.carOptions = res.data || [];
163 239
       })
164 240
     },
165
-    getModelDataData(){
166
-      api.queryCustomerComplaint_Ksfx().then(res=>{
241
+    getModelDataData() {
242
+      let params = {...this.formInline1}
243
+      if (
244
+        this.formInline1.time && this.formInline1.time.length === 2 &&
245
+        this.formInline1.time[1] !== ""
246
+      ) {
247
+        this.formInline1.time[0] = this.formInline1.time[0].substring(0, 10) + " 00:00:00";
248
+        this.formInline1.time[1] = this.formInline1.time[1].substring(0, 10) + " 23:59:59";
249
+        params.begin= this.formInline1.time[0]
250
+        params.end = this.formInline1.time[1]
251
+      }
252
+      delete params.time
253
+      api.queryCustomerComplaint_Ksfx(params).then(res => {
167 254
         this.modelData = res.data;
168 255
       })
169 256
     },
170 257
     handlePageChange() {
171 258
       this.getTableData()
172 259
     },
173
-    handleAdd () {
260
+    handleAdd() {
174 261
       this.title = '客诉登记'
175 262
       this.formLabelAlign = {}
176 263
       this.dialogVisible = true
177 264
     },
265
+    deleteRow (record) {
266
+      api.khtsDelete([{id: record.id}]).then(res => {
267
+        if (res.code === 200) {
268
+          this.$message({type: 'success', message: '删除成功!'})
269
+          this.getTableData()
270
+        }
271
+      })
272
+    },
178 273
     handleConfirm(formName) {
179 274
       this.$refs[formName].validate((valid) => {
275
+        console.log(valid, '=======valid====')
180 276
         if (valid) {
181 277
           api.khtsSave(this.formLabelAlign).then(res => {
182
-            if(res.code === 200) {
278
+            if (res.code === 200) {
183 279
               this.dialogVisible = false
184 280
               this.$message({
185 281
                 message: '添加成功!',
@@ -191,6 +287,10 @@ export default {
191 287
         }
192 288
       })
193 289
     },
290
+    handleCancel(formName) {
291
+      this.$refs[formName].resetFields();
292
+      this.dialogVisible = false
293
+    },
194 294
     getTableData() {
195 295
       const {pageNum, pageSize} = this
196 296
       api.khtsListByPage({current: pageNum, size: pageSize, ...this.formInline}).then(res => {
@@ -201,20 +301,24 @@ export default {
201 301
   }
202 302
 }
203 303
 </script>
204
-<style  lang="scss" scoped>
304
+<style lang="scss" scoped>
205 305
 .form-wrapper {
206 306
   margin-bottom: 20px;
207 307
 }
308
+
208 309
 /deep/ .el-input__inner {
209 310
   background: #2d3744;
210 311
   border: none;
211 312
   border-radius: 0;
212 313
 }
314
+
213 315
 /deep/ .el-select {
214 316
   height: 40px;
317
+
215 318
   .el-input__inner {
216 319
     height: 40px;
217 320
   }
321
+
218 322
   .el-input__prefix, .el-input__suffix {
219 323
     height: 40px;
220 324
   }
@@ -229,20 +333,22 @@ export default {
229 333
     flex-direction: row;
230 334
     align-content: flex-start;
231 335
   }
336
+
232 337
   /* 输入框加上上下边是 32px + 2px =34px */
233 338
   .el-input__icon {
234 339
     line-height: 0px;
235 340
   }
236 341
 }
342
+
237 343
 /deep/ .form-wrapper .el-button {
238
-  background: linear-gradient(90deg,#0158d9,#3c97e4);
344
+  background: linear-gradient(90deg, #0158d9, #3c97e4);
239 345
   width: 100px;
240 346
   height: 40px;
241 347
 }
348
+
242 349
 .body-wrapper {
243 350
   padding: 20px;
244 351
   background: #0c0c0c;
245
-  width: 100%;
246 352
   .button-block{
247 353
     text-align: right;
248 354
     margin-bottom: 20px;
@@ -260,19 +366,28 @@ export default {
260 366
     }
261 367
   }
262 368
 }
369
+.audit-dialog{
370
+  .mg-bt{
371
+    margin-bottom: 24px;
372
+  }
373
+  .label{
374
+    text-align: right;
375
+  }
376
+}
263 377
 
264
-.charts_all{
378
+.charts_all {
265 379
   display: flex;
266 380
   justify-content: space-around;
267 381
   width: 100%;
268 382
   height: 400px;
269 383
 }
270 384
 
271
-.charts{
385
+.charts {
272 386
   width: 30%;
273 387
   height: 300px;
274 388
 }
275
-.btn_save{
389
+
390
+.btn_save {
276 391
   background-color: #3498db;
277 392
   color: #ffffff;
278 393
   padding: 10px 20px;
@@ -283,12 +398,12 @@ export default {
283 398
   height: 40px;
284 399
 }
285 400
 
286
-.sel{
401
+.sel {
287 402
   height: 200px;
288 403
   margin-right: 10px;
289 404
 }
290 405
 
291
-.input-search{
406
+.input-search {
292 407
   width: 100%;
293 408
   padding: 10px;
294 409
   margin-bottom: 20px;
@@ -297,23 +412,27 @@ export default {
297 412
   border: 1px solid #333;
298 413
   color: #ffffff;
299 414
 }
300
-.audit-dialog{
301
-  .mg-bt{
415
+
416
+.audit-dialog {
417
+  .mg-bt {
302 418
     margin-bottom: 24px;
303 419
   }
304
-  .label{
420
+
421
+  .label {
305 422
     text-align: right;
306 423
   }
307
-  .form-div{
308
-    /deep/ .el-input__inner{
424
+
425
+  .form-div {
426
+    /deep/ .el-input__inner {
309 427
       height: 35px;
310 428
       width: 100%;
311 429
       border: 1px solid #a6a5a5;
312 430
       color: #fff;
313 431
       background: #2d3744;
314 432
     }
433
+
315 434
     /deep/ .el-input__icon {
316
-      line-height: 35px;
435
+      //line-height: 35px;
317 436
     }
318 437
   }
319 438
 }

+ 441 - 41
src/pages/index/components/employee_qualification.vue

@@ -3,9 +3,47 @@
3 3
     <div class="search-card">
4 4
       <h5>从业人员资质</h5>
5 5
     </div>
6
+    <br>
7
+    <el-form class="form-wrapper" :inline="true" :model="formInline">
8
+      <el-form-item label="从业人员名称">
9
+        <el-input  v-model="formInline.mname" placeholder="请输入"></el-input>
10
+      </el-form-item>
11
+      <el-form-item label="证书名称">
12
+        <el-input  v-model="formInline.qualificationName" placeholder="请输入"></el-input>
13
+      </el-form-item>
14
+      <el-form-item label="考核结果">
15
+        <el-select clearable v-model="formInline.assessmentResults" placeholder="请选择">
16
+          <el-option
17
+            v-for="item in examineOptions"
18
+            :key="item.value"
19
+            :label="item.label"
20
+            :value="item.value">
21
+          </el-option>
22
+        </el-select>
23
+      </el-form-item>
24
+      <el-form-item>
25
+        <el-button type="primary" @click="onSubmit">查询</el-button>
26
+        <el-button type="primary" @click="handleAdd">添加</el-button>
27
+      </el-form-item>
28
+    </el-form>
6 29
     <el-table :data="tableData" style="background: #2a2a2a;border-color: #333;">
30
+      <el-table-column
31
+        label="序号"
32
+        type="index"
33
+        :index="indexMethod">
34
+      </el-table-column>
7 35
       <el-table-column v-for="(item, index) in columns" :key="index" :label="item.label" :prop="item.key">
8 36
       </el-table-column>
37
+      <el-table-column
38
+        label="操作"
39
+        width="200">
40
+        <template slot-scope="scope" style="display: inline-block">
41
+          <el-button type="primary" @click="handleEdit(scope.row)" slot="reference">修改</el-button>
42
+          <el-popconfirm title="确定删除吗?" @confirm="deleteRow(scope.row)">
43
+            <el-button type="danger" slot="reference">删除</el-button>
44
+          </el-popconfirm>
45
+        </template>
46
+      </el-table-column>
9 47
     </el-table>
10 48
     <div class="table-pagination">
11 49
       <el-pagination :background="false" layout="total, prev, pager, next" :total="total" @current-change="handlePageChange"
@@ -17,24 +55,133 @@
17 55
     <div class="search-card">
18 56
       <h5>从业人员考核管理</h5>
19 57
     </div>
58
+    <br>
59
+    <el-form class="form-wrapper" :inline="true" :model="formInline2">
60
+      <el-form-item label="从业人员姓名">
61
+        <el-input  v-model="formInline2.staffName" placeholder="请输入"></el-input>
62
+      </el-form-item>
63
+      <el-form-item>
64
+        <el-button type="primary" @click="onSubmit2">查询</el-button>
65
+        <el-button type="primary" @click="handleAdd2">添加</el-button>
66
+      </el-form-item>
67
+    </el-form>
20 68
     <el-table :data="tableData2" style="background: #2a2a2a;border-color: #333;">
69
+      <el-table-column
70
+        label="序号"
71
+        type="index"
72
+        :index="indexMethod2">
73
+      </el-table-column>
21 74
       <el-table-column v-for="(item, index) in columns2" :key="index" :label="item.label" :prop="item.key">
22 75
       </el-table-column>
76
+      <el-table-column
77
+        label="操作"
78
+        width="200">
79
+        <template slot-scope="scope" style="display: inline-block">
80
+          <el-button type="primary" @click="handleEdit2(scope.row)" slot="reference">修改</el-button>
81
+          <el-popconfirm title="确定删除吗?" @confirm="deleteRow2(scope.row)">
82
+            <el-button type="danger" slot="reference">删除</el-button>
83
+          </el-popconfirm>
84
+        </template>
85
+      </el-table-column>
23 86
     </el-table>
24 87
     <div class="table-pagination">
25
-      <el-pagination :background="false" layout="total, prev, pager, next" :total="total" @current-change="handlePageChange"
88
+      <el-pagination :background="false" layout="total, prev, pager, next" :total="total2" @current-change="handlePageChange2"
26 89
                      :current-page.sync="pageNum2" :page-size.sync="pageSize2">
27 90
       </el-pagination>
28 91
     </div>
29 92
     <br>
30
-
31
-
32
-
93
+    <el-dialog
94
+      :title="title"
95
+      :visible.sync="dialogVisible"
96
+      width="60%"
97
+      custom-class="audit-dialog">
98
+      <el-form class="form-div"  :rules="rules" style="height: 200px" ref="formLabelAlign" label-position="left" label-width="120px"
99
+               :model="formLabelAlign">
100
+        <el-form-item prop="mname" label="姓名">
101
+          <el-input type="text" maxlength="4" v-model="formLabelAlign.mname" placeholder="姓名"/>
102
+        </el-form-item>
103
+        <el-form-item prop="qualificationName" label="证书名称">
104
+          <el-input type="text" maxlength="20" v-model="formLabelAlign.qualificationName" placeholder="姓名"/>
105
+        </el-form-item>
106
+        <el-form-item label="考核结果"  prop="assessmentResults">
107
+          <el-select v-model="formLabelAlign.assessmentResults" placeholder="请选择">
108
+            <el-option
109
+              v-for="item in examineOptions"
110
+              :key="item.value"
111
+              :label="item.label"
112
+              :value="item.value">
113
+            </el-option>
114
+          </el-select>
115
+        </el-form-item>
116
+      </el-form>
117
+      <div slot="footer" class="dialog-footer" style="margin-top: 10px;">
118
+        <el-button @click="handleCancel('formLabelAlign')">取 消</el-button>
119
+        <el-button type="primary" @click="handleConfirm('formLabelAlign')">确 定</el-button>
120
+      </div>
121
+    </el-dialog>
122
+    <el-dialog
123
+      :title="title2"
124
+      :visible.sync="dialogVisible2"
125
+      width="60%"
126
+      custom-class="audit-dialog">
127
+      <el-form class="form-div"  :rules="rules2"  style="height: 250px" ref="formLabelAlign2" label-position="left" label-width="120px"
128
+               :model="formLabelAlign2">
129
+        <el-form-item prop="staffName" label="姓名">
130
+          <el-input type="text" maxlength="4" v-model="formLabelAlign2.staffName" placeholder="姓名"/>
131
+        </el-form-item>
132
+        <el-form-item label="驾驶技术"  prop="driveLevel">
133
+          <el-select v-model="formLabelAlign2.driveLevel" placeholder="请选择">
134
+            <el-option
135
+              v-for="item in scoreOptions"
136
+              :key="item.value"
137
+              :label="item.label"
138
+              :value="item.value">
139
+            </el-option>
140
+          </el-select>
141
+        </el-form-item>
142
+        <el-form-item label="服务态度"  prop="serverLevel">
143
+          <el-select v-model="formLabelAlign2.serverLevel" placeholder="请选择">
144
+            <el-option
145
+              v-for="item in scoreOptions"
146
+              :key="item.value"
147
+              :label="item.label"
148
+              :value="item.value">
149
+            </el-option>
150
+          </el-select>
151
+        </el-form-item>
152
+        <el-form-item label="沟通能力"  prop="communicateLevel">
153
+          <el-select v-model="formLabelAlign2.communicateLevel" placeholder="请选择">
154
+            <el-option
155
+              v-for="item in scoreOptions"
156
+              :key="item.value"
157
+              :label="item.label"
158
+              :value="item.value">
159
+            </el-option>
160
+          </el-select>
161
+        </el-form-item>
162
+        <el-form-item label="应急处理能力"  prop="emergencyCapability">
163
+          <el-select v-model="formLabelAlign2.emergencyCapability" placeholder="请选择">
164
+            <el-option
165
+              v-for="item in scoreOptions"
166
+              :key="item.value"
167
+              :label="item.label"
168
+              :value="item.value">
169
+            </el-option>
170
+          </el-select>
171
+        </el-form-item>
172
+      </el-form>
173
+      <div slot="footer" class="dialog-footer" style="margin-top: 10px;">
174
+        <el-button @click="handleCancel2('formLabelAlign2')">取 消</el-button>
175
+        <el-button type="primary" @click="handleConfirm2('formLabelAlign2')">确 定</el-button>
176
+      </div>
177
+    </el-dialog>
33 178
   </div>
34 179
 </template>
35 180
 <script>
36 181
 import api from "@/api/article_liao";
37 182
 import piechart from "@/components/pieChart";
183
+import options from '@/util/options'
184
+import {validateInput} from '@/util/common'
38 185
 
39 186
 export default {
40 187
   components: {
@@ -42,6 +189,42 @@ export default {
42 189
   },
43 190
   data() {
44 191
     return {
192
+      rules: {
193
+        mname: [
194
+          { required: true, message: '请输入姓名', trigger: 'blur' }
195
+        ],
196
+        qualificationName: [
197
+          { required: true, message: '请输入证书名称', trigger: 'blur' },
198
+          { validator: validateInput, trigger: "blur" },
199
+        ],
200
+        assessmentResults: [
201
+          { required: true, message: '请选择', trigger: 'change' },
202
+        ]
203
+      },
204
+      rules2: {
205
+        staffName: [
206
+          { required: true, message: '请输入姓名', trigger: 'blur' }
207
+        ],
208
+        driveLevel: [
209
+          { required: true, message: '请选择', trigger: 'change' },
210
+        ],
211
+        serverLevel: [
212
+          { required: true, message: '请选择', trigger: 'change' },
213
+        ],
214
+        communicateLevel: [
215
+          { required: true, message: '请选择', trigger: 'change' },
216
+        ],
217
+        emergencyCapability: [
218
+          { required: true, message: '请选择', trigger: 'change' },
219
+        ]
220
+      },
221
+      examineOptions: options.examineOptions,
222
+      scoreOptions: options.scoreOptions,
223
+      formInline: {
224
+        mname: '',
225
+        qualificationName: '',
226
+        assessmentResults: ''
227
+      },
45 228
       columns: [
46 229
         {
47 230
           label: '人员姓名',
@@ -64,6 +247,23 @@ export default {
64 247
           key: 'assessmentTime'
65 248
         }
66 249
       ],
250
+      formLabelAlign: {
251
+        id: '',
252
+        mname: '',
253
+        qualificationName: '',
254
+        assessmentResults: ''
255
+      },
256
+      formInline2: {
257
+        staffName: ''
258
+      },
259
+      formLabelAlign2: {
260
+        id: '',
261
+        staffName: '',
262
+        driveLevel: '',
263
+        serverLevel: '',
264
+        communicateLevel: '',
265
+        emergencyCapability: ''
266
+      },
67 267
       columns2: [
68 268
         {
69 269
           label: '人员姓名',
@@ -86,11 +286,6 @@ export default {
86 286
           key: 'emergencyCapability'
87 287
         }
88 288
       ],
89
-      modelPieColor: ["#2E8B57","#9078f8"],
90
-      modelData: {
91
-        list: [{name: '在线', value: 600}, {name: '离线', value: 800}]
92
-      },
93
-
94 289
       tableData: [],
95 290
       tableData2: [],
96 291
       total: 0,
@@ -98,63 +293,206 @@ export default {
98 293
       pageNum: 1,
99 294
       pageSize2: 10,
100 295
       pageNum2: 1,
101
-      radio: '2',
296
+      total2: 0,
102 297
       dialogVisible: false,
103
-      selRow: {},
298
+      dialogVisible2: false,
299
+      title: '',
300
+      title2: ''
104 301
     }
105 302
   },
106 303
   mounted() {
107
-    this.dashEmployeeQualificationQualifications()
108
-    this.dashEmployeeQualificationExamine()
304
+    this.getTableData()
305
+    this.getTableData2()
109 306
   },
110 307
   watch: {
111 308
   },
112 309
   methods: {
113
-    handlePageChange() {
114
-      this.getTableData()
310
+    indexMethod(index) {
311
+      return this.pageSize * (this.pageNum - 1) + index + 1
115 312
     },
116
-    handleAudit(row) {
117
-      this.selRow = row
313
+    indexMethod2(index) {
314
+      return this.pageSize2 * (this.pageNum2 - 1) + index + 1
315
+    },
316
+    handleAdd() {
317
+      this.title = '添加'
318
+      this.formLabelAlign = {}
118 319
       this.dialogVisible = true
119 320
     },
120
-    handleCancelApply(row) {
121
-      console.log('enter handle cancel apply')
321
+    handleEdit(row) {
322
+      this.title = '修改'
323
+      this.formLabelAlign = {...row}
324
+      this.dialogVisible = true
122 325
     },
123
-    dashEmployeeQualificationQualifications(){
124
-      api.dashEmployeeQualificationQualifications().then(res => {
326
+    onSubmit() {
327
+      this.pageNum = 1;
328
+      this.getTableData()
329
+    },
330
+    handlePageChange() {
331
+      this.getTableData()
332
+    },
333
+    getTableData(){
334
+      api.dashEmployeeQualificationQualifications({...this.formInline, current: this.pageNum, size: this.pageSize}).then(res => {
125 335
         this.tableData = res.data.records
126
-        this.pageNum = res.current
127
-        this.pageSize = res.page
336
+        this.total = res.data.total
128 337
       })
129 338
     },
130
-    dashEmployeeQualificationExamine(){
131
-      api.dashEmployeeQualificationExamine().then(res => {
339
+    handleAdd2() {
340
+      this.title2 = '添加'
341
+      this.formLabelAlign2 = {}
342
+      this.dialogVisible2 = true
343
+    },
344
+    handleEdit2(row) {
345
+      this.title2 = '修改'
346
+      this.formLabelAlign2 = {...row}
347
+      this.dialogVisible2 = true
348
+    },
349
+    onSubmit2() {
350
+      this.pageNum2 = 1;
351
+      this.getTableData2()
352
+    },
353
+    handlePageChange2() {
354
+      this.getTableData2()
355
+    },
356
+    getTableData2(){
357
+      api.dashEmployeeQualificationExamine({...this.formInline2, current: this.pageNum2, size: this.pageSize2}).then(res => {
132 358
         this.tableData2 = res.data.records
133
-        this.pageNum2 = res.current
134
-        this.pageSize2 = res.page
359
+        this.total2 = res.data.total
360
+      })
361
+    },
362
+    handleCancel2(formName) {
363
+      this.$refs[formName].resetFields();
364
+      this.dialogVisible2 = false
365
+    },
366
+    handleConfirm2(formName) {
367
+      this.$refs[formName].validate((valid) => {
368
+        if (valid) {
369
+          if (this.title2 === '修改') {
370
+            api.editExamine(this.formLabelAlign2).then(res => {
371
+              if(res.code === 200) {
372
+                this.dialogVisible2 = false
373
+                this.$message({
374
+                  message: '修改成功!',
375
+                  type: 'success'
376
+                })
377
+                this.getTableData2()
378
+              }
379
+            })
380
+          } else {
381
+            api.addExamine(this.formLabelAlign2).then(res => {
382
+              if (res.code === 200) {
383
+                this.dialogVisible2 = false
384
+                this.$message({
385
+                  message: '添加成功!',
386
+                  type: 'success'
387
+                })
388
+                this.getTableData2()
389
+              }
390
+            })
391
+          }
392
+        }
135 393
       })
136 394
     },
137 395
 
396
+    deleteRow2 (record) {
397
+      api.deleteExamine([{id: record.id}]).then(res => {
398
+        if (res.code === 200) {
399
+          this.$message({type: 'success', message: '删除成功!'})
400
+          this.getTableData2()
401
+        }
402
+      })
403
+    },
138 404
 
139
-    getApplyTypeText(val) {
140
-      if (!val){
141
-        return '未申请'
142
-      }
143
-      const textMap = {
144
-        1: '待审批',
145
-        2: '审批通过',
146
-        3: '审批驳回'
147
-      }
148
-      return textMap[val]
405
+    handleCancel(formName) {
406
+      this.$refs[formName].resetFields();
407
+      this.dialogVisible = false
408
+    },
409
+    handleConfirm(formName) {
410
+      this.$refs[formName].validate((valid) => {
411
+        if (valid) {
412
+          if (this.title === '修改') {
413
+            api.editQualification(this.formLabelAlign).then(res => {
414
+              if(res.code === 200) {
415
+                this.dialogVisible = false
416
+                this.$message({
417
+                  message: '修改成功!',
418
+                  type: 'success'
419
+                })
420
+                this.getTableData()
421
+              }
422
+            })
423
+          } else {
424
+            api.addQualification(this.formLabelAlign).then(res => {
425
+              if (res.code === 200) {
426
+                this.dialogVisible = false
427
+                this.$message({
428
+                  message: '添加成功!',
429
+                  type: 'success'
430
+                })
431
+                this.getTableData()
432
+              }
433
+            })
434
+          }
435
+        }
436
+      })
437
+    },
438
+
439
+    deleteRow (record) {
440
+      api.deleteQualification([{id: record.id}]).then(res => {
441
+        if (res.code === 200) {
442
+          this.$message({type: 'success', message: '删除成功!'})
443
+          this.getTableData()
444
+        }
445
+      })
149 446
     },
150
-    handleSearch() {
151
-      this.pageNum = 1
152
-      this.getTableData()
153
-    }
154 447
   }
448
+
155 449
 }
156 450
 </script>
157 451
 <style  lang="scss" scoped>
452
+.form-wrapper {
453
+  margin-bottom: 20px;
454
+}
455
+
456
+/deep/ .el-input__inner {
457
+  background: #2d3744;
458
+  border: none;
459
+  border-radius: 0;
460
+}
461
+
462
+/deep/ .el-select {
463
+  height: 40px;
464
+
465
+  .el-input__inner {
466
+    height: 40px;
467
+  }
468
+
469
+  .el-input__prefix, .el-input__suffix {
470
+    height: 40px;
471
+  }
472
+
473
+  /* 下面设置右侧按钮居中 */
474
+  .el-input__suffix {
475
+    top: 0px;
476
+    display: flex;
477
+    justify-content: center;
478
+    align-items: center;
479
+    flex-wrap: nowrap;
480
+    flex-direction: row;
481
+    align-content: flex-start;
482
+  }
483
+
484
+  /* 输入框加上上下边是 32px + 2px =34px */
485
+  .el-input__icon {
486
+    line-height: 0px;
487
+  }
488
+}
489
+
490
+/deep/ .form-wrapper .el-button {
491
+  background: linear-gradient(90deg, #0158d9, #3c97e4);
492
+  width: 100px;
493
+  height: 40px;
494
+}
495
+
158 496
 .body-wrapper {
159 497
   padding: 20px;
160 498
   background: #0c0c0c;
@@ -183,4 +521,66 @@ export default {
183 521
     text-align: right;
184 522
   }
185 523
 }
524
+
525
+.charts_all {
526
+  display: flex;
527
+  justify-content: space-around;
528
+  width: 100%;
529
+  height: 400px;
530
+}
531
+
532
+.charts {
533
+  width: 30%;
534
+  height: 300px;
535
+}
536
+
537
+.btn_save {
538
+  background-color: #3498db;
539
+  color: #ffffff;
540
+  padding: 10px 20px;
541
+  cursor: pointer;
542
+  border: none;
543
+  border-radius: 4px;
544
+  font-size: 16px;
545
+  height: 40px;
546
+}
547
+
548
+.sel {
549
+  height: 200px;
550
+  margin-right: 10px;
551
+}
552
+
553
+.input-search {
554
+  width: 100%;
555
+  padding: 10px;
556
+  margin-bottom: 20px;
557
+  box-sizing: border-box;
558
+  background-color: #2a2a2a;
559
+  border: 1px solid #333;
560
+  color: #ffffff;
561
+}
562
+
563
+.audit-dialog {
564
+  .mg-bt {
565
+    margin-bottom: 24px;
566
+  }
567
+
568
+  .label {
569
+    text-align: right;
570
+  }
571
+
572
+  .form-div {
573
+    /deep/ .el-input__inner {
574
+      height: 35px;
575
+      width: 100%;
576
+      border: 1px solid #a6a5a5;
577
+      color: #fff;
578
+      background: #2d3744;
579
+    }
580
+
581
+    /deep/ .el-input__icon {
582
+      //line-height: 35px;
583
+    }
584
+  }
585
+}
186 586
 </style>

+ 1 - 1
src/pages/index/components/operation_log.vue

@@ -130,7 +130,7 @@ export default {
130 130
       })
131 131
     },
132 132
     onSubmit() {
133
-      let params = this.formInline
133
+      let params = {...this.formInline}
134 134
       if (
135 135
         this.formInline.time && this.formInline.time.length === 2 &&
136 136
         this.formInline.time[1] !== ""

+ 75 - 0
src/util/common.js

@@ -0,0 +1,75 @@
1
+function isVehicleNumber(vehicleNumber) {
2
+  var xreg=/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DF][A-HJ-NP-Z0-9][0-9]{4}$))/;
3
+  var creg=/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}$/;
4
+  if(vehicleNumber.length == 7){
5
+    return creg.test(vehicleNumber);
6
+  } else if(vehicleNumber.length == 8){
7
+    return xreg.test(vehicleNumber);
8
+  } else{
9
+    return false;
10
+  }
11
+}
12
+function checkSpecialKey(str) {
13
+  let specialKey = "[`~!#$^&*()=|{}':;'\\[\\].<>/?~!#¥……&*()——|{}【】‘;:”“'。,、?]‘'";
14
+  for (let i = 0; i < str.length; i++) {
15
+    if (specialKey.indexOf(str.substr(i, 1)) != -1) {
16
+      return false;
17
+    }
18
+  }
19
+  return true;
20
+}
21
+
22
+
23
+function vehicleNumber(rule, value, callback) {
24
+  if (isVehicleNumber(value)) {
25
+    callback();
26
+  } else {
27
+    return callback(new Error("车牌号不正确"));
28
+  }
29
+}
30
+function validateInput(rule, value, callback) {
31
+  if (!checkSpecialKey(value)) {
32
+    callback(new Error("不能含有特殊字符!!"));
33
+  } else {
34
+    callback();
35
+  }
36
+}
37
+function validateAmount(rule, value, callback) {
38
+  // 自定义校验函数的实现
39
+  if (isNaN(value) || value <= 0) {
40
+    callback(new Error('金额必须是大于0的数字'))
41
+  } else {
42
+    callback()
43
+  }
44
+}
45
+function validateHour(rule, value, callback) {
46
+  if (!value || !Number.isInteger(parseInt(value))) {
47
+    callback(new Error('请输入有效的小时'));
48
+  } else if (value < 0) {
49
+    callback(new Error('小时必须大于0'));
50
+  } else {
51
+    callback();
52
+  }
53
+}
54
+
55
+function checkPhone(rule, value, callback) { // 手机号验证
56
+  if (!value) {
57
+    return callback(new Error('手机号不能为空'));
58
+  } else {
59
+    const reg = /^1[3456789]\d{9}$/
60
+    if (reg.test(value)) {
61
+      callback();
62
+    } else {
63
+      return callback(new Error('请输入正确的手机号'));
64
+    }
65
+  }
66
+}
67
+
68
+export {
69
+  isVehicleNumber,
70
+  vehicleNumber,
71
+  validateInput,
72
+  validateAmount,
73
+  validateHour,
74
+  checkPhone
75
+}

+ 36 - 0
src/util/options.js

@@ -37,4 +37,40 @@ export default {
37 37
     value: '旅游景点',
38 38
     label: '旅游景点'
39 39
   }],
40
+  complaintOptions: [ {
41
+    value: '经营服务类停车问题',
42
+    label: '经营服务类停车问题'
43
+  }, {
44
+    value: '非法经营停车问题',
45
+    label: '非法经营停车问题'
46
+  }, {
47
+    value: '不提供税票',
48
+    label: '不提供税票'
49
+  }, {
50
+    value: '设备问题',
51
+    label: '设备问题'
52
+  },],
53
+  examineOptions: [ {
54
+    value: '通过',
55
+    label: '通过'
56
+  }, {
57
+    value: '未通过',
58
+    label: '未通过'
59
+  }],
60
+  scoreOptions: [ {
61
+    value: '优秀',
62
+    label: '优秀'
63
+  }, {
64
+    value: '良好',
65
+    label: '良好'
66
+  }, {
67
+    value: '中等',
68
+    label: '中等'
69
+  }, {
70
+    value: '及格',
71
+    label: '及格'
72
+  }, {
73
+    value: '不合格',
74
+    label: '不合格'
75
+  }]
40 76
 }