ソースを参照

完成登录权限判断

hzj18279462576@163.com 3 年 前
コミット
2ad5f2e592

+ 8 - 3
admin/build/webpack.dev.conf.js

@@ -28,6 +28,7 @@ const devWebpackConfig = merge(baseWebpackConfig, {
         { from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') },
         { from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') },
       ],
       ],
     },
     },
+    useLocalIp: true, //将useLoackIp设置为true 就可以了
     hot: true,
     hot: true,
     contentBase: false, // since we use CopyWebpackPlugin.
     contentBase: false, // since we use CopyWebpackPlugin.
     compress: true,
     compress: true,
@@ -82,11 +83,15 @@ module.exports = new Promise((resolve, reject) => {
       // Add FriendlyErrorsPlugin
       // Add FriendlyErrorsPlugin
       devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({
       devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({
         compilationSuccessInfo: {
         compilationSuccessInfo: {
-          messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`],
+          messages: [ //下面两个地方,直接复制即可
+            `App runing at: `,
+            ` - Local: http://localhost:${port}`, //配置这里
+            ` - Network: http://${require('ip').address()}:${port}`,//配置这里
+          ],
         },
         },
         onErrors: config.dev.notifyOnErrors
         onErrors: config.dev.notifyOnErrors
-        ? utils.createNotifierCallback()
-        : undefined
+          ? utils.createNotifierCallback()
+          : undefined
       }))
       }))
 
 
       resolve(devWebpackConfig)
       resolve(devWebpackConfig)

+ 4 - 2
admin/config/index.js

@@ -10,10 +10,12 @@ module.exports = {
     // https://chtech.ncjti.edu.cn/hotel/ihotel-api线上地址
     // https://chtech.ncjti.edu.cn/hotel/ihotel-api线上地址
     // Paths
     // Paths
     assetsSubDirectory: 'static',
     assetsSubDirectory: 'static',
-    assetsPublicPath: '/hotel/manage',
+    assetsPublicPath: '/hotel/manage/',
     proxyTable: {
     proxyTable: {
       '/hotel/ihotel-api': {
       '/hotel/ihotel-api': {
+        // target: 'http://192.168.161.34:8089',
         target: 'https://chtech.ncjti.edu.cn/hotel/ihotel-api',
         target: 'https://chtech.ncjti.edu.cn/hotel/ihotel-api',
+        secure: false,// 这是签名认证,http和https区分的参数设置
         changeOrigin: true,
         changeOrigin: true,
         pathRewrite: {
         pathRewrite: {
           '^/hotel/ihotel-api': ''
           '^/hotel/ihotel-api': ''
@@ -22,7 +24,7 @@ module.exports = {
     },
     },
 
 
     // Various Dev Server settings
     // Various Dev Server settings
-    host: 'localhost', // can be overwritten by process.env.HOST
+    host: '0.0.0.0', // can be overwritten by process.env.HOST
     port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
     port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
     autoOpenBrowser: false,
     autoOpenBrowser: false,
     errorOverlay: true,
     errorOverlay: true,

BIN
admin/dist.zip


+ 1 - 1
admin/package.json

@@ -5,7 +5,7 @@
   "author": "hzj2232462644 <hzj2232462644@163.com>",
   "author": "hzj2232462644 <hzj2232462644@163.com>",
   "private": true,
   "private": true,
   "scripts": {
   "scripts": {
-    "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
+    "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js --host 0.0.0.0",
     "start": "npm run dev",
     "start": "npm run dev",
     "unit": "jest --config test/unit/jest.conf.js --coverage",
     "unit": "jest --config test/unit/jest.conf.js --coverage",
     "e2e": "node test/e2e/runner.js",
     "e2e": "node test/e2e/runner.js",

+ 2 - 4
admin/src/App.vue

@@ -1,15 +1,13 @@
 <template>
 <template>
   <div id="app">
   <div id="app">
-    <keep-alive>
-      <router-view v-if="$route.meta.keepAlive"></router-view>
-    </keep-alive>
-    <router-view v-if="!$route.meta.keepAlive"></router-view>
+    <router-view></router-view>
   </div>
   </div>
 </template>
 </template>
 
 
 <script>
 <script>
 export default {
 export default {
   name: "App",
   name: "App",
+  mounted() {},
 };
 };
 </script>
 </script>
 
 

+ 20 - 16
admin/src/api/api.js

@@ -11,6 +11,8 @@ import * as systemnotice from './systemnotice'
 import * as systemSetup from './systemSetup'
 import * as systemSetup from './systemSetup'
 import * as roomRealTimeStatu from './roomRealTimeStatu'
 import * as roomRealTimeStatu from './roomRealTimeStatu'
 import * as roomThirdSetting from './roomThirdSetting'
 import * as roomThirdSetting from './roomThirdSetting'
+import * as icCard from './icCard'
+import * as stat from './stat'
 // 
 // 
 /**
 /**
  *  @parms resquest 请求地址 例如:http://197.82.15.15:8088/request/...
  *  @parms resquest 请求地址 例如:http://197.82.15.15:8088/request/...
@@ -19,23 +21,23 @@ import * as roomThirdSetting from './roomThirdSetting'
 // let resquest = "/api/ihotel"
 // let resquest = "/api/ihotel"
 
 
 // get请求
 // get请求
-export function getListAPI(params) {
-    return http.get(`${resquest}/getList.json`, params)
-}
+// export function getListAPI(params) {
+//     return http.get(`${resquest}/getList.json`, params)
+// }
 
 
-// post请求
-export function postFormAPI(params) {
-    return http.post(`${resquest}/postForm.json`, params)
-}
+// // post请求
+// export function postFormAPI(params) {
+//     return http.post(`${resquest}/postForm.json`, params)
+// }
 
 
-// put 请求
-export function putSomeAPI(params) {
-    return http.put(`${resquest}/putSome.json`, params)
-}
-// delete 请求
-export function deleteListAPI(params) {
-    return http.delete(`${resquest}/deleteList.json`, params)
-}
+// // put 请求
+// export function putSomeAPI(params) {
+//     return http.put(`${resquest}/putSome.json`, params)
+// }
+// // delete 请求
+// export function deleteListAPI(params) {
+//     return http.delete(`${resquest}/deleteList.json`, params)
+// }
 
 
 export default {
 export default {
     doorLock,      // 门锁
     doorLock,      // 门锁
@@ -49,7 +51,9 @@ export default {
     systemnotice,  // 系统通知
     systemnotice,  // 系统通知
     systemSetup,    // 系统设置
     systemSetup,    // 系统设置
     roomRealTimeStatu,  // 实时房态
     roomRealTimeStatu,  // 实时房态
-    roomThirdSetting   // 房间第三方平台设置
+    roomThirdSetting,   // 房间第三方平台设置
+    icCard, // IC卡
+    stat,// 统计报表
 };
 };
 
 
 
 

+ 5 - 0
admin/src/api/hotelAdmin.js

@@ -21,6 +21,11 @@ export function hotelStaffUpdate(data) {
     return http.put(`${resquest}/update`, data)
     return http.put(`${resquest}/update`, data)
 }
 }
 
 
+// 修改密码
+export function updatePassword(data) {
+    return http.put(`${resquest}/updatePassword`, data)
+}
+
 // 删除管理员
 // 删除管理员
 export function hotelStaffDelete(data) {
 export function hotelStaffDelete(data) {
     return http.delete(`${resquest}/delete`, data)
     return http.delete(`${resquest}/delete`, data)

+ 5 - 0
admin/src/api/hotelOrder.js

@@ -41,6 +41,11 @@ export function hotelOrderOrderBill(orderId, params) {
     return http.get(`${resquest}/user/order/bill/${orderId}`, params)
     return http.get(`${resquest}/user/order/bill/${orderId}`, params)
 }
 }
 
 
+//   导出订单【管理端】
+export function downOrder(params) {
+    return http.get(`${resquest}/admin/order/downOrder`, params, '', 'blob')
+}
+
 
 
 
 
 
 

+ 31 - 0
admin/src/api/icCard.js

@@ -0,0 +1,31 @@
+import http from '../utils/http'
+let resquest = "/hotel/ihotel-api/ihotel/condition"
+
+// IC卡查询
+export function icqueryInfo(params) {
+    return http.get(`${resquest}/ic/queryInfo/${params}`)
+}
+
+// IC卡查询-详情
+export function queryICInfoById(params) {
+    return http.get(`${resquest}/ic/queryICInfoById`, params)
+}
+
+//  IC卡新增
+export function add(params) {
+    return http.post(`${resquest}/ic/add`, params)
+}
+//  IC卡修改
+export function update(params) {
+    return http.post(`${resquest}/ic/update`, params)
+}
+
+// IC卡解绑
+export function unbundIC(params) {
+    return http.get(`${resquest}/ic/unbundIC`, params)
+}
+
+// IC卡导出详情
+export function downLoadICInfo(params) {
+    return http.get(`${resquest}/downLoadICInfo`, params, '', 'blob')
+}

+ 2 - 2
admin/src/api/roomRealTimeStatu.js

@@ -10,8 +10,8 @@ export function realData(params) {
 let ContentType = {
 let ContentType = {
     'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'
     'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'
 }
 }
-export function clean(statuId, params) {
-    return http.put(`${resquest}/clean/${statuId}`, params, ContentType)
+export function clean(params) {
+    return http.post(`${resquest}/clean/cleanByStatuId`, params)
 }
 }
 
 
 // 锁定房间
 // 锁定房间

+ 13 - 0
admin/src/api/stat.js

@@ -0,0 +1,13 @@
+import http from '../utils/http'
+let resquest = "/hotel/ihotel-api/ihotel/report"
+
+// 12.1. 查询统计报表数据【管理端】
+export function queryReport(params) {
+    return http.get(`${resquest}/queryReport`, params)
+}
+
+//  导出报表【管理端】
+export function downLoadReport(params) {
+    return http.get(`${resquest}/downLoadReport`, params, '', 'blob')
+}
+

+ 12 - 6
admin/src/layout/components/Navbar.vue

@@ -34,16 +34,22 @@ export default {
   data() {
   data() {
     return {
     return {
       time: moment().format("YYYY-M-D dddd HH:mm:ss"),
       time: moment().format("YYYY-M-D dddd HH:mm:ss"),
+      timer: null,
     };
     };
   },
   },
-  created() {
-    setInterval(this.showTimes, 30000);
+  mounted() {
+    this.time = moment().format("YYYY-M-D dddd HH:mm:ss");
+    this.timer = setInterval(() => {
+      this.time = moment().format("YYYY-M-D dddd HH:mm:ss");
+    }, 1000);
+  },
+  beforeDestroy() {
+    if (this.timer) {
+      clearInterval(this.timer);
+      this.timer = null;
+    }
   },
   },
-  mounted() {},
   methods: {
   methods: {
-    showTimes() {
-      this.time = moment().format("YYYY-M-D dddd HH:mm:ss");
-    },
     informs() {
     informs() {
       this.$router
       this.$router
         .replace({ name: "Inform" })
         .replace({ name: "Inform" })

+ 50 - 45
admin/src/layout/components/NavbarItem.vue

@@ -8,71 +8,56 @@
       background-color="rgba(41, 109, 227, 1)"
       background-color="rgba(41, 109, 227, 1)"
       :default-active="$route.path"
       :default-active="$route.path"
       class="el-menu-vertical-demo"
       class="el-menu-vertical-demo"
-      @open="handleOpen"
-      @close="handleClose"
+      @select="handleOpen"
       :collapse="isCollapse"
       :collapse="isCollapse"
       router
       router
     >
     >
-      <el-menu-item index="/home">
+      <el-menu-item v-for="item in roles" :key="item.route" :index="'/'+item.route">
         <div class="icons">
         <div class="icons">
-          <IconSvg
-            :W="28"
-            :H="26"
-            :name="ItemIndex == '/home' ? 'home-active' : 'home'"
-          />
+          <div v-if="ItemIndex== `/${item.route}`">
+            <IconSvg :W="26" :H="25" :name="`${item.route}-active`" />
+          </div>
+          <div v-else>
+            <IconSvg :W="26" :H="25" :name="item.route" />
+          </div>
+          <!-- <IconSvg
+            :W="26"
+            :H="25"
+            :name="ItemIndex == `/${item.route}`  ? `${item.route}-active` : `${item.route}`"
+          />-->
         </div>
         </div>
-        <span slot="title">房态管理</span>
+        <span slot="title">{{item.title}}</span>
       </el-menu-item>
       </el-menu-item>
-      <el-menu-item index="/order">
+      <!-- <el-menu-item index="/order">
         <div class="icons">
         <div class="icons">
-          <IconSvg
-            :W="21"
-            :H="26"
-            :name="ItemIndex == '/order' ? 'order-active' : 'order'"
-          />
+          <IconSvg :W="26" :H="25" :name="ItemIndex == '/order' ? 'order-active' : 'order'" />
         </div>
         </div>
         <span slot="title">订单管理</span>
         <span slot="title">订单管理</span>
       </el-menu-item>
       </el-menu-item>
       <el-menu-item index="/staff">
       <el-menu-item index="/staff">
         <div class="icons">
         <div class="icons">
-          <IconSvg
-            :W="26"
-            :H="24"
-            :name="ItemIndex == '/staff' ? 'staff-active' : 'staff'"
-          />
+          <IconSvg :W="26" :H="25" :name="ItemIndex == '/staff' ? 'staff-active' : 'staff'" />
         </div>
         </div>
         <span slot="title">员工管理</span>
         <span slot="title">员工管理</span>
       </el-menu-item>
       </el-menu-item>
       <el-menu-item index="/account">
       <el-menu-item index="/account">
         <div class="icons">
         <div class="icons">
-          <IconSvg
-            :W="26"
-            :H="20"
-            :name="ItemIndex == '/account' ? 'account-active' : 'account'"
-          />
+          <IconSvg :W="26" :H="25" :name="ItemIndex == '/account' ? 'account-active' : 'account'" />
         </div>
         </div>
         <span slot="title">账号管理</span>
         <span slot="title">账号管理</span>
       </el-menu-item>
       </el-menu-item>
       <el-menu-item index="/stat">
       <el-menu-item index="/stat">
         <div class="icons">
         <div class="icons">
-          <IconSvg
-            :W="22"
-            :H="22"
-            :name="ItemIndex == '/stat' ? 'stat-active' : 'stat'"
-          />
+          <IconSvg :W="26" :H="25" :name="ItemIndex == '/stat' ? 'stat-active' : 'stat'" />
         </div>
         </div>
         <span slot="title">统计报表</span>
         <span slot="title">统计报表</span>
       </el-menu-item>
       </el-menu-item>
       <el-menu-item index="/system">
       <el-menu-item index="/system">
         <div class="icons">
         <div class="icons">
-          <IconSvg
-            :W="26"
-            :H="25"
-            :name="ItemIndex == '/system' ? 'system-active' : 'system'"
-          />
+          <IconSvg :W="26" :H="25" :name="ItemIndex == '/system' ? 'system-active' : 'system'" />
         </div>
         </div>
         <span slot="title">系统设置</span>
         <span slot="title">系统设置</span>
-      </el-menu-item>
+      </el-menu-item>-->
     </el-menu>
     </el-menu>
   </div>
   </div>
 </template>
 </template>
@@ -83,25 +68,45 @@ export default {
   data() {
   data() {
     return {
     return {
       isCollapse: false,
       isCollapse: false,
+      roles: []
     };
     };
   },
   },
-  mounted() {},
+  created() {
+    this.getData();
+  },
   computed: {
   computed: {
     ItemIndex: {
     ItemIndex: {
       get() {
       get() {
         return this.$route.path;
         return this.$route.path;
       },
       },
-      set(val) {},
-    },
+      set(val) {}
+    }
   },
   },
   methods: {
   methods: {
-    handleOpen(key, keyPath) {
-      console.log(key, keyPath);
+    handleOpen(index, indexPath) {
+      // console.log(index, indexPath);
     },
     },
-    handleClose(key, keyPath) {
-      console.log(key, keyPath);
-    },
-  },
+
+    getData() {
+      // console.log(this.$store.state.user.roles);
+      this.$store.state.user.roles.forEach((item, index) => {
+        if (item == "home") {
+          this.roles[index] = { route: item, title: "房态管理" };
+        } else if (item == "order") {
+          this.roles[index] = { route: item, title: "订单管理" };
+        } else if (item == "staff") {
+          this.roles[index] = { route: item, title: "员工管理" };
+        } else if (item == "account") {
+          this.roles[index] = { route: item, title: "账号管理" };
+        } else if (item == "stat") {
+          this.roles[index] = { route: item, title: "统计报表" };
+        } else if (item == "system") {
+          this.roles[index] = { route: item, title: "系统设置" };
+        }
+      });
+      // console.log(this.roles);
+    }
+  }
 };
 };
 </script>
 </script>
 
 

+ 9 - 4
admin/src/layout/index.vue

@@ -9,7 +9,12 @@
           <Navbar></Navbar>
           <Navbar></Navbar>
         </el-header>
         </el-header>
         <el-main>
         <el-main>
-          <router-view></router-view>
+          <!-- <router-view></router-view> -->
+          <keep-alive>
+            <!-- <router-view></router-view> -->
+            <router-view v-if="$route.meta.keepAlive"></router-view>
+          </keep-alive>
+          <router-view v-if="!$route.meta.keepAlive"></router-view>
         </el-main>
         </el-main>
       </el-container>
       </el-container>
     </el-container>
     </el-container>
@@ -27,9 +32,9 @@ export default {
     return {};
     return {};
   },
   },
   mounted() {
   mounted() {
-    this.API.systemnotice.systemnoticeList({ pageSize: 100 }).then((res) => {
+    this.API.systemnotice.systemnoticeList({ pageSize: 100 }).then(res => {
       let number = 0;
       let number = 0;
-      res.data.list.forEach((item) => {
+      res.data.list.forEach(item => {
         if (item.readFlag == 0) {
         if (item.readFlag == 0) {
           number += 1;
           number += 1;
         }
         }
@@ -41,7 +46,7 @@ export default {
       }
       }
     });
     });
   },
   },
-  methods: {},
+  methods: {}
 };
 };
 </script>
 </script>
 
 

+ 1 - 1
admin/src/main.js

@@ -3,9 +3,9 @@
 import Vue from 'vue'
 import Vue from 'vue'
 import App from './App'
 import App from './App'
 
 
+import store from './store';
 import router from './router'
 import router from './router'
 import axios from "axios";
 import axios from "axios";
-import store from './store';
 
 
 
 
 import API from './api/api'
 import API from './api/api'

+ 68 - 68
admin/src/router/index.js

@@ -1,24 +1,19 @@
 import Vue from 'vue'
 import Vue from 'vue'
+
 import Router from 'vue-router'
 import Router from 'vue-router'
 import Layout from '@/layout'
 import Layout from '@/layout'
+import store from "@/store"
 import Cookies from 'js-cookie'
 import Cookies from 'js-cookie'
 Vue.use(Router)
 Vue.use(Router)
-
 //不管是超级管理员还是普通用户都可以看到的页面 
 //不管是超级管理员还是普通用户都可以看到的页面 
 export const constantRoutes = [
 export const constantRoutes = [
     // 登录页
     // 登录页
     {
     {
         path: '/login',
         path: '/login',
+        // meta: { isAuth: true },
         component: () => import('@/views/login/index'),
         component: () => import('@/views/login/index'),
         hidden: true
         hidden: true
     },
     },
-]
-
-/**
- * 异步路由
- * asyncRoutes
- */
-export const asyncRoutes = [
     {
     {
         path: '/',
         path: '/',
         name: 'Layout',
         name: 'Layout',
@@ -26,46 +21,22 @@ export const asyncRoutes = [
         alwaysShow: true,
         alwaysShow: true,
         component: Layout,
         component: Layout,
         children: [
         children: [
-            {
-                path: 'home',
-                name: 'Home',
-                meta: {
-                    isAuth: true,
-                    title: '主页',
-                    keepAlive: true //缓存组件 
-                },
-                component: () => import('@/views/home'),
-            },
-            {
-                path: 'order',
-                name: 'Order',
-                meta: { isAuth: true, title: '订单管理' },
-                component: () => import('@/views/order')
-            },
-            {
-                path: 'staff',
-                name: 'Staff',
-                meta: { isAuth: true, title: '员工管理' },
-                component: () => import('@/views/staff')
-            },
-            {
-                path: 'account',
-                name: 'Account',
-                meta: { isAuth: true, title: '账号管理' },
-                component: () => import('@/views/account')
-            },
-            {
-                path: 'stat',
-                name: 'Stat',
-                meta: { isAuth: true, title: '统计报表' },
-                component: () => import('@/views/stat')
-            },
-            {
-                path: 'system',
-                name: 'System',
-                meta: { isAuth: true, title: '系统设置' },
-                component: () => import('@/views/system')
-            },
+            // {
+            //     path: 'home',
+            //     name: 'Home',
+            //     meta: {
+            //         isAuth: true,
+            //         title: '主页',
+            //         keepAlive: true //缓存组件 
+            //     },
+            //     component: () => import('@/views/home'),
+            // },
+            // {
+            //     path: 'account',
+            //     name: 'account',
+            //     meta: { isAuth: true, title: '账号管理' },
+            //     component: () => import('@/views/account')
+            // },
             {
             {
                 path: 'inform',
                 path: 'inform',
                 name: 'Inform',
                 name: 'Inform',
@@ -73,52 +44,81 @@ export const asyncRoutes = [
                 component: () => import('@/views/inform')
                 component: () => import('@/views/inform')
             },
             },
             {
             {
-                path: '/home/icCard',
+                path: 'home/ICcard',
                 name: 'icCard',
                 name: 'icCard',
                 meta: { isAuth: true, title: 'IC卡管理' },
                 meta: { isAuth: true, title: 'IC卡管理' },
                 component: () => import('@/views/icCard')
                 component: () => import('@/views/icCard')
             },
             },
             {
             {
-                path: '/home/fingerprint',
+                path: 'home/fingerprint',
                 name: 'fingerprint',
                 name: 'fingerprint',
                 meta: { isAuth: true, title: '指纹管理' },
                 meta: { isAuth: true, title: '指纹管理' },
                 component: () => import('@/views/fingerprint')
                 component: () => import('@/views/fingerprint')
             }
             }
-
         ]
         ]
     },
     },
-]
-
+    // {
+    //     path: '*',
+    //     redirect: '/login',
+    //     // meta: { isAuth: true },
+    //     // component: () => import('@/views/login/index'),
+    //     hidden: true
+    // }
 
 
-export const anyRoute = { path: '*', redirect: '/404', hidden: true }
-const createRouter = () => new Router({
-    // mode: 'history', // require service support
+]
+const router = new Router({
+    mode: 'history', // require service support
     scrollBehavior: () => ({ y: 0 }),
     scrollBehavior: () => ({ y: 0 }),
-    routes: [...constantRoutes, ...asyncRoutes]
+    routes: constantRoutes
 })
 })
 
 
-const router = createRouter()
-
-export function resetRouter() {
-    const newRouter = createRouter()
-    router.matcher = newRouter.matcher // reset router
-}
-
 export default router
 export default router
 
 
 //全局前置路由守卫————初始化的时候被调用、每次路由切换之前被调用
 //全局前置路由守卫————初始化的时候被调用、每次路由切换之前被调用
 router.beforeEach((to, from, next) => {
 router.beforeEach((to, from, next) => {
-    //如果路由需要跳转
+    console.log(store);
     if (to.meta.isAuth) {
     if (to.meta.isAuth) {
         //判断 如果cook是否存在,可以进去
         //判断 如果cook是否存在,可以进去
-        if (Cookies.get('cook')) {
+        if (Cookies.get('cook') == store.state.user.token) {
+            console.log(1111)
             next()  //放行
             next()  //放行
         } else {
         } else {
             // alert('登录身份失效,请重新登录')
             // alert('登录身份失效,请重新登录')
-            next({ path: "/login" });
+            // router.addRoute("Layout", {
+            //     path: item,
+            //     name: item,
+            //     meta: { isAuth: true },
+            //     component: () => import(`@/views/${item}`),
+            // });
+            console.log(22222);
+            next({ path: "/login" })
         }
         }
     } else {
     } else {
         // 否则,放行
         // 否则,放行
-        next()
+        console.log(3333);
+        if (Cookies.get('cook')) {
+            if (store.state.user.statRoutes[0].children.length === 3) {
+                // console.log(rsaPassWord);
+                store.dispatch("user/login", {
+                    username: Cookies.get('user'),
+                    password: Cookies.get('password')
+                })
+                    .then(() => {
+                        next({ ...to })
+                        // next()
+                    })
+                    .catch((error) => {
+                        next()
+                    });
+
+            } else {
+                next()
+            }
+        } else {
+            next()
+        }
+
+        // next()
+
     }
     }
 })
 })

+ 1 - 0
admin/src/store/getters.js

@@ -8,6 +8,7 @@ const getters = {
     headImage: (state) => state.user.headImage,
     headImage: (state) => state.user.headImage,
     roles: (state) => state.user.roles,
     roles: (state) => state.user.roles,
     routes: (state) => state.permission.routes,
     routes: (state) => state.permission.routes,
+    statRoutes: (state) => state.user.statRoutes,
     buttons: (state) => state.user.buttons
     buttons: (state) => state.user.buttons
 }
 }
 export default getters
 export default getters

+ 1 - 1
admin/src/store/index.js

@@ -18,7 +18,7 @@ const store = new Vuex.Store({
             // console.log(val);
             // console.log(val);
             return { // 只储存state中的user 
             return { // 只储存state中的user 
                 inform: val.inform,
                 inform: val.inform,
-                user: val.user
+                user: val.users
             }
             }
         }
         }
     })]
     })]

+ 99 - 4
admin/src/store/modules/user.js

@@ -1,15 +1,58 @@
 import { login, logout, getInfo } from '@/api/acl/user'
 import { login, logout, getInfo } from '@/api/acl/user'
 import { getToken, setToken, removeToken } from '@/utils/auth'
 import { getToken, setToken, removeToken } from '@/utils/auth'
 import { resetRouter } from '@/router'
 import { resetRouter } from '@/router'
+import router from "@/router";
 import api from '@/api/api'
 import api from '@/api/api'
+import Layout from '@/layout'
 const getDefaultState = () => {
 const getDefaultState = () => {
     return {
     return {
         token: '',
         token: '',
         userName: '',
         userName: '',
         headImage: '',
         headImage: '',
+        userType: '',
+        telPhone: '',
         time: new Date(),
         time: new Date(),
         avatar: '',
         avatar: '',
         roles: [],
         roles: [],
+        statRoutes:
+            [{
+                path: '/',
+                name: 'Layout',
+                redirect: '/login',
+                alwaysShow: true,
+                component: Layout,
+                children: [
+                    // {
+                    //     path: 'home',
+                    //     name: 'Home',
+                    //     meta: {
+                    //         isAuth: true,
+                    //         title: '主页',
+                    //         keepAlive: true //缓存组件 
+                    //     },
+                    //     component: () => import('@/views/home'),
+                    // },
+                    {
+                        path: 'inform',
+                        name: 'Inform',
+                        meta: { isAuth: true, title: '系统通知' },
+                        component: () => import('@/views/inform')
+                    },
+                    {
+                        path: 'home/ICcard',
+                        name: 'icCard',
+                        meta: { isAuth: true, title: 'IC卡管理' },
+                        component: () => import('@/views/icCard')
+                    },
+                    {
+                        path: 'home/fingerprint',
+                        name: 'fingerprint',
+                        meta: { isAuth: true, title: '指纹管理' },
+                        component: () => import('@/views/fingerprint')
+                    }
+                ]
+            }]
+        ,
         buttons: []
         buttons: []
     }
     }
 }
 }
@@ -27,11 +70,51 @@ const mutations = {
     SET_USERINFO: (state, userInfo) => {
     SET_USERINFO: (state, userInfo) => {
         state.userName = userInfo.userName
         state.userName = userInfo.userName
         state.headImage = userInfo.headImage
         state.headImage = userInfo.headImage
-        // state.buttons = userInfo.buttons
+        state.userType = userInfo.userType
+        state.telPhone = userInfo.telPhone
     },
     },
 
 
     SET_ROLES: (state, roles) => {
     SET_ROLES: (state, roles) => {
-        state.roles = roles
+        if (typeof roles === 'string') {
+            state.roles = roles.split('/')
+            // console.log('roles是字符串');
+        } else {
+            state.roles = roles
+        }
+        state.roles.forEach(item => {
+            if (item == "home") {
+                state.statRoutes[0].children.push({
+                    path: item,
+                    name: item,
+                    meta: { isAuth: true, keepAlive: true },
+                    component: () => import(`@/views/${item}`)
+                });
+            } else {
+                state.statRoutes[0].children.push({
+                    path: item,
+                    name: item,
+                    meta: { isAuth: true },
+                    component: () => import(`@/views/${item}`)
+                });
+            }
+            // router.addRoute([...state.statRoutes])
+            if (item == "home") {
+                router.addRoute("Layout", {
+                    path: item,
+                    name: item,
+                    meta: { isAuth: true, keepAlive: true },
+                    component: () => import(`@/views/${item}`)
+                });
+            } else {
+                router.addRoute("Layout", {
+                    path: item,
+                    name: item,
+                    meta: { isAuth: true },
+                    component: () => import(`@/views/${item}`)
+                });
+            }
+        });
+
     },
     },
     SET_TIME: (state, time) => {
     SET_TIME: (state, time) => {
         state.time = time
         state.time = time
@@ -49,10 +132,15 @@ const actions = {
                     const { data } = response
                     const { data } = response
                     commit('SET_TOKEN', data.token)
                     commit('SET_TOKEN', data.token)
                     commit('SET_USERINFO', data)
                     commit('SET_USERINFO', data)
-                    setToken(data.token)
+                    commit('SET_ROLES', data.authority)
+                    setToken('cook', data.token)
+                    setToken('user', username)
+                    setToken('password', password)
+                    console.log("resolve")
                     resolve()
                     resolve()
                 })
                 })
                 .catch((error) => {
                 .catch((error) => {
+                    console.log("error");
                     reject(error)
                     reject(error)
                 })
                 })
         })
         })
@@ -88,8 +176,10 @@ const actions = {
 
 
     // user logout
     // user logout
     logout({ commit, state }) {
     logout({ commit, state }) {
-        removeToken() // must remove  token  first
+        removeToken('cook') // must remove  token  first
         // resetRouter()
         // resetRouter()
+        removeToken('user')
+        removeToken('password')
         commit('RESET_STATE')
         commit('RESET_STATE')
 
 
     },
     },
@@ -101,6 +191,11 @@ const actions = {
             commit('RESET_STATE')
             commit('RESET_STATE')
             resolve()
             resolve()
         })
         })
+    },
+
+    // set User Routes
+    setUserRoutes({ commit }) {
+        commit('SET_ROLES', data)
     }
     }
 }
 }
 
 

+ 4 - 4
admin/src/utils/auth.js

@@ -1,15 +1,15 @@
 import Cookies from 'js-cookie'
 import Cookies from 'js-cookie'
 
 
-const TokenKey = 'cook'
+// const TokenKey = 'cook'
 
 
-export function getToken() {
+export function getToken(TokenKey) {
   return Cookies.get(TokenKey)
   return Cookies.get(TokenKey)
 }
 }
 
 
-export function setToken(token) {
+export function setToken(TokenKey, token) {
   return Cookies.set(TokenKey, token)
   return Cookies.set(TokenKey, token)
 }
 }
 
 
-export function removeToken() {
+export function removeToken(TokenKey) {
   return Cookies.remove(TokenKey)
   return Cookies.remove(TokenKey)
 }
 }

+ 2 - 1
admin/src/utils/http.js

@@ -8,9 +8,10 @@ const http = {
      * @param url 请求地址 
      * @param url 请求地址 
      * @param params 请求参数
      * @param params 请求参数
      */
      */
-    get(url, params, ContentType) {
+    get(url, params, ContentType, responseType) {
         const config = {
         const config = {
             method: 'get',
             method: 'get',
+            responseType: responseType ? responseType : "",
             url: url,
             url: url,
             headers: ContentType ? ContentType : { 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8' }
             headers: ContentType ? ContentType : { 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8' }
         }
         }

+ 147 - 64
admin/src/views/account/index.vue

@@ -18,15 +18,14 @@
                 prefix-icon="el-icon-search"
                 prefix-icon="el-icon-search"
                 clearable
                 clearable
                 @clear="getData(1)"
                 @clear="getData(1)"
-              >
-              </el-input>
+              ></el-input>
             </el-col>
             </el-col>
             <el-col :span="6">
             <el-col :span="6">
               <el-button type="primary" @click="getData(1)">查询</el-button>
               <el-button type="primary" @click="getData(1)">查询</el-button>
             </el-col>
             </el-col>
           </div>
           </div>
           <div class="right">
           <div class="right">
-            <el-button type="primary" @click="handleAdd">添加账号</el-button>
+            <el-button type="primary" @click="handleAdd" v-if="$store.state.user.userType==1">添加账号</el-button>
           </div>
           </div>
         </div>
         </div>
         <!-- 表格区域 -->
         <!-- 表格区域 -->
@@ -43,15 +42,9 @@
               background: 'rgba(240, 243, 247, 1)',
               background: 'rgba(240, 243, 247, 1)',
             }"
             }"
           >
           >
-            <el-table-column
-              prop="username"
-              align="center"
-              label="员工姓名(账号)"
-            >
-            </el-table-column>
+            <el-table-column prop="username" align="center" label="员工姓名(账号)"></el-table-column>
 
 
-            <el-table-column prop="phone" label="手机号" align="center">
-            </el-table-column>
+            <el-table-column prop="phone" label="手机号" align="center"></el-table-column>
 
 
             <el-table-column align="center" label="角色">
             <el-table-column align="center" label="角色">
               <template slot-scope="{ row }">
               <template slot-scope="{ row }">
@@ -63,12 +56,8 @@
               <template slot-scope="{ row }">
               <template slot-scope="{ row }">
                 <el-row v-if="row.identity == '超级管理员'">/</el-row>
                 <el-row v-if="row.identity == '超级管理员'">/</el-row>
                 <el-row v-else>
                 <el-row v-else>
-                  <el-button type="text" @click="handleEdit(row)">
-                    编辑
-                  </el-button>
-                  <el-button type="text" @click="handleDelete(row.id)"
-                    >删除
-                  </el-button>
+                  <el-button type="text" @click="handleEdit(row)">编辑</el-button>
+                  <el-button type="text" @click="handleDelete(row.id)">删除</el-button>
                 </el-row>
                 </el-row>
               </template>
               </template>
             </el-table-column>
             </el-table-column>
@@ -83,8 +72,7 @@
             :page-size="pageSize"
             :page-size="pageSize"
             :total="total"
             :total="total"
             @current-change="handleCurrentChange"
             @current-change="handleCurrentChange"
-          >
-          </el-pagination>
+          ></el-pagination>
         </div>
         </div>
       </div>
       </div>
 
 
@@ -107,18 +95,12 @@
           <el-row :gutter="85">
           <el-row :gutter="85">
             <el-col :span="12">
             <el-col :span="12">
               <el-form-item label="员工姓名" prop="username">
               <el-form-item label="员工姓名" prop="username">
-                <el-input
-                  v-model="ruleForm.username"
-                  placeholder="请输入员工姓名"
-                ></el-input>
+                <el-input v-model="ruleForm.username" placeholder="请输入员工姓名"></el-input>
               </el-form-item>
               </el-form-item>
             </el-col>
             </el-col>
             <el-col :span="12">
             <el-col :span="12">
               <el-form-item label="手机号码" prop="phone">
               <el-form-item label="手机号码" prop="phone">
-                <el-input
-                  v-model="ruleForm.phone"
-                  placeholder="请输入手机号码"
-                ></el-input>
+                <el-input v-model="ruleForm.phone" placeholder="请输入手机号码"></el-input>
               </el-form-item>
               </el-form-item>
             </el-col>
             </el-col>
           </el-row>
           </el-row>
@@ -128,25 +110,27 @@
               <el-form-item label="角色" prop="adminType">
               <el-form-item label="角色" prop="adminType">
                 <el-select
                 <el-select
                   v-model="ruleForm.adminType"
                   v-model="ruleForm.adminType"
+                  @change="adminTypeSelect"
                   placeholder="请选择角色"
                   placeholder="请选择角色"
                 >
                 >
-                  <el-option label="超级管理员" value="1"></el-option>
+                  <el-option label="超级管理员" value="1" v-if="$store.state.user.userType==1"></el-option>
                   <el-option label="管理员" value="2"></el-option>
                   <el-option label="管理员" value="2"></el-option>
                 </el-select>
                 </el-select>
               </el-form-item>
               </el-form-item>
             </el-col>
             </el-col>
             <el-col :span="12">
             <el-col :span="12">
               <el-form-item label="密码" prop="password">
               <el-form-item label="密码" prop="password">
-                <el-input
+                <el-input v-model="ruleForm.password" placeholder="请输入密码"></el-input>
+                <!-- <el-input
                   v-model="ruleForm.password"
                   v-model="ruleForm.password"
                   placeholder="请输入密码"
                   placeholder="请输入密码"
                   :disabled="popTitle == '编辑账号'"
                   :disabled="popTitle == '编辑账号'"
-                ></el-input>
+                ></el-input>-->
               </el-form-item>
               </el-form-item>
             </el-col>
             </el-col>
           </el-row>
           </el-row>
-          <!-- <el-form-item label="权限分配" prop="statu">
-            <el-checkbox-group v-model="ruleForm.statu">
+          <el-form-item label="权限分配" prop="authority">
+            <el-checkbox-group v-model="ruleForm.authority" :min="1" @change="privilege">
               <el-checkbox label="房态管理" name="type"></el-checkbox>
               <el-checkbox label="房态管理" name="type"></el-checkbox>
               <el-checkbox label="订单管理" name="type"></el-checkbox>
               <el-checkbox label="订单管理" name="type"></el-checkbox>
               <el-checkbox label="员工管理" name="type"></el-checkbox>
               <el-checkbox label="员工管理" name="type"></el-checkbox>
@@ -154,14 +138,12 @@
               <el-checkbox label="统计报表" name="type"></el-checkbox>
               <el-checkbox label="统计报表" name="type"></el-checkbox>
               <el-checkbox label="系统设置" name="type"></el-checkbox>
               <el-checkbox label="系统设置" name="type"></el-checkbox>
             </el-checkbox-group>
             </el-checkbox-group>
-          </el-form-item> -->
+          </el-form-item>
         </el-form>
         </el-form>
 
 
         <span slot="footer" class="dialog-footer">
         <span slot="footer" class="dialog-footer">
           <el-button @click="dialogVisible = false">取 消</el-button>
           <el-button @click="dialogVisible = false">取 消</el-button>
-          <el-button type="primary" @click="handleConfirm('ruleForm')"
-            >确 定
-          </el-button>
+          <el-button type="primary" @click="handleConfirm('ruleForm')">确 定</el-button>
         </span>
         </span>
       </el-dialog>
       </el-dialog>
     </el-card>
     </el-card>
@@ -188,18 +170,20 @@ export default {
       pageSize: 8,
       pageSize: 8,
       //   总条数
       //   总条数
       total: null,
       total: null,
+      roles: [],
+      id: "",
       // 添加账号弹窗表格绑定数据
       // 添加账号弹窗表格绑定数据
       ruleForm: {
       ruleForm: {
         username: "",
         username: "",
         phone: "",
         phone: "",
         adminType: "",
         adminType: "",
         password: "",
         password: "",
-        // statu: [],
+        authority: []
       },
       },
       // 添加账号弹窗表格验证规则
       // 添加账号弹窗表格验证规则
       rules: {
       rules: {
         username: [
         username: [
-          { required: true, message: "请输入员工姓名", trigger: "blur" },
+          { required: true, message: "请输入员工姓名", trigger: "blur" }
         ],
         ],
         phone: [
         phone: [
           { required: true, message: "请输入手机号码", trigger: "blur" },
           { required: true, message: "请输入手机号码", trigger: "blur" },
@@ -207,30 +191,30 @@ export default {
             min: 3,
             min: 3,
             max: 11,
             max: 11,
             message: "长度在 3 到 11 个字符",
             message: "长度在 3 到 11 个字符",
-            trigger: "blur",
-          },
+            trigger: "blur"
+          }
         ],
         ],
         password: [
         password: [
           { required: true, message: "请输入密码", trigger: "blur" },
           { required: true, message: "请输入密码", trigger: "blur" },
-          // {
-          //   min: 3,
-          //   max: 11,
-          //   message: "长度在 3 到 11 个字符",
-          //   trigger: "blur",
-          // },
+          {
+            min: 6,
+            // max: 12,
+            message: "长度应大于等于 6 字符",
+            trigger: "blur"
+          }
         ],
         ],
         adminType: [
         adminType: [
-          { required: true, message: "请选择角色", trigger: "change" },
+          { required: true, message: "请选择角色", trigger: "change" }
         ],
         ],
-        // statu: [
-        //   {
-        //     type: "array",
-        //     required: true,
-        //     message: "请至少选择一个活动性质",
-        //     trigger: "change",
-        //   },
-        // ],
-      },
+        authority: [
+          {
+            type: "array",
+            required: true,
+            message: "请至少选择一个活动性质",
+            trigger: "change"
+          }
+        ]
+      }
     };
     };
   },
   },
   mounted() {
   mounted() {
@@ -243,6 +227,8 @@ export default {
         curPage: curPage || this.currentPage,
         curPage: curPage || this.currentPage,
         pageSize: this.pageSize,
         pageSize: this.pageSize,
         keyword: this.searchValue,
         keyword: this.searchValue,
+        userType: this.$store.state.user.userType.toString(),
+        telPhone: this.$store.state.user.telPhone
       };
       };
       let res = await this.API.hotelAdmin.hotelStaffList(params);
       let res = await this.API.hotelAdmin.hotelStaffList(params);
       // console.log(res);
       // console.log(res);
@@ -260,7 +246,10 @@ export default {
         adminType: "",
         adminType: "",
         password: "",
         password: "",
         username: "",
         username: "",
+        statu: "1",
+        authority: []
       };
       };
+      this.roles = [];
       this.dialogVisible = true;
       this.dialogVisible = true;
       this.popTitle = "添加账号";
       this.popTitle = "添加账号";
       this.$nextTick(() => {
       this.$nextTick(() => {
@@ -271,9 +260,46 @@ export default {
     handleEdit(row) {
     handleEdit(row) {
       this.dialogVisible = true;
       this.dialogVisible = true;
       this.popTitle = "编辑账号";
       this.popTitle = "编辑账号";
+      // console.log(row);
+      let roles = row.authority.split("/");
+      // console.log(roles);
       this.$nextTick(() => {
       this.$nextTick(() => {
         this.$refs.ruleForm.resetFields();
         this.$refs.ruleForm.resetFields();
-        this.ruleForm = { ...row };
+        let data = [];
+        let title = [];
+        row.authority.split("/").forEach(item => {
+          if (item == "home") {
+            data.push("home_1");
+            title.push("房态管理");
+          } else if (item == "order") {
+            data.push("order_2");
+            title.push("订单管理");
+          } else if (item == "staff") {
+            data.push("staff_3");
+            title.push("员工管理");
+          } else if (item == "account") {
+            data.push("account_4");
+            title.push("账号管理");
+          } else if (item == "stat") {
+            data.push("stat_5");
+            title.push("统计报表");
+          } else if (item == "system") {
+            data.push("system_6");
+            title.push("系统设置");
+          }
+        });
+        this.roles = data;
+        this.id = row.id;
+        this.ruleForm = {
+          username: row.username,
+          phone: row.phone,
+          adminType: row.adminType,
+          statu: row.statu,
+          password: row.password,
+          authority: title
+        };
+
+        // console.log(data);
       });
       });
     },
     },
     // 删除按钮回调
     // 删除按钮回调
@@ -281,7 +307,7 @@ export default {
       this.$confirm("确定删除吗?", "提示", {
       this.$confirm("确定删除吗?", "提示", {
         confirmButtonText: "确定",
         confirmButtonText: "确定",
         cancelButtonText: "取消",
         cancelButtonText: "取消",
-        type: "warning",
+        type: "warning"
       })
       })
         .then(async () => {
         .then(async () => {
           let res = await this.API.hotelAdmin.hotelStaffDelete([id]);
           let res = await this.API.hotelAdmin.hotelStaffDelete([id]);
@@ -308,7 +334,8 @@ export default {
     },
     },
     // 添加账号/编辑账号 弹窗确定按钮回调
     // 添加账号/编辑账号 弹窗确定按钮回调
     handleConfirm(formName) {
     handleConfirm(formName) {
-      this.$refs[formName].validate(async (valid) => {
+      // console.log(formName);
+      this.$refs[formName].validate(async valid => {
         if (valid) {
         if (valid) {
           let rsaPassWord = RSAencrypt(this.ruleForm.password);
           let rsaPassWord = RSAencrypt(this.ruleForm.password);
           let data = {
           let data = {
@@ -316,17 +343,25 @@ export default {
             username: this.ruleForm.username,
             username: this.ruleForm.username,
             adminType: this.ruleForm.adminType,
             adminType: this.ruleForm.adminType,
             password: rsaPassWord,
             password: rsaPassWord,
-            statu: 1,
+            statu: "1",
+            authority: this.roles
           };
           };
+
+          if (this.ruleForm.password.length > 20) {
+            rsaPassWord = "";
+          }
           let data1 = {
           let data1 = {
-            id: this.ruleForm.id,
+            id: this.id,
             phone: this.ruleForm.phone,
             phone: this.ruleForm.phone,
             username: this.ruleForm.username,
             username: this.ruleForm.username,
             adminType: this.ruleForm.adminType,
             adminType: this.ruleForm.adminType,
-            statu: 1,
+            statu: "1",
+            authority: this.roles,
+            password: rsaPassWord
           };
           };
           // 添加账号请求
           // 添加账号请求
           if (this.popTitle == "添加账号") {
           if (this.popTitle == "添加账号") {
+            // console.log("添加账号", data);
             let res = await this.API.hotelAdmin.hotelStaffAdd(data);
             let res = await this.API.hotelAdmin.hotelStaffAdd(data);
             // console.log(res);
             // console.log(res);
             if (res.success) {
             if (res.success) {
@@ -338,6 +373,7 @@ export default {
           }
           }
           // 编辑账号请求
           // 编辑账号请求
           else {
           else {
+            // console.log("编辑账号", data1);
             let res = await this.API.hotelAdmin.hotelStaffUpdate(data1);
             let res = await this.API.hotelAdmin.hotelStaffUpdate(data1);
             // console.log(res);
             // console.log(res);
             if (res.success) {
             if (res.success) {
@@ -354,13 +390,60 @@ export default {
         }
         }
       });
       });
     },
     },
+    // 权限分配
+    privilege(value) {
+      // console.log(value);
+      let data = [];
+      value.forEach(item => {
+        // console.log(item);
+        if (item == "房态管理") {
+          data.push("home_1");
+        } else if (item == "订单管理") {
+          data.push("order_2");
+        } else if (item == "员工管理") {
+          data.push("staff_3");
+        } else if (item == "账号管理") {
+          data.push("account_4");
+        } else if (item == "统计报表") {
+          data.push("stat_5");
+        } else if (item == "系统设置") {
+          data.push("system_6");
+        }
+      });
+      this.roles = data;
+    },
+    // 改变管理员状态
+    adminTypeSelect(value) {
+      // console.log(value);
+      // let roles = [];
+      // let role = [];
+      // if (value == 2) {
+      //   role = this.ruleForm.authority.filter(item => {
+      //     return item != "账号管理";
+      //   });
+      //   roles = this.roles.filter(item => {
+      //     return item != "account_4";
+      //   });
+      //   this.ruleForm.authority = role;
+      //   this.roles = roles;
+      // } else if (value == 1) {
+      //   let index = this.ruleForm.authority.indexOf("账号管理");
+      //   let index2 = this.roles.indexOf("account_4");
+      //   if (index < 0) {
+      //     this.ruleForm.authority.push("账号管理");
+      //   }
+      //   if (index2 < 0) {
+      //     this.roles.indexOf("account_4");
+      //   }
+      // }
+    },
     // 表格样式设置回调
     // 表格样式设置回调
     rowbg(row) {
     rowbg(row) {
       if (row.rowIndex % 2 != 0) {
       if (row.rowIndex % 2 != 0) {
         return { background: "rgba(240, 243, 247, 1)", "border-radius": "5px" };
         return { background: "rgba(240, 243, 247, 1)", "border-radius": "5px" };
       }
       }
-    },
-  },
+    }
+  }
 };
 };
 </script>
 </script>
 
 

+ 5 - 6
admin/src/views/fingerprint/index.vue

@@ -593,7 +593,7 @@ export default {
   },
   },
   watch: {
   watch: {
     startTime(newVal, oldVal) {
     startTime(newVal, oldVal) {
-      console.log(this.endTime > newVal);
+      // console.log(this.endTime > newVal);
       if (this.endTime <= newVal) {
       if (this.endTime <= newVal) {
         this.endTime = "";
         this.endTime = "";
       }
       }
@@ -658,7 +658,7 @@ export default {
       this.icCardInfo.radio = "";
       this.icCardInfo.radio = "";
     },
     },
     radioChange() {
     radioChange() {
-      console.log(this.icCardInfo.radio);
+      // console.log(this.icCardInfo.radio);
       if (this.icCardInfo.radio == "一个星期") {
       if (this.icCardInfo.radio == "一个星期") {
         this.endTime = dayjs(this.startTime)
         this.endTime = dayjs(this.startTime)
           .add(1, "week")
           .add(1, "week")
@@ -698,12 +698,11 @@ export default {
           label: data.label,
           label: data.label,
         },
         },
       ];
       ];
-      console.log(this.count);
+      // console.log(this.count);
       this.$refs.roomTree.setCheckedNodes(this.count);
       this.$refs.roomTree.setCheckedNodes(this.count);
       this.title = this.count[0].label;
       this.title = this.count[0].label;
     },
     },
     cancelCheck() {
     cancelCheck() {
-      console.log(222);
       //   if (this.data[0].children.length == this.count.length) {
       //   if (this.data[0].children.length == this.count.length) {
       //     this.checked = true;
       //     this.checked = true;
       //   } else {
       //   } else {
@@ -748,7 +747,7 @@ export default {
 
 
     //详情按钮回调
     //详情按钮回调
     handleEdit(row) {
     handleEdit(row) {
-      console.log(row);
+      // console.log(row);
       this.order = row.order;
       this.order = row.order;
       this.waterTable = [];
       this.waterTable = [];
       this.electricTable = [];
       this.electricTable = [];
@@ -817,7 +816,7 @@ export default {
 
 
     // 多选框按钮操作
     // 多选框按钮操作
     handleSelectionChange(list) {
     handleSelectionChange(list) {
-      console.log(list);
+      // console.log(list);
       this.selectionTable = list;
       this.selectionTable = list;
     },
     },
 
 

ファイルの差分が大きいため隠しています
+ 291 - 215
admin/src/views/home/index.vue


ファイルの差分が大きいため隠しています
+ 298 - 416
admin/src/views/icCard/index.vue


+ 46 - 70
admin/src/views/inform/index.vue

@@ -19,13 +19,10 @@
               v-for="(item, index) in reads"
               v-for="(item, index) in reads"
               :key="item"
               :key="item"
               :class="className[index]"
               :class="className[index]"
-              >{{ item }}</el-button
-            >
+            >{{ item }}</el-button>
           </div>
           </div>
           <div class="right">
           <div class="right">
-            <el-button type="primary" size="small" @click="allRead"
-              >一键已读</el-button
-            >
+            <el-button type="primary" size="small" @click="allRead">一键已读</el-button>
           </div>
           </div>
         </div>
         </div>
         <div class="inform-table">
         <div class="inform-table">
@@ -42,45 +39,23 @@
               background: 'rgba(240, 243, 247, 1)',
               background: 'rgba(240, 243, 247, 1)',
             }"
             }"
           >
           >
-            <el-table-column
-              prop="title"
-              label="标题"
-              width="300"
-              align="center"
-            >
+            <el-table-column prop="title" label="标题" width="300" align="center">
               <template slot-scope="scope">
               <template slot-scope="scope">
-                <span
-                  class="yuan"
-                  v-show="scope.row.readFlag == 0 ? true : false"
-                ></span>
+                <span class="yuan" v-show="scope.row.readFlag == 0 ? true : false"></span>
                 <span style="margin-left: 10px">{{ scope.row.title }}</span>
                 <span style="margin-left: 10px">{{ scope.row.title }}</span>
               </template>
               </template>
             </el-table-column>
             </el-table-column>
 
 
-            <el-table-column prop="content" align="center" label="消息">
-            </el-table-column>
+            <el-table-column prop="content" align="center" label="消息"></el-table-column>
 
 
-            <el-table-column
-              prop="createTime"
-              align="center"
-              label="时间"
-              width="400"
-            >
-            </el-table-column>
-            <el-table-column
-              prop="address"
-              align="center"
-              label="操作"
-              width="150"
-            >
+            <el-table-column prop="createTime" align="center" label="时间" width="400"></el-table-column>
+            <el-table-column prop="address" align="center" label="操作" width="150">
               <template slot-scope="scope">
               <template slot-scope="scope">
                 <span
                 <span
                   @click="handleInfo(scope.$index, scope.row)"
                   @click="handleInfo(scope.$index, scope.row)"
                   class="operate"
                   class="operate"
                   style="color: #296de3; cursor: pointer"
                   style="color: #296de3; cursor: pointer"
-                >
-                  查看
-                </span>
+                >查看</span>
                 <el-dialog
                 <el-dialog
                   title="通知详情"
                   title="通知详情"
                   :visible.sync="infoShow"
                   :visible.sync="infoShow"
@@ -88,13 +63,13 @@
                   custom-class="info"
                   custom-class="info"
                 >
                 >
                   <h3>标题:</h3>
                   <h3>标题:</h3>
-                  <span>
-                    {{ info.title }}
-                  </span>
+                  <span>{{ info.title }}</span>
                   <h3>消息:</h3>
                   <h3>消息:</h3>
-                  <span style="padding: 10px 20px 20px">{{
+                  <span style="padding: 10px 20px 20px">
+                    {{
                     info.content
                     info.content
-                  }}</span>
+                    }}
+                  </span>
                   <h3>时间:</h3>
                   <h3>时间:</h3>
                   <span>{{ info.createTime }}</span>
                   <span>{{ info.createTime }}</span>
                 </el-dialog>
                 </el-dialog>
@@ -103,9 +78,7 @@
                   class="operate"
                   class="operate"
                   style="color: #296de3; cursor: pointer"
                   style="color: #296de3; cursor: pointer"
                   v-show="scope.row.readFlag == 0 ? false : true"
                   v-show="scope.row.readFlag == 0 ? false : true"
-                >
-                  删除
-                </span>
+                >删除</span>
               </template>
               </template>
             </el-table-column>
             </el-table-column>
           </el-table>
           </el-table>
@@ -118,8 +91,7 @@
             :page-size="8"
             :page-size="8"
             layout="prev, pager, next, jumper"
             layout="prev, pager, next, jumper"
             :total="Data.length"
             :total="Data.length"
-          >
-          </el-pagination>
+          ></el-pagination>
         </div>
         </div>
       </div>
       </div>
     </el-card>
     </el-card>
@@ -142,8 +114,8 @@ export default {
       info: {
       info: {
         title: "",
         title: "",
         content: "",
         content: "",
-        createTime: "",
-      },
+        createTime: ""
+      }
     };
     };
   },
   },
   mounted() {
   mounted() {
@@ -155,12 +127,16 @@ export default {
   methods: {
   methods: {
     dataList(currentPage) {
     dataList(currentPage) {
       this.API.systemnotice
       this.API.systemnotice
-        .systemnoticeList({ pageSize: 100, order: "desc" })
-        .then((res) => {
-          console.log(res);
+        .systemnoticeList({
+          pageSize: 100,
+          order: "desc",
+          orderField: "create_time"
+        })
+        .then(res => {
+          // console.log(res);
           this.tableData = res.data.list;
           this.tableData = res.data.list;
           let number = 0;
           let number = 0;
-          this.tableData.forEach((item) => {
+          this.tableData.forEach(item => {
             if (item.readFlag == 0) {
             if (item.readFlag == 0) {
               number += 1;
               number += 1;
             }
             }
@@ -183,16 +159,16 @@ export default {
     },
     },
     // 已读未读
     // 已读未读
     read($event, index) {
     read($event, index) {
-      this.className = this.className.map((item) => (item = ""));
+      this.className = this.className.map(item => (item = ""));
       this.className[index] = "active";
       this.className[index] = "active";
       if ($event.target.innerText == "全部") {
       if ($event.target.innerText == "全部") {
         this.Data = this.tableData;
         this.Data = this.tableData;
       } else if ($event.target.innerText == "已读") {
       } else if ($event.target.innerText == "已读") {
-        this.Data = this.tableData.filter((item) => {
+        this.Data = this.tableData.filter(item => {
           return item.readFlag == 1;
           return item.readFlag == 1;
         });
         });
       } else if ($event.target.innerText == "未读") {
       } else if ($event.target.innerText == "未读") {
-        this.Data = this.tableData.filter((item) => {
+        this.Data = this.tableData.filter(item => {
           return item.readFlag == 0;
           return item.readFlag == 0;
         });
         });
       }
       }
@@ -200,15 +176,15 @@ export default {
     },
     },
     // 查看详情
     // 查看详情
     handleInfo(index, row) {
     handleInfo(index, row) {
-      console.log(row);
+      // console.log(row);
       this.info = {
       this.info = {
         title: row.title,
         title: row.title,
         content: row.content,
         content: row.content,
-        createTime: row.createTime,
+        createTime: row.createTime
       };
       };
       if (row.readFlag == 0) {
       if (row.readFlag == 0) {
-        this.API.systemnotice.systemnoticeRead([row.id]).then((res) => {
-          console.log(res);
+        this.API.systemnotice.systemnoticeRead([row.id]).then(res => {
+          // console.log(res);
           this.dataList(this.currentPage);
           this.dataList(this.currentPage);
         });
         });
       }
       }
@@ -217,15 +193,15 @@ export default {
     // 一键已读
     // 一键已读
     allRead() {
     allRead() {
       let ids = [];
       let ids = [];
-      this.tableData.forEach((item) => {
+      this.tableData.forEach(item => {
         if (item.readFlag == 0) {
         if (item.readFlag == 0) {
           ids.push(item.id);
           ids.push(item.id);
         }
         }
       });
       });
-      console.log(ids);
+      // console.log(ids);
       if (ids.length) {
       if (ids.length) {
-        this.API.systemnotice.systemnoticeRead(ids).then((res) => {
-          console.log(res);
+        this.API.systemnotice.systemnoticeRead(ids).then(res => {
+          // console.log(res);
           this.dataList();
           this.dataList();
         });
         });
       }
       }
@@ -237,30 +213,30 @@ export default {
     },
     },
 
 
     handleCurrentChange(val) {
     handleCurrentChange(val) {
-      console.log(this.Data);
+      // console.log(this.Data);
       this.currentPage = this.val;
       this.currentPage = this.val;
       this.data = this.Data.slice((val - 1) * 8, val * 8);
       this.data = this.Data.slice((val - 1) * 8, val * 8);
       // console.log(`当前页: ${val}`);
       // console.log(`当前页: ${val}`);
     },
     },
 
 
     clickData(row, column, event) {
     clickData(row, column, event) {
-      console.log(1111);
-      console.log(row, column, event);
+      // console.log(1111);
+      // console.log(row, column, event);
     },
     },
     //删除通知
     //删除通知
     handleDelete(index, row) {
     handleDelete(index, row) {
       let ids = [row.id];
       let ids = [row.id];
-      console.log(ids);
+      // console.log(ids);
       this.$confirm("确认删除通知?")
       this.$confirm("确认删除通知?")
-        .then((_) => {
-          this.API.systemnotice.systemnoticeDelete(ids).then((res) => {
-            console.log(res);
+        .then(_ => {
+          this.API.systemnotice.systemnoticeDelete(ids).then(res => {
+            // console.log(res);
           });
           });
           this.dataList();
           this.dataList();
         })
         })
-        .catch((_) => {});
-    },
-  },
+        .catch(_ => {});
+    }
+  }
 };
 };
 </script>
 </script>
 
 

+ 48 - 32
admin/src/views/login/index.vue

@@ -1,11 +1,6 @@
 <template>
 <template>
   <div class="login-container">
   <div class="login-container">
-    <el-form
-      ref="loginForm"
-      :model="loginForm"
-      :rules="loginRules"
-      class="login-form"
-    >
+    <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
       <div class="title-container">
       <div class="title-container">
         <h3 class="title">智慧校园公寓管理端</h3>
         <h3 class="title">智慧校园公寓管理端</h3>
       </div>
       </div>
@@ -14,11 +9,7 @@
         <span class="svg-container">
         <span class="svg-container">
           <div class="user"></div>
           <div class="user"></div>
         </span>
         </span>
-        <el-input
-          v-model="loginForm.username"
-          placeholder="用户名"
-          type="text"
-        />
+        <el-input v-model="loginForm.username" placeholder="用户名" type="text" />
       </el-form-item>
       </el-form-item>
 
 
       <el-form-item prop="password">
       <el-form-item prop="password">
@@ -42,14 +33,14 @@
         type="primary"
         type="primary"
         style="width: 100%; margin-bottom: 30px"
         style="width: 100%; margin-bottom: 30px"
         @click="handleLogin"
         @click="handleLogin"
-        >登录</el-button
-      >
+      >登录</el-button>
     </el-form>
     </el-form>
   </div>
   </div>
 </template>
 </template>
 
 
 <script>
 <script>
 import { JSEncrypt } from "jsencrypt";
 import { JSEncrypt } from "jsencrypt";
+import router from "@/router";
 export default {
 export default {
   name: "Login",
   name: "Login",
   data() {
   data() {
@@ -62,8 +53,8 @@ export default {
       }
       }
     };
     };
     const validatePassword = (rule, value, callback) => {
     const validatePassword = (rule, value, callback) => {
-      if (value.length < 6) {
-        callback(new Error("密码不少于6位"));
+      if (value.length == 0) {
+        callback(new Error("请输入密码"));
       } else {
       } else {
         callback();
         callback();
       }
       }
@@ -72,32 +63,33 @@ export default {
       // 表格绑定数据
       // 表格绑定数据
       loginForm: {
       loginForm: {
         username: "",
         username: "",
-        password: "",
+        password: ""
       },
       },
       // 校验规则
       // 校验规则
       loginRules: {
       loginRules: {
         username: [
         username: [
-          { required: true, trigger: "blur", validator: validateUsername },
+          { required: true, trigger: "blur", validator: validateUsername }
         ],
         ],
         password: [
         password: [
-          { required: true, trigger: "blur", validator: validatePassword },
-        ],
+          { required: true, trigger: "blur", validator: validatePassword }
+        ]
       },
       },
       // 加载中效果
       // 加载中效果
       loading: false,
       loading: false,
       // 密码显示隐藏控制
       // 密码显示隐藏控制
       passwordType: "password",
       passwordType: "password",
-      redirect: undefined,
+      redirect: undefined
     };
     };
   },
   },
   watch: {
   watch: {
     // 监听路由地址变化
     // 监听路由地址变化
-    $route: {
-      handler: function (route) {
-        this.redirect = route.query && route.query.redirect;
-      },
-      immediate: true,
-    },
+    // $route: {
+    //   handler: function(route) {
+    //     console.log(route);
+    //     this.redirect = route.query && route.query.redirect;
+    //   },
+    //   immediate: true
+    // }
   },
   },
   methods: {
   methods: {
     // 密码显示隐藏控制函数
     // 密码显示隐藏控制函数
@@ -115,7 +107,7 @@ export default {
     // 登录函数
     // 登录函数
     handleLogin() {
     handleLogin() {
       // 校验用户名密码是否符合验证规则
       // 校验用户名密码是否符合验证规则
-      this.$refs.loginForm.validate((valid) => {
+      this.$refs.loginForm.validate(valid => {
         // 符合验证规则
         // 符合验证规则
         if (valid) {
         if (valid) {
           this.loading = true;
           this.loading = true;
@@ -124,18 +116,23 @@ export default {
           let encryptor = new JSEncrypt(); // 新建JSEncrypt对象
           let encryptor = new JSEncrypt(); // 新建JSEncrypt对象
           encryptor.setPublicKey(publicKey); // 设置公钥
           encryptor.setPublicKey(publicKey); // 设置公钥
           let rsaPassWord = encryptor.encrypt(this.loginForm.password); // 对密码进行加密
           let rsaPassWord = encryptor.encrypt(this.loginForm.password); // 对密码进行加密
-          console.log(rsaPassWord);
+          // console.log(rsaPassWord);
           this.$store
           this.$store
             .dispatch("user/login", {
             .dispatch("user/login", {
               username: this.loginForm.username,
               username: this.loginForm.username,
-              password: rsaPassWord,
+              password: rsaPassWord
             })
             })
             .then(() => {
             .then(() => {
               this.$message({
               this.$message({
                 message: "登录成功",
                 message: "登录成功",
-                type: "success",
+                type: "success"
+              });
+              //   this.addrouters();
+              // console.log(this.$router.options.routes);
+              this.$router.push({
+                // path: this.redirect || "/home",
+                path: `${this.$store.state.user.roles[0]}`
               });
               });
-              this.$router.push({ path: this.redirect || "/home" });
               this.loading = false;
               this.loading = false;
             })
             })
             .catch(() => {
             .catch(() => {
@@ -150,7 +147,26 @@ export default {
         }
         }
       });
       });
     },
     },
-  },
+    addrouters() {
+      this.$store.state.user.roles.forEach(item => {
+        // console.log(item);
+        if (item == "home") {
+          router.addRoute("Layout", {
+            path: item,
+            name: item,
+            meta: { isAuth: true, keepAlive: true },
+            component: () => import(`@/views/${item}`)
+          });
+        }
+        router.addRoute("Layout", {
+          path: item,
+          name: item,
+          meta: { isAuth: true },
+          component: () => import(`@/views/${item}`)
+        });
+      });
+    }
+  }
 };
 };
 </script>
 </script>
 
 

+ 125 - 209
admin/src/views/order/index.vue

@@ -11,7 +11,7 @@
         <div class="order-top">
         <div class="order-top">
           <!-- 订单号筛选 -->
           <!-- 订单号筛选 -->
           <el-input
           <el-input
-            placeholder="请输入订单号"
+            placeholder="请输入订单号或房间号"
             style="width: 261px"
             style="width: 261px"
             clearable
             clearable
             v-model="value"
             v-model="value"
@@ -32,8 +32,7 @@
               start-placeholder="开始时间"
               start-placeholder="开始时间"
               end-placeholder="结束时间"
               end-placeholder="结束时间"
               @change="getData(1)"
               @change="getData(1)"
-            >
-            </el-date-picker>
+            ></el-date-picker>
           </div>
           </div>
 
 
           <!-- 支付时间筛选 -->
           <!-- 支付时间筛选 -->
@@ -47,26 +46,19 @@
               start-placeholder="开始时间"
               start-placeholder="开始时间"
               end-placeholder="结束时间"
               end-placeholder="结束时间"
               @change="getData(1)"
               @change="getData(1)"
-            >
-            </el-date-picker>
+            ></el-date-picker>
           </div>
           </div>
 
 
           <!-- 状态筛选 -->
           <!-- 状态筛选 -->
           <div class="state">
           <div class="state">
             <span>状态:</span>
             <span>状态:</span>
-            <el-select
-              v-model="state"
-              clearable
-              placeholder="请选择状态"
-              @change="getData(1)"
-            >
+            <el-select v-model="state" clearable placeholder="请选择状态" @change="getData(1)">
               <el-option
               <el-option
                 v-for="item in options"
                 v-for="item in options"
                 :key="item.value"
                 :key="item.value"
                 :value="item.value"
                 :value="item.value"
                 :label="item.label"
                 :label="item.label"
-              >
-              </el-option>
+              ></el-option>
             </el-select>
             </el-select>
           </div>
           </div>
 
 
@@ -89,86 +81,37 @@
               background: 'rgba(240, 243, 247, 1)',
               background: 'rgba(240, 243, 247, 1)',
             }"
             }"
           >
           >
-            <el-table-column
-              type="selection"
-              width="60"
-              align="center"
-            ></el-table-column>
+            <!-- <el-table-column type="selection" width="60" align="center"></el-table-column> -->
             <el-table-column
             <el-table-column
               prop="order.orderNo"
               prop="order.orderNo"
-              width="120"
+              width="180"
               label="订单号"
               label="订单号"
               align="center"
               align="center"
               show-overflow-tooltip
               show-overflow-tooltip
-            >
-            </el-table-column>
+            ></el-table-column>
 
 
             <el-table-column width="100" align="center" label="状态">
             <el-table-column width="100" align="center" label="状态">
-              <template slot-scope="{ row }">
-                {{ options[row.order.orderStatu].label }}
-              </template>
+              <template slot-scope="{ row }">{{ options[row.order.orderStatu].label }}</template>
             </el-table-column>
             </el-table-column>
 
 
-            <el-table-column
-              prop="order.roomNo"
-              width="160"
-              align="center"
-              label="房间"
-            >
-            </el-table-column>
-            <el-table-column
-              prop="electricity"
-              align="center"
-              width="130"
-              label="电费(元)"
-            >
-            </el-table-column>
-            <el-table-column
-              prop="water"
-              width="130"
-              align="center"
-              label="水费(元)"
-            >
-            </el-table-column>
-            <el-table-column
-              prop="imprest"
-              align="center"
-              width="150"
-              label="收预付款(元)"
-            >
-            </el-table-column>
-            <el-table-column
-              prop="refund"
-              width="150"
-              align="center"
-              label="退预付款(元)"
-            >
-            </el-table-column>
-            <el-table-column
-              prop="order.createTime"
-              width="180"
-              align="center"
-              label="创建时间"
-            >
+            <el-table-column prop="order.roomNo" width="160" align="center" label="房间"></el-table-column>
+            <el-table-column align="center" width="130" label="电费(元)">
+              <template slot-scope="{row}">{{row.allOfElectricPayment}}</template>
             </el-table-column>
             </el-table-column>
-            <el-table-column
-              prop="order.payTime"
-              width="180"
-              align="center"
-              label="支付时间"
-            >
+            <el-table-column width="130" align="center" label="水费(元)">
+              <template slot-scope="{ row }">{{ row.allOfWaterAmount }}</template>
             </el-table-column>
             </el-table-column>
+            <el-table-column prop="allOfReceiveAmount" align="center" width="150" label="收预付款(元)"></el-table-column>
+            <el-table-column prop="refundPayment" width="150" align="center" label="退预付款(元)"></el-table-column>
+            <el-table-column prop="order.createTime" width="180" align="center" label="创建时间"></el-table-column>
+            <el-table-column prop="order.payTime" width="180" align="center" label="支付时间"></el-table-column>
             <el-table-column prop="address" align="center" label="操作">
             <el-table-column prop="address" align="center" label="操作">
               <template slot-scope="{ row }">
               <template slot-scope="{ row }">
                 <!-- 详情按钮 -->
                 <!-- 详情按钮 -->
-                <span @click="handleEdit(row)" class="operate"> 详情 </span>
+                <span @click="handleEdit(row)" class="operate">详情</span>
 
 
                 <!-- 详情弹窗区域 -->
                 <!-- 详情弹窗区域 -->
-                <el-dialog
-                  title="订单详情"
-                  :visible.sync="dialogVisible"
-                  width="30%"
-                >
+                <el-dialog title="订单详情" :visible.sync="dialogVisible" width="30%">
                   <div class="userinfo">用户信息</div>
                   <div class="userinfo">用户信息</div>
                   <div class="info">
                   <div class="info">
                     <div class="user">
                     <div class="user">
@@ -228,46 +171,14 @@
                       background: 'rgba(240, 243, 247, 1)',
                       background: 'rgba(240, 243, 247, 1)',
                     }"
                     }"
                   >
                   >
-                    <el-table-column
-                      prop="startOfWater"
-                      width="100"
-                      label="始码"
-                      align="center"
-                    >
-                    </el-table-column>
+                    <el-table-column prop="startOfWater" width="100" label="始码" align="center"></el-table-column>
 
 
-                    <el-table-column
-                      prop="endOfWater"
-                      width="100"
-                      align="center"
-                      label="终码"
-                    >
-                    </el-table-column>
+                    <el-table-column prop="endOfWater" width="100" align="center" label="终码"></el-table-column>
 
 
-                    <el-table-column
-                      prop="waterVolume"
-                      align="center"
-                      label="水量(吨)"
-                    >
-                    </el-table-column>
-                    <el-table-column
-                      prop="priceOfWater"
-                      align="center"
-                      label="水价(元)"
-                    >
-                    </el-table-column>
-                    <el-table-column
-                      prop="allowance"
-                      align="center"
-                      label="补助量(吨)"
-                    >
-                    </el-table-column>
-                    <el-table-column
-                      prop="cost"
-                      align="center"
-                      label="产生水费(元)"
-                    >
-                    </el-table-column>
+                    <el-table-column prop="waterVolume" align="center" label="水量(吨)"></el-table-column>
+                    <el-table-column prop="priceOfWater" align="center" label="水价(元)"></el-table-column>
+                    <el-table-column prop="allowance" align="center" label="补助量(吨)"></el-table-column>
+                    <el-table-column prop="cost" align="center" label="产生水费(元)"></el-table-column>
                   </el-table>
                   </el-table>
 
 
                   <!-- 电费区域 -->
                   <!-- 电费区域 -->
@@ -287,57 +198,19 @@
                       background: 'rgba(240, 243, 247, 1)',
                       background: 'rgba(240, 243, 247, 1)',
                     }"
                     }"
                   >
                   >
-                    <el-table-column
-                      prop="startOfElectric"
-                      width="100"
-                      label="始码"
-                      align="center"
-                    >
-                    </el-table-column>
+                    <el-table-column prop="startOfElectric" width="100" label="始码" align="center"></el-table-column>
 
 
-                    <el-table-column
-                      prop="endOfElectric"
-                      width="100"
-                      align="center"
-                      label="终码"
-                    >
-                    </el-table-column>
+                    <el-table-column prop="endOfElectric" width="100" align="center" label="终码"></el-table-column>
 
 
-                    <el-table-column
-                      prop="electricVolume"
-                      align="center"
-                      label="电量(度)"
-                    >
-                    </el-table-column>
-                    <el-table-column
-                      prop="priceOfElectric"
-                      align="center"
-                      label="电价(元)"
-                    >
-                    </el-table-column>
-                    <el-table-column
-                      prop="allowance"
-                      align="center"
-                      label="补助量(度)"
-                    >
-                    </el-table-column>
-                    <el-table-column
-                      prop="cost"
-                      align="center"
-                      label="产生水费(元)"
-                    >
-                    </el-table-column>
+                    <el-table-column prop="electricVolume" align="center" label="电量(度)"></el-table-column>
+                    <el-table-column prop="priceOfElectric" align="center" label="电价(元)"></el-table-column>
+                    <el-table-column prop="allowance" align="center" label="补助量(度)"></el-table-column>
+                    <el-table-column prop="cost" align="center" label="产生水费(元)"></el-table-column>
                   </el-table>
                   </el-table>
                 </el-dialog>
                 </el-dialog>
 
 
                 <!-- 删除按钮 -->
                 <!-- 删除按钮 -->
-                <span
-                  v-if="row.order.orderStatu == 0"
-                  @click="handleDelete(row)"
-                  class="operate"
-                >
-                  删除
-                </span>
+                <span v-if="row.order.orderStatu == 0" @click="handleDelete(row)" class="operate">删除</span>
               </template>
               </template>
             </el-table-column>
             </el-table-column>
           </el-table>
           </el-table>
@@ -351,8 +224,7 @@
             :current-page="curPage"
             :current-page="curPage"
             layout="prev, pager, next, jumper"
             layout="prev, pager, next, jumper"
             :total="total"
             :total="total"
-          >
-          </el-pagination>
+          ></el-pagination>
         </div>
         </div>
       </div>
       </div>
     </el-card>
     </el-card>
@@ -362,6 +234,7 @@
 <script>
 <script>
 import FileSaver from "file-saver";
 import FileSaver from "file-saver";
 import * as XLSX from "xlsx";
 import * as XLSX from "xlsx";
+import dayjs from "dayjs";
 
 
 export default {
 export default {
   name: "Inform",
   name: "Inform",
@@ -375,28 +248,28 @@ export default {
       options: [
       options: [
         {
         {
           value: 0,
           value: 0,
-          label: "已取消",
+          label: "已取消"
         },
         },
         {
         {
           value: 1,
           value: 1,
-          label: "待支付",
+          label: "待支付"
         },
         },
         {
         {
           value: 2,
           value: 2,
-          label: "待入住",
+          label: "待入住"
         },
         },
         {
         {
           value: 3,
           value: 3,
-          label: "已入住",
+          label: "已入住"
         },
         },
         {
         {
           value: 4,
           value: 4,
-          label: "待结账",
+          label: "待结账"
         },
         },
         {
         {
           value: 5,
           value: 5,
-          label: "已完成",
-        },
+          label: "已完成"
+        }
       ],
       ],
       // 筛选状态绑定数据
       // 筛选状态绑定数据
       state: "",
       state: "",
@@ -416,7 +289,7 @@ export default {
       // 每页条数
       // 每页条数
       pageSize: 8,
       pageSize: 8,
       // 总条数
       // 总条数
-      total: null,
+      total: null
     };
     };
   },
   },
   mounted() {
   mounted() {
@@ -438,17 +311,33 @@ export default {
         curPage: this.curPage,
         curPage: this.curPage,
         pageSize: this.pageSize,
         pageSize: this.pageSize,
         statu: this.state,
         statu: this.state,
-        orderNo: this.value,
+        keyWord: this.value,
         payTime1: this.payTime[0],
         payTime1: this.payTime[0],
         payTime2: this.payTime[1],
         payTime2: this.payTime[1],
         createTime1: this.createTime[0],
         createTime1: this.createTime[0],
-        createTime2: this.createTime[1],
+        createTime2: this.createTime[1]
       };
       };
       let res = await this.API.hotelOrder.hotelOrderAdminPage(params);
       let res = await this.API.hotelOrder.hotelOrderAdminPage(params);
       // console.log(res);
       // console.log(res);
       if (res.success) {
       if (res.success) {
         this.tableData = res.data.list;
         this.tableData = res.data.list;
         this.total = res.data.totalCount;
         this.total = res.data.totalCount;
+        res.data.list.forEach(item => {
+          // 水费电费计算后的价格
+          if (item.orderBill) {
+            // item.order.waterMoney =
+            //   item.orderBill.priceOfWater *
+            //   (item.orderBill.endOfWater - item.orderBill.startOfWater);
+            // item.order.electricMoney =
+            //   item.orderBill.priceOfElectric *
+            //   (item.orderBill.endOfElectric - item.orderBill.startOfElectric);
+            // console.log(item.orderBill.finishTime);
+            // 支付时间转换
+            item.orderBill.finishTime = dayjs(item.orderBill.finishTime).format(
+              "YYYY-MM-DD HH:mm:ss"
+            );
+          }
+        });
       } else {
       } else {
         this.$message.error(res.message);
         this.$message.error(res.message);
       }
       }
@@ -456,47 +345,74 @@ export default {
 
 
     // 导出订单按钮回调
     // 导出订单按钮回调
     exportExcel() {
     exportExcel() {
-      // let selectId = ".selectTable";
-      // let execlTable = ".execlTable";
-      // if (this.selectionTable.length > 0) {
-      //   this.excel(selectId);
-      // } else {
-      //   this.excel(execlTable);
-      // }
+      let params = {
+        keyWord: this.value,
+        statu: this.state,
+        payTime1: this.payTime[0],
+        payTime2: this.payTime[1],
+        createTime1: this.createTime[0],
+        createTime2: this.createTime[1]
+      };
+      this.API.hotelOrder.downOrder(params).then(res => {
+        // console.log(res);
+        let name = `订单数据`;
+        var content = res;
+        // var data = new Blob([content],{type:"application/octet-stream;charset=utf-8"});
+        var data = new Blob([content], {
+          type: "application/vnd.ms-excel;charset=utf-8"
+        });
+        var downloadUrl = window.URL.createObjectURL(data);
+        var anchor = document.createElement("a");
+        anchor.href = downloadUrl;
+        anchor.download = name + ".xls";
+        anchor.click();
+        window.URL.revokeObjectURL(data);
+        if (res) {
+          this.$message.success("导出成功");
+        } else {
+          this.$message.error("导出失败");
+        }
+      });
     },
     },
 
 
     // 导出表格
     // 导出表格
-    excel(id) {
-      let xlsxParam = { raw: true };
-      /* generate workbook object from table */
-      let wb = XLSX.utils.table_to_book(document.querySelector(id));
-      /* get binary string as output */
-      let wbout = XLSX.write(wb, {
-        bookType: "xlsx",
-        bookSST: true,
-        type: "array",
-      });
-      try {
-        FileSaver.saveAs(
-          new Blob([wbout], { type: "application/octet-stream" }),
-          "订单管理.xlsx"
-        );
-      } catch (e) {
-        if (typeof console !== "undefined") console.log(e, wbout);
-      }
-      return wbout;
-    },
+    // excel(id) {
+    //   let xlsxParam = { raw: true };
+    //   /* generate workbook object from table */
+    //   let wb = XLSX.utils.table_to_book(document.querySelector(id));
+    //   /* get binary string as output */
+    //   let wbout = XLSX.write(wb, {
+    //     bookType: "xlsx",
+    //     bookSST: true,
+    //     type: "array"
+    //   });
+    //   try {
+    //     FileSaver.saveAs(
+    //       new Blob([wbout], { type: "application/octet-stream" }),
+    //       "订单管理.xlsx"
+    //     );
+    //   } catch (e) {
+    //     if (typeof console !== "undefined") console.log(e, wbout);
+    //   }
+    //   return wbout;
+    // },
 
 
     //详情按钮回调
     //详情按钮回调
     handleEdit(row) {
     handleEdit(row) {
-      console.log(row);
+      // console.log(row);
       this.order = row.order;
       this.order = row.order;
       this.waterTable = [];
       this.waterTable = [];
       this.electricTable = [];
       this.electricTable = [];
       if (row.orderBill) {
       if (row.orderBill) {
         let waterTemList = [];
         let waterTemList = [];
         let electricTemList = [];
         let electricTemList = [];
-
+        if (row.orderBill.priceOfWater == "0E-8") {
+          row.orderBill.priceOfWater = 0;
+          // console.log(row.orderBill.priceOfWater);
+        }
+        if (row.orderBill.priceOfElectric == "0E-8") {
+          row.orderBill.priceOfElectric = 0;
+        }
         waterTemList.push({
         waterTemList.push({
           startOfWater: row.orderBill.startOfWater,
           startOfWater: row.orderBill.startOfWater,
           endOfWater: row.orderBill.endOfWater,
           endOfWater: row.orderBill.endOfWater,
@@ -505,7 +421,7 @@ export default {
           allowance: null,
           allowance: null,
           cost:
           cost:
             row.orderBill.priceOfWater *
             row.orderBill.priceOfWater *
-            (row.orderBill.endOfWater - row.orderBill.startOfWater),
+            (row.orderBill.endOfWater - row.orderBill.startOfWater)
         });
         });
 
 
         electricTemList.push({
         electricTemList.push({
@@ -517,7 +433,7 @@ export default {
           allowance: null,
           allowance: null,
           cost:
           cost:
             row.orderBill.priceOfElectric *
             row.orderBill.priceOfElectric *
-            (row.orderBill.endOfElectric - row.orderBill.startOfElectric),
+            (row.orderBill.endOfElectric - row.orderBill.startOfElectric)
         });
         });
         this.waterTable = waterTemList;
         this.waterTable = waterTemList;
         this.electricTable = electricTemList;
         this.electricTable = electricTemList;
@@ -558,7 +474,7 @@ export default {
 
 
     // 多选框按钮操作
     // 多选框按钮操作
     handleSelectionChange(list) {
     handleSelectionChange(list) {
-      console.log(list);
+      // console.log(list);
       this.selectionTable = list;
       this.selectionTable = list;
     },
     },
 
 
@@ -567,8 +483,8 @@ export default {
       if (row.rowIndex % 2 != 0) {
       if (row.rowIndex % 2 != 0) {
         return { background: "rgba(240, 243, 247, 1)", "border-radius": "5px" };
         return { background: "rgba(240, 243, 247, 1)", "border-radius": "5px" };
       }
       }
-    },
-  },
+    }
+  }
 };
 };
 </script>
 </script>
 
 
@@ -620,7 +536,7 @@ export default {
         margin: 0 0 0 44px;
         margin: 0 0 0 44px;
         .el-date-editor {
         .el-date-editor {
           margin-left: 7px;
           margin-left: 7px;
-          width: 236px;
+          width: 215px;
           .el-range__icon {
           .el-range__icon {
             display: none;
             display: none;
           }
           }
@@ -695,8 +611,8 @@ export default {
                 overflow: hidden;
                 overflow: hidden;
                 .el-dialog {
                 .el-dialog {
                   width: 968px !important;
                   width: 968px !important;
-                  margin-top: 126px !important;
-                  height: 914px;
+                  margin-top: 80px !important;
+                  height: 880px;
                   opacity: 1;
                   opacity: 1;
                   background: rgba(255, 255, 255, 1);
                   background: rgba(255, 255, 255, 1);
                   box-shadow: none;
                   box-shadow: none;

+ 197 - 129
admin/src/views/stat/index.vue

@@ -11,21 +11,21 @@
         <!-- 筛选条件区域 -->
         <!-- 筛选条件区域 -->
         <div class="state">
         <div class="state">
           <div class="left">
           <div class="left">
+            <el-col :span="4" style="margin-right:10px">
+              <!-- <el-button type="primary" @click="getData">查询</el-button> -->
+              <span>筛选时间:</span>
+            </el-col>
             <el-col :span="20">
             <el-col :span="20">
               <el-date-picker
               <el-date-picker
                 v-model="searchValue"
                 v-model="searchValue"
-                type="daterange"
+                type="monthrange"
                 range-separator="至"
                 range-separator="至"
-                start-placeholder="开始日期"
-                end-placeholder="结束日期"
-                style="width: 260px"
-                value-format="yyyy-MM-dd"
-                @change="changeTime"
-              >
-              </el-date-picker>
-            </el-col>
-            <el-col :span="4">
-              <el-button type="primary">查询</el-button>
+                start-placeholder="开始月份"
+                end-placeholder="结束月份"
+                style="width: 350px"
+                value-format="yyyy-MM"
+                @change="getData"
+              ></el-date-picker>
             </el-col>
             </el-col>
           </div>
           </div>
           <div class="right">
           <div class="right">
@@ -36,9 +36,8 @@
         <div class="stat-table">
         <div class="stat-table">
           <el-table
           <el-table
             :data="tableData"
             :data="tableData"
-            max-height="576"
-            height="576"
             style="width: 1550px"
             style="width: 1550px"
+            max-height="512"
             stripe
             stripe
             :cell-style="rowbg"
             :cell-style="rowbg"
             :header-cell-style="{
             :header-cell-style="{
@@ -46,42 +45,38 @@
               background: 'rgba(240, 243, 247, 1)',
               background: 'rgba(240, 243, 247, 1)',
             }"
             }"
           >
           >
-            <el-table-column prop="time" align="center" label="时间">
-            </el-table-column>
+            <el-table-column prop="time" align="center" label="时间"></el-table-column>
 
 
-            <el-table-column prop="water" align="center" label="水费(元)">
-            </el-table-column>
+            <el-table-column prop="waterPayment" align="center" label="水费(元)"></el-table-column>
 
 
-            <el-table-column
-              prop="electricity"
-              align="center"
-              label="电费(元)"
-            >
-            </el-table-column>
+            <el-table-column prop="electricPayment" align="center" label="电费(元)"></el-table-column>
 
 
-            <el-table-column
-              prop="refund"
-              align="center"
-              label="退预付款(元)"
-            >
-            </el-table-column>
+            <el-table-column prop="refundPayment" align="center" label="退预付款(元)"></el-table-column>
 
 
-            <el-table-column prop="count" align="center" label="合计(元)">
-            </el-table-column>
+            <el-table-column prop="totalPayment" align="center" label="合计(元)"></el-table-column>
           </el-table>
           </el-table>
+          <div class="total">
+            <ul>
+              <li>合计/元</li>
+              <li>{{totalNum.waterTotalPayment}}</li>
+              <li>{{totalNum.electricTotalPayment}}</li>
+              <li>{{totalNum.refundTotalPayment}}</li>
+              <li>{{totalNum.tatolPayment}}</li>
+            </ul>
+          </div>
         </div>
         </div>
+
         <!-- 分页器区域 -->
         <!-- 分页器区域 -->
-        <div class="block">
-          <el-pagination
-            background
-            layout="prev, pager, next, jumper"
-            :current-page.sync="currentPage"
-            :page-size="pageSize"
-            :total="total"
-            @current-change="handleCurrentChange"
-          >
-          </el-pagination>
-        </div>
+      </div>
+      <div class="block">
+        <el-pagination
+          background
+          layout="prev, pager, next, jumper"
+          :current-page.sync="currentPage"
+          :page-size="pageSize"
+          :total="total"
+          @current-change="handleCurrentChange"
+        ></el-pagination>
       </div>
       </div>
     </el-card>
     </el-card>
   </div>
   </div>
@@ -92,74 +87,122 @@ export default {
   name: "stat",
   name: "stat",
   data() {
   data() {
     return {
     return {
+      totalNum: [],
       // 表格数据
       // 表格数据
-      tableData: [
-        {
-          time: "2022-07-20",
-          water: "50.00",
-          electricity: "50.00",
-          refund: "50.00",
-          count: "260.00",
-        },
-        {
-          time: "2022-08-20",
-          water: "60.00",
-          electricity: "66.00",
-          refund: "88.00",
-          count: "666.00",
-        },
-        {
-          time: "总计",
-          water: "60.00",
-          electricity: "66.00",
-          refund: "88.00",
-          count: "666.00",
-        },
-      ],
+      tableData: [],
       //  时间搜索框绑定数据
       //  时间搜索框绑定数据
-      searchValue: "",
+      searchValue: [],
       //   分页器当前页
       //   分页器当前页
       currentPage: 1,
       currentPage: 1,
       //   每页条数
       //   每页条数
-      pageSize: 8,
+      pageSize: 7,
       //   总条数
       //   总条数
-      total: 50,
+      total: 1
     };
     };
   },
   },
+  mounted() {
+    this.getData();
+  },
+  // watch: {
+  //   searchValue(newVal, oldVal) {
+  //     console.log(newVal);
+  //     if (!newVal) {
+  //       this.getData();
+  //     }
+  //   }
+  // },
   methods: {
   methods: {
-    // 时间搜索框数值改变触发回调
-    changeTime(val) {
-      console.log(val);
+    async getData() {
+      if (!this.searchValue) {
+        this.searchValue = ["", ""];
+      }
+      let params = {
+        curPage: this.currentPage,
+        pageSize: this.pageSize,
+        startTime: this.searchValue[0],
+        endTime: this.searchValue[1]
+      };
+
+      let res = await this.API.stat.queryReport(params);
+      // console.log(res);
+      this.totalNum = res.data;
+      if (res.success) {
+        this.tableData = res.data.page.list;
+        this.total = res.data.page.totalCount;
+      } else {
+        this.$message.error(res.message);
+      }
     },
     },
+    // 时间搜索框数值改变触发回调
+    // changeTime(val) {
+    //   console.log(val);
+    //   this.searchValue = val;
+    // },
     // 导出明细按钮回调
     // 导出明细按钮回调
     handleExport() {
     handleExport() {
-      this.$confirm("确定导出吗?", "提示", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning",
-      })
-        .then(() => {
-          this.$message.success("导出成功");
-        })
-        .catch(() => {
-          this.$message.info("已取消");
+      let params = {
+        startTime: this.searchValue[0],
+        endTime: this.searchValue[1]
+      };
+      this.API.stat.downLoadReport(params).then(res => {
+        // console.log(res);
+        let name = `统计报表数据`;
+        var content = res;
+        // var data = new Blob([content],{type:"application/octet-stream;charset=utf-8"});
+        var data = new Blob([content], {
+          type: "application/vnd.ms-excel;charset=utf-8"
         });
         });
+        var downloadUrl = window.URL.createObjectURL(data);
+        var anchor = document.createElement("a");
+        anchor.href = downloadUrl;
+        anchor.download = name + ".xlsx";
+        anchor.click();
+        window.URL.revokeObjectURL(data);
+        if (res) {
+          this.$message.success("导出成功");
+        } else {
+          this.$message.error("导出失败");
+        }
+      });
+      // this.$confirm("确定导出吗?", "提示", {
+      //   confirmButtonText: "确定",
+      //   cancelButtonText: "取消",
+      //   type: "warning"
+      // })
+      //   .then(() => {
+      //     let params = {
+      //       curPage: this.currentPage,
+      //       pageSize: this.pageSize,
+      //       startTime: this.searchValue[0],
+      //       endTime: this.searchValue[1]
+      //     };
+      //     this.API.stat.downLoadReport(params).then(res => {
+      //       console.log(res);
+      //       if (res) {
+      //         this.$message.success("导出成功");
+      //       }
+      //     });
+      //   })
+      //   .catch(() => {
+      //     this.$message.info("已取消");
+      //   });
     },
     },
     // 分页器换页回调
     // 分页器换页回调
     handleCurrentChange(value) {
     handleCurrentChange(value) {
-      console.log(value);
+      // console.log(value);
       this.currentPage = value;
       this.currentPage = value;
+      this.getData();
     },
     },
     // 表格样式设置回调
     // 表格样式设置回调
     rowbg(row) {
     rowbg(row) {
       if (row.rowIndex % 2 != 0) {
       if (row.rowIndex % 2 != 0) {
         return { background: "rgba(240, 243, 247, 1)", "border-radius": "5px" };
         return { background: "rgba(240, 243, 247, 1)", "border-radius": "5px" };
       }
       }
-      if (row.rowIndex == this.tableData.length - 1) {
-        return { fontWeight: "bold" };
-      }
-    },
-  },
+      // if (row.rowIndex == this.tableData.length - 1) {
+      //   return { fontWeight: "bold" };
+      // }
+    }
+  }
 };
 };
 </script>
 </script>
 
 
@@ -187,6 +230,7 @@ export default {
     }
     }
   }
   }
   .stat-body {
   .stat-body {
+    height: 82%;
     .state {
     .state {
       display: flex;
       display: flex;
       align-items: center;
       align-items: center;
@@ -222,59 +266,82 @@ export default {
           font-weight: 400;
           font-weight: 400;
         }
         }
       }
       }
+      .total {
+        width: 1550px;
+        height: 64px;
+
+        margin: 0 auto;
+        ul {
+          display: flex;
+          // justify-content: center;
+          list-style: none;
+          // align-items: center;
+          padding: 0;
+          li {
+            flex: 1;
+            height: 64px;
+            line-height: 64px;
+            text-align: center;
+            font-weight: bold;
+          }
+        }
+      }
     }
     }
-    .block {
-      height: 36px;
-      margin: 66px 29px 0 0;
-      float: right;
-      .el-pagination {
-        padding: 0;
-        button {
-          width: 36px;
+  }
+  .block {
+    height: 36px;
+    margin: 0 29px 0px 0;
+    float: right;
+    // position: absolute;
+    // bottom: 60px;
+    // right: 29px;
+    .el-pagination {
+      padding: 0;
+      button {
+        width: 36px;
+        background: #fff;
+        color: rgba(0, 0, 0, 1);
+        height: 36px;
+        font-size: 14px;
+        border: 1px solid rgba(112, 112, 112, 1);
+        border-radius: 8px;
+      }
+      ul {
+        .active {
+          background: #fff;
+          color: rgba(0, 97, 255, 1);
+          border: 1px solid rgba(0, 97, 255, 1);
+          box-sizing: border-box;
+        }
+        .el-icon {
+          border: none;
+        }
+        li {
           background: #fff;
           background: #fff;
           color: rgba(0, 0, 0, 1);
           color: rgba(0, 0, 0, 1);
+          width: 36px;
           height: 36px;
           height: 36px;
           font-size: 14px;
           font-size: 14px;
           border: 1px solid rgba(112, 112, 112, 1);
           border: 1px solid rgba(112, 112, 112, 1);
           border-radius: 8px;
           border-radius: 8px;
+          line-height: 36px;
         }
         }
-        ul {
-          .active {
-            background: #fff;
-            color: rgba(0, 97, 255, 1);
-            border: 1px solid rgba(0, 97, 255, 1);
-            box-sizing: border-box;
-          }
-          .el-icon {
-            border: none;
-          }
-          li {
-            background: #fff;
-            color: rgba(0, 0, 0, 1);
-            width: 36px;
-            height: 36px;
-            font-size: 14px;
-            border: 1px solid rgba(112, 112, 112, 1);
-            border-radius: 8px;
-            line-height: 36px;
-          }
-        }
-        .el-pagination__jump {
-          color: rgba(0, 0, 0, 1);
-          font-size: 16px;
-          margin-left: 10px;
-          font-weight: 400;
+      }
+      .el-pagination__jump {
+        color: rgba(0, 0, 0, 1);
+        font-size: 16px;
+        margin-left: 10px;
+        font-weight: 400;
+        height: 36px;
+        .el-input {
+          width: 65px;
           height: 36px;
           height: 36px;
-          .el-input {
+          margin: 0 10px;
+          input {
             width: 65px;
             width: 65px;
             height: 36px;
             height: 36px;
-            margin: 0 10px;
-            input {
-              width: 65px;
-              height: 36px;
-              border: 1px solid rgba(0, 0, 0, 1);
-              border-radius: 8px;
-            }
+            border: 1px solid rgba(0, 0, 0, 1);
+            border-radius: 8px;
           }
           }
         }
         }
       }
       }
@@ -287,6 +354,7 @@ export default {
   }
   }
   /deep/ .el-card__body {
   /deep/ .el-card__body {
     padding: 0;
     padding: 0;
+    height: 100%;
   }
   }
 }
 }
 </style>
 </style>

+ 30 - 37
admin/src/views/system/index.vue

@@ -18,17 +18,13 @@
             v-fo
             v-fo
             size="small"
             size="small"
             @blur="handleInputConfirm('imprestShow', 'inputValue_imprest')"
             @blur="handleInputConfirm('imprestShow', 'inputValue_imprest')"
-          >
-          </el-input>
+          ></el-input>
           <el-button
           <el-button
             v-else
             v-else
             class="button-new-tag"
             class="button-new-tag"
             size="small"
             size="small"
             @click="showInput('imprestShow', 'inputValue_imprest')"
             @click="showInput('imprestShow', 'inputValue_imprest')"
-          >
-            {{ inputValue_imprest }}
-          </el-button>
-          元
+          >{{ inputValue_imprest }}</el-button>元
         </div>
         </div>
 
 
         <!-- 预定天数区域 -->
         <!-- 预定天数区域 -->
@@ -40,21 +36,19 @@
             v-model="inputValue_reserve"
             v-model="inputValue_reserve"
             size="small"
             size="small"
             @blur="handleInputConfirm('reserveShow', 'inputValue_reserve')"
             @blur="handleInputConfirm('reserveShow', 'inputValue_reserve')"
-          >
-          </el-input>
+          ></el-input>
           <el-button
           <el-button
             v-else
             v-else
             class="button-new-tag"
             class="button-new-tag"
             size="small"
             size="small"
             @click="showInput('reserveShow', 'inputValue_reserve')"
             @click="showInput('reserveShow', 'inputValue_reserve')"
-          >
-            {{ inputValue_reserve }} </el-button
-          >天
+          >{{ inputValue_reserve }}</el-button>天
         </div>
         </div>
 
 
         <!-- 补助区域 -->
         <!-- 补助区域 -->
         <div>
         <div>
-          每人补助水量为<el-input
+          每人补助水量为
+          <el-input
             class="input-new-tag"
             class="input-new-tag"
             v-if="subsidyWaterShow"
             v-if="subsidyWaterShow"
             v-model="inputValue_subsidyWater"
             v-model="inputValue_subsidyWater"
@@ -63,16 +57,14 @@
             @blur="
             @blur="
               handleInputConfirm('subsidyWaterShow', 'inputValue_subsidyWater')
               handleInputConfirm('subsidyWaterShow', 'inputValue_subsidyWater')
             "
             "
-          >
-          </el-input>
+          ></el-input>
           <el-button
           <el-button
             v-else
             v-else
             class="button-new-tag"
             class="button-new-tag"
             size="small"
             size="small"
             @click="showInput('subsidyWaterShow', 'inputValue_subsidyWater')"
             @click="showInput('subsidyWaterShow', 'inputValue_subsidyWater')"
-          >
-            {{ inputValue_subsidyWater }} </el-button
-          >吨,每人补助电量为<el-input
+          >{{ inputValue_subsidyWater }}</el-button>吨,每人补助电量为
+          <el-input
             class="input-new-tag"
             class="input-new-tag"
             v-if="subsidyElectricityShow"
             v-if="subsidyElectricityShow"
             v-model="inputValue_subsidyElectricity"
             v-model="inputValue_subsidyElectricity"
@@ -84,8 +76,7 @@
                 'inputValue_subsidyElectricity'
                 'inputValue_subsidyElectricity'
               )
               )
             "
             "
-          >
-          </el-input>
+          ></el-input>
           <el-button
           <el-button
             v-else
             v-else
             class="button-new-tag"
             class="button-new-tag"
@@ -96,9 +87,7 @@
                 'inputValue_subsidyElectricity'
                 'inputValue_subsidyElectricity'
               )
               )
             "
             "
-          >
-            {{ inputValue_subsidyElectricity }} </el-button
-          >度
+          >{{ inputValue_subsidyElectricity }}</el-button>度
         </div>
         </div>
 
 
         <!-- 通知人区域 -->
         <!-- 通知人区域 -->
@@ -120,27 +109,25 @@
           >
           >
             {{ inputValue_inform }}
             {{ inputValue_inform }}
           </el-button>
           </el-button>
-        </div> -->
+        </div>-->
 
 
         <!-- 退房区域 -->
         <!-- 退房区域 -->
         <div>
         <div>
-          设置退房后<el-input
+          设置退房后
+          <el-input
             class="input-new-tag"
             class="input-new-tag"
             v-if="refundShow"
             v-if="refundShow"
             v-model="inputValue_refund"
             v-model="inputValue_refund"
             v-fo
             v-fo
             size="small"
             size="small"
             @blur="handleInputConfirm('refundShow', 'inputValue_refund')"
             @blur="handleInputConfirm('refundShow', 'inputValue_refund')"
-          >
-          </el-input>
+          ></el-input>
           <el-button
           <el-button
             v-else
             v-else
             class="button-new-tag"
             class="button-new-tag"
             size="small"
             size="small"
             @click="showInput('refundShow', 'inputValue_refund')"
             @click="showInput('refundShow', 'inputValue_refund')"
-          >
-            {{ inputValue_refund }} </el-button
-          >分钟,断水断电
+          >{{ inputValue_refund }}</el-button>分钟,断水断电
         </div>
         </div>
       </div>
       </div>
     </el-card>
     </el-card>
@@ -176,12 +163,13 @@ export default {
       // informShow: false,
       // informShow: false,
       // // 通知人绑定数据
       // // 通知人绑定数据
       // inputValue_inform: 7,
       // inputValue_inform: 7,
-
+      priceOfWater: 5, // 水费单价
+      priceOfElectric: 5, // 电费单价
       // 退房输入框按钮框切换控制
       // 退房输入框按钮框切换控制
       refundShow: false,
       refundShow: false,
       // 退房绑定数据
       // 退房绑定数据
       inputValue_refund: 8,
       inputValue_refund: 8,
-      id: "",
+      id: ""
     };
     };
   },
   },
   mounted() {
   mounted() {
@@ -198,6 +186,9 @@ export default {
         this.inputValue_subsidyWater = res.data.freeQuotaOfWater;
         this.inputValue_subsidyWater = res.data.freeQuotaOfWater;
         this.inputValue_subsidyElectricity = res.data.freeQuotaOfElectric;
         this.inputValue_subsidyElectricity = res.data.freeQuotaOfElectric;
         // this.inputValue_inform = res.data.deposit;
         // this.inputValue_inform = res.data.deposit;
+        // console.log(res.data.priceOfWater);
+        this.priceOfWater = res.data.priceOfWater;
+        this.priceOfElectric = res.data.priceOfElectric;
         this.inputValue_refund = res.data.turnOffTime;
         this.inputValue_refund = res.data.turnOffTime;
         this.id = res.data.id;
         this.id = res.data.id;
       } else {
       } else {
@@ -216,12 +207,14 @@ export default {
         id: this.id,
         id: this.id,
         deposit: this.inputValue_imprest,
         deposit: this.inputValue_imprest,
         preDay: this.inputValue_reserve,
         preDay: this.inputValue_reserve,
-        priceOfWater: 0,
-        priceOfElectric: 0,
+        priceOfWater: this.priceOfWater,
+        priceOfElectric: this.priceOfElectric,
         freeQuotaOfWater: this.inputValue_subsidyWater,
         freeQuotaOfWater: this.inputValue_subsidyWater,
         freeQuotaOfElectric: this.inputValue_subsidyElectricity,
         freeQuotaOfElectric: this.inputValue_subsidyElectricity,
-        freeTotal: 0,
-        turnOffTime: this.inputValue_refund,
+        freeTotal:
+          this.priceOfWater * this.inputValue_subsidyWater +
+          this.priceOfElectric * this.inputValue_subsidyElectricity,
+        turnOffTime: this.inputValue_refund
       };
       };
       let res = await this.API.systemSetup.systemnoticeUpdate(data);
       let res = await this.API.systemSetup.systemnoticeUpdate(data);
       // console.log(res);
       // console.log(res);
@@ -231,8 +224,8 @@ export default {
       } else {
       } else {
         this.$message.error(res.message);
         this.$message.error(res.message);
       }
       }
-    },
-  },
+    }
+  }
 };
 };
 </script>
 </script>