├── static ├── .gitkeep └── img │ ├── 1.png │ ├── 2.png │ └── 3.png ├── doc └── 项目环境搭建步骤.doc ├── config ├── prod.env.js ├── dev.env.js └── index.js ├── src ├── assets │ ├── car.ico │ ├── logo.png │ ├── js │ │ ├── datamap.js │ │ └── simulationapi.js │ ├── images │ │ ├── card.jpg │ │ ├── downloadcode.png │ │ └── totalnumber.jpg │ ├── fonts │ │ ├── iconfont.eot │ │ ├── iconfont.ttf │ │ ├── iconfont.woff │ │ └── iconfont.svg │ ├── iconfont.css │ └── css │ │ └── style.css ├── components │ ├── dgTable │ │ ├── js │ │ │ ├── Bus.js │ │ │ └── index.js │ │ ├── index.js │ │ ├── componentsTem │ │ │ ├── customizemenu.vue │ │ │ ├── columcomponent.vue │ │ │ └── customizefilter.vue │ │ ├── css │ │ │ └── common.css │ │ ├── Filters │ │ │ ├── edit.vue │ │ │ ├── range.vue │ │ │ ├── date.vue │ │ │ ├── cascader.vue │ │ │ ├── search.vue │ │ │ └── radio.vue │ │ └── dg-table.vue │ ├── 404.vue │ ├── treeTable │ │ ├── eval.js │ │ ├── index.vue │ │ ├── tree-item.vue │ │ └── indexNew.vue │ ├── nav │ │ ├── leftNav.vue │ │ └── topNav.vue │ ├── selectTable │ │ └── index.vue │ ├── tableChoice │ │ └── index.vue │ ├── treeTransfer │ │ └── index.vue │ └── elGrid │ │ └── index.vue ├── views │ ├── permission │ │ ├── 菜单权限.txt │ │ ├── index.vue │ │ └── menuBtnConfig.vue │ ├── table │ │ ├── tableChoice.vue │ │ ├── elTable.vue │ │ ├── treeTable.vue │ │ ├── dgTable.vue │ │ └── indexTreeTable.vue │ ├── treeTransfer │ │ ├── treeDragTransfer.vue │ │ └── index.vue │ ├── home.vue │ ├── tool │ │ ├── animation.vue │ │ ├── uploadImg.vue │ │ ├── horseRaceLamp.vue │ │ └── export.vue │ ├── markdown │ │ └── editor.vue │ └── select │ │ └── index.vue ├── api │ ├── env.js │ ├── api_enterprise.js │ └── index.js ├── store.js ├── common │ └── util.js ├── main.js ├── app.vue ├── vendor │ ├── Export2Excel.js │ └── Blob.js └── router │ └── index.js ├── vueTool ├── static │ ├── img │ │ ├── 1.png │ │ ├── 2.png │ │ └── 3.png │ ├── fonts │ │ ├── element-icons.535877f.woff │ │ └── element-icons.732389d.ttf │ └── js │ │ ├── manifest.c671b31a6294c60d458b.js │ │ └── manifest.c671b31a6294c60d458b.js.map └── index.html ├── .editorconfig ├── .postcssrc.js ├── .gitignore ├── .babelrc ├── index.html ├── README.md └── package.json /static/.gitkeep: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /doc/项目环境搭建步骤.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gengbingbing/vue-tools/HEAD/doc/项目环境搭建步骤.doc -------------------------------------------------------------------------------- /static/img/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gengbingbing/vue-tools/HEAD/static/img/1.png -------------------------------------------------------------------------------- /static/img/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gengbingbing/vue-tools/HEAD/static/img/2.png -------------------------------------------------------------------------------- /static/img/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gengbingbing/vue-tools/HEAD/static/img/3.png -------------------------------------------------------------------------------- /config/prod.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | module.exports = { 3 | NODE_ENV: '"production"' 4 | } 5 | -------------------------------------------------------------------------------- /src/assets/car.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gengbingbing/vue-tools/HEAD/src/assets/car.ico -------------------------------------------------------------------------------- /src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gengbingbing/vue-tools/HEAD/src/assets/logo.png -------------------------------------------------------------------------------- /src/assets/js/datamap.js: -------------------------------------------------------------------------------- 1 | export const GENDER = Object.freeze({ 2 | 1: '男', 3 | 2: '女' 4 | }) 5 | -------------------------------------------------------------------------------- /vueTool/static/img/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gengbingbing/vue-tools/HEAD/vueTool/static/img/1.png -------------------------------------------------------------------------------- /vueTool/static/img/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gengbingbing/vue-tools/HEAD/vueTool/static/img/2.png -------------------------------------------------------------------------------- /vueTool/static/img/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gengbingbing/vue-tools/HEAD/vueTool/static/img/3.png -------------------------------------------------------------------------------- /src/assets/images/card.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gengbingbing/vue-tools/HEAD/src/assets/images/card.jpg -------------------------------------------------------------------------------- /src/assets/fonts/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gengbingbing/vue-tools/HEAD/src/assets/fonts/iconfont.eot -------------------------------------------------------------------------------- /src/assets/fonts/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gengbingbing/vue-tools/HEAD/src/assets/fonts/iconfont.ttf -------------------------------------------------------------------------------- /src/assets/fonts/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gengbingbing/vue-tools/HEAD/src/assets/fonts/iconfont.woff -------------------------------------------------------------------------------- /src/components/dgTable/js/Bus.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | 3 | const Bus = new Vue() 4 | 5 | export default Bus 6 | -------------------------------------------------------------------------------- /src/views/permission/菜单权限.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gengbingbing/vue-tools/HEAD/src/views/permission/菜单权限.txt -------------------------------------------------------------------------------- /src/assets/images/downloadcode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gengbingbing/vue-tools/HEAD/src/assets/images/downloadcode.png -------------------------------------------------------------------------------- /src/assets/images/totalnumber.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gengbingbing/vue-tools/HEAD/src/assets/images/totalnumber.jpg -------------------------------------------------------------------------------- /vueTool/static/fonts/element-icons.535877f.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gengbingbing/vue-tools/HEAD/vueTool/static/fonts/element-icons.535877f.woff -------------------------------------------------------------------------------- /vueTool/static/fonts/element-icons.732389d.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gengbingbing/vue-tools/HEAD/vueTool/static/fonts/element-icons.732389d.ttf -------------------------------------------------------------------------------- /src/components/dgTable/index.js: -------------------------------------------------------------------------------- 1 | import DGTable from './dg-table' 2 | 3 | DGTable.install = (Vue) => { 4 | Vue.component(DGTable.name, DGTable) 5 | } 6 | export default DGTable 7 | -------------------------------------------------------------------------------- /config/dev.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const merge = require('webpack-merge') 3 | const prodEnv = require('./prod.env') 4 | 5 | module.exports = merge(prodEnv, { 6 | NODE_ENV: '"development"' 7 | }) 8 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /src/api/env.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by yqr on 2018/4/13. 3 | * 设置api请求的baseURL 4 | * 实际项目中建议该文件不纳入版本管理 5 | */ 6 | export default { 7 | baseURL: 'http://localhost:8090', 8 | isDev: true 9 | } 10 | -------------------------------------------------------------------------------- /.postcssrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | "plugins": { 3 | "postcss-import": {}, 4 | "postcss-url": {}, 5 | // to edit target browsers: use "browserslist" field in package.json 6 | "autoprefixer": {} 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | /dist/ 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Editor directories and files 9 | .idea 10 | .vscode 11 | *.suo 12 | *.ntvs* 13 | *.njsproj 14 | *.sln 15 | -------------------------------------------------------------------------------- /src/store.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | 4 | Vue.use(Vuex) 5 | 6 | const state = { 7 | topNavState: 'home', 8 | leftNavState: 'home' 9 | } 10 | 11 | export default new Vuex.Store({ 12 | state 13 | }) 14 | -------------------------------------------------------------------------------- /src/components/404.vue: -------------------------------------------------------------------------------- 1 | 6 | 15 | -------------------------------------------------------------------------------- /src/common/util.js: -------------------------------------------------------------------------------- 1 | var TEL_REGEXP = /^1([38]\d|5[0-35-9]|7[3678])\d{8}$/; 2 | 3 | export default { 4 | checkTel: { 5 | validateTel: function(tel){ 6 | if(TEL_REGEXP.test(tel)){ 7 | return true; 8 | } 9 | return false; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { 4 | "modules": false, 5 | "targets": { 6 | "browsers": ["> 1%", "last 2 versions", "not ie <= 8"] 7 | } 8 | }], 9 | "stage-2" 10 | ], 11 | "plugins": ["jsx-v-model", "transform-vue-jsx", "transform-runtime"] 12 | } 13 | -------------------------------------------------------------------------------- /src/api/api_enterprise.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by yqr on 2018/4/13. 3 | */ 4 | import * as API from './' 5 | 6 | export default { 7 | //查询列表 8 | findList: params => { 9 | return API.GET('/json', params) 10 | }, 11 | findById: id => { 12 | return API.GET(`/api/enterprise/list/${id}`) 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | tools 集锦 8 | 9 | 10 |
11 | 12 | 17 | 18 | -------------------------------------------------------------------------------- /src/components/dgTable/componentsTem/customizemenu.vue: -------------------------------------------------------------------------------- 1 | 7 | 20 | 21 | -------------------------------------------------------------------------------- /vueTool/index.html: -------------------------------------------------------------------------------- 1 | tools 集锦
-------------------------------------------------------------------------------- /src/components/dgTable/componentsTem/columcomponent.vue: -------------------------------------------------------------------------------- 1 | 7 | 18 | 19 | 27 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './App' 3 | import router from './router' 4 | import ElementUI from 'element-ui' 5 | import echarts from 'echarts' 6 | import Blob from './vendor/Blob.js' 7 | import Export2Excel from './vendor/Export2Excel.js' 8 | 9 | import store from './store.js' 10 | import 'element-ui/lib/theme-chalk/index.css' 11 | import '@/assets/iconfont.css' 12 | import '@/assets/css/style.css' 13 | import 'echarts/map/js/china' 14 | import $ from 'jquery' 15 | 16 | Vue.config.productionTip = false 17 | Vue.prototype.$echarts = echarts 18 | Vue.use(ElementUI) 19 | 20 | new Vue({ 21 | router, 22 | store, 23 | el: '#app', 24 | render: h => h(App) 25 | }) 26 | -------------------------------------------------------------------------------- /vueTool/static/js/manifest.c671b31a6294c60d458b.js: -------------------------------------------------------------------------------- 1 | !function(r){var n=window.webpackJsonp;window.webpackJsonp=function(e,u,c){for(var f,i,p,a=0,l=[];a 2 |
3 | 打开弹出框 4 | 5 | 6 |
{{getSelData}}
7 |
8 | 9 | 10 | 32 | 33 | -------------------------------------------------------------------------------- /src/components/treeTable/eval.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @Author: gengbingbing 3 | * @Date: 2019/6/9 4 | */ 5 | 'use strict' 6 | import Vue from 'vue' 7 | export default function treeToArray(data, expandAll, parent = null, level = null) { 8 | let tmp = [] 9 | Array.from(data).forEach(function (record) { 10 | if (record._expanded === undefined) { 11 | Vue.set(record, '_expanded', expandAll) 12 | } 13 | let _level = 1 14 | if (level !== undefined && level !== null) { 15 | _level = level + 1 16 | } 17 | Vue.set(record, '_level', _level) 18 | // 如果有父元素 19 | if (parent) { 20 | Vue.set(record, 'parent', parent) 21 | } 22 | tmp.push(record) 23 | if (record.children && record.children.length > 0) { 24 | const children = treeToArray(record.children, expandAll, record, _level) 25 | tmp = tmp.concat(children) 26 | } 27 | }) 28 | return tmp 29 | } -------------------------------------------------------------------------------- /src/views/treeTransfer/treeDragTransfer.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | -------------------------------------------------------------------------------- /src/components/dgTable/css/common.css: -------------------------------------------------------------------------------- 1 | .filterWrap { 2 | min-width: 100px; 3 | border: 1px solid #ebeef5; 4 | border-radius: 2px; 5 | background-color: #fff; 6 | box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); 7 | box-sizing: border-box; 8 | margin: 2px 0; 9 | position: absolute; 10 | z-index: 9; 11 | } 12 | .editFilter { 13 | position: absolute; 14 | width: 300px; 15 | } 16 | .filterWrap.hideBg { 17 | opacity:0; 18 | box-shadow:none; 19 | } 20 | /* .filterWrap .filterContainer { 21 | padding: 10px; 22 | } */ 23 | .filterWrap .filterBottom { 24 | padding: 8px; 25 | border-top: 1px solid #ebeef5; 26 | } 27 | .filterWrap .filterBottom button { 28 | background: transparent; 29 | border: none; 30 | color: #606266; 31 | cursor: pointer; 32 | font-size: 13px; 33 | padding: 0 3px; 34 | } 35 | .filterWrap .filterBottom button.is-disabled { 36 | color: #c0c4cc; 37 | cursor: not-allowed; 38 | } -------------------------------------------------------------------------------- /src/assets/iconfont.css: -------------------------------------------------------------------------------- 1 | 2 | @font-face {font-family: "iconfont"; 3 | src: url('fonts/iconfont.eot?t=1524894158375'); /* IE9*/ 4 | src: url('fonts/iconfont.eot?t=1524894158375#iefix') format('embedded-opentype'), /* IE6-IE8 */ 5 | url('fonts/iconfont.woff?t=1524894158375') format('woff'), 6 | url('fonts/iconfont.ttf?t=1524894158375') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ 7 | url('fonts/iconfont.svg?t=1524894158375#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 | .icon-home:before { content: "\e626"; } 19 | 20 | .icon-user:before { content: "\ec52"; } 21 | 22 | .icon-indent:before { content: "\e62b"; } 23 | 24 | .icon-outdent:before { content: "\e62c"; } 25 | 26 | .icon-caret-down:before { content: "\e631"; } 27 | 28 | -------------------------------------------------------------------------------- /src/views/home.vue: -------------------------------------------------------------------------------- 1 | 21 | 31 | 36 | -------------------------------------------------------------------------------- /src/components/dgTable/js/index.js: -------------------------------------------------------------------------------- 1 | 2 | /* eslint-disable */ 3 | // 这个js文件是用于 4 | // 从筛选器中得到的数据传输到你的page中 5 | // 如果在多个组建中引用这个文件 要调用initFilterData 6 | let _filters = {} 7 | export const getFilter = val => { 8 | var _t = [] 9 | var _ft = {} 10 | if (val.label) { 11 | _filters[val.key] = { 12 | label: val.label, 13 | ftn: val.ftn, 14 | value: val.value, 15 | key: val.key 16 | } 17 | } else { 18 | if (_filters.hasOwnProperty(val.key)) { 19 | delete _filters[val.key] 20 | } 21 | } 22 | for (var k in _filters) { 23 | _t.push(_filters[k]) 24 | _ft[k] = _filters[k].value 25 | } 26 | return { showfilter: _t, dofilter: _ft } 27 | } 28 | export const doDeleteFilter = tag => { 29 | var dkey = tag.key 30 | delete _filters[dkey] 31 | var _ft = {} 32 | for (var k in _filters) { 33 | _ft[k] = _filters[k].value 34 | } 35 | return _ft 36 | } 37 | export const initFilterData = (inittags = {}) => { 38 | _filters = inittags 39 | } 40 | -------------------------------------------------------------------------------- /src/components/dgTable/componentsTem/customizefilter.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 39 | 40 | 48 | -------------------------------------------------------------------------------- /src/views/tool/animation.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 45 | 46 | -------------------------------------------------------------------------------- /src/app.vue: -------------------------------------------------------------------------------- 1 | 6 | 11 | 50 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Vue Tools 2 | 3 | > A Vue.js project 4 | ## 一些组件截图 5 | ![效果图](http://a1.qpic.cn/psc?/V11OI4qh0IBILO/es2MkY2PTea.oVL6KUJJICCR35bCuRK.OKWjGEarhdSBCvheuA0CgZw99x7RPSe.L.QXFwiHMSjvYWGwTDFFRg!!/b&ek=1&kp=1&pt=0&bo=UwVxAgAAAAADFxc!&tl=1&vuin=992899491&tm=1586160000&sce=60-4-3&rf=viewer_4) 6 | 7 | ![效果图](http://a1.qpic.cn/psc?/V11OI4qh0IBILO/es2MkY2PTea.oVL6KUJJIGacDBN8ON0AQJYtx5ewOhJso4jgne2nwxp0Mk5KVzDi*6BCBKTtlZmm7qGhLgStmg!!/b&ek=1&kp=1&pt=0&bo=UwVxAgAAAAADFxc!&tl=1&vuin=992899491&tm=1586160000&sce=60-4-3&rf=viewer_4) 8 | 9 | ![效果图](http://a1.qpic.cn/psc?/V11OI4qh0IBILO/es2MkY2PTea.oVL6KUJJIGkK1W*auqbcgzDbzM9MtThoPGwKx2s*J.NdA5LVrezenRSvjQag*KAW0pJPRtTqnw!!/b&ek=1&kp=1&pt=0&bo=UwVxAgAAAAADFxc!&tl=1&vuin=992899491&tm=1586160000&sce=60-4-3&rf=viewer_4) 10 | ## Build Setup 11 | 12 | ``` bash 13 | # install dependencies 14 | npm install 15 | 16 | # serve with hot reload at localhost:8080 17 | npm run dev 18 | 19 | # build for production with minification 20 | npm run build 21 | 22 | # build for production and view the bundle analyzer report 23 | npm run build --report 24 | ``` 25 | 26 | 27 | For a detailed explanation on how things work, check out the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader). 28 | 29 | # Vue Tools 30 | -------------------------------------------------------------------------------- /src/views/markdown/editor.vue: -------------------------------------------------------------------------------- 1 | 18 | -------------------------------------------------------------------------------- /src/components/dgTable/Filters/edit.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 65 | 66 | 77 | -------------------------------------------------------------------------------- /src/views/select/index.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 64 | 65 | -------------------------------------------------------------------------------- /src/api/index.js: -------------------------------------------------------------------------------- 1 | import Env from './env'; 2 | import axios from 'axios' 3 | axios.defaults.withCredentials = true; 4 | // axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; 5 | // axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';//配置请求头 6 | 7 | //添加一个请求拦截器 8 | axios.interceptors.response.use(response => { 9 | return response; 10 | }, error => { 11 | if (error.response) { 12 | switch (error.response.status) { 13 | // 返回401,清除token信息并跳转到登录页面 14 | case 401: 15 | router.replace({ 16 | path: '/404' 17 | //登录成功后跳入浏览的当前页面 18 | // query: {redirect: router.currentRoute.fullPath} 19 | }) 20 | } 21 | // 返回接口返回的错误信息 22 | return Promise.reject(error.response.data); 23 | } 24 | }); 25 | 26 | /* axios.interceptors.request.use(function (config) { 27 | console.dir(config); 28 | return config; 29 | }, function (error) { 30 | // Do something with request error 31 | return Promise.reject(error); 32 | }); */ 33 | 34 | 35 | //基地址 36 | let base = Env.baseURL; 37 | 38 | //测试使用 39 | export const ISDEV = Env.isDev; 40 | 41 | //通用方法 42 | export const POST = (url, params) => { 43 | return axios.post(`${base}${url}`, params).then(res => res.data) 44 | } 45 | 46 | export const GET = (url, params) => { 47 | return axios.get(`${base}${url}`, {params: params}).then(res => res.data) 48 | } 49 | 50 | export const PUT = (url, params) => { 51 | return axios.put(`${base}${url}`, params).then(res => res.data) 52 | } 53 | 54 | export const DELETE = (url, params) => { 55 | return axios.delete(`${base}${url}`, {params: params}).then(res => res.data) 56 | } 57 | 58 | export const PATCH = (url, params) => { 59 | return axios.patch(`${base}${url}`, params).then(res => res.data) 60 | } 61 | -------------------------------------------------------------------------------- /src/views/tool/uploadImg.vue: -------------------------------------------------------------------------------- 1 | 11 | 36 | 65 | -------------------------------------------------------------------------------- /src/components/dgTable/Filters/range.vue: -------------------------------------------------------------------------------- 1 | 24 | 25 | 61 | 62 | 75 | -------------------------------------------------------------------------------- /src/components/nav/leftNav.vue: -------------------------------------------------------------------------------- 1 | 28 | 48 | 49 | -------------------------------------------------------------------------------- /src/components/selectTable/index.vue: -------------------------------------------------------------------------------- 1 | 34 | 35 | 73 | 74 | -------------------------------------------------------------------------------- /config/index.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | // Template version: 1.3.1 3 | // see http://vuejs-templates.github.io/webpack for documentation. 4 | 5 | const path = require('path') 6 | 7 | module.exports = { 8 | dev: { 9 | 10 | // Paths 11 | assetsSubDirectory: 'static', 12 | assetsPublicPath: '/', 13 | proxyTable: { 14 | // '/api': { 15 | // target: 'http://localhost:8080',//设置你调用的接口域名和端口号 别忘了加http 16 | // changeOrigin: true, 17 | // pathRewrite: { 18 | // '^/api': ''//这里理解成用‘/api’代替target里面的地址,后面组件中我们掉接口时直接用api代替 比如我要调用'http://40.00.100.100:3002/user/add',直接写‘/api/user/add’即可 19 | // } 20 | // } 21 | }, 22 | 23 | // Various Dev Server settings 24 | host: 'localhost', // can be overwritten by process.env.HOST 25 | port: 8081, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined 26 | autoOpenBrowser: false, 27 | errorOverlay: true, 28 | notifyOnErrors: true, 29 | poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions- 30 | 31 | 32 | /** 33 | * Source Maps 34 | */ 35 | 36 | // https://webpack.js.org/configuration/devtool/#development 37 | devtool: 'cheap-module-eval-source-map', 38 | 39 | // If you have problems debugging vue-files in devtools, 40 | // set this to false - it *may* help 41 | // https://vue-loader.vuejs.org/en/options.html#cachebusting 42 | cacheBusting: true, 43 | 44 | cssSourceMap: true 45 | }, 46 | 47 | build: { 48 | // Template for index.html 49 | index: path.resolve(__dirname, '../vueTool/index.html'), 50 | 51 | // Paths 52 | assetsRoot: path.resolve(__dirname, '../vueTool'), 53 | assetsSubDirectory: 'static', 54 | assetsPublicPath: './', 55 | 56 | /** 57 | * Source Maps 58 | */ 59 | 60 | productionSourceMap: true, 61 | // https://webpack.js.org/configuration/devtool/#production 62 | devtool: '#source-map', 63 | 64 | // Gzip off by default as many popular static hosts such as 65 | // Surge or Netlify already gzip all static assets for you. 66 | // Before setting to `true`, make sure to: 67 | // npm install --save-dev compression-webpack-plugin 68 | productionGzip: false, 69 | productionGzipExtensions: ['js', 'css'], 70 | 71 | // Run the build command with an extra argument to 72 | // View the bundle analyzer report after build finishes: 73 | // `npm run build --report` 74 | // Set to `true` or `false` to always turn it on or off 75 | bundleAnalyzerReport: process.env.npm_config_report 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /src/views/tool/horseRaceLamp.vue: -------------------------------------------------------------------------------- 1 | 12 | 65 | 66 | -------------------------------------------------------------------------------- /src/components/dgTable/Filters/date.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 95 | 96 | 99 | -------------------------------------------------------------------------------- /src/components/dgTable/Filters/cascader.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 95 | 96 | 102 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tengyu", 3 | "version": "1.0.0", 4 | "description": "A Vue.js project", 5 | "author": "gengbingbing", 6 | "private": true, 7 | "scripts": { 8 | "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", 9 | "start": "npm run dev", 10 | "serve": "npm run dev", 11 | "build": "node build/build.js" 12 | }, 13 | "dependencies": { 14 | "axios": "^0.18.0", 15 | "babel-polyfill": "^6.26.0", 16 | "babel-runtime": "^6.26.0", 17 | "countup.js": "^1.9.3", 18 | "dg-table": "^0.2.0", 19 | "echarts": "^4.0.4", 20 | "el-tree-transfer": "^2.2.0", 21 | "element-ui": "^2.9.1", 22 | "file-saver": "^1.3.8", 23 | "less": "^3.9.0", 24 | "mavon-editor": "^2.9.0", 25 | "vue": "^2.5.2", 26 | "vue-countup-v2": "^1.0.3", 27 | "vue-router": "^3.0.1", 28 | "vuex": "^3.0.1", 29 | "webpack-cli": "^3.3.3", 30 | "xlsx": "^0.14.0" 31 | }, 32 | "devDependencies": { 33 | "autoprefixer": "^7.1.2", 34 | "babel-core": "^6.22.1", 35 | "babel-helper-vue-jsx-merge-props": "^2.0.3", 36 | "babel-loader": "^7.1.1", 37 | "babel-plugin-jsx-v-model": "^2.0.3", 38 | "babel-plugin-syntax-jsx": "^6.18.0", 39 | "babel-plugin-transform-runtime": "^6.22.0", 40 | "babel-plugin-transform-vue-jsx": "^3.5.0", 41 | "babel-preset-env": "^1.3.2", 42 | "babel-preset-stage-2": "^6.22.0", 43 | "less": "^2.7.2", 44 | "less-loader": "^4.0.5", 45 | "chalk": "^2.0.1", 46 | "copy-webpack-plugin": "^4.0.1", 47 | "css-loader": "^0.28.0", 48 | "extract-text-webpack-plugin": "^3.0.0", 49 | "file-loader": "^1.1.4", 50 | "friendly-errors-webpack-plugin": "^1.6.1", 51 | "html-webpack-plugin": "^2.30.1", 52 | "jquery": "^3.3.1", 53 | "node-notifier": "^5.1.2", 54 | "node-sass": "^4.9.0", 55 | "optimize-css-assets-webpack-plugin": "^3.2.0", 56 | "ora": "^1.2.0", 57 | "portfinder": "^1.0.13", 58 | "postcss-import": "^11.0.0", 59 | "postcss-loader": "^2.0.8", 60 | "postcss-url": "^7.2.1", 61 | "rimraf": "^2.6.0", 62 | "sass-loader": "^7.0.1", 63 | "script-loader": "^0.7.2", 64 | "semver": "^5.3.0", 65 | "shelljs": "^0.7.6", 66 | "uglifyjs-webpack-plugin": "^1.1.1", 67 | "url-loader": "^0.5.8", 68 | "vue-loader": "^13.3.0", 69 | "vue-style-loader": "^3.0.1", 70 | "vue-template-compiler": "^2.5.2", 71 | "webpack": "^3.6.0", 72 | "webpack-bundle-analyzer": "^3.3.2", 73 | "webpack-dev-server": "^2.9.7", 74 | "webpack-merge": "^4.1.0" 75 | }, 76 | "engines": { 77 | "node": ">= 6.0.0", 78 | "npm": ">= 3.0.0" 79 | }, 80 | "browserslist": [ 81 | "> 1%", 82 | "last 2 versions", 83 | "not ie <= 8" 84 | ] 85 | } 86 | -------------------------------------------------------------------------------- /src/components/dgTable/Filters/search.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 84 | 85 | 107 | -------------------------------------------------------------------------------- /src/views/table/elTable.vue: -------------------------------------------------------------------------------- 1 | 14 | 17 | 106 | -------------------------------------------------------------------------------- /src/components/dgTable/Filters/radio.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 102 | 103 | 126 | -------------------------------------------------------------------------------- /src/components/nav/topNav.vue: -------------------------------------------------------------------------------- 1 | 25 | 102 | -------------------------------------------------------------------------------- /src/views/table/treeTable.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 118 | 119 | -------------------------------------------------------------------------------- /src/components/treeTable/index.vue: -------------------------------------------------------------------------------- 1 | 28 | 29 | 92 | 110 | 111 | -------------------------------------------------------------------------------- /src/components/treeTable/tree-item.vue: -------------------------------------------------------------------------------- 1 | 47 | 48 | 126 | -------------------------------------------------------------------------------- /src/components/tableChoice/index.vue: -------------------------------------------------------------------------------- 1 | 42 | 43 | 109 | -------------------------------------------------------------------------------- /src/views/tool/export.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 22 | 23 | -------------------------------------------------------------------------------- /vueTool/static/js/manifest.c671b31a6294c60d458b.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["webpack:///webpack/bootstrap 3b00f022c1a3aee8bca2"],"names":["parentJsonpFunction","window","chunkIds","moreModules","executeModules","moduleId","chunkId","result","i","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","shift","__webpack_require__","s","installedModules","1","exports","module","l","m","c","d","name","getter","o","defineProperty","configurable","enumerable","get","n","__esModule","object","property","p","oe","err","console","error"],"mappings":"aACA,IAAAA,EAAAC,OAAA,aACAA,OAAA,sBAAAC,EAAAC,EAAAC,GAIA,IADA,IAAAC,EAAAC,EAAAC,EAAAC,EAAA,EAAAC,KACQD,EAAAN,EAAAQ,OAAoBF,IAC5BF,EAAAJ,EAAAM,GACAG,EAAAL,IACAG,EAAAG,KAAAD,EAAAL,GAAA,IAEAK,EAAAL,GAAA,EAEA,IAAAD,KAAAF,EACAU,OAAAC,UAAAC,eAAAC,KAAAb,EAAAE,KACAY,EAAAZ,GAAAF,EAAAE,IAIA,IADAL,KAAAE,EAAAC,EAAAC,GACAK,EAAAC,QACAD,EAAAS,OAAAT,GAEA,GAAAL,EACA,IAAAI,EAAA,EAAYA,EAAAJ,EAAAM,OAA2BF,IACvCD,EAAAY,IAAAC,EAAAhB,EAAAI,IAGA,OAAAD,GAIA,IAAAc,KAGAV,GACAW,EAAA,GAIA,SAAAH,EAAAd,GAGA,GAAAgB,EAAAhB,GACA,OAAAgB,EAAAhB,GAAAkB,QAGA,IAAAC,EAAAH,EAAAhB,IACAG,EAAAH,EACAoB,GAAA,EACAF,YAUA,OANAN,EAAAZ,GAAAW,KAAAQ,EAAAD,QAAAC,IAAAD,QAAAJ,GAGAK,EAAAC,GAAA,EAGAD,EAAAD,QAKAJ,EAAAO,EAAAT,EAGAE,EAAAQ,EAAAN,EAGAF,EAAAS,EAAA,SAAAL,EAAAM,EAAAC,GACAX,EAAAY,EAAAR,EAAAM,IACAhB,OAAAmB,eAAAT,EAAAM,GACAI,cAAA,EACAC,YAAA,EACAC,IAAAL,KAMAX,EAAAiB,EAAA,SAAAZ,GACA,IAAAM,EAAAN,KAAAa,WACA,WAA2B,OAAAb,EAAA,SAC3B,WAAiC,OAAAA,GAEjC,OADAL,EAAAS,EAAAE,EAAA,IAAAA,GACAA,GAIAX,EAAAY,EAAA,SAAAO,EAAAC,GAAsD,OAAA1B,OAAAC,UAAAC,eAAAC,KAAAsB,EAAAC,IAGtDpB,EAAAqB,EAAA,KAGArB,EAAAsB,GAAA,SAAAC,GAA8D,MAApBC,QAAAC,MAAAF,GAAoBA","file":"static/js/manifest.c671b31a6294c60d458b.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) {\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [], result;\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules);\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n \t\tif(executeModules) {\n \t\t\tfor(i=0; i < executeModules.length; i++) {\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = executeModules[i]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t};\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// objects to store loaded and loading chunks\n \tvar installedChunks = {\n \t\t1: 0\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"./\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 3b00f022c1a3aee8bca2"],"sourceRoot":""} -------------------------------------------------------------------------------- /src/vendor/Export2Excel.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | require('script-loader!file-saver'); 3 | require('script-loader!vendor/Blob'); 4 | require('script-loader!xlsx/dist/xlsx.core.min'); 5 | function generateArray(table) { 6 | var out = []; 7 | var rows = table.querySelectorAll('tr'); 8 | var ranges = []; 9 | for (var R = 0; R < rows.length; ++R) { 10 | var outRow = []; 11 | var row = rows[R]; 12 | var columns = row.querySelectorAll('td'); 13 | for (var C = 0; C < columns.length; ++C) { 14 | var cell = columns[C]; 15 | var colspan = cell.getAttribute('colspan'); 16 | var rowspan = cell.getAttribute('rowspan'); 17 | var cellValue = cell.innerText; 18 | if (cellValue !== "" && cellValue == +cellValue) cellValue = +cellValue; 19 | 20 | //Skip ranges 21 | ranges.forEach(function (range) { 22 | if (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <= range.e.c) { 23 | for (var i = 0; i <= range.e.c - range.s.c; ++i) outRow.push(null); 24 | } 25 | }); 26 | 27 | //Handle Row Span 28 | if (rowspan || colspan) { 29 | rowspan = rowspan || 1; 30 | colspan = colspan || 1; 31 | ranges.push({s: {r: R, c: outRow.length}, e: {r: R + rowspan - 1, c: outRow.length + colspan - 1}}); 32 | } 33 | ; 34 | 35 | //Handle Value 36 | outRow.push(cellValue !== "" ? cellValue : null); 37 | 38 | //Handle Colspan 39 | if (colspan) for (var k = 0; k < colspan - 1; ++k) outRow.push(null); 40 | } 41 | out.push(outRow); 42 | } 43 | return [out, ranges]; 44 | }; 45 | 46 | function datenum(v, date1904) { 47 | if (date1904) v += 1462; 48 | var epoch = Date.parse(v); 49 | return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000); 50 | } 51 | 52 | function sheet_from_array_of_arrays(data, opts) { 53 | var ws = {}; 54 | var range = {s: {c: 10000000, r: 10000000}, e: {c: 0, r: 0}}; 55 | for (var R = 0; R != data.length; ++R) { 56 | for (var C = 0; C != data[R].length; ++C) { 57 | if (range.s.r > R) range.s.r = R; 58 | if (range.s.c > C) range.s.c = C; 59 | if (range.e.r < R) range.e.r = R; 60 | if (range.e.c < C) range.e.c = C; 61 | var cell = {v: data[R][C]}; 62 | if (cell.v == null) continue; 63 | var cell_ref = XLSX.utils.encode_cell({c: C, r: R}); 64 | 65 | if (typeof cell.v === 'number') cell.t = 'n'; 66 | else if (typeof cell.v === 'boolean') cell.t = 'b'; 67 | else if (cell.v instanceof Date) { 68 | cell.t = 'n'; 69 | cell.z = XLSX.SSF._table[14]; 70 | cell.v = datenum(cell.v); 71 | } 72 | else cell.t = 's'; 73 | 74 | ws[cell_ref] = cell; 75 | } 76 | } 77 | if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range); 78 | return ws; 79 | } 80 | 81 | function Workbook() { 82 | if (!(this instanceof Workbook)) return new Workbook(); 83 | this.SheetNames = []; 84 | this.Sheets = {}; 85 | } 86 | 87 | function s2ab(s) { 88 | var buf = new ArrayBuffer(s.length); 89 | var view = new Uint8Array(buf); 90 | for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF; 91 | return buf; 92 | } 93 | 94 | export function export_table_to_excel(id) { 95 | var theTable = document.getElementById(id); 96 | console.log('a') 97 | var oo = generateArray(theTable); 98 | var ranges = oo[1]; 99 | 100 | /* original data */ 101 | var data = oo[0]; 102 | var ws_name = "SheetJS"; 103 | console.log(data); 104 | 105 | var wb = new Workbook(), ws = sheet_from_array_of_arrays(data); 106 | 107 | /* add ranges to worksheet */ 108 | // ws['!cols'] = ['apple', 'banan']; 109 | ws['!merges'] = ranges; 110 | 111 | /* add worksheet to workbook */ 112 | wb.SheetNames.push(ws_name); 113 | wb.Sheets[ws_name] = ws; 114 | 115 | var wbout = XLSX.write(wb, {bookType: 'xlsx', bookSST: false, type: 'binary'}); 116 | 117 | saveAs(new Blob([s2ab(wbout)], {type: "application/octet-stream"}), "test.xlsx") 118 | } 119 | 120 | function formatJson(jsonData) { 121 | console.log(jsonData) 122 | } 123 | export function export_json_to_excel(th, jsonData, defaultTitle) { 124 | 125 | /* original data */ 126 | 127 | var data = jsonData; 128 | data.unshift(th); 129 | var ws_name = "SheetJS"; 130 | 131 | var wb = new Workbook(), ws = sheet_from_array_of_arrays(data); 132 | 133 | 134 | /* add worksheet to workbook */ 135 | wb.SheetNames.push(ws_name); 136 | wb.Sheets[ws_name] = ws; 137 | 138 | var wbout = XLSX.write(wb, {bookType: 'xlsx', bookSST: false, type: 'binary'}); 139 | var title = defaultTitle || '列表' 140 | saveAs(new Blob([s2ab(wbout)], {type: "application/octet-stream"}), title + ".xlsx") 141 | } 142 | -------------------------------------------------------------------------------- /src/views/permission/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | -------------------------------------------------------------------------------- /src/assets/fonts/iconfont.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | Created by iconfont 9 | 10 | 11 | 12 | 13 | 21 | 22 | 23 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /src/views/treeTransfer/index.vue: -------------------------------------------------------------------------------- 1 | 58 | 126 | 137 | -------------------------------------------------------------------------------- /src/views/table/dgTable.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 197 | 198 | -------------------------------------------------------------------------------- /src/assets/css/style.css: -------------------------------------------------------------------------------- 1 | * { 2 | margin: 0; 3 | padding: 0; 4 | } 5 | 6 | html { 7 | font-size: 14px; 8 | } 9 | 10 | @media all and (max-width: 768px) { 11 | html { 12 | font-size: 12px; 13 | } 14 | } 15 | 16 | body { 17 | margin: 0; 18 | padding: 0; 19 | } 20 | 21 | a { 22 | text-decoration: none; 23 | } 24 | 25 | ul { 26 | list-style: none; 27 | margin-bottom: 0; 28 | } 29 | 30 | #app { 31 | font-family: 'Avenir', Helvetica, Arial, sans-serif; 32 | -webkit-font-smoothing: antialiased; 33 | -moz-osx-font-smoothing: grayscale; 34 | color: #2c3e50; 35 | margin-top: 60px; 36 | } 37 | 38 | .container { 39 | position: absolute; 40 | top: 0px; 41 | bottom: 0px; 42 | width: 100%; 43 | } 44 | 45 | .container .topbar-wrap { 46 | height: 50px; 47 | line-height: 50px; 48 | background: #373d41; 49 | padding: 0px; 50 | } 51 | 52 | .container .topbar-wrap .topbar-btn { 53 | color: #fff; 54 | } 55 | 56 | .container .topbar-wrap .topbar-logo { 57 | float: left; 58 | width: 48px; 59 | line-height: 26px; 60 | } 61 | 62 | .container .topbar-wrap .topbar-logos { 63 | float: left; 64 | width: 140px; 65 | line-height: 48px; 66 | font-size: 14px; 67 | } 68 | 69 | .container .topbar-wrap .topbar-logo img, .container .topbar-wrap .topbar-logos img { 70 | height: 30px; 71 | margin-top: 12px; 72 | margin-left: 2px; 73 | } 74 | 75 | .container .topbar-wrap .topbar-title { 76 | float: left; 77 | text-align: left; 78 | padding-left: 10px; 79 | border-left: 1px solid #000; 80 | } 81 | 82 | .topbar-title .el-menu--horizontal { 83 | background-color: transparent; 84 | } 85 | 86 | .el-menu--horizontal > .el-menu-item:not(.is-disabled):hover, .el-menu--horizontal > .el-menu-item:not(.is-disabled):focus, .el-menu--horizontal > .el-menu-item.is-active { 87 | color: #fff; 88 | background-color: transparent; 89 | border-bottom: 2px solid #409EFF !important; 90 | } 91 | 92 | .topbar-title .el-menu--horizontal > .el-menu-item { 93 | height: 50px; 94 | line-height: 50px; 95 | color: #fff; 96 | } 97 | 98 | .el-menu-item .iconfont { 99 | margin-right: 5px; 100 | display: inline-block; 101 | width: 24px; 102 | text-align: center; 103 | font-size: 18px; 104 | vertical-align: middle; 105 | } 106 | 107 | .container .topbar-wrap .topbar-account { 108 | float: right; 109 | padding-right: 12px; 110 | } 111 | 112 | .container .topbar-wrap .topbar-timer { 113 | display: inline-block; 114 | } 115 | 116 | .container .topbar-wrap .topbar-timer span { 117 | display: inline-block; 118 | vertical-align: middle; 119 | } 120 | 121 | .container .topbar-wrap .topbar-timer .login-name { 122 | margin: 0 6px; 123 | font-style: normal; 124 | } 125 | 126 | .container .topbar-wrap .userinfo-inner { 127 | cursor: pointer; 128 | color: #fff; 129 | padding-left: 10px; 130 | } 131 | 132 | .container .topbar-wrap .userinfo-inner img { 133 | margin-left: 6px; 134 | width: 42px; 135 | height: 42px; 136 | border: 1px solid #504d4d; 137 | -webkit-border-radius: 50%; 138 | -moz-border-radius: 50%; 139 | border-radius: 50%; 140 | vertical-align: middle; 141 | } 142 | 143 | .container .menu-toggle { 144 | background: #4A5064; 145 | text-align: center; 146 | color: white; 147 | height: 26px; 148 | line-height: 30px; 149 | } 150 | 151 | .container .menu-toggle .iconfont:hover { 152 | cursor: pointer; 153 | } 154 | 155 | aside .el-menu-item, aside .el-submenu__title { 156 | color: #fff; 157 | text-align: left; 158 | } 159 | 160 | aside .el-menu-item:hover, aside .el-submenu .el-menu-item:hover, aside .el-submenu__title:hover { 161 | background-color: #7ed2df; 162 | } 163 | 164 | aside .el-submenu .el-menu-item { 165 | background-color: #333744; 166 | } 167 | 168 | aside .el-submenu .el-menu-item:hover { 169 | background-color: #4A5064; 170 | } 171 | 172 | aside .el-submenu .el-menu-item.is-active, aside .el-menu-item.is-active, 173 | aside .el-submenu .el-menu-item.is-active:hover, aside .el-menu-item.is-active:hover { 174 | background-color: #00C1DE; 175 | color: #fff; 176 | } 177 | 178 | aside .warp-breadcrum { 179 | margin: 5px 10px 15px 0px; 180 | } 181 | 182 | .container aside { 183 | min-width: 50px; 184 | background: #333744; 185 | } 186 | 187 | .container aside::-webkit-scrollbar { 188 | display: none; 189 | } 190 | 191 | .container aside.showSidebar { 192 | overflow-x: hidden; 193 | overflow-y: auto; 194 | } 195 | 196 | .container aside .el-menu { 197 | height: 100%; /*写给不支持calc()的浏览器*/ 198 | height: calc(100% - 80px); 199 | border-radius: 0px; 200 | background-color: #333744; 201 | border-right: 0px; 202 | } 203 | 204 | .container aside .el-submenu .el-menu-item { 205 | min-width: 60px; 206 | } 207 | 208 | .container aside .el-menu { 209 | width: 189px; 210 | } 211 | 212 | .container aside .el-menu--collapse { 213 | width: 60px; 214 | } 215 | 216 | .container aside .el-menu .el-menu-item, .container aside .el-submenu .el-submenu__title { 217 | height: 46px; 218 | line-height: 46px; 219 | } 220 | 221 | .container aside .el-menu-item:hover, .container aside .el-submenu .el-menu-item:hover, .container aside .el-submenu__title:hover { 222 | background-color: #7ed2df; 223 | } 224 | 225 | .container .main { 226 | display: -ms-flexbox; 227 | display: flex; 228 | position: absolute; 229 | top: 50px; 230 | bottom: 0px; 231 | overflow: hidden; 232 | } 233 | 234 | .container .content-container { 235 | background: #fff; 236 | -ms-flex: 1; 237 | flex: 1; 238 | overflow-y: auto; 239 | padding: 10px; 240 | padding-bottom: 1px; 241 | } 242 | 243 | .container .content-container .content-wrapper { 244 | background-color: #fff; 245 | box-sizing: border-box; 246 | } 247 | 248 | .footer { 249 | position: fixed; 250 | bottom: 0; 251 | left: 0; 252 | padding: 20px 0; 253 | width: 100%; 254 | background-color: #2d2e2e; 255 | } 256 | 257 | .footer .footer-msg { 258 | max-width: 800px; 259 | margin: 0 auto; 260 | text-align: center; 261 | font-size: 1.08rem; 262 | color: #666; 263 | } 264 | 265 | .footer .footer-msg a { 266 | color: #428bca; 267 | text-decoration: none; 268 | } 269 | 270 | .footer .footer-msg a:hover, 271 | .footer .footer-msg a:focus, 272 | .footer .footer-msg a:active { 273 | color: #2a6496; 274 | text-decoration: underline; 275 | outline: 0; 276 | } 277 | -------------------------------------------------------------------------------- /src/views/permission/menuBtnConfig.vue: -------------------------------------------------------------------------------- 1 | 28 | 29 | 165 | 166 | -------------------------------------------------------------------------------- /src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Router from 'vue-router' 3 | import TopNav from '@/components/nav/topNav.vue' 4 | import LeftNav from '@/components/nav/leftNav.vue' 5 | import NotFound from '@/components/404.vue' 6 | import Home from '@/views/home.vue' 7 | import MainIndex from '@/views/main/index.vue' 8 | import Export from '@/views/tool/export.vue' 9 | import Animation from '@/views/tool/animation.vue' 10 | import HorseRaceLamp from '@/views/tool/horseRaceLamp.vue' 11 | import UploadImg from '@/views/tool/uploadImg.vue' 12 | import elTable from '@/views/table/elTable.vue' 13 | import dgTable from '@/views/table/dgTable.vue' 14 | import indexTreeTable from '@/views/table/indexTreeTable.vue' 15 | import treeTable from '@/views/table/treeTable.vue' 16 | import treeTransfer from '@/views/treeTransfer/index.vue' 17 | import treeDragTransfer from '@/views/treeTransfer/treeDragTransfer.vue' 18 | import selectTable from '@/views/select/index.vue' 19 | import tableChoice from '@/views/table/tableChoice.vue' 20 | import MarkdownEditor from '@/views/markdown/editor.vue' 21 | 22 | // 懒加载方式,当路由被访问的时候才加载对应组件 23 | Vue.use(Router) 24 | 25 | let router = new Router({ 26 | routes: [ 27 | { 28 | path: '/', 29 | name: 'home', 30 | component: Home, 31 | menuShow: true, 32 | children: [ 33 | { 34 | path: '/', 35 | name: 'elGrid 表格', 36 | components: { 37 | default: elTable, 38 | // top: TopNav, 39 | aside: LeftNav 40 | }, 41 | leaf: true, 42 | // iconCls: 'el-icon-setting', 43 | menuShow: true, 44 | 45 | }, 46 | { 47 | path: '/dgTable', 48 | name: 'dgTable 表格', 49 | components: { 50 | default: dgTable, 51 | // top: TopNav, 52 | aside: LeftNav 53 | }, 54 | leaf: true, 55 | // iconCls: 'el-icon-setting', 56 | menuShow: true, 57 | 58 | }, 59 | { 60 | path: '/indexTreeTable', 61 | name: '自定义treeTable', 62 | components: { 63 | default: indexTreeTable, 64 | // top: TopNav, 65 | aside: LeftNav 66 | }, 67 | leaf: true, 68 | // iconCls: 'el-icon-setting', 69 | menuShow: true, 70 | 71 | }, 72 | { 73 | path: '/treeTable', 74 | name: 'treeTable 表格', 75 | components: { 76 | default: treeTable, 77 | // top: TopNav, 78 | aside: LeftNav 79 | }, 80 | leaf: true, 81 | // iconCls: 'el-icon-setting', 82 | menuShow: true, 83 | 84 | }, 85 | { 86 | path: '/tableChoice', 87 | name: '表格弹出选择框', 88 | components: { 89 | default: tableChoice, 90 | // top: TopNav, 91 | aside: LeftNav 92 | }, 93 | leaf: true, 94 | // iconCls: 'el-icon-setting', 95 | menuShow: true, 96 | 97 | }, 98 | { 99 | path: '/treeTransfer', 100 | name: '树形穿越框', 101 | components: { 102 | default: treeTransfer, 103 | // top: TopNav, 104 | aside: LeftNav 105 | }, 106 | leaf: true, 107 | // iconCls: 'el-icon-setting', 108 | menuShow: true, 109 | 110 | }, 111 | { 112 | path: '/treeDragTransfer', 113 | name: '树形可拖拽穿越框', 114 | components: { 115 | default: treeDragTransfer, 116 | // top: TopNav, 117 | aside: LeftNav 118 | }, 119 | leaf: true, 120 | // iconCls: 'el-icon-setting', 121 | menuShow: true, 122 | 123 | }, 124 | { 125 | path: '/selectTable', 126 | name: '下拉表格(带复选框)', 127 | components: { 128 | default: selectTable, 129 | // top: TopNav, 130 | aside: LeftNav 131 | }, 132 | leaf: true, 133 | // iconCls: 'el-icon-setting', 134 | menuShow: true, 135 | 136 | }, 137 | { 138 | path: '/ChinaMap', 139 | name: '中国地图', 140 | components: { 141 | default: MainIndex, 142 | // top: TopNav, 143 | aside: LeftNav 144 | }, 145 | leaf: true, 146 | // iconCls: 'el-icon-setting', 147 | menuShow: true, 148 | 149 | }, 150 | { 151 | path: '/tool/index', 152 | name: '导出/入Excel', 153 | components: { 154 | default: Export, 155 | // top: TopNav, 156 | aside: LeftNav 157 | }, 158 | leaf: true, 159 | // iconCls: 'el-icon-setting', 160 | menuShow: true, 161 | 162 | }, 163 | { 164 | path: '/tool/animation', 165 | name: '数字动画', 166 | components: { 167 | default: Animation, 168 | // top: TopNav, 169 | aside: LeftNav 170 | }, 171 | leaf: true, 172 | // iconCls: 'el-icon-setting', 173 | menuShow: true 174 | }, 175 | { 176 | path: '/tool/horseRaceLamp', 177 | name: 'vue跑马灯', 178 | components: { 179 | default: HorseRaceLamp, 180 | // top: TopNav, 181 | aside: LeftNav 182 | }, 183 | leaf: true, 184 | // iconCls: 'el-icon-menu', 185 | menuShow: true 186 | }, 187 | { 188 | path: '/tool/uploadImg', 189 | name: '上传图片', 190 | components: { 191 | default: UploadImg, 192 | // top: TopNav, 193 | aside: LeftNav 194 | }, 195 | leaf: true, 196 | // iconCls: 'el-icon-menu', 197 | menuShow: true 198 | }, 199 | { 200 | path: '/markdown', 201 | name: 'vue-markdown-editor', 202 | components: { 203 | default: MarkdownEditor, 204 | // top: TopNav, 205 | aside: LeftNav 206 | }, 207 | leaf: true, 208 | // iconCls: 'el-icon-menu', 209 | menuShow: true 210 | } 211 | ] 212 | } 213 | ] 214 | }); 215 | 216 | router.beforeEach((to, from, next) => { 217 | next() 218 | }); 219 | 220 | export default router 221 | -------------------------------------------------------------------------------- /src/vendor/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 | -------------------------------------------------------------------------------- /src/components/treeTransfer/index.vue: -------------------------------------------------------------------------------- 1 | 51 | 52 | 175 | 176 | 216 | -------------------------------------------------------------------------------- /src/components/elGrid/index.vue: -------------------------------------------------------------------------------- 1 | 30 | 31 | 218 | 219 | 225 | -------------------------------------------------------------------------------- /src/components/treeTable/indexNew.vue: -------------------------------------------------------------------------------- 1 | 69 | 70 | 169 | 170 | -------------------------------------------------------------------------------- /src/views/table/indexTreeTable.vue: -------------------------------------------------------------------------------- 1 | 17 | 399 | 400 | 406 | -------------------------------------------------------------------------------- /src/components/dgTable/dg-table.vue: -------------------------------------------------------------------------------- 1 | 201 | 543 | 544 | 572 | -------------------------------------------------------------------------------- /src/assets/js/simulationapi.js: -------------------------------------------------------------------------------- 1 | // 用于模拟搜索的数据 2 | let allusers = [] // 全部数据 3 | let CUR_FILTERDATA = [] // 过滤后的数据 4 | 5 | let perpagecount = 10 // 每页显示的数量 6 | // let CUR_PAGE = 1 7 | 8 | export const searchdata = (k = {}) => { 9 | let data = [] 10 | for (let i = 0; i < allusers.length; i++) { 11 | if (allusers[i].name.indexOf(k.name) !== -1) { 12 | data.push(allusers[i]) 13 | } 14 | } 15 | return Promise.resolve(data) 16 | } 17 | export const dofilter = (allfilter = {}) => { 18 | let data = [] 19 | let filter = allfilter.filters 20 | let page = allfilter.page 21 | for (let i = 0; i < allusers.length; i++) { 22 | let sameKeyNum = 0 23 | for (let k in filter) { 24 | if (k === 'birthPlace') { 25 | if (allusers[i][k].child.code === filter[k] + '') sameKeyNum++ 26 | } 27 | if (k === 'birthDay') { 28 | var gt = new Date(filter[k]['gt']).getTime() 29 | var lt = new Date(filter[k]['lt']).getTime() 30 | var usertime = new Date(allusers[i][k]).getTime() 31 | if (usertime <= lt && usertime >= gt) { 32 | sameKeyNum++ 33 | } 34 | } 35 | if (k === 'age') { 36 | let agea = filter[k].split(',') 37 | if (allusers[i][k] <= agea[1] && allusers[i][k] >= agea[0]) { 38 | sameKeyNum++ 39 | } 40 | } 41 | if (allusers[i][k] === filter[k] + '') { 42 | sameKeyNum++ 43 | } 44 | } 45 | if (sameKeyNum === Object.keys(filter).length) data.push(allusers[i]) 46 | } 47 | if (Object.keys(filter).length === 0) data = allusers 48 | CUR_FILTERDATA = data 49 | let rdata = CUR_FILTERDATA.slice(perpagecount * (page - 1), perpagecount * (page - 1) + perpagecount) 50 | let _page = Math.ceil(data.length / perpagecount) ? Math.ceil(data.length / perpagecount) : 1 51 | let res = { 52 | data: rdata, 53 | pagenum: _page 54 | } 55 | return res 56 | } 57 | // 模拟radio 58 | export const radiodata = () => { 59 | let data = [ 60 | { label: '项目1', value: 1 }, 61 | { label: '项目2', value: 2 }, 62 | { label: '项目3', value: 3 }, 63 | { label: '项目4', value: 4 }, 64 | { label: '项目5', value: 5 } 65 | ] 66 | return Promise.resolve(data) 67 | } 68 | // 随机生成表数据 69 | export const createTableDataByRandom = (len) => { 70 | let users = [] 71 | const xarr = ['王', '黄', '陈', '方', '林', '刘', '张', '吴', '蔡', '龚', '杨', '潘', '俞', '庄', '许', '徐', '欧阳', '欧', '诸葛', '肖', '涂', '严', '颜', '冯', '曾'] 72 | const nchar = ['容止', '羡林', '芷', '回', '言蹊', '思睿', '怀瑾', '瑾', '遇', '道韫', '弦', '柳', '酒', '梦', '桑', '遥', '雨夕', '风遥', '雁白', '青沐', '合', '逸思', '霏', '清疏', '秋荻', '廷轩', '轩', '宇', '絮影', '清淮', '柳依', '寒箫', '箫', '惜夏', '意轩', '旖旎', '慕青', '宣', '晓', '沛', '斯年', '莲舟', '依凝', '井与', '予锦', '艳', '淑芬', '思哲', '湛', '梦文', '承嗣', '博艺', '玲杰', '德馨', '琪维', '俊', '钰', '蔚', '彬郁', '诗嘉', '津媛', '艺歆', '奕然', '雯梦', '思佳'] 73 | const phead = ['134', '135', '137', '138', '155', '130', '186', '133', '153', '180', '150', '151', '188'] 74 | const numstr = '0123456789' 75 | const gchar = ['1', '2'] 76 | const csign = ['+', '-'] 77 | const bcity = cities() 78 | let byear = 1996 79 | for (let i = 0; i < len; i++) { 80 | let curuser = {} 81 | let cursing = csign[Math.floor(Math.random() * csign.length)] 82 | 83 | let curx = xarr[Math.floor(Math.random() * xarr.length)] 84 | let curn = nchar[Math.floor(Math.random() * nchar.length)] 85 | let cury = 1996 86 | let curm = Math.floor(Math.random() * 11) + 1 87 | let curd = Math.floor(Math.random() * 29) + 1 88 | let gender = gchar[Math.floor(Math.random() * gchar.length)] 89 | if (cursing === '+') cury = byear + Math.floor(Math.random() * 10) 90 | if (cursing === '-') cury = byear - Math.floor(Math.random() * 10) 91 | let age = 2018 - cury 92 | // 获取手机号 93 | let phone = phead[Math.floor(Math.random() * phead.length)] 94 | for (let j = 0; j < 8; j++) { 95 | phone += numstr.charAt(Math.floor(Math.random() * numstr.length)) 96 | } 97 | let province = bcity[Math.floor(Math.random() * bcity.length)] 98 | let city = province.children[Math.floor(Math.random() * province.children.length)] 99 | let birthPlace = JSON.parse(JSON.stringify(province)) 100 | birthPlace.child = city 101 | delete birthPlace.children 102 | curuser = { 103 | gender, 104 | age, 105 | phone, 106 | birthPlace, 107 | name: curx + curn, 108 | uid: randomString(16), 109 | birthDay: cury + '.' + curm + '.' + curd 110 | } 111 | users.push(curuser) 112 | } 113 | allusers = JSON.parse(JSON.stringify(users)) 114 | let _page = Math.ceil(users.length / perpagecount) ? Math.ceil(users.length / perpagecount) : 1 115 | let rdata = users.slice(0, perpagecount) 116 | let res = { 117 | data: rdata, 118 | pagenum: _page 119 | } 120 | return res 121 | } 122 | // 获取uid 123 | const randomString = function (len) { 124 | len = len || 32 125 | var $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678' 126 | var maxPos = $chars.length 127 | var pwd = '' 128 | for (let i = 0; i < len; i++) { 129 | pwd += $chars.charAt(Math.floor(Math.random() * maxPos)) 130 | } 131 | return 'uid_' + pwd 132 | } 133 | // 表数据 134 | export const tabledata = () => { 135 | let data = [] 136 | return Promise.resolve(data) 137 | } 138 | 139 | // 获取城市 140 | export const cities = () => { 141 | let data = [{ 'code': '11', 'name': '北京市', 'children': [{ 'code': '1101', 'name': '北京市辖区' }] }, { 'code': '12', 'name': '天津市', 'children': [{ 'code': '1201', 'name': '天津市辖区' }] }, { 'code': '13', 'name': '河北省', 'children': [{ 'code': '1301', 'name': '石家庄市' }, { 'code': '1302', 'name': '唐山市' }, { 'code': '1303', 'name': '秦皇岛市' }, { 'code': '1304', 'name': '邯郸市' }, { 'code': '1305', 'name': '邢台市' }, { 'code': '1306', 'name': '保定市' }, { 'code': '1307', 'name': '张家口市' }, { 'code': '1308', 'name': '承德市' }, { 'code': '1309', 'name': '沧州市' }, { 'code': '1310', 'name': '廊坊市' }, { 'code': '1311', 'name': '衡水市' }] }, { 'code': '14', 'name': '山西省', 'children': [{ 'code': '1401', 'name': '太原市' }, { 'code': '1402', 'name': '大同市' }, { 'code': '1403', 'name': '阳泉市' }, { 'code': '1404', 'name': '长治市' }, { 'code': '1405', 'name': '晋城市' }, { 'code': '1406', 'name': '朔州市' }, { 'code': '1407', 'name': '晋中市' }, { 'code': '1408', 'name': '运城市' }, { 'code': '1409', 'name': '忻州市' }, { 'code': '1410', 'name': '临汾市' }, { 'code': '1411', 'name': '吕梁市' }] }, { 'code': '15', 'name': '内蒙古自治区', 'children': [{ 'code': '1501', 'name': '呼和浩特市' }, { 'code': '1502', 'name': '包头市' }, { 'code': '1503', 'name': '乌海市' }, { 'code': '1504', 'name': '赤峰市' }, { 'code': '1505', 'name': '通辽市' }, { 'code': '1506', 'name': '鄂尔多斯市' }, { 'code': '1507', 'name': '呼伦贝尔市' }, { 'code': '1508', 'name': '巴彦淖尔市' }, { 'code': '1509', 'name': '乌兰察布市' }, { 'code': '1522', 'name': '兴安盟' }, { 'code': '1525', 'name': '锡林郭勒盟' }, { 'code': '1529', 'name': '阿拉善盟' }] }, { 'code': '21', 'name': '辽宁省', 'children': [{ 'code': '2101', 'name': '沈阳市' }, { 'code': '2102', 'name': '大连市' }, { 'code': '2103', 'name': '鞍山市' }, { 'code': '2104', 'name': '抚顺市' }, { 'code': '2105', 'name': '本溪市' }, { 'code': '2106', 'name': '丹东市' }, { 'code': '2107', 'name': '锦州市' }, { 'code': '2108', 'name': '营口市' }, { 'code': '2109', 'name': '阜新市' }, { 'code': '2110', 'name': '辽阳市' }, { 'code': '2111', 'name': '盘锦市' }, { 'code': '2112', 'name': '铁岭市' }, { 'code': '2113', 'name': '朝阳市' }, { 'code': '2114', 'name': '葫芦岛市' }] }, { 'code': '22', 'name': '吉林省', 'children': [{ 'code': '2201', 'name': '长春市' }, { 'code': '2202', 'name': '吉林市' }, { 'code': '2203', 'name': '四平市' }, { 'code': '2204', 'name': '辽源市' }, { 'code': '2205', 'name': '通化市' }, { 'code': '2206', 'name': '白山市' }, { 'code': '2207', 'name': '松原市' }, { 'code': '2208', 'name': '白城市' }, { 'code': '2224', 'name': '延边朝鲜族自治州' }] }, { 'code': '23', 'name': '黑龙江省', 'children': [{ 'code': '2301', 'name': '哈尔滨市' }, { 'code': '2302', 'name': '齐齐哈尔市' }, { 'code': '2303', 'name': '鸡西市' }, { 'code': '2304', 'name': '鹤岗市' }, { 'code': '2305', 'name': '双鸭山市' }, { 'code': '2306', 'name': '大庆市' }, { 'code': '2307', 'name': '伊春市' }, { 'code': '2308', 'name': '佳木斯市' }, { 'code': '2309', 'name': '七台河市' }, { 'code': '2310', 'name': '牡丹江市' }, { 'code': '2311', 'name': '黑河市' }, { 'code': '2312', 'name': '绥化市' }, { 'code': '2327', 'name': '大兴安岭地区' }] }, { 'code': '31', 'name': '上海市', 'children': [{ 'code': '3101', 'name': '上海市辖区' }] }, { 'code': '32', 'name': '江苏省', 'children': [{ 'code': '3201', 'name': '南京市' }, { 'code': '3202', 'name': '无锡市' }, { 'code': '3203', 'name': '徐州市' }, { 'code': '3204', 'name': '常州市' }, { 'code': '3205', 'name': '苏州市' }, { 'code': '3206', 'name': '南通市' }, { 'code': '3207', 'name': '连云港市' }, { 'code': '3208', 'name': '淮安市' }, { 'code': '3209', 'name': '盐城市' }, { 'code': '3210', 'name': '扬州市' }, { 'code': '3211', 'name': '镇江市' }, { 'code': '3212', 'name': '泰州市' }, { 'code': '3213', 'name': '宿迁市' }] }, { 'code': '33', 'name': '浙江省', 'children': [{ 'code': '3301', 'name': '杭州市' }, { 'code': '3302', 'name': '宁波市' }, { 'code': '3303', 'name': '温州市' }, { 'code': '3304', 'name': '嘉兴市' }, { 'code': '3305', 'name': '湖州市' }, { 'code': '3306', 'name': '绍兴市' }, { 'code': '3307', 'name': '金华市' }, { 'code': '3308', 'name': '衢州市' }, { 'code': '3309', 'name': '舟山市' }, { 'code': '3310', 'name': '台州市' }, { 'code': '3311', 'name': '丽水市' }] }, { 'code': '34', 'name': '安徽省', 'children': [{ 'code': '3401', 'name': '合肥市' }, { 'code': '3402', 'name': '芜湖市' }, { 'code': '3403', 'name': '蚌埠市' }, { 'code': '3404', 'name': '淮南市' }, { 'code': '3405', 'name': '马鞍山市' }, { 'code': '3406', 'name': '淮北市' }, { 'code': '3407', 'name': '铜陵市' }, { 'code': '3408', 'name': '安庆市' }, { 'code': '3410', 'name': '黄山市' }, { 'code': '3411', 'name': '滁州市' }, { 'code': '3412', 'name': '阜阳市' }, { 'code': '3413', 'name': '宿州市' }, { 'code': '3415', 'name': '六安市' }, { 'code': '3416', 'name': '亳州市' }, { 'code': '3417', 'name': '池州市' }, { 'code': '3418', 'name': '宣城市' }] }, { 'code': '35', 'name': '福建省', 'children': [{ 'code': '3501', 'name': '福州市' }, { 'code': '3502', 'name': '厦门市' }, { 'code': '3503', 'name': '莆田市' }, { 'code': '3504', 'name': '三明市' }, { 'code': '3505', 'name': '泉州市' }, { 'code': '3506', 'name': '漳州市' }, { 'code': '3507', 'name': '南平市' }, { 'code': '3508', 'name': '龙岩市' }, { 'code': '3509', 'name': '宁德市' }] }, { 'code': '36', 'name': '江西省', 'children': [{ 'code': '3601', 'name': '南昌市' }, { 'code': '3602', 'name': '景德镇市' }, { 'code': '3603', 'name': '萍乡市' }, { 'code': '3604', 'name': '九江市' }, { 'code': '3605', 'name': '新余市' }, { 'code': '3606', 'name': '鹰潭市' }, { 'code': '3607', 'name': '赣州市' }, { 'code': '3608', 'name': '吉安市' }, { 'code': '3609', 'name': '宜春市' }, { 'code': '3610', 'name': '抚州市' }, { 'code': '3611', 'name': '上饶市' }] }, { 'code': '37', 'name': '山东省', 'children': [{ 'code': '3701', 'name': '济南市' }, { 'code': '3702', 'name': '青岛市' }, { 'code': '3703', 'name': '淄博市' }, { 'code': '3704', 'name': '枣庄市' }, { 'code': '3705', 'name': '东营市' }, { 'code': '3706', 'name': '烟台市' }, { 'code': '3707', 'name': '潍坊市' }, { 'code': '3708', 'name': '济宁市' }, { 'code': '3709', 'name': '泰安市' }, { 'code': '3710', 'name': '威海市' }, { 'code': '3711', 'name': '日照市' }, { 'code': '3712', 'name': '莱芜市' }, { 'code': '3713', 'name': '临沂市' }, { 'code': '3714', 'name': '德州市' }, { 'code': '3715', 'name': '聊城市' }, { 'code': '3716', 'name': '滨州市' }, { 'code': '3717', 'name': '菏泽市' }] }, { 'code': '41', 'name': '河南省', 'children': [{ 'code': '4101', 'name': '郑州市' }, { 'code': '4102', 'name': '开封市' }, { 'code': '4103', 'name': '洛阳市' }, { 'code': '4104', 'name': '平顶山市' }, { 'code': '4105', 'name': '安阳市' }, { 'code': '4106', 'name': '鹤壁市' }, { 'code': '4107', 'name': '新乡市' }, { 'code': '4108', 'name': '焦作市' }, { 'code': '4109', 'name': '濮阳市' }, { 'code': '4110', 'name': '许昌市' }, { 'code': '4111', 'name': '漯河市' }, { 'code': '4112', 'name': '三门峡市' }, { 'code': '4113', 'name': '南阳市' }, { 'code': '4114', 'name': '商丘市' }, { 'code': '4115', 'name': '信阳市' }, { 'code': '4116', 'name': '周口市' }, { 'code': '4117', 'name': '驻马店市' }, { 'code': '4190', 'name': '省直辖县级行政区划' }] }, { 'code': '42', 'name': '湖北省', 'children': [{ 'code': '4201', 'name': '武汉市' }, { 'code': '4202', 'name': '黄石市' }, { 'code': '4203', 'name': '十堰市' }, { 'code': '4205', 'name': '宜昌市' }, { 'code': '4206', 'name': '襄阳市' }, { 'code': '4207', 'name': '鄂州市' }, { 'code': '4208', 'name': '荆门市' }, { 'code': '4209', 'name': '孝感市' }, { 'code': '4210', 'name': '荆州市' }, { 'code': '4211', 'name': '黄冈市' }, { 'code': '4212', 'name': '咸宁市' }, { 'code': '4213', 'name': '随州市' }, { 'code': '4228', 'name': '恩施土家族苗族自治州' }, { 'code': '4290', 'name': '省直辖县级行政区划' }] }, { 'code': '43', 'name': '湖南省', 'children': [{ 'code': '4301', 'name': '长沙市' }, { 'code': '4302', 'name': '株洲市' }, { 'code': '4303', 'name': '湘潭市' }, { 'code': '4304', 'name': '衡阳市' }, { 'code': '4305', 'name': '邵阳市' }, { 'code': '4306', 'name': '岳阳市' }, { 'code': '4307', 'name': '常德市' }, { 'code': '4308', 'name': '张家界市' }, { 'code': '4309', 'name': '益阳市' }, { 'code': '4310', 'name': '郴州市' }, { 'code': '4311', 'name': '永州市' }, { 'code': '4312', 'name': '怀化市' }, { 'code': '4313', 'name': '娄底市' }, { 'code': '4331', 'name': '湘西土家族苗族自治州' }] }, { 'code': '44', 'name': '广东省', 'children': [{ 'code': '4401', 'name': '广州市' }, { 'code': '4402', 'name': '韶关市' }, { 'code': '4403', 'name': '深圳市' }, { 'code': '4404', 'name': '珠海市' }, { 'code': '4405', 'name': '汕头市' }, { 'code': '4406', 'name': '佛山市' }, { 'code': '4407', 'name': '江门市' }, { 'code': '4408', 'name': '湛江市' }, { 'code': '4409', 'name': '茂名市' }, { 'code': '4412', 'name': '肇庆市' }, { 'code': '4413', 'name': '惠州市' }, { 'code': '4414', 'name': '梅州市' }, { 'code': '4415', 'name': '汕尾市' }, { 'code': '4416', 'name': '河源市' }, { 'code': '4417', 'name': '阳江市' }, { 'code': '4418', 'name': '清远市' }, { 'code': '4419', 'name': '东莞市' }, { 'code': '4420', 'name': '中山市' }, { 'code': '4451', 'name': '潮州市' }, { 'code': '4452', 'name': '揭阳市' }, { 'code': '4453', 'name': '云浮市' }] }, { 'code': '45', 'name': '广西壮族自治区', 'children': [{ 'code': '4501', 'name': '南宁市' }, { 'code': '4502', 'name': '柳州市' }, { 'code': '4503', 'name': '桂林市' }, { 'code': '4504', 'name': '梧州市' }, { 'code': '4505', 'name': '北海市' }, { 'code': '4506', 'name': '防城港市' }, { 'code': '4507', 'name': '钦州市' }, { 'code': '4508', 'name': '贵港市' }, { 'code': '4509', 'name': '玉林市' }, { 'code': '4510', 'name': '百色市' }, { 'code': '4511', 'name': '贺州市' }, { 'code': '4512', 'name': '河池市' }, { 'code': '4513', 'name': '来宾市' }, { 'code': '4514', 'name': '崇左市' }] }, { 'code': '46', 'name': '海南省', 'children': [{ 'code': '4601', 'name': '海口市' }, { 'code': '4602', 'name': '三亚市' }, { 'code': '4603', 'name': '三沙市' }, { 'code': '4604', 'name': '儋州市' }, { 'code': '4690', 'name': '省直辖县级行政区划' }] }, { 'code': '50', 'name': '重庆市', 'children': [{ 'code': '5001', 'name': '重庆市辖区' }, { 'code': '5002', 'name': '县' }] }, { 'code': '51', 'name': '四川省', 'children': [{ 'code': '5101', 'name': '成都市' }, { 'code': '5103', 'name': '自贡市' }, { 'code': '5104', 'name': '攀枝花市' }, { 'code': '5105', 'name': '泸州市' }, { 'code': '5106', 'name': '德阳市' }, { 'code': '5107', 'name': '绵阳市' }, { 'code': '5108', 'name': '广元市' }, { 'code': '5109', 'name': '遂宁市' }, { 'code': '5110', 'name': '内江市' }, { 'code': '5111', 'name': '乐山市' }, { 'code': '5113', 'name': '南充市' }, { 'code': '5114', 'name': '眉山市' }, { 'code': '5115', 'name': '宜宾市' }, { 'code': '5116', 'name': '广安市' }, { 'code': '5117', 'name': '达州市' }, { 'code': '5118', 'name': '雅安市' }, { 'code': '5119', 'name': '巴中市' }, { 'code': '5120', 'name': '资阳市' }, { 'code': '5132', 'name': '阿坝藏族羌族自治州' }, { 'code': '5133', 'name': '甘孜藏族自治州' }, { 'code': '5134', 'name': '凉山彝族自治州' }] }, { 'code': '52', 'name': '贵州省', 'children': [{ 'code': '5201', 'name': '贵阳市' }, { 'code': '5202', 'name': '六盘水市' }, { 'code': '5203', 'name': '遵义市' }, { 'code': '5204', 'name': '安顺市' }, { 'code': '5205', 'name': '毕节市' }, { 'code': '5206', 'name': '铜仁市' }, { 'code': '5223', 'name': '黔西南布依族苗族自治州' }, { 'code': '5226', 'name': '黔东南苗族侗族自治州' }, { 'code': '5227', 'name': '黔南布依族苗族自治州' }] }, { 'code': '53', 'name': '云南省', 'children': [{ 'code': '5301', 'name': '昆明市' }, { 'code': '5303', 'name': '曲靖市' }, { 'code': '5304', 'name': '玉溪市' }, { 'code': '5305', 'name': '保山市' }, { 'code': '5306', 'name': '昭通市' }, { 'code': '5307', 'name': '丽江市' }, { 'code': '5308', 'name': '普洱市' }, { 'code': '5309', 'name': '临沧市' }, { 'code': '5323', 'name': '楚雄彝族自治州' }, { 'code': '5325', 'name': '红河哈尼族彝族自治州' }, { 'code': '5326', 'name': '文山壮族苗族自治州' }, { 'code': '5328', 'name': '西双版纳傣族自治州' }, { 'code': '5329', 'name': '大理白族自治州' }, { 'code': '5331', 'name': '德宏傣族景颇族自治州' }, { 'code': '5333', 'name': '怒江傈僳族自治州' }, { 'code': '5334', 'name': '迪庆藏族自治州' }] }, { 'code': '54', 'name': '西藏自治区', 'children': [{ 'code': '5401', 'name': '拉萨市' }, { 'code': '5402', 'name': '日喀则市' }, { 'code': '5403', 'name': '昌都市' }, { 'code': '5404', 'name': '林芝市' }, { 'code': '5405', 'name': '山南市' }, { 'code': '5424', 'name': '那曲地区' }, { 'code': '5425', 'name': '阿里地区' }] }, { 'code': '61', 'name': '陕西省', 'children': [{ 'code': '6101', 'name': '西安市' }, { 'code': '6102', 'name': '铜川市' }, { 'code': '6103', 'name': '宝鸡市' }, { 'code': '6104', 'name': '咸阳市' }, { 'code': '6105', 'name': '渭南市' }, { 'code': '6106', 'name': '延安市' }, { 'code': '6107', 'name': '汉中市' }, { 'code': '6108', 'name': '榆林市' }, { 'code': '6109', 'name': '安康市' }, { 'code': '6110', 'name': '商洛市' }] }, { 'code': '62', 'name': '甘肃省', 'children': [{ 'code': '6201', 'name': '兰州市' }, { 'code': '6202', 'name': '嘉峪关市' }, { 'code': '6203', 'name': '金昌市' }, { 'code': '6204', 'name': '白银市' }, { 'code': '6205', 'name': '天水市' }, { 'code': '6206', 'name': '武威市' }, { 'code': '6207', 'name': '张掖市' }, { 'code': '6208', 'name': '平凉市' }, { 'code': '6209', 'name': '酒泉市' }, { 'code': '6210', 'name': '庆阳市' }, { 'code': '6211', 'name': '定西市' }, { 'code': '6212', 'name': '陇南市' }, { 'code': '6229', 'name': '临夏回族自治州' }, { 'code': '6230', 'name': '甘南藏族自治州' }] }, { 'code': '63', 'name': '青海省', 'children': [{ 'code': '6301', 'name': '西宁市' }, { 'code': '6302', 'name': '海东市' }, { 'code': '6322', 'name': '海北藏族自治州' }, { 'code': '6323', 'name': '黄南藏族自治州' }, { 'code': '6325', 'name': '海南藏族自治州' }, { 'code': '6326', 'name': '果洛藏族自治州' }, { 'code': '6327', 'name': '玉树藏族自治州' }, { 'code': '6328', 'name': '海西蒙古族藏族自治州' }] }, { 'code': '64', 'name': '宁夏回族自治区', 'children': [{ 'code': '6401', 'name': '银川市' }, { 'code': '6402', 'name': '石嘴山市' }, { 'code': '6403', 'name': '吴忠市' }, { 'code': '6404', 'name': '固原市' }, { 'code': '6405', 'name': '中卫市' }] }, { 'code': '65', 'name': '新疆维吾尔自治区', 'children': [{ 'code': '6501', 'name': '乌鲁木齐市' }, { 'code': '6502', 'name': '克拉玛依市' }, { 'code': '6504', 'name': '吐鲁番市' }, { 'code': '6505', 'name': '哈密市' }, { 'code': '6523', 'name': '昌吉回族自治州' }, { 'code': '6527', 'name': '博尔塔拉蒙古自治州' }, { 'code': '6528', 'name': '巴音郭楞蒙古自治州' }, { 'code': '6529', 'name': '阿克苏地区' }, { 'code': '6530', 'name': '克孜勒苏柯尔克孜自治州' }, { 'code': '6531', 'name': '喀什地区' }, { 'code': '6532', 'name': '和田地区' }, { 'code': '6540', 'name': '伊犁哈萨克自治州' }, { 'code': '6542', 'name': '塔城地区' }, { 'code': '6543', 'name': '阿勒泰地区' }, { 'code': '6590', 'name': '自治区直辖县级行政区划' }] }, { 'name': '台湾', 'code': '710000', 'children': [{ 'name': '台北市', 'code': '710100' }, { 'name': '高雄市', 'code': '710200' }, { 'name': '基隆市', 'code': '710300' }, { 'name': '台中市', 'code': '710400' }, { 'name': '台南市', 'code': '710500' }, { 'name': '新竹市', 'code': '710600' }, { 'name': '嘉义市', 'code': '710700' }, { 'name': '新北市', 'code': '710800' }, { 'name': '宜兰县', 'code': '712200' }, { 'name': '桃园县', 'code': '712300' }, { 'name': '新竹县', 'code': '712400' }, { 'name': '苗栗县', 'code': '712500' }, { 'name': '彰化县', 'code': '712700' }, { 'name': '南投县', 'code': '712800' }, { 'name': '云林县', 'code': '712900' }, { 'name': '嘉义县', 'code': '713000' }, { 'name': '屏东县', 'code': '713300' }, { 'name': '台东县', 'code': '713400' }, { 'name': '花莲县', 'code': '713500' }, { 'name': '澎湖县', 'code': '713600' }] }, { 'name': '香港特别行政区', 'code': '810000', 'children': [{ 'name': '香港岛', 'code': '810100' }, { 'name': '九龙', 'code': '810200' }, { 'name': '新界', 'code': '810300' }] }, { 'name': '澳门特别行政区', 'code': '820000', 'children': [{ 'name': '澳门半岛', 'code': '820100' }, { 'name': '氹仔岛', 'code': '820200' }, { 'name': '路环岛', 'code': '820300' }] }] 142 | return data 143 | } 144 | --------------------------------------------------------------------------------