├── .browserslistrc ├── .gitignore ├── .prettierrc ├── LICENSE ├── README.md ├── babel.config.js ├── package-lock.json ├── package.json ├── postcss.config.js ├── public └── index.html ├── src ├── App.vue ├── api │ ├── category.js │ ├── checkin.js │ ├── checkout.js │ ├── employee.js │ ├── finance.js │ ├── login.js │ ├── position.js │ ├── room.js │ ├── roomtype.js │ ├── service.js │ └── uploadFile.js ├── assets │ ├── css │ │ ├── color-dark.css │ │ ├── icon.css │ │ ├── main.css │ │ └── theme-green │ │ │ ├── color-green.css │ │ │ ├── fonts │ │ │ ├── element-icons.ttf │ │ │ └── element-icons.woff │ │ │ └── index.css │ ├── img │ │ ├── 280.jpg │ │ ├── img.jpg │ │ ├── login-bg.jpg │ │ └── login.jpg │ └── logo.png ├── components │ ├── Pagenation │ │ └── index.vue │ ├── common │ │ ├── Header.vue │ │ ├── Home.vue │ │ ├── Sidebar.vue │ │ ├── Tags.vue │ │ ├── bus.js │ │ └── directives.js │ └── page │ │ ├── Cropper.vue │ │ ├── Dashboard.vue │ │ ├── Login.vue │ │ ├── Permission.vue │ │ └── updatePwd.vue ├── main.js ├── pub │ ├── checkin │ │ ├── addCheckin.vue │ │ ├── checkout.vue │ │ ├── details.vue │ │ ├── index.vue │ │ ├── updateDialog.vue │ │ └── updateroom.vue │ ├── checkout │ │ ├── details.vue │ │ └── index.vue │ ├── employee │ │ ├── addEmp.vue │ │ ├── addPosition.vue │ │ ├── employee.vue │ │ ├── index.vue │ │ ├── position.vue │ │ └── update.vue │ ├── finance │ │ └── index.vue │ ├── room │ │ ├── addRoomType.vue │ │ ├── addroom.vue │ │ ├── index.vue │ │ ├── room.vue │ │ └── roomtype.vue │ ├── roomservice │ │ ├── addService.vue │ │ ├── historyService.vue │ │ └── index.vue │ └── searchroom │ │ └── index.vue ├── router │ └── index.js ├── store │ ├── getters.js │ ├── index.js │ └── modules │ │ ├── app.js │ │ ├── menu.js │ │ ├── permission.js │ │ └── user.js ├── styles │ └── index.less └── utils │ ├── formateDate.js │ └── request.js └── vue.config.js /.browserslistrc: -------------------------------------------------------------------------------- 1 | > 1% 2 | last 2 versions 3 | not ie <= 8 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | example.html 5 | favicon.ico 6 | # local env files 7 | .env.local 8 | .env.*.local 9 | 10 | # Log files 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | 15 | # Editor directories and files 16 | .idea 17 | .vscode 18 | *.suo 19 | *.ntvs* 20 | *.njsproj 21 | *.sln 22 | *.sw* 23 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "tabWidth": 4, 3 | "singleQuote": true, 4 | "trailingComma": "none", 5 | "printWidth": 140 6 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019-2020 HotelManagement 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # hotelManegement 2 | 3 | 基于 Vue + Element UI 的酒店管理系统解决方案。前端仓库地址(https://github.com/mynameisly/HotelManagement.git) 4 | 5 | > fontend-manage(Vue + Element UI) + backend (springboot) 的版本正在开发中,仓库地址:[hotelManagement](http://120.24.186.190/XXX) 6 | 7 | ## 前言 8 | 9 | 酒店管理系统,基于 vue.js,使用 vue-cli3 脚手架,引用 Element UI 组件库,方便开发快速简洁好看的组件。分离颜色样式,支持手动切换主题色,而且很方便使用自定义主题色。 10 | 11 | ## 功能模块 12 | 13 | - [x] 登录/注销 14 | - [x] 员工管理 15 | - [x] 客房信息 16 | - [x] 入住信息 17 | - [x] 退房办理 18 | - [x] 客房服务 19 | - [x] 富文本编辑器 20 | - [x] 财务管理 21 | 22 | ## 安装步骤 23 | 24 | ``` 25 | git clone https://github.com/mynameisly/HotelManagement.git or download zip // 把模板下载到本地 26 | cd hotelManagement // 进入模板目录 27 | npm install // 安装项目依赖,等待安装完成之后,安装失败可用 cnpm 或 yarn 28 | 29 | // 开启服务器,浏览器访问 http://localhost:8080 30 | npm run serve 31 | 32 | // 执行构建命令,生成的dist文件夹放在服务器下即可访问 33 | npm run build 34 | ``` 35 | 36 | ## 其他注意事项 37 | 38 | ### 一、如何切换主题色呢? 39 | 40 | 第一步:打开 src/main.js 文件,找到引入 element 样式的地方,换成浅绿色主题。 41 | 42 | ```javascript 43 | import 'element-ui/lib/theme-default/index.css'; // 默认主题 44 | // import './assets/css/theme-green/index.css'; // 浅绿色主题 45 | ``` 46 | 47 | 第二步:打开 src/App.vue 文件,找到 style 标签引入样式的地方,切换成浅绿色主题。 48 | 49 | ```javascript 50 | @import "./assets/css/main.css"; 51 | @import "./assets/css/color-dark.css"; /*深色主题*/ 52 | /*@import "./assets/css/theme-green/color-green.css"; !*浅绿色主题*!*/ 53 | ``` 54 | 55 | 第三步:打开 src/components/common/Sidebar.vue 文件,找到 el-menu 标签,把 background-color/text-color/active-text-color 属性去掉即可。 56 | 57 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@vue/app' 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-manage-system", 3 | "version": "4.2.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "npm run serve", 7 | "serve": "vue-cli-service serve", 8 | "build": "vue-cli-service build" 9 | }, 10 | "dependencies": { 11 | "axios": "^0.18.0", 12 | "babel-polyfill": "^6.26.0", 13 | "element-ui": "^2.11.0", 14 | "less": "^3.11.1", 15 | "vue": "^2.6.10", 16 | "vue-cropperjs": "^3.0.0", 17 | "vue-router": "^3.0.3", 18 | "vue-schart": "^2.0.0", 19 | "vuex": "^3.1.2" 20 | }, 21 | "devDependencies": { 22 | "@vue/cli-plugin-babel": "^3.9.0", 23 | "@vue/cli-service": "^3.9.0", 24 | "less-loader": "^5.0.0", 25 | "vue-template-compiler": "^2.6.10" 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | autoprefixer: {} 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 酒店管理系统 11 | 12 | 13 | 16 |
17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /src/api/category.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | // 查询分类列表 4 | export const getCategoryList = params => { return request({ url: '/HotelManagement/json/category/list', method: 'get', params: params }) } 5 | 6 | // 新增分类 7 | export const addCategory = params => { return request({ url: '/HotelManagement/json/category/add', method: 'post', params: params }) } 8 | 9 | // 修改分类 10 | export const updateCategory = params => { return request({ url: '/HotelManagement/json/category/update', method: 'put', params: params }) } 11 | 12 | // 删除分类 13 | export const delCategory = categoryId => { return request({ url: '/HotelManagement/json/category/delete?categoryId=' + categoryId, method: 'delete', params: categoryId }) } 14 | -------------------------------------------------------------------------------- /src/api/checkin.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | // 查询入住列表 4 | export const getCheckinList = params => { return request({ url: '/HotelManagement/json/checkin/list', method: 'get', params: params }) } 5 | 6 | // 新增入住列表 7 | export const addCheckin = (params,headers) => { return request({ url: '/HotelManagement/json/checkin/add', method: 'post', data: params, headers: headers }) } 8 | 9 | // 根据ID查询入住列表 10 | export const getCheckinById = CheckinId => { return request({ url: '/HotelManagement/json/checkin/getCheckinById?checkinId=' + CheckinId, method: 'get', params: CheckinId }) } 11 | 12 | // 修改入住天数 13 | export const updateCheckin = params => { return request({ url: '/HotelManagement/json/checkin/update', method: 'put', params: params }) } 14 | 15 | // 换房 16 | export const updateRoom = params => { return request({ url: '/HotelManagement/json/checkin/updateRoom', method: 'put', params: params }) } -------------------------------------------------------------------------------- /src/api/checkout.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | // 查询退房记录列表 4 | export const getCheckoutList = params => { return request({ url: '/HotelManagement/json/checkout/list', method: 'get', params: params }) } 5 | 6 | // 根据ID查询退房记录 7 | export const getCheckoutById = checkoutId => { return request({ url: '/HotelManagement/json/checkout/getCheckoutById?checkoutId=' + checkoutId, method: 'get', params: checkoutId }) } 8 | 9 | // 退房 10 | export const addCheckout = params => { return request({ url: '/HotelManagement/json/checkout/add', method: 'post', params: params }) } -------------------------------------------------------------------------------- /src/api/employee.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | // 员工查询 3 | export const getempList = params => { return request({ url: '/HotelManagement/json/employee/list', method: 'get', params: params }) } 4 | 5 | // 新增员工 6 | export const addemp = params => { return request({ url: '/HotelManagement/json/employee/add', method: 'post', params: params }) } 7 | 8 | // 根据员工ID查询员工信息 9 | export const getEmployeeById = employeeId => { return request({ url: '/HotelManagement/json/employee/getEmployeeById?employeeId=' + employeeId , method: 'get', params: employeeId }) } 10 | 11 | // 修改员工信息 12 | export const update = params => { return request({ url: '/HotelManagement/json/employee/update', method: 'put', params: params }) } 13 | 14 | // 重置密码 15 | export const resetPassword = employeeId => { return request({ url: '/HotelManagement/json/employee/resetPassword?employeeId=' + employeeId, method: 'put', params: employeeId }) } 16 | 17 | // 修改密码 18 | export const updatePassword = params => { return request({ url: '/HotelManagement/json/employee/updatePassword', method: 'put', params: params }) } 19 | 20 | // 删除员工 21 | export const delemp = employeeId => { return request({ url: '/HotelManagement/json/employee/delete?employeeId=' + employeeId, method: 'delete', params: employeeId }) } 22 | -------------------------------------------------------------------------------- /src/api/finance.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | // 财务核算 4 | export const getfinList = params => { return request({ url: '/HotelManagement/json/finance/check', method: 'get', params: params }) } 5 | -------------------------------------------------------------------------------- /src/api/login.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | // 登录 3 | export const login = params => { return request({ url: '/HotelManagement/json/login/direct', method: 'get', params: params }) } 4 | // 退出登录 5 | export const loginout = params => { return request({ url: '/HotelManagement/json/login/out', method: 'get', params: params }) } 6 | // 获取当前登录用户的信息 7 | export const getLoginEmployee = params => { return request({ url: '/HotelManagement/json/login/getLoginEmployee', method: 'get', params: params }) } -------------------------------------------------------------------------------- /src/api/position.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | // 职位查询 3 | export const getPositionList = params => { return request({ url: '/HotelManagement/json/position/list', method: 'get', params: params }) } 4 | 5 | // 职位新增 6 | export const addPosition = params => { return request({ url: '/HotelManagement/json/position/add', method: 'post', params: params }) } 7 | 8 | // 职位修改 9 | export const updatePosition = params => { return request({ url: '/HotelManagement/json/position/update', method: 'put', params: params }) } 10 | 11 | // 职位删除 12 | export const deletePosition = positionId => { return request({ url: '/HotelManagement/json/position/delete?positionId=' + positionId, method: 'delete', params: positionId }) } -------------------------------------------------------------------------------- /src/api/room.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | // 查询客房列表 4 | export const getroomList = params => { return request({ url: '/HotelManagement/json/room/list', method: 'get', params: params }) } 5 | 6 | // 新增客房列表 7 | export const addroom = params => { return request({ url: '/HotelManagement/json/room/add', method: 'post', params: params }) } 8 | 9 | // 根据ID查询客房列表 10 | export const getroomById = roomId => { return request({ url: '/HotelManagement/json/room/getRoomById?roomId=' + roomId, method: 'get', params: roomId }) } 11 | 12 | // 修改客房列表 13 | export const updateroom = params => { return request({ url: '/HotelManagement/json/room/update', method: 'put', params: params }) } 14 | 15 | // 删除客房列表 16 | export const delroom = roomId => { return request({ url: '/HotelManagement/json/room/delete?roomId=' + roomId, method: 'delete', params: roomId }) } -------------------------------------------------------------------------------- /src/api/roomtype.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | // 查询客房类型列表 3 | export const getRoomTypeList = params => { return request({ url: '/HotelManagement/json/roomType/list', method: 'get', params: params }) } 4 | 5 | // 新增客房类型列表 6 | export const addRoomType = params => { return request({ url: '/HotelManagement/json/roomType/add', method: 'post', params: params }) } 7 | 8 | // 根据ID查询客房类型列表 9 | export const getRoomTypeById = roomTypeId => { return request({ url: '/HotelManagement/json/roomType/getRoomTypeById?roomTypeId=' + roomTypeId, method: 'get', params: roomTypeId }) } 10 | 11 | // 查询所有客房类型简要信息列表 12 | export const getAllRoomTypeList = params => { return request({ url: '/HotelManagement/json/roomType/listAll', method: 'get', params: params }) } 13 | 14 | // 修改客房类型列表 15 | export const updateRoomType = params => { return request({ url: '/HotelManagement/json/roomType/update', method: 'put', params: params }) } 16 | 17 | // 删除客房类型列表 18 | export const delRoomType = roomTypeId => { return request({ url: '/HotelManagement/json/roomType/delete?roomTypeId=' + roomTypeId, method: 'delete', params: roomTypeId }) } -------------------------------------------------------------------------------- /src/api/service.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | // 查询正在进行的客房服务列表 4 | export const getServiceList = params => { return request({ url: '/HotelManagement/json/customerService/list', method: 'get', params: params }) } 5 | 6 | // 查询客房服务历史记录列表 7 | export const getServiceHistoryList = params => { return request({ url: '/HotelManagement/json/customerService/listHistory', method: 'get', params: params }) } 8 | 9 | // 新增客房服务列表 10 | export const addService = params => { return request({ url: '/HotelManagement/json/customerService/add', method: 'post', params: params }) } 11 | 12 | // 完成客房服务 13 | export const finishService = id => { return request({ url: '/HotelManagement/json/customerService/finishService?id=' + id, method: 'put', params: id }) } 14 | 15 | // 修改客房服务列表 16 | export const updateService = params => { return request({ url: '/HotelManagement/json/customerService/update', method: 'put', params: params }) } 17 | 18 | // 删除客房服务列表 19 | export const delService = customerServiceId => { return request({ url: '/HotelManagement/json/customerService/delete?customerServiceId=' + customerServiceId, method: 'delete', params: customerServiceId }) } -------------------------------------------------------------------------------- /src/api/uploadFile.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | // 查询客房列表 3 | export const uploadFile = (params,headers) => { return request({ url: '/HotelManagement/json/file/add', method: 'post', data: params, headers:headers }) } -------------------------------------------------------------------------------- /src/assets/css/color-dark.css: -------------------------------------------------------------------------------- 1 | .header{ 2 | background-color: #242f42; 3 | } 4 | .login-wrap{ 5 | background: #324157; 6 | } 7 | .plugins-tips{ 8 | background: #eef1f6; 9 | } 10 | .plugins-tips a{ 11 | color: #20a0ff; 12 | } 13 | .el-upload--text em { 14 | color: #20a0ff; 15 | } 16 | .pure-button{ 17 | background: #20a0ff; 18 | } 19 | .tags-li.active { 20 | border: 1px solid #409EFF; 21 | background-color: #409EFF; 22 | } 23 | .message-title{ 24 | color: #20a0ff; 25 | } 26 | .collapse-btn:hover{ 27 | background: rgb(40,52,70); 28 | } -------------------------------------------------------------------------------- /src/assets/css/icon.css: -------------------------------------------------------------------------------- 1 | 2 | [class*=" el-icon-lx"], [class^=el-icon-lx] { 3 | font-family: lx-iconfont!important; 4 | } -------------------------------------------------------------------------------- /src/assets/css/main.css: -------------------------------------------------------------------------------- 1 | * { 2 | margin: 0; 3 | padding: 0; 4 | } 5 | 6 | html, 7 | body, 8 | #app, 9 | .wrapper { 10 | width: 100%; 11 | height: 100%; 12 | overflow: hidden; 13 | } 14 | 15 | body { 16 | font-family: 'PingFang SC', "Helvetica Neue", Helvetica, "microsoft yahei", arial, STHeiTi, sans-serif; 17 | } 18 | 19 | a { 20 | text-decoration: none 21 | } 22 | 23 | 24 | .content-box { 25 | position: absolute; 26 | left: 250px; 27 | right: 0; 28 | top: 70px; 29 | bottom: 0; 30 | padding-bottom: 30px; 31 | -webkit-transition: left .3s ease-in-out; 32 | transition: left .3s ease-in-out; 33 | background: #f0f0f0; 34 | } 35 | 36 | .content { 37 | width: auto; 38 | height: 100%; 39 | padding: 10px; 40 | overflow-y: scroll; 41 | box-sizing: border-box; 42 | } 43 | 44 | .content-collapse { 45 | left: 65px; 46 | } 47 | 48 | .container { 49 | padding: 30px; 50 | background: #fff; 51 | border: 1px solid #ddd; 52 | border-radius: 5px; 53 | } 54 | 55 | .crumbs { 56 | margin: 10px 0; 57 | } 58 | 59 | .el-table th { 60 | background-color: #f5f7fa !important; 61 | } 62 | 63 | .pagination { 64 | margin: 20px 0; 65 | text-align: right; 66 | } 67 | 68 | .plugins-tips { 69 | padding: 20px 10px; 70 | margin-bottom: 20px; 71 | } 72 | 73 | .el-button+.el-tooltip { 74 | margin-left: 10px; 75 | } 76 | 77 | .el-table tr:hover { 78 | background: #f6faff; 79 | } 80 | 81 | .mgb20 { 82 | margin-bottom: 20px; 83 | } 84 | 85 | .move-enter-active, 86 | .move-leave-active { 87 | transition: opacity .5s; 88 | } 89 | 90 | .move-enter, 91 | .move-leave { 92 | opacity: 0; 93 | } 94 | 95 | /*BaseForm*/ 96 | 97 | .form-box { 98 | width: 600px; 99 | } 100 | 101 | .form-box .line { 102 | text-align: center; 103 | } 104 | 105 | .el-time-panel__content::after, 106 | .el-time-panel__content::before { 107 | margin-top: -7px; 108 | } 109 | 110 | .el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default) { 111 | padding-bottom: 0; 112 | } 113 | 114 | /*Upload*/ 115 | 116 | .pure-button { 117 | width: 150px; 118 | height: 40px; 119 | line-height: 40px; 120 | text-align: center; 121 | color: #fff; 122 | border-radius: 3px; 123 | } 124 | 125 | .g-core-image-corp-container .info-aside { 126 | height: 45px; 127 | } 128 | 129 | .el-upload--text { 130 | background-color: #fff; 131 | border: 1px dashed #d9d9d9; 132 | border-radius: 6px; 133 | box-sizing: border-box; 134 | width: 360px; 135 | height: 180px; 136 | text-align: center; 137 | cursor: pointer; 138 | position: relative; 139 | overflow: hidden; 140 | } 141 | 142 | .el-upload--text .el-icon-upload { 143 | font-size: 67px; 144 | color: #97a8be; 145 | margin: 40px 0 16px; 146 | line-height: 50px; 147 | } 148 | 149 | .el-upload--text { 150 | color: #97a8be; 151 | font-size: 14px; 152 | text-align: center; 153 | } 154 | 155 | .el-upload--text em { 156 | font-style: normal; 157 | } 158 | 159 | /*VueEditor*/ 160 | 161 | .ql-container { 162 | min-height: 400px; 163 | } 164 | 165 | .ql-snow .ql-tooltip { 166 | transform: translateX(117.5px) translateY(10px) !important; 167 | } 168 | 169 | .editor-btn { 170 | margin-top: 20px; 171 | } 172 | 173 | /*markdown*/ 174 | 175 | .v-note-wrapper .v-note-panel { 176 | min-height: 500px; 177 | } -------------------------------------------------------------------------------- /src/assets/css/theme-green/color-green.css: -------------------------------------------------------------------------------- 1 | .header{ 2 | background-color: #07c4a8; 3 | } 4 | .login-wrap{ 5 | background: rgba(56, 157, 170, 0.82);; 6 | } 7 | .plugins-tips{ 8 | background: #f2f2f2; 9 | } 10 | .plugins-tips a{ 11 | color: #00d1b2; 12 | } 13 | .el-upload--text em { 14 | color: #00d1b2; 15 | } 16 | .pure-button{ 17 | background: #00d1b2; 18 | } 19 | .pagination > .active > a, .pagination > .active > a:hover, .pagination > .active > a:focus, .pagination > .active > span, .pagination > .active > span:hover, .pagination > .active > span:focus { 20 | background-color: #00d1b2 !important; 21 | border-color: #00d1b2 !important; 22 | } 23 | .tags-li.active { 24 | border: 1px solid #00d1b2; 25 | background-color: #00d1b2; 26 | } 27 | .collapse-btn:hover{ 28 | background: #00d1b2; 29 | } -------------------------------------------------------------------------------- /src/assets/css/theme-green/fonts/element-icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mynameisly/HotelManagement/a2c2179d7dcb06e8f83e523aabd9eba14d70bcce/src/assets/css/theme-green/fonts/element-icons.ttf -------------------------------------------------------------------------------- /src/assets/css/theme-green/fonts/element-icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mynameisly/HotelManagement/a2c2179d7dcb06e8f83e523aabd9eba14d70bcce/src/assets/css/theme-green/fonts/element-icons.woff -------------------------------------------------------------------------------- /src/assets/img/280.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mynameisly/HotelManagement/a2c2179d7dcb06e8f83e523aabd9eba14d70bcce/src/assets/img/280.jpg -------------------------------------------------------------------------------- /src/assets/img/img.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mynameisly/HotelManagement/a2c2179d7dcb06e8f83e523aabd9eba14d70bcce/src/assets/img/img.jpg -------------------------------------------------------------------------------- /src/assets/img/login-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mynameisly/HotelManagement/a2c2179d7dcb06e8f83e523aabd9eba14d70bcce/src/assets/img/login-bg.jpg -------------------------------------------------------------------------------- /src/assets/img/login.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mynameisly/HotelManagement/a2c2179d7dcb06e8f83e523aabd9eba14d70bcce/src/assets/img/login.jpg -------------------------------------------------------------------------------- /src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mynameisly/HotelManagement/a2c2179d7dcb06e8f83e523aabd9eba14d70bcce/src/assets/logo.png -------------------------------------------------------------------------------- /src/components/Pagenation/index.vue: -------------------------------------------------------------------------------- 1 | 16 | 40 | 46 | 47 | -------------------------------------------------------------------------------- /src/components/common/Header.vue: -------------------------------------------------------------------------------- 1 | 40 | 142 | 143 | 206 | -------------------------------------------------------------------------------- /src/components/common/Home.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 52 | 53 | -------------------------------------------------------------------------------- /src/components/common/Sidebar.vue: -------------------------------------------------------------------------------- 1 | 51 | 52 | 178 | 179 | 198 | -------------------------------------------------------------------------------- /src/components/common/Tags.vue: -------------------------------------------------------------------------------- 1 | 24 | 25 | 113 | 114 | 115 | 187 | -------------------------------------------------------------------------------- /src/components/common/bus.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | 3 | // 使用 Event Bus 4 | const bus = new Vue(); 5 | 6 | export default bus; -------------------------------------------------------------------------------- /src/components/common/directives.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | 3 | // v-dialogDrag: 弹窗拖拽属性 4 | Vue.directive('dialogDrag', { 5 | bind(el, binding, vnode, oldVnode) { 6 | const dialogHeaderEl = el.querySelector('.el-dialog__header'); 7 | const dragDom = el.querySelector('.el-dialog'); 8 | 9 | dialogHeaderEl.style.cssText += ';cursor:move;' 10 | dragDom.style.cssText += ';top:0px;' 11 | 12 | // 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null); 13 | const sty = (() => { 14 | if (window.document.currentStyle) { 15 | return (dom, attr) => dom.currentStyle[attr]; 16 | } else { 17 | return (dom, attr) => getComputedStyle(dom, false)[attr]; 18 | } 19 | })() 20 | 21 | dialogHeaderEl.onmousedown = (e) => { 22 | // 鼠标按下,计算当前元素距离可视区的距离 23 | const disX = e.clientX - dialogHeaderEl.offsetLeft; 24 | const disY = e.clientY - dialogHeaderEl.offsetTop; 25 | 26 | const screenWidth = document.body.clientWidth; // body当前宽度 27 | const screenHeight = document.documentElement.clientHeight; // 可见区域高度(应为body高度,可某些环境下无法获取) 28 | 29 | const dragDomWidth = dragDom.offsetWidth; // 对话框宽度 30 | const dragDomheight = dragDom.offsetHeight; // 对话框高度 31 | 32 | const minDragDomLeft = dragDom.offsetLeft; 33 | const maxDragDomLeft = screenWidth - dragDom.offsetLeft - dragDomWidth; 34 | 35 | const minDragDomTop = dragDom.offsetTop; 36 | const maxDragDomTop = screenHeight - dragDom.offsetTop - dragDomheight; 37 | 38 | 39 | // 获取到的值带px 正则匹配替换 40 | let styL = sty(dragDom, 'left'); 41 | let styT = sty(dragDom, 'top'); 42 | 43 | // 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px 44 | if (styL.includes('%')) { 45 | styL = +document.body.clientWidth * (+styL.replace(/\%/g, '') / 100); 46 | styT = +document.body.clientHeight * (+styT.replace(/\%/g, '') / 100); 47 | } else { 48 | styL = +styL.replace(/\px/g, ''); 49 | styT = +styT.replace(/\px/g, ''); 50 | }; 51 | 52 | document.onmousemove = function (e) { 53 | // 通过事件委托,计算移动的距离 54 | let left = e.clientX - disX; 55 | let top = e.clientY - disY; 56 | 57 | // 边界处理 58 | if (-(left) > minDragDomLeft) { 59 | left = -(minDragDomLeft); 60 | } else if (left > maxDragDomLeft) { 61 | left = maxDragDomLeft; 62 | } 63 | 64 | if (-(top) > minDragDomTop) { 65 | top = -(minDragDomTop); 66 | } else if (top > maxDragDomTop) { 67 | top = maxDragDomTop; 68 | } 69 | 70 | // 移动当前元素 71 | dragDom.style.cssText += `;left:${left + styL}px;top:${top + styT}px;`; 72 | }; 73 | 74 | document.onmouseup = function (e) { 75 | document.onmousemove = null; 76 | document.onmouseup = null; 77 | }; 78 | } 79 | } 80 | }) 81 | -------------------------------------------------------------------------------- /src/components/page/Cropper.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 81 | 82 | -------------------------------------------------------------------------------- /src/components/page/Dashboard.vue: -------------------------------------------------------------------------------- 1 | 50 | 51 | 93 | 94 | 95 | 205 | -------------------------------------------------------------------------------- /src/components/page/Login.vue: -------------------------------------------------------------------------------- 1 | 28 | 29 | 119 | 120 | -------------------------------------------------------------------------------- /src/components/page/Permission.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 24 | 25 | -------------------------------------------------------------------------------- /src/components/page/updatePwd.vue: -------------------------------------------------------------------------------- 1 | 37 | 38 | 92 | 93 | 112 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import App from './App.vue'; 3 | import router from './router'; 4 | import ElementUI from 'element-ui'; 5 | import '@/styles/index.less' // global css 6 | import 'element-ui/lib/theme-chalk/index.css'; // 默认主题 7 | // import './assets/css/theme-green/index.css'; // 浅绿色主题 8 | import './assets/css/icon.css'; 9 | import './components/common/directives'; 10 | import 'babel-polyfill'; 11 | import store from './store' 12 | 13 | Vue.config.productionTip = false; 14 | Vue.use(ElementUI, { 15 | size: 'small' 16 | }); 17 | 18 | //使用钩子函数对路由进行权限跳转 19 | // router.beforeEach((to, from, next) => { 20 | // document.title = `${to.meta.title} | HotelManagement`; 21 | // const role = localStorage.getItem('ms_username'); 22 | // if (!role && to.path !== '/login') { 23 | // next('/login'); 24 | // } else if (to.meta.permission) { 25 | // // 如果是管理员权限则可进入,这里只是简单的模拟管理员权限而已 26 | // role === 'admin' ? next() : next('/403'); 27 | // } else { 28 | // // 简单的判断IE10及以下不进入富文本编辑器,该组件不兼容 29 | // if (navigator.userAgent.indexOf('MSIE') > -1 && to.path === '/editor') { 30 | // Vue.prototype.$alert('vue-quill-editor组件不兼容IE10及以下浏览器,请使用更高版本的浏览器查看', '浏览器不兼容通知', { 31 | // confirmButtonText: '确定' 32 | // }); 33 | // } else { 34 | // next(); 35 | // } 36 | // } 37 | // }); 38 | 39 | new Vue({ 40 | router, 41 | store, 42 | render: h => h(App) 43 | }).$mount('#app'); 44 | -------------------------------------------------------------------------------- /src/pub/checkin/addCheckin.vue: -------------------------------------------------------------------------------- 1 | 96 | 97 | 248 | 249 | 252 | -------------------------------------------------------------------------------- /src/pub/checkin/checkout.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 60 | 61 | 64 | -------------------------------------------------------------------------------- /src/pub/checkin/details.vue: -------------------------------------------------------------------------------- 1 | 84 | 85 | 136 | 137 | 140 | -------------------------------------------------------------------------------- /src/pub/checkin/index.vue: -------------------------------------------------------------------------------- 1 | 120 | 121 | 333 | 334 | 337 | -------------------------------------------------------------------------------- /src/pub/checkin/updateDialog.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 67 | 68 | 71 | -------------------------------------------------------------------------------- /src/pub/checkin/updateroom.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 95 | 96 | 99 | -------------------------------------------------------------------------------- /src/pub/checkout/details.vue: -------------------------------------------------------------------------------- 1 | 88 | 89 | 131 | 132 | 135 | -------------------------------------------------------------------------------- /src/pub/checkout/index.vue: -------------------------------------------------------------------------------- 1 | 86 | 87 | 208 | 209 | 212 | -------------------------------------------------------------------------------- /src/pub/employee/addEmp.vue: -------------------------------------------------------------------------------- 1 | 58 | 59 | 205 | 206 | // 239 | 240 | 265 | -------------------------------------------------------------------------------- /src/pub/employee/addPosition.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 73 | 74 | 77 | -------------------------------------------------------------------------------- /src/pub/employee/employee.vue: -------------------------------------------------------------------------------- 1 | 87 | 88 | 247 | 248 | 251 | -------------------------------------------------------------------------------- /src/pub/employee/index.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 42 | -------------------------------------------------------------------------------- /src/pub/employee/position.vue: -------------------------------------------------------------------------------- 1 | 62 | 63 | 177 | 178 | 181 | -------------------------------------------------------------------------------- /src/pub/employee/update.vue: -------------------------------------------------------------------------------- 1 | 65 | 66 | 220 | 221 | 254 | -------------------------------------------------------------------------------- /src/pub/finance/index.vue: -------------------------------------------------------------------------------- 1 | 48 | 49 | 152 | 153 | 159 | -------------------------------------------------------------------------------- /src/pub/room/addRoomType.vue: -------------------------------------------------------------------------------- 1 | 70 | 71 | 194 | 195 | 198 | -------------------------------------------------------------------------------- /src/pub/room/addroom.vue: -------------------------------------------------------------------------------- 1 | 88 | 89 | 244 | 245 | 248 | -------------------------------------------------------------------------------- /src/pub/room/index.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 42 | -------------------------------------------------------------------------------- /src/pub/room/roomtype.vue: -------------------------------------------------------------------------------- 1 | 146 | 147 | 287 | 288 | 313 | -------------------------------------------------------------------------------- /src/pub/roomservice/addService.vue: -------------------------------------------------------------------------------- 1 | 39 | 40 | 136 | 137 | 140 | -------------------------------------------------------------------------------- /src/pub/roomservice/historyService.vue: -------------------------------------------------------------------------------- 1 | 64 | 65 | 155 | 156 | 159 | -------------------------------------------------------------------------------- /src/pub/roomservice/index.vue: -------------------------------------------------------------------------------- 1 | 101 | 102 | 278 | 279 | 282 | -------------------------------------------------------------------------------- /src/pub/searchroom/index.vue: -------------------------------------------------------------------------------- 1 | 117 | 118 | 209 | 210 | 226 | -------------------------------------------------------------------------------- /src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import Router from 'vue-router'; 3 | 4 | Vue.use(Router); 5 | 6 | export default new Router({ 7 | routes: [ 8 | { 9 | path: '/', 10 | redirect: '/login' 11 | }, 12 | { 13 | path: '/', 14 | component: () => import(/* webpackChunkName: "home" */ '../components/common/Home.vue'), 15 | meta: { title: 'Home' }, 16 | children: [ 17 | { 18 | path: '/dashboard', 19 | component: () => import(/* webpackChunkName: "dashboard" */ '../components/page/Dashboard.vue'), 20 | meta: { title: '系统首页' } 21 | }, 22 | { 23 | path: '/checkin', 24 | component: () => import(/* webpackChunkName: "icon" */ '../pub/checkin/index'), 25 | meta: { title: '入住信息' } 26 | }, 27 | { 28 | path: '/employee', 29 | component: () => import(/* webpackChunkName: "table" */ '../pub/employee/index'), 30 | meta: { title: '员工管理' } 31 | }, 32 | { 33 | path: '/roomservice', 34 | component: () => import(/* webpackChunkName: "tabs" */ '../pub/roomservice/index'), 35 | meta: { title: '客户服务' } 36 | }, 37 | { 38 | path: '/room', 39 | component: () => import(/* webpackChunkName: "form" */ '../pub/room/index'), 40 | meta: { title: '客房管理' } 41 | }, 42 | { 43 | path: '/searchroom', 44 | component: () => import(/* webpackChunkName: "form" */ '../pub/searchroom/index'), 45 | meta: { title: '客房查询' } 46 | }, 47 | { 48 | path: '/cropper', 49 | component: () => import(/* webpackChunkName: "upload" */ '../components/page/Cropper.vue'), 50 | meta: { title: '文件上传(可裁剪)' } 51 | }, 52 | { 53 | path: '/checkout', 54 | component: () => import(/* webpackChunkName: "i18n" */ '../pub/checkout/index'), 55 | meta: { title: '退房记录' } 56 | },, 57 | { 58 | path: '/finance', 59 | component: () => import(/* webpackChunkName: "donate" */ '../pub/finance/index.vue'), 60 | meta: { title: '财务管理' } 61 | }, 62 | { 63 | path: '/updatePwd', 64 | component: () => import(/* webpackChunkName: "donate" */ '../components/page/updatePwd.vue'), 65 | meta: { title: '修改密码' } 66 | } 67 | ] 68 | }, 69 | { 70 | path: '/login', 71 | component: () => import(/* webpackChunkName: "login" */ '../components/page/Login.vue'), 72 | meta: { title: '登录' } 73 | }, 74 | { 75 | path: '*', 76 | redirect: '/404' 77 | } 78 | ] 79 | }); 80 | -------------------------------------------------------------------------------- /src/store/getters.js: -------------------------------------------------------------------------------- 1 | const getters = { 2 | // sidebar: state => state.app.sidebar, 3 | // themeColor: state => state.app.themeColor, 4 | // token: state => state.user.token, 5 | employeeId: state => state.user.employeeId, 6 | number: state => state.user.number, 7 | // usertype: state => state.user.usertype, 8 | headImg: state => state.user.headImg, 9 | // roles: state => state.user.roles, 10 | // 当前用户具有的权限路由列表 11 | // permisstion_routes: state => state.permission.routes, 12 | 13 | // 菜单信息 14 | // menuType: state => state.menu.menuType, 15 | // typeList: state => state.menu.typeList, 16 | // menuList: state => state.menu.menuList 17 | } 18 | export default getters 19 | -------------------------------------------------------------------------------- /src/store/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | import getters from './getters' 4 | import app from './modules/app' 5 | import user from './modules/user' 6 | import menu from './modules/menu' 7 | import permission from './modules/permission' 8 | 9 | Vue.use(Vuex) 10 | 11 | const store = new Vuex.Store({ 12 | modules: { 13 | app, 14 | user, 15 | menu, 16 | permission 17 | }, 18 | getters 19 | }) 20 | 21 | export default store 22 | -------------------------------------------------------------------------------- /src/store/modules/app.js: -------------------------------------------------------------------------------- 1 | 2 | // const state = { 3 | // sidebar: { 4 | // opened: true 5 | // }, 6 | // themeColor: '#33a0bb' 7 | // } 8 | 9 | // const mutations = { 10 | // // sidebar切换 11 | // TOGGLE_SIDEBAR: state => { 12 | // state.sidebar.opened = !state.sidebar.opened 13 | // }, 14 | // CLOSE_SIDEBAR: (state) => { 15 | // state.sidebar.opened = false 16 | // }, 17 | // OPEN_SIDEBAR: (state) => { 18 | // state.sidebar.opened = true 19 | // }, 20 | // // 主题切换 21 | // TOGGLE_COLOR: (state, color) => { 22 | // state.themeColor = color; 23 | // // 动态修改homeicon颜色 24 | // const homeicon = document.getElementById("homeIcon"); 25 | // homeicon.style.color = state.themeColor; 26 | // const homespan = document.querySelector("#homeIcon+span"); 27 | // homespan.style.color = state.themeColor; 28 | // } 29 | // } 30 | 31 | // const actions = { 32 | // toggleSideBar({ commit }) { 33 | // commit('TOGGLE_SIDEBAR') 34 | // }, 35 | // closeSideBar({ commit }) { 36 | // commit('CLOSE_SIDEBAR') 37 | // }, 38 | // openSideBar({ commit }) { 39 | // commit('OPEN_SIDEBAR') 40 | // }, 41 | // toggleColor({ commit }, color) { 42 | // commit('TOGGLE_COLOR', color) 43 | // } 44 | // } 45 | 46 | // export default { 47 | // namespaced: true, 48 | // state, 49 | // mutations, 50 | // actions 51 | // } 52 | -------------------------------------------------------------------------------- /src/store/modules/menu.js: -------------------------------------------------------------------------------- 1 | const state = { 2 | menuType: '', 3 | typeList: '', 4 | menuList: '' 5 | } 6 | 7 | const mutations = { 8 | MENU_MUTATION: (state, menudata) => { 9 | state.menuType = menudata.menuType; 10 | state.typeList = menudata.typeList; 11 | state.menuList = menudata.menuList 12 | } 13 | } 14 | 15 | const actions = { 16 | setMenu({ commit }, menudata) { 17 | commit("MENU_MUTATION", menudata) 18 | } 19 | } 20 | 21 | export default { 22 | namespaced: true, 23 | state, 24 | mutations, 25 | actions 26 | } 27 | -------------------------------------------------------------------------------- /src/store/modules/permission.js: -------------------------------------------------------------------------------- 1 | // import { asyncRoutes, constantRoutes } from '../../router' 2 | 3 | // const state = { 4 | // routes: [], 5 | // addRoutes: [] 6 | // } 7 | 8 | // const mutations = { 9 | // SET_ROUTES: (state, routes) => { 10 | // state.addRoutes = routes; 11 | // state.routes = constantRoutes.concat(routes) 12 | // } 13 | // } 14 | 15 | // const actions = { 16 | // generateRoutes({ commit }, roles) { 17 | // return new Promise(resolve => { 18 | // let accessedRoutes 19 | // // 如果角色为管理员,所有动态路由都可以查看 20 | // if (roles.includes('admin')) { 21 | // accessedRoutes = asyncRoutes || [] 22 | // } else { 23 | // // 否则根据角色获取动态路由 24 | // accessedRoutes = filterAsyncRoutes(asyncRoutes, roles) 25 | // } 26 | // commit('SET_ROUTES', accessedRoutes) 27 | // resolve(accessedRoutes) 28 | // }) 29 | // } 30 | // } 31 | 32 | // // 使用meta.roles确定当前角色是否具有权限 33 | // function hasPermission(roles, route) { 34 | // if (route.meta && route.meta.roles) { 35 | // return roles.some(role => route.meta.roles.includes(role)) 36 | // } else { 37 | // return true 38 | // } 39 | // } 40 | 41 | // // 通过递归过滤动态路由 42 | // export function filterAsyncRoutes(routes, roles) { 43 | // const res = []; 44 | // routes.forEach(route => { 45 | // const temp = { ...route }; 46 | // if (hasPermission(roles, temp)) { 47 | // if (temp.children) { 48 | // temp.children = filterAsyncRoutes(temp.children, roles) 49 | // } 50 | // res.push(temp) 51 | // } 52 | // }) 53 | // return res 54 | // } 55 | 56 | // export default { 57 | // namespaced: true, 58 | // state, 59 | // mutations, 60 | // actions 61 | // } 62 | -------------------------------------------------------------------------------- /src/store/modules/user.js: -------------------------------------------------------------------------------- 1 | // import { setToken, getToken, removeToken } from '../../utils/token' 2 | const state = { 3 | // token: getToken(), 4 | employeeId: '', 5 | number: '', 6 | // usertype: '', 7 | headImg: '', 8 | // roles: [], 9 | data: {}, 10 | // isLogin: 0 // 初始时候给 isLogin=0表示未登录 11 | } 12 | 13 | const mutations = { 14 | // 改变登录状态, 为1表示已登录 15 | // CHANGE_LOGIN (state) { 16 | // state.isLogin = 1 17 | // }, 18 | USER_MUTATION: (state, userdata) => { 19 | // setToken(userdata.token) 20 | // state.token = userdata.token; 21 | state.data = userdata; 22 | state.employeeId = userdata.employeeId; 23 | state.number = userdata.number; 24 | // state.usertype = userdata.utype; 25 | state.headImg = userdata.headImg; 26 | // state.roles = userdata.roles; 27 | } 28 | } 29 | 30 | const actions = { 31 | // changeLogin ({ commit }) { 32 | // commit('CHANGE_LOGIN') 33 | // }, 34 | setUserdata({ commit }, userdata) { 35 | commit('USER_MUTATION', userdata); 36 | }, 37 | getInfo({ commit, state }) { 38 | const data = state.data; 39 | state.employeeId = data.employeeId; 40 | state.number = data.number; 41 | // state.usertype = data.utype; 42 | state.headImg = data.headImg; 43 | // state.roles = data.roles; 44 | }, 45 | // remove Token 46 | resetToken({ commit, state }) { 47 | return new Promise(resolve => { 48 | commit('USER_MUTATION', '') 49 | // state.roles = [] 50 | // removeToken() 51 | resolve() 52 | }) 53 | } 54 | } 55 | 56 | export default { 57 | namespaced: true, 58 | state, 59 | mutations, 60 | actions 61 | } 62 | -------------------------------------------------------------------------------- /src/styles/index.less: -------------------------------------------------------------------------------- 1 | // 设置elementUI的样式 2 | .el-form { 3 | background-color: #fff; 4 | } -------------------------------------------------------------------------------- /src/utils/formateDate.js: -------------------------------------------------------------------------------- 1 | export const formateDate = function (date) { 2 | let theDate = new Date(date) 3 | let year = theDate.getFullYear() 4 | let month = theDate.getMonth() + 1 5 | let day = theDate.getDate() 6 | // let hour = theDate.getHours() 7 | // let minute = theDate.getMinutes() 8 | // let second = theDate.getSeconds() 9 | return year + '-' + formatTen(month) + '-' + formatTen(day) 10 | // return year + '-' + this.formatTen(month) + '-' + this.formatTen(day) + ' ' + this.formatTen(hour) + ':' + this.formatTen(minute) + ':' + this.formatTen(second) 11 | } 12 | const formatTen = function (num) { 13 | return num > 9 ? (num + '') : ('0' + num) 14 | } -------------------------------------------------------------------------------- /src/utils/request.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | 3 | // const service = axios.create({ 4 | // // process.env.NODE_ENV === 'development' 来判断是否开发环境 5 | // // easy-mock服务挂了,暂时不使用了 6 | // // baseURL: 'https://www.easy-mock.com/mock/592501a391470c0ac1fab128', 7 | // baseURL: 'http://120.24.186.190:8080', 8 | // timeout: 5000 9 | // }); 10 | 11 | const service = axios.create({ 12 | baseURL: '', 13 | // baseURL: process.env.VUE_APP_BASE_URL, 14 | withCredentials: false, 15 | timeout: 5000, 16 | headers: { 17 | 'Access-Control-Allow-Origin': '*', 18 | 'Access-Control-Allow-Headers': 'X-Requested-With,Content-Type', 19 | 'Access-Control-Allow-Methods': 'PUT,POST,GET,DELETE,OPTIONS', 20 | 'Content-Type': 'application/json' 21 | } 22 | }) 23 | 24 | // service.interceptors.request.use( 25 | // config => { 26 | // return config; 27 | // }, 28 | // error => { 29 | // console.log(error); 30 | // return Promise.reject(); 31 | // } 32 | // ); 33 | 34 | // service.interceptors.response.use( 35 | // response => { 36 | // if (response.status === 200) { 37 | // return response.data; 38 | // } else { 39 | // Promise.reject(); 40 | // } 41 | // }, 42 | // error => { 43 | // console.log(error); 44 | // return Promise.reject(); 45 | // } 46 | // ); 47 | 48 | export default service; 49 | -------------------------------------------------------------------------------- /vue.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | baseUrl: './', 3 | assetsDir: 'static', 4 | outputDir: 'dist', 5 | publicPath: './', 6 | productionSourceMap: false, 7 | devServer: { 8 | proxy: { 9 | '/HotelManagement':{ 10 | target:'http://120.24.186.190:8080', 11 | changeOrigin:true, 12 | pathRewrite:{ 13 | '^/HotelManagement':'/HotelManagement' 14 | } 15 | } 16 | } 17 | } 18 | } --------------------------------------------------------------------------------