├── 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 | 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 | 30 | 31 | 39 | 40 | -------------------------------------------------------------------------------- /myproject/src/components/ssgl/sswhjs.vue: -------------------------------------------------------------------------------- 1 | 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 | 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 | 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 | 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 | 62 | 63 | 173 | 174 | -------------------------------------------------------------------------------- /myproject/src/components/shfw/jdf.vue: -------------------------------------------------------------------------------- 1 | 106 | 107 | 167 | 168 | -------------------------------------------------------------------------------- /myproject/src/components/shfw/xyykt.vue: -------------------------------------------------------------------------------- 1 | 107 | 108 | 168 | 169 | -------------------------------------------------------------------------------- /myproject/src/components/shfw/xyw.vue: -------------------------------------------------------------------------------- 1 | 115 | 116 | 176 | 177 | -------------------------------------------------------------------------------- /myproject/src/components/hqfw/shbx.vue: -------------------------------------------------------------------------------- 1 | 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 | 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 | 74 | 75 | 250 | 251 | -------------------------------------------------------------------------------- /myproject/src/components/tjzx/sspf.vue: -------------------------------------------------------------------------------- 1 | 79 | 80 | 262 | 263 | -------------------------------------------------------------------------------- /myproject/src/assets/font/iconfont.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | Created by iconfont 9 | 10 | 11 | 12 | 13 | 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 | -------------------------------------------------------------------------------- /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 | 94 | 95 | 353 | 354 | -------------------------------------------------------------------------------- /myproject/src/components/tjzx/lgdf.vue: -------------------------------------------------------------------------------- 1 | 109 | 110 | 374 | 375 | --------------------------------------------------------------------------------