├── myNode
└── myNodeApp
│ ├── views
│ ├── error.ejs
│ └── index.ejs
│ ├── public
│ └── stylesheets
│ │ └── style.css
│ ├── routes
│ ├── users.js
│ ├── index.js
│ ├── MYSQL.js
│ ├── shbx.js
│ ├── yhqx.js
│ ├── sspf.js
│ ├── bxtj.js
│ ├── lgpf.js
│ ├── dormList.js
│ ├── xslb.js
│ ├── newly.js
│ └── login.js
│ ├── package.json
│ ├── bin
│ └── www
│ └── app.js
├── myproject
├── public
│ ├── favicon.ico
│ └── index.html
├── src
│ ├── assets
│ │ ├── img
│ │ │ ├── 1.jpg
│ │ │ ├── 10.jpg
│ │ │ ├── 11.jpg
│ │ │ ├── 12.jpg
│ │ │ ├── 13.jpg
│ │ │ ├── 13.png
│ │ │ ├── 14.jpg
│ │ │ ├── 14.png
│ │ │ ├── 15.jpg
│ │ │ ├── 15.png
│ │ │ ├── 16.png
│ │ │ ├── 17.png
│ │ │ ├── 18.png
│ │ │ ├── 19.png
│ │ │ ├── 20.png
│ │ │ ├── 21.png
│ │ │ ├── 22.png
│ │ │ ├── 3.jpeg
│ │ │ ├── 3.jpg
│ │ │ ├── 4.jpg
│ │ │ ├── 5.jpg
│ │ │ ├── 6.jpg
│ │ │ ├── 7.jpg
│ │ │ ├── 9.jpg
│ │ │ ├── log.png
│ │ │ ├── hkLog.jpg
│ │ │ ├── weixin.png
│ │ │ └── zhifubao.jpg
│ │ ├── font
│ │ │ ├── iconfont.eot
│ │ │ ├── iconfont.ttf
│ │ │ ├── iconfont.woff
│ │ │ ├── iconfont.woff2
│ │ │ ├── iconfont.json
│ │ │ ├── iconfont.css
│ │ │ ├── iconfont.svg
│ │ │ ├── demo.css
│ │ │ └── iconfont.js
│ │ └── css
│ │ │ └── global.css
│ ├── store
│ │ └── index.js
│ ├── App.vue
│ ├── main.js
│ ├── plugins
│ │ └── element.js
│ ├── components
│ │ ├── welcome.vue
│ │ ├── ssgl
│ │ │ └── sswhjs.vue
│ │ ├── user
│ │ │ ├── qxlb.vue
│ │ │ └── jslb.vue
│ │ ├── grzx
│ │ │ └── xgmm.vue
│ │ ├── login.vue
│ │ ├── hqfw
│ │ │ ├── bxlb.vue
│ │ │ └── shbx.vue
│ │ ├── shfw
│ │ │ ├── jdf.vue
│ │ │ ├── xyykt.vue
│ │ │ └── xyw.vue
│ │ ├── home.vue
│ │ └── tjzx
│ │ │ ├── sspf.vue
│ │ │ ├── bxtj.vue
│ │ │ └── lgdf.vue
│ ├── router
│ │ └── index.js
│ └── excel
│ │ ├── Export2Excel.js
│ │ └── Blob.js
├── babel.config.js
├── .gitignore
├── README.md
└── package.json
└── README.md
/myNode/myNodeApp/views/error.ejs:
--------------------------------------------------------------------------------
1 |
<%= message %>
2 | <%= error.status %>
3 | <%= error.stack %>
4 |
--------------------------------------------------------------------------------
/myproject/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyaxu123/-Vue-ElementUi-NodeJS-Mysql-/HEAD/myproject/public/favicon.ico
--------------------------------------------------------------------------------
/myproject/src/assets/img/1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyaxu123/-Vue-ElementUi-NodeJS-Mysql-/HEAD/myproject/src/assets/img/1.jpg
--------------------------------------------------------------------------------
/myproject/src/assets/img/10.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyaxu123/-Vue-ElementUi-NodeJS-Mysql-/HEAD/myproject/src/assets/img/10.jpg
--------------------------------------------------------------------------------
/myproject/src/assets/img/11.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyaxu123/-Vue-ElementUi-NodeJS-Mysql-/HEAD/myproject/src/assets/img/11.jpg
--------------------------------------------------------------------------------
/myproject/src/assets/img/12.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyaxu123/-Vue-ElementUi-NodeJS-Mysql-/HEAD/myproject/src/assets/img/12.jpg
--------------------------------------------------------------------------------
/myproject/src/assets/img/13.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyaxu123/-Vue-ElementUi-NodeJS-Mysql-/HEAD/myproject/src/assets/img/13.jpg
--------------------------------------------------------------------------------
/myproject/src/assets/img/13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyaxu123/-Vue-ElementUi-NodeJS-Mysql-/HEAD/myproject/src/assets/img/13.png
--------------------------------------------------------------------------------
/myproject/src/assets/img/14.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyaxu123/-Vue-ElementUi-NodeJS-Mysql-/HEAD/myproject/src/assets/img/14.jpg
--------------------------------------------------------------------------------
/myproject/src/assets/img/14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyaxu123/-Vue-ElementUi-NodeJS-Mysql-/HEAD/myproject/src/assets/img/14.png
--------------------------------------------------------------------------------
/myproject/src/assets/img/15.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyaxu123/-Vue-ElementUi-NodeJS-Mysql-/HEAD/myproject/src/assets/img/15.jpg
--------------------------------------------------------------------------------
/myproject/src/assets/img/15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyaxu123/-Vue-ElementUi-NodeJS-Mysql-/HEAD/myproject/src/assets/img/15.png
--------------------------------------------------------------------------------
/myproject/src/assets/img/16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyaxu123/-Vue-ElementUi-NodeJS-Mysql-/HEAD/myproject/src/assets/img/16.png
--------------------------------------------------------------------------------
/myproject/src/assets/img/17.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyaxu123/-Vue-ElementUi-NodeJS-Mysql-/HEAD/myproject/src/assets/img/17.png
--------------------------------------------------------------------------------
/myproject/src/assets/img/18.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyaxu123/-Vue-ElementUi-NodeJS-Mysql-/HEAD/myproject/src/assets/img/18.png
--------------------------------------------------------------------------------
/myproject/src/assets/img/19.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyaxu123/-Vue-ElementUi-NodeJS-Mysql-/HEAD/myproject/src/assets/img/19.png
--------------------------------------------------------------------------------
/myproject/src/assets/img/20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyaxu123/-Vue-ElementUi-NodeJS-Mysql-/HEAD/myproject/src/assets/img/20.png
--------------------------------------------------------------------------------
/myproject/src/assets/img/21.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyaxu123/-Vue-ElementUi-NodeJS-Mysql-/HEAD/myproject/src/assets/img/21.png
--------------------------------------------------------------------------------
/myproject/src/assets/img/22.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyaxu123/-Vue-ElementUi-NodeJS-Mysql-/HEAD/myproject/src/assets/img/22.png
--------------------------------------------------------------------------------
/myproject/src/assets/img/3.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyaxu123/-Vue-ElementUi-NodeJS-Mysql-/HEAD/myproject/src/assets/img/3.jpeg
--------------------------------------------------------------------------------
/myproject/src/assets/img/3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyaxu123/-Vue-ElementUi-NodeJS-Mysql-/HEAD/myproject/src/assets/img/3.jpg
--------------------------------------------------------------------------------
/myproject/src/assets/img/4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyaxu123/-Vue-ElementUi-NodeJS-Mysql-/HEAD/myproject/src/assets/img/4.jpg
--------------------------------------------------------------------------------
/myproject/src/assets/img/5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyaxu123/-Vue-ElementUi-NodeJS-Mysql-/HEAD/myproject/src/assets/img/5.jpg
--------------------------------------------------------------------------------
/myproject/src/assets/img/6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyaxu123/-Vue-ElementUi-NodeJS-Mysql-/HEAD/myproject/src/assets/img/6.jpg
--------------------------------------------------------------------------------
/myproject/src/assets/img/7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyaxu123/-Vue-ElementUi-NodeJS-Mysql-/HEAD/myproject/src/assets/img/7.jpg
--------------------------------------------------------------------------------
/myproject/src/assets/img/9.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyaxu123/-Vue-ElementUi-NodeJS-Mysql-/HEAD/myproject/src/assets/img/9.jpg
--------------------------------------------------------------------------------
/myproject/src/assets/img/log.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyaxu123/-Vue-ElementUi-NodeJS-Mysql-/HEAD/myproject/src/assets/img/log.png
--------------------------------------------------------------------------------
/myproject/src/assets/img/hkLog.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyaxu123/-Vue-ElementUi-NodeJS-Mysql-/HEAD/myproject/src/assets/img/hkLog.jpg
--------------------------------------------------------------------------------
/myproject/src/assets/img/weixin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyaxu123/-Vue-ElementUi-NodeJS-Mysql-/HEAD/myproject/src/assets/img/weixin.png
--------------------------------------------------------------------------------
/myproject/src/assets/img/zhifubao.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyaxu123/-Vue-ElementUi-NodeJS-Mysql-/HEAD/myproject/src/assets/img/zhifubao.jpg
--------------------------------------------------------------------------------
/myproject/src/assets/font/iconfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyaxu123/-Vue-ElementUi-NodeJS-Mysql-/HEAD/myproject/src/assets/font/iconfont.eot
--------------------------------------------------------------------------------
/myproject/src/assets/font/iconfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyaxu123/-Vue-ElementUi-NodeJS-Mysql-/HEAD/myproject/src/assets/font/iconfont.ttf
--------------------------------------------------------------------------------
/myproject/src/assets/font/iconfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyaxu123/-Vue-ElementUi-NodeJS-Mysql-/HEAD/myproject/src/assets/font/iconfont.woff
--------------------------------------------------------------------------------
/myproject/src/assets/font/iconfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liyaxu123/-Vue-ElementUi-NodeJS-Mysql-/HEAD/myproject/src/assets/font/iconfont.woff2
--------------------------------------------------------------------------------
/myNode/myNodeApp/public/stylesheets/style.css:
--------------------------------------------------------------------------------
1 | body {
2 | padding: 50px;
3 | font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
4 | }
5 |
6 | a {
7 | color: #00B7FF;
8 | }
9 |
--------------------------------------------------------------------------------
/myproject/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | "presets": [
3 | "@vue/cli-plugin-babel/preset"
4 | ],
5 | "plugins": [
6 | [
7 | "component",
8 | {
9 | "libraryName": "element-ui",
10 | "styleLibraryName": "theme-chalk"
11 | }
12 | ]
13 | ]
14 | }
--------------------------------------------------------------------------------
/myNode/myNodeApp/views/index.ejs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | <%= title %>
5 |
6 |
7 |
8 | <%= title %>
9 | EJS Welcome to <%= title %>
10 |
11 |
12 |
--------------------------------------------------------------------------------
/myproject/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 | # local env files
6 | .env.local
7 | .env.*.local
8 |
9 | # Log files
10 | npm-debug.log*
11 | yarn-debug.log*
12 | yarn-error.log*
13 |
14 | # Editor directories and files
15 | .idea
16 | .vscode
17 | *.suo
18 | *.ntvs*
19 | *.njsproj
20 | *.sln
21 | *.sw?
22 |
--------------------------------------------------------------------------------
/myNode/myNodeApp/routes/users.js:
--------------------------------------------------------------------------------
1 | const router = require('koa-router')()
2 |
3 | router.prefix('/users')
4 |
5 | router.get('/', function (ctx, next) {
6 | ctx.body = 'this is a users response!'
7 | })
8 |
9 | router.get('/bar', function (ctx, next) {
10 | ctx.body = 'this is a users/bar response'
11 | })
12 |
13 | module.exports = router
14 |
--------------------------------------------------------------------------------
/myproject/src/store/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import Vuex from 'vuex'
3 |
4 | Vue.use(Vuex)
5 |
6 | export default new Vuex.Store({
7 | state: {
8 | count:111,
9 | // 定义路由表
10 | routerlist:[]
11 | },
12 | mutations: {
13 | // 角色的路由表
14 | rolerRouter(state,value){
15 | state.routerlist = value
16 | }
17 | },
18 | actions: {
19 | },
20 | modules: {
21 | }
22 | })
23 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Vue-ElementUi-NodeJS-Mysql 高校宿舍管理系统
2 | 该项目是我的毕业设计项目,所用到的技术有:Vue、ElementUi、NodeJS、Koa2、Mysql。项目演示效果在B站:搜索“小笑残虹”或者打开以下链接:https://www.bilibili.com/video/BV13E411j7Lo
3 | myNode文件夹里面存放的是我的后台Node代码,Node采用了Koa2框架。
4 | myproject文件夹里存放的是我的Vue前端代码。
5 | studentdormitory.sql文件是本项目的数据库文件。
6 | myNode文件和myproject文件下载到本地后,都需要cd到文件的根目录里面,然后执行 npm install 指令,安装项目依赖。
7 | 启动myNode服务,通过 npm start 指令。
8 | 启动Vue前台项目,通过 npm run dev 指令。
9 | 数据库文件自行导入。
10 |
--------------------------------------------------------------------------------
/myNode/myNodeApp/routes/index.js:
--------------------------------------------------------------------------------
1 | const router = require('koa-router')()
2 |
3 | router.get('/', async (ctx, next) => {
4 | await ctx.render('index', {
5 | title: 'Hello Koa 2!'
6 | })
7 | })
8 |
9 | router.get('/string', async (ctx, next) => {
10 | ctx.body = 'koa2 string'
11 | })
12 |
13 | router.get('/json', async (ctx, next) => {
14 | ctx.body = {
15 | title: 'koa2 json'
16 | }
17 | })
18 |
19 | module.exports = router
20 |
--------------------------------------------------------------------------------
/myproject/README.md:
--------------------------------------------------------------------------------
1 | # myproject
2 |
3 | ## Project setup
4 | ```
5 | npm install
6 | ```
7 |
8 | ### Compiles and hot-reloads for development
9 | ```
10 | npm run serve
11 | ```
12 |
13 | ### Compiles and minifies for production
14 | ```
15 | npm run build
16 | ```
17 |
18 | ### Lints and fixes files
19 | ```
20 | npm run lint
21 | ```
22 |
23 | ### Customize configuration
24 | See [Configuration Reference](https://cli.vuejs.org/config/).
25 |
--------------------------------------------------------------------------------
/myproject/src/assets/css/global.css:
--------------------------------------------------------------------------------
1 | /* 全局样式表 */
2 | html,body,#app{
3 | width: 100%;
4 | height: 100%;
5 | overflow: hidden;
6 | }
7 | *{
8 | margin: 0;
9 | padding: 0;
10 | }
11 |
12 | .el-breadcrumb{
13 | margin-bottom: 15px;
14 | font-size: 12px;;
15 | }
16 |
17 | .el-card{
18 | box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15) !important;
19 | margin-top: 15px;
20 | }
21 |
22 | .el-table{
23 | margin-top: 15px;
24 | font-size: 12px;
25 | }
26 |
27 | .el-pagination{
28 | margin-top: 15px;
29 | }
30 |
--------------------------------------------------------------------------------
/myproject/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
22 |
23 |
26 |
--------------------------------------------------------------------------------
/myproject/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | <%= htmlWebpackPlugin.options.title %>
9 |
10 |
11 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/myproject/src/main.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App.vue'
3 | import router from './router'
4 | import store from './store'
5 | import './plugins/element.js'
6 | // 导入字体图标
7 | import './assets/font/iconfont.css'
8 | // 导入全局样式表
9 | import './assets/css/global.css'
10 | // 导入axios
11 | import axios from 'axios'
12 | // 导入excel插件
13 | import XLSX from 'xlsx'
14 | Vue.prototype.XLSX = XLSX
15 | // 导入echarts插件
16 | import echarts from 'echarts'
17 | Vue.prototype.$echarts = echarts
18 | // 配置请求的根路径
19 | // axios.defaults.baseURL = ''
20 | Vue.prototype.$http = axios
21 |
22 | Vue.config.productionTip = false
23 |
24 | new Vue({
25 | router,
26 | store,
27 | render: h => h(App)
28 | }).$mount('#app')
29 |
--------------------------------------------------------------------------------
/myNode/myNodeApp/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "myNodeApp",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "start": "node bin/www",
7 | "dev": "./node_modules/.bin/nodemon bin/www",
8 | "prd": "pm2 start bin/www",
9 | "test": "echo \"Error: no test specified\" && exit 1"
10 | },
11 | "dependencies": {
12 | "debug": "^4.1.1",
13 | "ejs": "~2.3.3",
14 | "koa": "^2.7.0",
15 | "koa-bodyparser": "^4.2.1",
16 | "koa-convert": "^1.2.0",
17 | "koa-cors": "0.0.16",
18 | "koa-json": "^2.0.2",
19 | "koa-logger": "^3.2.0",
20 | "koa-onerror": "^4.1.0",
21 | "koa-router": "^7.4.0",
22 | "koa-static": "^5.0.0",
23 | "koa-views": "^6.2.0",
24 | "mysql": "^2.18.1"
25 | },
26 | "devDependencies": {
27 | "nodemon": "^1.19.1"
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/myNode/myNodeApp/routes/MYSQL.js:
--------------------------------------------------------------------------------
1 | // 1, 引模块:npm install mysql
2 | const mysql = require('mysql');
3 | // 2, 创建连接
4 | const pool = mysql.createPool({
5 | host: 'localhost',// 数据库地址
6 | user: 'root',// 数据库用户
7 | password: 'admin',// 数据库密码
8 | database: 'studentdormitory'// 要连接的数据库
9 | });
10 | // connection.connect();
11 |
12 | // 数据库操作
13 | let query = function( sql, values) {
14 | // 返回一个 Promise
15 | return new Promise(( resolve, reject ) => {
16 | pool.getConnection(function(err, connection) { // 开启数据库
17 | if (err) {
18 | reject( err );
19 | } else {
20 | console.log('开启成功!');
21 | pool.query(sql, values, ( err, rows) => {
22 | if ( err ) {
23 | reject(err);
24 | } else {
25 | resolve(rows);
26 | }
27 | // 结束会话
28 | connection.release();
29 | });
30 | }
31 | });
32 | });
33 | };
34 |
35 |
36 |
37 | module.exports = query;
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/myproject/src/plugins/element.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import { Button,Form,FormItem,Input,Message,Container,Header,Aside,Main,Menu,
3 | Submenu,MenuItem,Breadcrumb,BreadcrumbItem,Card,Row,Col,Table,TableColumn,
4 | Switch,Tooltip,Pagination,Dialog,Select,Option,MessageBox,Tag,Autocomplete,
5 | Upload,datePicker,timePicker,Carousel,carouselItem,Collapse,collapseItem,Divider,
6 | Radio,radioButton,Notification,Tabs,tabPane} from 'element-ui'
7 | Vue.use(Button)
8 | Vue.use(Form)
9 | Vue.use(FormItem)
10 | Vue.use(Input)
11 | Vue.use(Container)
12 | Vue.use(Header)
13 | Vue.use(Aside)
14 | Vue.use(Main)
15 | Vue.use(Menu)
16 | Vue.use(Submenu)
17 | Vue.use(MenuItem)
18 | Vue.use(Breadcrumb)
19 | Vue.use(BreadcrumbItem)
20 | Vue.use(Card)
21 | Vue.use(Row)
22 | Vue.use(Col)
23 | Vue.use(Table)
24 | Vue.use(TableColumn)
25 | Vue.use(Switch)
26 | Vue.use(Tooltip)
27 | Vue.use(Pagination)
28 | Vue.use(Dialog)
29 | Vue.use(Select)
30 | Vue.use(Option)
31 | Vue.use(Tag)
32 | Vue.use(Autocomplete)
33 | Vue.use(Upload)
34 | Vue.use(datePicker)
35 | Vue.use(timePicker)
36 | Vue.use(Carousel)
37 | Vue.use(carouselItem)
38 | Vue.use(Collapse)
39 | Vue.use(collapseItem)
40 | Vue.use(Divider)
41 | Vue.use(Radio)
42 | Vue.use(radioButton)
43 | Vue.use(Tabs)
44 | Vue.use(tabPane)
45 | Vue.prototype.$message = Message
46 | Vue.prototype.$notify = Notification
47 | Vue.prototype.$confirm = MessageBox.confirm
--------------------------------------------------------------------------------
/myproject/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "myproject",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "serve": "vue-cli-service serve",
7 | "build": "vue-cli-service build",
8 | "lint": "vue-cli-service lint"
9 | },
10 | "dependencies": {
11 | "axios": "^0.19.2",
12 | "core-js": "^3.6.4",
13 | "echarts": "^4.6.0",
14 | "element-ui": "^2.4.5",
15 | "file-saver": "^2.0.2",
16 | "vue": "^2.6.11",
17 | "vue-router": "^3.1.5",
18 | "vuex": "^3.1.2",
19 | "xlsx": "^0.15.5"
20 | },
21 | "devDependencies": {
22 | "@vue/cli-plugin-babel": "~4.2.0",
23 | "@vue/cli-plugin-eslint": "~4.2.0",
24 | "@vue/cli-plugin-router": "~4.2.0",
25 | "@vue/cli-plugin-vuex": "~4.2.0",
26 | "@vue/cli-service": "~4.2.0",
27 | "babel-eslint": "^10.0.3",
28 | "babel-plugin-component": "^1.1.1",
29 | "eslint": "^6.7.2",
30 | "eslint-plugin-vue": "^6.1.2",
31 | "script-loader": "^0.7.2",
32 | "vue-cli-plugin-element": "^1.0.1",
33 | "vue-template-compiler": "^2.6.11"
34 | },
35 | "eslintConfig": {
36 | "root": true,
37 | "env": {
38 | "node": true
39 | },
40 | "extends": [
41 | "plugin:vue/essential",
42 | "eslint:recommended"
43 | ],
44 | "parserOptions": {
45 | "parser": "babel-eslint"
46 | },
47 | "rules": {}
48 | },
49 | "browserslist": [
50 | "> 1%",
51 | "last 2 versions"
52 | ]
53 | }
54 |
--------------------------------------------------------------------------------
/myproject/src/components/welcome.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |

6 |
办一所对学生最负责任的大学
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 | 欢迎您!使用黄河科技学院宿舍管理系统
27 |
28 |
29 |
30 |
31 |
39 |
40 |
--------------------------------------------------------------------------------
/myproject/src/components/ssgl/sswhjs.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 首页
6 | 宿舍管理
7 | 宿舍文化建设
8 |
9 |
10 |
11 |
12 |
13 |
14 | 这里写大步骤的东西
15 |
16 |
17 |
18 | 这里写小步骤的东西
19 |
20 |
21 |
22 | 这里写小步骤的东西
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
47 |
48 |
--------------------------------------------------------------------------------
/myproject/src/assets/font/iconfont.json:
--------------------------------------------------------------------------------
1 | {
2 | "id": "1651382",
3 | "name": "fonts",
4 | "font_family": "iconfont",
5 | "css_prefix_text": "icon",
6 | "description": "",
7 | "glyphs": [
8 | {
9 | "icon_id": "354209",
10 | "name": "生活服务",
11 | "font_class": "iconfontshenghuojiaofei",
12 | "unicode": "e654",
13 | "unicode_decimal": 58964
14 | },
15 | {
16 | "icon_id": "2019094",
17 | "name": "学生",
18 | "font_class": "xuesheng",
19 | "unicode": "e7c0",
20 | "unicode_decimal": 59328
21 | },
22 | {
23 | "icon_id": "2768292",
24 | "name": "统计",
25 | "font_class": "tongji",
26 | "unicode": "e615",
27 | "unicode_decimal": 58901
28 | },
29 | {
30 | "icon_id": "4734154",
31 | "name": "权限",
32 | "font_class": "ic_opt_feature",
33 | "unicode": "e60f",
34 | "unicode_decimal": 58895
35 | },
36 | {
37 | "icon_id": "6299260",
38 | "name": "楼宇",
39 | "font_class": "icon-",
40 | "unicode": "e671",
41 | "unicode_decimal": 58993
42 | },
43 | {
44 | "icon_id": "8361810",
45 | "name": "统计",
46 | "font_class": "tongji1",
47 | "unicode": "e6c8",
48 | "unicode_decimal": 59080
49 | },
50 | {
51 | "icon_id": "10056226",
52 | "name": "后勤物资",
53 | "font_class": "houqinwuzi",
54 | "unicode": "e6fe",
55 | "unicode_decimal": 59134
56 | },
57 | {
58 | "icon_id": "10314094",
59 | "name": "宿舍",
60 | "font_class": "sushe",
61 | "unicode": "e624",
62 | "unicode_decimal": 58916
63 | },
64 | {
65 | "icon_id": "6077736",
66 | "name": "人",
67 | "font_class": "ren",
68 | "unicode": "e622",
69 | "unicode_decimal": 58914
70 | }
71 | ]
72 | }
73 |
--------------------------------------------------------------------------------
/myNode/myNodeApp/bin/www:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | /**
4 | * Module dependencies.
5 | */
6 |
7 | var app = require('../app');
8 | var debug = require('debug')('demo:server');
9 | var http = require('http');
10 |
11 | /**
12 | * Get port from environment and store in Express.
13 | */
14 |
15 | var port = normalizePort(process.env.PORT || '3000');
16 | // app.set('port', port);
17 |
18 | /**
19 | * Create HTTP server.
20 | */
21 |
22 | var server = http.createServer(app.callback());
23 |
24 | /**
25 | * Listen on provided port, on all network interfaces.
26 | */
27 |
28 | server.listen(port);
29 | server.on('error', onError);
30 | server.on('listening', onListening);
31 |
32 | /**
33 | * Normalize a port into a number, string, or false.
34 | */
35 |
36 | function normalizePort(val) {
37 | var port = parseInt(val, 10);
38 |
39 | if (isNaN(port)) {
40 | // named pipe
41 | return val;
42 | }
43 |
44 | if (port >= 0) {
45 | // port number
46 | return port;
47 | }
48 |
49 | return false;
50 | }
51 |
52 | /**
53 | * Event listener for HTTP server "error" event.
54 | */
55 |
56 | function onError(error) {
57 | if (error.syscall !== 'listen') {
58 | throw error;
59 | }
60 |
61 | var bind = typeof port === 'string'
62 | ? 'Pipe ' + port
63 | : 'Port ' + port;
64 |
65 | // handle specific listen errors with friendly messages
66 | switch (error.code) {
67 | case 'EACCES':
68 | console.error(bind + ' requires elevated privileges');
69 | process.exit(1);
70 | break;
71 | case 'EADDRINUSE':
72 | console.error(bind + ' is already in use');
73 | process.exit(1);
74 | break;
75 | default:
76 | throw error;
77 | }
78 | }
79 |
80 | /**
81 | * Event listener for HTTP server "listening" event.
82 | */
83 |
84 | function onListening() {
85 | var addr = server.address();
86 | var bind = typeof addr === 'string'
87 | ? 'pipe ' + addr
88 | : 'port ' + addr.port;
89 | debug('Listening on ' + bind);
90 | }
91 |
--------------------------------------------------------------------------------
/myproject/src/components/user/qxlb.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 首页
6 | 用户权限管理
7 | 权限列表
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | 一级
18 | 二级
19 | 三级
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
50 |
51 |
--------------------------------------------------------------------------------
/myproject/src/router/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import VueRouter from 'vue-router'
3 | import login from '../components/login.vue'
4 | import home from '../components/home.vue'
5 | import welcome from '../components/welcome.vue'
6 | import users from '../components/user/users.vue'
7 | import jslb from '../components/user/jslb.vue'
8 | import qxlb from '../components/user/qxlb.vue'
9 | import xgmm from '../components/grzx/xgmm.vue'
10 | import newly from '../components/lygl/newly.vue'
11 | import sslb from '../components/ssgl/sslb.vue'
12 | import sswhjs from '../components/ssgl/sswhjs.vue'
13 | import xslb from '../components/xsgl/xslb.vue'
14 | import shbx from '../components/hqfw/shbx.vue'
15 | import bxlb from '../components/hqfw/bxlb.vue'
16 | import jdf from '../components/shfw/jdf.vue'
17 | import xyw from '../components/shfw/xyw.vue'
18 | import xyykt from '../components/shfw/xyykt.vue'
19 | import sspf from '../components/tjzx/sspf.vue'
20 | import bxtj from '../components/tjzx/bxtj.vue'
21 | import lgdf from '../components/tjzx/lgdf.vue'
22 |
23 | Vue.use(VueRouter)
24 |
25 | const routes = [
26 | {
27 | path: '/',
28 | redirect: '/login'
29 | },
30 | {
31 | path: '/login',
32 | component: login
33 | },
34 | {
35 | path: '/home',
36 | component: home,
37 | redirect:'/welcome',
38 | children:[
39 | {path:'/welcome',component:welcome},
40 | {path:'/yhlb',component:users},
41 | {path:'/xgmm',component:xgmm},
42 | {path:'/newly',component:newly},
43 | {path:'/sslb',component:sslb},
44 | {path:'/sswhjs',component:sswhjs},
45 | {path:'/xslb',component:xslb},
46 | {path:'/shbx',component:shbx},
47 | {path:'/jdf',component:jdf},
48 | {path:'/xyw',component:xyw},
49 | {path:'/xyykt',component:xyykt},
50 | {path:'/sspf',component:sspf},
51 | {path:'/bxtj',component:bxtj},
52 | {path:'/lgdf',component:lgdf},
53 | {path:'/jslb',component:jslb},
54 | {path:'/qxlb',component:qxlb},
55 | {path:'/bxlb',component:bxlb}
56 | ]
57 | }
58 | ]
59 |
60 | const router = new VueRouter({
61 | mode: 'history',
62 | base: process.env.BASE_URL,
63 | routes
64 | })
65 |
66 | // 挂载路由导航守卫
67 | router.beforeEach((to,from,next) => {
68 | if(to.path === '/login') return next();
69 | // 获取token
70 | // const tokenStr = window.sessionStorage.getItem('token');
71 | // if(!tokenStr) return next('/login');
72 | next();
73 | })
74 |
75 | export default router
76 |
--------------------------------------------------------------------------------
/myNode/myNodeApp/app.js:
--------------------------------------------------------------------------------
1 | const Koa = require('koa')
2 | const app = new Koa()
3 | const views = require('koa-views')
4 | const json = require('koa-json')
5 | const onerror = require('koa-onerror')
6 | const bodyparser = require('koa-bodyparser')
7 | const logger = require('koa-logger')
8 |
9 | // 引入cors支持跨域请求
10 | const cors = require('koa-cors')
11 | app.use(cors())
12 |
13 | const index = require('./routes/index')
14 | const users = require('./routes/users')
15 | // 配置登录页面的路由
16 | const login = require('./routes/login')
17 | // 配置新区楼宇页面的路由
18 | const newly = require('./routes/newly')
19 | // 配置宿舍列表页面的路由
20 | const dormList = require('./routes/dormList')
21 | // 配置学生列表页面的路由
22 | const xslb = require('./routes/xslb')
23 | // 配置损坏报修页面的路由
24 | const shbx = require('./routes/shbx')
25 | // 配置宿舍评分页面的路由
26 | const sspf = require('./routes/sspf')
27 | // 配置楼管评分页面的路由
28 | const lgpf = require('./routes/lgpf')
29 | // 配置报修统计页面的路由
30 | const bxtj = require('./routes/bxtj')
31 | // 配置用户权限页面的路由
32 | const yhqx = require('./routes/yhqx')
33 |
34 | // error handler
35 | onerror(app)
36 |
37 | // middlewares
38 | app.use(bodyparser({
39 | enableTypes:['json', 'form', 'text']
40 | }))
41 | app.use(json())
42 | app.use(logger())
43 | app.use(require('koa-static')(__dirname + '/public'))
44 |
45 | app.use(views(__dirname + '/views', {
46 | extension: 'ejs'
47 | }))
48 |
49 | // logger
50 | app.use(async (ctx, next) => {
51 | const start = new Date()
52 | await next()
53 | const ms = new Date() - start
54 | console.log(`${ctx.method} ${ctx.url} - ${ms}ms`)
55 | })
56 |
57 | // routes
58 | app.use(index.routes(), index.allowedMethods())
59 | app.use(users.routes(), users.allowedMethods())
60 | app.use(login.routes(), login.allowedMethods())
61 | app.use(newly.routes(), newly.allowedMethods())
62 | app.use(dormList.routes(), dormList.allowedMethods())
63 | app.use(xslb.routes(), xslb.allowedMethods())
64 | app.use(shbx.routes(), shbx.allowedMethods())
65 | app.use(sspf.routes(), sspf.allowedMethods())
66 | app.use(lgpf.routes(), lgpf.allowedMethods())
67 | app.use(bxtj.routes(), bxtj.allowedMethods())
68 | app.use(yhqx.routes(), yhqx.allowedMethods())
69 |
70 | // error-handling
71 | app.on('error', (err, ctx) => {
72 | console.error('server error', err, ctx)
73 | });
74 |
75 | // cors设置允许所有域名跨域
76 | // var allowCrossDomin = function(req,res,next){
77 | // // 设置请求源
78 | // res.header('Access-Control-Allow-Origin','*');
79 | // // 设置请求头
80 | // res.header('Access-Control-Allow-Headers','*');
81 | // // 请求方法
82 | // res.header('Access-Control-Allow-Methods','*');
83 | // next();
84 | // };
85 | // app.use(allowCrossDomin);
86 |
87 | module.exports = app
--------------------------------------------------------------------------------
/myNode/myNodeApp/routes/shbx.js:
--------------------------------------------------------------------------------
1 | const router = require('koa-router')()
2 | //引入MySQL数据库
3 | const query = require('./MYSQL');
4 | router.prefix('/shbx');
5 |
6 | // 添加报修
7 | router.post('/add', async (ctx, next) => {
8 | console.log(ctx.request.body);
9 | let uname = ctx.request.body.name;
10 | let tel = ctx.request.body.tel;
11 | let lynumber = ctx.request.body.lyNumber;
12 | let sushe = ctx.request.body.sushe;
13 | let bxdata = ctx.request.body.data;
14 | let bxtime = ctx.request.body.time;
15 | let bxdel = ctx.request.body.detail;
16 | let state = 1;
17 | let switchon = 1;
18 | // 将信息添加到数据库
19 | let a = await query(
20 | `insert into bxlb(uname,tel,lynumber,sushe,bxdata,bxtime,bxdel,state,switchon) values('${uname}','${tel}','${lynumber}','${sushe}','${bxdata}','${bxtime}','${bxdel}','${state}','${switchon}')`
21 | );
22 | console.log(a);
23 | if (a.affectedRows == 1) {
24 | // 代表插入成功
25 | let data = {
26 | code: 200,
27 | msg: '添加成功'
28 | };
29 | ctx.body = data;
30 | } else {
31 | let data = {
32 | code: 0,
33 | msg: '添加失败'
34 | };
35 | ctx.body = data;
36 | }
37 | })
38 |
39 | // 返回报修列表数据
40 | router.post('/search', async (ctx, next) => {
41 | console.log(ctx.request.body);
42 | // 当前页数
43 | let pagenum = ctx.request.body.pagenum;
44 | // 当前页每页显示多少条数据
45 | let pagesize = ctx.request.body.pagesize;
46 | // 总条数
47 | let total = '';
48 | // 起始页索引
49 | let toppageIndex = (pagenum - 1) * pagesize;
50 | // 查询总条数 转换为字符串类型
51 | let b = JSON.stringify(await query('SELECT COUNT(*) FROM bxlb where state = 1'));
52 | console.log(b);
53 | // 截取字符串,并转化为数字类型,得到总条数
54 | total = parseInt(b.substring(13, 15));
55 | //查询数据库
56 | let a = await query('SELECT * FROM bxlb where state = 1 limit ' + toppageIndex + ',' + pagesize + '');
57 | // 格式化 a 的数据类型
58 | var dataString = JSON.stringify(a);
59 | var result = JSON.parse(dataString);
60 | console.log(result);
61 | if (result.length > 0) {
62 | let data = {
63 | code: 200,
64 | total: total,
65 | data: result
66 | };
67 | ctx.body = data;
68 | } else {
69 | let data = {
70 | code: 0
71 | };
72 | ctx.body = data;
73 | }
74 | })
75 |
76 | // 处理开关状态请求
77 | router.post('/onoff', async (ctx, next) => {
78 | console.log(ctx.request.body);
79 | let id = ctx.request.body.id;
80 | let switchon = ctx.request.body.switchon;
81 | let a = await query(`update bxlb set switchon = '${switchon}' where id = ${id}`);
82 | console.log(a);
83 | if (a.changedRows == 1 && a.affectedRows == 1) {
84 | let data = {
85 | code: 200,
86 | msg:'更新成功'
87 | };
88 | ctx.body = data;
89 | }else if(a.changedRows == 0 && a.affectedRows == 1){
90 | let data = {
91 | code: 100,
92 | msg:'与原数据一致'
93 | };
94 | ctx.body = data;
95 | }else if(a.changedRows == 0 && a.affectedRows == 0){
96 | let data = {
97 | code: 0,
98 | msg:'更新失败'
99 | };
100 | ctx.body = data;
101 | }
102 | })
103 |
104 | // 根据 id 报修信息
105 | router.post('/del', async (ctx, next) => {
106 | console.log(ctx.request.body);
107 | let id = ctx.request.body.id;
108 | let a = await query(`update bxlb set state = 0 where id = ${id}`);
109 | console.log(a);
110 | if (a.changedRows == 1) {
111 | let data = {
112 | code: 200,
113 | msg:'删除成功'
114 | };
115 | ctx.body = data;
116 | } else {
117 | let data = {
118 | code: 0,
119 | msg:'删除失败'
120 | };
121 | ctx.body = data;
122 | }
123 | })
124 |
125 |
126 |
127 |
128 |
129 |
130 | module.exports = router
131 |
--------------------------------------------------------------------------------
/myNode/myNodeApp/routes/yhqx.js:
--------------------------------------------------------------------------------
1 | const router = require('koa-router')()
2 | //引入MySQL数据库
3 | const query = require('./MYSQL');
4 | router.prefix('/yhqx');
5 | // 搜索按钮点击事件搜索相应内容并返回
6 | router.post('/search', async (ctx, next) => {
7 | console.log(ctx.request.body);
8 | let name = ctx.request.body.query;
9 | // 当前页数
10 | let pagenum = ctx.request.body.pagenum;
11 | // 当前页每页显示多少条数据
12 | let pagesize = ctx.request.body.pagesize;
13 | // 总条数
14 | let total = '';
15 | let a = '';
16 | let b = '';
17 | // 起始页索引
18 | let toppageIndex = (pagenum - 1) * pagesize;
19 | if(name == ''){
20 | // 查询总条数 转换为字符串类型
21 | b = JSON.stringify(await query('SELECT COUNT(*) FROM yhqx where state = 1'));
22 | console.log(b);
23 | // 截取字符串,并转化为数字类型,得到总条数
24 | total = parseInt(b.substring(13, 15));
25 | //查询数据库
26 | a = await query('SELECT * FROM yhqx where state = 1 limit ' + toppageIndex + ',' + pagesize + '');
27 | }else{
28 | // 查询数据库
29 | a = await query(
30 | `SELECT * FROM yhqx where name = '${name}' and state = 1 limit ${toppageIndex},${pagesize}`
31 | );
32 | b = await query(
33 | `SELECT * FROM yhqx where name = '${name}' and state = 1`
34 | );
35 | // 格式化 b 的数据类型
36 | var dataString1 = JSON.stringify(b);
37 | var result1 = JSON.parse(dataString1);
38 | // console.log(result1);
39 | // 得到总页数
40 | total = result1.length;
41 | }
42 | // 格式化 a 的数据类型
43 | var dataString = JSON.stringify(a);
44 | var result = JSON.parse(dataString);
45 | console.log(result);
46 | if (result.length > 0) {
47 | let data = {
48 | code: 200,
49 | total: total,
50 | data: result
51 | };
52 | ctx.body = data;
53 | } else {
54 | let data = {
55 | code: 0
56 | };
57 | ctx.body = data;
58 | }
59 | })
60 |
61 | // 添加按钮点击事件搜索相应内容并返回
62 | router.post('/add', async (ctx, next) => {
63 | console.log(ctx.request.body);
64 | let name = ctx.request.body.userName;
65 | let sex = ctx.request.body.sex;
66 | let tel = ctx.request.body.telephone;
67 | let roler = ctx.request.body.role;
68 | let state = 1;
69 | // 将信息添加到数据库
70 | let a = await query(
71 | `insert into yhqx(name,sex,tel,roler,state) values('${name}','${sex}','${tel}','${roler}','${state}')`);
72 | console.log(a);
73 | if (a.affectedRows == 1) {
74 | // 代表插入成功
75 | let data = {
76 | code: 200,
77 | msg:'插入成功'
78 | };
79 | ctx.body = data;
80 | }else{
81 | let data = {
82 | code: 0,
83 | msg:'插入失败'
84 | };
85 | ctx.body = data;
86 | }
87 | })
88 |
89 | // 修改按钮点击事件搜索相应内容并返回
90 | router.post('/edit', async (ctx, next) => {
91 | console.log(ctx.request.body);
92 | let id = ctx.request.body.id;
93 | let name = ctx.request.body.name;
94 | let tel = ctx.request.body.tel;
95 | let roler = ctx.request.body.roler;
96 | // 根据id修改数据
97 | let a = await query(`update yhqx set tel = '${tel}',roler = '${roler}' where id = ${id}`);
98 | console.log(a);
99 | if (a.changedRows == 1 && a.affectedRows == 1) {
100 | let data = {
101 | code: 200,
102 | msg:'更新成功'
103 | };
104 | ctx.body = data;
105 | }else if(a.changedRows == 0 && a.affectedRows == 1){
106 | let data = {
107 | code: 100,
108 | msg:'与原数据一致'
109 | };
110 | ctx.body = data;
111 | }else if(a.changedRows == 0 && a.affectedRows == 0){
112 | let data = {
113 | code: 0,
114 | msg:'更新失败'
115 | };
116 | ctx.body = data;
117 | }
118 | });
119 | // 根据 ID 删除信息
120 | router.post('/del', async (ctx, next) => {
121 | console.log(ctx.request.body);
122 | var id = ctx.request.body.id;
123 | //根据用户id值更新对应学生的状态,用来控制该学生是否被删除
124 | let a = await query(`update yhqx set state = 0 where id = ${id}`);
125 |
126 | if (a.changedRows == 1) {
127 | let data = {
128 | code: 200,
129 | msg:'删除成功'
130 | };
131 | ctx.body = data;
132 | } else {
133 | let data = {
134 | code: 0,
135 | msg:'删除失败'
136 | };
137 | ctx.body = data;
138 | }
139 |
140 | })
141 |
142 | module.exports = router
--------------------------------------------------------------------------------
/myproject/src/assets/font/iconfont.css:
--------------------------------------------------------------------------------
1 | @font-face {font-family: "iconfont";
2 | src: url('iconfont.eot?t=1582363332233'); /* IE9 */
3 | src: url('iconfont.eot?t=1582363332233#iefix') format('embedded-opentype'), /* IE6-IE8 */
4 | url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAioAAsAAAAAD7AAAAhaAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCEIAqQeI1EATYCJAMoCxYABCAFhG0HgRMbHQ1RlFBSAdnPA9t5SjA0tTIfmnolOz4MrqBDZVSapPHw//v12+fd+xwTr6LVNItZJEFIJEq1qJHE6jNIpv65b+03Xxw8lH39e0Q9aT2d3T2dW8OatkwpVEKE0Bgez/yX5tY6vaTQeMbEI4LDkOsgpZ+9dFChsc4EFF9ATZgPrbl6P0kDD0UP01DoxPJi9zJxTLwR4hIhE9JErCLWRqgQKrkRCxarjdmrcKG1MftV2Ql0Fhiq7Tu5uoWujIXAgauJCKA7ZZJXVIdGW0Wi5oi3Sk3xuviBN/7n458tIaRQJpzTofPHMewNJg4/p5ejl86lV68ON4zcFQnrgJzL76P6dyBGW9vQHc9uA9Os0G+RBxMH0y+57LG3fhmMDT+PRrQ3s+MwTe4GWdLeLiqL4VqR/vEqLI6D+ulay2Ci7iQzmN5JYrCEWi0tg0ED6RgMAtItGJSQvsCggjSGTmqGn08pQGejTAO2gOID6TSwvM+vZrWKUKFDtvKCVjRnvKpHFoRo8qRk5/Rx0qltcpZHPl+KZknlUiQJvAAGTbJ/W3GaMg9aS1Kuy+xFLSAjbNa0EJNN8LzPyuVnXgyAKc5ktISZEBsxcdIsuZ5oFI/HSbXdbrGqQCxGJBKUaeLxJXbrWjYCQSbOEgbgZcjIZhgDh01HMqcGLek9/kPMwTTaZ+yxSoKaqUYbq+xchUo7YDlVTPs6onES3u4izxsjLIlcuxqp5D2MzhQzYQtnirChYtYGCUwnTQ3wUauV2SVewITEYjaih9ycRCJkogFwVabEP2g6tUrVQV4iheVuvBUnz8UJvcsRtmgowho006PW0rxbMhBUsR3uYKI4Tl6tE3hqD70vVgkkkFwWQ3cSqfNuo1HCc5G9bLpiudRzQHMf0wlA0jZSAounSwkTYDLAXzHK+khnb6KGVTxjZ/JdNUrQ+4tWj2f0Aje3MTUTeklAT9pc7mDQryIodyZl94Zue+vU6VR27PL5AmoSxzGsXGvd1xElwqphu2ahCwp4znC6PMgZYJN4HhBDEkgAcBWRCD6csgclcstejhullIwnAwu4Pj1FzO4CoKfAWpEhm008CQH9PnteDJGfetYP3BJxiGHQpwZEx+m+JIzwlkIIUJ9Zk1itALzcpRSvtKpUwKt1pO3NO1iz6yZ7Wn2+4HD/gN4FaTTxRGEiRlyKdei0BEU9i+GIKUHd7ZT0hqCl+yQ7PHBW7NBqM2xKpVO3j6+i8uYfSreeunVGc6bwSKpGY99jUNvEaXqXfgz0xezJ4IF0+nBC2n7Gd772fHgdV8PNnFzAT6GbWkr4BbMmczUzhIrejN5M0ipCMcG/sJ4d66ZDM6Dta7EeHv+u4gwfQptXTW2HJG57JTeD4ScF2+4WCTUiKLJXhvZFZXsRNJw+wOF0fztIM/DbXW7zeLPhvxmDQU5cw95+3+r6RLVoQhpkhyuaE834cYBDPXuucva8XdOOBY/Js4amFDAg2iRtG7CnELo5/uHLwaSd6d+9ixiQOTeIWvrj5HhWxdiBU8iAIKBC+FA4VHQBeyBKucq43C6I3rKgK9FmbCbogGZgzegK7BFVAwVxuTg8+eUKM1aPmXkzID+MJWatRC16+TK2ArSgdE7HPcmlkafHDryutcNfObVp+te/S5wMhPb1Xvg0AgbCXZFtC8HiFadmF1/pfDhpTsHqc9CymcSM7snb2tMiDZ6alrSJWwFVii+Ryf6/aX4VtfAtMjeHyOmaX9XZD6qm6WpI4Hb134Pp/xocBcdSI9jrGFBowodQANS8HSc5MvY/ia2M4ESQXgGwcyQOOBD9fzMNiZFEoA6QERyg9IK0pQhGjWVCilVQBFqVbsaY9djraealWOu1fb92Vr4Ri+o65/ryA22ai/hvf7bUv7xz64j+S6t/3FF34rP60du7umYcf23EhB/WFl4D24+jjOixkDknFIo8Fz0sSOQXviH4nj5Hfy94ozBf896YkjGqLn5kynWhk2f0zZyRMh0yUh+KXMnb3PWs5LmgRLB0AlPCgO9urBI4BSm9E0pKe0sr9KOk8HuFqCOVrHiPBw0ERRAv5XukFHFVkI/IignOR+89qnhUKejE5YRBaCqaQqSkpqRcMP8H94h2CFIFDvoR+FlZUrxcLOYc9dcoD3yCNyTmuzmv/FJd+GCu6E1Bm4z8cELJm2Bfvk1uvLBF96dqM3X5Nbhy6AV+8/fV2WfHjloNFl9QWv7UFelXLzLP/WPlT+q3morA2HHjpPTCEzuyj5Sh/4ftYMeSUSkV17NfOnFNMm5sEmDdZ8GUq8CIl18kSWCTd/0tg0YBAKNA4uAugb2NlSAm1pcBgLQTBvWx9B4sWr+Q1sMV/1Pe4MKj83+q4k3c+t/0v10Lvx74TtjDz6P54o0F/0rDeTBiW+47FqjrBSusmR4S5s9v5rweFoupex3+iyan+Du0PH1j+u9Pnj6Ghdp8mDSWYVm9DpZ622ClsRN21jqN3ZtKa4jcYo1PAcMkX7AwwSeYTPKDA4f6F5Zm+IeVSQHDzolYT7K3Imb3DzUGFmMWPrMkopIrq+2Hg9coXB7oSdbX3aM2yQKbbdg0u3GKJepDhDAPYm4tZ1xTwU5EbpjnxCpNKUZ2LK2tNiYbz8dCjiMqoG8vDQWsbRtjQs8DExFS4o6t/tz3X0OCkwvoFTe2A+8hzUgezsyMTTfATsVyoxsv5bjxQJizNMwxfV4jBeaEhlEuVwlTxT2lUMQakzssVzZM6C6+qTg+vVy82+wv3S0cvosiUuQoo4o6mmg/2FYzX0EmRmIppKM0CYhj0n1yOGtvWzKu0mQpiTyqrMdf94zT2MrNo0481Kw/i5xKykf3krSM22ZHQ2MJAAA=') format('woff2'),
5 | url('iconfont.woff?t=1582363332233') format('woff'),
6 | url('iconfont.ttf?t=1582363332233') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */
7 | url('iconfont.svg?t=1582363332233#iconfont') format('svg'); /* iOS 4.1- */
8 | }
9 |
10 | .iconfont {
11 | font-family: "iconfont" !important;
12 | font-size: 16px;
13 | font-style: normal;
14 | -webkit-font-smoothing: antialiased;
15 | -moz-osx-font-smoothing: grayscale;
16 | }
17 |
18 | .iconiconfontshenghuojiaofei:before {
19 | content: "\e654";
20 | }
21 |
22 | .iconxuesheng:before {
23 | content: "\e7c0";
24 | }
25 |
26 | .icontongji:before {
27 | content: "\e615";
28 | }
29 |
30 | .iconic_opt_feature:before {
31 | content: "\e60f";
32 | }
33 |
34 | .iconicon-:before {
35 | content: "\e671";
36 | }
37 |
38 | .icontongji1:before {
39 | content: "\e6c8";
40 | }
41 |
42 | .iconhouqinwuzi:before {
43 | content: "\e6fe";
44 | }
45 |
46 | .iconsushe:before {
47 | content: "\e624";
48 | }
49 |
50 | .iconren:before {
51 | content: "\e622";
52 | }
53 |
54 |
--------------------------------------------------------------------------------
/myNode/myNodeApp/routes/sspf.js:
--------------------------------------------------------------------------------
1 | const router = require('koa-router')()
2 | //引入MySQL数据库
3 | const query = require('./MYSQL');
4 | router.prefix('/sspf');
5 |
6 | // 返回宿舍评分搜索按钮的数据
7 | router.post('/search', async (ctx, next) => {
8 | console.log(ctx.request.body);
9 | let lynumber = ctx.request.body.lynumber;
10 | let sushe = ctx.request.body.sushe;
11 | let xueyuan = ctx.request.body.xueyuan;
12 | let banji = ctx.request.body.banji;
13 | // 当前页数
14 | let pagenum = ctx.request.body.pagenum;
15 | // 当前页每页显示多少条数据
16 | let pagesize = ctx.request.body.pagesize;
17 | // 总条数
18 | let total = '';
19 | // 起始页索引
20 | let toppageIndex = (pagenum - 1) * pagesize;
21 | let a = '';
22 | let b = '';
23 | // 宿舍号
24 | let ssh = '';
25 | // 卫生分
26 | let wsf = '';
27 | // 纪律分
28 | let jlf = '';
29 | // 宿舍文化分
30 | let whf = '';
31 | if (lynumber == '' && sushe == '' && xueyuan == '' && banji == '') {
32 | // 查询总条数 转换为字符串类型
33 | b = JSON.stringify(await query('SELECT COUNT(*) FROM sspf'));
34 | console.log(b);
35 | // 截取字符串,并转化为数字类型,得到总条数
36 | total = parseInt(b.substring(13, 15));
37 | //查询数据库
38 | a = await query('SELECT * FROM sspf limit ' + toppageIndex + ',' + pagesize + '');
39 | // 查询宿舍号
40 | ssh = await query('SELECT sushe FROM sspf limit ' + toppageIndex + ',' + pagesize + '');
41 | // 查询卫生分
42 | wsf = await query('SELECT health FROM sspf limit ' + toppageIndex + ',' + pagesize + '');
43 | // 查询纪律分
44 | jlf = await query('SELECT discipline FROM sspf limit ' + toppageIndex + ',' + pagesize + '');
45 | // 查询宿舍文化分
46 | whf = await query('SELECT dormitoryculture FROM sspf limit ' + toppageIndex + ',' + pagesize + '');
47 |
48 | } else {
49 | // 查询数据库
50 | a = await query(
51 | `SELECT * FROM sspf where lynumber = '${lynumber}' and sushe = '${sushe}' or xueyuan = '${xueyuan}' and banji = '${banji}' limit ${toppageIndex},${pagesize}`
52 | );
53 | b = await query(
54 | `SELECT * FROM sspf where sushe = '${sushe}' or xueyuan = '${xueyuan}' or lynumber = '${lynumber}' or banji = '${banji}'`
55 | );
56 | // 格式化 b 的数据类型
57 | var dataString1 = JSON.stringify(b);
58 | var result1 = JSON.parse(dataString1);
59 | // console.log(result1);
60 | // 得到总页数
61 | total = result1.length;
62 |
63 | // 查询宿舍号
64 | ssh = await query(`SELECT sushe FROM sspf where lynumber = '${lynumber}' and sushe = '${sushe}' or xueyuan = '${xueyuan}' and banji = '${banji}' limit ${toppageIndex},${pagesize}`);
65 | // 查询卫生分
66 | wsf = await query(`SELECT health FROM sspf where lynumber = '${lynumber}' and sushe = '${sushe}' or xueyuan = '${xueyuan}' and banji = '${banji}' limit ${toppageIndex},${pagesize}`);
67 | // 查询纪律分
68 | jlf = await query(`SELECT discipline FROM sspf where lynumber = '${lynumber}' and sushe = '${sushe}' or xueyuan = '${xueyuan}' and banji = '${banji}' limit ${toppageIndex},${pagesize}`);
69 | // 查询宿舍文化分
70 | whf = await query(`SELECT dormitoryculture FROM sspf where lynumber = '${lynumber}' and sushe = '${sushe}' or xueyuan = '${xueyuan}' and banji = '${banji}' limit ${toppageIndex},${pagesize}`);
71 | }
72 |
73 | // 格式化 a 的数据类型
74 | var dataString = JSON.stringify(a);
75 | var result = JSON.parse(dataString);
76 | console.log(result);
77 | // 格式化 ssh 的数据类型
78 | var dataString2 = JSON.stringify(ssh);
79 | var sshresult = JSON.parse(dataString2);
80 | console.log(sshresult);
81 |
82 | // 转换为数组格式
83 | let ssharr = [];
84 | for (var i in sshresult) {
85 | ssharr.push(parseInt(sshresult[i].sushe))
86 | }
87 | console.log(ssharr);
88 | // 格式化 wsf 的数据类型
89 | var dataString3 = JSON.stringify(wsf);
90 | var wsfresult = JSON.parse(dataString3);
91 | console.log(wsfresult);
92 |
93 | let wsfarr = [];
94 | for (var i in wsfresult) {
95 | wsfarr.push(wsfresult[i].health)
96 | }
97 | // 格式化 jlf 的数据类型
98 | var dataString4 = JSON.stringify(jlf);
99 | var jlfresult = JSON.parse(dataString4);
100 | console.log(jlfresult);
101 |
102 | let jlfarr = [];
103 | for (var i in jlfresult) {
104 | jlfarr.push(jlfresult[i].discipline)
105 | }
106 | // 格式化 whf 的数据类型
107 | var dataString5 = JSON.stringify(whf);
108 | var whfresult = JSON.parse(dataString5);
109 | console.log(whfresult);
110 |
111 | let whfarr = [];
112 | for (var i in whfresult) {
113 | whfarr.push(whfresult[i].dormitoryculture)
114 | }
115 | if (result.length > 0) {
116 | let data = {
117 | code: 200,
118 | total: total,
119 | data: result,
120 | ssh:ssharr,
121 | wsf:wsfarr,
122 | jlf:jlfarr,
123 | whf:whfarr
124 | };
125 | ctx.body = data;
126 | } else {
127 | let data = {
128 | code: 0
129 | };
130 | ctx.body = data;
131 | }
132 | })
133 |
134 |
135 |
136 |
137 | module.exports = router
138 |
--------------------------------------------------------------------------------
/myproject/src/components/grzx/xgmm.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 首页
6 | 个人中心
7 | 个人信息
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
66 |
67 |
68 |
69 |
70 |
71 | 修改信息
72 | 提交
73 | 取消
74 |
75 |
76 |
77 |
78 |
79 |
80 |
135 |
136 |
--------------------------------------------------------------------------------
/myNode/myNodeApp/routes/bxtj.js:
--------------------------------------------------------------------------------
1 | const router = require('koa-router')()
2 | //引入MySQL数据库
3 | const query = require('./MYSQL');
4 | router.prefix('/bxtj');
5 |
6 | // 返回楼管评价页面搜索按钮的数据
7 | router.post('/search', async (ctx, next) => {
8 | console.log(ctx.request.body);
9 | let lynumber = ctx.request.body.lynumber;
10 | // 当前页数
11 | let pagenum = ctx.request.body.pagenum;
12 | // 当前页每页显示多少条数据
13 | let pagesize = ctx.request.body.pagesize;
14 | // 总条数
15 | let total = '';
16 | // 起始页索引
17 | let toppageIndex = (pagenum - 1) * pagesize;
18 | let a = '';
19 | let b = '';
20 | // 楼宇号
21 | let lyh = '';
22 | // 保修损耗
23 | let bxsh = '';
24 | // 材料购买
25 | let clgm = '';
26 | // 楼宇维护
27 | let lywh = '';
28 | if (lynumber == '') {
29 | // 查询总条数 转换为字符串类型
30 | b = JSON.stringify(await query('SELECT COUNT(*) FROM bxtj'));
31 | console.log(b);
32 | // 截取字符串,并转化为数字类型,得到总条数
33 | total = parseInt(b.substring(13, 15));
34 | //查询数据库
35 | a = await query('SELECT * FROM bxtj limit ' + toppageIndex + ',' + pagesize + '');
36 | // 查询楼宇号
37 | lyh = await query('SELECT lynumber FROM bxtj limit ' + toppageIndex + ',' + pagesize + '');
38 | // 查询保修损耗
39 | bxsh = await query('SELECT bxsh FROM bxtj limit ' + toppageIndex + ',' + pagesize + '');
40 | // 查询材料购买
41 | clgm = await query('SELECT clgm FROM bxtj limit ' + toppageIndex + ',' + pagesize + '');
42 | // 查询楼宇维护
43 | lywh = await query('SELECT lywh FROM bxtj limit ' + toppageIndex + ',' + pagesize + '');
44 |
45 | } else {
46 | // 查询数据库
47 | a = await query(
48 | `SELECT * FROM bxtj where lynumber = '${lynumber}' limit ${toppageIndex},${pagesize}`
49 | );
50 | b = await query(
51 | `SELECT * FROM bxtj where lynumber = '${lynumber}'`
52 | );
53 | // 格式化 b 的数据类型
54 | var dataString1 = JSON.stringify(b);
55 | var result1 = JSON.parse(dataString1);
56 | // console.log(result1);
57 | // 得到总页数
58 | total = result1.length;
59 |
60 | // 查询楼宇号
61 | lyh = await query(`SELECT lynumber FROM bxtj where lynumber = '${lynumber}' limit ${toppageIndex},${pagesize}`);
62 | // 查询保修损耗
63 | bxsh = await query(`SELECT bxsh FROM bxtj where lynumber = '${lynumber}' limit ${toppageIndex},${pagesize}`);
64 | // 查询材料购买
65 | clgm = await query(`SELECT clgm FROM bxtj where lynumber = '${lynumber}' limit ${toppageIndex},${pagesize}`);
66 | // 查询楼宇维护
67 | lywh = await query(`SELECT lywh FROM bxtj where lynumber = '${lynumber}' limit ${toppageIndex},${pagesize}`);
68 | }
69 |
70 | // 格式化 a 的数据类型
71 | var dataString = JSON.stringify(a);
72 | var result = JSON.parse(dataString);
73 | console.log(result);
74 | // 格式化 lyh 的数据类型
75 | var dataString2 = JSON.stringify(lyh);
76 | var lyhresult = JSON.parse(dataString2);
77 | console.log(lyhresult);
78 |
79 | // 转换为数组格式
80 | let lyharr = [];
81 | for (var i in lyhresult) {
82 | lyharr.push(lyhresult[i].lynumber)
83 | }
84 | console.log(lyharr);
85 | // 格式化 bxsh 的数据类型
86 | var dataString3 = JSON.stringify(bxsh);
87 | var bxshresult = JSON.parse(dataString3);
88 | console.log(bxshresult);
89 |
90 | let bxsharr = [];
91 | for (var i in bxshresult) {
92 | bxsharr.push(bxshresult[i].bxsh)
93 | }
94 | // 格式化 clgm 的数据类型
95 | var dataString4 = JSON.stringify(clgm);
96 | var clgmresult = JSON.parse(dataString4);
97 | console.log(clgmresult);
98 |
99 | let clgmarr = [];
100 | for (var i in clgmresult) {
101 | clgmarr.push(clgmresult[i].clgm)
102 | }
103 | // 格式化 lywh 的数据类型
104 | var dataString5 = JSON.stringify(lywh);
105 | var lywhresult = JSON.parse(dataString5);
106 | // console.log(lywhresult);
107 |
108 | let lywharr = [];
109 | for (var i in lywhresult) {
110 | lywharr.push(lywhresult[i].lywh)
111 | }
112 | if (result.length > 0) {
113 | let data = {
114 | code: 200,
115 | total: total,
116 | data: result,
117 | lyh:lyharr,
118 | bxsh:bxsharr,
119 | clgm:clgmarr,
120 | lywh:lywharr
121 | };
122 | ctx.body = data;
123 | } else {
124 | let data = {
125 | code: 0
126 | };
127 | ctx.body = data;
128 | }
129 | });
130 |
131 | // 返回报修统计页面添加按钮的数据
132 | router.post('/add', async (ctx, next) => {
133 | console.log(ctx.request.body);
134 | let lynumber = ctx.request.body.lyNumber;
135 | let name = ctx.request.body.name;
136 | let tel = ctx.request.body.tel;
137 | let bxsh = ctx.request.body.bxsh;
138 | let clgm = ctx.request.body.clgm;
139 | let lywh = ctx.request.body.lywh;
140 | // 计算总分
141 | let total = parseInt(bxsh) + parseInt(clgm) + parseInt(lywh);
142 | console.log(total);
143 | // 将信息添加到数据库
144 | let a = await query(
145 | `insert into bxtj(lynumber,name,tel,bxsh,clgm,lywh,total) values('${lynumber}','${name}','${tel}','${bxsh}','${clgm}','${lywh}','${total}')`);
146 | console.log(a);
147 | if (a.affectedRows == 1) {
148 | // 代表插入成功
149 | let data = {
150 | code: 200,
151 | msg:'插入成功'
152 | };
153 | ctx.body = data;
154 | }else{
155 | let data = {
156 | code: 0,
157 | msg:'插入失败'
158 | };
159 | ctx.body = data;
160 | }
161 | })
162 |
163 |
164 | module.exports = router
--------------------------------------------------------------------------------
/myproject/src/components/login.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
黄河科技学院宿舍管理系统
4 |
5 |
6 |
7 |

8 |
9 |
10 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
29 |
30 |
31 |
32 | 登录
33 | 重置
34 |
35 |
36 |
37 |
38 |
39 |
40 |
113 |
114 |
115 |
174 |
--------------------------------------------------------------------------------
/myproject/src/excel/Export2Excel.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | require('script-loader!file-saver');
3 | require('./Blob');
4 | require('script-loader!xlsx/dist/xlsx.core.min');
5 | import XLSX from "xlsx"
6 |
7 | function generateArray(table) {
8 | var out = [];
9 | var rows = table.querySelectorAll('tr');
10 | var ranges = [];
11 | for (var R = 0; R < rows.length; ++R) {
12 | var outRow = [];
13 | var row = rows[R];
14 | var columns = row.querySelectorAll('td');
15 | for (var C = 0; C < columns.length; ++C) {
16 | var cell = columns[C];
17 | var colspan = cell.getAttribute('colspan');
18 | var rowspan = cell.getAttribute('rowspan');
19 | var cellValue = cell.innerText;
20 | if (cellValue !== "" && cellValue == +cellValue) cellValue = +cellValue;
21 |
22 | //Skip ranges
23 | ranges.forEach(function (range) {
24 | if (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <= range.e.c) {
25 | for (var i = 0; i <= range.e.c - range.s.c; ++i) outRow.push(null);
26 | }
27 | });
28 |
29 | //Handle Row Span
30 | if (rowspan || colspan) {
31 | rowspan = rowspan || 1;
32 | colspan = colspan || 1;
33 | ranges.push({s: {r: R, c: outRow.length}, e: {r: R + rowspan - 1, c: outRow.length + colspan - 1}});
34 | }
35 | ;
36 |
37 | //Handle Value
38 | outRow.push(cellValue !== "" ? cellValue : null);
39 |
40 | //Handle Colspan
41 | if (colspan) for (var k = 0; k < colspan - 1; ++k) outRow.push(null);
42 | }
43 | out.push(outRow);
44 | }
45 | return [out, ranges];
46 | };
47 |
48 | function datenum(v, date1904) {
49 | if (date1904) v += 1462;
50 | var epoch = Date.parse(v);
51 | return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);
52 | }
53 |
54 | function sheet_from_array_of_arrays(data, opts) {
55 | var ws = {};
56 | var range = {s: {c: 10000000, r: 10000000}, e: {c: 0, r: 0}};
57 | for (var R = 0; R != data.length; ++R) {
58 | for (var C = 0; C != data[R].length; ++C) {
59 | if (range.s.r > R) range.s.r = R;
60 | if (range.s.c > C) range.s.c = C;
61 | if (range.e.r < R) range.e.r = R;
62 | if (range.e.c < C) range.e.c = C;
63 | var cell = {v: data[R][C]};
64 | if (cell.v == null) continue;
65 | var cell_ref = XLSX.utils.encode_cell({c: C, r: R});
66 |
67 | if (typeof cell.v === 'number') cell.t = 'n';
68 | else if (typeof cell.v === 'boolean') cell.t = 'b';
69 | else if (cell.v instanceof Date) {
70 | cell.t = 'n';
71 | cell.z = XLSX.SSF._table[14];
72 | cell.v = datenum(cell.v);
73 | }
74 | else cell.t = 's';
75 |
76 | ws[cell_ref] = cell;
77 | }
78 | }
79 | if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range);
80 | return ws;
81 | }
82 |
83 | function Workbook() {
84 | if (!(this instanceof Workbook)) return new Workbook();
85 | this.SheetNames = [];
86 | this.Sheets = {};
87 | }
88 |
89 | function s2ab(s) {
90 | var buf = new ArrayBuffer(s.length);
91 | var view = new Uint8Array(buf);
92 | for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
93 | return buf;
94 | }
95 |
96 | export function export_table_to_excel(id) {
97 | var theTable = document.getElementById(id);
98 | console.log('a')
99 | var oo = generateArray(theTable);
100 | var ranges = oo[1];
101 |
102 | /* original data */
103 | var data = oo[0];
104 | var ws_name = "SheetJS";
105 | console.log(data);
106 |
107 | var wb = new Workbook(), ws = sheet_from_array_of_arrays(data);
108 |
109 | /* add ranges to worksheet */
110 | // ws['!cols'] = ['apple', 'banan'];
111 | ws['!merges'] = ranges;
112 |
113 | /* add worksheet to workbook */
114 | wb.SheetNames.push(ws_name);
115 | wb.Sheets[ws_name] = ws;
116 |
117 | var wbout = XLSX.write(wb, {bookType: 'xlsx', bookSST: false, type: 'binary'});
118 |
119 | saveAs(new Blob([s2ab(wbout)], {type: "application/octet-stream"}), "test.xlsx")
120 | }
121 |
122 | function formatJson(jsonData) {
123 | console.log(jsonData)
124 | }
125 | export function export_json_to_excel(th, jsonData, defaultTitle) {
126 |
127 | /* original data */
128 |
129 | var data = jsonData;
130 | data.unshift(th);
131 | var ws_name = "SheetJS";
132 |
133 | var wb = new Workbook(), ws = sheet_from_array_of_arrays(data);
134 |
135 |
136 | /* add worksheet to workbook */
137 | wb.SheetNames.push(ws_name);
138 | wb.Sheets[ws_name] = ws;
139 |
140 | var wbout = XLSX.write(wb, {bookType: 'xlsx', bookSST: false, type: 'binary'});
141 | var title = defaultTitle || '列表'
142 | saveAs(new Blob([s2ab(wbout)], {type: "application/octet-stream"}), title + ".xlsx")
143 | }
144 |
--------------------------------------------------------------------------------
/myNode/myNodeApp/routes/lgpf.js:
--------------------------------------------------------------------------------
1 | const router = require('koa-router')()
2 | //引入MySQL数据库
3 | const query = require('./MYSQL');
4 | router.prefix('/lgpf');
5 |
6 |
7 | // 返回楼管评价页面搜索按钮的数据
8 | router.post('/search', async (ctx, next) => {
9 | console.log(ctx.request.body);
10 | let lynumber = ctx.request.body.lynumber;
11 | let name = ctx.request.body.name;
12 | // 当前页数
13 | let pagenum = ctx.request.body.pagenum;
14 | // 当前页每页显示多少条数据
15 | let pagesize = ctx.request.body.pagesize;
16 | // 总条数
17 | let total = '';
18 | // 起始页索引
19 | let toppageIndex = (pagenum - 1) * pagesize;
20 | let a = '';
21 | let b = '';
22 | // 姓名
23 | let lgname = '';
24 | // 品格分
25 | let pgf = '';
26 | // 服务分
27 | let fwf = '';
28 | // 责任心分
29 | let zrx = '';
30 | if (lynumber == '' && name == '') {
31 | // 查询总条数 转换为字符串类型
32 | b = JSON.stringify(await query('SELECT COUNT(*) FROM lgpf'));
33 | console.log(b);
34 | // 截取字符串,并转化为数字类型,得到总条数
35 | total = parseInt(b.substring(13, 15));
36 | //查询数据库
37 | a = await query('SELECT * FROM lgpf limit ' + toppageIndex + ',' + pagesize + '');
38 | // 查询姓名
39 | lgname = await query('SELECT name FROM lgpf limit ' + toppageIndex + ',' + pagesize + '');
40 | // 查询品格分
41 | pgf = await query('SELECT pgf FROM lgpf limit ' + toppageIndex + ',' + pagesize + '');
42 | // 查询服务分
43 | fwf = await query('SELECT fwf FROM lgpf limit ' + toppageIndex + ',' + pagesize + '');
44 | // 查询责任心分
45 | zrx = await query('SELECT zrx FROM lgpf limit ' + toppageIndex + ',' + pagesize + '');
46 |
47 | } else {
48 | // 查询数据库
49 | a = await query(
50 | `SELECT * FROM lgpf where lynumber = '${lynumber}' or name = '${name}' limit ${toppageIndex},${pagesize}`
51 | );
52 | b = await query(
53 | `SELECT * FROM lgpf where lynumber = '${lynumber}' or name = '${name}'`
54 | );
55 | // 格式化 b 的数据类型
56 | var dataString1 = JSON.stringify(b);
57 | var result1 = JSON.parse(dataString1);
58 | // console.log(result1);
59 | // 得到总页数
60 | total = result1.length;
61 |
62 | // 查询姓名
63 | lgname = await query(`SELECT name FROM lgpf where lynumber = '${lynumber}' or name = '${name}' limit ${toppageIndex},${pagesize}`);
64 | // 查询品格分
65 | pgf = await query(`SELECT pgf FROM lgpf where lynumber = '${lynumber}' or name = '${name}' limit ${toppageIndex},${pagesize}`);
66 | // 查询服务分
67 | fwf = await query(`SELECT fwf FROM lgpf where lynumber = '${lynumber}' or name = '${name}' limit ${toppageIndex},${pagesize}`);
68 | // 查询责任心分
69 | zrx = await query(`SELECT zrx FROM lgpf where lynumber = '${lynumber}' or name = '${name}' limit ${toppageIndex},${pagesize}`);
70 | }
71 |
72 | // 格式化 a 的数据类型
73 | var dataString = JSON.stringify(a);
74 | var result = JSON.parse(dataString);
75 | console.log(result);
76 | // 格式化 lgname 的数据类型
77 | var dataString2 = JSON.stringify(lgname);
78 | var lgnameresult = JSON.parse(dataString2);
79 | console.log(lgnameresult);
80 |
81 | // 转换为数组格式
82 | let lgnamearr = [];
83 | for (var i in lgnameresult) {
84 | lgnamearr.push(lgnameresult[i].name)
85 | }
86 | console.log(lgnamearr);
87 | // 格式化 pgf 的数据类型
88 | var dataString3 = JSON.stringify(pgf);
89 | var pgfresult = JSON.parse(dataString3);
90 | console.log(pgfresult);
91 |
92 | let pgfarr = [];
93 | for (var i in pgfresult) {
94 | pgfarr.push(pgfresult[i].pgf)
95 | }
96 | // 格式化 fwf 的数据类型
97 | var dataString4 = JSON.stringify(fwf);
98 | var fwfresult = JSON.parse(dataString4);
99 | console.log(fwfresult);
100 |
101 | let fwfarr = [];
102 | for (var i in fwfresult) {
103 | fwfarr.push(fwfresult[i].fwf)
104 | }
105 | // 格式化 zrx 的数据类型
106 | var dataString5 = JSON.stringify(zrx);
107 | var zrxresult = JSON.parse(dataString5);
108 | // console.log(zrxresult);
109 |
110 | let zrxarr = [];
111 | for (var i in zrxresult) {
112 | zrxarr.push(zrxresult[i].zrx)
113 | }
114 | if (result.length > 0) {
115 | let data = {
116 | code: 200,
117 | total: total,
118 | data: result,
119 | lgname:lgnamearr,
120 | pgf:pgfarr,
121 | fwf:fwfarr,
122 | zrx:zrxarr
123 | };
124 | ctx.body = data;
125 | } else {
126 | let data = {
127 | code: 0
128 | };
129 | ctx.body = data;
130 | }
131 | });
132 |
133 | // 返回楼管评价页面添加按钮的数据
134 | router.post('/add', async (ctx, next) => {
135 | console.log(ctx.request.body);
136 | let lynumber = ctx.request.body.lyNumber;
137 | let name = ctx.request.body.name;
138 | let pgf = ctx.request.body.pgf;
139 | let fwf = ctx.request.body.fwf;
140 | let zrx = ctx.request.body.zrx;
141 | let data = ctx.request.body.data;
142 | let time1= ctx.request.body.time;
143 | let time = data +' ' +time1;
144 | // 计算总分
145 | let total = parseInt(pgf) + parseInt(fwf) + parseInt(zrx);
146 | console.log(total);
147 | // 将信息添加到数据库
148 | let a = await query(
149 | `insert into lgpf(lynumber,name,pgf,fwf,zrx,time,total) values('${lynumber}','${name}','${pgf}','${fwf}','${zrx}','${time}','${total}')`);
150 | console.log(a);
151 | if (a.affectedRows == 1) {
152 | // 代表插入成功
153 | let data = {
154 | code: 200,
155 | msg:'插入成功'
156 | };
157 | ctx.body = data;
158 | }else{
159 | let data = {
160 | code: 0,
161 | msg:'插入失败'
162 | };
163 | ctx.body = data;
164 | }
165 | })
166 |
167 |
168 |
169 | module.exports = router
--------------------------------------------------------------------------------
/myNode/myNodeApp/routes/dormList.js:
--------------------------------------------------------------------------------
1 | const router = require('koa-router')()
2 | //引入MySQL数据库
3 | const query = require('./MYSQL');
4 | router.prefix('/dormList');
5 |
6 | // 搜索按钮点击事件搜索相应内容并返回
7 | router.post('/search', async (ctx, next) => {
8 | console.log(ctx.request.body);
9 | let lynumber = ctx.request.body.lynumber;
10 | let lgname = ctx.request.body.lgname;
11 | let ssnumber = ctx.request.body.ssnumber;
12 | // 当前页数
13 | let pagenum = ctx.request.body.pagenum;
14 | // 当前页每页显示多少条数据
15 | let pagesize = ctx.request.body.pagesize;
16 | // 根据楼宇号查询
17 | let a = await query(`SELECT * FROM lynumber where state = 1 && lynumber = '${lynumber}'`);
18 | // 格式化 a 的数据类型
19 | var dataString = JSON.stringify(a);
20 | var result = JSON.parse(dataString);
21 | // console.log(result);
22 | // console.log(result[0].id);
23 | // 得到lyid
24 | let lyid = result[0].id;
25 | // 根据lyid 在宿舍表中查找对应楼宇的所有宿舍
26 | var b = '';
27 | if (ssnumber == '') {
28 | // 根据lyid 在宿舍表中查找对应楼宇的所有宿舍
29 | b = await query(`SELECT * FROM sushe where lyid = '${lyid}'`);
30 | } else if (lynumber != '' && ssnumber != '') {
31 | // 根据lyid 和宿舍号 在宿舍表中查找对应楼宇的所有宿舍
32 | b = await query(`SELECT * FROM sushe where lyid = '${lyid}' and sushe = ${ssnumber}`);
33 | }
34 |
35 | // 格式化 b 的数据类型
36 | var dataString2 = JSON.stringify(b);
37 | var result2 = JSON.parse(dataString2);
38 | // console.log(result2.length);
39 | // 页码总条数
40 | var pagetotal = result2.length;
41 | // 起始页索引
42 | let toppageIndex = (pagenum - 1) * pagesize;
43 |
44 | // 分页查询
45 | //查询数据库
46 | var c = '';
47 | if (ssnumber == '') {
48 | // 根据楼宇号在宿舍表中查找对应楼宇的所有宿舍
49 | c = await query('SELECT * FROM sushe where lyid = ' + lyid + ' limit ' + toppageIndex + ',' + pagesize + '');
50 | } else if (lynumber != '' && ssnumber != '') {
51 | // 根据lyid 和宿舍号 在宿舍表中查找对应楼宇的所有宿舍
52 | c = await query('SELECT * FROM sushe where lyid = ' + lyid + ' and sushe = ' + ssnumber + ' limit ' + toppageIndex +
53 | ',' + pagesize + '');
54 | }
55 | console.log(c);
56 | console.log(c.length);
57 | // 格式化数据类型
58 | var dataString3 = JSON.stringify(c);
59 | var result3 = JSON.parse(dataString3);
60 | console.log('++++++++++++++++++++++++++++++++++')
61 | console.log(result3);
62 |
63 | // console.log('----------------------------------------');
64 | // result2 就是最后根据楼宇号查询到的宿舍信息
65 | // console.log(result2);
66 | // for循环再根据查询到的宿舍查询,将查询到的宿舍人员信息添加到 result3 的children 中
67 | for (var i = 0; i < result3.length; i++) {
68 | // console.log('+++++++++++++++++++++++++++++++++++++++++++');
69 | // console.log(result2[i].sushe);
70 | // 根据宿舍号和楼宇号查询该宿舍的人员信息
71 | let ssry = await query(
72 | `SELECT * FROM user WHERE state = 1 && sushe = ${result3[i].sushe} && lynumber = '${lynumber}'`);
73 | // 格式化 ssry 的数据类型
74 | var ssryDataString = JSON.stringify(ssry);
75 | var ssryResult = JSON.parse(ssryDataString);
76 | // console.log('========================================================');
77 | // ssryResult 就是最后查询到的该楼宇中每个宿舍中的人员信息
78 | // console.log(ssryResult);
79 | // 将 ssryResult 添加到 result2 每个对象中的children 属性中
80 | result3[i].child = ssryResult;
81 | // console.log('+++++++++++++++++++++++++++++++++++++++++++++++++++++++++');
82 | // console.log(result2);
83 | }
84 |
85 | if (result.length > 0) {
86 | let data = {
87 | code: 200,
88 | data: result3,
89 | pagetotal: pagetotal
90 | };
91 | ctx.body = data;
92 | } else {
93 | let data = {
94 | code: 0
95 | };
96 | ctx.body = data;
97 | }
98 | });
99 |
100 | // 向宿舍中添加(分配)学生
101 | router.post('/adduser', async (ctx, next) => {
102 | console.log(ctx.request.body);
103 | var name = ctx.request.body.name;
104 | var uname = ctx.request.body.studentId;
105 | var tel = ctx.request.body.tel;
106 | var fdy = ctx.request.body.fdy;
107 | var fdytel = ctx.request.body.fdytel;
108 | var xueyuan = ctx.request.body.xueyuan;
109 | var banji = ctx.request.body.banji;
110 | var sex = ctx.request.body.sex;
111 | var pass = ctx.request.body.pass;
112 | var lyid = ctx.request.body.lyid;
113 | var sushe = ctx.request.body.sushe;
114 | var state = 1;
115 | // 根据 lyid 查询到楼宇号
116 | let a = await query(`SELECT lynumber FROM lynumber where state = 1 && id = '${lyid}'`);
117 | // 格式化 a 的数据类型
118 | var dataString = JSON.stringify(a);
119 | var result = JSON.parse(dataString);
120 | console.log(result);
121 | let lynumber = result[0].lynumber;
122 | console.log('+++++++++++++++++++++++++++++');
123 | // 得到楼宇号
124 | console.log(lynumber);
125 | // 将前端传过来的信息添加到数据库
126 | let insertMysql = await query(
127 | `insert into user(uname,pass,name,sex,xueyuan,banji,tel,sushe,lynumber,fdy,fdytel,state) values('${uname}','${pass}','${name}','${sex}','${xueyuan}','${banji}','${tel}','${sushe}','${lynumber}','${fdy}','${fdytel}',1)`
128 | );
129 | console.log(insertMysql);
130 | if (insertMysql.affectedRows == 1) {
131 | // 代表插入成功
132 | let data = {
133 | code: 200,
134 | msg: '插入成功'
135 | };
136 | ctx.body = data;
137 | } else {
138 | let data = {
139 | code: 0,
140 | msg: '插入失败'
141 | };
142 | ctx.body = data;
143 | }
144 | })
145 |
146 | // 根据 id 删除学生信息
147 | router.post('/del', async (ctx, next) => {
148 | console.log(ctx.request.body);
149 | var id = ctx.request.body.id;
150 | //根据用户id值更新对应学生的状态,用来控制该学生是否被删除
151 | let a = await query(`update user set state = 0 where id = ${id}`);
152 |
153 | if (a.changedRows == 1) {
154 | let data = {
155 | code: 200,
156 | msg:'删除成功'
157 | };
158 | ctx.body = data;
159 | } else {
160 | let data = {
161 | code: 0,
162 | msg:'删除失败'
163 | };
164 | ctx.body = data;
165 | }
166 |
167 | })
168 |
169 |
170 |
171 |
172 |
173 | module.exports = router
174 |
--------------------------------------------------------------------------------
/myNode/myNodeApp/routes/xslb.js:
--------------------------------------------------------------------------------
1 | const router = require('koa-router')()
2 | //引入MySQL数据库
3 | const query = require('./MYSQL');
4 | router.prefix('/xslb');
5 |
6 | // 搜索按钮点击事件搜索相应内容并返回
7 | router.post('/search', async (ctx, next) => {
8 | console.log(ctx.request.body);
9 | let uname = ctx.request.body.studentNumber;
10 | let name = ctx.request.body.studentName;
11 | let sushe = ctx.request.body.susheNumber;
12 | let xueyuan = ctx.request.body.xueyuan;
13 | let lynumber = ctx.request.body.lyNumber;
14 | let banji = ctx.request.body.className;
15 | // 当前页数
16 | let pagenum = ctx.request.body.pagenum;
17 | // 当前页每页显示多少条数据
18 | let pagesize = ctx.request.body.pagesize;
19 | // 总条数
20 | let total = '';
21 | let a = '';
22 | let b = '';
23 | // 起始页索引
24 | let toppageIndex = (pagenum - 1) * pagesize;
25 | if(uname == '' && name == '' && sushe == '' && xueyuan == '' && lynumber == '' && banji == ''){
26 | console.log("1232312122+++++++++++++++++++++++++++++++++++++++++++++++++++++")
27 | // 查询总条数 转换为字符串类型
28 | b = JSON.stringify(await query('SELECT COUNT(*) FROM user where state = 1'));
29 | console.log(b);
30 | // 截取字符串,并转化为数字类型,得到总条数
31 | total = parseInt(b.substring(13, 15));
32 | //查询数据库
33 | a = await query('SELECT * FROM user where state = 1 limit ' + toppageIndex + ',' + pagesize + '');
34 | }else{
35 | // 查询数据库
36 | a = await query(
37 | `SELECT * FROM user where uname = '${uname}' or name = '${name}' or sushe = '${sushe}' or xueyuan = '${xueyuan}' or lynumber = '${lynumber}' or banji = '${banji}' and state = 1 limit ${toppageIndex},${pagesize}`
38 | );
39 | b = await query(
40 | `SELECT * FROM user where uname = '${uname}' or name = '${name}' or sushe = '${sushe}' or xueyuan = '${xueyuan}' or lynumber = '${lynumber}' or banji = '${banji}' and state = 1`
41 | );
42 | // 格式化 b 的数据类型
43 | var dataString1 = JSON.stringify(b);
44 | var result1 = JSON.parse(dataString1);
45 | // console.log(result1);
46 | // 得到总页数
47 | total = result1.length;
48 | }
49 |
50 | // 格式化 a 的数据类型
51 | var dataString = JSON.stringify(a);
52 | var result = JSON.parse(dataString);
53 | console.log(result);
54 |
55 | if (result.length > 0) {
56 | let data = {
57 | code: 200,
58 | total: total,
59 | data: result
60 | };
61 | ctx.body = data;
62 | } else {
63 | let data = {
64 | code: 0
65 | };
66 | ctx.body = data;
67 | }
68 | });
69 |
70 | // 添加学生
71 | router.post('/add', async (ctx, next) => {
72 | console.log(ctx.request.body);
73 | let pass = ctx.request.body.pass;
74 | let state = ctx.request.body.state;
75 | let uname = ctx.request.body.stuNumber;
76 | let name = ctx.request.body.stuName;
77 | let sex = ctx.request.body.sex;
78 | let tel = ctx.request.body.tel;
79 | let sushe = ctx.request.body.sushe;
80 | let xueyuan = ctx.request.body.xueyuan;
81 | let banji = ctx.request.body.banji;
82 | let lynumber = ctx.request.body.lyNumber;
83 | let fdy = ctx.request.body.fdy;
84 | let fdytel = ctx.request.body.fdytel;
85 | let family = ctx.request.body.family;
86 | let familytel = ctx.request.body.familytel;
87 | // 将信息添加到数据库
88 | let a = await query(
89 | `insert into user(pass,state,uname,name,sex,tel,sushe,xueyuan,banji,lynumber,fdy,fdytel,family,familytel) values('${pass}','${state}','${uname}','${name}','${sex}','${tel}','${sushe}','${xueyuan}','${banji}','${lynumber}','${fdy}','${fdytel}','${family}','${familytel}')`);
90 | console.log(a);
91 | if (a.affectedRows == 1) {
92 | // 代表插入成功
93 | let data = {
94 | code: 200,
95 | msg:'插入成功'
96 | };
97 | ctx.body = data;
98 | }else{
99 | let data = {
100 | code: 0,
101 | msg:'插入失败'
102 | };
103 | ctx.body = data;
104 | }
105 | })
106 |
107 | // 根据学生 ID 修改 学生信息
108 | router.post('/edit', async (ctx, next) => {
109 | console.log(ctx.request.body);
110 | let id = ctx.request.body.id;
111 | let uname = ctx.request.body.uname;
112 | let name = ctx.request.body.name;
113 | let sex = ctx.request.body.sex;
114 | let tel = ctx.request.body.tel;
115 | let sushe = ctx.request.body.sushe;
116 | let xueyuan = ctx.request.body.xueyuan;
117 | let lynumber = ctx.request.body.lynumber;
118 | let fdy = ctx.request.body.fdy;
119 | let fdytel = ctx.request.body.fdytel;
120 | let family = ctx.request.body.family;
121 | let familytel = ctx.request.body.familytel;
122 | // 根据楼管id修改数据
123 | let a = await query(`update user set uname = '${uname}',name = '${name}',sex = '${sex}',tel = '${tel}',sushe = '${sushe}',xueyuan = '${xueyuan}',lynumber = '${lynumber}',fdy = '${fdy}',fdytel = '${fdytel}',family = '${family}',familytel = '${familytel}' where id = ${id}`);
124 | console.log(a);
125 | if (a.changedRows == 1 && a.affectedRows == 1) {
126 | let data = {
127 | code: 200,
128 | msg:'更新成功'
129 | };
130 | ctx.body = data;
131 | }else if(a.changedRows == 0 && a.affectedRows == 1){
132 | let data = {
133 | code: 100,
134 | msg:'与原数据一致'
135 | };
136 | ctx.body = data;
137 | }else if(a.changedRows == 0 && a.affectedRows == 0){
138 | let data = {
139 | code: 0,
140 | msg:'更新失败'
141 | };
142 | ctx.body = data;
143 | }
144 | });
145 |
146 | // 根据学生 ID 删除学生信息
147 | router.post('/del', async (ctx, next) => {
148 | console.log(ctx.request.body);
149 | var id = ctx.request.body.id;
150 | //根据用户id值更新对应学生的状态,用来控制该学生是否被删除
151 | let a = await query(`update user set state = 0 where id = ${id}`);
152 |
153 | if (a.changedRows == 1) {
154 | let data = {
155 | code: 200,
156 | msg:'删除成功'
157 | };
158 | ctx.body = data;
159 | } else {
160 | let data = {
161 | code: 0,
162 | msg:'删除失败'
163 | };
164 | ctx.body = data;
165 | }
166 |
167 | })
168 |
169 |
170 |
171 |
172 | module.exports = router
173 |
--------------------------------------------------------------------------------
/myproject/src/components/hqfw/bxlb.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 首页
6 | 后勤服务
7 | 报修列表
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
30 |
36 |
37 |
38 |
39 |
45 |
46 |
47 |
48 |
49 |
50 |
59 |
60 |
61 |
62 |
63 |
173 |
174 |
--------------------------------------------------------------------------------
/myproject/src/components/shfw/jdf.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 首页
6 | 生活服务
7 | 电费充值
8 |
9 |
10 |
11 | 电费查询
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | 查询
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 | 电费充值
70 |
71 | 请选择充值金额:
72 |
73 |
74 | 10元
75 |
76 |
77 | 30元
78 |
79 |
80 | 50元
81 |
82 |
83 | 100元
84 |
85 |
86 |
87 | 充值
88 | 取消
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
102 |
103 |
104 |
105 |
106 |
107 |
167 |
168 |
--------------------------------------------------------------------------------
/myproject/src/components/shfw/xyykt.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 首页
6 | 生活服务
7 | 校园一卡通
8 |
9 |
10 |
11 | 自助服务
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | 查询
26 | 挂失
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 | 校园卡充值
71 |
72 | 请选择充值金额:
73 |
74 |
75 | 10元
76 |
77 |
78 | 30元
79 |
80 |
81 | 50元
82 |
83 |
84 | 100元
85 |
86 |
87 |
88 | 充值
89 | 取消
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
103 |
104 |
105 |
106 |
107 |
108 |
168 |
169 |
--------------------------------------------------------------------------------
/myproject/src/components/shfw/xyw.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 首页
6 | 生活服务
7 | 校园网充值
8 |
9 |
10 |
11 | 校园网查询
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | 查询
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 | 校园网充值
70 |
71 | 请选择充值金额:
72 |
73 |
74 | 一月20元
75 |
76 |
77 | 两月40元
78 |
79 |
80 | 半年110元
81 |
82 |
83 | 一年220元
84 |
85 |
86 |
87 | 充值
88 | 取消
89 |
90 |
91 |
92 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
111 |
112 |
113 |
114 |
115 |
116 |
176 |
177 |
--------------------------------------------------------------------------------
/myproject/src/components/hqfw/shbx.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 首页
6 | 后勤服务
7 | 损耗报修
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
65 |
66 |
67 |
68 | 取消
69 | 添加报修
70 |
71 |
72 | 温馨提示:您好!同学,如有紧急报修项目请与楼管老师联系或者直接拨打后勤集团服务热线:123456
73 | 如不影响正常学习生活,请填写以上申请表,我们会尽快安排维修人员解决问题,谢谢您的配合!
74 |
75 |
76 |
77 |
78 |
175 |
176 |
--------------------------------------------------------------------------------
/myNode/myNodeApp/routes/newly.js:
--------------------------------------------------------------------------------
1 | const router = require('koa-router')()
2 | //引入MySQL数据库
3 | const query = require('./MYSQL');
4 | router.prefix('/newly');
5 |
6 | // router.get('/', function (ctx, next) {
7 | // ctx.body = '这是新区楼宇界面'
8 | // });
9 |
10 | //查询所有的楼宇信息并返回前端请求的数据
11 | router.post('/', async (ctx, next) => {
12 | console.log(ctx.request.body);
13 | // 当前页码
14 | let pagenum = ctx.request.body.pagenum;
15 | // 每页显示的条数
16 | let pagesize = ctx.request.body.pagesize;
17 | // 查询总条数 转换为字符串类型
18 | let b = JSON.stringify(await query('SELECT COUNT(*) FROM lynumber where state = 1'));
19 | console.log(b);
20 | // 截取字符串,并转化为数字类型,得到总条数
21 | let total = parseInt(b.substring(13, 15));
22 | // 判断总页数是否整除每页的条数
23 | // if(total % pagesize == 0){
24 | // pagenum = total/pagesize;
25 | // }
26 | // 起始页索引
27 | let toppageIndex = (pagenum - 1) * pagesize;
28 |
29 |
30 | //查询数据库
31 | let a = await query('SELECT * FROM lynumber where state = 1 limit ' + toppageIndex + ',' + pagesize + '');
32 | // console.log(a);
33 | console.log(a.length);
34 | // 格式化数据类型
35 | var dataString = JSON.stringify(a);
36 | var result = JSON.parse(dataString);
37 | // console.log(result);
38 |
39 | if (result.length > 0) {
40 | let data = {
41 | code: 200,
42 | total: total,
43 | data: result
44 | };
45 | ctx.body = data;
46 | } else {
47 | let data = {
48 | code: 0
49 | };
50 | ctx.body = data;
51 | }
52 | });
53 |
54 | // 查询所有的楼宇名字
55 | router.post('/lyname', async (ctx, next) => {
56 | console.log(ctx.request.body);
57 | //查询数据库
58 | let a = await query('SELECT lynumber FROM lynumber where state = 1');
59 | // console.log(a);
60 | // 格式化数据类型
61 | var dataString = JSON.stringify(a);
62 | var result = JSON.parse(dataString);
63 | console.log(result);
64 | if (result.length > 0) {
65 | let data = {
66 | code: 200,
67 | data: result
68 | };
69 | ctx.body = data;
70 | } else {
71 | let data = {
72 | code: 0
73 | };
74 | ctx.body = data;
75 | }
76 | });
77 |
78 | // 搜索按钮点击事件搜索相应内容并返回
79 | router.post('/search', async (ctx, next) => {
80 | // console.log('--------------------------------------------');
81 | console.log(ctx.request.body);
82 | let lynumber = ctx.request.body.lynumber;
83 | let userName = ctx.request.body.userName;
84 | var a = '';
85 | if (userName == '') {
86 | //根据楼宇号查询数据库
87 | a = await query(`SELECT * FROM lynumber where state = 1 && lynumber = '${lynumber}'`);
88 | }
89 | if (lynumber == '') {
90 | //根据姓名模糊查询数据库
91 | a = await query(`SELECT * FROM lynumber where leader like '%${userName}%' && state = 1`);
92 | }
93 | if(lynumber == '' && userName == ''){
94 | //查询全部数据库
95 | a = await query(`SELECT * FROM lynumber where state = 1`);
96 | }
97 |
98 | // console.log(a);
99 | // 格式化数据类型
100 | var dataString = JSON.stringify(a);
101 | var result = JSON.parse(dataString);
102 | console.log(result);
103 | if (result.length > 0) {
104 | let data = {
105 | code: 200,
106 | data: result
107 | };
108 | ctx.body = data;
109 | } else {
110 | let data = {
111 | code: 0
112 | };
113 | ctx.body = data;
114 | }
115 | });
116 |
117 | // 添加楼宇信息
118 | router.post('/add', async (ctx, next) => {
119 | console.log(ctx.request.body);
120 | let lynumber = ctx.request.body.lynumber;
121 | let leader = ctx.request.body.leader;
122 | let sex = ctx.request.body.sex;
123 | let tel = ctx.request.body.tel;
124 | // 将信息添加到数据库
125 | let a = await query(
126 | `insert into lynumber(lynumber,leader,sex,tel,state) values('${lynumber}','${leader}','${sex}','${tel}',1)`);
127 | console.log(a);
128 | if (a.affectedRows == 1) {
129 | // 代表插入成功
130 | let data = {
131 | code: 200,
132 | msg:'插入成功'
133 | };
134 | ctx.body = data;
135 | }else{
136 | let data = {
137 | code: 0,
138 | msg:'插入失败'
139 | };
140 | ctx.body = data;
141 | }
142 | });
143 | // 根据id修改楼管信息
144 | router.post('/edit', async (ctx, next) => {
145 | console.log('===========================');
146 | console.log(ctx.request.body);
147 | let id = ctx.request.body.id;
148 | let leader = ctx.request.body.leader;
149 | let sex = ctx.request.body.sex;
150 | let tel = ctx.request.body.tel;
151 | // 根据楼管id修改数据
152 | let a = await query(`update lynumber set leader = '${leader}',sex = '${sex}',tel = '${tel}' where id = ${id}`);
153 | console.log(a);
154 | if (a.changedRows == 1 && a.affectedRows == 1) {
155 | let data = {
156 | code: 200,
157 | msg:'更新成功'
158 | };
159 | ctx.body = data;
160 | }else if(a.changedRows == 0 && a.affectedRows == 1){
161 | let data = {
162 | code: 100,
163 | msg:'与原数据一致'
164 | };
165 | ctx.body = data;
166 | }else if(a.changedRows == 0 && a.affectedRows == 0){
167 | let data = {
168 | code: 0,
169 | msg:'更新失败'
170 | };
171 | ctx.body = data;
172 | }
173 |
174 | });
175 |
176 | // 根据id查看该楼管信息
177 | router.post('/show', async (ctx, next) => {
178 | console.log(ctx.request.body);
179 | let id = ctx.request.body.id;
180 | // 根据楼管id修改数据
181 | let a = await query('SELECT * FROM lynumber where state = 1 && id = '+id+'');
182 | console.log(a);
183 | // 格式化数据类型
184 | var dataString = JSON.stringify(a);
185 | var result = JSON.parse(dataString);
186 | console.log(result);
187 | if (result.length > 0) {
188 | let data = {
189 | code: 200,
190 | data: result
191 | };
192 | ctx.body = data;
193 | } else {
194 | let data = {
195 | code: 0
196 | };
197 | ctx.body = data;
198 | }
199 |
200 | });
201 |
202 | // 根据传过来的id值删除对应的信息
203 | router.post('/delete', async (ctx, next) => {
204 | console.log(ctx.request.body);
205 | let id = ctx.request.body.id;
206 | // 当前页码
207 | let pagenum = ctx.request.body.pagenum;
208 | // 每页显示的条数
209 | let pagesize = ctx.request.body.pagesize;
210 |
211 | //根据用户id值更新对应楼宇的状态,用来控制该楼宇是否被删除
212 | let a = await query(`update lynumber set state = 0 where id = ${id}`);
213 | // console.log(a);
214 |
215 | // 查询总条数 转换为字符串类型
216 | let b = JSON.stringify(await query('SELECT COUNT(*) FROM lynumber where state = 1'));
217 | // console.log(b);
218 | // 截取字符串,并转化为数字类型,得到总条数
219 | let total = parseInt(b.substring(13, 15));
220 | // 判断真实的页数与传过来的页数是否相等
221 | // if(total/pagesize < pagenum){
222 | // pagenum = total/pagesize;
223 | // }
224 | // 起始页索引
225 | let toppageIndex = (pagenum - 1) * pagesize;
226 | if (a.changedRows == 1) {
227 | // 更新成功
228 | // console.log(toppageIndex);
229 | // console.log(pagesize);
230 |
231 | //查询数据库,返回前端
232 | let newA = await query('SELECT * FROM lynumber where state = 1 limit ' + toppageIndex + ',' + pagesize + '');
233 | console.log(newA);
234 | // 格式化数据类型
235 | var newDataString = JSON.stringify(newA);
236 | var newResult = JSON.parse(newDataString);
237 | // console.log(newResult);
238 | // 200代表更新成功
239 | let data = {
240 | code: 200,
241 | newResult,
242 | 'total': total
243 | };
244 | ctx.body = data;
245 | } else {
246 | let data = {
247 | code: 0
248 | };
249 | ctx.body = data;
250 | }
251 | });
252 |
253 | // 导入excel
254 | router.post('/addexl', async (ctx, next) => {
255 | console.log('+++++++++++++++++++++++++++++++++++++++');
256 | console.log(ctx.request.body);
257 | console.log('+++++++++++++++++++++++++++++++++++++++');
258 | })
259 |
260 |
261 |
262 |
263 | module.exports = router
264 |
--------------------------------------------------------------------------------
/myproject/src/components/home.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |

7 |
高校宿舍管理系统
8 |
9 | 退出
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | |||
18 |
19 |
20 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 | {{item.authName}}
38 |
39 |
40 |
46 |
47 |
48 |
49 |
50 | {{subItem.authName}}
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
185 |
186 |
--------------------------------------------------------------------------------
/myproject/src/excel/Blob.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* Blob.js
3 | * A Blob implementation.
4 | * 2014-05-27
5 | *
6 | * By Eli Grey, http://eligrey.com
7 | * By Devin Samarin, https://github.com/eboyjr
8 | * License: X11/MIT
9 | * See LICENSE.md
10 | */
11 |
12 | /*global self, unescape */
13 | /*jslint bitwise: true, regexp: true, confusion: true, es5: true, vars: true, white: true,
14 | plusplus: true */
15 |
16 | /*! @source http://purl.eligrey.com/github/Blob.js/blob/master/Blob.js */
17 |
18 | (function (view) {
19 | "use strict";
20 |
21 | view.URL = view.URL || view.webkitURL;
22 |
23 | if (view.Blob && view.URL) {
24 | try {
25 | new Blob;
26 | return;
27 | } catch (e) {}
28 | }
29 |
30 | // Internally we use a BlobBuilder implementation to base Blob off of
31 | // in order to support older browsers that only have BlobBuilder
32 | var BlobBuilder = view.BlobBuilder || view.WebKitBlobBuilder || view.MozBlobBuilder || (function(view) {
33 | var
34 | get_class = function(object) {
35 | return Object.prototype.toString.call(object).match(/^\[object\s(.*)\]$/)[1];
36 | }
37 | , FakeBlobBuilder = function BlobBuilder() {
38 | this.data = [];
39 | }
40 | , FakeBlob = function Blob(data, type, encoding) {
41 | this.data = data;
42 | this.size = data.length;
43 | this.type = type;
44 | this.encoding = encoding;
45 | }
46 | , FBB_proto = FakeBlobBuilder.prototype
47 | , FB_proto = FakeBlob.prototype
48 | , FileReaderSync = view.FileReaderSync
49 | , FileException = function(type) {
50 | this.code = this[this.name = type];
51 | }
52 | , file_ex_codes = (
53 | "NOT_FOUND_ERR SECURITY_ERR ABORT_ERR NOT_READABLE_ERR ENCODING_ERR "
54 | + "NO_MODIFICATION_ALLOWED_ERR INVALID_STATE_ERR SYNTAX_ERR"
55 | ).split(" ")
56 | , file_ex_code = file_ex_codes.length
57 | , real_URL = view.URL || view.webkitURL || view
58 | , real_create_object_URL = real_URL.createObjectURL
59 | , real_revoke_object_URL = real_URL.revokeObjectURL
60 | , URL = real_URL
61 | , btoa = view.btoa
62 | , atob = view.atob
63 |
64 | , ArrayBuffer = view.ArrayBuffer
65 | , Uint8Array = view.Uint8Array
66 | ;
67 | FakeBlob.fake = FB_proto.fake = true;
68 | while (file_ex_code--) {
69 | FileException.prototype[file_ex_codes[file_ex_code]] = file_ex_code + 1;
70 | }
71 | if (!real_URL.createObjectURL) {
72 | URL = view.URL = {};
73 | }
74 | URL.createObjectURL = function(blob) {
75 | var
76 | type = blob.type
77 | , data_URI_header
78 | ;
79 | if (type === null) {
80 | type = "application/octet-stream";
81 | }
82 | if (blob instanceof FakeBlob) {
83 | data_URI_header = "data:" + type;
84 | if (blob.encoding === "base64") {
85 | return data_URI_header + ";base64," + blob.data;
86 | } else if (blob.encoding === "URI") {
87 | return data_URI_header + "," + decodeURIComponent(blob.data);
88 | } if (btoa) {
89 | return data_URI_header + ";base64," + btoa(blob.data);
90 | } else {
91 | return data_URI_header + "," + encodeURIComponent(blob.data);
92 | }
93 | } else if (real_create_object_URL) {
94 | return real_create_object_URL.call(real_URL, blob);
95 | }
96 | };
97 | URL.revokeObjectURL = function(object_URL) {
98 | if (object_URL.substring(0, 5) !== "data:" && real_revoke_object_URL) {
99 | real_revoke_object_URL.call(real_URL, object_URL);
100 | }
101 | };
102 | FBB_proto.append = function(data/*, endings*/) {
103 | var bb = this.data;
104 | // decode data to a binary string
105 | if (Uint8Array && (data instanceof ArrayBuffer || data instanceof Uint8Array)) {
106 | var
107 | str = ""
108 | , buf = new Uint8Array(data)
109 | , i = 0
110 | , buf_len = buf.length
111 | ;
112 | for (; i < buf_len; i++) {
113 | str += String.fromCharCode(buf[i]);
114 | }
115 | bb.push(str);
116 | } else if (get_class(data) === "Blob" || get_class(data) === "File") {
117 | if (FileReaderSync) {
118 | var fr = new FileReaderSync;
119 | bb.push(fr.readAsBinaryString(data));
120 | } else {
121 | // async FileReader won't work as BlobBuilder is sync
122 | throw new FileException("NOT_READABLE_ERR");
123 | }
124 | } else if (data instanceof FakeBlob) {
125 | if (data.encoding === "base64" && atob) {
126 | bb.push(atob(data.data));
127 | } else if (data.encoding === "URI") {
128 | bb.push(decodeURIComponent(data.data));
129 | } else if (data.encoding === "raw") {
130 | bb.push(data.data);
131 | }
132 | } else {
133 | if (typeof data !== "string") {
134 | data += ""; // convert unsupported types to strings
135 | }
136 | // decode UTF-16 to binary string
137 | bb.push(unescape(encodeURIComponent(data)));
138 | }
139 | };
140 | FBB_proto.getBlob = function(type) {
141 | if (!arguments.length) {
142 | type = null;
143 | }
144 | return new FakeBlob(this.data.join(""), type, "raw");
145 | };
146 | FBB_proto.toString = function() {
147 | return "[object BlobBuilder]";
148 | };
149 | FB_proto.slice = function(start, end, type) {
150 | var args = arguments.length;
151 | if (args < 3) {
152 | type = null;
153 | }
154 | return new FakeBlob(
155 | this.data.slice(start, args > 1 ? end : this.data.length)
156 | , type
157 | , this.encoding
158 | );
159 | };
160 | FB_proto.toString = function() {
161 | return "[object Blob]";
162 | };
163 | FB_proto.close = function() {
164 | this.size = this.data.length = 0;
165 | };
166 | return FakeBlobBuilder;
167 | }(view));
168 |
169 | view.Blob = function Blob(blobParts, options) {
170 | var type = options ? (options.type || "") : "";
171 | var builder = new BlobBuilder();
172 | if (blobParts) {
173 | for (var i = 0, len = blobParts.length; i < len; i++) {
174 | builder.append(blobParts[i]);
175 | }
176 | }
177 | return builder.getBlob(type);
178 | };
179 | }(typeof self !== "undefined" && self || typeof window !== "undefined" && window || this.content || this));
180 |
--------------------------------------------------------------------------------
/myNode/myNodeApp/routes/login.js:
--------------------------------------------------------------------------------
1 | const router = require('koa-router')()
2 | //引入MySQL数据库
3 | const query = require('./MYSQL');
4 | router.prefix('/login');
5 |
6 | router.get('/', function(ctx, next) {
7 | ctx.body = '这是登录页面'
8 | });
9 |
10 | //登录页面,查询数据库是否有该用户并返回前端请求的数据
11 | router.post('/', async (ctx, next) => {
12 | console.log(ctx.request.body);
13 | let name = ctx.request.body.name;
14 | let pass = ctx.request.body.password;
15 | //根据用户名和密码查询数据库
16 | let a = await query(`SELECT * FROM user where uname = '${name}' and pass = '${pass}'`);
17 | // console.log(a);
18 | // console.log(a.length);
19 | // 格式化数据类型
20 | var dataString = JSON.stringify(a);
21 | var result = JSON.parse(dataString);
22 | console.log(result);
23 |
24 | var data;
25 | if (result.length > 0) {
26 | // 得到用户的角色 0:超级管理员 1:楼管 2: 学生
27 | var roler = result[0].roler;
28 | console.log(roler);
29 | // 定义 超级管理员 的权限列表
30 | var routerlist0 = [{
31 | id: 1,
32 | authName: "个人中心",
33 | path: "grzx",
34 | children: [{
35 | id: "1.1",
36 | authName: "个人信息",
37 | path: "xgmm",
38 | children: []
39 | }]
40 | },
41 | {
42 | id: 2,
43 | authName: "楼宇管理",
44 | path: "lygl",
45 | children: [{
46 | id: "2.1",
47 | authName: "楼宇列表",
48 | path: "newly",
49 | children: []
50 | }]
51 | },
52 | {
53 | id: 3,
54 | authName: "宿舍管理",
55 | path: "ssgl",
56 | children: [{
57 | id: "3.1",
58 | authName: "宿舍列表",
59 | path: "sslb",
60 | children: []
61 | }]
62 | },
63 | {
64 | id: 4,
65 | authName: "用户权限管理",
66 | path: "yhqxgl",
67 | children: [{
68 | id: "4.1",
69 | authName: "用户权限列表",
70 | path: "yhlb",
71 | children: []
72 | }
73 | ]
74 | },
75 | {
76 | id: 5,
77 | authName: "学生管理",
78 | path: "xsgl",
79 | children: [{
80 | id: "5.1",
81 | authName: "学生列表",
82 | path: "xslb",
83 | children: []
84 | }]
85 | },
86 | {
87 | id: 6,
88 | authName: "后勤服务",
89 | path: "hqfw",
90 | children: [{
91 | id: "6.1",
92 | authName: "损坏报修",
93 | path: "shbx",
94 | children: []
95 | },
96 | {
97 | id: "6.2",
98 | authName: "报修列表",
99 | path: "bxlb",
100 | children: []
101 | }
102 | ]
103 | },
104 | {
105 | id: 7,
106 | authName: "生活服务",
107 | path: "shfw",
108 | children: [{
109 | id: "7.1",
110 | authName: "电费充值",
111 | path: "jdf",
112 | children: []
113 | },
114 | {
115 | id: "7.2",
116 | authName: "校园网充值",
117 | path: "xyw",
118 | children: []
119 | },
120 | {
121 | id: "7.3",
122 | authName: "校园一卡通",
123 | path: "xyykt",
124 | children: []
125 | }
126 | ]
127 | },
128 | {
129 | id: 8,
130 | authName: "统计中心",
131 | path: "tjzx",
132 | children: [{
133 | id: "8.1",
134 | authName: "宿舍评分",
135 | path: "sspf",
136 | children: []
137 | },
138 | {
139 | id: "8.2",
140 | authName: "报修统计",
141 | path: "bxtj",
142 | children: []
143 | },
144 | {
145 | id: "8.3",
146 | authName: "楼管评价",
147 | path: "lgdf",
148 | children: []
149 | }
150 | ]
151 | }
152 | ]
153 | // 定义 楼管人员 的权限列表
154 | var routerlist1 = [{
155 | id: 1,
156 | authName: "个人中心",
157 | path: "grzx",
158 | children: [{
159 | id: "1.1",
160 | authName: "个人信息",
161 | path: "xgmm",
162 | children: []
163 | }]
164 | },
165 | {
166 | id: 3,
167 | authName: "宿舍管理",
168 | path: "ssgl",
169 | children: [{
170 | id: "3.1",
171 | authName: "宿舍列表",
172 | path: "sslb",
173 | children: []
174 | }
175 | ]
176 | },
177 | {
178 | id: 5,
179 | authName: "学生管理",
180 | path: "xsgl",
181 | children: [{
182 | id: "5.1",
183 | authName: "学生列表",
184 | path: "xslb",
185 | children: []
186 | }]
187 | },
188 | {
189 | id: 6,
190 | authName: "后勤服务",
191 | path: "hqfw",
192 | children: [{
193 | id: "6.1",
194 | authName: "损坏报修",
195 | path: "shbx",
196 | children: []
197 | },
198 | {
199 | id: "6.2",
200 | authName: "报修列表",
201 | path: "bxlb",
202 | children: []
203 | }
204 | ]
205 | },
206 | {
207 | id: 7,
208 | authName: "生活服务",
209 | path: "shfw",
210 | children: [{
211 | id: "7.1",
212 | authName: "电费充值",
213 | path: "jdf",
214 | children: []
215 | },
216 | {
217 | id: "7.2",
218 | authName: "校园网充值",
219 | path: "xyw",
220 | children: []
221 | },
222 | {
223 | id: "7.3",
224 | authName: "校园一卡通",
225 | path: "xyykt",
226 | children: []
227 | }
228 | ]
229 | },
230 | {
231 | id: 8,
232 | authName: "统计中心",
233 | path: "tjzx",
234 | children: [{
235 | id: "8.1",
236 | authName: "宿舍评分",
237 | path: "sspf",
238 | children: []
239 | },
240 | {
241 | id: "8.2",
242 | authName: "报修统计",
243 | path: "bxtj",
244 | children: []
245 | },
246 | {
247 | id: "8.3",
248 | authName: "楼管评价",
249 | path: "lgdf",
250 | children: []
251 | }
252 | ]
253 | }
254 | ]
255 | // 定义 学生 权限路由表
256 | var routerlist2 = [{
257 | id: 1,
258 | authName: "个人中心",
259 | path: "grzx",
260 | children: [{
261 | id: "1.1",
262 | authName: "个人信息",
263 | path: "xgmm"
264 | }]
265 | },
266 | {
267 | id: 6,
268 | authName: "后勤服务",
269 | path: "hqfw",
270 | children: [{
271 | id: "6.1",
272 | authName: "损坏报修",
273 | path: "shbx"
274 | }]
275 | },
276 | {
277 | id: 7,
278 | authName: "生活服务",
279 | path: "shfw",
280 | children: [{
281 | id: "7.1",
282 | authName: "电费充值",
283 | path: "jdf"
284 | },
285 | {
286 | id: "7.2",
287 | authName: "校园网充值",
288 | path: "xyw"
289 | },
290 | {
291 | id: "7.3",
292 | authName: "校园一卡通",
293 | path: "xyykt"
294 | }
295 | ]
296 | },
297 | ]
298 | if(roler == 0){
299 | // 超级管理员
300 | data = {
301 | code: 200,
302 | data: result,
303 | route: routerlist0
304 | };
305 | }else if(roler == 1){
306 | // 楼管人员
307 | data = {
308 | code: 200,
309 | data: result,
310 | route: routerlist1
311 | };
312 | }else{
313 | // 学生用户
314 | data = {
315 | code: 200,
316 | data: result,
317 | route: routerlist2
318 | };
319 | }
320 |
321 | ctx.body = data;
322 | } else {
323 | let data = {
324 | code: 0
325 | };
326 | ctx.body = data;
327 | }
328 | });
329 | // 修改用户信息
330 | router.post('/update', async (ctx, next) => {
331 | console.log(ctx.request.body);
332 | let id = ctx.request.body.id;
333 | let pass = ctx.request.body.pass;
334 | let xueyuan = ctx.request.body.xueyuan;
335 | let banji = ctx.request.body.banji;
336 | let tel = ctx.request.body.tel;
337 | let lynumber = ctx.request.body.lynumber;
338 | let sushe = ctx.request.body.sushe;
339 | //根据用户id值更新数据
340 | let a = await query(
341 | `update user set pass = '${pass}',xueyuan ='${xueyuan}',banji = '${banji}',tel = '${tel}',lynumber = '${lynumber}',sushe = '${sushe}' where id = ${id}`
342 | );
343 | console.log(a);
344 |
345 | if (a.changedRows == 1) {
346 | // 更新成功
347 | //根据id查询数据库,返回前端
348 | let newA = await query(`SELECT * FROM user WHERE id = ${id}`);
349 | // 格式化数据类型
350 | var newDataString = JSON.stringify(newA);
351 | var newResult = JSON.parse(newDataString);
352 | console.log(newResult);
353 | // 200代表更新成功
354 | let data = {
355 | code: 200,
356 | newResult
357 | };
358 | ctx.body = data;
359 | } else {
360 | let data = {
361 | code: 0
362 | };
363 | ctx.body = data;
364 | }
365 | });
366 |
367 |
368 |
369 | module.exports = router
370 |
--------------------------------------------------------------------------------
/myproject/src/components/user/jslb.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 首页
6 | 用户权限管理
7 | 角色列表
8 |
9 |
10 |
11 |
12 |
13 |
14 | 添加角色
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
27 |
28 |
29 | {{item1.rolename}}
30 |
31 |
32 |
33 |
34 |
35 |
40 |
41 | {{item2.rolename}}
42 |
43 |
44 |
45 |
46 | {{item3.rolename}}
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 | 编辑
66 | 删除
67 | 分配
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
250 |
251 |
--------------------------------------------------------------------------------
/myproject/src/components/tjzx/sspf.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 首页
6 | 统计中心
7 | 宿舍评分
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 | 查询
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
262 |
263 |
--------------------------------------------------------------------------------
/myproject/src/assets/font/iconfont.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
54 |
--------------------------------------------------------------------------------
/myproject/src/assets/font/demo.css:
--------------------------------------------------------------------------------
1 | /* Logo 字体 */
2 | @font-face {
3 | font-family: "iconfont logo";
4 | src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
5 | src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
6 | url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
7 | url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
8 | url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
9 | }
10 |
11 | .logo {
12 | font-family: "iconfont logo";
13 | font-size: 160px;
14 | font-style: normal;
15 | -webkit-font-smoothing: antialiased;
16 | -moz-osx-font-smoothing: grayscale;
17 | }
18 |
19 | /* tabs */
20 | .nav-tabs {
21 | position: relative;
22 | }
23 |
24 | .nav-tabs .nav-more {
25 | position: absolute;
26 | right: 0;
27 | bottom: 0;
28 | height: 42px;
29 | line-height: 42px;
30 | color: #666;
31 | }
32 |
33 | #tabs {
34 | border-bottom: 1px solid #eee;
35 | }
36 |
37 | #tabs li {
38 | cursor: pointer;
39 | width: 100px;
40 | height: 40px;
41 | line-height: 40px;
42 | text-align: center;
43 | font-size: 16px;
44 | border-bottom: 2px solid transparent;
45 | position: relative;
46 | z-index: 1;
47 | margin-bottom: -1px;
48 | color: #666;
49 | }
50 |
51 |
52 | #tabs .active {
53 | border-bottom-color: #f00;
54 | color: #222;
55 | }
56 |
57 | .tab-container .content {
58 | display: none;
59 | }
60 |
61 | /* 页面布局 */
62 | .main {
63 | padding: 30px 100px;
64 | width: 960px;
65 | margin: 0 auto;
66 | }
67 |
68 | .main .logo {
69 | color: #333;
70 | text-align: left;
71 | margin-bottom: 30px;
72 | line-height: 1;
73 | height: 110px;
74 | margin-top: -50px;
75 | overflow: hidden;
76 | *zoom: 1;
77 | }
78 |
79 | .main .logo a {
80 | font-size: 160px;
81 | color: #333;
82 | }
83 |
84 | .helps {
85 | margin-top: 40px;
86 | }
87 |
88 | .helps pre {
89 | padding: 20px;
90 | margin: 10px 0;
91 | border: solid 1px #e7e1cd;
92 | background-color: #fffdef;
93 | overflow: auto;
94 | }
95 |
96 | .icon_lists {
97 | width: 100% !important;
98 | overflow: hidden;
99 | *zoom: 1;
100 | }
101 |
102 | .icon_lists li {
103 | width: 100px;
104 | margin-bottom: 10px;
105 | margin-right: 20px;
106 | text-align: center;
107 | list-style: none !important;
108 | cursor: default;
109 | }
110 |
111 | .icon_lists li .code-name {
112 | line-height: 1.2;
113 | }
114 |
115 | .icon_lists .icon {
116 | display: block;
117 | height: 100px;
118 | line-height: 100px;
119 | font-size: 42px;
120 | margin: 10px auto;
121 | color: #333;
122 | -webkit-transition: font-size 0.25s linear, width 0.25s linear;
123 | -moz-transition: font-size 0.25s linear, width 0.25s linear;
124 | transition: font-size 0.25s linear, width 0.25s linear;
125 | }
126 |
127 | .icon_lists .icon:hover {
128 | font-size: 100px;
129 | }
130 |
131 | .icon_lists .svg-icon {
132 | /* 通过设置 font-size 来改变图标大小 */
133 | width: 1em;
134 | /* 图标和文字相邻时,垂直对齐 */
135 | vertical-align: -0.15em;
136 | /* 通过设置 color 来改变 SVG 的颜色/fill */
137 | fill: currentColor;
138 | /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
139 | normalize.css 中也包含这行 */
140 | overflow: hidden;
141 | }
142 |
143 | .icon_lists li .name,
144 | .icon_lists li .code-name {
145 | color: #666;
146 | }
147 |
148 | /* markdown 样式 */
149 | .markdown {
150 | color: #666;
151 | font-size: 14px;
152 | line-height: 1.8;
153 | }
154 |
155 | .highlight {
156 | line-height: 1.5;
157 | }
158 |
159 | .markdown img {
160 | vertical-align: middle;
161 | max-width: 100%;
162 | }
163 |
164 | .markdown h1 {
165 | color: #404040;
166 | font-weight: 500;
167 | line-height: 40px;
168 | margin-bottom: 24px;
169 | }
170 |
171 | .markdown h2,
172 | .markdown h3,
173 | .markdown h4,
174 | .markdown h5,
175 | .markdown h6 {
176 | color: #404040;
177 | margin: 1.6em 0 0.6em 0;
178 | font-weight: 500;
179 | clear: both;
180 | }
181 |
182 | .markdown h1 {
183 | font-size: 28px;
184 | }
185 |
186 | .markdown h2 {
187 | font-size: 22px;
188 | }
189 |
190 | .markdown h3 {
191 | font-size: 16px;
192 | }
193 |
194 | .markdown h4 {
195 | font-size: 14px;
196 | }
197 |
198 | .markdown h5 {
199 | font-size: 12px;
200 | }
201 |
202 | .markdown h6 {
203 | font-size: 12px;
204 | }
205 |
206 | .markdown hr {
207 | height: 1px;
208 | border: 0;
209 | background: #e9e9e9;
210 | margin: 16px 0;
211 | clear: both;
212 | }
213 |
214 | .markdown p {
215 | margin: 1em 0;
216 | }
217 |
218 | .markdown>p,
219 | .markdown>blockquote,
220 | .markdown>.highlight,
221 | .markdown>ol,
222 | .markdown>ul {
223 | width: 80%;
224 | }
225 |
226 | .markdown ul>li {
227 | list-style: circle;
228 | }
229 |
230 | .markdown>ul li,
231 | .markdown blockquote ul>li {
232 | margin-left: 20px;
233 | padding-left: 4px;
234 | }
235 |
236 | .markdown>ul li p,
237 | .markdown>ol li p {
238 | margin: 0.6em 0;
239 | }
240 |
241 | .markdown ol>li {
242 | list-style: decimal;
243 | }
244 |
245 | .markdown>ol li,
246 | .markdown blockquote ol>li {
247 | margin-left: 20px;
248 | padding-left: 4px;
249 | }
250 |
251 | .markdown code {
252 | margin: 0 3px;
253 | padding: 0 5px;
254 | background: #eee;
255 | border-radius: 3px;
256 | }
257 |
258 | .markdown strong,
259 | .markdown b {
260 | font-weight: 600;
261 | }
262 |
263 | .markdown>table {
264 | border-collapse: collapse;
265 | border-spacing: 0px;
266 | empty-cells: show;
267 | border: 1px solid #e9e9e9;
268 | width: 95%;
269 | margin-bottom: 24px;
270 | }
271 |
272 | .markdown>table th {
273 | white-space: nowrap;
274 | color: #333;
275 | font-weight: 600;
276 | }
277 |
278 | .markdown>table th,
279 | .markdown>table td {
280 | border: 1px solid #e9e9e9;
281 | padding: 8px 16px;
282 | text-align: left;
283 | }
284 |
285 | .markdown>table th {
286 | background: #F7F7F7;
287 | }
288 |
289 | .markdown blockquote {
290 | font-size: 90%;
291 | color: #999;
292 | border-left: 4px solid #e9e9e9;
293 | padding-left: 0.8em;
294 | margin: 1em 0;
295 | }
296 |
297 | .markdown blockquote p {
298 | margin: 0;
299 | }
300 |
301 | .markdown .anchor {
302 | opacity: 0;
303 | transition: opacity 0.3s ease;
304 | margin-left: 8px;
305 | }
306 |
307 | .markdown .waiting {
308 | color: #ccc;
309 | }
310 |
311 | .markdown h1:hover .anchor,
312 | .markdown h2:hover .anchor,
313 | .markdown h3:hover .anchor,
314 | .markdown h4:hover .anchor,
315 | .markdown h5:hover .anchor,
316 | .markdown h6:hover .anchor {
317 | opacity: 1;
318 | display: inline-block;
319 | }
320 |
321 | .markdown>br,
322 | .markdown>p>br {
323 | clear: both;
324 | }
325 |
326 |
327 | .hljs {
328 | display: block;
329 | background: white;
330 | padding: 0.5em;
331 | color: #333333;
332 | overflow-x: auto;
333 | }
334 |
335 | .hljs-comment,
336 | .hljs-meta {
337 | color: #969896;
338 | }
339 |
340 | .hljs-string,
341 | .hljs-variable,
342 | .hljs-template-variable,
343 | .hljs-strong,
344 | .hljs-emphasis,
345 | .hljs-quote {
346 | color: #df5000;
347 | }
348 |
349 | .hljs-keyword,
350 | .hljs-selector-tag,
351 | .hljs-type {
352 | color: #a71d5d;
353 | }
354 |
355 | .hljs-literal,
356 | .hljs-symbol,
357 | .hljs-bullet,
358 | .hljs-attribute {
359 | color: #0086b3;
360 | }
361 |
362 | .hljs-section,
363 | .hljs-name {
364 | color: #63a35c;
365 | }
366 |
367 | .hljs-tag {
368 | color: #333333;
369 | }
370 |
371 | .hljs-title,
372 | .hljs-attr,
373 | .hljs-selector-id,
374 | .hljs-selector-class,
375 | .hljs-selector-attr,
376 | .hljs-selector-pseudo {
377 | color: #795da3;
378 | }
379 |
380 | .hljs-addition {
381 | color: #55a532;
382 | background-color: #eaffea;
383 | }
384 |
385 | .hljs-deletion {
386 | color: #bd2c00;
387 | background-color: #ffecec;
388 | }
389 |
390 | .hljs-link {
391 | text-decoration: underline;
392 | }
393 |
394 | /* 代码高亮 */
395 | /* PrismJS 1.15.0
396 | https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
397 | /**
398 | * prism.js default theme for JavaScript, CSS and HTML
399 | * Based on dabblet (http://dabblet.com)
400 | * @author Lea Verou
401 | */
402 | code[class*="language-"],
403 | pre[class*="language-"] {
404 | color: black;
405 | background: none;
406 | text-shadow: 0 1px white;
407 | font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
408 | text-align: left;
409 | white-space: pre;
410 | word-spacing: normal;
411 | word-break: normal;
412 | word-wrap: normal;
413 | line-height: 1.5;
414 |
415 | -moz-tab-size: 4;
416 | -o-tab-size: 4;
417 | tab-size: 4;
418 |
419 | -webkit-hyphens: none;
420 | -moz-hyphens: none;
421 | -ms-hyphens: none;
422 | hyphens: none;
423 | }
424 |
425 | pre[class*="language-"]::-moz-selection,
426 | pre[class*="language-"] ::-moz-selection,
427 | code[class*="language-"]::-moz-selection,
428 | code[class*="language-"] ::-moz-selection {
429 | text-shadow: none;
430 | background: #b3d4fc;
431 | }
432 |
433 | pre[class*="language-"]::selection,
434 | pre[class*="language-"] ::selection,
435 | code[class*="language-"]::selection,
436 | code[class*="language-"] ::selection {
437 | text-shadow: none;
438 | background: #b3d4fc;
439 | }
440 |
441 | @media print {
442 |
443 | code[class*="language-"],
444 | pre[class*="language-"] {
445 | text-shadow: none;
446 | }
447 | }
448 |
449 | /* Code blocks */
450 | pre[class*="language-"] {
451 | padding: 1em;
452 | margin: .5em 0;
453 | overflow: auto;
454 | }
455 |
456 | :not(pre)>code[class*="language-"],
457 | pre[class*="language-"] {
458 | background: #f5f2f0;
459 | }
460 |
461 | /* Inline code */
462 | :not(pre)>code[class*="language-"] {
463 | padding: .1em;
464 | border-radius: .3em;
465 | white-space: normal;
466 | }
467 |
468 | .token.comment,
469 | .token.prolog,
470 | .token.doctype,
471 | .token.cdata {
472 | color: slategray;
473 | }
474 |
475 | .token.punctuation {
476 | color: #999;
477 | }
478 |
479 | .namespace {
480 | opacity: .7;
481 | }
482 |
483 | .token.property,
484 | .token.tag,
485 | .token.boolean,
486 | .token.number,
487 | .token.constant,
488 | .token.symbol,
489 | .token.deleted {
490 | color: #905;
491 | }
492 |
493 | .token.selector,
494 | .token.attr-name,
495 | .token.string,
496 | .token.char,
497 | .token.builtin,
498 | .token.inserted {
499 | color: #690;
500 | }
501 |
502 | .token.operator,
503 | .token.entity,
504 | .token.url,
505 | .language-css .token.string,
506 | .style .token.string {
507 | color: #9a6e3a;
508 | background: hsla(0, 0%, 100%, .5);
509 | }
510 |
511 | .token.atrule,
512 | .token.attr-value,
513 | .token.keyword {
514 | color: #07a;
515 | }
516 |
517 | .token.function,
518 | .token.class-name {
519 | color: #DD4A68;
520 | }
521 |
522 | .token.regex,
523 | .token.important,
524 | .token.variable {
525 | color: #e90;
526 | }
527 |
528 | .token.important,
529 | .token.bold {
530 | font-weight: bold;
531 | }
532 |
533 | .token.italic {
534 | font-style: italic;
535 | }
536 |
537 | .token.entity {
538 | cursor: help;
539 | }
540 |
--------------------------------------------------------------------------------
/myproject/src/assets/font/iconfont.js:
--------------------------------------------------------------------------------
1 | !function(i){var t,o='',c=(t=document.getElementsByTagName("script"))[t.length-1].getAttribute("data-injectcss");if(c&&!i.__iconfont__svg__cssinject__){i.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(t){console&&console.log(t)}}!function(t){if(document.addEventListener)if(~["complete","loaded","interactive"].indexOf(document.readyState))setTimeout(t,0);else{var c=function(){document.removeEventListener("DOMContentLoaded",c,!1),t()};document.addEventListener("DOMContentLoaded",c,!1)}else document.attachEvent&&(a=t,h=i.document,l=!1,(o=function(){try{h.documentElement.doScroll("left")}catch(t){return void setTimeout(o,50)}e()})(),h.onreadystatechange=function(){"complete"==h.readyState&&(h.onreadystatechange=null,e())});function e(){l||(l=!0,a())}var a,h,l,o}(function(){var t,c,e,a,h,l;(t=document.createElement("div")).innerHTML=o,o=null,(c=t.getElementsByTagName("svg")[0])&&(c.setAttribute("aria-hidden","true"),c.style.position="absolute",c.style.width=0,c.style.height=0,c.style.overflow="hidden",e=c,(a=document.body).firstChild?(h=e,(l=a.firstChild).parentNode.insertBefore(h,l)):a.appendChild(e))})}(window);
--------------------------------------------------------------------------------
/myproject/src/components/tjzx/bxtj.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 首页
6 | 统计中心
7 | 报修统计
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | 查询
21 |
22 |
23 | 添加
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
90 |
91 |
92 |
93 |
94 |
95 |
353 |
354 |
--------------------------------------------------------------------------------
/myproject/src/components/tjzx/lgdf.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 首页
6 | 统计中心
7 | 楼管评价
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | 查询
26 |
27 |
28 | 添加
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
105 |
106 |
107 |
108 |
109 |
110 |
374 |
375 |
--------------------------------------------------------------------------------