├── public ├── .gitkeep ├── favicon.ico ├── geeAdmin.png ├── user │ ├── head.png │ └── head_.png └── font │ ├── iconfont.eot │ ├── iconfont.ttf │ └── iconfont.woff ├── static ├── .gitkeep ├── favicon.ico ├── geeAdmin.png ├── user │ ├── head.png │ └── head_.png └── font │ ├── iconfont.eot │ ├── iconfont.ttf │ └── iconfont.woff ├── src ├── core │ ├── style │ │ ├── 4B9E65 │ │ │ ├── submenu.css │ │ │ ├── button-group.css │ │ │ ├── form-item.css │ │ │ ├── menu-item.css │ │ │ ├── tab-pane.css │ │ │ ├── breadcrumb-item.css │ │ │ ├── checkbox-button.css │ │ │ ├── checkbox-group.css │ │ │ ├── collapse-item.css │ │ │ ├── dropdown-item.css │ │ │ ├── dropdown-menu.css │ │ │ ├── menu-item-group.css │ │ │ ├── radio-group.css │ │ │ ├── aside.css │ │ │ ├── fonts │ │ │ │ ├── element-icons.ttf │ │ │ │ └── element-icons.woff │ │ │ ├── footer.css │ │ │ ├── header.css │ │ │ ├── main.css │ │ │ ├── steps.css │ │ │ ├── container.css │ │ │ ├── card.css │ │ │ ├── option-group.css │ │ │ ├── rate.css │ │ │ ├── badge.css │ │ │ ├── option.css │ │ │ ├── reset.css │ │ │ ├── row.css │ │ │ ├── spinner.css │ │ │ ├── display.css │ │ │ ├── breadcrumb.css │ │ │ ├── scrollbar.css │ │ │ ├── carousel-item.css │ │ │ ├── collapse.css │ │ │ ├── alert.css │ │ │ ├── popper.css │ │ │ ├── notification.css │ │ │ ├── loading.css │ │ │ ├── switch.css │ │ │ ├── progress.css │ │ │ ├── message.css │ │ │ ├── tree.css │ │ │ ├── tag.css │ │ │ ├── carousel.css │ │ │ ├── popover.css │ │ │ ├── radio-button.css │ │ │ ├── tooltip.css │ │ │ ├── dialog.css │ │ │ ├── select-dropdown.css │ │ │ ├── form.css │ │ │ ├── radio.css │ │ │ ├── icon.css │ │ │ └── step.css │ │ ├── style.scss │ │ └── table.scss │ ├── blank.vue │ ├── lib │ │ ├── const.js │ │ ├── directive.js │ │ └── permission.js │ └── Layout.vue ├── assets │ ├── 404.gif │ ├── geeAdmin.png │ └── font-class │ │ ├── iconfont.eot │ │ ├── iconfont.ttf │ │ └── iconfont.woff ├── components │ ├── form │ │ ├── tinymce │ │ │ └── gee │ │ │ │ ├── fonts │ │ │ │ ├── readme.md │ │ │ │ ├── tinymce.eot │ │ │ │ ├── tinymce.ttf │ │ │ │ ├── tinymce.woff │ │ │ │ ├── tinymce-small.eot │ │ │ │ ├── tinymce-small.ttf │ │ │ │ └── tinymce-small.woff │ │ │ │ ├── img │ │ │ │ ├── anchor.gif │ │ │ │ ├── loader.gif │ │ │ │ ├── object.gif │ │ │ │ └── trans.gif │ │ │ │ ├── skin.json │ │ │ │ ├── content.inline.min.css │ │ │ │ └── content.min.css │ │ ├── select.vue │ │ ├── form.vue │ │ ├── ctPicker.vue │ │ ├── markdown.vue │ │ ├── item.vue │ │ ├── checkbox.vue │ │ └── tinymce.vue │ ├── upload │ │ └── font │ │ │ ├── iconfont.eot │ │ │ ├── iconfont.ttf │ │ │ └── iconfont.woff │ ├── style │ │ └── dialogClear.scss │ ├── table │ │ └── fnGroup.vue │ ├── other │ │ ├── magnetic.vue │ │ ├── graphdracula.vue │ │ └── echarts.vue │ └── popover │ │ └── select.vue ├── view │ ├── default │ │ └── index.vue │ ├── Osharp │ │ ├── security │ │ │ ├── column │ │ │ │ ├── entityinfo.js │ │ │ │ └── function.js │ │ │ ├── utils │ │ │ │ └── utils.js │ │ │ ├── style │ │ │ │ └── treeBox.scss │ │ │ ├── popover │ │ │ │ └── functionInfo.vue │ │ │ ├── function.vue │ │ │ ├── entityinfo.vue │ │ │ ├── module.vue │ │ │ └── role-function.vue │ │ ├── system │ │ │ ├── column │ │ │ │ └── Pack.js │ │ │ ├── utils │ │ │ │ └── utils.js │ │ │ ├── style │ │ │ │ └── treeBox.scss │ │ │ └── pack.vue │ │ └── identity │ │ │ ├── column │ │ │ ├── user-role.js │ │ │ ├── role.js │ │ │ └── user.js │ │ │ ├── popover │ │ │ ├── roleConfig.vue │ │ │ ├── roleInfo.vue │ │ │ ├── userInfo.vue │ │ │ └── userConfig.vue │ │ │ └── user-role.vue │ └── statusPage │ │ ├── 404.vue │ │ └── 401.vue ├── api │ ├── Enum.js │ ├── osharp │ │ ├── Security.js │ │ ├── Function.js │ │ ├── User-role.js │ │ ├── entityinfo.js │ │ ├── Rolefunction.js │ │ ├── Userfunction.js │ │ ├── Common.js │ │ ├── Identity.js │ │ ├── Module.js │ │ ├── User.js │ │ ├── Pack.js │ │ ├── Role.js │ │ └── AuditEntity.js │ └── ParaEnum.js ├── router │ ├── core.js │ └── index.js ├── App.vue ├── config.js ├── utils │ ├── request.js │ ├── check.js │ ├── xlsx.js │ ├── vextend.js │ └── system.js └── main.js ├── babel.config.js ├── postcss.config.js ├── .idea ├── misc.xml ├── vcs.xml ├── modules.xml └── osharpVue3.iml ├── vue.config.js ├── index.html ├── package.json ├── Readme.md ├── LICENSE └── .gitignore /public/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/submenu.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/button-group.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/form-item.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/menu-item.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/tab-pane.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/breadcrumb-item.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/checkbox-button.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/checkbox-group.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/collapse-item.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/dropdown-item.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/dropdown-menu.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/menu-item-group.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@vue/app' 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zionLZH/osharpVue3/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /public/geeAdmin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zionLZH/osharpVue3/HEAD/public/geeAdmin.png -------------------------------------------------------------------------------- /src/assets/404.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zionLZH/osharpVue3/HEAD/src/assets/404.gif -------------------------------------------------------------------------------- /static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zionLZH/osharpVue3/HEAD/static/favicon.ico -------------------------------------------------------------------------------- /static/geeAdmin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zionLZH/osharpVue3/HEAD/static/geeAdmin.png -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | autoprefixer: {} 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /public/user/head.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zionLZH/osharpVue3/HEAD/public/user/head.png -------------------------------------------------------------------------------- /public/user/head_.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zionLZH/osharpVue3/HEAD/public/user/head_.png -------------------------------------------------------------------------------- /static/user/head.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zionLZH/osharpVue3/HEAD/static/user/head.png -------------------------------------------------------------------------------- /static/user/head_.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zionLZH/osharpVue3/HEAD/static/user/head_.png -------------------------------------------------------------------------------- /public/font/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zionLZH/osharpVue3/HEAD/public/font/iconfont.eot -------------------------------------------------------------------------------- /public/font/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zionLZH/osharpVue3/HEAD/public/font/iconfont.ttf -------------------------------------------------------------------------------- /src/assets/geeAdmin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zionLZH/osharpVue3/HEAD/src/assets/geeAdmin.png -------------------------------------------------------------------------------- /static/font/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zionLZH/osharpVue3/HEAD/static/font/iconfont.eot -------------------------------------------------------------------------------- /static/font/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zionLZH/osharpVue3/HEAD/static/font/iconfont.ttf -------------------------------------------------------------------------------- /public/font/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zionLZH/osharpVue3/HEAD/public/font/iconfont.woff -------------------------------------------------------------------------------- /static/font/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zionLZH/osharpVue3/HEAD/static/font/iconfont.woff -------------------------------------------------------------------------------- /src/components/form/tinymce/gee/fonts/readme.md: -------------------------------------------------------------------------------- 1 | Icons are generated and provided by the http://icomoon.io service. 2 | -------------------------------------------------------------------------------- /src/assets/font-class/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zionLZH/osharpVue3/HEAD/src/assets/font-class/iconfont.eot -------------------------------------------------------------------------------- /src/assets/font-class/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zionLZH/osharpVue3/HEAD/src/assets/font-class/iconfont.ttf -------------------------------------------------------------------------------- /src/core/style/4B9E65/radio-group.css: -------------------------------------------------------------------------------- 1 | .el-radio-group{display:inline-block;line-height:1;vertical-align:middle;font-size:0} -------------------------------------------------------------------------------- /src/assets/font-class/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zionLZH/osharpVue3/HEAD/src/assets/font-class/iconfont.woff -------------------------------------------------------------------------------- /src/components/upload/font/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zionLZH/osharpVue3/HEAD/src/components/upload/font/iconfont.eot -------------------------------------------------------------------------------- /src/components/upload/font/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zionLZH/osharpVue3/HEAD/src/components/upload/font/iconfont.ttf -------------------------------------------------------------------------------- /src/components/upload/font/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zionLZH/osharpVue3/HEAD/src/components/upload/font/iconfont.woff -------------------------------------------------------------------------------- /src/core/style/4B9E65/aside.css: -------------------------------------------------------------------------------- 1 | .el-aside{overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0} -------------------------------------------------------------------------------- /src/components/form/tinymce/gee/img/anchor.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zionLZH/osharpVue3/HEAD/src/components/form/tinymce/gee/img/anchor.gif -------------------------------------------------------------------------------- /src/components/form/tinymce/gee/img/loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zionLZH/osharpVue3/HEAD/src/components/form/tinymce/gee/img/loader.gif -------------------------------------------------------------------------------- /src/components/form/tinymce/gee/img/object.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zionLZH/osharpVue3/HEAD/src/components/form/tinymce/gee/img/object.gif -------------------------------------------------------------------------------- /src/components/form/tinymce/gee/img/trans.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zionLZH/osharpVue3/HEAD/src/components/form/tinymce/gee/img/trans.gif -------------------------------------------------------------------------------- /src/core/style/4B9E65/fonts/element-icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zionLZH/osharpVue3/HEAD/src/core/style/4B9E65/fonts/element-icons.ttf -------------------------------------------------------------------------------- /src/core/style/4B9E65/fonts/element-icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zionLZH/osharpVue3/HEAD/src/core/style/4B9E65/fonts/element-icons.woff -------------------------------------------------------------------------------- /src/core/style/4B9E65/footer.css: -------------------------------------------------------------------------------- 1 | .el-footer{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0} -------------------------------------------------------------------------------- /src/core/style/4B9E65/header.css: -------------------------------------------------------------------------------- 1 | .el-header{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0} -------------------------------------------------------------------------------- /src/components/form/tinymce/gee/fonts/tinymce.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zionLZH/osharpVue3/HEAD/src/components/form/tinymce/gee/fonts/tinymce.eot -------------------------------------------------------------------------------- /src/components/form/tinymce/gee/fonts/tinymce.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zionLZH/osharpVue3/HEAD/src/components/form/tinymce/gee/fonts/tinymce.ttf -------------------------------------------------------------------------------- /src/components/form/tinymce/gee/fonts/tinymce.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zionLZH/osharpVue3/HEAD/src/components/form/tinymce/gee/fonts/tinymce.woff -------------------------------------------------------------------------------- /src/components/form/tinymce/gee/fonts/tinymce-small.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zionLZH/osharpVue3/HEAD/src/components/form/tinymce/gee/fonts/tinymce-small.eot -------------------------------------------------------------------------------- /src/components/form/tinymce/gee/fonts/tinymce-small.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zionLZH/osharpVue3/HEAD/src/components/form/tinymce/gee/fonts/tinymce-small.ttf -------------------------------------------------------------------------------- /src/components/form/tinymce/gee/fonts/tinymce-small.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zionLZH/osharpVue3/HEAD/src/components/form/tinymce/gee/fonts/tinymce-small.woff -------------------------------------------------------------------------------- /src/core/blank.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 7 | 8 | 11 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/main.css: -------------------------------------------------------------------------------- 1 | .el-main{-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box;padding:20px} -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /vue.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | publicPath: '', 3 | devServer: { 4 | proxy: { 5 | '/api': { 6 | target: 'https://www.osharp.org' 7 | } 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/view/default/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | 11 | 14 | -------------------------------------------------------------------------------- /src/api/Enum.js: -------------------------------------------------------------------------------- 1 | import { request } from '@/utils/request' 2 | 3 | let path = '/Enum' 4 | 5 | export function Read (option) { 6 | return request({ 7 | url: `${path}/Read`, 8 | method: 'GET', 9 | params: option 10 | }) 11 | } 12 | -------------------------------------------------------------------------------- /src/view/Osharp/security/column/entityinfo.js: -------------------------------------------------------------------------------- 1 | export default { 2 | Name: { 3 | title: '实体名称', 4 | width: '220px', 5 | sort: true 6 | }, 7 | TypeName: { 8 | title: '实体类型', 9 | width: '600px', 10 | sort: true 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/api/osharp/Security.js: -------------------------------------------------------------------------------- 1 | import { request } from '@/utils/request' 2 | 3 | let path = '/security' 4 | 5 | export function getauthinfo () { 6 | return request({ 7 | url: `${path}/getauthinfo`, 8 | method: 'GET', 9 | noSuffix: true 10 | }) 11 | } 12 | -------------------------------------------------------------------------------- /src/view/Osharp/system/column/Pack.js: -------------------------------------------------------------------------------- 1 | export default { 2 | Display: { 3 | title: '名称' 4 | }, 5 | Class: { 6 | title: '名称' 7 | }, 8 | Level: { 9 | title: '级别' 10 | }, 11 | Order: { 12 | title: '启动顺序' 13 | }, 14 | IsEnabled: { 15 | title: '是否启用' 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/steps.css: -------------------------------------------------------------------------------- 1 | .el-steps{display:-webkit-box;display:-ms-flexbox;display:flex}.el-steps--simple{padding:13px 8%;border-radius:4px;background:#f5f7fa}.el-steps--horizontal{white-space:nowrap}.el-steps--vertical{height:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column} -------------------------------------------------------------------------------- /src/core/lib/const.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | 3 | class Core { 4 | constructor (arg) { 5 | this.pageMini = innerWidth <= 640 6 | const self = this 7 | window.addEventListener('resize', () => { 8 | self.pageMini = innerWidth <= 640 9 | }) 10 | } 11 | } 12 | const bridge = new Vue() 13 | export { 14 | Core, 15 | bridge 16 | } 17 | -------------------------------------------------------------------------------- /src/view/Osharp/identity/column/user-role.js: -------------------------------------------------------------------------------- 1 | export default { 2 | UserId: { 3 | title: 'UserId', 4 | sort: true 5 | }, 6 | UserName: { 7 | title: '用户', 8 | sort: true 9 | }, 10 | RoleName: { 11 | title: '角色', 12 | sort: true 13 | }, 14 | IsLocked: { 15 | title: '锁定', 16 | sort: true 17 | }, 18 | CreatedTime: { 19 | title: '注册时间', 20 | width: '200px', 21 | sort: true 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/container.css: -------------------------------------------------------------------------------- 1 | .el-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;-webkit-box-sizing:border-box;box-sizing:border-box;min-width:0}.el-container.is-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column} -------------------------------------------------------------------------------- /src/api/osharp/Function.js: -------------------------------------------------------------------------------- 1 | import { request } from '@/utils/request' 2 | 3 | let path = '/Admin/function' 4 | 5 | export function Read (option) { 6 | return request({ 7 | url: `${path}/read`, 8 | method: 'POST', 9 | noSuffix: true, 10 | data: option 11 | }) 12 | } 13 | 14 | export function Update (option) { 15 | return request({ 16 | url: `${path}/Update`, 17 | method: 'POST', 18 | noSuffix: true, 19 | data: option 20 | }) 21 | } 22 | -------------------------------------------------------------------------------- /src/api/osharp/User-role.js: -------------------------------------------------------------------------------- 1 | import { request } from '@/utils/request' 2 | 3 | let path = '/Admin/userrole' 4 | 5 | export function Read (option) { 6 | return request({ 7 | url: `${path}/read`, 8 | method: 'POST', 9 | noSuffix: true, 10 | data: option 11 | }) 12 | } 13 | 14 | export function Update (option) { 15 | return request({ 16 | url: `${path}/update`, 17 | method: 'POST', 18 | noSuffix: true, 19 | data: option 20 | }) 21 | } 22 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/card.css: -------------------------------------------------------------------------------- 1 | .el-card{border-radius:4px;border:1px solid #ebeef5;background-color:#fff;overflow:hidden;color:#303133;-webkit-transition:.3s;transition:.3s}.el-card.is-always-shadow,.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-card__header{padding:18px 20px;border-bottom:1px solid #ebeef5;-webkit-box-sizing:border-box;box-sizing:border-box}.el-card__body{padding:20px} -------------------------------------------------------------------------------- /src/api/osharp/entityinfo.js: -------------------------------------------------------------------------------- 1 | import { request } from '@/utils/request' 2 | 3 | let path = '/admin/entityinfo' 4 | 5 | export function Read (option) { 6 | return request({ 7 | url: `${path}/read`, 8 | method: 'POST', 9 | noSuffix: true, 10 | data: option 11 | }) 12 | } 13 | 14 | export function Update (option) { 15 | return request({ 16 | url: `${path}/update`, 17 | method: 'POST', 18 | noSuffix: true, 19 | data: option 20 | }) 21 | } 22 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/option-group.css: -------------------------------------------------------------------------------- 1 | .el-select-group{margin:0;padding:0}.el-select-group__wrap{position:relative;list-style:none;margin:0;padding:0}.el-select-group__wrap:not(:last-of-type){padding-bottom:24px}.el-select-group__wrap:not(:last-of-type)::after{content:'';position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:#e4e7ed}.el-select-group__title{padding-left:20px;font-size:12px;color:#909399;line-height:30px}.el-select-group .el-select-dropdown__item{padding-left:20px} -------------------------------------------------------------------------------- /src/view/Osharp/identity/column/role.js: -------------------------------------------------------------------------------- 1 | export default { 2 | Name: { 3 | title: '角色名', 4 | sort: true 5 | }, 6 | Remark: { 7 | title: '备注', 8 | sort: true 9 | }, 10 | IsAdmin: { 11 | title: '管理', 12 | sort: true 13 | }, 14 | IsDefault: { 15 | title: '默认', 16 | sort: true 17 | }, 18 | IsLocked: { 19 | title: '锁定', 20 | sort: true 21 | }, 22 | CreatedTime: { 23 | title: '注册时间', 24 | width: '200px', 25 | sort: true 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/router/core.js: -------------------------------------------------------------------------------- 1 | import Layout from '@/core/Layout' 2 | const coreRoutes = [ 3 | { 4 | path: '/', 5 | name: 'layout', 6 | component: Layout 7 | }, 8 | { 9 | path: '/404', 10 | name: '404', 11 | meta: { pass: true }, 12 | component: () => import('@/view/statusPage/404') 13 | }, 14 | { 15 | path: '/401', 16 | name: '401', 17 | meta: { pass: true }, 18 | component: () => import('@/view/statusPage/401') 19 | } 20 | ] 21 | export { 22 | coreRoutes 23 | } 24 | -------------------------------------------------------------------------------- /.idea/osharpVue3.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/api/osharp/Rolefunction.js: -------------------------------------------------------------------------------- 1 | import { request } from '@/utils/request' 2 | 3 | let path = '/admin/rolefunction' 4 | 5 | export function Read (option) { 6 | return request({ 7 | url: `${path}/read`, 8 | method: 'POST', 9 | noSuffix: true, 10 | data: option 11 | }) 12 | } 13 | 14 | export function Readfunctions (param, option) { 15 | return request({ 16 | url: `${path}/readfunctions`, 17 | method: 'POST', 18 | noSuffix: true, 19 | params: param, 20 | data: option 21 | }) 22 | } 23 | -------------------------------------------------------------------------------- /src/api/osharp/Userfunction.js: -------------------------------------------------------------------------------- 1 | import { request } from '@/utils/request' 2 | 3 | let path = '/admin/userfunction' 4 | 5 | export function Read (option) { 6 | return request({ 7 | url: `${path}/read`, 8 | method: 'POST', 9 | noSuffix: true, 10 | data: option 11 | }) 12 | } 13 | 14 | export function Readfunctions (param, option) { 15 | return request({ 16 | url: `${path}/readfunctions`, 17 | method: 'POST', 18 | noSuffix: true, 19 | params: param, 20 | data: option 21 | }) 22 | } 23 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/rate.css: -------------------------------------------------------------------------------- 1 | .el-rate__icon,.el-rate__item{position:relative;display:inline-block}.el-rate{height:20px;line-height:1}.el-rate:active,.el-rate:focus{outline-width:0}.el-rate__item{font-size:0;vertical-align:middle}.el-rate__icon{font-size:18px;margin-right:6px;color:#c0c4cc;-webkit-transition:.3s;transition:.3s}.el-rate__decimal,.el-rate__icon .path2{position:absolute;top:0;left:0}.el-rate__icon.hover{-webkit-transform:scale(1.15);transform:scale(1.15)}.el-rate__decimal{display:inline-block;overflow:hidden}.el-rate__text{font-size:14px;vertical-align:middle} -------------------------------------------------------------------------------- /src/core/style/4B9E65/badge.css: -------------------------------------------------------------------------------- 1 | .el-badge{position:relative;vertical-align:middle;display:inline-block}.el-badge__content{background-color:#f56c6c;border-radius:10px;color:#fff;display:inline-block;font-size:12px;height:18px;line-height:18px;padding:0 6px;text-align:center;white-space:nowrap;border:1px solid #fff}.el-badge__content.is-fixed{position:absolute;top:0;right:10px;-webkit-transform:translateY(-50%) translateX(100%);transform:translateY(-50%) translateX(100%)}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{height:8px;width:8px;padding:0;right:0;border-radius:50%} -------------------------------------------------------------------------------- /src/core/style/4B9E65/option.css: -------------------------------------------------------------------------------- 1 | .el-select-dropdown__item{font-size:14px;padding:0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:34px;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-select-dropdown__item.is-disabled:hover{background-color:#fff}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover{background-color:#f5f7fa}.el-select-dropdown__item.selected{color:#4B9E65;font-weight:700}.el-select-dropdown__item span{line-height:34px!important} -------------------------------------------------------------------------------- /src/api/osharp/Common.js: -------------------------------------------------------------------------------- 1 | import { request } from '@/utils/request' 2 | 3 | let path = '/Common' 4 | 5 | export function VerifyCode (option) { 6 | return new Promise((resolve, reject) => { 7 | request({ 8 | url: `${path}/VerifyCode`, 9 | method: 'GET' 10 | }).then(res => { 11 | var arr = [ false, false ] 12 | try { 13 | let base64 = atob(res.data) 14 | arr = base64.split('#$#') 15 | } catch (e) { 16 | // nothing 17 | } 18 | resolve({res: res, vcode: arr[0], vcodeId: arr[1]}) 19 | }).catch(e => { 20 | console.log(e) 21 | reject(e) 22 | }) 23 | }) 24 | } 25 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | 25 | -------------------------------------------------------------------------------- /src/api/osharp/Identity.js: -------------------------------------------------------------------------------- 1 | import { request } from '@/utils/request' 2 | 3 | let path = '/Identity' 4 | 5 | export function Jwtoken (option) { 6 | return request({ 7 | url: `${path}/Jwtoken`, 8 | method: 'POST', 9 | noSuffix: true, 10 | data: option 11 | }) 12 | } 13 | 14 | export function profile () { 15 | return request({ 16 | url: `${path}/profile`, 17 | method: 'GET', 18 | noSuffix: true 19 | }) 20 | } 21 | 22 | export function Logout (option) { 23 | return request({ 24 | url: `${path}/logout`, 25 | method: 'POST', 26 | noSuffix: true, 27 | data: option 28 | }) 29 | } 30 | 31 | export function Register (option) { 32 | return request({ 33 | url: `${path}/register`, 34 | method: 'POST', 35 | noSuffix: true, 36 | data: option 37 | }) 38 | } 39 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/reset.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";body{font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif;font-weight:400;font-size:14px;color:#000;-webkit-font-smoothing:antialiased}a{color:#4B9E65;text-decoration:none}a:focus,a:hover{color:rgb(111, 177, 132)}a:active{color:rgb(68, 142, 91)}h1,h2,h3,h4,h5,h6{color:#606266;font-weight:inherit}h1:first-child,h2:first-child,h3:first-child,h4:first-child,h5:first-child,h6:first-child,p:first-child{margin-top:0}h1:last-child,h2:last-child,h3:last-child,h4:last-child,h5:last-child,h6:last-child,p:last-child{margin-bottom:0}h1{font-size:20px}h2{font-size:18px}h3{font-size:16px}h4,h5,h6,p{font-size:inherit}p{line-height:1.8}sub,sup{font-size:13px}small{font-size:12px}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee} -------------------------------------------------------------------------------- /src/core/lib/directive.js: -------------------------------------------------------------------------------- 1 | import { Consts } from '@/utils/system' 2 | var sysConsts = new Consts() 3 | 4 | export function directiveInit (Vue) { 5 | Vue.directive('mShow', { 6 | componentUpdated (el, binding) { 7 | if (binding.value === false) { 8 | return 9 | } 10 | el.style.display = sysConsts.onMobile ? '' : 'none' 11 | window.addEventListener('resize', () => { 12 | el.style.display = sysConsts.onMobile ? '' : 'none' 13 | }) 14 | } 15 | }) 16 | 17 | Vue.directive('mHide', { 18 | componentUpdated (el, binding) { 19 | if (binding.value === false) { 20 | return 21 | } 22 | el.style.display = !sysConsts.onMobile ? '' : 'none' 23 | window.addEventListener('resize', () => { 24 | el.style.display = !sysConsts.onMobile ? '' : 'none' 25 | }) 26 | } 27 | }) 28 | } 29 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/row.css: -------------------------------------------------------------------------------- 1 | .el-row{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box}.el-row::after,.el-row::before{display:table;content:""}.el-row::after{clear:both}.el-row--flex{display:-webkit-box;display:-ms-flexbox;display:flex}.el-row--flex:after,.el-row--flex:before{display:none}.el-row--flex.is-justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-row--flex.is-justify-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.el-row--flex.is-justify-space-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.el-row--flex.is-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.el-row--flex.is-align-middle{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-row--flex.is-align-bottom{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end} -------------------------------------------------------------------------------- /src/api/osharp/Module.js: -------------------------------------------------------------------------------- 1 | import { request } from '@/utils/request' 2 | 3 | let path = '/Admin/module' 4 | 5 | export function Read (option) { 6 | return request({ 7 | url: `${path}/Read`, 8 | method: 'POST', 9 | noSuffix: true, 10 | data: option 11 | }) 12 | } 13 | 14 | export function Readfunctions (option) { 15 | return request({ 16 | url: `${path}/readfunctions`, 17 | method: 'POST', 18 | noSuffix: true, 19 | data: option 20 | }) 21 | } 22 | 23 | export function ReadUserModules (option) { 24 | return request({ 25 | url: `${path}/ReadUserModules`, 26 | method: 'GET', 27 | noSuffix: true, 28 | params: option 29 | }) 30 | } 31 | 32 | export function ReadRoleModules (option) { 33 | return request({ 34 | url: `${path}/ReadRoleModules`, 35 | method: 'GET', 36 | noSuffix: true, 37 | params: option 38 | }) 39 | } 40 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/spinner.css: -------------------------------------------------------------------------------- 1 | .el-time-spinner{width:100%;white-space:nowrap}.el-spinner{display:inline-block;vertical-align:middle}.el-spinner-inner{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;width:50px;height:50px}.el-spinner-inner .path{stroke:#ececec;stroke-linecap:round;-webkit-animation:dash 1.5s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite}@-webkit-keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}100%{stroke-dasharray:90,150;stroke-dashoffset:-124}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}100%{stroke-dasharray:90,150;stroke-dashoffset:-124}} -------------------------------------------------------------------------------- /src/core/style/4B9E65/display.css: -------------------------------------------------------------------------------- 1 | @media only screen and (max-width:767px){.hidden-xs-only{display:none!important}}@media only screen and (min-width:768px){.hidden-sm-and-up{display:none!important}}@media only screen and (min-width:768px) and (max-width:991px){.hidden-sm-only{display:none!important}}@media only screen and (max-width:991px){.hidden-sm-and-down{display:none!important}}@media only screen and (min-width:992px){.hidden-md-and-up{display:none!important}}@media only screen and (min-width:992px) and (max-width:1199px){.hidden-md-only{display:none!important}}@media only screen and (max-width:1199px){.hidden-md-and-down{display:none!important}}@media only screen and (min-width:1200px){.hidden-lg-and-up{display:none!important}}@media only screen and (min-width:1200px) and (max-width:1919px){.hidden-lg-only{display:none!important}}@media only screen and (max-width:1919px){.hidden-lg-and-down{display:none!important}}@media only screen and (min-width:1920px){.hidden-xl-only{display:none!important}} -------------------------------------------------------------------------------- /src/view/Osharp/system/utils/utils.js: -------------------------------------------------------------------------------- 1 | export function transformTozTreeFormat (sNodes) { 2 | // https://www.xuebuyuan.com/385756.html 3 | let i = 0 4 | let l = 0 5 | let key = 'Id' 6 | let parentKey = 'ParentId' 7 | let childKey = 'children' 8 | if (!key || key === '' || !sNodes) { 9 | return [] 10 | } 11 | 12 | if (sNodes.constructor === Array) { 13 | let r = [] 14 | let tmpMap = [] 15 | for (i = 0, l = sNodes.length; i < l; i++) { 16 | tmpMap[sNodes[i][key]] = sNodes[i] 17 | } 18 | for (i = 0, l = sNodes.length; i < l; i++) { 19 | if (tmpMap[sNodes[i][parentKey]] && sNodes[i][key] !== sNodes[i][parentKey]) { 20 | if (!tmpMap[sNodes[i][parentKey]][childKey]) { 21 | tmpMap[sNodes[i][parentKey]][childKey] = [] 22 | } 23 | tmpMap[sNodes[i][parentKey]][childKey].push(sNodes[i]) 24 | } else { 25 | r.push(sNodes[i]) 26 | } 27 | } 28 | return r 29 | } else { 30 | return [sNodes] 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/view/Osharp/security/utils/utils.js: -------------------------------------------------------------------------------- 1 | export function transformTozTreeFormat (sNodes) { 2 | // https://www.xuebuyuan.com/385756.html 3 | let i = 0 4 | let l = 0 5 | let key = 'Id' 6 | let parentKey = 'ParentId' 7 | let childKey = 'children' 8 | if (!key || key === '' || !sNodes) { 9 | return [] 10 | } 11 | 12 | if (sNodes.constructor === Array) { 13 | let r = [] 14 | let tmpMap = [] 15 | for (i = 0, l = sNodes.length; i < l; i++) { 16 | tmpMap[sNodes[i][key]] = sNodes[i] 17 | } 18 | for (i = 0, l = sNodes.length; i < l; i++) { 19 | if (tmpMap[sNodes[i][parentKey]] && sNodes[i][key] !== sNodes[i][parentKey]) { 20 | if (!tmpMap[sNodes[i][parentKey]][childKey]) { 21 | tmpMap[sNodes[i][parentKey]][childKey] = [] 22 | } 23 | tmpMap[sNodes[i][parentKey]][childKey].push(sNodes[i]) 24 | } else { 25 | r.push(sNodes[i]) 26 | } 27 | } 28 | return r 29 | } else { 30 | return [sNodes] 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/breadcrumb.css: -------------------------------------------------------------------------------- 1 | .el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb::after,.el-breadcrumb::before{display:table;content:""}.el-breadcrumb::after{clear:both}.el-breadcrumb__separator{margin:0 9px;font-weight:700;color:#c0c4cc}.el-breadcrumb__separator[class*=icon]{margin:0 6px;font-weight:400}.el-breadcrumb__item{float:left}.el-breadcrumb__inner{color:#606266}.el-breadcrumb__inner a,.el-breadcrumb__inner.is-link{font-weight:700;text-decoration:none;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1);color:#303133}.el-breadcrumb__inner a:hover,.el-breadcrumb__inner.is-link:hover{color:#4B9E65;cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover{font-weight:400;color:#606266;cursor:text}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none} -------------------------------------------------------------------------------- /src/core/style/4B9E65/scrollbar.css: -------------------------------------------------------------------------------- 1 | .el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;-webkit-transition:opacity 120ms ease-out;transition:opacity 120ms ease-out}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%} -------------------------------------------------------------------------------- /src/api/ParaEnum.js: -------------------------------------------------------------------------------- 1 | import { request } from '@/utils/request' 2 | 3 | let path = '/ParaEnum' 4 | 5 | export function ReadLawCase (option) { 6 | return request({ 7 | url: `${path}/ReadLawCase`, 8 | method: 'GET', 9 | params: option 10 | }) 11 | } 12 | 13 | export function ReadEducationBureauNewsType (option) { 14 | return request({ 15 | url: `${path}/ReadEducationBureauNewsType`, 16 | method: 'GET', 17 | params: option 18 | }) 19 | } 20 | 21 | export function ReadEducationGroupNewsType (option) { 22 | return request({ 23 | url: `${path}/ReadEducationGroupNewsType`, 24 | method: 'GET', 25 | params: option 26 | }) 27 | } 28 | 29 | export function ReadRelationType (option) { 30 | return request({ 31 | url: `${path}/ReadRelationType`, 32 | method: 'GET', 33 | params: option 34 | }) 35 | } 36 | 37 | export function ReadBaseStation (option) { 38 | return request({ 39 | url: `${path}/ReadBaseStation`, 40 | method: 'GET', 41 | params: option 42 | }) 43 | } 44 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/carousel-item.css: -------------------------------------------------------------------------------- 1 | .el-carousel__item,.el-carousel__mask{position:absolute;height:100%;top:0;left:0}.el-carousel__item{width:100%;display:inline-block;overflow:hidden;z-index:0}.el-carousel__item.is-active{z-index:2}.el-carousel__item.is-animating{-webkit-transition:-webkit-transform .4s ease-in-out;transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out}.el-carousel__item--card{width:50%;-webkit-transition:-webkit-transform .4s ease-in-out;transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:1}.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.el-carousel__item--card.is-active{z-index:2}.el-carousel__mask{width:100%;background-color:#fff;opacity:.24;-webkit-transition:.2s;transition:.2s} -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sjq-webpack", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "serve": "vue-cli-service serve", 7 | "dev": "vue-cli-service serve", 8 | "build": "vue-cli-service build" 9 | }, 10 | "dependencies": { 11 | "vue": "^2.5.22", 12 | "vue-router": "^3.0.1", 13 | "axios": "^0.18.0", 14 | "babel-polyfill": "^6.26.0", 15 | "babel-preset-env": "^1.7.0", 16 | "element-ui": "^2.4.6", 17 | "express": "^4.16.3", 18 | "file-saver": "^2.0.0", 19 | "font-awesome": "^4.7.0", 20 | "graphdracula": "^1.2.1", 21 | "js-cookie": "^2.2.0", 22 | "raphael": "^2.2.7", 23 | "showdown": "^1.8.6", 24 | "tinymce": "^4.8.2", 25 | "vue-baidu-map": "^0.21.11", 26 | "vue-qriously": "^1.1.1", 27 | "xlsx": "^0.14.1" 28 | }, 29 | "devDependencies": { 30 | "@vue/cli-plugin-babel": "^3.4.0", 31 | "@vue/cli-service": "^3.4.0", 32 | "node-sass": "^4.9.0", 33 | "sass-loader": "^7.1.0", 34 | "vue-template-compiler": "^2.5.21" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Readme.md: -------------------------------------------------------------------------------- 1 | ### 适配最新版OSharp请前往https://github.com/zionLZH/slowf-osharp-admin。 当前版本仅限2020年2月份之前的适配 2 | 3 | ### 1.如何使用 4 | #### 1.1 安装依赖 5 | ```` 6 | yarn 7 | ```` 8 | yarn是一款新型的Node包管理工具,提供更完美的包管理,并且能够通过缓存包的方式解决模块包下载慢的问题。 9 | 如果你正在使用npm或者cnpm,请使用以下命令进行依赖安装 10 | ```` 11 | npm install 12 | 或 13 | cnpm install(不推荐!) 14 | ```` 15 | 由于cnpm多次出现在docker自动化部署中出现不知名错误,因此推荐使用yarn或者npm,对于node-sass报错的问题,请全局安装window-build-tool模块 16 | 17 | #### 1.2 配置前端代理 18 | 本项目基于Vue-cli3 + Webpack4,因此前端代理配置与Vue-cli2有所不同,在vue.config.js文件中进行配置,配置部分代码如下 19 | ```` 20 | devServer: { 21 | proxy: { 22 | '/api': { 23 | target: 'https://www.osharp.org' 24 | } 25 | } 26 | } 27 | ```` 28 | 29 | #### 1.3 运行调试 30 | 由于Vue-cli3是一个全新版本,因此不再使用之前的命令,虽然你依然可以使用之前的命令进行调试,但是我们依然推荐使用Vue-cli3的命令 31 | ```` 32 | yarn run serve 33 | 或 34 | yarn run dev 35 | ```` 36 | 37 | #### 1.4 正式构建 38 | ```` 39 | yarn run build 40 | ```` 41 | 构建完成之后文件将在./dist目录下面,请勿直接使用file://打开,将无法正常浏览。 42 | 43 | ### 注意事项 44 | Axios 0.18.0 报maxContentLength的漏洞问题无法解决,需要自行配合后端解决问题。最好是禁止跨域调用接口,禁止页面注入调用,大多出现在第三方脚本引起。 45 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/collapse.css: -------------------------------------------------------------------------------- 1 | .el-collapse{border-top:1px solid #ebeef5;border-bottom:1px solid #ebeef5}.el-collapse-item__header{height:48px;line-height:48px;background-color:#fff;color:#303133;cursor:pointer;border-bottom:1px solid #ebeef5;font-size:13px;font-weight:500;-webkit-transition:border-bottom-color .3s;transition:border-bottom-color .3s;outline:0}.el-collapse-item__arrow{margin-right:8px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:right;line-height:48px;font-weight:300}.el-collapse-item__arrow.is-active{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-collapse-item__header.focusing:focus:not(:hover){color:#4B9E65}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;background-color:#fff;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;border-bottom:1px solid #ebeef5}.el-collapse-item__content{padding-bottom:25px;font-size:13px;color:#303133;line-height:1.769230769230769}.el-collapse-item:last-child{margin-bottom:-1px} -------------------------------------------------------------------------------- /src/view/Osharp/security/column/function.js: -------------------------------------------------------------------------------- 1 | export default { 2 | Name: { 3 | title: '功能名称', 4 | width: '240px', 5 | sort: true 6 | }, 7 | Area: { 8 | title: '区域', 9 | width: '120px' 10 | }, 11 | Controller: { 12 | title: '控制器', 13 | width: '120px' 14 | }, 15 | AccessType: { 16 | title: '功能类型', 17 | width: '120px', 18 | sort: true 19 | }, 20 | CacheExpirationSeconds: { 21 | title: '缓存秒数', 22 | width: '120px', 23 | sort: true 24 | }, 25 | AuditOperationEnabled: { 26 | title: '操作审计', 27 | width: '110px', 28 | sort: true 29 | }, 30 | AuditEntityEnabled: { 31 | title: '数据审计', 32 | width: '110px', 33 | sort: true 34 | }, 35 | IsCacheSliding: { 36 | title: '滑动过期', 37 | width: '110px', 38 | sort: true 39 | }, 40 | IsLocked: { 41 | title: '已锁定', 42 | width: '110px', 43 | sort: true 44 | }, 45 | IsAjax: { 46 | title: 'Ajax访问', 47 | width: '110px', 48 | sort: true 49 | }, 50 | IsController: { 51 | title: '是否控制器', 52 | width: '100px', 53 | sort: true 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/core/style/style.scss: -------------------------------------------------------------------------------- 1 | * { 2 | box-sizing: border-box; 3 | } 4 | .pointIt { 5 | cursor: pointer !important; 6 | } 7 | /* rewrite */ 8 | .el-pagination { 9 | max-width: 100%; 10 | margin: 10px 0px; 11 | text-align: center !important; 12 | } 13 | .el-message-box { 14 | max-width: 100%; 15 | } 16 | /* mobile */ 17 | @media only screen and (min-width: 100px) and (max-width: 640px) { 18 | .el-dialog { 19 | width: 100% !important; 20 | max-width: 100% !important; 21 | } 22 | .el-pagination { 23 | padding: 0px !important; 24 | .el-pagination__total { 25 | margin: 0px !important; 26 | display: block !important; 27 | } 28 | .el-pagination__sizes { 29 | display: none !important; 30 | } 31 | .el-pagination__jump { 32 | margin: 0px !important; 33 | display: block !important; 34 | } 35 | } 36 | } 37 | /* iPhone 5 */ 38 | @media only screen and (min-width: 100px) and (max-width: 320px) { 39 | .el-pagination { 40 | button[type="button"] { 41 | display: block; 42 | margin: 5px auto; 43 | padding: 0px; 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 zionLZH 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/view/statusPage/404.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 31 | 32 | 53 | -------------------------------------------------------------------------------- /src/components/style/dialogClear.scss: -------------------------------------------------------------------------------- 1 | .gee-clear-dialog { 2 | //max-width: 100%; 3 | //min-width: 320px; 4 | //width: 320px; 5 | &>* { 6 | max-width: 100%; 7 | } 8 | .el-dialog__body { 9 | padding: 10px 20px; 10 | max-height: 65vh; 11 | overflow-x: hidden; 12 | overflow-y: scroll; 13 | .el-radio-group { 14 | width: 100%; 15 | height: auto; 16 | max-height: 245px; 17 | margin-top: 5px; 18 | padding: 10px; 19 | overflow-x: hidden; 20 | overflow-y: scroll; 21 | border: 1px solid #dcdfe6; 22 | border-radius: 4px; 23 | .el-radio { 24 | display: block; 25 | height: 26px; 26 | margin: 0px; 27 | padding: 0px; 28 | line-height: 26px; 29 | } 30 | } 31 | } 32 | //.el-button { 33 | // color: #fff !important; 34 | // background-color: #4b9e65 !important; 35 | // border-color: #4b9e65 !important; 36 | // &:active { 37 | // opacity: 0.6; 38 | // } 39 | //} 40 | } 41 | @media screen and (max-width: 640px) { 42 | .gee-clear-dialog { 43 | max-width: 100%; 44 | min-width: 320px; 45 | width: 320px; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | 14 | # Directory for instrumented libs generated by jscoverage/JSCover 15 | lib-cov 16 | 17 | # Coverage directory used by tools like istanbul 18 | coverage 19 | 20 | # nyc test coverage 21 | .nyc_output 22 | 23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 24 | .grunt 25 | 26 | # Bower dependency directory (https://bower.io/) 27 | bower_components 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (https://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directories 36 | node_modules/ 37 | jspm_packages/ 38 | 39 | # TypeScript v1 declaration files 40 | typings/ 41 | 42 | # Optional npm cache directory 43 | .npm 44 | 45 | # Optional eslint cache 46 | .eslintcache 47 | 48 | # Optional REPL history 49 | .node_repl_history 50 | 51 | # Output of 'npm pack' 52 | *.tgz 53 | 54 | # Yarn Integrity file 55 | .yarn-integrity 56 | 57 | # dotenv environment variables file 58 | .env 59 | 60 | # next.js build output 61 | .next 62 | -------------------------------------------------------------------------------- /src/api/osharp/User.js: -------------------------------------------------------------------------------- 1 | import { request } from '@/utils/request' 2 | 3 | let path = '/Admin/User' 4 | 5 | export function Read (option) { 6 | return request({ 7 | url: `${path}/Read`, 8 | method: 'POST', 9 | noSuffix: true, 10 | data: option 11 | }) 12 | } 13 | 14 | export function Update (option) { 15 | return request({ 16 | url: `${path}/Update`, 17 | method: 'POST', 18 | noSuffix: true, 19 | data: option 20 | }) 21 | } 22 | 23 | export function Create (option) { 24 | return request({ 25 | url: `${path}/Create`, 26 | method: 'POST', 27 | noSuffix: true, 28 | data: option 29 | }) 30 | } 31 | 32 | export function Delete (option) { 33 | return request({ 34 | url: `${path}/Delete`, 35 | method: 'POST', 36 | noSuffix: true, 37 | data: option 38 | }) 39 | } 40 | 41 | export function setroles (option) { 42 | return request({ 43 | url: `${path}/setroles`, 44 | method: 'POST', 45 | noSuffix: true, 46 | data: option 47 | }) 48 | } 49 | 50 | export function setmodules (option) { 51 | return request({ 52 | url: `${path}/setmodules`, 53 | method: 'POST', 54 | noSuffix: true, 55 | data: option 56 | }) 57 | } 58 | -------------------------------------------------------------------------------- /src/api/osharp/Pack.js: -------------------------------------------------------------------------------- 1 | import { request } from '@/utils/request' 2 | 3 | let path = '/Admin/pack' 4 | 5 | export function Read (option) { 6 | return request({ 7 | url: `${path}/read`, 8 | method: 'POST', 9 | noSuffix: true, 10 | data: option 11 | }) 12 | } 13 | 14 | export function Update (option) { 15 | return request({ 16 | url: `${path}/Update`, 17 | method: 'POST', 18 | noSuffix: true, 19 | data: option 20 | }) 21 | } 22 | 23 | export function Create (option) { 24 | return request({ 25 | url: `${path}/Create`, 26 | method: 'POST', 27 | noSuffix: true, 28 | data: option 29 | }) 30 | } 31 | 32 | export function Delete (option) { 33 | return request({ 34 | url: `${path}/Delete`, 35 | method: 'POST', 36 | noSuffix: true, 37 | data: option 38 | }) 39 | } 40 | 41 | export function ReadUserRoles (option) { 42 | return request({ 43 | url: `${path}/ReadUserRoles`, 44 | method: 'GET', 45 | noSuffix: true, 46 | params: option 47 | }) 48 | } 49 | 50 | export function SetModules (option) { 51 | return request({ 52 | url: `${path}/SetModules`, 53 | method: 'POST', 54 | noSuffix: true, 55 | data: option 56 | }) 57 | } 58 | -------------------------------------------------------------------------------- /src/api/osharp/Role.js: -------------------------------------------------------------------------------- 1 | import { request } from '@/utils/request' 2 | 3 | let path = '/Admin/role' 4 | 5 | export function Read (option) { 6 | return request({ 7 | url: `${path}/read`, 8 | method: 'POST', 9 | noSuffix: true, 10 | data: option 11 | }) 12 | } 13 | 14 | export function Update (option) { 15 | return request({ 16 | url: `${path}/Update`, 17 | method: 'POST', 18 | noSuffix: true, 19 | data: option 20 | }) 21 | } 22 | 23 | export function Create (option) { 24 | return request({ 25 | url: `${path}/Create`, 26 | method: 'POST', 27 | noSuffix: true, 28 | data: option 29 | }) 30 | } 31 | 32 | export function Delete (option) { 33 | return request({ 34 | url: `${path}/Delete`, 35 | method: 'POST', 36 | noSuffix: true, 37 | data: option 38 | }) 39 | } 40 | 41 | export function ReadUserRoles (option) { 42 | return request({ 43 | url: `${path}/ReadUserRoles`, 44 | method: 'GET', 45 | noSuffix: true, 46 | params: option 47 | }) 48 | } 49 | 50 | export function SetModules (option) { 51 | return request({ 52 | url: `${path}/SetModules`, 53 | method: 'POST', 54 | noSuffix: true, 55 | data: option 56 | }) 57 | } 58 | -------------------------------------------------------------------------------- /src/api/osharp/AuditEntity.js: -------------------------------------------------------------------------------- 1 | import { request } from '@/utils/request' 2 | 3 | let path = '/Admin/pack' 4 | 5 | export function Read (option) { 6 | return request({ 7 | url: `${path}/read`, 8 | method: 'POST', 9 | noSuffix: true, 10 | data: option 11 | }) 12 | } 13 | 14 | export function Update (option) { 15 | return request({ 16 | url: `${path}/Update`, 17 | method: 'POST', 18 | noSuffix: true, 19 | data: option 20 | }) 21 | } 22 | 23 | export function Create (option) { 24 | return request({ 25 | url: `${path}/Create`, 26 | method: 'POST', 27 | noSuffix: true, 28 | data: option 29 | }) 30 | } 31 | 32 | export function Delete (option) { 33 | return request({ 34 | url: `${path}/Delete`, 35 | method: 'POST', 36 | noSuffix: true, 37 | data: option 38 | }) 39 | } 40 | 41 | export function ReadUserRoles (option) { 42 | return request({ 43 | url: `${path}/ReadUserRoles`, 44 | method: 'GET', 45 | noSuffix: true, 46 | params: option 47 | }) 48 | } 49 | 50 | export function SetModules (option) { 51 | return request({ 52 | url: `${path}/SetModules`, 53 | method: 'POST', 54 | noSuffix: true, 55 | data: option 56 | }) 57 | } 58 | -------------------------------------------------------------------------------- /src/view/Osharp/system/style/treeBox.scss: -------------------------------------------------------------------------------- 1 | .com-tree-box { 2 | height: 100%; 3 | * { 4 | user-select: none; 5 | } 6 | .scroll { 7 | overflow: scroll; 8 | } 9 | .left { 10 | &:after { 11 | content: ''; 12 | display: block; 13 | clear: both; 14 | } 15 | float: left; 16 | width: 65%; 17 | height: 100%; 18 | .tree { 19 | width: 100%; 20 | min-width: 1024px; 21 | .tree-node { 22 | width: 100%; 23 | * { 24 | white-space: nowrap; 25 | overflow: hidden; 26 | text-overflow: ellipsis; 27 | } 28 | } 29 | } 30 | } 31 | .bar { 32 | float: left; 33 | width: 8px; 34 | height: 100%; 35 | background-color: #eee; 36 | cursor: col-resize; 37 | } 38 | .right { 39 | &:after { 40 | content: ''; 41 | display: block; 42 | clear: both; 43 | } 44 | float: left; 45 | width: calc(35% - 8px); 46 | height: 100%; 47 | .tree { 48 | width: 100%; 49 | min-width: 800px; 50 | .tree-node { 51 | width: 100%; 52 | * { 53 | white-space: nowrap; 54 | overflow: hidden; 55 | text-overflow: ellipsis; 56 | } 57 | } 58 | } 59 | } 60 | .fnBar { 61 | width: 100%; 62 | padding: 10px; 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /src/view/Osharp/security/style/treeBox.scss: -------------------------------------------------------------------------------- 1 | .com-tree-box { 2 | height: 100%; 3 | * { 4 | user-select: none; 5 | } 6 | .scroll { 7 | overflow: scroll; 8 | } 9 | .left { 10 | &:after { 11 | content: ''; 12 | display: block; 13 | clear: both; 14 | } 15 | float: left; 16 | width: 65%; 17 | height: 100%; 18 | .tree { 19 | width: 100%; 20 | min-width: 1024px; 21 | .tree-node { 22 | width: 100%; 23 | * { 24 | white-space: nowrap; 25 | overflow: hidden; 26 | text-overflow: ellipsis; 27 | } 28 | } 29 | } 30 | } 31 | .bar { 32 | float: left; 33 | width: 8px; 34 | height: 100%; 35 | background-color: #eee; 36 | cursor: col-resize; 37 | } 38 | .right { 39 | &:after { 40 | content: ''; 41 | display: block; 42 | clear: both; 43 | } 44 | float: left; 45 | width: calc(35% - 8px); 46 | height: 100%; 47 | .tree { 48 | width: 100%; 49 | min-width: 800px; 50 | .tree-node { 51 | width: 100%; 52 | * { 53 | white-space: nowrap; 54 | overflow: hidden; 55 | text-overflow: ellipsis; 56 | } 57 | } 58 | } 59 | } 60 | .fnBar { 61 | width: 100%; 62 | padding: 10px; 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /src/view/statusPage/401.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 45 | 46 | 62 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/alert.css: -------------------------------------------------------------------------------- 1 | .el-alert{width:100%;padding:8px 16px;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;position:relative;background-color:#fff;overflow:hidden;opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transition:opacity .2s;transition:opacity .2s}.el-alert.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-alert--success{background-color:#f0f9eb;color:#67c23a}.el-alert--success .el-alert__description{color:#67c23a}.el-alert--info{background-color:#f4f4f5;color:#909399}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning{background-color:#fdf6ec;color:#e6a23c}.el-alert--warning .el-alert__description{color:#e6a23c}.el-alert--error{background-color:#fef0f0;color:#f56c6c}.el-alert--error .el-alert__description{color:#f56c6c}.el-alert__content{display:table-cell;padding:0 8px}.el-alert__icon{font-size:16px;width:16px}.el-alert__icon.is-big{font-size:28px;width:28px}.el-alert__title{font-size:13px;line-height:18px}.el-alert__title.is-bold{font-weight:700}.el-alert .el-alert__description{font-size:12px;margin:5px 0 0}.el-alert__closebtn{font-size:12px;color:#c0c4cc;opacity:1;position:absolute;top:12px;right:15px;cursor:pointer}.el-alert__closebtn.is-customed{font-style:normal;font-size:13px;top:9px}.el-alert-fade-enter,.el-alert-fade-leave-active{opacity:0} -------------------------------------------------------------------------------- /src/components/table/fnGroup.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 25 | 26 | 71 | -------------------------------------------------------------------------------- /src/components/other/magnetic.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 44 | 45 | 63 | -------------------------------------------------------------------------------- /src/config.js: -------------------------------------------------------------------------------- 1 | import * as system from '@/utils/system' 2 | 3 | export default { 4 | baseUrl: '/api', 5 | enableIdSuffix: false, 6 | whileList: ['login', 'reg'], 7 | routerHook: (to, from, next) => { 8 | // next() 9 | var enableIdSuffix = false 10 | if (!to.name) { 11 | next() 12 | return 13 | } 14 | let toRouter = { 15 | name: to.name, 16 | query: JSON.parse(JSON.stringify(to.query)) 17 | } 18 | if (from.query && from.query._suffixId) { 19 | toRouter.query._suffixId = from.query._suffixId 20 | window._suffixId = window._suffixId || toRouter.query._suffixId 21 | } 22 | if (to.meta.title) { 23 | document.title = to.meta.title + ' - OSharp' 24 | } 25 | if (!system.dataGet('auth', true)) { 26 | if (to.name === 'login') { 27 | next() 28 | } else { 29 | let loginRouter = { 30 | replace: true, 31 | name: 'login', 32 | query: {} 33 | } 34 | if (toRouter.query._suffixId) { 35 | loginRouter.query._suffixId = toRouter.query._suffixId 36 | } 37 | next(loginRouter) 38 | } 39 | return false 40 | } else { 41 | if (to.query._suffixId) { 42 | next() 43 | return false 44 | } 45 | if (enableIdSuffix || from.query._suffixId) { 46 | next(toRouter) 47 | } else { 48 | next() 49 | } 50 | } 51 | }, 52 | reqHook: false 53 | } 54 | -------------------------------------------------------------------------------- /src/view/Osharp/identity/column/user.js: -------------------------------------------------------------------------------- 1 | export default { 2 | UserName: { 3 | width: '100px', 4 | title: '用户名', 5 | sort: true 6 | }, 7 | NickName: { 8 | width: '100px', 9 | title: '昵称', 10 | sort: true 11 | }, 12 | Email: { 13 | title: '邮箱', 14 | sort: true 15 | }, 16 | EmailConfirmed: { 17 | width: '95x', 18 | title: '邮箱确认', 19 | sort: true 20 | }, 21 | PhoneNumber: { 22 | width: '110x', 23 | title: '手机号', 24 | sort: true 25 | }, 26 | PhoneNumberConfirmed: { 27 | width: '100x', 28 | title: '手机确认', 29 | sort: true 30 | }, 31 | Roles: { 32 | title: '角色', 33 | sort: true, 34 | format (item) { 35 | try { 36 | return item.Roles.join(',') 37 | } catch (e) { 38 | return '' 39 | } 40 | } 41 | }, 42 | IsLocked: { 43 | width: '100x', 44 | title: '是否锁定', 45 | sort: true 46 | }, 47 | LockoutEnabled: { 48 | width: '90x', 49 | title: '登陆锁', 50 | sort: true 51 | }, 52 | AccessFailedCount: { 53 | width: '120x', 54 | title: '登陆错误', 55 | sort: true 56 | }, 57 | LockoutEnd: { 58 | width: '90x', 59 | title: '锁时间', 60 | sort: true 61 | }, 62 | CreatedTime: { 63 | title: '注册时间', 64 | width: '200px', 65 | sort: true, 66 | format (item) { 67 | try { 68 | return new Date(item.CreatedTime).Format('yyyy-MM-dd hh:mm:ss') 69 | } catch (e) { 70 | return item.CreatedTime 71 | } 72 | } 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /src/core/lib/permission.js: -------------------------------------------------------------------------------- 1 | import config from '@/config' 2 | import * as system from '@/utils/system' 3 | 4 | export function routerHook (to, from, next) { 5 | if (to.query._suffixId || from.query._suffixId) { 6 | window._suffixId = to.query._suffixId || from.query._suffixId || false 7 | } 8 | if (typeof to === 'string') { 9 | return 10 | } 11 | if (to.matched.length === 0) { 12 | if (from.matched.length !== 0 && to.name.indexOf('/') !== -1) { 13 | next(from) 14 | return 15 | } 16 | next({ 17 | name: '404', 18 | query: { 19 | _suffixId: window._suffixId 20 | }, 21 | replace: false 22 | }) 23 | return 24 | } 25 | if (!to.name || config.whileList.indexOf(to.name) !== -1 || config.whileList.indexOf(to.path) !== -1) { 26 | next() 27 | return 28 | } 29 | // console.log(to) 30 | if (config.routerHook) { 31 | config.routerHook(to, from, next) 32 | } 33 | if (to.path === '/') { 34 | next({ path: '/default', replace: true }) 35 | } else { 36 | next() 37 | } 38 | return false 39 | // const XToken = system.getXToken() 40 | // if (XToken) { 41 | // // 已经登陆,权限判断 42 | // const userPermission = system.varGet('userPermission') 43 | // if (userPermission && userPermission.indexOf(to.name) !== -1) { 44 | // next() 45 | // } else { 46 | // next({ path: '/401', replace: true }) 47 | // } 48 | // } else { 49 | // if (to.meta && to.meta.pass) { 50 | // next() 51 | // return 52 | // } 53 | // } 54 | } 55 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/popper.css: -------------------------------------------------------------------------------- 1 | .el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03));filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff} -------------------------------------------------------------------------------- /src/core/style/4B9E65/notification.css: -------------------------------------------------------------------------------- 1 | .el-notification{display:-webkit-box;display:-ms-flexbox;display:flex;width:330px;padding:14px 26px 14px 13px;border-radius:8px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #ebeef5;position:fixed;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;overflow:hidden}.el-notification.right{right:16px}.el-notification.left{left:16px}.el-notification__group{margin-left:13px}.el-notification__title{font-weight:700;font-size:16px;color:#303133;margin:0}.el-notification__content{font-size:14px;line-height:21px;margin:6px 0 0;color:#606266;text-align:justify}.el-notification__content p{margin:0}.el-notification__icon{height:24px;width:24px;font-size:24px}.el-notification__closeBtn{position:absolute;top:18px;right:15px;cursor:pointer;color:#909399;font-size:16px}.el-notification__closeBtn:hover{color:#606266}.el-notification .el-icon-success{color:#67c23a}.el-notification .el-icon-error{color:#f56c6c}.el-notification .el-icon-info{color:#909399}.el-notification .el-icon-warning{color:#e6a23c}.el-notification-fade-enter.right{right:0;-webkit-transform:translateX(100%);transform:translateX(100%)}.el-notification-fade-enter.left{left:0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}.el-notification-fade-leave-active{opacity:0} -------------------------------------------------------------------------------- /src/core/style/4B9E65/loading.css: -------------------------------------------------------------------------------- 1 | .el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{position:absolute;z-index:2000;background-color:rgba(255,255,255,.9);margin:0;top:0;right:0;bottom:0;left:0;-webkit-transition:opacity .3s;transition:opacity .3s}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:-25px}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:50px;width:50px}.el-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute}.el-loading-spinner .el-loading-text{color:#4B9E65;margin:3px 0;font-size:14px}.el-loading-spinner .circular{height:42px;width:42px;-webkit-animation:loading-rotate 2s linear infinite;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{-webkit-animation:loading-dash 1.5s ease-in-out infinite;animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:#4B9E65;stroke-linecap:round}.el-loading-spinner i{color:#4B9E65}.el-loading-fade-enter,.el-loading-fade-leave-active{opacity:0}@-webkit-keyframes loading-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes loading-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}} -------------------------------------------------------------------------------- /src/utils/request.js: -------------------------------------------------------------------------------- 1 | import Axios from 'axios' 2 | import Config from '@/config' 3 | import * as system from './system' 4 | const qs = require('qs') 5 | 6 | export function request (opt) { 7 | if (system.dataGet('auth', true)) { 8 | opt.headers = opt.headers || {} 9 | opt.headers.Authorization = 'Bearer ' + system.dataGet('auth', true) 10 | } 11 | // BaseUrl拼接 12 | opt.url = (Config.baseUrl || '') + opt.url 13 | if (opt.form) { 14 | opt.headers = opt.headers || {} 15 | opt['Content-Type'] = 'application/x-www-form-urlencoded' 16 | opt.data = qs.stringify(opt.form) 17 | } 18 | // 查询Id后缀 19 | try { 20 | let pArr = location.href.split('_suffixId=') 21 | pArr = pArr[1].split('&') 22 | window._suffixId = parseInt(pArr[0]) 23 | } catch (e) { 24 | 25 | } 26 | if (window._suffixId && !opt.hb && !opt.noSuffix) { 27 | opt.url = opt.url + '/' + window._suffixId 28 | } 29 | return new Promise((resolve, reject) => { 30 | Axios(opt).then(res => { 31 | Config.reqHook && Config.reqHook(true, res) 32 | resolve(res) 33 | }).catch(e => { 34 | Config.reqHook && Config.reqHook(false, e) 35 | reject(e) 36 | }) 37 | }) 38 | } 39 | export default request 40 | export function requestAll (arr) { 41 | if (!arr || arr.length === 0) { 42 | console.error(new Error('requestAll: arr must be a Array')) 43 | return null 44 | } 45 | return new Promise((resolve, reject) => { 46 | Axios.all(arr).then(resArr => { 47 | Config.reqHook && Config.reqHook(true, resArr) 48 | resolve(resArr) 49 | }).catch(e => { 50 | Config.reqHook && Config.reqHook(false, e) 51 | reject(e) 52 | }) 53 | }) 54 | } 55 | -------------------------------------------------------------------------------- /src/components/other/graphdracula.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 69 | 70 | 72 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/switch.css: -------------------------------------------------------------------------------- 1 | .el-switch{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;font-size:14px;line-height:20px;height:20px;vertical-align:middle}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__core,.el-switch__label{display:inline-block;cursor:pointer;vertical-align:middle}.el-switch__label{-webkit-transition:.2s;transition:.2s;height:20px;font-size:14px;font-weight:500;color:#303133}.el-switch__label.is-active{color:#4B9E65}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{line-height:1;font-size:14px;display:inline-block}.el-switch__input{position:absolute;width:0;height:0;opacity:0;margin:0}.el-switch__input:focus~.el-switch__core{outline:#4B9E65 solid 1px}.el-switch__core{margin:0;position:relative;width:40px;height:20px;border:1px solid #dcdfe6;outline:0;border-radius:10px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#dcdfe6;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s}.el-switch__core:after{content:"";position:absolute;top:1px;left:1px;border-radius:100%;-webkit-transition:all .3s;transition:all .3s;width:16px;height:16px;background-color:#fff}.el-switch.is-checked .el-switch__core{border-color:#4B9E65;background-color:#4B9E65}.el-switch.is-checked .el-switch__core::after{left:100%;margin-left:-17px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter,.el-switch .label-fade-leave-active{opacity:0} -------------------------------------------------------------------------------- /src/utils/check.js: -------------------------------------------------------------------------------- 1 | const baseCheck = (val) => { 2 | return !!(val && val.replace(/( |\r|\n|\t)/gi, '') !== '' ? 1 : 0) 3 | } 4 | export default { 5 | noEmpty (val) { 6 | return !!(baseCheck(val) ? 1 : 0) 7 | }, 8 | mail (val) { 9 | return !!(baseCheck(val) && /(^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+\.[a-zA-Z0-9_-]+$)|(^$)/.test(val) ? 1 : 0) 10 | }, 11 | phone (val) { 12 | return !!(baseCheck(val) && /^(1)+\d{10}$/.test(val) ? 1 : 0) 13 | }, 14 | password (val) { 15 | return !!(baseCheck(val) && val.length >= 6 ? 1 : 0) 16 | }, 17 | passwordMid (val) { 18 | return !!(baseCheck(val) && /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,}$/.test(val) ? 1 : 0) 19 | }, 20 | passwordHight (val) { 21 | return !!(baseCheck(val) && /^(?=.*[a-z])(?=.*\d)(?=.*[A-Z])[0-9a-zA-Z]{6,}$/.test(val) ? 1 : 0) 22 | }, 23 | passwordMax (val) { 24 | return !!(baseCheck(val) && /^(?=.*[a-z])(?=.*\d)(?=.*[A-Z])(?=.*[_.#?])[0-9a-zA-Z_.#?]{6,}$/.test(val) ? 1 : 0) 25 | }, 26 | url (val) { 27 | return !!(baseCheck(val) && /(^[http,https]+:\/\/[a-zA-Z\d]+\.[a-zA-Z]{2})/.test(val) ? 1 : 0) 28 | }, 29 | idCard (val) { 30 | return !!(baseCheck(val) && (val.length === 15 || val.length === 18) && /^\d{6}(18|19|20|)\d{2}(1[0-2]|0[1-9])([0-3][0-9])\d{3}(\d{1}|X|)$/.test(val) ? 1 : 0) 31 | }, 32 | filename (val) { 33 | return !!(baseCheck(val) && !/(\\|\/|:|\?|\*|<|>|\|)/.test(val) && /(^[a-zA-Z0-9]+\.[a-zA-Z0-9])/.test(val) ? 1 : 0) 34 | }, 35 | sex (val) { 36 | return !!(baseCheck(val) && /^(男|女|未知)/.test(val) ? 1 : 0) 37 | }, 38 | number (val) { 39 | return !!(val * 1 && (val * 1 >= 0 || val * 1 < 0) ? 1 : 0) 40 | }, 41 | date (val) { 42 | return !!(baseCheck(val) && new Date(val).getTime() * 1 ? 1 : 0) 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/components/other/echarts.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 76 | 77 | 79 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/progress.css: -------------------------------------------------------------------------------- 1 | .el-progress{position:relative;line-height:1}.el-progress__text{font-size:14px;color:#606266;display:inline-block;vertical-align:middle;margin-left:10px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle{display:inline-block}.el-progress--circle .el-progress__text{position:absolute;top:50%;left:0;width:100%;text-align:center;margin:0;-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}.el-progress--circle .el-progress__text i{vertical-align:middle;display:inline-block}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block}.el-progress-bar,.el-progress-bar__inner::after,.el-progress-bar__innerText{display:inline-block;vertical-align:middle}.el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:#67c23a}.el-progress.is-success .el-progress__text{color:#67c23a}.el-progress.is-exception .el-progress-bar__inner{background-color:#f56c6c}.el-progress.is-exception .el-progress__text{color:#f56c6c}.el-progress-bar{padding-right:50px;width:100%;margin-right:-55px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:#ebeef5;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#4B9E65;text-align:right;border-radius:100px;line-height:1;white-space:nowrap}.el-progress-bar__inner::after{content:"";height:100%}.el-progress-bar__innerText{color:#fff;font-size:12px;margin:0 5px}@-webkit-keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}@keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}} -------------------------------------------------------------------------------- /src/utils/xlsx.js: -------------------------------------------------------------------------------- 1 | import FileSaver from 'file-saver' 2 | import XLSX from 'xlsx' 3 | export function exportExcel (tableColumn, rtable, fileName) { 4 | let header = [] 5 | let dts = [] 6 | let table = JSON.parse(JSON.stringify(rtable)) 7 | for (let key in tableColumn) { 8 | header.push(tableColumn[key].title || key) 9 | } 10 | for (let i = 0; i < table.length; i++) { 11 | let item = table[i] 12 | for (let key in item) { 13 | if (tableColumn[key]) { 14 | item[tableColumn[key].title] = item[key] 15 | } 16 | if (tableColumn[key] && tableColumn[key].format) { 17 | try { 18 | let tempDiv = document.createElement('div') 19 | tempDiv.innerHTML = tableColumn[key].format(item) 20 | tempDiv = tempDiv.outerText.replace(/( |\r)/gi, '').replace(/\n/gi, ',').replace(/,,/gi, ',') 21 | while (tempDiv.indexOf(',,') !== -1) { 22 | tempDiv = tempDiv.replace(/,,/gi, ',') 23 | } 24 | tempDiv = tempDiv.replace(/(^,|,$)/gi, '') 25 | item[tableColumn[key].title] = tempDiv 26 | tempDiv = null 27 | } catch (e) { 28 | console.error(e) 29 | // nothing 30 | } 31 | } 32 | } 33 | for (let key in item) { 34 | if (header.indexOf(key) === -1) { 35 | delete item[key] 36 | } 37 | } 38 | dts.push(item) 39 | } 40 | var wb = XLSX.utils.json_to_sheet(dts, {header: header, skipHeader: false}) 41 | var wbout = XLSX.utils.book_new() 42 | XLSX.utils.book_append_sheet(wbout, wb, 'Sheet1') 43 | wbout = XLSX.write(wbout,{ bookType:'xls', bookSST:true, type:'array' }) 44 | try { 45 | FileSaver.saveAs(new Blob([wbout], { type: 'application/vnd.ms-excel;charset=utf-8' }), fileName + '.xls') 46 | } catch (e) { if (typeof console !== 'undefined') console.log(e, wbout) } 47 | } 48 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/message.css: -------------------------------------------------------------------------------- 1 | .el-message__closeBtn:focus,.el-message__content:focus{outline-width:0}.el-message{min-width:380px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;border-width:1px;border-style:solid;border-color:#ebeef5;position:fixed;left:50%;top:20px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:#edf2fc;-webkit-transition:opacity .3s,-webkit-transform .4s;transition:opacity .3s,-webkit-transform .4s;transition:opacity .3s,transform .4s;transition:opacity .3s,transform .4s,-webkit-transform .4s;overflow:hidden;padding:15px 15px 15px 20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-message.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-message.is-closable .el-message__content{padding-right:16px}.el-message p{margin:0}.el-message--info .el-message__content{color:#909399}.el-message--success{background-color:#f0f9eb;border-color:#e1f3d8}.el-message--success .el-message__content{color:#67c23a}.el-message--warning{background-color:#fdf6ec;border-color:#faecd8}.el-message--warning .el-message__content{color:#e6a23c}.el-message--error{background-color:#fef0f0;border-color:#fde2e2}.el-message--error .el-message__content{color:#f56c6c}.el-message__icon{margin-right:10px}.el-message__content{padding:0;font-size:14px;line-height:1}.el-message__closeBtn{position:absolute;top:50%;right:15px;-webkit-transform:translateY(-50%);transform:translateY(-50%);cursor:pointer;color:#c0c4cc;font-size:16px}.el-message__closeBtn:hover{color:#909399}.el-message .el-icon-success{color:#67c23a}.el-message .el-icon-error{color:#f56c6c}.el-message .el-icon-info{color:#909399}.el-message .el-icon-warning{color:#e6a23c}.el-message-fade-enter,.el-message-fade-leave-active{opacity:0;-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%)} -------------------------------------------------------------------------------- /src/core/style/table.scss: -------------------------------------------------------------------------------- 1 | /* 表格组件处理 */ 2 | table,table *{border: 0px;margin: 0px;padding: 0px;font-size: 14px !important;line-height: 1.428 !important;border-collapse: collapse;background-color: #fff;} 3 | table {border: 1px solid #000 !important;border-bottom: 0px !important;font-family: "lucida grande", "lucida sans unicode", lucida, helvetica, "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif !important;} 4 | table tr {border-bottom: 1px solid #000;} 5 | table th,table td {padding: 5px 10px !important;border-left: 1px solid #000 !important;} 6 | table th:nth-child(1),table td:nth-child(1) {border: 0px !important;} 7 | /* 不换行 */ 8 | @media screen and (max-width: 640px) { 9 | table * {white-space: nowrap;} 10 | table[nowrap] * {white-space: nowrap !important;} 11 | table[wrap] * {white-space: wrap !important;} 12 | table {width: inherit;max-width: 100% !important;display: inline-block;box-sizing: border-box;overflow: hidden;overflow-x: scroll;} 13 | table::-webkit-scrollbar {background-color: #EEE;border-bottom: 1px solid #999;height: 5px;} 14 | table::-webkit-scrollbar-thumb {background-color: #24ab60;} 15 | table tbody {min-width: 100%;} 16 | } 17 | table,table tbody,table tr,table th,table td {border-color: #999 !important;color: #000 !important;} 18 | /*table tr:nth-child(2n-1) {background-color: #F9F9F9;}*/ 19 | /* 自定义通配样式 */ 20 | table tr>td:nth-child(1) {width: 90px;} 21 | table tr>td.clear {width: auto;} 22 | table * {font-weight: 500;} 23 | table input.block {display: block;min-width: 30px;width: 100%;height: 100%;border: 0px;outline: none;} 24 | table input[type="radio"] {margin-right: 5px;} 25 | table input[type="radio"] + input[type="radio"] {margin-left: 5px;} 26 | table input[type="checkbox"] {margin-right: 5px;} 27 | table tr td[rowspan],table tr td[colspan] {position: relative;background-color: #fff;border: 1px solid #999 !important;} -------------------------------------------------------------------------------- /src/components/form/select.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 80 | 81 | 83 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/tree.css: -------------------------------------------------------------------------------- 1 | .el-tree{position:relative;cursor:default;background:#fff;color:#606266}.el-tree__empty-block{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-tree__empty-text{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#6f7180}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#4B9E65}.el-tree-node{white-space:nowrap;outline:0}.el-tree-node:focus>.el-tree-node__content{background-color:#f5f7fa}.el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:#4B9E65;color:#fff}.el-tree-node__content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:26px;cursor:pointer}.el-tree-node__content>.el-tree-node__expand-icon{padding:6px}.el-tree-node__content>.el-checkbox{margin-right:8px}.el-tree-node__content:hover{background-color:#f5f7fa}.el-tree.is-dragging .el-tree-node__content{cursor:move}.el-tree.is-dragging .el-tree-node__content *{pointer-events:none}.el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed}.el-tree-node__expand-icon{cursor:pointer;color:#c0c4cc;font-size:12px;-webkit-transform:rotate(0);transform:rotate(0);-webkit-transition:-webkit-transform .3s ease-in-out;transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out}.el-tree-node__expand-icon.expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{color:transparent;cursor:default}.el-tree-node__label{font-size:14px}.el-tree-node__loading-icon{margin-right:8px;font-size:14px;color:#c0c4cc}.el-tree-node>.el-tree-node__children{overflow:hidden;background-color:transparent}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:#f0f7ff} -------------------------------------------------------------------------------- /src/core/style/4B9E65/tag.css: -------------------------------------------------------------------------------- 1 | .el-tag{background-color:rgba(64,158,255,.1);display:inline-block;padding:0 10px;height:32px;line-height:30px;font-size:12px;color:#4B9E65;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid rgba(64,158,255,.2);white-space:nowrap}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:16px;width:16px;line-height:16px;vertical-align:middle;top:-1px;right:-5px;color:#4B9E65}.el-tag .el-icon-close::before{display:block}.el-tag .el-icon-close:hover{background-color:#4B9E65;color:#fff}.el-tag--info,.el-tag--info .el-tag__close{color:#909399}.el-tag--info{background-color:rgba(144,147,153,.1);border-color:rgba(144,147,153,.2)}.el-tag--info.is-hit{border-color:#909399}.el-tag--info .el-tag__close:hover{background-color:#909399;color:#fff}.el-tag--success{background-color:rgba(103,194,58,.1);border-color:rgba(103,194,58,.2);color:#67c23a}.el-tag--success.is-hit{border-color:#67c23a}.el-tag--success .el-tag__close{color:#67c23a}.el-tag--success .el-tag__close:hover{background-color:#67c23a;color:#fff}.el-tag--warning{background-color:rgba(230,162,60,.1);border-color:rgba(230,162,60,.2);color:#e6a23c}.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--warning .el-tag__close:hover{background-color:#e6a23c;color:#fff}.el-tag--danger{background-color:rgba(245,108,108,.1);border-color:rgba(245,108,108,.2);color:#f56c6c}.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--danger .el-tag__close:hover{background-color:#f56c6c;color:#fff}.el-tag--medium{height:28px;line-height:26px}.el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--small{height:24px;padding:0 8px;line-height:22px}.el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--mini{height:20px;padding:0 5px;line-height:19px}.el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)} -------------------------------------------------------------------------------- /src/utils/vextend.js: -------------------------------------------------------------------------------- 1 | function typeReformat (val) { 2 | // ~:String $: Object ^: Boolean !: int 3 | if (val === undefined || val === null) { 4 | return val 5 | } 6 | let types = ['~', '$', '^', '!'] 7 | if (typeof val === 'string' && types.indexOf(val.substr(0, 1)) !== -1) { 8 | let option = val.substr(0, 1) 9 | val = val.substr(1, val.length) 10 | switch (option) { 11 | case '~': 12 | return '' + val 13 | case '$': 14 | return JSON.parse(val) 15 | case '^': 16 | return val === 'true' 17 | case '!': 18 | return parseInt(val) 19 | default: 20 | return val 21 | } 22 | } else { 23 | switch (typeof val) { 24 | case 'string': 25 | return '~' + val 26 | case 'object': 27 | return '$' + JSON.stringify(val) 28 | case 'boolean': 29 | return '^' + val.toString() 30 | case 'number': 31 | return '!' + val 32 | default: 33 | return val 34 | } 35 | } 36 | } 37 | 38 | export function routerPath (filterMap, sync) { 39 | let query = JSON.parse(JSON.stringify(this.$route.query)) 40 | let params = JSON.parse(JSON.stringify(this.$route.params)) 41 | for (let key in query) { 42 | let val = filterMap[key] 43 | if (val === undefined) { continue } 44 | (val.constructor === Object && val['value'] !== undefined) && (val = filterMap[key].value) 45 | if (sync) { 46 | (filterMap[key].constructor === Object && filterMap[key]['value'] !== undefined) ? (filterMap[key].value = typeReformat(query[key])) : (filterMap[key] = typeReformat(query[key])) 47 | } else { 48 | query[key] = typeReformat(val) 49 | } 50 | } 51 | for (let key in filterMap) { 52 | let val = filterMap[key] 53 | if (val === undefined) { continue } 54 | (val.constructor === Object && val['value'] !== undefined) && (val = filterMap[key].value) 55 | query[key] = typeReformat(val) 56 | } 57 | this.$router.replace({ name: this.$route.name, query, params }) 58 | } 59 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/carousel.css: -------------------------------------------------------------------------------- 1 | .el-carousel{overflow-x:hidden;position:relative}.el-carousel__container{position:relative;height:300px}.el-carousel__arrow{border:none;outline:0;padding:0;margin:0;height:36px;width:36px;cursor:pointer;-webkit-transition:.3s;transition:.3s;border-radius:50%;background-color:rgba(31,45,61,.11);color:#fff;position:absolute;top:50%;z-index:10;-webkit-transform:translateY(-50%);transform:translateY(-50%);text-align:center;font-size:12px}.el-carousel__arrow--left{left:16px}.el-carousel__arrow--right{right:16px}.el-carousel__arrow:hover{background-color:rgba(31,45,61,.23)}.el-carousel__arrow i{cursor:pointer}.el-carousel__indicators{position:absolute;list-style:none;bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);margin:0;padding:0;z-index:2}.el-carousel__indicators--outside{bottom:26px;text-align:center;position:static;-webkit-transform:none;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:#c0c4cc;opacity:.24}.el-carousel__indicators--labels{left:0;right:0;-webkit-transform:none;transform:none;text-align:center}.el-carousel__indicators--labels .el-carousel__button{height:auto;width:auto;padding:2px 18px;font-size:12px}.el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.el-carousel__indicator{display:inline-block;background-color:transparent;padding:12px 4px;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{display:block;opacity:.48;width:30px;height:2px;background-color:#fff;border:none;outline:0;padding:0;margin:0;cursor:pointer;-webkit-transition:.3s;transition:.3s}.carousel-arrow-left-enter,.carousel-arrow-left-leave-active{-webkit-transform:translateY(-50%) translateX(-10px);transform:translateY(-50%) translateX(-10px);opacity:0}.carousel-arrow-right-enter,.carousel-arrow-right-leave-active{-webkit-transform:translateY(-50%) translateX(10px);transform:translateY(-50%) translateX(10px);opacity:0} -------------------------------------------------------------------------------- /src/components/form/form.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 87 | 88 | 93 | -------------------------------------------------------------------------------- /src/core/Layout.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 50 | 51 | 69 | 70 | 78 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/popover.css: -------------------------------------------------------------------------------- 1 | .el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03));filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-popover{position:absolute;background:#fff;min-width:150px;border-radius:4px;border:1px solid #ebeef5;padding:12px;z-index:2000;color:#606266;line-height:1.4;text-align:justify;font-size:14px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-popover--plain{padding:18px 20px}.el-popover__title{color:#303133;font-size:16px;line-height:1;margin-bottom:12px}.el-popover:focus,.el-popover:focus:active,.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing){outline-width:0} -------------------------------------------------------------------------------- /src/core/style/4B9E65/radio-button.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-radio-button,.el-radio-button__inner{display:inline-block;position:relative;outline:0}.el-radio-button__inner{line-height:1;white-space:nowrap;vertical-align:middle;background:#fff;border:1px solid #dcdfe6;font-weight:500;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;cursor:pointer;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-radio-button__inner.is-round{padding:12px 20px}.el-radio-button__inner:hover{color:#4B9E65}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-radio-button__orig-radio{opacity:0;outline:0;position:absolute;z-index:-1}.el-radio-button__orig-radio:checked+.el-radio-button__inner{color:#fff;background-color:#4B9E65;border-color:#4B9E65;-webkit-box-shadow:-1px 0 0 0 #4B9E65;box-shadow:-1px 0 0 0 #4B9E65}.el-radio-button__orig-radio:disabled+.el-radio-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;-webkit-box-shadow:none;box-shadow:none}.el-radio-button__orig-radio:disabled:checked+.el-radio-button__inner{background-color:#f2f6fc}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 4px 4px 0}.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:4px}.el-radio-button--medium .el-radio-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-radio-button--medium .el-radio-button__inner.is-round{padding:10px 20px}.el-radio-button--small .el-radio-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-radio-button--small .el-radio-button__inner.is-round{padding:9px 15px}.el-radio-button--mini .el-radio-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-radio-button--mini .el-radio-button__inner.is-round{padding:7px 15px}.el-radio-button:focus:not(.is-focus):not(:active){-webkit-box-shadow:0 0 2px 2px #4B9E65;box-shadow:0 0 2px 2px #4B9E65} -------------------------------------------------------------------------------- /src/components/form/ctPicker.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 97 | 98 | 101 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/tooltip.css: -------------------------------------------------------------------------------- 1 | .el-tooltip:focus:hover,.el-tooltip:focus:not(.focusing){outline-width:0}.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2;min-width:10px}.el-tooltip__popper .popper__arrow,.el-tooltip__popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-tooltip__popper .popper__arrow{border-width:6px}.el-tooltip__popper .popper__arrow::after{content:" ";border-width:5px}.el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-5px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow::after{bottom:-5px;left:1px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=left]{margin-right:12px}.el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper.is-dark{background:#303133;color:#fff}.el-tooltip__popper.is-light{background:#fff;border:1px solid #303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:#303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow::after{border-top-color:#fff}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:#303133}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow::after{border-bottom-color:#fff}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:#303133}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow::after{border-left-color:#fff}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:#303133}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow::after{border-right-color:#fff} -------------------------------------------------------------------------------- /src/components/form/markdown.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 82 | 83 | 101 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/dialog.css: -------------------------------------------------------------------------------- 1 | .v-modal-enter{-webkit-animation:v-modal-in .2s ease;animation:v-modal-in .2s ease}.v-modal-leave{-webkit-animation:v-modal-out .2s ease forwards;animation:v-modal-out .2s ease forwards}@-webkit-keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-in{0%{opacity:0}}@-webkit-keyframes v-modal-out{100%{opacity:0}}@keyframes v-modal-out{100%{opacity:0}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.5;background:#000}.el-popup-parent--hidden{overflow:hidden}.el-dialog{position:relative;margin:0 auto 50px;background:#fff;border-radius:2px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.3);box-shadow:0 1px 3px rgba(0,0,0,.3);-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.el-dialog.is-fullscreen{width:100%;margin-top:0;margin-bottom:0;height:100%;overflow:auto}.el-dialog__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;margin:0}.el-dialog__header{padding:20px 20px 10px}.el-dialog__headerbtn{position:absolute;top:20px;right:20px;padding:0;background:0 0;border:none;outline:0;cursor:pointer;font-size:16px}.el-dialog__headerbtn .el-dialog__close{color:#909399}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:#4B9E65}.el-dialog__title{line-height:24px;font-size:18px;color:#303133}.el-dialog__body{padding:30px 20px;color:#606266;font-size:14px}.el-dialog__footer{padding:10px 20px 20px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial;padding:25px 25px 30px}.el-dialog--center .el-dialog__footer{text-align:inherit}.dialog-fade-enter-active{-webkit-animation:dialog-fade-in .3s;animation:dialog-fade-in .3s}.dialog-fade-leave-active{-webkit-animation:dialog-fade-out .3s;animation:dialog-fade-out .3s}@-webkit-keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes dialog-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes dialog-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}} -------------------------------------------------------------------------------- /src/core/style/4B9E65/select-dropdown.css: -------------------------------------------------------------------------------- 1 | .el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03));filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-select-dropdown{position:absolute;z-index:1001;border:1px solid #e4e7ed;border-radius:4px;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:5px 0}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#4B9E65;background-color:#fff}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:#f5f7fa}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after{position:absolute;right:20px;font-family:element-icons;content:"\E611";font-size:12px;font-weight:700;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:#999;font-size:14px}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box} -------------------------------------------------------------------------------- /src/components/form/item.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 99 | 100 | 110 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/form.css: -------------------------------------------------------------------------------- 1 | .el-form--inline .el-form-item,.el-form--inline .el-form-item__content{display:inline-block;vertical-align:top}.el-form-item::after,.el-form-item__content::after{clear:both}.el-form--label-left .el-form-item__label{text-align:left}.el-form--label-top .el-form-item__label{float:none;display:inline-block;text-align:left;padding:0 0 10px}.el-form--inline .el-form-item{margin-right:10px}.el-form--inline .el-form-item__label{float:none;display:inline-block}.el-form-item__content .el-input-group,.el-form-item__label{vertical-align:middle}.el-form--inline.el-form--label-top .el-form-item__content{display:block}.el-form-item{margin-bottom:22px}.el-form-item::after,.el-form-item::before{display:table;content:""}.el-form-item .el-form-item{margin-bottom:0}.el-form-item--mini.el-form-item,.el-form-item--small.el-form-item{margin-bottom:18px}.el-form-item .el-input__validateIcon{display:none}.el-form-item--medium .el-form-item__content,.el-form-item--medium .el-form-item__label{line-height:36px}.el-form-item--small .el-form-item__content,.el-form-item--small .el-form-item__label{line-height:32px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item--mini .el-form-item__content,.el-form-item--mini .el-form-item__label{line-height:28px}.el-form-item--mini .el-form-item__error{padding-top:1px}.el-form-item__label{text-align:right;float:left;font-size:14px;color:#606266;line-height:40px;padding:0 12px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-form-item__content{line-height:40px;position:relative;font-size:14px}.el-form-item__content::after,.el-form-item__content::before{display:table;content:""}.el-form-item__error{color:#f56c6c;font-size:12px;line-height:1;padding-top:4px;position:absolute;top:100%;left:0}.el-form-item__error--inline{position:relative;top:auto;left:auto;display:inline-block;margin-left:10px}.el-form-item.is-required .el-form-item__label:before{content:'*';color:#f56c6c;margin-right:4px}.el-form-item.is-error .el-input__inner,.el-form-item.is-error .el-input__inner:focus,.el-form-item.is-error .el-textarea__inner,.el-form-item.is-error .el-textarea__inner:focus{border-color:#f56c6c}.el-form-item.is-error .el-input-group__append .el-input__inner,.el-form-item.is-error .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-error .el-input__validateIcon{color:#f56c6c}.el-form-item.is-success .el-input__inner,.el-form-item.is-success .el-input__inner:focus,.el-form-item.is-success .el-textarea__inner,.el-form-item.is-success .el-textarea__inner:focus{border-color:#67c23a}.el-form-item.is-success .el-input-group__append .el-input__inner,.el-form-item.is-success .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-success .el-input__validateIcon{color:#67c23a}.el-form-item--feedback .el-input__validateIcon{display:inline-block} -------------------------------------------------------------------------------- /src/components/form/tinymce/gee/skin.json: -------------------------------------------------------------------------------- 1 | { 2 | "skin-name": "gee", 3 | "preview-bg": "#ffffff", 4 | "text": "#333333", 5 | "text-inverse": "#ffffff", 6 | "text-disabled": "#aaaaaa", 7 | "has-gradients": false, 8 | "has-radius": true, 9 | "has-boxshadow": false, 10 | "has-button-borders": true, 11 | "btn-text": "#828b95", 12 | "btn-text-shadow": "#ffffff", 13 | "btn-bg": "#ffffff", 14 | "btn-bg-hlight": "#ffffff", 15 | "btn-border-top": "transparent", 16 | "btn-border-right": "transparent", 17 | "btn-border-bottom": "transparent", 18 | "btn-border-left": "transparent", 19 | "btn-split-border": "#bdbdbd", 20 | "btn-primary-text": "#ffffff", 21 | "btn-primary-text-shadow": "#333333", 22 | "btn-primary-bg": "#4b9e65", 23 | "btn-primary-bg-hlight": "#4b9e65", 24 | "btn-padding": "4px 8px", 25 | "menu-bg": "#ffffff", 26 | "menu-border": "rgba(221,221,221,1)", 27 | "menuitem-text": "#828b95", 28 | "menuitem-bg-selected": "#4b9e65", 29 | "menuitem-bg-selected-hlight": "#4b9e65", 30 | "menuitem-separator-top": "#cbcbcb", 31 | "menuitem-separator-bottom": "#ffffff", 32 | "menuitem-text-inverse": "#ffffff", 33 | "menuitem-bg-active": "#77b089", 34 | "menuitem-text-active": "#ffffff", 35 | "menuitem-preview-border-active": "#aaaaaa", 36 | "menubar-menubtn-text": "#dddddd", 37 | "checkbox-border": "#c5c5c5", 38 | "checkbox-border-focus": "#59a5e1", 39 | "panel-border": "#dddddd", 40 | "panel-bg": "#ffffff", 41 | "panel-bg-hlight": "#ffffff", 42 | "textbox-bg": "#ffffff", 43 | "textbox-border": "#c5c5c5", 44 | "textbox-border-focus": "#59a5e1", 45 | "window-bg": "#ffffff", 46 | "window-border": "#c4c4c4", 47 | "tab-bg": "#e3e3e3", 48 | "tab-bg-hover": "#fdfdfd", 49 | "tab-bg-active": "#fdfdfd", 50 | "tab-border": "#c5c5c5", 51 | "tabs-bg": "#ffffff", 52 | "notification-bg": "#f0f0f0", 53 | "notification-border": "#cccccc", 54 | "notification-text": "#333333", 55 | "notification-success-bg": "#dff0d8", 56 | "notification-success-border": "#d6e9c6", 57 | "notification-success-text": "#3c763d", 58 | "notification-info-bg": "#d9edf7", 59 | "notification-info-border": "#779ecb", 60 | "notification-info-text": "#31708f", 61 | "notification-warning-bg": "#fcf8e3", 62 | "notification-warning-border": "#faebcc", 63 | "notification-warning-text": "#8a6d3b", 64 | "notification-error-bg": "#f2dede", 65 | "notification-error-border": "#ebccd1", 66 | "notification-error-text": "#a94442", 67 | "progress-bar-bg": "#dfdfdf", 68 | "progress-bar-bg-hlight": "#cccccc", 69 | "progress-border": "#cccccc", 70 | "progress-text": "#333333", 71 | "progress-text-shadow": "#ffffff", 72 | "slider-bg": "#eeeeee", 73 | "slider-border": "#aaaaaa", 74 | "slider-handle-bg": "#dddddd", 75 | "slider-handle-border": "#bbbbbb", 76 | "colorbtn-backcolor-bg": "#bbbbbb", 77 | "grid-border": "#d6d6d6", 78 | "grid-border-active": "#a1a1a1" 79 | } -------------------------------------------------------------------------------- /src/components/form/tinymce/gee/content.inline.min.css: -------------------------------------------------------------------------------- 1 | .mce-content-body .mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:black;font-family:Arial;font-size:11px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;line-height:normal;font-weight:normal;text-align:left;-webkit-tap-highlight-color:transparent;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-object{border:1px dotted #3A3A3A;background:#D5D5D5 url(img/object.gif) no-repeat center}.mce-preview-object{display:inline-block;position:relative;margin:0 2px 0 2px;line-height:0;border:1px solid gray}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-preview-object .mce-shim{position:absolute;top:0;left:0;width:100%;height:100%;background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}figure.align-left{float:left}figure.align-right{float:right}figure.image.align-center{display:table;margin-left:auto;margin-right:auto}figure.image{display:inline-block;border:1px solid gray;margin:0 2px 0 1px;background:#f5f2f0}figure.image img{margin:8px 8px 0 8px}figure.image figcaption{margin:6px 8px 6px 8px;text-align:center}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc li{list-style-type:none}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3A3A3A;background:#D5D5D5 url(img/anchor.gif) no-repeat center}.mce-nbsp,.mce-shy{background:#AAA}.mce-shy::after{content:'-'}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#3399ff;color:#fff}.mce-spellchecker-word{border-bottom:2px solid #F00;cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td[data-mce-selected],th[data-mce-selected]{background-color:#3399ff !important}.mce-edit-focus{outline:1px dotted #333}.mce-resize-bar-dragging{background-color:blue;opacity:.25;filter:alpha(opacity=25);zoom:1}.mce-content-body p,.mce-content-body div,.mce-content-body h1,.mce-content-body h2,.mce-content-body h3,.mce-content-body h4,.mce-content-body h5,.mce-content-body h6{line-height:1.2em}.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus{outline:2px solid #2d8ac7}.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover{outline:2px solid #7ACAFF}.mce-content-body *[contentEditable=false][data-mce-selected]{outline:2px solid #2d8ac7}.mce-content-body a[data-mce-selected],.mce-content-body code[data-mce-selected]{background:#bfe6ff}.mce-content-body hr{cursor:default} -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | // The Vue build version to load with the `import` command 2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias. 3 | import "babel-polyfill" 4 | import Vue from 'vue' 5 | // element-ui 6 | import ElementUI from 'element-ui' 7 | import 'element-ui/lib/theme-chalk/index.css' 8 | import '@/core/style/4B9E65/index.css' 9 | // router 10 | import App from './App' 11 | import router from './router' 12 | // baiduMap 13 | import BaiduMap from 'vue-baidu-map' 14 | Vue.use(BaiduMap, { 15 | // ak 是在百度地图开发者平台申请的密钥 详见 http://lbsyun.baidu.com/apiconsole/key */ 16 | ak: 'DEoKuz2v5YYrRK2nibNRN8tv387ylFCb' 17 | }) 18 | 19 | // Core 20 | import { routerHook } from '@/core/lib/permission' 21 | import { directiveInit } from '@/core/lib/directive' 22 | import '@/assets/font-class/iconfont.css' 23 | // var Dracula = require('graphdracula') 24 | // console.log(Dracula) 25 | 26 | // Extras 27 | import qriously from 'vue-qriously' 28 | import * as system from '@/utils/system' 29 | import * as vExtend from './utils/vextend' 30 | 31 | Vue.prototype.routerPath = vExtend.routerPath 32 | 33 | directiveInit(Vue) 34 | router.beforeEach(routerHook) 35 | 36 | // 特殊需求 37 | window.vModuleArr = system.dataGet('modules', true) 38 | Vue.prototype.$moduleCheck = function (moduleName) { 39 | if (!window.vModuleArr || window.vModuleArr.constructor !== Array) { 40 | window.vModuleArr = system.dataGet('modules', true) 41 | } 42 | try { 43 | for (let i = 0; i < moduleName.length; i++) { 44 | if (window.vModuleArr.indexOf(moduleName[i]) === -1) { 45 | return false 46 | } 47 | } 48 | } catch (e) { 49 | return false 50 | } 51 | return true 52 | } 53 | // 对Date的扩展,将 Date 转化为指定格式的String 54 | // 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符, 55 | // 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字) 56 | // 例子: 57 | // (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423 58 | // (new Date()).Format("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18 59 | Date.prototype.Format = function(fmt) 60 | { 61 | var o = { 62 | "M+" : this.getMonth()+1, //月份 63 | "d+" : this.getDate(), //日 64 | "h+" : this.getHours(), //小时 65 | "m+" : this.getMinutes(), //分 66 | "s+" : this.getSeconds(), //秒 67 | "q+" : Math.floor((this.getMonth()+3)/3), //季度 68 | "S" : this.getMilliseconds() //毫秒 69 | }; 70 | if(/(y+)/.test(fmt)) 71 | fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length)); 72 | for(var k in o) 73 | if(new RegExp("("+ k +")").test(fmt)) 74 | fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length))); 75 | return fmt; 76 | } 77 | 78 | Vue.config.productionTip = false 79 | 80 | Vue.use(ElementUI, { size: 'small' }) 81 | Vue.use(qriously) 82 | 83 | /* eslint-disable no-new */ 84 | new Vue({ 85 | el: '#app', 86 | router, 87 | components: { App }, 88 | template: '', 89 | render: h => h(App) 90 | }) 91 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/radio.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-radio,.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.el-radio,.el-radio__input{white-space:nowrap;line-height:1;outline:0}.el-radio,.el-radio__inner,.el-radio__input{position:relative;display:inline-block}.el-radio{color:#606266;font-weight:500;cursor:pointer;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.el-radio.is-bordered{padding:12px 20px 0 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px}.el-radio.is-bordered.is-checked{border-color:#4B9E65}.el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:#ebeef5}.el-radio__input.is-disabled .el-radio__inner,.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:#f5f7fa;border-color:#e4e7ed}.el-radio.is-bordered+.el-radio.is-bordered{margin-left:10px}.el-radio--medium.is-bordered{padding:10px 20px 0 10px;border-radius:4px;height:36px}.el-radio--mini.is-bordered .el-radio__label,.el-radio--small.is-bordered .el-radio__label{font-size:12px}.el-radio--medium.is-bordered .el-radio__inner{height:14px;width:14px}.el-radio--small.is-bordered{padding:8px 15px 0 10px;border-radius:3px;height:32px}.el-radio--small.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio--mini.is-bordered{padding:6px 15px 0 10px;border-radius:3px;height:28px}.el-radio--mini.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio+.el-radio{margin-left:30px}.el-radio__input{cursor:pointer;vertical-align:middle}.el-radio__input.is-disabled .el-radio__inner{cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner::after{cursor:not-allowed;background-color:#f5f7fa}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner::after{background-color:#c0c4cc}.el-radio__input.is-disabled+span.el-radio__label{color:#c0c4cc;cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{border-color:#4B9E65;background:#4B9E65}.el-radio__input.is-checked .el-radio__inner::after{-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:#4B9E65}.el-radio__input.is-focus .el-radio__inner{border-color:#4B9E65}.el-radio__inner{border:1px solid #dcdfe6;border-radius:100%;width:14px;height:14px;background-color:#fff;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box}.el-radio__inner:hover{border-color:#4B9E65}.el-radio__inner::after{width:4px;height:4px;border-radius:100%;background-color:#fff;content:"";position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);-webkit-transition:-webkit-transform .15s ease-in;transition:-webkit-transform .15s ease-in;transition:transform .15s ease-in;transition:transform .15s ease-in,-webkit-transform .15s ease-in}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #4B9E65;box-shadow:0 0 2px 2px #4B9E65}.el-radio__label{font-size:14px;padding-left:10px} -------------------------------------------------------------------------------- /src/components/form/tinymce/gee/content.min.css: -------------------------------------------------------------------------------- 1 | body{background-color:#FFFFFF;color:#000000;bak-font-family:Verdana,Arial,Helvetica,sans-serif;bak-font-size:14px;scrollbar-3dlight-color:#F0F0EE;scrollbar-arrow-color:#676662;scrollbar-base-color:#F0F0EE;scrollbar-darkshadow-color:#DDDDDD;scrollbar-face-color:#E0E0DD;scrollbar-highlight-color:#F0F0EE;scrollbar-shadow-color:#F0F0EE;scrollbar-track-color:#F5F5F5}td,th{bak-font-family:Verdana,Arial,Helvetica,sans-serif;bak-font-size:14px}.mce-content-body .mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:black;bak-font-family:Arial;bak-font-size:11px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;line-height:normal;font-weight:normal;text-align:left;-webkit-tap-highlight-color:transparent;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-object{border:1px dotted #3A3A3A;background:#D5D5D5 url(img/object.gif) no-repeat center}.mce-preview-object{display:inline-block;position:relative;margin:0 2px 0 2px;line-height:0;border:1px solid gray}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-preview-object .mce-shim{position:absolute;top:0;left:0;width:100%;height:100%;background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}figure.align-left{float:left}figure.align-right{float:right}figure.image.align-center{display:table;margin-left:auto;margin-right:auto}figure.image{display:inline-block;border:1px solid gray;margin:0 2px 0 1px;background:#f5f2f0}figure.image img{margin:8px 8px 0 8px}figure.image figcaption{margin:6px 8px 6px 8px;text-align:center}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc li{list-style-type:none}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3A3A3A;background:#D5D5D5 url(img/anchor.gif) no-repeat center}.mce-nbsp,.mce-shy{background:#AAA}.mce-shy::after{content:'-'}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#3399ff;color:#fff}.mce-spellchecker-word{border-bottom:2px solid #F00;cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td[data-mce-selected],th[data-mce-selected]{background-color:#3399ff !important}.mce-edit-focus{outline:1px dotted #333}.mce-resize-bar-dragging{background-color:blue;opacity:.25;filter:alpha(opacity=25);zoom:1}.mce-content-body p,.mce-content-body div,.mce-content-body h1,.mce-content-body h2,.mce-content-body h3,.mce-content-body h4,.mce-content-body h5,.mce-content-body h6{line-height:1.2em}.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus{outline:2px solid #2d8ac7}.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover{outline:2px solid #7ACAFF}.mce-content-body *[contentEditable=false][data-mce-selected]{outline:2px solid #2d8ac7}.mce-content-body a[data-mce-selected],.mce-content-body code[data-mce-selected]{background:#bfe6ff}.mce-content-body hr{cursor:default} 2 | -------------------------------------------------------------------------------- /src/view/Osharp/security/popover/functionInfo.vue: -------------------------------------------------------------------------------- 1 | 41 | 42 | 111 | 112 | 115 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/icon.css: -------------------------------------------------------------------------------- 1 | @font-face{font-family:element-icons;src:url(fonts/element-icons.woff) format("woff"),url(fonts/element-icons.ttf) format("truetype");font-weight:400;font-style:normal}[class*=" el-icon-"],[class^=el-icon-]{font-family:element-icons!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;vertical-align:baseline;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-icon-info:before{content:"\e61a"}.el-icon-error:before{content:"\e62c"}.el-icon-success:before{content:"\e62d"}.el-icon-warning:before{content:"\e62e"}.el-icon-question:before{content:"\e634"}.el-icon-back:before{content:"\e606"}.el-icon-arrow-left:before{content:"\e600"}.el-icon-arrow-down:before{content:"\e603"}.el-icon-arrow-right:before{content:"\e604"}.el-icon-arrow-up:before{content:"\e605"}.el-icon-caret-left:before{content:"\e60a"}.el-icon-caret-bottom:before{content:"\e60b"}.el-icon-caret-top:before{content:"\e60c"}.el-icon-caret-right:before{content:"\e60e"}.el-icon-d-arrow-left:before{content:"\e610"}.el-icon-d-arrow-right:before{content:"\e613"}.el-icon-minus:before{content:"\e621"}.el-icon-plus:before{content:"\e62b"}.el-icon-remove:before{content:"\e635"}.el-icon-circle-plus:before{content:"\e601"}.el-icon-remove-outline:before{content:"\e63c"}.el-icon-circle-plus-outline:before{content:"\e602"}.el-icon-close:before{content:"\e60f"}.el-icon-check:before{content:"\e611"}.el-icon-circle-close:before{content:"\e607"}.el-icon-circle-check:before{content:"\e639"}.el-icon-circle-close-outline:before{content:"\e609"}.el-icon-circle-check-outline:before{content:"\e63e"}.el-icon-zoom-out:before{content:"\e645"}.el-icon-zoom-in:before{content:"\e641"}.el-icon-d-caret:before{content:"\e615"}.el-icon-sort:before{content:"\e640"}.el-icon-sort-down:before{content:"\e630"}.el-icon-sort-up:before{content:"\e631"}.el-icon-tickets:before{content:"\e63f"}.el-icon-document:before{content:"\e614"}.el-icon-goods:before{content:"\e618"}.el-icon-sold-out:before{content:"\e63b"}.el-icon-news:before{content:"\e625"}.el-icon-message:before{content:"\e61b"}.el-icon-date:before{content:"\e608"}.el-icon-printer:before{content:"\e62f"}.el-icon-time:before{content:"\e642"}.el-icon-bell:before{content:"\e622"}.el-icon-mobile-phone:before{content:"\e624"}.el-icon-service:before{content:"\e63a"}.el-icon-view:before{content:"\e643"}.el-icon-menu:before{content:"\e620"}.el-icon-more:before{content:"\e646"}.el-icon-more-outline:before{content:"\e626"}.el-icon-star-on:before{content:"\e637"}.el-icon-star-off:before{content:"\e63d"}.el-icon-location:before{content:"\e61d"}.el-icon-location-outline:before{content:"\e61f"}.el-icon-phone:before{content:"\e627"}.el-icon-phone-outline:before{content:"\e628"}.el-icon-picture:before{content:"\e629"}.el-icon-picture-outline:before{content:"\e62a"}.el-icon-delete:before{content:"\e612"}.el-icon-search:before{content:"\e619"}.el-icon-edit:before{content:"\e61c"}.el-icon-edit-outline:before{content:"\e616"}.el-icon-rank:before{content:"\e632"}.el-icon-refresh:before{content:"\e633"}.el-icon-share:before{content:"\e636"}.el-icon-setting:before{content:"\e638"}.el-icon-upload:before{content:"\e60d"}.el-icon-upload2:before{content:"\e644"}.el-icon-download:before{content:"\e617"}.el-icon-loading:before{content:"\e61e"}.el-icon-loading{-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@-webkit-keyframes rotating{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}100%{-webkit-transform:rotateZ(360deg);transform:rotateZ(360deg)}}@keyframes rotating{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}100%{-webkit-transform:rotateZ(360deg);transform:rotateZ(360deg)}} -------------------------------------------------------------------------------- /src/view/Osharp/identity/popover/roleConfig.vue: -------------------------------------------------------------------------------- 1 | 27 | 28 | 123 | 124 | 127 | 128 | 135 | -------------------------------------------------------------------------------- /src/view/Osharp/system/pack.vue: -------------------------------------------------------------------------------- 1 | 34 | 35 | 129 | 130 | 132 | -------------------------------------------------------------------------------- /src/components/popover/select.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 100 | 101 | 140 | -------------------------------------------------------------------------------- /src/router/index.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable*/ 2 | import Vue from 'vue' 3 | import Router from 'vue-router' 4 | import Layout from '@/core/Layout' 5 | import Blank from '@/core/blank' 6 | import { coreRoutes } from '@/router/core' 7 | 8 | Vue.use(Router) 9 | /** 10 | * Full Page Routes 11 | * Login/404/401.. 12 | * example: 13 | * { 14 | * path: '/login', 15 | * name: 'login' 16 | * component: () => import('Vue File Path') 17 | * } 18 | */ 19 | const fullPageRoutes = [ 20 | { 21 | path: '/login', 22 | name: 'login', 23 | meta: { title: '登陆', pass: true }, 24 | component: () => import('@/view/login/login.vue') 25 | }, 26 | { 27 | path: '/reg', 28 | name: 'reg', 29 | meta: { title: '注册', pass: true }, 30 | component: () => import('@/view/login/reg.vue') 31 | } 32 | ] 33 | /** 34 | * 1 35 | */ 36 | const currentRoutes = [ 37 | { 38 | path: '/', 39 | component: Layout, 40 | meta: {title: '首页'}, 41 | children: [ 42 | { path: 'default', name: 'default', component: () => import('@/view/default/index'), meta: {title: '首页', hidden: false} }, 43 | ] 44 | }, 45 | // { 46 | // path: '/test', 47 | // name: 'test', 48 | // meta: { title: 'Test' }, 49 | // component: Layout, 50 | // children: [ 51 | // { path: 'upload', name: 'testUpload', component: () => import('@/view/test/page/upload'), meta: {title: '演示上传'} }, 52 | // { path: 'list', name: 'testList', component: () => import('@/view/test/page/list'), meta: {title: '演示列表 - 页面', hidden: false} }, 53 | // { path: 'poplist', name: 'testpopList', component: () => import('@/view/test/pop/list'), meta: {title: '演示列表 - 弹窗', hidden: false} }, 54 | // { path: 'detail', name: 'testDetail', component: () => import('@/view/test/page/detail'), meta: {title: '演示详情', hidden: true} } 55 | // ] 56 | // }, 57 | { 58 | path: '/identity', 59 | name: 'identity', 60 | meta: { title: '身份认证' }, 61 | component: Layout, 62 | children: [ 63 | { path: 'user', name: 'identityUser', component: () => import('@/view/Osharp/identity/user'), meta: {title: '用户信息管理', hidden: false} }, 64 | { path: 'role', name: 'identityRole', component: () => import('@/view/Osharp/identity/role'), meta: {title: '角色信息管理', hidden: false} }, 65 | { path: 'user-role', name: 'identityUserRole', component: () => import('@/view/Osharp/identity/user-role'), meta: {title: '用户角色管理', hidden: false} }, 66 | ] 67 | }, 68 | { 69 | path: '/security', 70 | name: 'security', 71 | meta: { title: '权限安全' }, 72 | component: Layout, 73 | children: [ 74 | { path: 'module', name: 'securityModule', component: () => import('@/view/Osharp/security/module'), meta: {title: '模块信息管理', hidden: false} }, 75 | { path: 'function', name: 'securityFunction', component: () => import('@/view/Osharp/security/function'), meta: {title: '功能信息管理', hidden: false} }, 76 | { path: 'role-function', name: 'securityRoleFunction', component: () => import('@/view/Osharp/security/role-function'), meta: {title: '角色功能管理', hidden: false} }, 77 | { path: 'user-function', name: 'securityUserFunction', component: () => import('@/view/Osharp/security/user-function'), meta: {title: '用户功能管理', hidden: false} }, 78 | { path: 'entityinfo', name: 'securityentityinfo', component: () => import('@/view/Osharp/security/entityinfo'), meta: {title: '实体信息管理', hidden: false} }, 79 | { path: 'pack', name: 'systemPack', component: () => import('@/view/Osharp/system/pack'), meta: {title: '模块包', hidden: false} }, 80 | { path: 'audtEntity', name: 'systemAuditEntity', component: () => import('@/view/Osharp/system/auditEntity'), meta: {title: '数据审计', hidden: false} } 81 | ] 82 | } 83 | ] 84 | 85 | export default new Router({ 86 | routes: fullPageRoutes.concat(coreRoutes).concat(currentRoutes) 87 | }) 88 | export { currentRoutes } 89 | -------------------------------------------------------------------------------- /src/components/form/checkbox.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 116 | 117 | 142 | -------------------------------------------------------------------------------- /src/view/Osharp/identity/popover/roleInfo.vue: -------------------------------------------------------------------------------- 1 | 37 | 38 | 128 | 129 | 132 | -------------------------------------------------------------------------------- /src/components/form/tinymce.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 98 | 99 | 132 | -------------------------------------------------------------------------------- /src/view/Osharp/security/function.vue: -------------------------------------------------------------------------------- 1 | 43 | 44 | 141 | 142 | 144 | -------------------------------------------------------------------------------- /src/utils/system.js: -------------------------------------------------------------------------------- 1 | import Cookie from 'js-cookie' 2 | import { currentRoutes } from '@/router/index' 3 | 4 | const varScope = '_gee_var_' 5 | const dataScope = '_gee_data_' 6 | var globalVar = window[varScope] || {} 7 | // var USER_PERMISSION = 'userPermission' 8 | 9 | class Consts { 10 | // onMobile = innerWidth <= 640 11 | constructor (arg) { 12 | this.onMobile = innerWidth <= 640 13 | let self = this 14 | window.addEventListener('resize', () => { 15 | self.onMobile = innerWidth <= 640 16 | }) 17 | } 18 | } 19 | 20 | export { Consts } 21 | 22 | export function cookieSet (key, value, opt) { 23 | Cookie.set(key, value, opt) 24 | } 25 | export function cookieGet (key) { 26 | return Cookie.get(key) 27 | } 28 | export function setXToken (token) { 29 | Cookie.set('XToken', token) 30 | } 31 | export function getXToken (token) { 32 | return Cookie.get('XToken') || false 33 | } 34 | export function removeXToken () { 35 | Cookie.remove('XToken') 36 | } 37 | export function varSet (key, val) { 38 | globalVar[key] = val 39 | } 40 | export function varGet (key) { 41 | return globalVar[key] 42 | } 43 | export function varModel () { 44 | return globalVar 45 | } 46 | export function dataSet (key, val, disableXToken) { 47 | var dataKey = dataScope + (disableXToken ? '' : Cookie.get('XToken')) + key 48 | if (typeof val === 'object') { 49 | val = encodeURI(JSON.stringify(val)) 50 | } 51 | localStorage.setItem(dataKey, val) 52 | if (key === 'auth') { 53 | localStorage.setItem('auth-time', new Date().getTime()+45*60*1000) 54 | } 55 | } 56 | export function dataGet (key, disableXToken) { 57 | var dataKey = dataScope + (disableXToken ? '' : Cookie.get('XToken')) + key 58 | var dataVal = localStorage.getItem(dataKey) 59 | try { 60 | dataVal = JSON.parse(decodeURI(dataVal)) 61 | } catch (e) { 62 | // nothing 63 | } 64 | if (key === 'auth') { 65 | let dt = parseInt(localStorage.getItem('auth-time')) 66 | if (new Date().getTime() > dt && localStorage.getItem('auth')) { 67 | alert('登陆过期,重新登陆') 68 | localStorage.clear() 69 | location.reload() 70 | } else { 71 | localStorage.setItem('auth-time', new Date().getTime()+45*60*1000) 72 | } 73 | } 74 | return dataVal 75 | } 76 | export function dataRemove (key, disableXToken) { 77 | localStorage.removeItem(dataScope + (disableXToken ? '' : Cookie.get('XToken')) + key) 78 | } 79 | export function getRoutesTable () { 80 | var navRoutes = [] 81 | var pageRoutes = [] 82 | for (let i = 0; i < currentRoutes.length; i++) { 83 | if (currentRoutes[i].name && currentRoutes[i].meta && currentRoutes[i].meta.title) { 84 | navRoutes.push({ 85 | name: currentRoutes[i].name, 86 | title: currentRoutes[i].meta.title, 87 | hidden: currentRoutes[i].meta.hidden, 88 | path: currentRoutes[i].path 89 | }) 90 | if (!currentRoutes[i].children) { 91 | pageRoutes.push({ 92 | name: currentRoutes[i].name, 93 | title: currentRoutes[i].meta.title, 94 | path: currentRoutes[i].path 95 | }) 96 | } else { 97 | let routesItem = currentRoutes[i] 98 | for (let j = 0; j < routesItem.children.length; j++) { 99 | if (routesItem.children[j].name && routesItem.children[j].meta && routesItem.children[j].meta.title) { 100 | pageRoutes.push({ 101 | name: routesItem.children[j].name, 102 | title: routesItem.children[j].meta.title, 103 | hidden: routesItem.children[j].meta.hidden, 104 | supName: routesItem.name, 105 | path: routesItem.path + '/' + routesItem.children[j].path 106 | }) 107 | } 108 | } 109 | } 110 | } else if (currentRoutes[i].children.length === 1) { 111 | navRoutes.push({ 112 | name: currentRoutes[i].children[0].name, 113 | title: currentRoutes[i].children[0].meta.title, 114 | hidden: currentRoutes[i].children[0].meta.hidden, 115 | path: currentRoutes[i].children[0].path 116 | }) 117 | pageRoutes.push({ 118 | name: currentRoutes[i].children[0].name, 119 | title: currentRoutes[i].children[0].meta.title, 120 | hidden: currentRoutes[i].children[0].meta.hidden, 121 | path: currentRoutes[i].children[0].path 122 | }) 123 | } 124 | } 125 | return { 126 | nav: navRoutes, 127 | page: pageRoutes 128 | } 129 | } 130 | -------------------------------------------------------------------------------- /src/view/Osharp/security/entityinfo.vue: -------------------------------------------------------------------------------- 1 | 36 | 37 | 148 | 149 | 151 | -------------------------------------------------------------------------------- /src/view/Osharp/identity/popover/userInfo.vue: -------------------------------------------------------------------------------- 1 | 43 | 44 | 140 | 141 | 144 | -------------------------------------------------------------------------------- /src/view/Osharp/identity/user-role.vue: -------------------------------------------------------------------------------- 1 | 35 | 36 | 154 | 155 | 157 | -------------------------------------------------------------------------------- /src/core/style/4B9E65/step.css: -------------------------------------------------------------------------------- 1 | .el-step{position:relative;-ms-flex-negative:1;flex-shrink:1}.el-step:last-of-type .el-step__line{display:none}.el-step:last-of-type.is-flex{-ms-flex-preferred-size:auto!important;flex-basis:auto!important;-ms-flex-negative:0;flex-shrink:0;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.el-step:last-of-type .el-step__description,.el-step:last-of-type .el-step__main{padding-right:0}.el-step__head{position:relative;width:100%}.el-step__head.is-process{color:#303133;border-color:#303133}.el-step__head.is-wait{color:#c0c4cc;border-color:#c0c4cc}.el-step__head.is-success{color:#67c23a;border-color:#67c23a}.el-step__head.is-error{color:#f56c6c;border-color:#f56c6c}.el-step__head.is-finish{color:#4B9E65;border-color:#4B9E65}.el-step__icon{position:relative;z-index:1;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:24px;height:24px;font-size:14px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#fff;-webkit-transition:.15s ease-out;transition:.15s ease-out}.el-step__icon.is-text{border-radius:50%;border:2px solid;border-color:inherit}.el-step__icon.is-icon{width:40px}.el-step__icon-inner{display:inline-block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:25px;font-weight:400}.el-step__icon-inner.is-status{-webkit-transform:translateY(1px);transform:translateY(1px)}.el-step__line{position:absolute;border-color:inherit;background-color:#c0c4cc}.el-step__line-inner{display:block;border-width:1px;border-style:solid;border-color:inherit;-webkit-transition:.15s ease-out;transition:.15s ease-out;-webkit-box-sizing:border-box;box-sizing:border-box;width:0;height:0}.el-step__main{white-space:normal;text-align:left}.el-step__title{font-size:16px;line-height:38px}.el-step__title.is-process{font-weight:700;color:#303133}.el-step__title.is-wait{color:#c0c4cc}.el-step__title.is-success{color:#67c23a}.el-step__title.is-error{color:#f56c6c}.el-step__title.is-finish{color:#4B9E65}.el-step__description{padding-right:10%;margin-top:-5px;font-size:12px;line-height:20px;font-weight:400}.el-step__description.is-process{color:#303133}.el-step__description.is-wait{color:#c0c4cc}.el-step__description.is-success{color:#67c23a}.el-step__description.is-error{color:#f56c6c}.el-step__description.is-finish{color:#4B9E65}.el-step.is-horizontal{display:inline-block}.el-step.is-horizontal .el-step__line{height:2px;top:11px;left:0;right:0}.el-step.is-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.el-step.is-vertical .el-step__head{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;width:24px}.el-step.is-vertical .el-step__main{padding-left:10px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.el-step.is-vertical .el-step__title{line-height:24px;padding-bottom:8px}.el-step.is-vertical .el-step__line{width:2px;top:0;bottom:0;left:11px}.el-step.is-vertical .el-step__icon.is-icon{width:24px}.el-step.is-center .el-step__head,.el-step.is-center .el-step__main{text-align:center}.el-step.is-center .el-step__description{padding-left:20%;padding-right:20%}.el-step.is-center .el-step__line{left:50%;right:-50%}.el-step.is-simple{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-step.is-simple .el-step__head{width:auto;font-size:0;padding-right:10px}.el-step.is-simple .el-step__icon{background:0 0;width:16px;height:16px;font-size:12px}.el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:18px}.el-step.is-simple .el-step__icon-inner.is-status{-webkit-transform:scale(.8) translateY(1px);transform:scale(.8) translateY(1px)}.el-step.is-simple .el-step__main{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.el-step.is-simple .el-step__title{font-size:16px;line-height:20px}.el-step.is-simple:not(:last-of-type) .el-step__title{max-width:50%;word-break:break-all}.el-step.is-simple .el-step__arrow{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-step.is-simple .el-step__arrow::after,.el-step.is-simple .el-step__arrow::before{content:'';display:inline-block;position:absolute;height:15px;width:1px;background:#c0c4cc}.el-step.is-simple .el-step__arrow::before{-webkit-transform:rotate(-45deg) translateY(-4px);transform:rotate(-45deg) translateY(-4px);-webkit-transform-origin:0 0;transform-origin:0 0}.el-step.is-simple .el-step__arrow::after{-webkit-transform:rotate(45deg) translateY(4px);transform:rotate(45deg) translateY(4px);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.el-step.is-simple:last-of-type .el-step__arrow{display:none} -------------------------------------------------------------------------------- /src/view/Osharp/security/module.vue: -------------------------------------------------------------------------------- 1 | 44 | 45 | 138 | 139 | 142 | -------------------------------------------------------------------------------- /src/view/Osharp/security/role-function.vue: -------------------------------------------------------------------------------- 1 | 44 | 45 | 143 | 144 | 147 | -------------------------------------------------------------------------------- /src/view/Osharp/identity/popover/userConfig.vue: -------------------------------------------------------------------------------- 1 | 39 | 40 | 173 | 174 | 177 | 178 | 185 | --------------------------------------------------------------------------------