Sfoglia il codice sorgente

Merge branch 'master' of http://47.101.34.182:6767/r/iot-zkpt-qd

linfei.luo 3 anni fa
parent
commit
a53848c7ee
42 ha cambiato i file con 3243 aggiunte e 7 eliminazioni
  1. 2 2
      .env.development
  2. 1 0
      .eslintrc.js
  3. 1 1
      src/api/dm/user/dmUser.js
  4. 27 0
      src/api/dmAccessTraffic.js
  5. 27 0
      src/api/dmAttendanceRecord.js
  6. 27 0
      src/api/dmCard.js
  7. 27 0
      src/api/dmConsumerDevices.js
  8. 27 0
      src/api/dmExpenseCalendar.js
  9. 27 0
      src/api/dmParkingPass.js
  10. 53 0
      src/api/dmPlateNumber.js
  11. 27 0
      src/api/dmPlateTraffic.js
  12. 27 0
      src/api/dmReadingRecord.js
  13. 27 0
      src/api/dmRechargeRecord.js
  14. 27 0
      src/api/dmReportLoss.js
  15. 27 0
      src/api/dmRoomDevice.js
  16. 27 0
      src/api/dmRule.js
  17. 27 0
      src/api/dmUser.js
  18. 27 0
      src/api/dmUsersJobs.js
  19. 27 0
      src/api/dmVisitorsApply.js
  20. 27 0
      src/api/dmVisitorsUser.js
  21. 1 1
      src/api/system/dept.js
  22. 1 1
      src/api/system/menu.js
  23. 3 0
      src/main.js
  24. 2 2
      src/router/index.js
  25. 5 0
      src/router/routers.js
  26. 139 0
      src/views/ykt/access_traffic/index.vue
  27. 139 0
      src/views/ykt/attendance_record/index.vue
  28. 191 0
      src/views/ykt/card/index.vue
  29. 144 0
      src/views/ykt/consumer_devices/index.vue
  30. 127 0
      src/views/ykt/expense_calendar/index.vue
  31. 118 0
      src/views/ykt/parkingPass/index.vue
  32. 139 0
      src/views/ykt/plateTraffic/index.vue
  33. 319 0
      src/views/ykt/plate_number/index.vue
  34. 167 0
      src/views/ykt/reading_record/index.vue
  35. 120 0
      src/views/ykt/recharge_record/index.vue
  36. 127 0
      src/views/ykt/report_loss/index.vue
  37. 163 0
      src/views/ykt/room_device/index.vue
  38. 242 0
      src/views/ykt/rule/index.vue
  39. 234 0
      src/views/ykt/user/index.vue
  40. 92 0
      src/views/ykt/users_jobs/index.vue
  41. 158 0
      src/views/ykt/visitors_apply/index.vue
  42. 123 0
      src/views/ykt/visitors_user/index.vue

+ 2 - 2
.env.development

@@ -3,10 +3,10 @@ ENV = 'development'
 # 如果使用 Nginx 代理后端接口,那么此处需要改为 '/',文件查看 Docker 部署篇,Nginx 配置
 # 接口地址,注意协议,如果你没有配置 ssl,需要将 https 改为 http
 # VUE_APP_BASE_API  = 'http://47.99.156.213:1537'
-VUE_APP_BASE_API  = 'http://114.55.24.6:8086'
+VUE_APP_BASE_API  = 'http://localhost:1537'
 # 如果接口是 http 形式, wss 需要改为 ws
 #VUE_APP_WS_API = 'ws://47.99.156.213:1537'
-VUE_APP_WS_API = 'ws://114.55.24.6:8086'
+VUE_APP_WS_API = 'ws://localhost:1537'
 
 
 # 是否启用 babel-plugin-dynamic-import-node插件

+ 1 - 0
.eslintrc.js

@@ -25,6 +25,7 @@ module.exports = {
     "vue/multiline-html-element-content-newline":"off",
     "vue/name-property-casing": ["error", "PascalCase"],
     "vue/no-v-html": "off",
+    "vue/no-unused-vars": "off",
     'accessor-pairs': 2,
     'arrow-spacing': [2, {
       'before': true,

+ 1 - 1
src/api/dm/user/dmUser.js

@@ -8,7 +8,7 @@ export function getAllDmUser(params) {
   } */
   return request({
     url: 'api/dmUser/findNotBindUser',
-    method: 'get',
+    method: 'post',
     params
   })
 }

+ 27 - 0
src/api/dmAccessTraffic.js

@@ -0,0 +1,27 @@
+import request from '@/utils/request'
+
+export function add(data) {
+  return request({
+    url: 'api/dmAccessTraffic',
+    method: 'post',
+    data
+  })
+}
+
+export function del(ids) {
+  return request({
+    url: 'api/dmAccessTraffic/',
+    method: 'delete',
+    data: ids
+  })
+}
+
+export function edit(data) {
+  return request({
+    url: 'api/dmAccessTraffic',
+    method: 'put',
+    data
+  })
+}
+
+export default { add, edit, del }

+ 27 - 0
src/api/dmAttendanceRecord.js

@@ -0,0 +1,27 @@
+import request from '@/utils/request'
+
+export function add(data) {
+  return request({
+    url: 'api/dmAttendanceRecord',
+    method: 'post',
+    data
+  })
+}
+
+export function del(ids) {
+  return request({
+    url: 'api/dmAttendanceRecord/',
+    method: 'delete',
+    data: ids
+  })
+}
+
+export function edit(data) {
+  return request({
+    url: 'api/dmAttendanceRecord',
+    method: 'put',
+    data
+  })
+}
+
+export default { add, edit, del }

+ 27 - 0
src/api/dmCard.js

@@ -0,0 +1,27 @@
+import request from '@/utils/request'
+
+export function add(data) {
+  return request({
+    url: 'api/dmCard',
+    method: 'post',
+    data
+  })
+}
+
+export function del(ids) {
+  return request({
+    url: 'api/dmCard/',
+    method: 'delete',
+    data: ids
+  })
+}
+
+export function edit(data) {
+  return request({
+    url: 'api/dmCard',
+    method: 'put',
+    data
+  })
+}
+
+export default { add, edit, del }

+ 27 - 0
src/api/dmConsumerDevices.js

@@ -0,0 +1,27 @@
+import request from '@/utils/request'
+
+export function add(data) {
+  return request({
+    url: 'api/dmConsumerDevices',
+    method: 'post',
+    data
+  })
+}
+
+export function del(ids) {
+  return request({
+    url: 'api/dmConsumerDevices/',
+    method: 'delete',
+    data: ids
+  })
+}
+
+export function edit(data) {
+  return request({
+    url: 'api/dmConsumerDevices',
+    method: 'put',
+    data
+  })
+}
+
+export default { add, edit, del }

+ 27 - 0
src/api/dmExpenseCalendar.js

@@ -0,0 +1,27 @@
+import request from '@/utils/request'
+
+export function add(data) {
+  return request({
+    url: 'api/dmExpenseCalendar',
+    method: 'post',
+    data
+  })
+}
+
+export function del(ids) {
+  return request({
+    url: 'api/dmExpenseCalendar/',
+    method: 'delete',
+    data: ids
+  })
+}
+
+export function edit(data) {
+  return request({
+    url: 'api/dmExpenseCalendar',
+    method: 'put',
+    data
+  })
+}
+
+export default { add, edit, del }

+ 27 - 0
src/api/dmParkingPass.js

@@ -0,0 +1,27 @@
+import request from '@/utils/request'
+
+export function add(data) {
+  return request({
+    url: 'api/dmParkingPass',
+    method: 'post',
+    data
+  })
+}
+
+export function del(ids) {
+  return request({
+    url: 'api/dmParkingPass/',
+    method: 'delete',
+    data: ids
+  })
+}
+
+export function edit(data) {
+  return request({
+    url: 'api/dmParkingPass',
+    method: 'put',
+    data
+  })
+}
+
+export default { add, edit, del }

+ 53 - 0
src/api/dmPlateNumber.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+export function add(data) {
+  return request({
+    url: 'api/dmPlateNumber',
+    method: 'post',
+    data
+  })
+}
+
+export function del(ids) {
+  return request({
+    url: 'api/dmPlateNumber/',
+    method: 'delete',
+    data: ids
+  })
+}
+
+export function edit(data) {
+  return request({
+    url: 'api/dmPlateNumber',
+    method: 'put',
+    data
+  })
+}
+
+/* 多表查询 */
+export function getQuery() {
+  return request({
+    url: 'api/dmPlateNumber/getQuery',
+    method: 'post'
+  })
+}
+
+/* 搜索框查询 */
+export function findAllBysousuo(params) {
+  return request({
+    url: 'api/dmPlateNumber/findAllBysousuo',
+    method: 'post',
+    params
+  })
+}
+
+/* 根据一卡通卡号查询 */
+export function findDmPlateNumberByCardNumber(params) {
+  return request({
+    url: 'api/dmPlateNumber/findDmPlateNumberByCardNumber',
+    method: 'post',
+    params
+  })
+}
+
+export default { add, getQuery, findDmPlateNumberByCardNumber, edit, del, findAllBysousuo }

+ 27 - 0
src/api/dmPlateTraffic.js

@@ -0,0 +1,27 @@
+import request from '@/utils/request'
+
+export function add(data) {
+  return request({
+    url: 'api/dmPlateTraffic',
+    method: 'post',
+    data
+  })
+}
+
+export function del(ids) {
+  return request({
+    url: 'api/dmPlateTraffic/',
+    method: 'delete',
+    data: ids
+  })
+}
+
+export function edit(data) {
+  return request({
+    url: 'api/dmPlateTraffic',
+    method: 'put',
+    data
+  })
+}
+
+export default { add, edit, del }

+ 27 - 0
src/api/dmReadingRecord.js

@@ -0,0 +1,27 @@
+import request from '@/utils/request'
+
+export function add(data) {
+  return request({
+    url: 'api/dmReadingRecord',
+    method: 'post',
+    data
+  })
+}
+
+export function del(ids) {
+  return request({
+    url: 'api/dmReadingRecord/',
+    method: 'delete',
+    data: ids
+  })
+}
+
+export function edit(data) {
+  return request({
+    url: 'api/dmReadingRecord',
+    method: 'put',
+    data
+  })
+}
+
+export default { add, edit, del }

+ 27 - 0
src/api/dmRechargeRecord.js

@@ -0,0 +1,27 @@
+import request from '@/utils/request'
+
+export function add(data) {
+  return request({
+    url: 'api/dmRechargeRecord',
+    method: 'post',
+    data
+  })
+}
+
+export function del(ids) {
+  return request({
+    url: 'api/dmRechargeRecord/',
+    method: 'delete',
+    data: ids
+  })
+}
+
+export function edit(data) {
+  return request({
+    url: 'api/dmRechargeRecord',
+    method: 'put',
+    data
+  })
+}
+
+export default { add, edit, del }

+ 27 - 0
src/api/dmReportLoss.js

@@ -0,0 +1,27 @@
+import request from '@/utils/request'
+
+export function add(data) {
+  return request({
+    url: 'api/dmReportLoss',
+    method: 'post',
+    data
+  })
+}
+
+export function del(ids) {
+  return request({
+    url: 'api/dmReportLoss/',
+    method: 'delete',
+    data: ids
+  })
+}
+
+export function edit(data) {
+  return request({
+    url: 'api/dmReportLoss',
+    method: 'put',
+    data
+  })
+}
+
+export default { add, edit, del }

+ 27 - 0
src/api/dmRoomDevice.js

@@ -0,0 +1,27 @@
+import request from '@/utils/request'
+
+export function add(data) {
+  return request({
+    url: 'api/dmRoomDevice',
+    method: 'post',
+    data
+  })
+}
+
+export function del(ids) {
+  return request({
+    url: 'api/dmRoomDevice/',
+    method: 'delete',
+    data: ids
+  })
+}
+
+export function edit(data) {
+  return request({
+    url: 'api/dmRoomDevice',
+    method: 'put',
+    data
+  })
+}
+
+export default { add, edit, del }

+ 27 - 0
src/api/dmRule.js

@@ -0,0 +1,27 @@
+import request from '@/utils/request'
+
+export function add(data) {
+  return request({
+    url: 'api/dmRule',
+    method: 'post',
+    data
+  })
+}
+
+export function del(ids) {
+  return request({
+    url: 'api/dmRule/',
+    method: 'delete',
+    data: ids
+  })
+}
+
+export function edit(data) {
+  return request({
+    url: 'api/dmRule',
+    method: 'put',
+    data
+  })
+}
+
+export default { add, edit, del }

+ 27 - 0
src/api/dmUser.js

@@ -0,0 +1,27 @@
+import request from '@/utils/request'
+
+export function add(data) {
+  return request({
+    url: 'api/dmUser',
+    method: 'post',
+    data
+  })
+}
+
+export function del(ids) {
+  return request({
+    url: 'api/dmUser/',
+    method: 'delete',
+    data: ids
+  })
+}
+
+export function edit(data) {
+  return request({
+    url: 'api/dmUser',
+    method: 'put',
+    data
+  })
+}
+
+export default { add, edit, del }

+ 27 - 0
src/api/dmUsersJobs.js

@@ -0,0 +1,27 @@
+import request from '@/utils/request'
+
+export function add(data) {
+  return request({
+    url: 'api/dmUsersJobs',
+    method: 'post',
+    data
+  })
+}
+
+export function del(ids) {
+  return request({
+    url: 'api/dmUsersJobs/',
+    method: 'delete',
+    data: ids
+  })
+}
+
+export function edit(data) {
+  return request({
+    url: 'api/dmUsersJobs',
+    method: 'put',
+    data
+  })
+}
+
+export default { add, edit, del }

+ 27 - 0
src/api/dmVisitorsApply.js

@@ -0,0 +1,27 @@
+import request from '@/utils/request'
+
+export function add(data) {
+  return request({
+    url: 'api/dmVisitorsApply',
+    method: 'post',
+    data
+  })
+}
+
+export function del(ids) {
+  return request({
+    url: 'api/dmVisitorsApply/',
+    method: 'delete',
+    data: ids
+  })
+}
+
+export function edit(data) {
+  return request({
+    url: 'api/dmVisitorsApply',
+    method: 'put',
+    data
+  })
+}
+
+export default { add, edit, del }

+ 27 - 0
src/api/dmVisitorsUser.js

@@ -0,0 +1,27 @@
+import request from '@/utils/request'
+
+export function add(data) {
+  return request({
+    url: 'api/dmVisitorsUser',
+    method: 'post',
+    data
+  })
+}
+
+export function del(ids) {
+  return request({
+    url: 'api/dmVisitorsUser/',
+    method: 'delete',
+    data: ids
+  })
+}
+
+export function edit(data) {
+  return request({
+    url: 'api/dmVisitorsUser',
+    method: 'put',
+    data
+  })
+}
+
+export default { add, edit, del }

+ 1 - 1
src/api/system/dept.js

@@ -13,7 +13,7 @@ export function getDeptSuperior(ids) {
   return request({
     url: 'api/dept/superior',
     method: 'post',
-    data
+    data: [data]
   })
 }
 

+ 1 - 1
src/api/system/menu.js

@@ -20,7 +20,7 @@ export function getMenuSuperior(ids) {
   return request({
     url: 'api/menus/superior',
     method: 'post',
-    data
+    data: [data]
   })
 }
 

+ 3 - 0
src/main.js

@@ -1,4 +1,5 @@
 import Vue from 'vue'
+import axios from 'axios'
 
 import Cookies from 'js-cookie'
 
@@ -31,6 +32,7 @@ import './assets/icons' // icon
 import './router/index' // permission control
 import 'echarts-gl'
 
+Vue.prototype.axios = axios
 Vue.use(checkPer)
 Vue.use(VueHighlightJS)
 Vue.use(mavonEditor)
@@ -41,6 +43,7 @@ Vue.use(Element, {
 })
 
 Vue.config.productionTip = false
+axios.defaults.baseURL = 'url'
 
 new Vue({
   el: '#app',

+ 2 - 2
src/router/index.js

@@ -56,8 +56,8 @@ export const loadMenus = (next, to) => {
     const sdata = JSON.parse(JSON.stringify(res))
     const rdata = JSON.parse(JSON.stringify(res))
     const sidebarRoutes = filterAsyncRouter(sdata)
-    const rewriteRoutes = filterAsyncRouter(rdata, true)
-    rewriteRoutes.push({ path: '*', redirect: '/404', hidden: true })
+    const rewriteRoutes = filterAsyncRouter(rdata, false, true)
+    // rewriteRoutes.push({ path: '*', redirect: '/404', hidden: true })
 
     store.dispatch('GenerateRoutes', rewriteRoutes).then(() => { // 存储路由
       router.addRoutes(rewriteRoutes) // 动态添加可访问路由表

+ 5 - 0
src/router/routers.js

@@ -20,6 +20,11 @@ export const constantRouterMap = [
     component: (resolve) => require(['@/views/features/401'], resolve),
     hidden: true
   },
+  // {
+  //   path: '/system/user',
+  //   component: (resolve) => require(['@/views/system/user/index'], resolve),
+  //   hidden: true
+  // },
   {
     path: '/redirect',
     component: Layout,

+ 139 - 0
src/views/ykt/access_traffic/index.vue

@@ -0,0 +1,139 @@
+<template>
+  <div class="app-container">
+    <!--工具栏-->
+    <div class="head-container">
+      <div v-if="crud.props.searchToggle">
+        <!-- 搜索 -->
+        <label class="el-form-item-label">id</label>
+        <el-input v-model="query.id" clearable placeholder="id" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">用户</label>
+        <el-input v-model="query.userNumber" clearable placeholder="用户" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">卡号</label>
+        <el-input v-model="query.cardNumber" clearable placeholder="卡号" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">门禁设备编号</label>
+        <el-input v-model="query.roomDevice" clearable placeholder="门禁设备编号" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">出入(00-进入、01-离开)</label>
+        <el-input v-model="query.comeGoOut" clearable placeholder="出入(00-进入、01-离开)" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">设备位置</label>
+        <el-input v-model="query.buildAddress" clearable placeholder="设备位置" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">通行时间</label>
+        <el-input v-model="query.accessTime" clearable placeholder="通行时间" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <rrOperation :crud="crud" />
+      </div>
+      <!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'-->
+      <crudOperation :permission="permission" />
+      <!--表单组件-->
+      <el-dialog :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" width="500px">
+        <el-form ref="form" :model="form" :rules="rules" size="small" label-width="80px">
+          <el-form-item label="id">
+            <el-input v-model="form.id" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="用户">
+            <el-input v-model="form.userNumber" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="卡号">
+            <el-input v-model="form.cardNumber" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="门禁设备编号">
+            <el-input v-model="form.roomDevice" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="出入(00-进入、01-离开)">
+            <el-select v-model="form.comeGoOut" filterable placeholder="请选择">
+              <el-option
+                v-for="item in dict.user_status"
+                :key="item.id"
+                :label="item.label"
+                :value="item.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="设备位置">
+            <el-input v-model="form.buildAddress" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="通行时间">
+            <el-date-picker v-model="form.accessTime" type="datetime" style="width: 370px;" />
+          </el-form-item>
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+          <el-button type="text" @click="crud.cancelCU">取消</el-button>
+          <el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
+        </div>
+      </el-dialog>
+      <!--表格渲染-->
+      <el-table ref="table" v-loading="crud.loading" :data="crud.data" size="small" style="width: 100%;" @selection-change="crud.selectionChangeHandler">
+        <el-table-column type="selection" width="55" />
+        <el-table-column prop="id" label="id" />
+        <el-table-column prop="userNumber" label="用户" />
+        <el-table-column prop="cardNumber" label="卡号" />
+        <el-table-column prop="roomDevice" label="门禁设备编号" />
+        <el-table-column prop="comeGoOut" label="出入(00-进入、01-离开)">
+          <template slot-scope="scope">
+            {{ dict.label.user_status[scope.row.comeGoOut] }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="buildAddress" label="设备位置" />
+        <el-table-column prop="accessTime" label="通行时间" />
+        <el-table-column v-if="checkPer(['admin','dmAccessTraffic:edit','dmAccessTraffic:del'])" label="操作" width="150px" align="center">
+          <template slot-scope="scope">
+            <udOperation
+              :data="scope.row"
+              :permission="permission"
+            />
+          </template>
+        </el-table-column>
+      </el-table>
+      <!--分页组件-->
+      <pagination />
+    </div>
+  </div>
+</template>
+
+<script>
+import crudDmAccessTraffic from '@/api/dmAccessTraffic'
+import CRUD, { presenter, header, form, crud } from '@crud/crud'
+import rrOperation from '@crud/RR.operation'
+import crudOperation from '@crud/CRUD.operation'
+import udOperation from '@crud/UD.operation'
+import pagination from '@crud/Pagination'
+
+const defaultForm = { id: null, userNumber: null, cardNumber: null, roomDevice: null, comeGoOut: null, buildAddress: null, accessTime: null }
+export default {
+  name: 'DmAccessTraffic',
+  components: { pagination, crudOperation, rrOperation, udOperation },
+  mixins: [presenter(), header(), form(defaultForm), crud()],
+  dicts: ['user_status'],
+  cruds() {
+    return CRUD({ title: 'access_traffic', url: 'api/dmAccessTraffic', idField: 'id', sort: 'id,desc', crudMethod: { ...crudDmAccessTraffic }})
+  },
+  data() {
+    return {
+      permission: {
+        add: ['admin', 'dmAccessTraffic:add'],
+        edit: ['admin', 'dmAccessTraffic:edit'],
+        del: ['admin', 'dmAccessTraffic:del']
+      },
+      rules: {
+      },
+      queryTypeOptions: [
+        { key: 'id', display_name: 'id' },
+        { key: 'userNumber', display_name: '用户' },
+        { key: 'cardNumber', display_name: '卡号' },
+        { key: 'roomDevice', display_name: '门禁设备编号' },
+        { key: 'comeGoOut', display_name: '出入(00-进入、01-离开)' },
+        { key: 'buildAddress', display_name: '设备位置' },
+        { key: 'accessTime', display_name: '通行时间' }
+      ]
+    }
+  },
+  methods: {
+    // 钩子:在获取表格数据之前执行,false 则代表不获取数据
+    [CRUD.HOOK.beforeRefresh]() {
+      return true
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 139 - 0
src/views/ykt/attendance_record/index.vue

@@ -0,0 +1,139 @@
+<template>
+  <div class="app-container">
+    <!--工具栏-->
+    <div class="head-container">
+      <div v-if="crud.props.searchToggle">
+        <!-- 搜索 -->
+        <label class="el-form-item-label">id</label>
+        <el-input v-model="query.id" clearable placeholder="id" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">用户</label>
+        <el-input v-model="query.userNumber" clearable placeholder="用户" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">卡号</label>
+        <el-input v-model="query.cardNumber" clearable placeholder="卡号" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">门禁设备编号</label>
+        <el-input v-model="query.roomDevice" clearable placeholder="门禁设备编号" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">考勤属性(00-上班、01-下班)</label>
+        <el-input v-model="query.property" clearable placeholder="考勤属性(00-上班、01-下班)" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">考勤时间</label>
+        <el-input v-model="query.attendanceTime" clearable placeholder="考勤时间" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">考勤照片</label>
+        <el-input v-model="query.attendancePhoto" clearable placeholder="考勤照片" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <rrOperation :crud="crud" />
+      </div>
+      <!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'-->
+      <crudOperation :permission="permission" />
+      <!--表单组件-->
+      <el-dialog :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" width="500px">
+        <el-form ref="form" :model="form" :rules="rules" size="small" label-width="80px">
+          <el-form-item label="id">
+            <el-input v-model="form.id" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="用户">
+            <el-input v-model="form.userNumber" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="卡号">
+            <el-input v-model="form.cardNumber" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="门禁设备编号">
+            <el-input v-model="form.roomDevice" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="考勤属性(00-上班、01-下班)">
+            <el-select v-model="form.property" filterable placeholder="请选择">
+              <el-option
+                v-for="item in dict.user_status"
+                :key="item.id"
+                :label="item.label"
+                :value="item.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="考勤时间">
+            <el-date-picker v-model="form.attendanceTime" type="datetime" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="考勤照片">
+            <el-input v-model="form.attendancePhoto" :rows="3" type="textarea" style="width: 370px;" />
+          </el-form-item>
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+          <el-button type="text" @click="crud.cancelCU">取消</el-button>
+          <el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
+        </div>
+      </el-dialog>
+      <!--表格渲染-->
+      <el-table ref="table" v-loading="crud.loading" :data="crud.data" size="small" style="width: 100%;" @selection-change="crud.selectionChangeHandler">
+        <el-table-column type="selection" width="55" />
+        <el-table-column prop="id" label="id" />
+        <el-table-column prop="userNumber" label="用户" />
+        <el-table-column prop="cardNumber" label="卡号" />
+        <el-table-column prop="roomDevice" label="门禁设备编号" />
+        <el-table-column prop="property" label="考勤属性(00-上班、01-下班)">
+          <template slot-scope="scope">
+            {{ dict.label.user_status[scope.row.property] }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="attendanceTime" label="考勤时间" />
+        <el-table-column prop="attendancePhoto" label="考勤照片" />
+        <el-table-column v-if="checkPer(['admin','dmAttendanceRecord:edit','dmAttendanceRecord:del'])" label="操作" width="150px" align="center">
+          <template slot-scope="scope">
+            <udOperation
+              :data="scope.row"
+              :permission="permission"
+            />
+          </template>
+        </el-table-column>
+      </el-table>
+      <!--分页组件-->
+      <pagination />
+    </div>
+  </div>
+</template>
+
+<script>
+import crudDmAttendanceRecord from '@/api/dmAttendanceRecord'
+import CRUD, { presenter, header, form, crud } from '@crud/crud'
+import rrOperation from '@crud/RR.operation'
+import crudOperation from '@crud/CRUD.operation'
+import udOperation from '@crud/UD.operation'
+import pagination from '@crud/Pagination'
+
+const defaultForm = { id: null, userNumber: null, cardNumber: null, roomDevice: null, property: null, attendanceTime: null, attendancePhoto: null }
+export default {
+  name: 'DmAttendanceRecord',
+  components: { pagination, crudOperation, rrOperation, udOperation },
+  mixins: [presenter(), header(), form(defaultForm), crud()],
+  dicts: ['user_status'],
+  cruds() {
+    return CRUD({ title: 'attendance_record', url: 'api/dmAttendanceRecord', idField: 'id', sort: 'id,desc', crudMethod: { ...crudDmAttendanceRecord }})
+  },
+  data() {
+    return {
+      permission: {
+        add: ['admin', 'dmAttendanceRecord:add'],
+        edit: ['admin', 'dmAttendanceRecord:edit'],
+        del: ['admin', 'dmAttendanceRecord:del']
+      },
+      rules: {
+      },
+      queryTypeOptions: [
+        { key: 'id', display_name: 'id' },
+        { key: 'userNumber', display_name: '用户' },
+        { key: 'cardNumber', display_name: '卡号' },
+        { key: 'roomDevice', display_name: '门禁设备编号' },
+        { key: 'property', display_name: '考勤属性(00-上班、01-下班)' },
+        { key: 'attendanceTime', display_name: '考勤时间' },
+        { key: 'attendancePhoto', display_name: '考勤照片' }
+      ]
+    }
+  },
+  methods: {
+    // 钩子:在获取表格数据之前执行,false 则代表不获取数据
+    [CRUD.HOOK.beforeRefresh]() {
+      return true
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 191 - 0
src/views/ykt/card/index.vue

@@ -0,0 +1,191 @@
+<template>
+  <div class="app-container">
+    <!--工具栏-->
+    <div class="head-container">
+      <div v-if="crud.props.searchToggle">
+        <!-- 搜索 -->
+        <label class="el-form-item-label">id</label>
+        <el-input v-model="query.id" clearable placeholder="id" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">卡号</label>
+        <el-input v-model="query.cardNumber" clearable placeholder="卡号" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">用户工号</label>
+        <el-input v-model="query.userNumber" clearable placeholder="用户工号" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">用户名称</label>
+        <el-input v-model="query.userName" clearable placeholder="用户名称" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">用户种类(00-正式人员、01-外协单位、02-租户、03-访客)</label>
+        <el-input v-model="query.userType" clearable placeholder="用户种类(00-正式人员、01-外协单位、02-租户、03-访客)" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">用户部门</label>
+        <el-input v-model="query.deptId" clearable placeholder="用户部门" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">开卡状态(00-已开通、01-挂失中、02-已注销)</label>
+        <el-input v-model="query.status" clearable placeholder="开卡状态(00-已开通、01-挂失中、02-已注销)" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">余额</label>
+        <el-input v-model="query.balance" clearable placeholder="余额" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">创建者</label>
+        <el-input v-model="query.createBy" clearable placeholder="创建者" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">更新者</label>
+        <el-input v-model="query.updateBy" clearable placeholder="更新者" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">创建时间</label>
+        <el-input v-model="query.createTime" clearable placeholder="创建时间" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">更新时间</label>
+        <el-input v-model="query.updateTime" clearable placeholder="更新时间" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <rrOperation :crud="crud" />
+      </div>
+      <!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'-->
+      <crudOperation :permission="permission" />
+      <!--表单组件-->
+      <el-dialog :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" width="500px">
+        <el-form ref="form" :model="form" :rules="rules" size="small" label-width="80px">
+          <el-form-item label="id" prop="id">
+            <el-input v-model="form.id" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="卡号">
+            <el-input v-model="form.cardNumber" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="用户工号">
+            <el-input v-model="form.userNumber" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="用户名称" prop="userName">
+            <el-input v-model="form.userName" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="用户种类(00-正式人员、01-外协单位、02-租户、03-访客)">
+            <el-select v-model="form.userType" filterable placeholder="请选择">
+              <el-option
+                v-for="item in dict.job_status"
+                :key="item.id"
+                :label="item.label"
+                :value="item.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="用户部门">
+            <el-input v-model="form.deptId" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="开卡状态(00-已开通、01-挂失中、02-已注销)">
+            <el-select v-model="form.status" filterable placeholder="请选择">
+              <el-option
+                v-for="item in dict.user_status"
+                :key="item.id"
+                :label="item.label"
+                :value="item.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="余额">
+            <el-input v-model="form.balance" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="创建者">
+            <el-input v-model="form.createBy" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="更新者">
+            <el-input v-model="form.updateBy" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="创建时间">
+            <el-date-picker v-model="form.createTime" type="datetime" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="更新时间">
+            <el-date-picker v-model="form.updateTime" type="datetime" style="width: 370px;" />
+          </el-form-item>
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+          <el-button type="text" @click="crud.cancelCU">取消</el-button>
+          <el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
+        </div>
+      </el-dialog>
+      <!--表格渲染-->
+      <el-table ref="table" v-loading="crud.loading" :data="crud.data" size="small" style="width: 100%;" @selection-change="crud.selectionChangeHandler">
+        <el-table-column type="selection" width="55" />
+        <el-table-column prop="id" label="id" />
+        <el-table-column prop="cardNumber" label="卡号" />
+        <el-table-column prop="userNumber" label="用户工号" />
+        <el-table-column prop="userName" label="用户名称" />
+        <el-table-column prop="userType" label="用户种类(00-正式人员、01-外协单位、02-租户、03-访客)">
+          <template slot-scope="scope">
+            {{ dict.label.job_status[scope.row.userType] }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="deptId" label="用户部门" />
+        <el-table-column prop="status" label="开卡状态(00-已开通、01-挂失中、02-已注销)">
+          <template slot-scope="scope">
+            {{ dict.label.user_status[scope.row.status] }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="balance" label="余额" />
+        <el-table-column prop="createBy" label="创建者" />
+        <el-table-column prop="updateBy" label="更新者" />
+        <el-table-column prop="createTime" label="创建时间" />
+        <el-table-column prop="updateTime" label="更新时间" />
+        <el-table-column v-if="checkPer(['admin','dmCard:edit','dmCard:del'])" label="操作" width="150px" align="center">
+          <template slot-scope="scope">
+            <udOperation
+              :data="scope.row"
+              :permission="permission"
+            />
+          </template>
+        </el-table-column>
+      </el-table>
+      <!--分页组件-->
+      <pagination />
+    </div>
+  </div>
+</template>
+
+<script>
+import crudDmCard from '@/api/dmCard'
+import CRUD, { presenter, header, form, crud } from '@crud/crud'
+import rrOperation from '@crud/RR.operation'
+import crudOperation from '@crud/CRUD.operation'
+import udOperation from '@crud/UD.operation'
+import pagination from '@crud/Pagination'
+
+const defaultForm = { id: null, cardNumber: null, userNumber: null, userName: null, userType: null, deptId: null, status: null, balance: null, createBy: null, updateBy: null, createTime: null, updateTime: null }
+export default {
+  name: 'DmCard',
+  components: { pagination, crudOperation, rrOperation, udOperation },
+  mixins: [presenter(), header(), form(defaultForm), crud()],
+  dicts: ['job_status', 'user_status'],
+  cruds() {
+    return CRUD({ title: 'card', url: 'api/dmCard', idField: 'userName', sort: 'userName,desc', crudMethod: { ...crudDmCard }})
+  },
+  data() {
+    return {
+      permission: {
+        add: ['admin', 'dmCard:add'],
+        edit: ['admin', 'dmCard:edit'],
+        del: ['admin', 'dmCard:del']
+      },
+      rules: {
+        id: [
+          { required: true, message: '不能为空', trigger: 'blur' }
+        ],
+        userName: [
+          { required: true, message: '用户名称不能为空', trigger: 'blur' }
+        ]
+      },
+      queryTypeOptions: [
+        { key: 'id', display_name: 'id' },
+        { key: 'cardNumber', display_name: '卡号' },
+        { key: 'userNumber', display_name: '用户工号' },
+        { key: 'userName', display_name: '用户名称' },
+        { key: 'userType', display_name: '用户种类(00-正式人员、01-外协单位、02-租户、03-访客)' },
+        { key: 'deptId', display_name: '用户部门' },
+        { key: 'status', display_name: '开卡状态(00-已开通、01-挂失中、02-已注销)' },
+        { key: 'balance', display_name: '余额' },
+        { key: 'createBy', display_name: '创建者' },
+        { key: 'updateBy', display_name: '更新者' },
+        { key: 'createTime', display_name: '创建时间' },
+        { key: 'updateTime', display_name: '更新时间' }
+      ]
+    }
+  },
+  methods: {
+    // 钩子:在获取表格数据之前执行,false 则代表不获取数据
+    [CRUD.HOOK.beforeRefresh]() {
+      return true
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 144 - 0
src/views/ykt/consumer_devices/index.vue

@@ -0,0 +1,144 @@
+<template>
+  <div class="app-container">
+    <!--工具栏-->
+    <div class="head-container">
+      <div v-if="crud.props.searchToggle">
+        <!-- 搜索 -->
+        <label class="el-form-item-label">id</label>
+        <el-input v-model="query.id" clearable placeholder="id" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">设备编号</label>
+        <el-input v-model="query.code" clearable placeholder="设备编号" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">设备名称</label>
+        <el-input v-model="query.name" clearable placeholder="设备名称" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">设备安装位置</label>
+        <el-input v-model="query.buildAddress" clearable placeholder="设备安装位置" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">备注</label>
+        <el-input v-model="query.remark" clearable placeholder="备注" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">创建者</label>
+        <el-input v-model="query.createBy" clearable placeholder="创建者" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">更新者</label>
+        <el-input v-model="query.updateBy" clearable placeholder="更新者" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">创建时间</label>
+        <el-input v-model="query.createTime" clearable placeholder="创建时间" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">更新时间</label>
+        <el-input v-model="query.updateTime" clearable placeholder="更新时间" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <rrOperation :crud="crud" />
+      </div>
+      <!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'-->
+      <crudOperation :permission="permission" />
+      <!--表单组件-->
+      <el-dialog :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" width="500px">
+        <el-form ref="form" :model="form" :rules="rules" size="small" label-width="80px">
+          <el-form-item label="id" prop="id">
+            <el-input v-model="form.id" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="设备编号">
+            <el-input v-model="form.code" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="设备名称">
+            <el-input v-model="form.name" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="设备安装位置">
+            <el-input v-model="form.buildAddress" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="备注">
+            <el-input v-model="form.remark" :rows="3" type="textarea" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="创建者">
+            <el-input v-model="form.createBy" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="更新者">
+            <el-input v-model="form.updateBy" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="创建时间">
+            <el-date-picker v-model="form.createTime" type="datetime" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="更新时间">
+            <el-date-picker v-model="form.updateTime" type="datetime" style="width: 370px;" />
+          </el-form-item>
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+          <el-button type="text" @click="crud.cancelCU">取消</el-button>
+          <el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
+        </div>
+      </el-dialog>
+      <!--表格渲染-->
+      <el-table ref="table" v-loading="crud.loading" :data="crud.data" size="small" style="width: 100%;" @selection-change="crud.selectionChangeHandler">
+        <el-table-column type="selection" width="55" />
+        <el-table-column prop="id" label="id" />
+        <el-table-column prop="code" label="设备编号" />
+        <el-table-column prop="name" label="设备名称" />
+        <el-table-column prop="buildAddress" label="设备安装位置" />
+        <el-table-column prop="remark" label="备注" />
+        <el-table-column prop="createBy" label="创建者" />
+        <el-table-column prop="updateBy" label="更新者" />
+        <el-table-column prop="createTime" label="创建时间" />
+        <el-table-column prop="updateTime" label="更新时间" />
+        <el-table-column v-if="checkPer(['admin','dmConsumerDevices:edit','dmConsumerDevices:del'])" label="操作" width="150px" align="center">
+          <template slot-scope="scope">
+            <udOperation
+              :data="scope.row"
+              :permission="permission"
+            />
+          </template>
+        </el-table-column>
+      </el-table>
+      <!--分页组件-->
+      <pagination />
+    </div>
+  </div>
+</template>
+
+<script>
+import crudDmConsumerDevices from '@/api/dmConsumerDevices'
+import CRUD, { presenter, header, form, crud } from '@crud/crud'
+import rrOperation from '@crud/RR.operation'
+import crudOperation from '@crud/CRUD.operation'
+import udOperation from '@crud/UD.operation'
+import pagination from '@crud/Pagination'
+
+const defaultForm = { id: null, code: null, name: null, buildAddress: null, remark: null, createBy: null, updateBy: null, createTime: null, updateTime: null }
+export default {
+  name: 'DmConsumerDevices',
+  components: { pagination, crudOperation, rrOperation, udOperation },
+  mixins: [presenter(), header(), form(defaultForm), crud()],
+  cruds() {
+    return CRUD({ title: 'consumer_devices', url: 'api/dmConsumerDevices', idField: 'id', sort: 'id,desc', crudMethod: { ...crudDmConsumerDevices }})
+  },
+  data() {
+    return {
+      permission: {
+        add: ['admin', 'dmConsumerDevices:add'],
+        edit: ['admin', 'dmConsumerDevices:edit'],
+        del: ['admin', 'dmConsumerDevices:del']
+      },
+      rules: {
+        id: [
+          { required: true, message: '不能为空', trigger: 'blur' }
+        ]
+      },
+      queryTypeOptions: [
+        { key: 'id', display_name: 'id' },
+        { key: 'code', display_name: '设备编号' },
+        { key: 'name', display_name: '设备名称' },
+        { key: 'buildAddress', display_name: '设备安装位置' },
+        { key: 'remark', display_name: '备注' },
+        { key: 'createBy', display_name: '创建者' },
+        { key: 'updateBy', display_name: '更新者' },
+        { key: 'createTime', display_name: '创建时间' },
+        { key: 'updateTime', display_name: '更新时间' }
+      ]
+    }
+  },
+  methods: {
+    // 钩子:在获取表格数据之前执行,false 则代表不获取数据
+    [CRUD.HOOK.beforeRefresh]() {
+      return true
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 127 - 0
src/views/ykt/expense_calendar/index.vue

@@ -0,0 +1,127 @@
+<template>
+  <div class="app-container">
+    <!--工具栏-->
+    <div class="head-container">
+      <div v-if="crud.props.searchToggle">
+        <!-- 搜索 -->
+        <label class="el-form-item-label">id</label>
+        <el-input v-model="query.id" clearable placeholder="id" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">用户</label>
+        <el-input v-model="query.userNumber" clearable placeholder="用户" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">卡号</label>
+        <el-input v-model="query.cardNumber" clearable placeholder="卡号" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">消费金额</label>
+        <el-input v-model="query.rechargeAmount" clearable placeholder="消费金额" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">消费后金额</label>
+        <el-input v-model="query.amountAfterRecharge" clearable placeholder="消费后金额" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">消费时间</label>
+        <el-input v-model="query.rechargeTime" clearable placeholder="消费时间" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">消费内容</label>
+        <el-input v-model="query.content" clearable placeholder="消费内容" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <rrOperation :crud="crud" />
+      </div>
+      <!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'-->
+      <crudOperation :permission="permission" />
+      <!--表单组件-->
+      <el-dialog :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" width="500px">
+        <el-form ref="form" :model="form" :rules="rules" size="small" label-width="80px">
+          <el-form-item label="id">
+            <el-input v-model="form.id" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="用户">
+            <el-input v-model="form.userNumber" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="卡号">
+            <el-input v-model="form.cardNumber" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="消费金额">
+            <el-input v-model="form.rechargeAmount" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="消费后金额">
+            <el-input v-model="form.amountAfterRecharge" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="消费时间">
+            <el-date-picker v-model="form.rechargeTime" type="datetime" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="消费内容">
+            <el-input v-model="form.content" :rows="3" type="textarea" style="width: 370px;" />
+          </el-form-item>
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+          <el-button type="text" @click="crud.cancelCU">取消</el-button>
+          <el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
+        </div>
+      </el-dialog>
+      <!--表格渲染-->
+      <el-table ref="table" v-loading="crud.loading" :data="crud.data" size="small" style="width: 100%;" @selection-change="crud.selectionChangeHandler">
+        <el-table-column type="selection" width="55" />
+        <el-table-column prop="id" label="id" />
+        <el-table-column prop="userNumber" label="用户" />
+        <el-table-column prop="cardNumber" label="卡号" />
+        <el-table-column prop="rechargeAmount" label="消费金额" />
+        <el-table-column prop="amountAfterRecharge" label="消费后金额" />
+        <el-table-column prop="rechargeTime" label="消费时间" />
+        <el-table-column prop="content" label="消费内容" />
+        <el-table-column v-if="checkPer(['admin','dmExpenseCalendar:edit','dmExpenseCalendar:del'])" label="操作" width="150px" align="center">
+          <template slot-scope="scope">
+            <udOperation
+              :data="scope.row"
+              :permission="permission"
+            />
+          </template>
+        </el-table-column>
+      </el-table>
+      <!--分页组件-->
+      <pagination />
+    </div>
+  </div>
+</template>
+
+<script>
+import crudDmExpenseCalendar from '@/api/dmExpenseCalendar'
+import CRUD, { presenter, header, form, crud } from '@crud/crud'
+import rrOperation from '@crud/RR.operation'
+import crudOperation from '@crud/CRUD.operation'
+import udOperation from '@crud/UD.operation'
+import pagination from '@crud/Pagination'
+
+const defaultForm = { id: null, userNumber: null, cardNumber: null, rechargeAmount: null, amountAfterRecharge: null, rechargeTime: null, content: null }
+export default {
+  name: 'DmExpenseCalendar',
+  components: { pagination, crudOperation, rrOperation, udOperation },
+  mixins: [presenter(), header(), form(defaultForm), crud()],
+  cruds() {
+    return CRUD({ title: 'expense_calendar', url: 'api/dmExpenseCalendar', idField: 'id', sort: 'id,desc', crudMethod: { ...crudDmExpenseCalendar }})
+  },
+  data() {
+    return {
+      permission: {
+        add: ['admin', 'dmExpenseCalendar:add'],
+        edit: ['admin', 'dmExpenseCalendar:edit'],
+        del: ['admin', 'dmExpenseCalendar:del']
+      },
+      rules: {
+      },
+      queryTypeOptions: [
+        { key: 'id', display_name: 'id' },
+        { key: 'userNumber', display_name: '用户' },
+        { key: 'cardNumber', display_name: '卡号' },
+        { key: 'rechargeAmount', display_name: '消费金额' },
+        { key: 'amountAfterRecharge', display_name: '消费后金额' },
+        { key: 'rechargeTime', display_name: '消费时间' },
+        { key: 'content', display_name: '消费内容' }
+      ]
+    }
+  },
+  methods: {
+    // 钩子:在获取表格数据之前执行,false 则代表不获取数据
+    [CRUD.HOOK.beforeRefresh]() {
+      return true
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 118 - 0
src/views/ykt/parkingPass/index.vue

@@ -0,0 +1,118 @@
+<template>
+  <div class="app-container">
+    <!--工具栏-->
+    <div class="head-container">
+      <div v-if="crud.props.searchToggle">
+        <!-- 搜索 -->
+        <label class="el-form-item-label">id</label>
+        <el-input v-model="query.id" clearable placeholder="id" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">车牌</label>
+        <el-input v-model="query.plateNumber" clearable placeholder="车牌" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">消费设备编号</label>
+        <el-input v-model="query.consumerDevice" clearable placeholder="消费设备编号" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">出入(00-进入、01-离开)</label>
+        <el-input v-model="query.comeGoOut" clearable placeholder="出入(00-进入、01-离开)" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <rrOperation :crud="crud" />
+      </div>
+      <!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'-->
+      <crudOperation :permission="permission" />
+      <!--表单组件-->
+      <el-dialog :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" width="500px">
+        <el-form ref="form" :model="form" :rules="rules" size="small" label-width="80px">
+          <el-form-item label="id">
+            <el-input v-model="form.id" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="车牌">
+            <el-input v-model="form.plateNumber" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="消费设备编号">
+            <el-input v-model="form.consumerDevice" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="出入(00-进入、01-离开)">
+            <el-select v-model="form.comeGoOut" filterable placeholder="请选择">
+              <el-option
+                v-for="item in dict.print_approval_status"
+                :key="item.id"
+                :label="item.label"
+                :value="item.value"
+              />
+            </el-select>
+          </el-form-item>
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+          <el-button type="text" @click="crud.cancelCU">取消</el-button>
+          <el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
+        </div>
+      </el-dialog>
+      <!--表格渲染-->
+      <el-table ref="table" v-loading="crud.loading" :data="crud.data" size="small" style="width: 100%;" @selection-change="crud.selectionChangeHandler">
+        <el-table-column type="selection" width="55" />
+        <el-table-column prop="id" label="id" />
+        <el-table-column prop="plateNumber" label="车牌" />
+        <el-table-column prop="consumerDevice" label="消费设备编号" />
+        <el-table-column prop="comeGoOut" label="出入(00-进入、01-离开)">
+          <template slot-scope="scope">
+            {{ dict.label.print_approval_status[scope.row.comeGoOut] }}
+          </template>
+        </el-table-column>
+        <el-table-column v-if="checkPer(['admin','dmParkingPass:edit','dmParkingPass:del'])" label="操作" width="150px" align="center">
+          <template slot-scope="scope">
+            <udOperation
+              :data="scope.row"
+              :permission="permission"
+            />
+          </template>
+        </el-table-column>
+      </el-table>
+      <!--分页组件-->
+      <pagination />
+    </div>
+  </div>
+</template>
+
+<script>
+import crudDmParkingPass from '@/api/dmParkingPass'
+import CRUD, { presenter, header, form, crud } from '@crud/crud'
+import rrOperation from '@crud/RR.operation'
+import crudOperation from '@crud/CRUD.operation'
+import udOperation from '@crud/UD.operation'
+import pagination from '@crud/Pagination'
+
+const defaultForm = { id: null, plateNumber: null, consumerDevice: null, comeGoOut: null }
+export default {
+  name: 'DmParkingPass',
+  components: { pagination, crudOperation, rrOperation, udOperation },
+  mixins: [presenter(), header(), form(defaultForm), crud()],
+  dicts: ['print_approval_status'],
+  cruds() {
+    return CRUD({ title: 'parkingPass', url: 'api/dmParkingPass', idField: 'id', sort: 'id,desc', crudMethod: { ...crudDmParkingPass }})
+  },
+  data() {
+    return {
+      permission: {
+        add: ['admin', 'dmParkingPass:add'],
+        edit: ['admin', 'dmParkingPass:edit'],
+        del: ['admin', 'dmParkingPass:del']
+      },
+      rules: {
+      },
+      queryTypeOptions: [
+        { key: 'id', display_name: 'id' },
+        { key: 'plateNumber', display_name: '车牌' },
+        { key: 'consumerDevice', display_name: '消费设备编号' },
+        { key: 'comeGoOut', display_name: '出入(00-进入、01-离开)' }
+      ]
+    }
+  },
+  methods: {
+    // 钩子:在获取表格数据之前执行,false 则代表不获取数据
+    [CRUD.HOOK.beforeRefresh]() {
+      return true
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 139 - 0
src/views/ykt/plateTraffic/index.vue

@@ -0,0 +1,139 @@
+<template>
+  <div class="app-container">
+    <!--工具栏-->
+    <div class="head-container">
+      <div v-if="crud.props.searchToggle">
+        <!-- 搜索 -->
+        <label class="el-form-item-label">id</label>
+        <el-input v-model="query.id" clearable placeholder="id" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">用户</label>
+        <el-input v-model="query.userNumber" clearable placeholder="用户" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">车牌</label>
+        <el-input v-model="query.plateNumber" clearable placeholder="车牌" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">设备编号</label>
+        <el-input v-model="query.roomDevice" clearable placeholder="设备编号" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">出入(00-进入、01-离开)</label>
+        <el-input v-model="query.comeGoOut" clearable placeholder="出入(00-进入、01-离开)" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">设备安装位置</label>
+        <el-input v-model="query.buildAddress" clearable placeholder="设备安装位置" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">通行时间</label>
+        <el-input v-model="query.accessTime" clearable placeholder="通行时间" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <rrOperation :crud="crud" />
+      </div>
+      <!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'-->
+      <crudOperation :permission="permission" />
+      <!--表单组件-->
+      <el-dialog :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" width="500px">
+        <el-form ref="form" :model="form" :rules="rules" size="small" label-width="80px">
+          <el-form-item label="id">
+            <el-input v-model="form.id" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="用户">
+            <el-input v-model="form.userNumber" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="车牌">
+            <el-input v-model="form.plateNumber" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="设备编号">
+            <el-input v-model="form.roomDevice" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="出入(00-进入、01-离开)">
+            <el-select v-model="form.comeGoOut" filterable placeholder="请选择">
+              <el-option
+                v-for="item in dict.information_status"
+                :key="item.id"
+                :label="item.label"
+                :value="item.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="设备安装位置">
+            <el-input v-model="form.buildAddress" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="通行时间">
+            <el-date-picker v-model="form.accessTime" type="datetime" style="width: 370px;" />
+          </el-form-item>
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+          <el-button type="text" @click="crud.cancelCU">取消</el-button>
+          <el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
+        </div>
+      </el-dialog>
+      <!--表格渲染-->
+      <el-table ref="table" v-loading="crud.loading" :data="crud.data" size="small" style="width: 100%;" @selection-change="crud.selectionChangeHandler">
+        <el-table-column type="selection" width="55" />
+        <el-table-column prop="id" label="id" />
+        <el-table-column prop="userNumber" label="用户" />
+        <el-table-column prop="plateNumber" label="车牌" />
+        <el-table-column prop="roomDevice" label="设备编号" />
+        <el-table-column prop="comeGoOut" label="出入(00-进入、01-离开)">
+          <template slot-scope="scope">
+            {{ dict.label.information_status[scope.row.comeGoOut] }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="buildAddress" label="设备安装位置" />
+        <el-table-column prop="accessTime" label="通行时间" />
+        <el-table-column v-if="checkPer(['admin','dmPlateTraffic:edit','dmPlateTraffic:del'])" label="操作" width="150px" align="center">
+          <template slot-scope="scope">
+            <udOperation
+              :data="scope.row"
+              :permission="permission"
+            />
+          </template>
+        </el-table-column>
+      </el-table>
+      <!--分页组件-->
+      <pagination />
+    </div>
+  </div>
+</template>
+
+<script>
+import crudDmPlateTraffic from '@/api/dmPlateTraffic'
+import CRUD, { presenter, header, form, crud } from '@crud/crud'
+import rrOperation from '@crud/RR.operation'
+import crudOperation from '@crud/CRUD.operation'
+import udOperation from '@crud/UD.operation'
+import pagination from '@crud/Pagination'
+
+const defaultForm = { id: null, userNumber: null, plateNumber: null, roomDevice: null, comeGoOut: null, buildAddress: null, accessTime: null }
+export default {
+  name: 'DmPlateTraffic',
+  components: { pagination, crudOperation, rrOperation, udOperation },
+  mixins: [presenter(), header(), form(defaultForm), crud()],
+  dicts: ['information_status'],
+  cruds() {
+    return CRUD({ title: 'plateTraffic', url: 'api/dmPlateTraffic', idField: 'id', sort: 'id,desc', crudMethod: { ...crudDmPlateTraffic }})
+  },
+  data() {
+    return {
+      permission: {
+        add: ['admin', 'dmPlateTraffic:add'],
+        edit: ['admin', 'dmPlateTraffic:edit'],
+        del: ['admin', 'dmPlateTraffic:del']
+      },
+      rules: {
+      },
+      queryTypeOptions: [
+        { key: 'id', display_name: 'id' },
+        { key: 'userNumber', display_name: '用户' },
+        { key: 'plateNumber', display_name: '车牌' },
+        { key: 'roomDevice', display_name: '设备编号' },
+        { key: 'comeGoOut', display_name: '出入(00-进入、01-离开)' },
+        { key: 'buildAddress', display_name: '设备安装位置' },
+        { key: 'accessTime', display_name: '通行时间' }
+      ]
+    }
+  },
+  methods: {
+    // 钩子:在获取表格数据之前执行,false 则代表不获取数据
+    [CRUD.HOOK.beforeRefresh]() {
+      return true
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 319 - 0
src/views/ykt/plate_number/index.vue

@@ -0,0 +1,319 @@
+<template>
+  <div class="app-container">
+    <!--工具栏-->
+    <div class="head-container">
+      <div v-if="crud.props.searchToggle">
+        <!-- 搜索 -->
+        <!--        <label class="el-form-item-label">id</label>-->
+        <!--        <el-input v-model="query.id" clearable placeholder="id" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery"  value="车牌号"/>-->
+        <!--        <label class="el-form-item-label">用户</label>-->
+        <!--        <el-input v-model="query.userNumber" clearable placeholder="用户" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />-->
+        <!--        <label class="el-form-item-label">车牌号</label>-->
+        <!--        <label class="el-form-item-label">有效开始时间</label>-->
+        <!--        <el-input v-model="query.startTime" clearable placeholder="有效开始时间" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />-->
+        <!--        <label class="el-form-item-label">有效结束时间</label>-->
+        <!--        <el-input v-model="query.endTime" clearable placeholder="有效结束时间" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />-->
+        <!--        <label class="el-form-item-label">效期状态(00-有效、01-过期)</label>-->
+        <!--        <el-input v-model="query.effectiveState" clearable placeholder="效期状态(00-有效、01-过期)" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />-->
+        <!--        <label class="el-form-item-label">登记状态(00-待审核、01-已登记)</label>-->
+        <!--        <el-input v-model="query.registrationStatus" clearable placeholder="登记状态(00-待审核、01-已登记)" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />-->
+        <!--        <label class="el-form-item-label">创建者</label>-->
+        <!--        <el-input v-model="query.createBy" clearable placeholder="创建者" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />-->
+        <!--        <label class="el-form-item-label">更新者</label>-->
+        <!--        <el-input v-model="query.updateBy" clearable placeholder="更新者" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />-->
+        <!--        <label class="el-form-item-label">创建时间</label>-->
+        <!--        <el-input v-model="query.createTime" clearable placeholder="创建时间" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />-->
+        <!--        <label class="el-form-item-label">更新时间</label>-->
+        <!--        <el-input v-model="query.updateTime" clearable placeholder="更新时间" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />-->
+        <table border="1" style="border-color: #e9e9e9">
+          <el-input v-model="query.plateNumber" clearable placeholder="车牌号" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+          <el-input v-model="query.cardNumber" clearable placeholder="一卡通卡号" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+          <el-input v-model="query.name" clearable placeholder="姓名" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+          <el-input v-model="query.registrationStatus" clearable placeholder="登记状态" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+          <el-input v-model="query.effectiveState" clearable placeholder="效期状态" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+          <el-input v-model="query.startTime" clearable placeholder="登记时间" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+          <rrOperation :crud="crud" />
+        </table>
+      </div>
+      <!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'-->
+      <crudOperation :permission="permission" />
+      <!--表单组件  -->
+      <el-dialog :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" width="750px" height="50">
+        <el-form ref="form" :model="form" :rules="rules" size="small" label-width="100px">
+          <!--          <el-form-item label="id" prop="DmUser.id">-->
+          <!--            <el-input v-model="form.id" style="width: 370px;" />-->
+          <!--          </el-form-item>-->
+          <!--          <el-form-item label="姓名" prop="name">-->
+          <!--            <el-input v-model="form.name" style="width: 370px;" />-->
+          <!--          </el-form-item>-->
+          <!--          <el-form-item label="人员种类" prop="userType">-->
+          <!--            <el-input v-model="form.userType" style="width: 370px;" />-->
+          <!--          </el-form-item>-->
+          <!--          <el-form-item label="一卡通卡号" prop="cardNumber">-->
+          <!--            <el-input v-model="form.cardNumber" style="width: 370px;" />-->
+          <!--          </el-form-item>-->
+          <!--          <el-form-item label="手机" prop="contacts">-->
+          <!--            <el-input v-model="form.contacts" style="width: 370px;" />-->
+          <!--          </el-form-item>-->
+          <!--          <el-form-item label="车牌号">-->
+          <!--            <el-input v-model="form.plateNumber" style="width: 370px;" />-->
+          <!--          </el-form-item>-->
+          <!--          <el-form-item label="有效开始时间">-->
+          <!--            <el-date-picker v-model="form.startTime" type="datetime" style="width: 370px;" />-->
+          <!--          </el-form-item>-->
+          <!--          <el-form-item label="有效结束时间">-->
+          <!--            <el-date-picker v-model="form.endTime" type="datetime" style="width: 370px;" />-->
+          <!--          </el-form-item>-->
+          <!--          <el-form-item label="效期状态(00-有效、01-过期)">-->
+          <!--            <el-select v-model="form.effectiveState" filterable placeholder="请选择">-->
+          <!--              <el-option-->
+          <!--                v-for="(item,index) in dict.information_status"-->
+          <!--                :key="item.id"-->
+          <!--                :label="item.label"-->
+          <!--                :value="item.value" />-->
+          <!--            </el-select>-->
+          <!--          </el-form-item>-->
+          <!--          <el-form-item label="登记状态(00-待审核、01-已登记)">-->
+          <!--            <el-select v-model="form.registrationStatus" filterable placeholder="请选择">-->
+          <!--              <el-option-->
+          <!--                v-for="(item,index) in dict.print_approval_status"-->
+          <!--                :key="item.id"-->
+          <!--                :label="item.label"-->
+          <!--                :value="item.value" />-->
+          <!--            </el-select>-->
+          <!--          </el-form-item>-->
+          <!--          <el-form-item label="创建者">-->
+          <!--            <el-input v-model="form.createBy" style="width: 370px;" />-->
+          <!--          </el-form-item>-->
+          <!--          <el-form-item label="更新者">-->
+          <!--            <el-input v-model="form.updateBy" style="width: 370px;" />-->
+          <!--          </el-form-item>-->
+          <!--          <el-form-item label="创建时间">-->
+          <!--            <el-date-picker v-model="form.createTime" type="datetime" style="width: 370px;" />-->
+          <!--          </el-form-item>-->
+          <!--          <el-form-item label="更新时间">-->
+          <!--            <el-date-picker v-model="form.updateTime" type="datetime" style="width: 370px;" />-->
+          <!--          </el-form-item>-->
+          <!--          <el-form-item label="登记状态(00-待审核、01-已登记)">-->
+          <!--            <el-select v-model="form.registrationStatus" filterable placeholder="请选择">-->
+          <!--              <el-option-->
+          <!--                v-for="(item,index) in dict.print_approval_status"-->
+          <!--                :key="item.id"-->
+          <!--                :label="item.label"-->
+          <!--                :value="item.value" />-->
+          <!--            </el-select>-->
+          <!--          </el-form-item>-->
+          <!--          <el-form-item label="创建者">-->
+          <!--            <el-input v-model="form.createBy" style="width: 370px;" />-->
+          <!--          </el-form-item>-->
+          <!--          <el-form-item label="更新者">-->
+          <!--            <el-input v-model="form.updateBy" style="width: 370px;" />-->
+          <!--          </el-form-item>-->
+          <!--          <el-form-item label="创建时间">-->
+          <!--            <el-date-picker v-model="form.createTime" type="datetime" style="width: 370px;" />-->
+          <!--          </el-form-item>-->
+          <!--          <el-form-item label="更新时间">-->
+          <!--            <el-date-picker v-model="form.updateTime" type="datetime" style="width: 370px;" />-->
+          <!--          </el-form-item>-->
+          <el-form-item label="一卡通卡号:" prop="DmCard.cardNumber">
+            <el-input v-model="form.cardNumber" style="width: 370px;" clearable placeholder="请输入一卡通卡号" />
+          </el-form-item>
+          <el-form-item label="人员姓名:" prop="DmUser.name">
+            <el-input v-model="form.name" style="width: 370px;" readonly="true" />
+          </el-form-item>
+          <el-form-item label="人员种类" prop="userType">
+            <el-input v-model="form.userType" style="width: 370px;" readonly="true" />
+          </el-form-item>
+          <el-form-item label="手机号" prop="contacts">
+            <el-input v-model="form.contacts" style="width: 370px;" readonly="true" />
+          </el-form-item>
+          <el-form-item label="在职状态" prop="deptId">
+            <el-input v-model="form.deptId" style="width: 370px;" readonly="true" />
+          </el-form-item>
+          <el-form-item label="所属部门" prop="deptId">
+            <el-input v-model="form.deptId" style="width: 370px;" readonly="true" />
+          </el-form-item>
+          <el-form-item label="当前职务" prop="deptId">
+            <el-input v-model="form.deptId" style="width: 370px;" readonly="true" />
+          </el-form-item>
+          <el-form-item label="车牌号" prop="plateNumber">
+            <el-input v-model="form.plateNumber" style="width: 370px;" clearable placeholder="请输入车牌号" />
+          </el-form-item>
+          <el-form-item label="车辆类型">
+            <el-select v-model="form.cheliangType" filterable placeholder="请选择">
+              <!--              <el-option-->
+              <!--                v-for="(item,index) in dict.information_status"-->
+              <!--                :key="item.id"-->
+              <!--                :label="item.label"-->
+              <!--                :value="item.value" />-->
+              <el-option label="请选择" value="请选择" />
+              <el-option label="员工车辆" value="00" />
+              <el-option label="白名单" value="01" />
+              <el-option label="访客车辆" value="02" />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="车牌有效期限">
+            <el-date-picker v-model="form.startTime" type="date" style="width: 185px;" />
+            ~
+            <el-date-picker v-model="form.endTime" type="date" style="width: 185px;" />
+          </el-form-item>
+          <hr>
+          <el-form-item>
+            <span>当前账户已登记车牌:</span>
+            <table border="1">
+              <tr>
+                <td>车牌号</td>
+                <td>有效期开始时间</td>
+                <td>有效期结束时间</td>
+                <td>效期状态</td>
+                <td>登记状态</td>
+                <td>登记时间</td>
+              </tr>
+            </table>
+          </el-form-item>
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+          <el-button type="text" @click="crud.cancelCU">取消</el-button>
+          <el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
+        </div>
+      </el-dialog>
+      <!--表格渲染-->
+      <!--      <el-table ref="table" v-loading="crud.loading" :data="crud.data" size="small" style="width: 100%;" @selection-change="crud.selectionChangeHandler">-->
+      <!--        <el-table-column type="selection" width="55" />-->
+      <!--        <el-table-column prop="id" label="id" />-->
+      <!--        <el-table-column prop="userNumber" label="用户" />-->
+      <!--        <el-table-column prop="plateNumber" label="车牌号" />-->
+      <!--        <el-table-column prop="startTime" label="有效开始时间" />-->
+      <!--        <el-table-column prop="endTime" label="有效结束时间" />-->
+      <!--        <el-table-column prop="effectiveState" label="效期状态(00-有效、01-过期)">-->
+      <!--          <template slot-scope="scope">-->
+      <!--            {{ dict.label.information_status[scope.row.effectiveState] }}-->
+      <!--          </template>-->
+      <!--        </el-table-column>-->
+      <!--        <el-table-column prop="registrationStatus" label="登记状态(00-待审核、01-已登记)">-->
+      <!--          <template slot-scope="scope">-->
+      <!--            {{ dict.label.print_approval_status[scope.row.registrationStatus] }}-->
+      <!--          </template>-->
+      <!--        </el-table-column>-->
+      <!--        <el-table-column prop="createBy" label="创建者" />-->
+      <!--        <el-table-column prop="updateBy" label="更新者" />-->
+      <!--        <el-table-column prop="createTime" label="创建时间" />-->
+      <!--        <el-table-column prop="updateTime" label="更新时间" />-->
+      <!--        <el-table-column v-if="checkPer(['admin','dmPlateNumber:edit','dmPlateNumber:del'])" label="操作" width="150px" align="center">-->
+      <!--          <template slot-scope="scope">-->
+      <!--            <udOperation-->
+      <!--              :data="scope.row"-->
+      <!--              :permission="permission"-->
+      <!--            />-->
+      <!--          </template>-->
+      <!--        </el-table-column>-->
+      <!--      </el-table>-->
+      <el-table ref="table" v-loading="crud.loading" :data="crud.data" size="small" style="width: 100%;" @selection-change="crud.selectionChangeHandler">
+        <get-query />
+        <el-table-column type="selection" width="55" />
+        <el-table-column prop="id" label="id" />
+        <el-table-column prop="name" label="姓名" />
+        <el-table-column prop="userType" label="人员种类">
+          <template slot-scope="scope">
+            {{ dict.label.user_status[scope.row.userType] }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="cardNumber" label="一卡通卡号" />
+        <el-table-column prop="contacts" label="手机" />
+        <el-table-column prop="plateNumber" label="车牌号" />
+        <el-table-column prop="startTime" label="有效开始时间" />
+        <el-table-column prop="endTime" label="有效结束时间" />
+        <el-table-column prop="effectiveState" label="效期状态(00-有效、01-过期)">
+          <template slot-scope="scope">
+            {{ dict.label.information_status[scope.row.effectiveState] }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="registrationStatus" label="登记状态(00-待审核、01-已登记)">
+          <template slot-scope="scope">
+            {{ dict.label.print_approval_status[scope.row.registrationStatus] }}
+          </template>
+        </el-table-column>
+        <!--        <el-table-column prop="createBy" label="创建者" />-->
+        <!--        <el-table-column prop="updateBy" label="更新者" />-->
+        <!--        <el-table-column prop="createTime" label="创建时间" />-->
+        <!--        <el-table-column prop="updateTime" label="更新时间" />-->
+        <el-table-column v-if="checkPer(['admin','dmPlateNumber:edit','dmPlateNumber:del'])" label="操作" width="150px" align="center">
+          <template slot-scope="scope">
+            <udOperation
+              :data="scope.row"
+              :permission="permission"
+            />
+          </template>
+        </el-table-column>
+      </el-table>
+      <!--分页组件-->
+      <pagination />
+    </div>
+  </div>
+</template>
+
+<script>
+import crudDmPlateNumber from '@/api/dmPlateNumber'
+import CRUD, { presenter, header, form, crud } from '@crud/crud'
+import rrOperation from '@crud/RR.operation'
+import crudOperation from '@crud/CRUD.operation'
+import udOperation from '@crud/UD.operation'
+import pagination from '@crud/Pagination'
+import getQuery from '@api/dmPlateNumber/getQuery'
+
+const defaultForm = { id: null, userNumber: null, plateNumber: null, startTime: null, endTime: null, effectiveState: null, registrationStatus: null, createBy: null, updateBy: null, createTime: null, updateTime: null }
+export default {
+  name: 'DmPlateNumber',
+  components: { pagination, crudOperation, rrOperation, udOperation, getQuery },
+  mixins: [presenter(), header(), form(defaultForm), crud()],
+  dicts: ['information_status', 'print_approval_status', 'user_status', 'information_status'],
+  cruds() {
+    return CRUD({ title: 'plate_number', url: 'api/dmPlateNumber', idField: 'id', sort: 'id,desc', crudMethod: { ...crudDmPlateNumber }})
+  },
+  data() {
+    return {
+      permission: {
+        add: ['admin', 'dmPlateNumber:add'],
+        edit: ['admin', 'dmPlateNumber:edit'],
+        del: ['admin', 'dmPlateNumber:del']
+      },
+      rules: {
+        id: [
+          { required: true, message: '不能为空', trigger: 'blur' }
+        ],
+        userNumber: [
+          { required: true, message: '用户不能为空', trigger: 'blur' }
+        ]
+      },
+      queryTypeOptions: [
+        { key: 'id', display_name: 'id' },
+        { key: 'name', display_name: '姓名' },
+        { key: 'userType', display_name: '人员种类' },
+        { key: 'cardNumber', display_name: '一卡通卡号' },
+        { key: 'contacts', display_name: '手机' },
+        // { key: 'userNumber', display_name: '用户' },
+        { key: 'plateNumber', display_name: '车牌号' },
+        { key: 'startTime', display_name: '有效开始时间' },
+        { key: 'endTime', display_name: '有效结束时间' },
+        { key: 'effectiveState', display_name: '效期状态(00-有效、01-过期)' },
+        { key: 'registrationStatus', display_name: '登记状态(00-待审核、01-已登记)' },
+        { key: 'cheliangType', display_name: '车辆类型(00-员工车辆、01--白名单、02--访客车辆)' }
+        // { key: 'createBy', display_name: '创建者' },
+        // { key: 'updateBy', display_name: '更新者' },
+        // { key: 'createTime', display_name: '创建时间' },
+        // { key: 'updateTime', display_name: '更新时间' }
+      ]
+    }
+  },
+  methods: {
+    // 钩子:在获取表格数据之前执行,false 则代表不获取数据
+    [CRUD.HOOK.beforeRefresh]() {
+      return true
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 167 - 0
src/views/ykt/reading_record/index.vue

@@ -0,0 +1,167 @@
+<template>
+  <div class="app-container">
+    <!--工具栏-->
+    <div class="head-container">
+      <div v-if="crud.props.searchToggle">
+        <!-- 搜索 -->
+        <label class="el-form-item-label">id</label>
+        <el-input v-model="query.id" clearable placeholder="id" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">用户</label>
+        <el-input v-model="query.userNumber" clearable placeholder="用户" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">卡号</label>
+        <el-input v-model="query.cardNumber" clearable placeholder="卡号" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">书籍编号</label>
+        <el-input v-model="query.bookId" clearable placeholder="书籍编号" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">借阅书名</label>
+        <el-input v-model="query.bookName" clearable placeholder="借阅书名" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">借阅金额</label>
+        <el-input v-model="query.money" clearable placeholder="借阅金额" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">借阅开始时间</label>
+        <el-input v-model="query.startTime" clearable placeholder="借阅开始时间" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">借阅到期时间</label>
+        <el-input v-model="query.expireTime" clearable placeholder="借阅到期时间" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">借阅归还时间</label>
+        <el-input v-model="query.returnTime" clearable placeholder="借阅归还时间" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">是否逾期(true-已逾期、false-未逾期)</label>
+        <el-input v-model="query.isOverdue" clearable placeholder="是否逾期(true-已逾期、false-未逾期)" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">逾期天数</label>
+        <el-input v-model="query.day" clearable placeholder="逾期天数" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <rrOperation :crud="crud" />
+      </div>
+      <!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'-->
+      <crudOperation :permission="permission" />
+      <!--表单组件-->
+      <el-dialog :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" width="500px">
+        <el-form ref="form" :model="form" :rules="rules" size="small" label-width="80px">
+          <el-form-item label="id">
+            <el-input v-model="form.id" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="用户">
+            <el-input v-model="form.userNumber" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="卡号">
+            <el-input v-model="form.cardNumber" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="书籍编号">
+            <el-input v-model="form.bookId" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="借阅书名">
+            <el-input v-model="form.bookName" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="借阅金额">
+            <el-input v-model="form.money" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="借阅开始时间">
+            <el-date-picker v-model="form.startTime" type="datetime" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="借阅到期时间">
+            <el-date-picker v-model="form.expireTime" type="datetime" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="借阅归还时间">
+            <el-date-picker v-model="form.returnTime" type="datetime" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="是否逾期(true-已逾期、false-未逾期)">
+            <el-select v-model="form.isOverdue" filterable placeholder="请选择">
+              <el-option
+                v-for="item in dict.information_status"
+                :key="item.id"
+                :label="item.label"
+                :value="item.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="逾期天数">
+            <el-input v-model="form.day" style="width: 370px;" />
+          </el-form-item>
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+          <el-button type="text" @click="crud.cancelCU">取消</el-button>
+          <el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
+        </div>
+      </el-dialog>
+      <!--表格渲染-->
+      <el-table ref="table" v-loading="crud.loading" :data="crud.data" size="small" style="width: 100%;" @selection-change="crud.selectionChangeHandler">
+        <el-table-column type="selection" width="55" />
+        <el-table-column prop="id" label="id" />
+        <el-table-column prop="userNumber" label="用户" />
+        <el-table-column prop="cardNumber" label="卡号" />
+        <el-table-column prop="bookId" label="书籍编号" />
+        <el-table-column prop="bookName" label="借阅书名" />
+        <el-table-column prop="money" label="借阅金额" />
+        <el-table-column prop="startTime" label="借阅开始时间" />
+        <el-table-column prop="expireTime" label="借阅到期时间" />
+        <el-table-column prop="returnTime" label="借阅归还时间" />
+        <el-table-column prop="isOverdue" label="是否逾期(true-已逾期、false-未逾期)">
+          <template slot-scope="scope">
+            {{ dict.label.information_status[scope.row.isOverdue] }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="day" label="逾期天数" />
+        <el-table-column v-if="checkPer(['admin','dmReadingRecord:edit','dmReadingRecord:del'])" label="操作" width="150px" align="center">
+          <template slot-scope="scope">
+            <udOperation
+              :data="scope.row"
+              :permission="permission"
+            />
+          </template>
+        </el-table-column>
+      </el-table>
+      <!--分页组件-->
+      <pagination />
+    </div>
+  </div>
+</template>
+
+<script>
+import crudDmReadingRecord from '@/api/dmReadingRecord'
+import CRUD, { presenter, header, form, crud } from '@crud/crud'
+import rrOperation from '@crud/RR.operation'
+import crudOperation from '@crud/CRUD.operation'
+import udOperation from '@crud/UD.operation'
+import pagination from '@crud/Pagination'
+
+const defaultForm = { id: null, userNumber: null, cardNumber: null, bookId: null, bookName: null, money: null, startTime: null, expireTime: null, returnTime: null, isOverdue: null, day: null }
+export default {
+  name: 'DmReadingRecord',
+  components: { pagination, crudOperation, rrOperation, udOperation },
+  mixins: [presenter(), header(), form(defaultForm), crud()],
+  dicts: ['information_status'],
+  cruds() {
+    return CRUD({ title: 'reading_record', url: 'api/dmReadingRecord', idField: 'id', sort: 'id,desc', crudMethod: { ...crudDmReadingRecord }})
+  },
+  data() {
+    return {
+      permission: {
+        add: ['admin', 'dmReadingRecord:add'],
+        edit: ['admin', 'dmReadingRecord:edit'],
+        del: ['admin', 'dmReadingRecord:del']
+      },
+      rules: {
+      },
+      queryTypeOptions: [
+        { key: 'id', display_name: 'id' },
+        { key: 'userNumber', display_name: '用户' },
+        { key: 'cardNumber', display_name: '卡号' },
+        { key: 'bookId', display_name: '书籍编号' },
+        { key: 'bookName', display_name: '借阅书名' },
+        { key: 'money', display_name: '借阅金额' },
+        { key: 'startTime', display_name: '借阅开始时间' },
+        { key: 'expireTime', display_name: '借阅到期时间' },
+        { key: 'returnTime', display_name: '借阅归还时间' },
+        { key: 'isOverdue', display_name: '是否逾期(true-已逾期、false-未逾期)' },
+        { key: 'day', display_name: '逾期天数' }
+      ]
+    }
+  },
+  methods: {
+    // 钩子:在获取表格数据之前执行,false 则代表不获取数据
+    [CRUD.HOOK.beforeRefresh]() {
+      return true
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 120 - 0
src/views/ykt/recharge_record/index.vue

@@ -0,0 +1,120 @@
+<template>
+  <div class="app-container">
+    <!--工具栏-->
+    <div class="head-container">
+      <div v-if="crud.props.searchToggle">
+        <!-- 搜索 -->
+        <label class="el-form-item-label">id</label>
+        <el-input v-model="query.id" clearable placeholder="id" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">用户</label>
+        <el-input v-model="query.userNumber" clearable placeholder="用户" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">卡号</label>
+        <el-input v-model="query.cardNumber" clearable placeholder="卡号" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">充值金额</label>
+        <el-input v-model="query.rechargeAmount" clearable placeholder="充值金额" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">充值后金额</label>
+        <el-input v-model="query.amountAfterRecharge" clearable placeholder="充值后金额" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">充值时间</label>
+        <el-input v-model="query.rechargeTime" clearable placeholder="充值时间" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <rrOperation :crud="crud" />
+      </div>
+      <!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'-->
+      <crudOperation :permission="permission" />
+      <!--表单组件-->
+      <el-dialog :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" width="500px">
+        <el-form ref="form" :model="form" :rules="rules" size="small" label-width="80px">
+          <el-form-item label="id">
+            <el-input v-model="form.id" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="用户">
+            <el-input v-model="form.userNumber" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="卡号">
+            <el-input v-model="form.cardNumber" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="充值金额">
+            <el-input v-model="form.rechargeAmount" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="充值后金额">
+            <el-input v-model="form.amountAfterRecharge" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="充值时间">
+            <el-date-picker v-model="form.rechargeTime" type="datetime" style="width: 370px;" />
+          </el-form-item>
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+          <el-button type="text" @click="crud.cancelCU">取消</el-button>
+          <el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
+        </div>
+      </el-dialog>
+      <!--表格渲染-->
+      <el-table ref="table" v-loading="crud.loading" :data="crud.data" size="small" style="width: 100%;" @selection-change="crud.selectionChangeHandler">
+        <el-table-column type="selection" width="55" />
+        <el-table-column prop="id" label="id" />
+        <el-table-column prop="userNumber" label="用户" />
+        <el-table-column prop="cardNumber" label="卡号" />
+        <el-table-column prop="rechargeAmount" label="充值金额" />
+        <el-table-column prop="amountAfterRecharge" label="充值后金额" />
+        <el-table-column prop="rechargeTime" label="充值时间" />
+        <el-table-column v-if="checkPer(['admin','dmRechargeRecord:edit','dmRechargeRecord:del'])" label="操作" width="150px" align="center">
+          <template slot-scope="scope">
+            <udOperation
+              :data="scope.row"
+              :permission="permission"
+            />
+          </template>
+        </el-table-column>
+      </el-table>
+      <!--分页组件-->
+      <pagination />
+    </div>
+  </div>
+</template>
+
+<script>
+import crudDmRechargeRecord from '@/api/dmRechargeRecord'
+import CRUD, { presenter, header, form, crud } from '@crud/crud'
+import rrOperation from '@crud/RR.operation'
+import crudOperation from '@crud/CRUD.operation'
+import udOperation from '@crud/UD.operation'
+import pagination from '@crud/Pagination'
+
+const defaultForm = { id: null, userNumber: null, cardNumber: null, rechargeAmount: null, amountAfterRecharge: null, rechargeTime: null }
+export default {
+  name: 'DmRechargeRecord',
+  components: { pagination, crudOperation, rrOperation, udOperation },
+  mixins: [presenter(), header(), form(defaultForm), crud()],
+  cruds() {
+    return CRUD({ title: 'recharge_record', url: 'api/dmRechargeRecord', idField: 'id', sort: 'id,desc', crudMethod: { ...crudDmRechargeRecord }})
+  },
+  data() {
+    return {
+      permission: {
+        add: ['admin', 'dmRechargeRecord:add'],
+        edit: ['admin', 'dmRechargeRecord:edit'],
+        del: ['admin', 'dmRechargeRecord:del']
+      },
+      rules: {
+      },
+      queryTypeOptions: [
+        { key: 'id', display_name: 'id' },
+        { key: 'userNumber', display_name: '用户' },
+        { key: 'cardNumber', display_name: '卡号' },
+        { key: 'rechargeAmount', display_name: '充值金额' },
+        { key: 'amountAfterRecharge', display_name: '充值后金额' },
+        { key: 'rechargeTime', display_name: '充值时间' }
+      ]
+    }
+  },
+  methods: {
+    // 钩子:在获取表格数据之前执行,false 则代表不获取数据
+    [CRUD.HOOK.beforeRefresh]() {
+      return true
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 127 - 0
src/views/ykt/report_loss/index.vue

@@ -0,0 +1,127 @@
+<template>
+  <div class="app-container">
+    <!--工具栏-->
+    <div class="head-container">
+      <div v-if="crud.props.searchToggle">
+        <!-- 搜索 -->
+        <label class="el-form-item-label">id</label>
+        <el-input v-model="query.id" clearable placeholder="id" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">用户</label>
+        <el-input v-model="query.userNumber" clearable placeholder="用户" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">卡号</label>
+        <el-input v-model="query.cardNumber" clearable placeholder="卡号" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">挂失时间</label>
+        <el-input v-model="query.reportLossTime" clearable placeholder="挂失时间" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">挂失操作账号</label>
+        <el-input v-model="query.reportLossUser" clearable placeholder="挂失操作账号" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">解挂时间</label>
+        <el-input v-model="query.solutionHangTime" clearable placeholder="解挂时间" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">解挂操作账号</label>
+        <el-input v-model="query.solutionHangUser" clearable placeholder="解挂操作账号" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <rrOperation :crud="crud" />
+      </div>
+      <!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'-->
+      <crudOperation :permission="permission" />
+      <!--表单组件-->
+      <el-dialog :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" width="500px">
+        <el-form ref="form" :model="form" :rules="rules" size="small" label-width="80px">
+          <el-form-item label="id">
+            <el-input v-model="form.id" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="用户">
+            <el-input v-model="form.userNumber" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="卡号">
+            <el-input v-model="form.cardNumber" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="挂失时间">
+            <el-date-picker v-model="form.reportLossTime" type="datetime" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="挂失操作账号">
+            <el-input v-model="form.reportLossUser" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="解挂时间">
+            <el-date-picker v-model="form.solutionHangTime" type="datetime" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="解挂操作账号">
+            <el-input v-model="form.solutionHangUser" style="width: 370px;" />
+          </el-form-item>
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+          <el-button type="text" @click="crud.cancelCU">取消</el-button>
+          <el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
+        </div>
+      </el-dialog>
+      <!--表格渲染-->
+      <el-table ref="table" v-loading="crud.loading" :data="crud.data" size="small" style="width: 100%;" @selection-change="crud.selectionChangeHandler">
+        <el-table-column type="selection" width="55" />
+        <el-table-column prop="id" label="id" />
+        <el-table-column prop="userNumber" label="用户" />
+        <el-table-column prop="cardNumber" label="卡号" />
+        <el-table-column prop="reportLossTime" label="挂失时间" />
+        <el-table-column prop="reportLossUser" label="挂失操作账号" />
+        <el-table-column prop="solutionHangTime" label="解挂时间" />
+        <el-table-column prop="solutionHangUser" label="解挂操作账号" />
+        <el-table-column v-if="checkPer(['admin','dmReportLoss:edit','dmReportLoss:del'])" label="操作" width="150px" align="center">
+          <template slot-scope="scope">
+            <udOperation
+              :data="scope.row"
+              :permission="permission"
+            />
+          </template>
+        </el-table-column>
+      </el-table>
+      <!--分页组件-->
+      <pagination />
+    </div>
+  </div>
+</template>
+
+<script>
+import crudDmReportLoss from '@/api/dmReportLoss'
+import CRUD, { presenter, header, form, crud } from '@crud/crud'
+import rrOperation from '@crud/RR.operation'
+import crudOperation from '@crud/CRUD.operation'
+import udOperation from '@crud/UD.operation'
+import pagination from '@crud/Pagination'
+
+const defaultForm = { id: null, userNumber: null, cardNumber: null, reportLossTime: null, reportLossUser: null, solutionHangTime: null, solutionHangUser: null }
+export default {
+  name: 'DmReportLoss',
+  components: { pagination, crudOperation, rrOperation, udOperation },
+  mixins: [presenter(), header(), form(defaultForm), crud()],
+  cruds() {
+    return CRUD({ title: 'report_loss', url: 'api/dmReportLoss', idField: 'id', sort: 'id,desc', crudMethod: { ...crudDmReportLoss }})
+  },
+  data() {
+    return {
+      permission: {
+        add: ['admin', 'dmReportLoss:add'],
+        edit: ['admin', 'dmReportLoss:edit'],
+        del: ['admin', 'dmReportLoss:del']
+      },
+      rules: {
+      },
+      queryTypeOptions: [
+        { key: 'id', display_name: 'id' },
+        { key: 'userNumber', display_name: '用户' },
+        { key: 'cardNumber', display_name: '卡号' },
+        { key: 'reportLossTime', display_name: '挂失时间' },
+        { key: 'reportLossUser', display_name: '挂失操作账号' },
+        { key: 'solutionHangTime', display_name: '解挂时间' },
+        { key: 'solutionHangUser', display_name: '解挂操作账号' }
+      ]
+    }
+  },
+  methods: {
+    // 钩子:在获取表格数据之前执行,false 则代表不获取数据
+    [CRUD.HOOK.beforeRefresh]() {
+      return true
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 163 - 0
src/views/ykt/room_device/index.vue

@@ -0,0 +1,163 @@
+<template>
+  <div class="app-container">
+    <!--工具栏-->
+    <div class="head-container">
+      <div v-if="crud.props.searchToggle">
+        <!-- 搜索 -->
+        <label class="el-form-item-label">id</label>
+        <el-input v-model="query.id" clearable placeholder="id" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">设备编号</label>
+        <el-input v-model="query.code" clearable placeholder="设备编号" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">设备名称</label>
+        <el-input v-model="query.name" clearable placeholder="设备名称" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">设备安装位置</label>
+        <el-input v-model="query.buildAddress" clearable placeholder="设备安装位置" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">设备状态(00-启用、01-禁用、02-待维修)</label>
+        <el-input v-model="query.status" clearable placeholder="设备状态(00-启用、01-禁用、02-待维修)" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">备注</label>
+        <el-input v-model="query.remark" clearable placeholder="备注" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">创建者</label>
+        <el-input v-model="query.createBy" clearable placeholder="创建者" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">更新者</label>
+        <el-input v-model="query.updateBy" clearable placeholder="更新者" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">创建时间</label>
+        <el-input v-model="query.createTime" clearable placeholder="创建时间" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">更新时间</label>
+        <el-input v-model="query.updateTime" clearable placeholder="更新时间" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <rrOperation :crud="crud" />
+      </div>
+      <!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'-->
+      <crudOperation :permission="permission" />
+      <!--表单组件-->
+      <el-dialog :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" width="500px">
+        <el-form ref="form" :model="form" :rules="rules" size="small" label-width="80px">
+          <el-form-item label="id" prop="id">
+            <el-input v-model="form.id" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="设备编号">
+            <el-input v-model="form.code" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="设备名称">
+            <el-input v-model="form.name" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="设备安装位置">
+            <el-input v-model="form.buildAddress" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="设备状态(00-启用、01-禁用、02-待维修)">
+            <el-select v-model="form.status" filterable placeholder="请选择">
+              <el-option
+                v-for="item in dict.information_status"
+                :key="item.id"
+                :label="item.label"
+                :value="item.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="备注">
+            <el-input v-model="form.remark" :rows="3" type="textarea" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="创建者">
+            <el-input v-model="form.createBy" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="更新者">
+            <el-input v-model="form.updateBy" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="创建时间">
+            <el-date-picker v-model="form.createTime" type="datetime" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="更新时间">
+            <el-date-picker v-model="form.updateTime" type="datetime" style="width: 370px;" />
+          </el-form-item>
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+          <el-button type="text" @click="crud.cancelCU">取消</el-button>
+          <el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
+        </div>
+      </el-dialog>
+      <!--表格渲染-->
+      <el-table ref="table" v-loading="crud.loading" :data="crud.data" size="small" style="width: 100%;" @selection-change="crud.selectionChangeHandler">
+        <el-table-column type="selection" width="55" />
+        <el-table-column prop="id" label="id" />
+        <el-table-column prop="code" label="设备编号" />
+        <el-table-column prop="name" label="设备名称" />
+        <el-table-column prop="buildAddress" label="设备安装位置" />
+        <el-table-column prop="status" label="设备状态(00-启用、01-禁用、02-待维修)">
+          <template slot-scope="scope">
+            {{ dict.label.information_status[scope.row.status] }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="remark" label="备注" />
+        <el-table-column prop="createBy" label="创建者" />
+        <el-table-column prop="updateBy" label="更新者" />
+        <el-table-column prop="createTime" label="创建时间" />
+        <el-table-column prop="updateTime" label="更新时间" />
+        <el-table-column v-if="checkPer(['admin','dmRoomDevice:edit','dmRoomDevice:del'])" label="操作" width="150px" align="center">
+          <template slot-scope="scope">
+            <udOperation
+              :data="scope.row"
+              :permission="permission"
+            />
+          </template>
+        </el-table-column>
+      </el-table>
+      <!--分页组件-->
+      <pagination />
+    </div>
+  </div>
+</template>
+
+<script>
+import crudDmRoomDevice from '@/api/dmRoomDevice'
+import CRUD, { presenter, header, form, crud } from '@crud/crud'
+import rrOperation from '@crud/RR.operation'
+import crudOperation from '@crud/CRUD.operation'
+import udOperation from '@crud/UD.operation'
+import pagination from '@crud/Pagination'
+
+const defaultForm = { id: null, code: null, name: null, buildAddress: null, status: null, remark: null, createBy: null, updateBy: null, createTime: null, updateTime: null }
+export default {
+  name: 'DmRoomDevice',
+  components: { pagination, crudOperation, rrOperation, udOperation },
+  mixins: [presenter(), header(), form(defaultForm), crud()],
+  dicts: ['information_status'],
+  cruds() {
+    return CRUD({ title: 'room_device', url: 'api/dmRoomDevice', idField: 'id', sort: 'id,desc', crudMethod: { ...crudDmRoomDevice }})
+  },
+  data() {
+    return {
+      permission: {
+        add: ['admin', 'dmRoomDevice:add'],
+        edit: ['admin', 'dmRoomDevice:edit'],
+        del: ['admin', 'dmRoomDevice:del']
+      },
+      rules: {
+        id: [
+          { required: true, message: '不能为空', trigger: 'blur' }
+        ]
+      },
+      queryTypeOptions: [
+        { key: 'id', display_name: 'id' },
+        { key: 'code', display_name: '设备编号' },
+        { key: 'name', display_name: '设备名称' },
+        { key: 'buildAddress', display_name: '设备安装位置' },
+        { key: 'status', display_name: '设备状态(00-启用、01-禁用、02-待维修)' },
+        { key: 'remark', display_name: '备注' },
+        { key: 'createBy', display_name: '创建者' },
+        { key: 'updateBy', display_name: '更新者' },
+        { key: 'createTime', display_name: '创建时间' },
+        { key: 'updateTime', display_name: '更新时间' }
+      ]
+    }
+  },
+  methods: {
+    // 钩子:在获取表格数据之前执行,false 则代表不获取数据
+    [CRUD.HOOK.beforeRefresh]() {
+      return true
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 242 - 0
src/views/ykt/rule/index.vue

@@ -0,0 +1,242 @@
+<template>
+  <div class="app-container">
+    <!--工具栏-->
+    <div class="head-container">
+      <div v-if="crud.props.searchToggle">
+        <!-- 搜索 -->
+        <label class="el-form-item-label">id</label>
+        <el-input v-model="query.id" clearable placeholder="id" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">用户</label>
+        <el-input v-model="query.userNumber" clearable placeholder="用户" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">是否逾期提醒(true-启用,false-不启用)</label>
+        <el-input v-model="query.isLateRemind" clearable placeholder="是否逾期提醒(true-启用,false-不启用)" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">提醒类型(00-逾期前提醒、01-已逾期提醒)</label>
+        <el-input v-model="query.remindType" clearable placeholder="提醒类型(00-逾期前提醒、01-已逾期提醒)" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">天数</label>
+        <el-input v-model="query.day" clearable placeholder="天数" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">是否逾期扣费(true-启用,false-不启用)</label>
+        <el-input v-model="query.isFeeDeduction" clearable placeholder="是否逾期扣费(true-启用,false-不启用)" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">扣费多少一天</label>
+        <el-input v-model="query.feeDeductionMoney" clearable placeholder="扣费多少一天" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">扣费上限</label>
+        <el-input v-model="query.feeDeductionRestrict" clearable placeholder="扣费上限" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">创建者</label>
+        <el-input v-model="query.createBy" clearable placeholder="创建者" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">更新者</label>
+        <el-input v-model="query.updateBy" clearable placeholder="更新者" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">创建时间</label>
+        <el-input v-model="query.createTime" clearable placeholder="创建时间" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">更新时间</label>
+        <el-input v-model="query.updateTime" clearable placeholder="更新时间" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">是否开启折扣</label>
+        <el-input v-model="query.isOpenDiscount" clearable placeholder="是否开启折扣" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">00-规则立即生效、 01-规则从当前时间第二天的凌晨零点开始生效</label>
+        <el-input v-model="query.rule" clearable placeholder="00-规则立即生效、01-规则从当前时间第二天的凌晨零点开始生效" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">正式员工折扣百分比</label>
+        <el-input v-model="query.regularEmployee" clearable placeholder="正式员工折扣百分比" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">外协单位折扣百分比</label>
+        <el-input v-model="query.outsourcingUnit" clearable placeholder="外协单位折扣百分比" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">租户折扣百分比</label>
+        <el-input v-model="query.lessee" clearable placeholder="租户折扣百分比" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <rrOperation :crud="crud" />
+      </div>
+      <!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'-->
+      <crudOperation :permission="permission" />
+      <!--表单组件-->
+      <el-dialog :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" width="500px">
+        <el-form ref="form" :model="form" :rules="rules" size="small" label-width="80px">
+          <el-form-item label="id">
+            <el-input v-model="form.id" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="用户">
+            <el-input v-model="form.userNumber" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="是否逾期提醒(true-启用,false-不启用)">
+            <el-select v-model="form.isLateRemind" filterable placeholder="请选择">
+              <el-option
+                v-for="item in dict.information_status"
+                :key="item.id"
+                :label="item.label"
+                :value="item.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="提醒类型(00-逾期前提醒、01-已逾期提醒)">
+            <el-select v-model="form.remindType" filterable placeholder="请选择">
+              <el-option
+                v-for="item in dict.information_status"
+                :key="item.id"
+                :label="item.label"
+                :value="item.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="天数">
+            <el-input v-model="form.day" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="是否逾期扣费(true-启用,false-不启用)">
+            <el-select v-model="form.isFeeDeduction" filterable placeholder="请选择">
+              <el-option
+                v-for="item in dict.information_status"
+                :key="item.id"
+                :label="item.label"
+                :value="item.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="扣费多少一天">
+            <el-input v-model="form.feeDeductionMoney" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="扣费上限">
+            <el-input v-model="form.feeDeductionRestrict" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="创建者">
+            <el-input v-model="form.createBy" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="更新者">
+            <el-input v-model="form.updateBy" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="创建时间">
+            <el-date-picker v-model="form.createTime" type="datetime" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="更新时间">
+            <el-date-picker v-model="form.updateTime" type="datetime" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="是否开启折扣">
+            未设置字典,请手动设置 Radio
+          </el-form-item>
+          <el-form-item label="00-规则立即生效、01-规则从当前时间第二天的凌晨零点开始生效">
+            <el-select v-model="form.rule" filterable placeholder="请选择">
+              <el-option
+                v-for="item in dict.information_status"
+                :key="item.id"
+                :label="item.label"
+                :value="item.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="正式员工折扣百分比">
+            <el-input v-model="form.regularEmployee" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="外协单位折扣百分比">
+            <el-input v-model="form.outsourcingUnit" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="租户折扣百分比">
+            <el-input v-model="form.lessee" style="width: 370px;" />
+          </el-form-item>
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+          <el-button type="text" @click="crud.cancelCU">取消</el-button>
+          <el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
+        </div>
+      </el-dialog>
+      <!--表格渲染-->
+      <el-table ref="table" v-loading="crud.loading" :data="crud.data" size="small" style="width: 100%;" @selection-change="crud.selectionChangeHandler">
+        <el-table-column type="selection" width="55" />
+        <el-table-column prop="id" label="id" />
+        <el-table-column prop="userNumber" label="用户" />
+        <el-table-column prop="isLateRemind" label="是否逾期提醒(true-启用,false-不启用)">
+          <template slot-scope="scope">
+            {{ dict.label.information_status[scope.row.isLateRemind] }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="remindType" label="提醒类型(00-逾期前提醒、01-已逾期提醒)">
+          <template slot-scope="scope">
+            {{ dict.label.information_status[scope.row.remindType] }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="day" label="天数" />
+        <el-table-column prop="isFeeDeduction" label="是否逾期扣费(true-启用,false-不启用)">
+          <template slot-scope="scope">
+            {{ dict.label.information_status[scope.row.isFeeDeduction] }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="feeDeductionMoney" label="扣费多少一天" />
+        <el-table-column prop="feeDeductionRestrict" label="扣费上限" />
+        <el-table-column prop="createBy" label="创建者" />
+        <el-table-column prop="updateBy" label="更新者" />
+        <el-table-column prop="createTime" label="创建时间" />
+        <el-table-column prop="updateTime" label="更新时间" />
+        <el-table-column prop="isOpenDiscount" label="是否开启折扣" />
+        <el-table-column prop="rule" label="00-规则立即生效、01-规则从当前时间第二天的凌晨零点开始生效">
+          <template slot-scope="scope">
+            {{ dict.label.information_status[scope.row.rule] }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="regularEmployee" label="正式员工折扣百分比" />
+        <el-table-column prop="outsourcingUnit" label="外协单位折扣百分比" />
+        <el-table-column prop="lessee" label="租户折扣百分比" />
+        <el-table-column v-if="checkPer(['admin','dmRule:edit','dmRule:del'])" label="操作" width="150px" align="center">
+          <template slot-scope="scope">
+            <udOperation
+              :data="scope.row"
+              :permission="permission"
+            />
+          </template>
+        </el-table-column>
+      </el-table>
+      <!--分页组件-->
+      <pagination />
+    </div>
+  </div>
+</template>
+
+<script>
+import crudDmRule from '@/api/dmRule'
+import CRUD, { presenter, header, form, crud } from '@crud/crud'
+import rrOperation from '@crud/RR.operation'
+import crudOperation from '@crud/CRUD.operation'
+import udOperation from '@crud/UD.operation'
+import pagination from '@crud/Pagination'
+
+const defaultForm = { id: null, userNumber: null, isLateRemind: null, remindType: null, day: null, isFeeDeduction: null, feeDeductionMoney: null, feeDeductionRestrict: null, createBy: null, updateBy: null, createTime: null, updateTime: null, isOpenDiscount: null, rule: null, regularEmployee: null, outsourcingUnit: null, lessee: null }
+export default {
+  name: 'DmRule',
+  components: { pagination, crudOperation, rrOperation, udOperation },
+  mixins: [presenter(), header(), form(defaultForm), crud()],
+  dicts: ['information_status', 'information_status', 'information_status', 'information_status'],
+  cruds() {
+    return CRUD({ title: 'rule', url: 'api/dmRule', idField: 'id', sort: 'id,desc', crudMethod: { ...crudDmRule }})
+  },
+  data() {
+    return {
+      permission: {
+        add: ['admin', 'dmRule:add'],
+        edit: ['admin', 'dmRule:edit'],
+        del: ['admin', 'dmRule:del']
+      },
+      rules: {
+      },
+      queryTypeOptions: [
+        { key: 'id', display_name: 'id' },
+        { key: 'userNumber', display_name: '用户' },
+        { key: 'isLateRemind', display_name: '是否逾期提醒(true-启用,false-不启用)' },
+        { key: 'remindType', display_name: '提醒类型(00-逾期前提醒、01-已逾期提醒)' },
+        { key: 'day', display_name: '天数' },
+        { key: 'isFeeDeduction', display_name: '是否逾期扣费(true-启用,false-不启用)' },
+        { key: 'feeDeductionMoney', display_name: '扣费多少一天' },
+        { key: 'feeDeductionRestrict', display_name: '扣费上限' },
+        { key: 'createBy', display_name: '创建者' },
+        { key: 'updateBy', display_name: '更新者' },
+        { key: 'createTime', display_name: '创建时间' },
+        { key: 'updateTime', display_name: '更新时间' },
+        { key: 'isOpenDiscount', display_name: '是否开启折扣' },
+        { key: 'rule', display_name: '00-规则立即生效、01-规则从当前时间第二天的凌晨零点开始生效' },
+        { key: 'regularEmployee', display_name: '正式员工折扣百分比' },
+        { key: 'outsourcingUnit', display_name: '外协单位折扣百分比' },
+        { key: 'lessee', display_name: '租户折扣百分比' }
+      ]
+    }
+  },
+  methods: {
+    // 钩子:在获取表格数据之前执行,false 则代表不获取数据
+    [CRUD.HOOK.beforeRefresh]() {
+      return true
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 234 - 0
src/views/ykt/user/index.vue

@@ -0,0 +1,234 @@
+<template>
+  <div class="app-container">
+    <!--工具栏-->
+    <div class="head-container">
+      <div v-if="crud.props.searchToggle">
+        <!-- 搜索 -->
+        <label class="el-form-item-label">姓名</label>
+        <el-input v-model="query.name" clearable placeholder="姓名" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">性别</label>
+        <el-input v-model="query.sex" clearable placeholder="性别" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">联系方式</label>
+        <el-input v-model="query.contacts" clearable placeholder="联系方式" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">邮箱</label>
+        <el-input v-model="query.email" clearable placeholder="邮箱" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">部门</label>
+        <el-input v-model="query.deptId" clearable placeholder="部门" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">创建者</label>
+        <el-input v-model="query.createBy" clearable placeholder="创建者" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">更新者</label>
+        <el-input v-model="query.updateBy" clearable placeholder="更新者" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">创建日期</label>
+        <el-input v-model="query.createTime" clearable placeholder="创建日期" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">更新时间</label>
+        <el-input v-model="query.updateTime" clearable placeholder="更新时间" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">是否是审批人</label>
+        <el-input v-model="query.isApprover" clearable placeholder="是否是审批人" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">人脸信息</label>
+        <el-input v-model="query.faceId" clearable placeholder="人脸信息" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">card编号</label>
+        <el-input v-model="query.cardId" clearable placeholder="card编号" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">usercode</label>
+        <el-input v-model="query.usercode" clearable placeholder="usercode" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">员工工号</label>
+        <el-input v-model="query.userNumber" clearable placeholder="员工工号" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">人员状态(true-启用、false-禁用)</label>
+        <el-input v-model="query.status" clearable placeholder="人员状态(true-启用、false-禁用)" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">人员种类(00-正式人员、01-外协单位、02-租户)</label>
+        <el-input v-model="query.type" clearable placeholder="人员种类(00-正式人员、01-外协单位、02-租户)" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">人脸照片(http格式)</label>
+        <el-input v-model="query.picture" clearable placeholder="人脸照片(http格式)" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">备注</label>
+        <el-input v-model="query.remark" clearable placeholder="备注" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">是否是访客审批人员</label>
+        <el-input v-model="query.isVisitorApproval" clearable placeholder="是否是访客审批人员" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <rrOperation :crud="crud" />
+      </div>
+      <!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'-->
+      <crudOperation :permission="permission" />
+      <!--表单组件-->
+      <el-dialog :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" width="500px">
+        <el-form ref="form" :model="form" :rules="rules" size="small" label-width="80px">
+          <el-form-item label="姓名" prop="name">
+            <el-input v-model="form.name" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="性别">
+            未设置字典,请手动设置 Radio
+          </el-form-item>
+          <el-form-item label="联系方式">
+            <el-input v-model="form.contacts" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="邮箱" prop="email">
+            <el-input v-model="form.email" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="部门" prop="deptId">
+            未设置字典,请手动设置 Select
+          </el-form-item>
+          <el-form-item label="是否是审批人">
+            未设置字典,请手动设置 Radio
+          </el-form-item>
+          <el-form-item label="人脸信息">
+            <el-input v-model="form.faceId" :rows="3" type="textarea" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="card编号">
+            <el-input v-model="form.cardId" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="usercode">
+            <el-input v-model="form.usercode" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="员工工号">
+            <el-input v-model="form.userNumber" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="人员状态(true-启用、false-禁用)">
+            <el-select v-model="form.status" filterable placeholder="请选择">
+              <el-option
+                v-for="item in dict.user_status"
+                :key="item.id"
+                :label="item.label"
+                :value="item.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="人员种类(00-正式人员、01-外协单位、02-租户)">
+            <el-select v-model="form.type" filterable placeholder="请选择">
+              <el-option
+                v-for="item in dict.information_status"
+                :key="item.id"
+                :label="item.label"
+                :value="item.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="人脸照片(http格式)">
+            <el-input v-model="form.picture" :rows="3" type="textarea" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="备注">
+            <el-input v-model="form.remark" :rows="3" type="textarea" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="是否是访客审批人员">
+            未设置字典,请手动设置 Radio
+          </el-form-item>
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+          <el-button type="text" @click="crud.cancelCU">取消</el-button>
+          <el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
+        </div>
+      </el-dialog>
+      <!--表格渲染-->
+      <el-table ref="table" v-loading="crud.loading" :data="crud.data" size="small" style="width: 100%;" @selection-change="crud.selectionChangeHandler">
+        <el-table-column type="selection" width="55" />
+        <el-table-column prop="name" label="姓名" />
+        <el-table-column prop="sex" label="性别" />
+        <el-table-column prop="contacts" label="联系方式" />
+        <el-table-column prop="email" label="邮箱" />
+        <el-table-column prop="deptId" label="部门" />
+        <el-table-column prop="createBy" label="创建者" />
+        <el-table-column prop="updateBy" label="更新者" />
+        <el-table-column prop="createTime" label="创建日期" />
+        <el-table-column prop="updateTime" label="更新时间" />
+        <el-table-column prop="isApprover" label="是否是审批人" />
+        <el-table-column prop="faceId" label="人脸信息" />
+        <el-table-column prop="cardId" label="card编号" />
+        <el-table-column prop="usercode" label="usercode" />
+        <el-table-column prop="userNumber" label="员工工号" />
+        <el-table-column prop="status" label="人员状态(true-启用、false-禁用)">
+          <template slot-scope="scope">
+            {{ dict.label.user_status[scope.row.status] }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="type" label="人员种类(00-正式人员、01-外协单位、02-租户)">
+          <template slot-scope="scope">
+            {{ dict.label.information_status[scope.row.type] }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="picture" label="人脸照片(http格式)" />
+        <el-table-column prop="remark" label="备注" />
+        <el-table-column prop="isVisitorApproval" label="是否是访客审批人员" />
+        <el-table-column v-if="checkPer(['admin','dmUser:edit','dmUser:del'])" label="操作" width="150px" align="center">
+          <template slot-scope="scope">
+            <udOperation
+              :data="scope.row"
+              :permission="permission"
+            />
+          </template>
+        </el-table-column>
+      </el-table>
+      <!--分页组件-->
+      <pagination />
+    </div>
+  </div>
+</template>
+
+<script>
+import crudDmUser from '@/api/dmUser'
+import CRUD, { presenter, header, form, crud } from '@crud/crud'
+import rrOperation from '@crud/RR.operation'
+import crudOperation from '@crud/CRUD.operation'
+import udOperation from '@crud/UD.operation'
+import pagination from '@crud/Pagination'
+
+const defaultForm = { id: null, name: null, sex: null, contacts: null, email: null, deptId: null, createBy: null, updateBy: null, createTime: null, updateTime: null, isApprover: null, faceId: null, cardId: null, usercode: null, userNumber: null, status: null, type: null, picture: null, remark: null, isVisitorApproval: null }
+export default {
+  name: 'DmUser',
+  components: { pagination, crudOperation, rrOperation, udOperation },
+  mixins: [presenter(), header(), form(defaultForm), crud()],
+  dicts: ['user_status', 'information_status'],
+  cruds() {
+    return CRUD({ title: 'user', url: 'api/dmUser', idField: 'id', sort: 'id,desc', crudMethod: { ...crudDmUser }})
+  },
+  data() {
+    return {
+      permission: {
+        add: ['admin', 'dmUser:add'],
+        edit: ['admin', 'dmUser:edit'],
+        del: ['admin', 'dmUser:del']
+      },
+      rules: {
+        id: [
+          { required: true, message: '主键不能为空', trigger: 'blur' }
+        ],
+        name: [
+          { required: true, message: '姓名不能为空', trigger: 'blur' }
+        ],
+        email: [
+          { required: true, message: '邮箱不能为空', trigger: 'blur' }
+        ],
+        deptId: [
+          { required: true, message: '部门不能为空', trigger: 'blur' }
+        ]
+      },
+      queryTypeOptions: [
+        { key: 'name', display_name: '姓名' },
+        { key: 'sex', display_name: '性别' },
+        { key: 'contacts', display_name: '联系方式' },
+        { key: 'email', display_name: '邮箱' },
+        { key: 'deptId', display_name: '部门' },
+        { key: 'createBy', display_name: '创建者' },
+        { key: 'updateBy', display_name: '更新者' },
+        { key: 'createTime', display_name: '创建日期' },
+        { key: 'updateTime', display_name: '更新时间' },
+        { key: 'isApprover', display_name: '是否是审批人' },
+        { key: 'faceId', display_name: '人脸信息' },
+        { key: 'cardId', display_name: 'card编号' },
+        { key: 'usercode', display_name: 'usercode' },
+        { key: 'userNumber', display_name: '员工工号' },
+        { key: 'status', display_name: '人员状态(true-启用、false-禁用)' },
+        { key: 'type', display_name: '人员种类(00-正式人员、01-外协单位、02-租户)' },
+        { key: 'picture', display_name: '人脸照片(http格式)' },
+        { key: 'remark', display_name: '备注' },
+        { key: 'isVisitorApproval', display_name: '是否是访客审批人员' }
+      ]
+    }
+  },
+  methods: {
+    // 钩子:在获取表格数据之前执行,false 则代表不获取数据
+    [CRUD.HOOK.beforeRefresh]() {
+      return true
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 92 - 0
src/views/ykt/users_jobs/index.vue

@@ -0,0 +1,92 @@
+<template>
+  <div class="app-container">
+    <!--工具栏-->
+    <div class="head-container">
+      <div v-if="crud.props.searchToggle">
+        <!-- 搜索 -->
+        <label class="el-form-item-label">用户id</label>
+        <el-input v-model="query.userId" clearable placeholder="用户id" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">岗位id</label>
+        <el-input v-model="query.jobId" clearable placeholder="岗位id" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <rrOperation :crud="crud" />
+      </div>
+      <!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'-->
+      <crudOperation :permission="permission" />
+      <!--表单组件-->
+      <el-dialog :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" width="500px">
+        <el-form ref="form" :model="form" :rules="rules" size="small" label-width="80px">
+          <el-form-item label="用户id">
+            <el-input v-model="form.userId" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="岗位id">
+            <el-input v-model="form.jobId" style="width: 370px;" />
+          </el-form-item>
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+          <el-button type="text" @click="crud.cancelCU">取消</el-button>
+          <el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
+        </div>
+      </el-dialog>
+      <!--表格渲染-->
+      <el-table ref="table" v-loading="crud.loading" :data="crud.data" size="small" style="width: 100%;" @selection-change="crud.selectionChangeHandler">
+        <el-table-column type="selection" width="55" />
+        <el-table-column prop="userId" label="用户id" />
+        <el-table-column prop="jobId" label="岗位id" />
+        <el-table-column v-if="checkPer(['admin','dmUsersJobs:edit','dmUsersJobs:del'])" label="操作" width="150px" align="center">
+          <template slot-scope="scope">
+            <udOperation
+              :data="scope.row"
+              :permission="permission"
+            />
+          </template>
+        </el-table-column>
+      </el-table>
+      <!--分页组件-->
+      <pagination />
+    </div>
+  </div>
+</template>
+
+<script>
+import crudDmUsersJobs from '@/api/dmUsersJobs'
+import CRUD, { presenter, header, form, crud } from '@crud/crud'
+import rrOperation from '@crud/RR.operation'
+import crudOperation from '@crud/CRUD.operation'
+import udOperation from '@crud/UD.operation'
+import pagination from '@crud/Pagination'
+
+const defaultForm = { userId: null, jobId: null, ujId: null }
+export default {
+  name: 'DmUsersJobs',
+  components: { pagination, crudOperation, rrOperation, udOperation },
+  mixins: [presenter(), header(), form(defaultForm), crud()],
+  cruds() {
+    return CRUD({ title: 'users_jobs', url: 'api/dmUsersJobs', idField: 'ujId', sort: 'ujId,desc', crudMethod: { ...crudDmUsersJobs }})
+  },
+  data() {
+    return {
+      permission: {
+        add: ['admin', 'dmUsersJobs:add'],
+        edit: ['admin', 'dmUsersJobs:edit'],
+        del: ['admin', 'dmUsersJobs:del']
+      },
+      rules: {
+      },
+      queryTypeOptions: [
+        { key: 'userId', display_name: '用户id' },
+        { key: 'jobId', display_name: '岗位id' }
+      ]
+    }
+  },
+  methods: {
+    // 钩子:在获取表格数据之前执行,false 则代表不获取数据
+    [CRUD.HOOK.beforeRefresh]() {
+      return true
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 158 - 0
src/views/ykt/visitors_apply/index.vue

@@ -0,0 +1,158 @@
+<template>
+  <div class="app-container">
+    <!--工具栏-->
+    <div class="head-container">
+      <div v-if="crud.props.searchToggle">
+        <!-- 搜索 -->
+        <label class="el-form-item-label">id</label>
+        <el-input v-model="query.id" clearable placeholder="id" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">被访人员工号</label>
+        <el-input v-model="query.userNumber" clearable placeholder="被访人员工号" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">到访部门</label>
+        <el-input v-model="query.deptId" clearable placeholder="到访部门" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">到访开始时间</label>
+        <el-input v-model="query.startTime" clearable placeholder="到访开始时间" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">到访结束时间</label>
+        <el-input v-model="query.endTime" clearable placeholder="到访结束时间" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">访客二维码</label>
+        <el-input v-model="query.qrCode" clearable placeholder="访客二维码" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">到访事由</label>
+        <el-input v-model="query.forVisiting" clearable placeholder="到访事由" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">创建者</label>
+        <el-input v-model="query.createBy" clearable placeholder="创建者" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">更新者</label>
+        <el-input v-model="query.updateBy" clearable placeholder="更新者" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">创建时间</label>
+        <el-input v-model="query.createTime" clearable placeholder="创建时间" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">更新时间</label>
+        <el-input v-model="query.updateTime" clearable placeholder="更新时间" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <rrOperation :crud="crud" />
+      </div>
+      <!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'-->
+      <crudOperation :permission="permission" />
+      <!--表单组件-->
+      <el-dialog :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" width="500px">
+        <el-form ref="form" :model="form" :rules="rules" size="small" label-width="80px">
+          <el-form-item label="id" prop="id">
+            <el-input v-model="form.id" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="被访人员工号">
+            <el-input v-model="form.userNumber" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="到访部门">
+            <el-input v-model="form.deptId" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="到访开始时间">
+            <el-date-picker v-model="form.startTime" type="datetime" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="到访结束时间">
+            <el-date-picker v-model="form.endTime" type="datetime" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="访客二维码">
+            <el-input v-model="form.qrCode" :rows="3" type="textarea" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="到访事由">
+            <el-input v-model="form.forVisiting" :rows="3" type="textarea" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="创建者">
+            <el-input v-model="form.createBy" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="更新者">
+            <el-input v-model="form.updateBy" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="创建时间">
+            <el-date-picker v-model="form.createTime" type="datetime" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="更新时间">
+            <el-date-picker v-model="form.updateTime" type="datetime" style="width: 370px;" />
+          </el-form-item>
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+          <el-button type="text" @click="crud.cancelCU">取消</el-button>
+          <el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
+        </div>
+      </el-dialog>
+      <!--表格渲染-->
+      <el-table ref="table" v-loading="crud.loading" :data="crud.data" size="small" style="width: 100%;" @selection-change="crud.selectionChangeHandler">
+        <el-table-column type="selection" width="55" />
+        <el-table-column prop="id" label="id" />
+        <el-table-column prop="userNumber" label="被访人员工号" />
+        <el-table-column prop="deptId" label="到访部门" />
+        <el-table-column prop="startTime" label="到访开始时间" />
+        <el-table-column prop="endTime" label="到访结束时间" />
+        <el-table-column prop="qrCode" label="访客二维码" />
+        <el-table-column prop="forVisiting" label="到访事由" />
+        <el-table-column prop="createBy" label="创建者" />
+        <el-table-column prop="updateBy" label="更新者" />
+        <el-table-column prop="createTime" label="创建时间" />
+        <el-table-column prop="updateTime" label="更新时间" />
+        <el-table-column v-if="checkPer(['admin','dmVisitorsApply:edit','dmVisitorsApply:del'])" label="操作" width="150px" align="center">
+          <template slot-scope="scope">
+            <udOperation
+              :data="scope.row"
+              :permission="permission"
+            />
+          </template>
+        </el-table-column>
+      </el-table>
+      <!--分页组件-->
+      <pagination />
+    </div>
+  </div>
+</template>
+
+<script>
+import crudDmVisitorsApply from '@/api/dmVisitorsApply'
+import CRUD, { presenter, header, form, crud } from '@crud/crud'
+import rrOperation from '@crud/RR.operation'
+import crudOperation from '@crud/CRUD.operation'
+import udOperation from '@crud/UD.operation'
+import pagination from '@crud/Pagination'
+
+const defaultForm = { id: null, userNumber: null, deptId: null, startTime: null, endTime: null, qrCode: null, forVisiting: null, createBy: null, updateBy: null, createTime: null, updateTime: null }
+export default {
+  name: 'DmVisitorsApply',
+  components: { pagination, crudOperation, rrOperation, udOperation },
+  mixins: [presenter(), header(), form(defaultForm), crud()],
+  cruds() {
+    return CRUD({ title: 'visitors_apply', url: 'api/dmVisitorsApply', idField: 'id', sort: 'id,desc', crudMethod: { ...crudDmVisitorsApply }})
+  },
+  data() {
+    return {
+      permission: {
+        add: ['admin', 'dmVisitorsApply:add'],
+        edit: ['admin', 'dmVisitorsApply:edit'],
+        del: ['admin', 'dmVisitorsApply:del']
+      },
+      rules: {
+        id: [
+          { required: true, message: '不能为空', trigger: 'blur' }
+        ]
+      },
+      queryTypeOptions: [
+        { key: 'id', display_name: 'id' },
+        { key: 'userNumber', display_name: '被访人员工号' },
+        { key: 'deptId', display_name: '到访部门' },
+        { key: 'startTime', display_name: '到访开始时间' },
+        { key: 'endTime', display_name: '到访结束时间' },
+        { key: 'qrCode', display_name: '访客二维码' },
+        { key: 'forVisiting', display_name: '到访事由' },
+        { key: 'createBy', display_name: '创建者' },
+        { key: 'updateBy', display_name: '更新者' },
+        { key: 'createTime', display_name: '创建时间' },
+        { key: 'updateTime', display_name: '更新时间' }
+      ]
+    }
+  },
+  methods: {
+    // 钩子:在获取表格数据之前执行,false 则代表不获取数据
+    [CRUD.HOOK.beforeRefresh]() {
+      return true
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 123 - 0
src/views/ykt/visitors_user/index.vue

@@ -0,0 +1,123 @@
+<template>
+  <div class="app-container">
+    <!--工具栏-->
+    <div class="head-container">
+      <div v-if="crud.props.searchToggle">
+        <!-- 搜索 -->
+        <label class="el-form-item-label">visitorId</label>
+        <el-input v-model="query.visitorId" clearable placeholder="visitorId" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">访客姓名</label>
+        <el-input v-model="query.visitorName" clearable placeholder="访客姓名" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">访客电话</label>
+        <el-input v-model="query.visitorPhone" clearable placeholder="访客电话" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">部门</label>
+        <el-input v-model="query.deptId" clearable placeholder="部门" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">车牌</label>
+        <el-input v-model="query.plateNumber" clearable placeholder="车牌" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <label class="el-form-item-label">访客申请id</label>
+        <el-input v-model="query.applyId" clearable placeholder="访客申请id" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
+        <rrOperation :crud="crud" />
+      </div>
+      <!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'-->
+      <crudOperation :permission="permission" />
+      <!--表单组件-->
+      <el-dialog :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" width="500px">
+        <el-form ref="form" :model="form" :rules="rules" size="small" label-width="80px">
+          <el-form-item label="visitorId" prop="visitorId">
+            <el-input v-model="form.visitorId" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="访客姓名">
+            <el-input v-model="form.visitorName" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="访客电话">
+            <el-input v-model="form.visitorPhone" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="部门">
+            <el-input v-model="form.deptId" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="车牌">
+            <el-input v-model="form.plateNumber" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="访客申请id">
+            <el-input v-model="form.applyId" style="width: 370px;" />
+          </el-form-item>
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+          <el-button type="text" @click="crud.cancelCU">取消</el-button>
+          <el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
+        </div>
+      </el-dialog>
+      <!--表格渲染-->
+      <el-table ref="table" v-loading="crud.loading" :data="crud.data" size="small" style="width: 100%;" @selection-change="crud.selectionChangeHandler">
+        <el-table-column type="selection" width="55" />
+        <el-table-column prop="visitorId" label="visitorId" />
+        <el-table-column prop="visitorName" label="访客姓名" />
+        <el-table-column prop="visitorPhone" label="访客电话" />
+        <el-table-column prop="deptId" label="部门" />
+        <el-table-column prop="plateNumber" label="车牌" />
+        <el-table-column prop="applyId" label="访客申请id" />
+        <el-table-column v-if="checkPer(['admin','dmVisitorsUser:edit','dmVisitorsUser:del'])" label="操作" width="150px" align="center">
+          <template slot-scope="scope">
+            <udOperation
+              :data="scope.row"
+              :permission="permission"
+            />
+          </template>
+        </el-table-column>
+      </el-table>
+      <!--分页组件-->
+      <pagination />
+    </div>
+  </div>
+</template>
+
+<script>
+import crudDmVisitorsUser from '@/api/dmVisitorsUser'
+import CRUD, { presenter, header, form, crud } from '@crud/crud'
+import rrOperation from '@crud/RR.operation'
+import crudOperation from '@crud/CRUD.operation'
+import udOperation from '@crud/UD.operation'
+import pagination from '@crud/Pagination'
+
+const defaultForm = { visitorId: null, visitorName: null, visitorPhone: null, deptId: null, plateNumber: null, applyId: null }
+export default {
+  name: 'DmVisitorsUser',
+  components: { pagination, crudOperation, rrOperation, udOperation },
+  mixins: [presenter(), header(), form(defaultForm), crud()],
+  cruds() {
+    return CRUD({ title: 'visitors_user', url: 'api/dmVisitorsUser', idField: 'visitorId', sort: 'visitorId,desc', crudMethod: { ...crudDmVisitorsUser }})
+  },
+  data() {
+    return {
+      permission: {
+        add: ['admin', 'dmVisitorsUser:add'],
+        edit: ['admin', 'dmVisitorsUser:edit'],
+        del: ['admin', 'dmVisitorsUser:del']
+      },
+      rules: {
+        visitorId: [
+          { required: true, message: '不能为空', trigger: 'blur' }
+        ]
+      },
+      queryTypeOptions: [
+        { key: 'visitorId', display_name: 'visitorId' },
+        { key: 'visitorName', display_name: '访客姓名' },
+        { key: 'visitorPhone', display_name: '访客电话' },
+        { key: 'deptId', display_name: '部门' },
+        { key: 'plateNumber', display_name: '车牌' },
+        { key: 'applyId', display_name: '访客申请id' }
+      ]
+    }
+  },
+  methods: {
+    // 钩子:在获取表格数据之前执行,false 则代表不获取数据
+    [CRUD.HOOK.beforeRefresh]() {
+      return true
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>