From e16dcdc048e57bb99149bb01b877296abcd43177 Mon Sep 17 00:00:00 2001 From: herenshan112 Date: Wed, 2 Nov 2022 15:23:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .editorconfig | 14 + .env.development | 7 + .env.production | 7 + .env.staging | 10 + .eslintignore | 4 + .eslintrc.js | 199 ++ .gitignore | 16 + .travis.yml | 5 + LICENSE | 21 + README-zh.md | 111 + babel.config.js | 14 + build/index.js | 35 + jest.config.js | 24 + jsconfig.json | 9 + mock/index.js | 57 + mock/mock-server.js | 81 + mock/table.js | 29 + mock/user.js | 84 + mock/utils.js | 25 + package.json | 63 + postcss.config.js | 8 + public/--favicon.ico | Bin 0 -> 67646 bytes public/favicon.ico | Bin 0 -> 73507 bytes public/index.html | 19 + src/App.vue | 61 + src/__layout/components/AppMain.vue | 44 + src/__layout/components/Navbar.vue | 155 + src/__layout/components/Sidebar/FixiOSBug.js | 26 + src/__layout/components/Sidebar/Item.vue | 41 + src/__layout/components/Sidebar/Link.vue | 54 + src/__layout/components/Sidebar/Logo.vue | 82 + .../components/Sidebar/SidebarItem.vue | 95 + src/__layout/components/Sidebar/index.vue | 56 + src/__layout/components/index.js | 3 + src/__layout/index.vue | 93 + src/__layout/mixin/ResizeHandler copy.js | 45 + src/__layout/mixin/ResizeHandler.js | 45 + src/api/api/dutys.js | 273 ++ src/api/api/group.js | 24 + src/api/api/login/login.js | 26 + src/api/api/renwu.js | 75 + src/api/api/table.js | 9 + src/api/api/user.js | 73 + src/api/duty/dimension.js | 42 + src/api/duty/duty.js | 418 +++ src/api/duty/group.js | 162 ++ src/api/duty/gwDingXing.js | 146 + src/api/duty/gwFangan.js | 59 + src/api/duty/oldGwDingXing.js | 91 + src/api/duty/project.js | 154 + src/api/duty/projectNew.js | 196 ++ src/api/duty/quanXian.js | 59 + src/api/duty/quantitativeIndicators.js | 42 + src/api/duty/rules.js | 83 + src/api/dutys.js | 89 + src/api/echarts/echarts.js | 49 + src/api/group.js | 32 + src/api/honer.js | 81 + src/api/personnel/post.js | 292 ++ src/api/table.js | 9 + src/api/user.js | 172 ++ src/assets/404_images/404.png | Bin 0 -> 98071 bytes src/assets/404_images/404_cloud.png | Bin 0 -> 4766 bytes src/assets/404_images/dashbord.png | Bin 0 -> 72153 bytes src/assets/404_images/login_background.jpg | Bin 0 -> 41154 bytes src/assets/404_images/login_background.svg | 33 + src/assets/404_images/login_left.svg | 123 + src/assets/404_images/logo.jpg | Bin 0 -> 27616 bytes src/assets/404_images/logo.png | Bin 0 -> 8060 bytes src/assets/404_images/logo_login.png | Bin 0 -> 25312 bytes src/components/Breadcrumb/index.vue | 78 + src/components/Hamburger/index.vue | 44 + src/components/SvgIcon/index.vue | 62 + src/components/projectDialog/index.vue | 151 + src/icons/index.js | 9 + src/icons/svg/dashboard.svg | 1 + src/icons/svg/example.svg | 1 + src/icons/svg/eye-open.svg | 1 + src/icons/svg/eye.svg | 1 + src/icons/svg/form.svg | 1 + src/icons/svg/link.svg | 1 + src/icons/svg/nested.svg | 1 + src/icons/svg/password.svg | 1 + src/icons/svg/table.svg | 1 + src/icons/svg/tree.svg | 1 + src/icons/svg/user.svg | 1 + src/icons/svgo.yml | 22 + src/layout/components/AppMain.vue | 48 + src/layout/components/Navbar.vue | 154 + src/layout/components/Sidebar/FixiOSBug.js | 26 + src/layout/components/Sidebar/Item.vue | 41 + src/layout/components/Sidebar/Link.vue | 49 + src/layout/components/Sidebar/Logo.vue | 82 + .../components/Sidebar/SidebarItem copy.vue | 95 + src/layout/components/Sidebar/SidebarItem.vue | 95 + src/layout/components/Sidebar/index.vue | 95 + .../components/Sidebar/subMenu copy.vue | 42 + src/layout/components/Sidebar/subMenu.vue | 44 + src/layout/components/TagsView/ScrollPane.vue | 94 + src/layout/components/TagsView/index.vue | 294 ++ .../components/historyComponent/history.vue | 326 +++ src/layout/components/index.js | 3 + src/layout/index.vue | 107 + src/layout/mixin/ResizeHandler copy.js | 45 + src/layout/mixin/ResizeHandler.js | 45 + src/main.js | 60 + src/mixins/infoList.js | 75 + src/permission.js | 80 + src/router/__index.js | 164 ++ src/router/index.js | 446 +++ src/settings.js | 16 + src/store/getters.js | 8 + src/store/index.js | 19 + src/store/modules/app.js | 48 + src/store/modules/settings.js | 32 + src/store/modules/user.js | 120 + src/styles/element-ui.scss | 49 + src/styles/index.scss | 65 + src/styles/mixin.scss | 28 + src/styles/sidebar.scss | 226 ++ src/styles/transition.scss | 48 + src/styles/variables.scss | 25 + src/utils/auth.js | 27 + src/utils/bus.js | 6 + src/utils/date.js | 30 + src/utils/get-page-title.js | 10 + src/utils/i18n.js | 12 + src/utils/index.js | 117 + src/utils/request.js | 108 + src/utils/request1.js | 89 + src/utils/requestFile.js | 89 + src/utils/validate.js | 20 + src/views/404.vue | 228 ++ src/views/approval/aaa.vue | 129 + src/views/approval/bbb.vue | 17 + src/views/approval/index.vue | 220 ++ src/views/approvalData/index.vue | 743 +++++ .../assessmentProgram/assessmentDimension.vue | 326 +++ .../assessmentProgram/departmentBase.vue | 465 +++ .../departmentalAssessment copy.vue | 1204 ++++++++ .../departmentalAssessment.vue | 1829 ++++++++++++ .../gwDepartmentalAssessment.vue | 2105 ++++++++++++++ .../gwQualitativeIndicators.vue | 2523 ++++++++++++++++ src/views/assessmentProgram/jobEntry.vue | 326 +++ src/views/assessmentProgram/project.vue | 481 ++++ .../qualitativeIndicators copy 2.vue | 725 +++++ .../qualitativeIndicators copy.vue | 679 +++++ .../qualitativeIndicators.vue | 2216 ++++++++++++++ .../qualitativeIndicatorsBase.vue | 464 +++ .../quantitativeIndicators.vue | 901 ++++++ src/views/assessmentProgram/rules.vue | 409 +++ src/views/assessmentProgram/subSection.vue | 373 +++ .../basicInfo copy/assessmentDimension.vue | 326 +++ src/views/basicInfo copy/jobEntry.vue | 326 +++ src/views/basicInfo copy/project.vue | 472 +++ .../basicInfo copy/qualitativeIndicators.vue | 431 +++ .../basicInfo copy/quantitativeIndicators.vue | 432 +++ src/views/basicInfo/assessmentDimension.vue | 334 +++ src/views/basicInfo/assessmentIndicators.vue | 334 +++ src/views/basicInfo/gwProject copy.vue | 899 ++++++ src/views/basicInfo/gwProject.vue | 1009 +++++++ src/views/basicInfo/gwTarget.vue | 1247 ++++++++ src/views/basicInfo/jobEntry.vue | 326 +++ src/views/basicInfo/project.vue | 887 ++++++ src/views/basicInfo/projectBase.vue | 464 +++ src/views/basicInfo/qualitativeIndicators.vue | 437 +++ .../basicInfo/quantitativeIndicators.vue | 432 +++ src/views/basicInfo/target.vue | 1246 ++++++++ src/views/basicInfo/targetBase.vue | 465 +++ src/views/basicInfo/workspace.code-workspace | 7 + src/views/ce/index.vue | 49 + src/views/course/courseware.vue | 363 +++ src/views/dashboard/index copy 2.vue | 502 ++++ src/views/dashboard/index copy.vue | 87 + src/views/dashboard/index.vue | 517 ++++ src/views/dataReporting/departmentKpi.vue | 0 .../dataReporting/operationalEvaluation.vue | 0 src/views/dataReporting/personalKpi.vue | 0 src/views/echarts/echarts.vue | 679 +++++ src/views/echarts/echarts1.vue | 824 ++++++ src/views/echarts/table.vue | 1479 ++++++++++ src/views/echarts/total.vue | 883 ++++++ src/views/form/index.vue | 85 + src/views/frontPage/index.vue | 1976 +++++++++++++ src/views/honor/index.vue | 680 +++++ src/views/honor/type.vue | 333 +++ src/views/hr/jobTitle.vue | 386 +++ src/views/hr/organization.vue | 484 ++++ src/views/hr/organizeType.vue | 360 +++ src/views/hr/personnel.vue | 2542 +++++++++++++++++ src/views/hr/position.vue | 330 +++ src/views/hr/team.vue | 323 +++ src/views/index.vue | 145 + src/views/login/index copy.vue | 237 ++ src/views/login/index.vue | 318 +++ src/views/login/wxLogin.vue | 382 +++ src/views/lunbo/index.vue | 61 + src/views/menuSettings/index.vue | 417 +++ src/views/mete/index.vue | 581 ++++ src/views/nested/menu1/index.vue | 7 + src/views/nested/menu1/menu1-1/index.vue | 7 + src/views/nested/menu1/menu1-2/index.vue | 7 + .../nested/menu1/menu1-2/menu1-2-1/index.vue | 5 + .../nested/menu1/menu1-2/menu1-2-2/index.vue | 5 + src/views/nested/menu1/menu1-3/index.vue | 5 + src/views/nested/menu2/index.vue | 5 + src/views/permission/permissionSetting.vue | 332 +++ src/views/permission/xiTong.vue | 335 +++ src/views/personnel/post/index.vue | 688 +++++ src/views/qualitative/index copy.vue | 518 ++++ src/views/qualitative/index.vue | 1306 +++++++++ src/views/record/details.vue | 218 ++ src/views/record/index.vue | 172 ++ src/views/roleSetting/index.vue | 416 +++ src/views/table/index.vue | 79 + src/views/tree/index.vue | 78 + src/workspace.code-workspace | 10 + tests/unit/.eslintrc.js | 5 + tests/unit/components/Breadcrumb.spec.js | 98 + tests/unit/components/Hamburger.spec.js | 18 + tests/unit/components/SvgIcon.spec.js | 22 + tests/unit/utils/formatTime.spec.js | 30 + tests/unit/utils/param2Obj.spec.js | 14 + tests/unit/utils/parseTime.spec.js | 35 + tests/unit/utils/validate.spec.js | 17 + vue.config.js | 125 + workspace.code-workspace | 10 + 227 files changed, 54560 insertions(+) create mode 100644 .editorconfig create mode 100644 .env.development create mode 100644 .env.production create mode 100644 .env.staging create mode 100644 .eslintignore create mode 100644 .eslintrc.js create mode 100644 .gitignore create mode 100644 .travis.yml create mode 100644 LICENSE create mode 100644 README-zh.md create mode 100644 babel.config.js create mode 100644 build/index.js create mode 100644 jest.config.js create mode 100644 jsconfig.json create mode 100644 mock/index.js create mode 100644 mock/mock-server.js create mode 100644 mock/table.js create mode 100644 mock/user.js create mode 100644 mock/utils.js create mode 100644 package.json create mode 100644 postcss.config.js create mode 100644 public/--favicon.ico create mode 100644 public/favicon.ico create mode 100644 public/index.html create mode 100644 src/App.vue create mode 100644 src/__layout/components/AppMain.vue create mode 100644 src/__layout/components/Navbar.vue create mode 100644 src/__layout/components/Sidebar/FixiOSBug.js create mode 100644 src/__layout/components/Sidebar/Item.vue create mode 100644 src/__layout/components/Sidebar/Link.vue create mode 100644 src/__layout/components/Sidebar/Logo.vue create mode 100644 src/__layout/components/Sidebar/SidebarItem.vue create mode 100644 src/__layout/components/Sidebar/index.vue create mode 100644 src/__layout/components/index.js create mode 100644 src/__layout/index.vue create mode 100644 src/__layout/mixin/ResizeHandler copy.js create mode 100644 src/__layout/mixin/ResizeHandler.js create mode 100644 src/api/api/dutys.js create mode 100644 src/api/api/group.js create mode 100644 src/api/api/login/login.js create mode 100644 src/api/api/renwu.js create mode 100644 src/api/api/table.js create mode 100644 src/api/api/user.js create mode 100644 src/api/duty/dimension.js create mode 100644 src/api/duty/duty.js create mode 100644 src/api/duty/group.js create mode 100644 src/api/duty/gwDingXing.js create mode 100644 src/api/duty/gwFangan.js create mode 100644 src/api/duty/oldGwDingXing.js create mode 100644 src/api/duty/project.js create mode 100644 src/api/duty/projectNew.js create mode 100644 src/api/duty/quanXian.js create mode 100644 src/api/duty/quantitativeIndicators.js create mode 100644 src/api/duty/rules.js create mode 100644 src/api/dutys.js create mode 100644 src/api/echarts/echarts.js create mode 100644 src/api/group.js create mode 100644 src/api/honer.js create mode 100644 src/api/personnel/post.js create mode 100644 src/api/table.js create mode 100644 src/api/user.js create mode 100644 src/assets/404_images/404.png create mode 100644 src/assets/404_images/404_cloud.png create mode 100644 src/assets/404_images/dashbord.png create mode 100644 src/assets/404_images/login_background.jpg create mode 100644 src/assets/404_images/login_background.svg create mode 100644 src/assets/404_images/login_left.svg create mode 100644 src/assets/404_images/logo.jpg create mode 100644 src/assets/404_images/logo.png create mode 100644 src/assets/404_images/logo_login.png create mode 100644 src/components/Breadcrumb/index.vue create mode 100644 src/components/Hamburger/index.vue create mode 100644 src/components/SvgIcon/index.vue create mode 100644 src/components/projectDialog/index.vue create mode 100644 src/icons/index.js create mode 100644 src/icons/svg/dashboard.svg create mode 100644 src/icons/svg/example.svg create mode 100644 src/icons/svg/eye-open.svg create mode 100644 src/icons/svg/eye.svg create mode 100644 src/icons/svg/form.svg create mode 100644 src/icons/svg/link.svg create mode 100644 src/icons/svg/nested.svg create mode 100644 src/icons/svg/password.svg create mode 100644 src/icons/svg/table.svg create mode 100644 src/icons/svg/tree.svg create mode 100644 src/icons/svg/user.svg create mode 100644 src/icons/svgo.yml create mode 100644 src/layout/components/AppMain.vue create mode 100644 src/layout/components/Navbar.vue create mode 100644 src/layout/components/Sidebar/FixiOSBug.js create mode 100644 src/layout/components/Sidebar/Item.vue create mode 100644 src/layout/components/Sidebar/Link.vue create mode 100644 src/layout/components/Sidebar/Logo.vue create mode 100644 src/layout/components/Sidebar/SidebarItem copy.vue create mode 100644 src/layout/components/Sidebar/SidebarItem.vue create mode 100644 src/layout/components/Sidebar/index.vue create mode 100644 src/layout/components/Sidebar/subMenu copy.vue create mode 100644 src/layout/components/Sidebar/subMenu.vue create mode 100644 src/layout/components/TagsView/ScrollPane.vue create mode 100644 src/layout/components/TagsView/index.vue create mode 100644 src/layout/components/historyComponent/history.vue create mode 100644 src/layout/components/index.js create mode 100644 src/layout/index.vue create mode 100644 src/layout/mixin/ResizeHandler copy.js create mode 100644 src/layout/mixin/ResizeHandler.js create mode 100644 src/main.js create mode 100644 src/mixins/infoList.js create mode 100644 src/permission.js create mode 100644 src/router/__index.js create mode 100644 src/router/index.js create mode 100644 src/settings.js create mode 100644 src/store/getters.js create mode 100644 src/store/index.js create mode 100644 src/store/modules/app.js create mode 100644 src/store/modules/settings.js create mode 100644 src/store/modules/user.js create mode 100644 src/styles/element-ui.scss create mode 100644 src/styles/index.scss create mode 100644 src/styles/mixin.scss create mode 100644 src/styles/sidebar.scss create mode 100644 src/styles/transition.scss create mode 100644 src/styles/variables.scss create mode 100644 src/utils/auth.js create mode 100644 src/utils/bus.js create mode 100644 src/utils/date.js create mode 100644 src/utils/get-page-title.js create mode 100644 src/utils/i18n.js create mode 100644 src/utils/index.js create mode 100644 src/utils/request.js create mode 100644 src/utils/request1.js create mode 100644 src/utils/requestFile.js create mode 100644 src/utils/validate.js create mode 100644 src/views/404.vue create mode 100644 src/views/approval/aaa.vue create mode 100644 src/views/approval/bbb.vue create mode 100644 src/views/approval/index.vue create mode 100644 src/views/approvalData/index.vue create mode 100644 src/views/assessmentProgram/assessmentDimension.vue create mode 100644 src/views/assessmentProgram/departmentBase.vue create mode 100644 src/views/assessmentProgram/departmentalAssessment copy.vue create mode 100644 src/views/assessmentProgram/departmentalAssessment.vue create mode 100644 src/views/assessmentProgram/gwDepartmentalAssessment.vue create mode 100644 src/views/assessmentProgram/gwQualitativeIndicators.vue create mode 100644 src/views/assessmentProgram/jobEntry.vue create mode 100644 src/views/assessmentProgram/project.vue create mode 100644 src/views/assessmentProgram/qualitativeIndicators copy 2.vue create mode 100644 src/views/assessmentProgram/qualitativeIndicators copy.vue create mode 100644 src/views/assessmentProgram/qualitativeIndicators.vue create mode 100644 src/views/assessmentProgram/qualitativeIndicatorsBase.vue create mode 100644 src/views/assessmentProgram/quantitativeIndicators.vue create mode 100644 src/views/assessmentProgram/rules.vue create mode 100644 src/views/assessmentProgram/subSection.vue create mode 100644 src/views/basicInfo copy/assessmentDimension.vue create mode 100644 src/views/basicInfo copy/jobEntry.vue create mode 100644 src/views/basicInfo copy/project.vue create mode 100644 src/views/basicInfo copy/qualitativeIndicators.vue create mode 100644 src/views/basicInfo copy/quantitativeIndicators.vue create mode 100644 src/views/basicInfo/assessmentDimension.vue create mode 100644 src/views/basicInfo/assessmentIndicators.vue create mode 100644 src/views/basicInfo/gwProject copy.vue create mode 100644 src/views/basicInfo/gwProject.vue create mode 100644 src/views/basicInfo/gwTarget.vue create mode 100644 src/views/basicInfo/jobEntry.vue create mode 100644 src/views/basicInfo/project.vue create mode 100644 src/views/basicInfo/projectBase.vue create mode 100644 src/views/basicInfo/qualitativeIndicators.vue create mode 100644 src/views/basicInfo/quantitativeIndicators.vue create mode 100644 src/views/basicInfo/target.vue create mode 100644 src/views/basicInfo/targetBase.vue create mode 100644 src/views/basicInfo/workspace.code-workspace create mode 100644 src/views/ce/index.vue create mode 100644 src/views/course/courseware.vue create mode 100644 src/views/dashboard/index copy 2.vue create mode 100644 src/views/dashboard/index copy.vue create mode 100644 src/views/dashboard/index.vue create mode 100644 src/views/dataReporting/departmentKpi.vue create mode 100644 src/views/dataReporting/operationalEvaluation.vue create mode 100644 src/views/dataReporting/personalKpi.vue create mode 100644 src/views/echarts/echarts.vue create mode 100644 src/views/echarts/echarts1.vue create mode 100644 src/views/echarts/table.vue create mode 100644 src/views/echarts/total.vue create mode 100644 src/views/form/index.vue create mode 100644 src/views/frontPage/index.vue create mode 100644 src/views/honor/index.vue create mode 100644 src/views/honor/type.vue create mode 100644 src/views/hr/jobTitle.vue create mode 100644 src/views/hr/organization.vue create mode 100644 src/views/hr/organizeType.vue create mode 100644 src/views/hr/personnel.vue create mode 100644 src/views/hr/position.vue create mode 100644 src/views/hr/team.vue create mode 100644 src/views/index.vue create mode 100644 src/views/login/index copy.vue create mode 100644 src/views/login/index.vue create mode 100644 src/views/login/wxLogin.vue create mode 100644 src/views/lunbo/index.vue create mode 100644 src/views/menuSettings/index.vue create mode 100644 src/views/mete/index.vue create mode 100644 src/views/nested/menu1/index.vue create mode 100644 src/views/nested/menu1/menu1-1/index.vue create mode 100644 src/views/nested/menu1/menu1-2/index.vue create mode 100644 src/views/nested/menu1/menu1-2/menu1-2-1/index.vue create mode 100644 src/views/nested/menu1/menu1-2/menu1-2-2/index.vue create mode 100644 src/views/nested/menu1/menu1-3/index.vue create mode 100644 src/views/nested/menu2/index.vue create mode 100644 src/views/permission/permissionSetting.vue create mode 100644 src/views/permission/xiTong.vue create mode 100644 src/views/personnel/post/index.vue create mode 100644 src/views/qualitative/index copy.vue create mode 100644 src/views/qualitative/index.vue create mode 100644 src/views/record/details.vue create mode 100644 src/views/record/index.vue create mode 100644 src/views/roleSetting/index.vue create mode 100644 src/views/table/index.vue create mode 100644 src/views/tree/index.vue create mode 100644 src/workspace.code-workspace create mode 100644 tests/unit/.eslintrc.js create mode 100644 tests/unit/components/Breadcrumb.spec.js create mode 100644 tests/unit/components/Hamburger.spec.js create mode 100644 tests/unit/components/SvgIcon.spec.js create mode 100644 tests/unit/utils/formatTime.spec.js create mode 100644 tests/unit/utils/param2Obj.spec.js create mode 100644 tests/unit/utils/parseTime.spec.js create mode 100644 tests/unit/utils/validate.spec.js create mode 100644 vue.config.js create mode 100644 workspace.code-workspace diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..ea6e20f --- /dev/null +++ b/.editorconfig @@ -0,0 +1,14 @@ +# http://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +insert_final_newline = false +trim_trailing_whitespace = false diff --git a/.env.development b/.env.development new file mode 100644 index 0000000..19f177b --- /dev/null +++ b/.env.development @@ -0,0 +1,7 @@ +# just a flag +ENV = 'development' + +# base api +VUE_APP_BASE_API = 'http://vue.admin.net/api' +VUE_APP_BASE_API1 = 'http://vue.admin.net/hrapi' +VUE_APP_BASE_API2 = 'http://vue.admin.net/fileapi' diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..385721d --- /dev/null +++ b/.env.production @@ -0,0 +1,7 @@ +# just a flag +ENV = 'production' + +# base api +VUE_APP_BASE_API = 'http://ginadmin.hxgk.group/api' +VUE_APP_BASE_API1 = 'http://ginadmin.hxgk.group/hrapi' +VUE_APP_BASE_API2 = 'http://ginadmin.hxgk.group/fileapi' diff --git a/.env.staging b/.env.staging new file mode 100644 index 0000000..f44b823 --- /dev/null +++ b/.env.staging @@ -0,0 +1,10 @@ +NODE_ENV = production + +# just a flag +ENV = 'staging' + +# base api +VUE_APP_BASE_API = 'http://kpi.hxgk.net/api' +VUE_APP_BASE_API1 = 'http://kpi.hxgk.net/hrapi' +VUE_APP_BASE_API2 = 'http://kpi.hxgk.net/fileapi' + diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..e6529fc --- /dev/null +++ b/.eslintignore @@ -0,0 +1,4 @@ +build/*.js +src/assets +public +dist diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..222bf49 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,199 @@ +module.exports = { + root: true, + parserOptions: { + parser: 'babel-eslint', + sourceType: 'module', + "requireConfigFile":false + }, + env: { + browser: true, + node: true, + es6: true, + }, + extends: ['plugin:vue/recommended', 'eslint:recommended'], + + // add your custom rules here + //it is base on https://github.com/vuejs/eslint-config-vue + rules: { + "vue/max-attributes-per-line": [2, { + "singleline": 10, + "multiline": { + "max": 1, + "allowFirstLine": false + } + }], + "vue/singleline-html-element-content-newline": "off", + "vue/multiline-html-element-content-newline":"off", + "vue/name-property-casing": ["error", "PascalCase"], + "vue/no-v-html": "off", + 'accessor-pairs': 2, + 'arrow-spacing': [2, { + 'before': true, + 'after': true + }], + 'block-spacing': [2, 'always'], + 'brace-style': [2, '1tbs', { + 'allowSingleLine': true + }], + 'camelcase': [0, { + 'properties': 'always' + }], + 'comma-dangle': [2, 'never'], + 'comma-spacing': [2, { + 'before': false, + 'after': true + }], + 'comma-style': [2, 'last'], + 'constructor-super': 2, + 'curly': [2, 'multi-line'], + 'dot-location': [2, 'property'], + 'eol-last': 2, + 'eqeqeq': ["error", "always", {"null": "ignore"}], + 'generator-star-spacing': [2, { + 'before': true, + 'after': true + }], + 'handle-callback-err': [2, '^(err|error)$'], + 'indent': [2, 2, { + 'SwitchCase': 1 + }], + 'jsx-quotes': [2, 'prefer-single'], + 'key-spacing': [2, { + 'beforeColon': false, + 'afterColon': true + }], + 'keyword-spacing': [2, { + 'before': true, + 'after': true + }], + 'new-cap': [2, { + 'newIsCap': true, + 'capIsNew': false + }], + 'new-parens': 2, + 'no-array-constructor': 2, + 'no-caller': 2, + 'no-console': 'off', + 'no-class-assign': 2, + 'no-cond-assign': 2, + 'no-const-assign': 2, + 'no-control-regex': 0, + 'no-delete-var': 2, + 'no-dupe-args': 2, + 'no-dupe-class-members': 2, + 'no-dupe-keys': 2, + 'no-duplicate-case': 2, + 'no-empty-character-class': 2, + 'no-empty-pattern': 2, + 'no-eval': 2, + 'no-ex-assign': 2, + 'no-extend-native': 2, + 'no-extra-bind': 2, + 'no-extra-boolean-cast': 2, + 'no-extra-parens': [2, 'functions'], + 'no-fallthrough': 2, + 'no-floating-decimal': 2, + 'no-func-assign': 2, + 'no-implied-eval': 2, + 'no-inner-declarations': [2, 'functions'], + 'no-invalid-regexp': 2, + 'no-irregular-whitespace': 2, + 'no-iterator': 2, + 'no-label-var': 2, + 'no-labels': [2, { + 'allowLoop': false, + 'allowSwitch': false + }], + 'no-lone-blocks': 2, + 'no-mixed-spaces-and-tabs': 2, + 'no-multi-spaces': 2, + 'no-multi-str': 2, + 'no-multiple-empty-lines': [2, { + 'max': 1 + }], + 'no-native-reassign': 2, + 'no-negated-in-lhs': 2, + 'no-new-object': 2, + 'no-new-require': 2, + 'no-new-symbol': 2, + 'no-new-wrappers': 2, + 'no-obj-calls': 2, + 'no-octal': 2, + 'no-octal-escape': 2, + 'no-path-concat': 2, + 'no-proto': 2, + 'no-redeclare': 2, + 'no-regex-spaces': 2, + 'no-return-assign': [2, 'except-parens'], + 'no-self-assign': 2, + 'no-self-compare': 2, + 'no-sequences': 2, + 'no-shadow-restricted-names': 2, + 'no-spaced-func': 2, + 'no-sparse-arrays': 2, + 'no-this-before-super': 2, + 'no-throw-literal': 2, + 'no-trailing-spaces': 2, + 'no-undef': 2, + 'no-undef-init': 2, + 'no-unexpected-multiline': 2, + 'no-unmodified-loop-condition': 2, + 'no-unneeded-ternary': [2, { + 'defaultAssignment': false + }], + 'no-unreachable': 2, + 'no-unsafe-finally': 2, + 'no-unused-vars': [2, { + 'vars': 'all', + 'args': 'none' + }], + 'no-useless-call': 2, + 'no-useless-computed-key': 2, + 'no-useless-constructor': 2, + 'no-useless-escape': 0, + 'no-whitespace-before-property': 2, + 'no-with': 2, + 'one-var': [2, { + 'initialized': 'never' + }], + 'operator-linebreak': [2, 'after', { + 'overrides': { + '?': 'before', + ':': 'before' + } + }], + 'padded-blocks': [2, 'never'], + 'quotes': [2, 'single', { + 'avoidEscape': true, + 'allowTemplateLiterals': true + }], + 'semi': [2, 'never'], + 'semi-spacing': [2, { + 'before': false, + 'after': true + }], + 'space-before-blocks': [2, 'always'], + 'space-before-function-paren': [2, 'never'], + 'space-in-parens': [2, 'never'], + 'space-infix-ops': 2, + 'space-unary-ops': [2, { + 'words': true, + 'nonwords': false + }], + 'spaced-comment': [2, 'always', { + 'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ','] + }], + 'template-curly-spacing': [2, 'never'], + 'use-isnan': 2, + 'valid-typeof': 2, + 'wrap-iife': [2, 'any'], + 'yield-star-spacing': [2, 'both'], + 'yoda': [2, 'never'], + 'prefer-const': 2, + 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0, + 'object-curly-spacing': [2, 'always', { + objectsInObjects: false + }], + 'array-bracket-spacing': [2, 'never'] + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9ad28d2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +.DS_Store +node_modules/ +dist/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* +package-lock.json +tests/**/coverage/ + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..f4be7a0 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,5 @@ +language: node_js +node_js: 10 +script: npm run test +notifications: + email: false diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..6151575 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017-present PanJiaChen + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README-zh.md b/README-zh.md new file mode 100644 index 0000000..1beec9b --- /dev/null +++ b/README-zh.md @@ -0,0 +1,111 @@ +# vue-admin-template + +> 这是一个极简的 vue admin 管理后台。它只包含了 Element UI & axios & iconfont & permission control & lint,这些搭建后台必要的东西。 + +[线上地址](http://panjiachen.github.io/vue-admin-template) + +[国内访问](https://panjiachen.gitee.io/vue-admin-template) + +目前版本为 `v4.0+` 基于 `vue-cli` 进行构建,若你想使用旧版本,可以切换分支到[tag/3.11.0](https://github.com/PanJiaChen/vue-admin-template/tree/tag/3.11.0),它不依赖 `vue-cli`。 + +

+ SPONSORED BY +

+

+ + + +

+ +## Extra + +如果你想要根据用户角色来动态生成侧边栏和 router,你可以使用该分支[permission-control](https://github.com/PanJiaChen/vue-admin-template/tree/permission-control) + +## 相关项目 + +- [vue-element-admin](https://github.com/PanJiaChen/vue-element-admin) + +- [electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin) + +- [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template) + +- [awesome-project](https://github.com/PanJiaChen/vue-element-admin/issues/2312) + +写了一个系列的教程配套文章,如何从零构建后一个完整的后台项目: + +- [手摸手,带你用 vue 撸后台 系列一(基础篇)](https://juejin.im/post/59097cd7a22b9d0065fb61d2) +- [手摸手,带你用 vue 撸后台 系列二(登录权限篇)](https://juejin.im/post/591aa14f570c35006961acac) +- [手摸手,带你用 vue 撸后台 系列三 (实战篇)](https://juejin.im/post/593121aa0ce4630057f70d35) +- [手摸手,带你用 vue 撸后台 系列四(vueAdmin 一个极简的后台基础模板,专门针对本项目的文章,算作是一篇文档)](https://juejin.im/post/595b4d776fb9a06bbe7dba56) +- [手摸手,带你封装一个 vue component](https://segmentfault.com/a/1190000009090836) + +## Build Setup + +```bash +# 克隆项目 +git clone https://github.com/PanJiaChen/vue-admin-template.git + +# 进入项目目录 +cd vue-admin-template + +# 安装依赖 +npm install + +# 建议不要直接使用 cnpm 安装以来,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题 +npm install --registry=https://registry.npm.taobao.org + +# 启动服务 +npm run dev +``` + +浏览器访问 [http://localhost:9528](http://localhost:9528) + +## 发布 + +```bash +# 构建测试环境 +npm run build:stage + +# 构建生产环境 +npm run build:prod +``` + +## 其它 + +```bash +# 预览发布环境效果 +npm run preview + +# 预览发布环境效果 + 静态资源分析 +npm run preview -- --report + +# 代码格式检查 +npm run lint + +# 代码格式检查并自动修复 +npm run lint -- --fix +``` + +更多信息请参考 [使用文档](https://panjiachen.github.io/vue-element-admin-site/zh/) + +## 购买贴纸 + +你也可以通过 购买[官方授权的贴纸](https://smallsticker.com/product/vue-element-admin) 的方式来支持 vue-element-admin - 每售出一张贴纸,我们将获得 2 元的捐赠。 + +## Demo + +![demo](https://github.com/PanJiaChen/PanJiaChen.github.io/blob/master/images/demo.gif) + +## Browsers support + +Modern browsers and Internet Explorer 10+. + +| [IE / Edge](http://godban.github.io/browsers-support-badges/)
IE / Edge | [Firefox](http://godban.github.io/browsers-support-badges/)
Firefox | [Chrome](http://godban.github.io/browsers-support-badges/)
Chrome | [Safari](http://godban.github.io/browsers-support-badges/)
Safari | +| --------- | --------- | --------- | --------- | +| IE10, IE11, Edge| last 2 versions| last 2 versions| last 2 versions + +## License + +[MIT](https://github.com/PanJiaChen/vue-admin-template/blob/master/LICENSE) license. + +Copyright (c) 2017-present PanJiaChen diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 0000000..fb82b27 --- /dev/null +++ b/babel.config.js @@ -0,0 +1,14 @@ +module.exports = { + presets: [ + // https://github.com/vuejs/vue-cli/tree/master/packages/@vue/babel-preset-app + '@vue/cli-plugin-babel/preset' + ], + 'env': { + 'development': { + // babel-plugin-dynamic-import-node plugin only does one thing by converting all import() to require(). + // This plugin can significantly increase the speed of hot updates, when you have a large number of pages. + // https://panjiachen.github.io/vue-element-admin-site/guide/advanced/lazy-loading.html + 'plugins': ['dynamic-import-node'] + } + } +} diff --git a/build/index.js b/build/index.js new file mode 100644 index 0000000..0c57de2 --- /dev/null +++ b/build/index.js @@ -0,0 +1,35 @@ +const { run } = require('runjs') +const chalk = require('chalk') +const config = require('../vue.config.js') +const rawArgv = process.argv.slice(2) +const args = rawArgv.join(' ') + +if (process.env.npm_config_preview || rawArgv.includes('--preview')) { + const report = rawArgv.includes('--report') + + run(`vue-cli-service build ${args}`) + + const port = 9526 + const publicPath = config.publicPath + + var connect = require('connect') + var serveStatic = require('serve-static') + const app = connect() + + app.use( + publicPath, + serveStatic('./dist', { + index: ['index.html', '/'] + }) + ) + + app.listen(port, function () { + console.log(chalk.green(`> Preview at http://localhost:${port}${publicPath}`)) + if (report) { + console.log(chalk.green(`> Report at http://localhost:${port}${publicPath}report.html`)) + } + + }) +} else { + run(`vue-cli-service build ${args}`) +} diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000..b98bfb0 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,24 @@ +module.exports = { + moduleFileExtensions: ['js', 'jsx', 'json', 'vue'], + transform: { + '^.+\\.vue$': 'vue-jest', + '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': + 'jest-transform-stub', + '^.+\\.jsx?$': 'babel-jest' + }, + moduleNameMapper: { + '^@/(.*)$': '/src/$1' + }, + snapshotSerializers: ['jest-serializer-vue'], + testMatch: [ + '**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)' + ], + collectCoverageFrom: ['src/utils/**/*.{js,vue}', '!src/utils/auth.js', '!src/utils/request.js', 'src/components/**/*.{js,vue}'], + coverageDirectory: '/tests/unit/coverage', + // 'collectCoverage': true, + 'coverageReporters': [ + 'lcov', + 'text-summary' + ], + testURL: 'http://gin.vueadmin.net/' +} diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 0000000..ed079e2 --- /dev/null +++ b/jsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "baseUrl": "./", + "paths": { + "@/*": ["src/*"] + } + }, + "exclude": ["node_modules", "dist"] +} diff --git a/mock/index.js b/mock/index.js new file mode 100644 index 0000000..c514c13 --- /dev/null +++ b/mock/index.js @@ -0,0 +1,57 @@ +const Mock = require('mockjs') +const { param2Obj } = require('./utils') + +const user = require('./user') +const table = require('./table') + +const mocks = [ + ...user, + ...table +] + +// for front mock +// please use it cautiously, it will redefine XMLHttpRequest, +// which will cause many of your third-party libraries to be invalidated(like progress event). +function mockXHR() { + // mock patch + // https://github.com/nuysoft/Mock/issues/300 + Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send + Mock.XHR.prototype.send = function() { + if (this.custom.xhr) { + this.custom.xhr.withCredentials = this.withCredentials || false + + if (this.responseType) { + this.custom.xhr.responseType = this.responseType + } + } + this.proxy_send(...arguments) + } + + function XHR2ExpressReqWrap(respond) { + return function(options) { + let result = null + if (respond instanceof Function) { + const { body, type, url } = options + // https://expressjs.com/en/4x/api.html#req + result = respond({ + method: type, + body: JSON.parse(body), + query: param2Obj(url) + }) + } else { + result = respond + } + return Mock.mock(result) + } + } + + for (const i of mocks) { + Mock.mock(new RegExp(i.url), i.type || 'get', XHR2ExpressReqWrap(i.response)) + } +} + +module.exports = { + mocks, + mockXHR +} + diff --git a/mock/mock-server.js b/mock/mock-server.js new file mode 100644 index 0000000..8941ec0 --- /dev/null +++ b/mock/mock-server.js @@ -0,0 +1,81 @@ +const chokidar = require('chokidar') +const bodyParser = require('body-parser') +const chalk = require('chalk') +const path = require('path') +const Mock = require('mockjs') + +const mockDir = path.join(process.cwd(), 'mock') + +function registerRoutes(app) { + let mockLastIndex + const { mocks } = require('./index.js') + const mocksForServer = mocks.map(route => { + return responseFake(route.url, route.type, route.response) + }) + for (const mock of mocksForServer) { + app[mock.type](mock.url, mock.response) + mockLastIndex = app._router.stack.length + } + const mockRoutesLength = Object.keys(mocksForServer).length + return { + mockRoutesLength: mockRoutesLength, + mockStartIndex: mockLastIndex - mockRoutesLength + } +} + +function unregisterRoutes() { + Object.keys(require.cache).forEach(i => { + if (i.includes(mockDir)) { + delete require.cache[require.resolve(i)] + } + }) +} + +// for mock server +const responseFake = (url, type, respond) => { + return { + url: new RegExp(`${process.env.VUE_APP_BASE_API}${url}`), + type: type || 'get', + response(req, res) { + console.log('request invoke:' + req.path) + res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond)) + } + } +} + +module.exports = app => { + // parse app.body + // https://expressjs.com/en/4x/api.html#req.body + app.use(bodyParser.json()) + app.use(bodyParser.urlencoded({ + extended: true + })) + + const mockRoutes = registerRoutes(app) + var mockRoutesLength = mockRoutes.mockRoutesLength + var mockStartIndex = mockRoutes.mockStartIndex + + // watch files, hot reload mock server + chokidar.watch(mockDir, { + ignored: /mock-server/, + ignoreInitial: true + }).on('all', (event, path) => { + if (event === 'change' || event === 'add') { + try { + // remove mock routes stack + app._router.stack.splice(mockStartIndex, mockRoutesLength) + + // clear routes cache + unregisterRoutes() + + const mockRoutes = registerRoutes(app) + mockRoutesLength = mockRoutes.mockRoutesLength + mockStartIndex = mockRoutes.mockStartIndex + + console.log(chalk.magentaBright(`\n > Mock Server hot reload success! changed ${path}`)) + } catch (error) { + console.log(chalk.redBright(error)) + } + } + }) +} diff --git a/mock/table.js b/mock/table.js new file mode 100644 index 0000000..bd0e013 --- /dev/null +++ b/mock/table.js @@ -0,0 +1,29 @@ +const Mock = require('mockjs') + +const data = Mock.mock({ + 'items|30': [{ + id: '@id', + title: '@sentence(10, 20)', + 'status|1': ['published', 'draft', 'deleted'], + author: 'name', + display_time: '@datetime', + pageviews: '@integer(300, 5000)' + }] +}) + +module.exports = [ + { + url: '/vue-admin-template/table/list', + type: 'get', + response: config => { + const items = data.items + return { + code: 20000, + data: { + total: items.length, + items: items + } + } + } + } +] diff --git a/mock/user.js b/mock/user.js new file mode 100644 index 0000000..7555338 --- /dev/null +++ b/mock/user.js @@ -0,0 +1,84 @@ + +const tokens = { + admin: { + token: 'admin-token' + }, + editor: { + token: 'editor-token' + } +} + +const users = { + 'admin-token': { + roles: ['admin'], + introduction: 'I am a super administrator', + avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif', + name: 'Super Admin' + }, + 'editor-token': { + roles: ['editor'], + introduction: 'I am an editor', + avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif', + name: 'Normal Editor' + } +} + +module.exports = [ + // user login + { + url: '/vue-admin-template/user/login', + type: 'post', + response: config => { + const { username } = config.body + const token = tokens[username] + + // mock error + if (!token) { + return { + code: 60204, + message: 'Account and password are incorrect.' + } + } + + return { + code: 20000, + data: token + } + } + }, + + // get user info + { + url: '/vue-admin-template/user/info\.*', + type: 'get', + response: config => { + const { token } = config.query + const info = users[token] + + // mock error + if (!info) { + return { + code: 50008, + message: 'Login failed, unable to get user details.' + } + } + + return { + code: 20000, + data: info + } + } + }, + + // user logout + { + url: '/vue-admin-template/user/logout', + type: 'post', + response: _ => { + return { + code: 20000, + data: 'success' + } + } + } +] diff --git a/mock/utils.js b/mock/utils.js new file mode 100644 index 0000000..95cc27d --- /dev/null +++ b/mock/utils.js @@ -0,0 +1,25 @@ +/** + * @param {string} url + * @returns {Object} + */ +function param2Obj(url) { + const search = decodeURIComponent(url.split('?')[1]).replace(/\+/g, ' ') + if (!search) { + return {} + } + const obj = {} + const searchArr = search.split('&') + searchArr.forEach(v => { + const index = v.indexOf('=') + if (index !== -1) { + const name = v.substring(0, index) + const val = v.substring(index + 1, v.length) + obj[name] = val + } + }) + return obj +} + +module.exports = { + param2Obj +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..9ae281c --- /dev/null +++ b/package.json @@ -0,0 +1,63 @@ +{ + "name": "vue-admin-template", + "version": "4.4.0", + "description": "A vue admin template with Element UI & axios & iconfont & permission control & lint", + "author": "Pan ", + "scripts": { + "dev": "vue-cli-service serve", + "build:prod": "vue-cli-service build", + "build:stage": "vue-cli-service build --mode staging", + "preview": "node build/index.js --preview", + "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml", + "lint": "eslint --ext .js,.vue src", + "test:unit": "jest --clearCache && vue-cli-service test:unit", + "test:ci": "npm run lint && npm run test:unit" + }, + "dependencies": { + "axios": "0.18.1", + "core-js": "^3.20.2", + "echarts": "^5.3.2", + "element-ui": "2.15.6", + "js-cookie": "2.2.0", + "normalize.css": "7.0.0", + "nprogress": "0.2.0", + "path-to-regexp": "2.4.0", + "vue": "2.6.10", + "vue-router": "3.0.6", + "vuex": "3.1.0" + }, + "devDependencies": { + "@vue/cli-plugin-babel": "4.4.4", + "@vue/cli-plugin-eslint": "4.4.4", + "@vue/cli-plugin-unit-jest": "4.4.4", + "@vue/cli-service": "4.4.4", + "@vue/test-utils": "1.0.0-beta.29", + "autoprefixer": "9.5.1", + "babel-eslint": "10.1.0", + "babel-jest": "23.6.0", + "babel-plugin-dynamic-import-node": "2.3.3", + "chalk": "2.4.2", + "connect": "3.6.6", + "eslint": "6.7.2", + "eslint-plugin-vue": "6.2.2", + "html-webpack-plugin": "3.2.0", + "mockjs": "1.0.1-beta3", + "runjs": "4.3.2", + "sass": "1.26.8", + "sass-loader": "8.0.2", + "script-ext-html-webpack-plugin": "2.1.3", + "serve-static": "1.13.2", + "svg-sprite-loader": "4.1.3", + "svgo": "1.2.2", + "vue-template-compiler": "2.6.10" + }, + "browserslist": [ + "> 1%", + "last 2 versions" + ], + "engines": { + "node": ">=8.9", + "npm": ">= 3.0.0" + }, + "license": "MIT" +} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..10473ef --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,8 @@ +// https://github.com/michael-ciniawsky/postcss-load-config + +module.exports = { + 'plugins': { + // to edit target browsers: use "browserslist" field in package.json + 'autoprefixer': {} + } +} diff --git a/public/--favicon.ico b/public/--favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..34b63ac63a87ee3ea8e7a0f3f5b5406c437e2112 GIT binary patch literal 67646 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 X;@D+E7Ad=S_FbjlW&KY_+xPzm3MBT? literal 0 HcmV?d00001 diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..4a366d34dada2f453ff8cf6c6cb158dfd7c2c337 GIT binary patch literal 73507 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 z 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 literal 0 HcmV?d00001 diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..4393c66 --- /dev/null +++ b/public/index.html @@ -0,0 +1,19 @@ + + + + + + + + <%= webpackConfig.name %> + + + + + +

+ + + diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..1007cb1 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,61 @@ + + + diff --git a/src/__layout/components/AppMain.vue b/src/__layout/components/AppMain.vue new file mode 100644 index 0000000..a5454fb --- /dev/null +++ b/src/__layout/components/AppMain.vue @@ -0,0 +1,44 @@ + + + + + + + diff --git a/src/__layout/components/Navbar.vue b/src/__layout/components/Navbar.vue new file mode 100644 index 0000000..827a4ee --- /dev/null +++ b/src/__layout/components/Navbar.vue @@ -0,0 +1,155 @@ + + + + + diff --git a/src/__layout/components/Sidebar/FixiOSBug.js b/src/__layout/components/Sidebar/FixiOSBug.js new file mode 100644 index 0000000..bc14856 --- /dev/null +++ b/src/__layout/components/Sidebar/FixiOSBug.js @@ -0,0 +1,26 @@ +export default { + computed: { + device() { + return this.$store.state.app.device + } + }, + mounted() { + // In order to fix the click on menu on the ios device will trigger the mouseleave bug + // https://github.com/PanJiaChen/vue-element-admin/issues/1135 + this.fixBugIniOS() + }, + methods: { + fixBugIniOS() { + const $subMenu = this.$refs.subMenu + if ($subMenu) { + const handleMouseleave = $subMenu.handleMouseleave + $subMenu.handleMouseleave = (e) => { + if (this.device === 'mobile') { + return + } + handleMouseleave(e) + } + } + } + } +} diff --git a/src/__layout/components/Sidebar/Item.vue b/src/__layout/components/Sidebar/Item.vue new file mode 100644 index 0000000..aa1f5da --- /dev/null +++ b/src/__layout/components/Sidebar/Item.vue @@ -0,0 +1,41 @@ + + + diff --git a/src/__layout/components/Sidebar/Link.vue b/src/__layout/components/Sidebar/Link.vue new file mode 100644 index 0000000..cd46e19 --- /dev/null +++ b/src/__layout/components/Sidebar/Link.vue @@ -0,0 +1,54 @@ + + + diff --git a/src/__layout/components/Sidebar/Logo.vue b/src/__layout/components/Sidebar/Logo.vue new file mode 100644 index 0000000..040fab6 --- /dev/null +++ b/src/__layout/components/Sidebar/Logo.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/src/__layout/components/Sidebar/SidebarItem.vue b/src/__layout/components/Sidebar/SidebarItem.vue new file mode 100644 index 0000000..a418c3d --- /dev/null +++ b/src/__layout/components/Sidebar/SidebarItem.vue @@ -0,0 +1,95 @@ + + + diff --git a/src/__layout/components/Sidebar/index.vue b/src/__layout/components/Sidebar/index.vue new file mode 100644 index 0000000..da39034 --- /dev/null +++ b/src/__layout/components/Sidebar/index.vue @@ -0,0 +1,56 @@ + + + diff --git a/src/__layout/components/index.js b/src/__layout/components/index.js new file mode 100644 index 0000000..97ee3cd --- /dev/null +++ b/src/__layout/components/index.js @@ -0,0 +1,3 @@ +export { default as Navbar } from './Navbar' +export { default as Sidebar } from './Sidebar' +export { default as AppMain } from './AppMain' diff --git a/src/__layout/index.vue b/src/__layout/index.vue new file mode 100644 index 0000000..db22a7b --- /dev/null +++ b/src/__layout/index.vue @@ -0,0 +1,93 @@ + + + + + diff --git a/src/__layout/mixin/ResizeHandler copy.js b/src/__layout/mixin/ResizeHandler copy.js new file mode 100644 index 0000000..e8d0df8 --- /dev/null +++ b/src/__layout/mixin/ResizeHandler copy.js @@ -0,0 +1,45 @@ +import store from '@/store' + +const { body } = document +const WIDTH = 992 // refer to Bootstrap's responsive design + +export default { + watch: { + $route(route) { + if (this.device === 'mobile' && this.sidebar.opened) { + store.dispatch('app/closeSideBar', { withoutAnimation: false }) + } + } + }, + beforeMount() { + window.addEventListener('resize', this.$_resizeHandler) + }, + beforeDestroy() { + window.removeEventListener('resize', this.$_resizeHandler) + }, + mounted() { + const isMobile = this.$_isMobile() + if (isMobile) { + store.dispatch('app/toggleDevice', 'mobile') + store.dispatch('app/closeSideBar', { withoutAnimation: true }) + } + }, + methods: { + // use $_ for mixins properties + // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential + $_isMobile() { + const rect = body.getBoundingClientRect() + return rect.width - 1 < WIDTH + }, + $_resizeHandler() { + if (!document.hidden) { + const isMobile = this.$_isMobile() + store.dispatch('app/toggleDevice', isMobile ? 'mobile' : 'desktop') + + if (isMobile) { + store.dispatch('app/closeSideBar', { withoutAnimation: true }) + } + } + } + } +} diff --git a/src/__layout/mixin/ResizeHandler.js b/src/__layout/mixin/ResizeHandler.js new file mode 100644 index 0000000..e8d0df8 --- /dev/null +++ b/src/__layout/mixin/ResizeHandler.js @@ -0,0 +1,45 @@ +import store from '@/store' + +const { body } = document +const WIDTH = 992 // refer to Bootstrap's responsive design + +export default { + watch: { + $route(route) { + if (this.device === 'mobile' && this.sidebar.opened) { + store.dispatch('app/closeSideBar', { withoutAnimation: false }) + } + } + }, + beforeMount() { + window.addEventListener('resize', this.$_resizeHandler) + }, + beforeDestroy() { + window.removeEventListener('resize', this.$_resizeHandler) + }, + mounted() { + const isMobile = this.$_isMobile() + if (isMobile) { + store.dispatch('app/toggleDevice', 'mobile') + store.dispatch('app/closeSideBar', { withoutAnimation: true }) + } + }, + methods: { + // use $_ for mixins properties + // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential + $_isMobile() { + const rect = body.getBoundingClientRect() + return rect.width - 1 < WIDTH + }, + $_resizeHandler() { + if (!document.hidden) { + const isMobile = this.$_isMobile() + store.dispatch('app/toggleDevice', isMobile ? 'mobile' : 'desktop') + + if (isMobile) { + store.dispatch('app/closeSideBar', { withoutAnimation: true }) + } + } + } + } +} diff --git a/src/api/api/dutys.js b/src/api/api/dutys.js new file mode 100644 index 0000000..b28e99f --- /dev/null +++ b/src/api/api/dutys.js @@ -0,0 +1,273 @@ +import request from '@/utils/request' +//个人需要填写的考核项目 +export function myassessmentlist(params) { + return request({ + url: '/dutys/myassessmentlist', + method: 'post', + params + }) +} +//根据具体考核项目获取被考核部门 +export const getDutydepartlist = (data) => { + return request({ + url: '/dutys/getDutydepartlist', + method: 'post', + data: data + }) +} +//根据具体考核项目获取被考核部门 +export const addassessmentscore = (data) => { + return request({ + url: '/dutys/addassessmentscore', + method: 'post', + data: data + }) +} +//个人考核评价记录 +export const myevaluatelist = (data) => { + return request({ + url: '/dutys/myevaluatelist', + method: 'post', + data: data + }) +} +//根据部门和时间获取考核详情 +export const getdeparttimeassess = (data) => { + return request({ + url: '/dutys/getdeparttimeassess', + method: 'post', + data: data + }) +} +//获取企业微信发起基础配置 +export const getconfig = (data) => { + return request({ + url: '/examine/getconfig', + method: 'post', + data: data + }) +} +//以部门维度考核内容列表 +export const departmentassess = (data) => { + return request({ + url: '/dutys/departmentassess', + method: 'post', + data: data + }) +} +//根据部门和时间写入全部考核项分值 +export const departmentassessdata = (data) => { + return request({ + url: '/dutys/departmentassessdata', + method: 'post', + data: data + }) +} +//查看审批详细内容 +export const lookdepartmentassessinfo = (data) => { + return request({ + url: '/noverify/lookdepartmentassessinfo', + method: 'post', + data: data + }) +} +//查看本部门提交的和个人提交的审批 +export const lookpersonalordepartment = (data) => { + return request({ + url: '/dutys/lookpersonalordepartment', + method: 'post', + data: data + }) +} +//定性考核列表 +export const qualevalulist = (data) => { + return request({ + url: '/eval/qualevalulist', + method: 'post', + data: data + }) +} +//添加加分或减分 +export const additionandsubtractionscore = (data) => { + return request({ + url: '/eval/plusorminuspoints', + method: 'post', + data: data + }) +} +//流程列表 +export const seeflowlog = (data) => { + return request({ + url: '/eval/seeflowlog', + method: 'post', + data: data + }) +} +//文档上传 +export const upordown = (data) => { + return request({ + url: '/upordown', + method: 'post', + data: data + }) +} +// @Tags Api +// @Summary 获取集团架构人员信息对照表 +// @Security ApiKeyAuth +// @accept application/json +// @Produce application/json +// @Param data body dbModel.Api true "获取集团架构" +// @Success 200 {string} json "{"success":true,"data":{},"msg":"获取成功"}" +// @Router /group/grouplist [get] +export const getgroupuser = (data) => { + return request({ + url: '/group/getgroupuser', + method: 'post', + data + }) +} +//划分责任人 +export const adddivisionresponsibility = (data) => { + return request({ + url: '/eval/rersonincharge', + method: 'post', + data: data + }) +} +//添加整改措施 +export const addcorrectivemeasures = (data) => { + return request({ + url: '/eval/rectificationmeasures', + method: 'post', + data: data + }) +} +//定量考核列表 +export const qualitativeevalration = (data) => { + return request({ + url: '/eval/qualitativeevalration', + method: 'post', + data: data + }) +} +//获取集团架构(集团+分厂) +export const getgroupdepartmap = (data) => { + return request({ + url: '/group/getgroupdepartmap', + method: 'post', + data: data + }) +} +//获取分厂 +export const departmentlist = (data) => { + return request({ + url: '/group/departmentlist', + method: 'post', + data: data + }) +} +//定量考核打分 +export const addflowrationlog = (data) => { + return request({ + url: '/eval/addflowrationlog', + method: 'post', + data: data + }) +} +//提交定量审核 +export const quanOperation = (data) => { + return request({ + url: '/quan/operation', + method: 'post', + data: data + }) +} +//查看定性考核审批列表 +export const lookdutkscoreflow = (data) => { + return request({ + url: '/eval/lookdutkscoreflow', + method: 'post', + data: data + }) +} +//查看定量考核 +export const lookrationkscoreflow = (data) => { + return request({ + url: '/eval/lookrationkscoreflow', + method: 'post', + data: data + }) +} +//获取班组 +export const getteamlist = (data) => { + return request({ + url: '/noverify/getteamlist', + method: 'post', + data: data + }) +} +//获取人员 +export const stafflist = (data) => { + return request({ + url: '/staff/stafflist', + method: 'post', + data: data + }) +} +//新定性考核列表 +export const newqualitative = (data) => { + return request({ + url: '/eval/newqualitative', + method: 'post', + data: data + }) +} +//获取新定性考核详细指标 +export const newgetqualdetailedtarget = (data) => { + return request({ + url: '/eval/newgetqualdetailedtarget', + method: 'post', + data: data + }) +} +//加减分NEW +export const plusorminuspoints = (data) => { + return request({ + url: '/eval/plusorminuspointsnew', + method: 'post', + data: data + }) +} +//流程图 1是整改2是不整改 +export const examineflow = (data) => { + return request({ + url: '/eval/examineflow', + method: 'post', + data: data + }) +} +//定性审批 +export const operation = (data) => { + return request({ + url: '/qual/operation', + method: 'post', + data: data + }) +} +//定量审批 +export const sanction = (data) => { + return request({ + url: '/quan/sanction', + method: 'post', + data: data + }) +} +//汇总详情 +export const summarydetails = (data) => { + return request({ + url: '/quan/summarydetails', + method: 'post', + data: data + }) +} + diff --git a/src/api/api/group.js b/src/api/api/group.js new file mode 100644 index 0000000..633ce2c --- /dev/null +++ b/src/api/api/group.js @@ -0,0 +1,24 @@ +import request from '@/utils/request' +// @Tags Api +// @Summary 获取集团架构(集团+分厂) +// @Security ApiKeyAuth +// @accept application/json +// @Produce application/json +// @Param data body dbModel.Api true "获取集团架构" +// @Success 200 {string} json "{"success":true,"data":{},"msg":"获取成功"}" +// @Router /group/grouplist [get] +export const getgroupdepartmap = (data) => { + return request({ + url: '/group/getgroupdepartmap', + method: 'post', + data: data + }) + } + //以部门维度考核内容列表 +export const departmentassess = (data) => { + return request({ + url: '/dutys/departmentassess', + method: 'post', + data: data + }) + } \ No newline at end of file diff --git a/src/api/api/login/login.js b/src/api/api/login/login.js new file mode 100644 index 0000000..6015f22 --- /dev/null +++ b/src/api/api/login/login.js @@ -0,0 +1,26 @@ +import request from '@/utils/request' +//个人需要填写的考核项目 +export const oauth2 = (data) => { + return request({ + url: '/base/oauth2', + method: 'post', + data: data + }) + } +// @Summary 用户端登录 +// @Produce application/json +// @Param data body {username:"string",password:"string"} +// @Router /base/login [post] +export const mylogin = (data) => { + return request({ + url: '/base/mylogin', + method: 'post', + data: data + }) +} +export function logout() { + return request({ + url: '/vue-admin-template/user/logout', + method: 'post' + }) +} diff --git a/src/api/api/renwu.js b/src/api/api/renwu.js new file mode 100644 index 0000000..97ea0c8 --- /dev/null +++ b/src/api/api/renwu.js @@ -0,0 +1,75 @@ +import request from '@/utils/request' +//注销接口 +export function logout(params) { + return request({ + url: '/logout.do', + method: 'get', + params + }) +} +//登录接口 +export const login = (data) => { + return request({ + url: '/login.do', + method: 'post', + data: data + }) +} +//注册 +export const register = (data) => { + return request({ + url: '/login/register', + method: 'post', + data: data + }) +} +//绑定提现账户 +export const accountBinding = (data) => { + return request({ + url: '/user/accountBinding', + method: 'post', + data: data + }) +} +//申请提现 +export const withdraw = (data) => { + return request({ + url: '/user/withdraw', + method: 'post', + data: data + }) +} +//激活码激活 +export const cdkActivation = (data) => { + return request({ + url: '/user/cdkActivation', + method: 'post', + data: data + }) +} +//主页 +export const index = (data) => { + return request({ + url: '/user/index', + method: 'post', + data: data + }) +} +//开始任务按钮 +export const start = (data) => { + return request({ + url: '/user/start', + method: 'post', + data: data + }) +} +//校验是否到期并且上传收益接口 +export const checkAndAdd = (data) => { + return request({ + url: '/user/checkAndAdd', + method: 'post', + data: data + }) +} + + diff --git a/src/api/api/table.js b/src/api/api/table.js new file mode 100644 index 0000000..2752f52 --- /dev/null +++ b/src/api/api/table.js @@ -0,0 +1,9 @@ +import request from '@/utils/request' + +export function getList(params) { + return request({ + url: '/vue-admin-template/table/list', + method: 'get', + params + }) +} diff --git a/src/api/api/user.js b/src/api/api/user.js new file mode 100644 index 0000000..1bda9a4 --- /dev/null +++ b/src/api/api/user.js @@ -0,0 +1,73 @@ +import request from '@/utils/request' + +export function login(data) { + return request({ + url: '/vue-admin-template/user/login', + method: 'post', + data + }) +} + +export function getInfo(token) { + return request({ + url: '/vue-admin-template/user/info', + method: 'get', + params: { token } + }) +} +// @Summary 获取验证码 +// @Produce application/json +// @Param data body {username:"string",password:"string"} +// @Router /base/captcha [post] +// export const captcha = (data) => { +// return service({ +// url: '/base/captcha', +// method: 'post', +// data: data +// }) +// } +export function captcha() { + return request({ + url: '/base/captcha', + method: 'post' + }) +} +// @Summary 用户端登录 +// @Produce application/json +// @Param data body {username:"string",password:"string"} +// @Router /base/login [post] +export const mylogin = (data) => { + return request({ + url: '/base/mylogin', + method: 'post', + data: data + }) +} +// @Summary 超级登录 +// @Produce application/json +// @Param data body {username:"string",password:"string"} +// @Router /base/login [post] +export const scancodelogin = (data) => { + return request({ + url: '/base/scancodelogin', + method: 'post', + data: data + }) +} +export function logout() { + return request({ + url: '/vue-admin-template/user/logout', + method: 'post' + }) +} +// @Summary 查询个人信息 +// @Produce application/json +// @Param data body {username:"string",password:"string"} +// @Router /base/login [post] +export const scancode = (data) => { + return request({ + url: '/noverify/scancode', + method: 'post', + data: data + }) +} diff --git a/src/api/duty/dimension.js b/src/api/duty/dimension.js new file mode 100644 index 0000000..ce7a228 --- /dev/null +++ b/src/api/duty/dimension.js @@ -0,0 +1,42 @@ +// 考核纬度api +import request from '@/utils/request' +//考核维度 +export const dutyclasslist = (data) => { + return request({ + url: '/duty/dutyclasslist', + method: 'post', + data: data + }) +} +//添加考核类别 +export const adddutyclass = (data) => { + return request({ + url: '/duty/adddutyclass', + method: 'post', + data: data + }) +} +//查询考核维度详情 +export const getdutyclassinfo = (data) => { + return request({ + url: '/duty/getdutyclassinfo', + method: 'post', + data: data + }) +} +//编辑考核维度内容 +export const eitedutyclassinfo = (data) => { + return request({ + url: '/duty/eitedutyclassinfo', + method: 'post', + data: data + }) +} +//删除或改变考核维度状态 +export const statedutyclass = (data) => { + return request({ + url: '/duty/statedutyclass', + method: 'post', + data: data + }) +} diff --git a/src/api/duty/duty.js b/src/api/duty/duty.js new file mode 100644 index 0000000..efa3457 --- /dev/null +++ b/src/api/duty/duty.js @@ -0,0 +1,418 @@ +// 定性考核api +import request from '@/utils/request' +//定性考核列表 +export const getqualevallist = (data) => { + return request({ + url: '/duty/getqualevallist', + method: 'post', + data: data + }) +} +//获取正在激活的考核方案 +export const getactivationplanversion = (data) => { + return request({ + url: '/admin/getactivationplanversion', + method: 'post', + data: data + }) +} +//添加定性考核 +export const addqualeval = (data) => { + return request({ + url: '/duty/addqualeval', + method: 'post', + data: data + }) + } +//根据条件获取组合指标 +export const gettasktarget = (data) => { + return request({ + url: '/duty/gettasktarget', + method: 'post', + data: data + }) + } +//根据条件获取组合指标子栏目 +export const gettasktargetsun = (data) => { + return request({ + url: '/duty/gettasktargetsun', + method: 'post', + data: data + }) + } +//根据条件获取考核详情 +export const gettasktargetcontary = (data) => { + return request({ + url: '/duty/gettasktargetcontary', + method: 'post', + data: data + }) + } + //添加定量考核 +export const addration = (data) => { + return request({ + url: '/duty/addration', + method: 'post', + data: data + }) +} +//考核表列表 +export const departmenttasklist = (data) => { + return request({ + url: '/duty/departmenttasklist', + method: 'post', + data: data + }) +} +//删除考核 +export const delrationlist = (data) => { + return request({ + url: '/duty/delrationlist', + method: 'post', + data: data + }) +} +//删除定性考核内容 +export const delqualevalcont = (data) => { + return request({ + url: '/duty/delqualevalcont', + method: 'post', + data: data + }) +} +//删除考核细则方案内容 +export const deldepartmenttasklist = (data) => { + return request({ + url: '/duty/deldepartmenttasklist', + method: 'post', + data: data + }) +} +//获取定量考核详情 +export const getrationlist = (data) => { + return request({ + url: '/duty/getrationlist', + method: 'post', + data: data + }) +} +//修改定量考核 +export const eiterationlist = (data) => { + return request({ + url: '/duty/eiterationlist', + method: 'post', + data: data + }) +} +//获取部门考核指标详情 +export const getqualeval = (data) => { + return request({ + url: '/duty/getqualeval', + method: 'post', + data: data + }) +} +//修改定性考核内容 +export const eitequalevalcont = (data) => { + return request({ + url: '/duty/eitequalevalcont', + method: 'post', + data: data + }) +} +//添加指标权重(批量 +export const addqubatch = (data) => { + return request({ + url: '/duty/addqubatch', + method: 'post', + data: data + }) +} +//部门考核列表 +export const bumenList = (data) => { + return request({ + url: '/duty/departmentlist', + method: 'post', + data: data + }) +} +//部门考核列表新 +export const departmentlistnew = (data) => { + return request({ + url: '/duty/departmentlistnew', + method: 'post', + data: data + }) +} +//部门新增考核列表 +export const adddepartmentdutyinfo = (data) => { + return request({ + url: '/duty/adddepartmentdutyinfo', + method: 'post', + data: data + }) +} +//查看定量考核目标设定 +export const lookquantitativeconfig = (data) => { + return request({ + url: '/admin/lookquantitativeconfig', + method: 'post', + data: data + }) +} +//结算周期 +export const setevaluationobjectives = (data) => { + return request({ + url: '/duty/setevaluationobjectives', + method: 'post', + data: data + }) +} +//获取定性考核列表用于列表展示 +export const dutydepartmentlist = (data) => { + return request({ + url: '/admin/dutydepartmentlist', + method: 'post', + data: data + }) +} +//获取定性考核列表用于下拉列表 +export const selectdutylist = (data) => { + return request({ + url: '/admin/selectdutylist', + method: 'post', + data: data + }) +} +//根据指标ID获取列表信息 +export const idtotargetsunlist = (data) => { + return request({ + url: '/admin/idtotargetsunlist', + method: 'post', + data: data + }) +} +//修改子栏目名称 +export const eitesuntargetname = (data) => { + return request({ + url: '/admin/eitesuntargetname', + method: 'post', + data: data + }) +} +////获取定性指标->指标细则修改回显 +export const getdetailedtargetcallback = (data) => { + return request({ + url: '/admin/getdetailedtargetcallback', + method: 'post', + data: data + }) +} +////获取定性指标->指标细则修改回显与新增 +export const eitedetailedtargetcallback = (data) => { + return request({ + url: '/admin/eitedetailedtargetcallback', + method: 'post', + data: data + }) +} +////删除定性考核指标 +export const deldutytarget = (data) => { + return request({ + url: '/admin/deldutytarget', + method: 'post', + data: data + }) +} +////删除定性考核指标子栏目 +export const delsuntardimeat = (data) => { + return request({ + url: '/admin/delsuntardimeat', + method: 'post', + data: data + }) +} +//获取定性考核指标关系指定列表 +export const getdutyrelationlist = (data) => { + return request({ + url: '/admin/getdutyrelationlist', + method: 'post', + data: data + }) +} +//获取定性考核子栏目 +export const lookdutytargetinfo = (data) => { + return request({ + url: '/admin/lookdutytargetinfo', + method: 'post', + data: data + }) +} +//添加 定性考核指标关系指定 +export const adddutyrelation = (data) => { + return request({ + url: '/admin/adddutyrelation', + method: 'post', + data: data + }) +} +//删除定性考核指标(NEW) +export const newdeltarget = (data) => { + return request({ + url: '/admin/newdeltarget', + method: 'post', + data: data + }) +} +//获取被修改指标细则的详情(NEW) +export const getneweitedetailedtarget = (data) => { + return request({ + url: '/admin/getneweitedetailedtarget', + method: 'post', + data: data + }) +} +//删除指标细则内容(NEW) +export const newdeldetailedtarget = (data) => { + return request({ + url: '/admin/newdeldetailedtarget', + method: 'post', + data: data + }) +} +//删除指标子栏目内容(NEW) +export const newdelsuntarget = (data) => { + return request({ + url: '/admin/newdelsuntarget', + method: 'post', + data: data + }) +} +//修改或添加定性考核指标细则内容(NEW) +export const neweitedetailedtarget = (data) => { + return request({ + url: '/admin/neweitedetailedtarget', + method: 'post', + data: data + }) +} +//部门考核添加。NEW +export const newadddepartduty = (data) => { + return request({ + url: '/admin/newadddepartduty', + method: 'post', + data: data + }) +} +//新的部门考核指标获取列表 +export const newgerderpattarlist = (data) => { + return request({ + url: '/admin/newgerderpattarlist', + method: 'post', + data: data + }) +} +//删除部门考核(New) +export const deldepartduty = (data) => { + return request({ + url: '/admin/deldepartduty', + method: 'post', + data: data + }) +} +//删除部门考核指标(New) +export const deldepartdutytarger = (data) => { + return request({ + url: '/admin/deldepartdutytarger', + method: 'post', + data: data + }) +} +//获取定性考核相关部门 +export const getdepartforduty = (data) => { + return request({ + url: '/admin/getdepartforduty', + method: 'post', + data: data + }) +} +//修改已知定性考核指标关联部门 +export const eitedepartforduty = (data) => { + return request({ + url: '/admin/eitedepartforduty', + method: 'post', + data: data + }) +} +//部门考核方案版本列表 +export const departdutyplanversion = (data) => { + return request({ + url: '/admin/departdutyplanversion', + method: 'post', + data: data + }) +} +//添加部门考核方案(待版本号的版本) +export const adddepartdutyversio = (data) => { + return request({ + url: '/admin/adddepartdutyversio', + method: 'post', + data: data + }) +} +//查看考核方案(待版本号的版本) +export const lookdepartdutyversio = (data) => { + return request({ + url: '/admin/lookdepartdutyversio', + method: 'post', + data: data + }) +} +//启用禁用删除(待版本号的版本) +export const onoffdepartdutyversio = (data) => { + return request({ + url: '/admin/onoffdepartdutyversio', + method: 'post', + data: data + }) +} +//修改部门考核方案内的说明(待版本号的版本) +export const eitedepartexplain = (data) => { + return request({ + url: '/admin/eitedepartexplain', + method: 'post', + data: data + }) +} +//获取考核方法要修改的数据 +export const geteitesuntarterinfo = (data) => { + return request({ + url: '/admin/geteitesuntarterinfo', + method: 'post', + data: data + }) +} +//复制部门考核版本 +export const copydepartdutyversio = (data) => { + return request({ + url: '/admin/copydepartdutyversio', + method: 'post', + data: data + }) +} +//删除定量考核目标设定 +export const delquantitativeconfig = (data) => { + return request({ + url: '/admin/delquantitativeconfig', + method: 'post', + data: data + }) +} +//编辑定量考核目标设定 +export const eitequantitativeconfig = (data) => { + return request({ + url: '/admin/eitequantitativeconfig', + method: 'post', + data: data + }) +} diff --git a/src/api/duty/group.js b/src/api/duty/group.js new file mode 100644 index 0000000..5108c5f --- /dev/null +++ b/src/api/duty/group.js @@ -0,0 +1,162 @@ +// 集团api +import service from '@/utils/request' +// @Tags api +// @Summary 获取集团详情 不分页 +// @Security ApiKeyAuth +// @accept application/json +// @Produce application/json +// @Param data body modelInterface.PageInfo true "分页获取用户列表" +// @Success 200 {string} json "{"success":true,"data":{},"msg":"获取成功"}" +// @Router /api/getApiList [post] +// { +// page int +// pageSize int +// } +export const getgroupinfo = (data) => { + return service({ + url: '/group/getgroupinfo', + method: 'post', + data + }) +} + +// @Tags Api +// @Summary 获取子公司详情 +// @Security ApiKeyAuth +// @accept application/json +// @Produce application/json +// @Param data body api.CreateApiParams true "创建api" +// @Success 200 {string} json "{"success":true,"data":{},"msg":"获取成功"}" +// @Router /api/createApi [post] +export const getsubsidiaryinfo = (data) => { + return service({ + url: '/group/getsubsidiaryinfo', + method: 'post', + data + }) +} + +// @Tags menu +// @Summary 添加集团信息 +// @Security ApiKeyAuth +// @accept application/json +// @Produce application/json +// @Param data body api.GetById true "添加集团信息" +// @Success 200 {string} json "{"success":true,"data":{},"msg":"获取成功"}" +// @Router /menu/getApiById [post] +export const addgroupinfo = (data) => { + return service({ + url: '/group/addgroupinfo', + method: 'post', + data + }) +} + +// @Tags Api +// @Summary 获取工段详情 +// @Security ApiKeyAuth +// @accept application/json +// @Produce application/json +// @Param data body api.CreateApiParams true "获取工段详情" +// @Success 200 {string} json "{"success":true,"data":{},"msg":"更新成功"}" +// @Router /api/updateApi [post] +export const getgrouppositioninfo = (data) => { + return service({ + url: '/group/getgrouppositioninfo', + method: 'post', + data + }) +} + +// @Tags Api +// @Summary 修改集团信息 +// @Security ApiKeyAuth +// @accept application/json +// @Produce application/json +// @Param data body api.CreateApiParams true "修改集团信息" +// @Success 200 {string} json "{"success":true,"data":{},"msg":"更新成功"}" +// @Router /group/eitegroupinfo [post] +export const eitegroupinfo = (data) => { + return service({ + url: '/group/eitegroupinfo', + method: 'post', + data + }) +} + +// @Tags Api +// @Summary 删除集团框架相应信息 +// @Security ApiKeyAuth +// @accept application/json +// @Produce application/json +// @Success 200 {string} json "{"success":true,"data":{},"msg":"获取成功"}" +// @Router /group/delgroupinfo [post] +export const delgroupinfo = (data) => { + return service({ + url: '/group/delgroupinfo', + method: 'post', + data + }) +} + +// @Tags Api +// @Summary 获取集团架构 +// @Security ApiKeyAuth +// @accept application/json +// @Produce application/json +// @Param data body dbModel.Api true "获取集团架构" +// @Success 200 {string} json "{"success":true,"data":{},"msg":"获取成功"}" +// @Router /group/grouplist [get] +export const grouplist = (data) => { + return service({ + url: '/group/grouplist', + method: 'post', + data + }) +} +// @Tags Api +// @Summary 获取集团架构(集团+分厂) +// @Security ApiKeyAuth +// @accept application/json +// @Produce application/json +// @Param data body dbModel.Api true "获取集团架构" +// @Success 200 {string} json "{"success":true,"data":{},"msg":"获取成功"}" +// @Router /group/grouplist [get] +export const getgroupdepartmap = (data) => { + return service({ + url: '/group/getgroupdepartmap', + method: 'post', + data + }) +} +// @Tags Api +// @Summary 获取集团架构人员信息对照表 +// @Security ApiKeyAuth +// @accept application/json +// @Produce application/json +// @Param data body dbModel.Api true "获取集团架构" +// @Success 200 {string} json "{"success":true,"data":{},"msg":"获取成功"}" +// @Router /group/grouplist [get] +export const getgroupuser = (data) => { + return service({ + url: '/group/getgroupuser', + method: 'post', + data + }) +} +// @Tags Api +// @Summary 获取分厂部室列表 +// @Security ApiKeyAuth +// @accept application/json +// @Produce application/json +// @Param data body dbModel.Api true "获取集团架构" +// @Success 200 {string} json "{"success":true,"data":{},"msg":"获取成功"}" +// @Router /group/grouplist [get] +export const departmentlist = (data) => { + return service({ + url: '/group/departmentlist', + method: 'post', + data + }) +} + diff --git a/src/api/duty/gwDingXing.js b/src/api/duty/gwDingXing.js new file mode 100644 index 0000000..4b21247 --- /dev/null +++ b/src/api/duty/gwDingXing.js @@ -0,0 +1,146 @@ +import request from '@/utils/requestFile' +// 获取岗位方案内容列表 +export function get_post_scheme(data) { + return request({ + url: '/postpc/get_post_scheme', + method: 'post', + data + }) +} +// 获取复制岗位考核方案 +export function get_copy_sheme_infor(data) { + return request({ + url: '/postpc/get_copy_sheme_infor', + method: 'post', + data + }) + } +// 引用指标部门指标 +export function quote_department_target(data) { + return request({ + url: '/postpc/quote_department_target', + method: 'post', + data + }) + } +// 提交岗位考核方案 +export function submit_post_scheme(data) { + return request({ + url: '/postpc/submit_post_scheme', + method: 'post', + data + }) + } +// 获取岗位相关指标 +export function getpostabouttarget(data) { + return request({ + url: '/postpc/getpostabouttarget', + method: 'post', + data + }) + } +// 添加岗位指标 +export function add_post_target(data) { + return request({ + url: '/postpc/add_post_target', + method: 'post', + data + }) +} +// 编辑岗位指标 +export function dit_post_target(data) { + return request({ + url: '/postpc/dit_post_target', + method: 'post', + data + }) +} +// 获取岗位指标关联部门相关岗位及提报人 +export function get_target_about_depart_to_post_man(data) { + return request({ + url: '/postpc/get_target_about_depart_to_post_man', + method: 'post', + data + }) +} +// 根据指标添加岗位细则 +export function add_post_target_cont(data) { + return request({ + url: '/postpc/add_post_target_cont', + method: 'post', + data + }) +} +// 根据指标获取岗位定性指标细则列表 +export function posttargetsunlist(data) { + return request({ + url: '/postpc/posttargetsunlist', + method: 'post', + data + }) +} +// 获取指标细则内容 +export function getdetailscont(data) { + return request({ + url: '/postpc/getdetailscont', + method: 'post', + data + }) +} +// 编辑定性指标细则内容 +export function editdeatilscont(data) { + return request({ + url: '/postpc/editdeatilscont', + method: 'post', + data + }) +} +// 编辑岗位子栏目内容 +export function edit_son_target_cont(data) { + return request({ + url: '/postpc/edit_son_target_cont', + method: 'post', + data + }) +} +// 岗位定量考核目标列表 +export function post_config_list(data) { + return request({ + url: '/postpc/post_config_list', + method: 'post', + data + }) +} +// 提交定量考核数据 +export function set_evaluation_objectives(data) { + return request({ + url: '/postpc/set_evaluation_objectives', + method: 'post', + data + }) +} +// 修改考核目标设置 +export function eite_quantitative_config(data) { + return request({ + url: '/postpc/eite_quantitative_config', + method: 'post', + data + }) +} +// 删除考核目标设置 +export function del_quantitative_config(data) { + return request({ + url: '/postpc/del_quantitative_config', + method: 'post', + data + }) +} +// 查看定量考核目标设定 +export function lookposttiveconfig(data) { + return request({ + url: '/postpc/lookposttiveconfig', + method: 'post', + data + }) +} + diff --git a/src/api/duty/gwFangan.js b/src/api/duty/gwFangan.js new file mode 100644 index 0000000..e9b9338 --- /dev/null +++ b/src/api/duty/gwFangan.js @@ -0,0 +1,59 @@ +import request from '@/utils/requestFile' +// 获取岗位方案内容列表 +export function get_post_scheme(data) { + return request({ + url: '/postpc/get_post_scheme', + method: 'post', + data + }) +} +// 获取岗位考核方案列表 +export function get_scheme_list(data) { + return request({ + url: '/postpc/get_scheme_list', + method: 'post', + data + }) + } +// 获取岗位考核方案列表 +export function getpostabouttarget(data) { + return request({ + url: '/postpc/getpostabouttarget', + method: 'post', + data + }) + } +// 引用指标部门指标 +export function quote_department_target(data) { + return request({ + url: '/postpc/quote_department_target', + method: 'post', + data + }) + } +// 提交岗位考核方案 +export function submit_post_scheme(data) { + return request({ + url: '/postpc/submit_post_scheme', + method: 'post', + data + }) + } +// 编辑方案版本状态或删除 +export function edit_scheme_state_of_del(data) { + return request({ + url: '/postpc/edit_scheme_state_of_del', + method: 'post', + data + }) + } +// 获取复制岗位考核方案 +export function get_copy_sheme_infor(data) { + return request({ + url: '/postpc/get_copy_sheme_infor', + method: 'post', + data + }) + } + + diff --git a/src/api/duty/oldGwDingXing.js b/src/api/duty/oldGwDingXing.js new file mode 100644 index 0000000..7a30346 --- /dev/null +++ b/src/api/duty/oldGwDingXing.js @@ -0,0 +1,91 @@ +// 定性考核api +import request from '@/utils/request' +//岗位定性考核列表 +export const posttargetsunlist = (data) => { + return request({ + url: '/postkpi/posttargetsunlist', + method: 'post', + data: data + }) +} +//添加岗位细则 +export const addposttargetcont = (data) => { + return request({ + url: '/postkpi/addposttargetcont', + method: 'post', + data: data + }) + } +//修改定性指标关联岗位 +export const editposttargetaual = (data) => { + return request({ + url: '/postkpi/editposttargetaual', + method: 'post', + data: data + }) + } + +//获取指标关联的岗位 +export const targetorglist = (data) => { + return request({ + url: '/postkpi/targetorglist', + method: 'post', + data: data + }) + } +//获取岗位考核子栏目内容 +export const getsuntargetinfo = (data) => { + return request({ + url: '/postkpi/getsuntargetinfo', + method: 'post', + data: data + }) +} +//编辑定性考核子栏目 +export const eidtsuntargetpost = (data) => { + return request({ + url: '/postkpi/eidtsuntargetpost', + method: 'post', + data: data + }) +} +//删除定性考核指标子栏目 +export const delsuntarget = (data) => { + return request({ + url: '/postkpi/delsuntarget', + method: 'post', + data: data + }) +} +//添加单条定性指标细则 +export const addpostdetacont = (data) => { + return request({ + url: '/postkpi/addpostdetacont', + method: 'post', + data: data + }) +} +//获取指标细则内容 +export const getdetailscont = (data) => { + return request({ + url: '/postkpi/getdetailscont', + method: 'post', + data: data + }) +} +//修改定性考核指标细则 +export const editdeatilscont = (data) => { + return request({ + url: '/postkpi/editdeatilscont', + method: 'post', + data: data + }) +} +//删除定性考核指标细则 +export const eidtposttardetailsstrte = (data) => { + return request({ + url: '/postkpi/eidtposttardetailsstrte', + method: 'post', + data: data + }) +} \ No newline at end of file diff --git a/src/api/duty/project.js b/src/api/duty/project.js new file mode 100644 index 0000000..1ec8463 --- /dev/null +++ b/src/api/duty/project.js @@ -0,0 +1,154 @@ +// 考核项目api +import request from '@/utils/request' +//考核项目列表 +export const assessList = (data) => { + return request({ + url: '/duty/assessList', + method: 'post', + data: data + }) +} +//添加考核项目 +export const addassessinfo = (data) => { + return request({ + url: '/duty/addassessinfo', + method: 'post', + data: data + }) +} +//查询考核项目详情 +export const getassessinfo = (data) => { + return request({ + url: '/duty/getassessinfo', + method: 'post', + data: data + }) +} +//编辑考核项目内容 +export const eiteassessinfo = (data) => { + return request({ + url: '/duty/eiteassessinfo', + method: 'post', + data: data + }) +} +//删除或改变考核项目状态 +export const eiteassessstate = (data) => { + return request({ + url: '/duty/eiteassessstate', + method: 'post', + data: data + }) +} +//获取考核指标列表 +export const gettarget = (data) => { + return request({ + url: '/duty/gettarget', + method: 'post', + data: data + }) +} +//添加考核指标 +export const addtarget = (data) => { + return request({ + url: '/duty/addtarget', + method: 'post', + data: data + }) +} +//获取考核指标详细内容 +export const gettargetinfo = (data) => { + return request({ + url: '/duty/gettargetinfo', + method: 'post', + data: data + }) +} +//删除指标/更改考核指标状态 +export const deltarget = (data) => { + return request({ + url: '/duty/deltarget', + method: 'post', + data: data + }) +} +//编辑指标内容 +export const eitetarget = (data) => { + return request({ + url: '/duty/eitetarget', + method: 'post', + data: data + }) +} +//汇总详情 +export const summarydetails = (data) => { + return request({ + url: '/quant/summarydetails', + method: 'post', + data: data + }) +} +//岗位考核指标列表 +export const posttargetlist = (data) => { + return request({ + url: '/postkpi/posttargetlist', + method: 'post', + data: data + }) +} +//编辑岗位指标 +export const editposttarget = (data) => { + return request({ + url: '/postkpi/editposttarget', + method: 'post', + data: data + }) +} +//编辑岗位指标状态 +export const editstate = (data) => { + return request({ + url: '/postkpi/editstate', + method: 'post', + data: data + }) +} +//添加岗位考核指标 +export const addposttarget = (data) => { + return request({ + url: '/postkpi/addposttarget', + method: 'post', + data: data + }) +} +//修改定性指标关联岗位 +export const editposttargetaual = (data) => { + return request({ + url: '/postkpi/editposttargetaual', + method: 'post', + data: data + }) +} +//添加岗位细则 +export const addposttargetcont = (data) => { + return request({ + url: '/postkpi/addposttargetcont', + method: 'post', + data: data + }) +} +//岗位定性考核列表 +export const posttargetsunlist = (data) => { + return request({ + url: '/postkpi/posttargetsunlist', + method: 'post', + data: data + }) +} +//获取指标关联的岗位 +export const targetorglist = (data) => { + return request({ + url: '/postkpi/targetorglist', + method: 'post', + data: data + }) +} diff --git a/src/api/duty/projectNew.js b/src/api/duty/projectNew.js new file mode 100644 index 0000000..9fef262 --- /dev/null +++ b/src/api/duty/projectNew.js @@ -0,0 +1,196 @@ +import request from '@/utils/requestFile' +// 部门指标列表 +export function departmenttargetlist(data) { + return request({ + url: '/department_pc/departmenttargetlist', + method: 'post', + data + }) +} +// 获取部门定性考核部门关联列表 +export function getdepartabouttarget(data) { + return request({ + url: '/department_pc/getdepartabouttarget', + method: 'post', + data + }) + } + // 获取部门指标相关执行人 +export function gettargetreport(data) { + return request({ + url: '/department_pc/gettargetreport', + method: 'post', + data + }) + } + // 修改子栏目标题名称级考核关联部门及提报人 + export function editsontargetdepartmentreport(data) { + return request({ + url: '/department_pc/editsontargetdepartmentreport', + method: 'post', + data + }) + } + // 根据指标和部门获取相关岗位 + export function basistargetdearpetmentgetpost(data) { + return request({ + url: '/department_pc/basistargetdearpetmentgetpost', + method: 'post', + data + }) + } + // 根据指标和部门获取相关岗位 + export function delsontarget(data) { + return request({ + url: '/department_pc/delsontarget', + method: 'post', + data + }) + } + // 删除指标 + export function deltarget(data) { + return request({ + url: '/department_pc/deltarget', + method: 'post', + data + }) + } + // 实验 + export function shiyan(data) { + return request({ + url: '/department_pc/shiyan', + method: 'post', + data + }) + } + // 获取定性考核指标列表内容 + export function getdepartmenttragetcontlist(data) { + return request({ + url: '/department_pc/getdepartmenttragetcontlist', + method: 'post', + data + }) + } + // 子栏目关联部门岗位 + export function depar_son_target_about_post(data) { + return request({ + url: '/department_pc/depar_son_target_about_post', + method: 'post', + data + }) + } + // 获取单一指标细则内容 + export function getonedetailedtarget(data) { + return request({ + url: '/department_pc/getonedetailedtarget', + method: 'post', + data + }) + } + // 获取部门指标岗位提交人 + export function basistaegetdeparmentreport(data) { + return request({ + url: '/department_pc/basistaegetdeparmentreport', + method: 'post', + data + }) + } + // 根据指标栏目新增指标细则 + export function basissontargetadddetailed(data) { + return request({ + url: '/department_pc/basissontargetadddetailed', + method: 'post', + data + }) + } + // 编辑单一部门指标 + export function edit_one_target(data) { + return request({ + url: '/department_pc/edit_one_target', + method: 'post', + data + }) + } + + // 指标细则关联部门岗位 + export function depar_detaile_about_post(data) { + return request({ + url: '/department_pc/depar_detaile_about_post', + method: 'post', + data + }) + } + + // 添加部门指标 + export function add_department_target(data) { + return request({ + url: '/department_pc/add_department_target', + method: 'post', + data + }) + } + // 添加定性考核子栏目及细则 + export function addsuntargetdetailed(data) { + return request({ + url: '/department_pc/addsuntargetdetailed', + method: 'post', + data + }) + } + + // 获取单一指标详细内容 + export function get_one_terget_info(data) { + return request({ + url: '/department_pc/get_one_terget_info', + method: 'post', + data + }) + } + // 指标关联岗位 + export function deparment_target_about_post(data) { + return request({ + url: '/department_pc/deparment_target_about_post', + method: 'post', + data + }) + } + // 编辑单一指标细则内容 + export function edit_one_detailed_target(data) { + return request({ + url: '/department_pc/edit_one_detailed_target', + method: 'post', + data + }) + } + // 获取子栏目基础信息 + export function getsontargetcont(data) { + return request({ + url: '/department_pc/getsontargetcont', + method: 'post', + data + }) + } + // 删除单一指标细则 + export function del_one_detailed_target(data) { + return request({ + url: '/department_pc/del_one_detailed_target', + method: 'post', + data + }) + } +// 获取岗位指标详情 +export function get_post_target(data) { + return request({ + url: '/postpc/get_post_target', + method: 'post', + data + }) +} +// 获取岗位子栏目详情 +export function get_sun_target_info(data) { + return request({ + url: '/postpc/get_sun_target_info', + method: 'post', + data + }) +} \ No newline at end of file diff --git a/src/api/duty/quanXian.js b/src/api/duty/quanXian.js new file mode 100644 index 0000000..9235f3a --- /dev/null +++ b/src/api/duty/quanXian.js @@ -0,0 +1,59 @@ +import request from '@/utils/requestFile' +// 添加应用系统 +export function add_system(data) { + return request({ + url: '/powerpc/add_system', + method: 'post', + data + }) +} +// 系统列表 +export function system_list(data) { + return request({ + url: '/powerpc/system_list', + method: 'post', + data + }) + } +// 编辑应用系统信息 +export function edit_system(data) { + return request({ + url: '/powerpc/edit_system', + method: 'post', + data + }) + } +// 更改状态或删除 +export function edit_state_of_del(data) { + return request({ + url: '/powerpc/edit_state_of_del', + method: 'post', + data + }) + } +// 系统菜单 +export function system_about_menu(data) { + return request({ + url: '/powerpc/system_about_menu', + method: 'post', + data + }) + } +// 系统授权-权限列表 +export function obtain_authorization(data) { + return request({ + url: '/system_authorizing/obtain_authorization', + method: 'post', + data + }) + } +// 编辑权限 +export function edit_power(data) { + return request({ + url: 'powerpc/edit_power', + method: 'post', + data + }) + } + + diff --git a/src/api/duty/quantitativeIndicators.js b/src/api/duty/quantitativeIndicators.js new file mode 100644 index 0000000..3caf5d1 --- /dev/null +++ b/src/api/duty/quantitativeIndicators.js @@ -0,0 +1,42 @@ +// 定量/定性指标api +import request from '@/utils/request' +//定量/定性指标列表 +export const dutylist = (data) => { + return request({ + url: '/duty/dutylist', + method: 'post', + data: data + }) +} +//添加定量/定性指标 +export const adddutyinfo = (data) => { + return request({ + url: '/duty/adddutyinfo', + method: 'post', + data: data + }) +} +//查询定量/定性指标详情 +export const getdutyinfo = (data) => { + return request({ + url: '/duty/getdutyinfo', + method: 'post', + data: data + }) +} +//编辑定量/定性指标内容 +export const eitedutyinfo = (data) => { + return request({ + url: '/duty/eitedutyinfo', + method: 'post', + data: data + }) +} +//删除或改变定量/定性指标状态 +export const eitedutystate = (data) => { + return request({ + url: '/duty/eitedutystate', + method: 'post', + data: data + }) +} diff --git a/src/api/duty/rules.js b/src/api/duty/rules.js new file mode 100644 index 0000000..dad043c --- /dev/null +++ b/src/api/duty/rules.js @@ -0,0 +1,83 @@ +// 考核细则api +import request from '@/utils/request' +//考核细则列表 +export const getqualitativetargetlist = (data) => { + return request({ + url: '/duty/getqualitativetargetlist', + method: 'post', + data: data + }) +} +//添加定性指标子栏目 +export const addqualitativetarget = (data) => { + return request({ + url: '/duty/addqualitativetarget', + method: 'post', + data: data + }) + } + //获取定性指标子栏目详细内容 +export const getqualitativetargetinfo = (data) => { + return request({ + url: '/duty/getqualitativetargetinfo', + method: 'post', + data: data + }) + } + //修改定性指标子栏目详细内容 +export const eitequalitativetargetinfo = (data) => { + return request({ + url: '/duty/eitequalitativetargetinfo', + method: 'post', + data: data + }) + } + //修改定性指标子栏目状态或删除 + export const delqualitativetargetinfo = (data) => { + return request({ + url: '/duty/delqualitativetargetinfo', + method: 'post', + data: data + }) + } + //添加考核细则 + export const adddetailedtarget = (data) => { + return request({ + url: '/duty/adddetailedtarget', + method: 'post', + data: data + }) + } + //获取考核细则内容 + export const getdetailedtarget = (data) => { + return request({ + url: '/duty/getdetailedtarget', + method: 'post', + data: data + }) + } + //获取考核细则列表 + export const getdetailedtargetlist = (data) => { + return request({ + url: '/duty/getdetailedtargetlist', + method: 'post', + data: data + }) + } + //编辑考核细则内容 + export const eitedetailedtarget = (data) => { + return request({ + url: '/duty/eitedetailedtarget', + method: 'post', + data: data + }) + } + //编辑考核细则内容 + export const deldetailedtarget = (data) => { + return request({ + url: '/duty/deldetailedtarget', + method: 'post', + data: data + }) + } + diff --git a/src/api/dutys.js b/src/api/dutys.js new file mode 100644 index 0000000..8b6f046 --- /dev/null +++ b/src/api/dutys.js @@ -0,0 +1,89 @@ +import request from '@/utils/request' +//个人需要填写的考核项目 +export function myassessmentlist(params) { + return request({ + url: '/dutys/myassessmentlist', + method: 'post', + params + }) +} +//根据具体考核项目获取被考核部门 +export const getDutydepartlist = (data) => { + return request({ + url: '/dutys/getDutydepartlist', + method: 'post', + data: data + }) +} +//根据具体考核项目获取被考核部门 +export const addassessmentscore = (data) => { + return request({ + url: '/dutys/addassessmentscore', + method: 'post', + data: data + }) +} +//个人考核评价记录 +export const myevaluatelist = (data) => { + return request({ + url: '/dutys/myevaluatelist', + method: 'post', + data: data + }) +} +//根据部门和时间获取考核详情 +export const getdeparttimeassess = (data) => { + return request({ + url: '/dutys/getdeparttimeassess', + method: 'post', + data: data + }) +} +//获取企业微信发起基础配置 +export const getconfig = (data) => { + return request({ + url: '/examine/getconfig', + method: 'post', + data: data + }) +} +//以部门维度考核内容列表 +export const departmentassess = (data) => { + return request({ + url: '/dutys/departmentassess', + method: 'post', + data: data + }) +} +//根据部门和时间写入全部考核项分值 +export const departmentassessdata = (data) => { + return request({ + url: '/dutys/departmentassessdata', + method: 'post', + data: data + }) +} +//查看审批详细内容 +export const lookdepartmentassessinfo = (data) => { + return request({ + url: '/noverify/lookdepartmentassessinfo', + method: 'post', + data: data + }) +} +//查看本部门提交的和个人提交的审批 +export const lookpersonalordepartment = (data) => { + return request({ + url: '/dutys/lookpersonalordepartment', + method: 'post', + data: data + }) +} +//获取正在激活的考核方案 +export const getactivationplanversion = (data) => { + return request({ + url: '/admin/getactivationplanversion', + method: 'post', + data: data + }) +} diff --git a/src/api/echarts/echarts.js b/src/api/echarts/echarts.js new file mode 100644 index 0000000..c4a4d72 --- /dev/null +++ b/src/api/echarts/echarts.js @@ -0,0 +1,49 @@ +import request from '@/utils/request' +//计算定量考核组织范围,及起止年份 +export const getquantechartorgandyear = (data) => { + return request({ + url: '/quant/getquantechartorgandyear', + method: 'post', + data: data + }) + } +//表格数据 +export const getplanversionvalid = (data) => { + return request({ + url: '/ststic/getplanversionvalid', + method: 'post', + data: data + }) +} +//计算定量考核数据 +export const quantechart = (data) => { + return request({ + url: '/quant/quantechart', + method: 'post', + data: data + }) +} +//成绩表查询 +export const departmenttranscript = (data) => { + return request({ + url: '/ststic/departmenttranscript', + method: 'post', + data: data + }) +} +//汇总详情定性历史记录 +export const summarydetailsxinglog = (data) => { + return request({ + url: '/quant/summarydetailsxinglog', + method: 'post', + data: data + }) +} +//汇总详情定量历史记录 +export const summarydetailslianglog = (data) => { + return request({ + url: '/quant/summarydetailslianglog', + method: 'post', + data: data + }) +} \ No newline at end of file diff --git a/src/api/group.js b/src/api/group.js new file mode 100644 index 0000000..0cf2821 --- /dev/null +++ b/src/api/group.js @@ -0,0 +1,32 @@ +import request from '@/utils/request' +// @Tags Api +// @Summary 获取集团架构(集团+分厂) +// @Security ApiKeyAuth +// @accept application/json +// @Produce application/json +// @Param data body dbModel.Api true "获取集团架构" +// @Success 200 {string} json "{"success":true,"data":{},"msg":"获取成功"}" +// @Router /group/grouplist [get] +export const getgroupdepartmap = (data) => { + return request({ + url: '/group/getgroupdepartmap', + method: 'post', + data: data + }) + } + //以部门维度考核内容列表 +export const departmentassess = (data) => { + return request({ + url: '/dutys/departmentassess', + method: 'post', + data: data + }) + } + //定量考核打分 + export const addflowrationlog = (data) => { + return request({ + url: '/eval/addflowrationlog', + method: 'post', + data: data + }) + } \ No newline at end of file diff --git a/src/api/honer.js b/src/api/honer.js new file mode 100644 index 0000000..b8cd280 --- /dev/null +++ b/src/api/honer.js @@ -0,0 +1,81 @@ +import request from '@/utils/requestFile' +// 载体类型列表 +export function carrierlist(data) { + return request({ + url: '/honors/carrierlist', + method: 'post', + data + }) +} +// 添加载体类型 +export function addcarrier(data) { + return request({ + url: '/honors/addcarrier', + method: 'post', + data + }) + } + // 编辑载体类型 +export function eidycarrier(data) { + return request({ + url: '/honors/eidycarrier', + method: 'post', + data + }) + } + // 编辑载体类型状态 +export function eidycarrierstate(data) { + return request({ + url: '/honors/eidycarrierstate', + method: 'post', + data + }) + } + // 荣誉列表 + export function honorlist(data) { + return request({ + url: '/honors/honorlist', + method: 'post', + data + }) + } + // 添加荣誉 + export function addhonorcont(data) { + return request({ + url: '/honors/addhonorcont', + method: 'post', + data + }) + } + // 编辑荣誉 + export function eidyhonorcont(data) { + return request({ + url: '/honors/eidyhonorcont', + method: 'post', + data + }) + } + // 编辑荣誉状态 + export function eidyhonorcontstate(data) { + return request({ + url: '/honors/eidyhonorcontstate', + method: 'post', + data + }) + } + // 荣誉查看图片 + export function reviewimage(data) { + return request({ + url: '/honors/reviewimage', + method: 'post', + data + }) + } + // 查询荣誉详情 + export function gethonorscont(data) { + return request({ + url: '/honors/gethonorscont', + method: 'post', + data + }) + } \ No newline at end of file diff --git a/src/api/personnel/post.js b/src/api/personnel/post.js new file mode 100644 index 0000000..e5299f9 --- /dev/null +++ b/src/api/personnel/post.js @@ -0,0 +1,292 @@ +import request from '@/utils/request1' +//添加职位(岗位) +export const addpositioncont = (data) => { + return request({ + url: '/org/addpositioncont', + method: 'post', + data: data + }) + } +//获取职位(岗位)详情 +export const getpositioncont = (data) => { + return request({ + url: '/org/getpositioncont', + method: 'post', + data: data + }) + } +//编辑职位(岗位)状态或删除 +export const eitepositionstateordel = (data) => { + return request({ + url: '/org/eitepositionstateordel', + method: 'post', + data: data + }) +} +//职位(岗位)列表 +export const positionlist = (data) => { + return request({ + url: '/org/positionlist', + method: 'post', + data: data + }) +} +//编辑职位(岗位) +export const eitepositioncont = (data) => { + return request({ + url: '/org/eitepositioncont', + method: 'post', + data: data + }) +} +//职务列表 +export const dutieslist = (data) => { + return request({ + url: '/org/dutieslist', + method: 'post', + data: data + }) +} +//行政组织列表 +export const govlist = (data) => { + return request({ + url: '/org/govlist', + method: 'post', + data: data + }) +} +//行政组织树 +export const govthree = (data) => { + return request({ + url: '/org/govthree', + method: 'post', + data: data + }) +} +//岗位(职位)配权 +export const getpositionrole = (data) => { + return request({ + url: '/org/getpositionrole', + method: 'post', + data: data + }) +} +//岗位(职位)配权 +export const positionallotment = (data) => { + return request({ + url: '/permit/positionallotment', + method: 'post', + data: data + }) +} +//人员列表 +export const stafflist = (data) => { + return request({ + url: '/staff/stafflist', + method: 'post', + data: data + }) +} +//职务分类列表 +export const utiesclasslist = (data) => { + return request({ + url: '/org/utiesclasslist', + method: 'post', + data: data + }) +} +//添加职务分类 +export const adddutiesclass = (data) => { + return request({ + url: '/org/adddutiesclass', + method: 'post', + data: data + }) +} +//删除职务分类 +export const delutiesclassinfo = (data) => { + return request({ + url: '/org/delutiesclassinfo', + method: 'post', + data: data + }) +} +//修改职务分类详情 +export const eiteutiesclassinfo = (data) => { + return request({ + url: '/org/eiteutiesclassinfo', + method: 'post', + data: data + }) +} +//获取职务分类详情 +export const getutiesclassinfo = (data) => { + return request({ + url: '/org/getutiesclassinfo', + method: 'post', + data: data + }) +} +//编辑职务 +export const eitedutiescont = (data) => { + return request({ + url: '/org/eitedutiescont', + method: 'post', + data: data + }) +} +//编辑职务状态或删除 +export const eitedutiesstatordel = (data) => { + return request({ + url: '/org/eitedutiesstatordel', + method: 'post', + data: data + }) +} + +//获取职务详情 +export const getdutiescont = (data) => { + return request({ + url: '/org/getdutiescont', + method: 'post', + data: data + }) +} +//添加职务 +export const adddutiescont = (data) => { + return request({ + url: '/org/adddutiescont', + method: 'post', + data: data + }) +} +//行政组织类型列表 +export const govclasslist = (data) => { + return request({ + url: '/org/govclasslist', + method: 'post', + data: data + }) +} +//添加行政组织类型 +export const addgovclass = (data) => { + return request({ + url: '/org/addgovclass', + method: 'post', + data: data + }) +} +//编辑行政组织类型 +export const eitegovclasscont = (data) => { + return request({ + url: '/org/eitegovclasscont', + method: 'post', + data: data + }) +} +//获取行政组织类型 +export const getgovclasscont = (data) => { + return request({ + url: '/org/getgovclasscont', + method: 'post', + data: data + }) +} +//编辑行政组织类型状态或删除 +export const eitegovclassstateordel = (data) => { + return request({ + url: '/org/eitegovclassstateordel', + method: 'post', + data: data + }) +} +//编辑行政组织状态或删除 +export const eitegovstateordel = (data) => { + return request({ + url: '/org/eitegovstateordel', + method: 'post', + data: data + }) +} +//添加行政组织 +export const addgovcont = (data) => { + return request({ + url: '/org/addgovcont', + method: 'post', + data: data + }) +} +//编辑行政组织 +export const eitegovcont = (data) => { + return request({ + url: '/org/eitegovcont', + method: 'post', + data: data + }) +} +//获取行政组织详情 +export const getgovcont = (data) => { + return request({ + url: '/org/getgovcont', + method: 'post', + data: data + }) +} +//人员列表(新) +export const archiveslist = (data) => { + return request({ + url: '/staff/archiveslist', + method: 'post', + data: data + }) +} +//个人档案 +export const archivescont = (data) => { + return request({ + url: '/staff/archivescont', + method: 'post', + data: data + }) +} +//获取班组 +export const getteamcont = (data) => { + return request({ + url: '/org/getteamcont', + method: 'post', + data: data + }) +} +//编辑班组状态或删除 +export const eidtdelteamcont = (data) => { + return request({ + url: '/org/eidtdelteamcont', + method: 'post', + data: data + }) +} +//班组列表 +export const teamcontlist = (data) => { + return request({ + url: '/org/teamcontlist', + method: 'post', + data: data + }) +} +//添加班组 +export const addteamcont = (data) => { + return request({ + url: '/org/addteamcont', + method: 'post', + data: data + }) +} +//编辑班组 +export const eiteteamcont = (data) => { + return request({ + url: '/org/eiteteamcont', + method: 'post', + data: data + }) +} + + diff --git a/src/api/table.js b/src/api/table.js new file mode 100644 index 0000000..2752f52 --- /dev/null +++ b/src/api/table.js @@ -0,0 +1,9 @@ +import request from '@/utils/request' + +export function getList(params) { + return request({ + url: '/vue-admin-template/table/list', + method: 'get', + params + }) +} diff --git a/src/api/user.js b/src/api/user.js new file mode 100644 index 0000000..f294bf1 --- /dev/null +++ b/src/api/user.js @@ -0,0 +1,172 @@ +import request from '@/utils/request' + +export function login(data) { + return request({ + url: '/vue-admin-template/user/login', + method: 'post', + data + }) +} + +export function getInfo(token) { + return request({ + url: '/vue-admin-template/user/info', + method: 'get', + params: { token } + }) +} +// @Summary 获取验证码 +// @Produce application/json +// @Param data body {username:"string",password:"string"} +// @Router /base/captcha [post] +// export const captcha = (data) => { +// return service({ +// url: '/base/captcha', +// method: 'post', +// data: data +// }) +// } +export function captcha() { + return request({ + url: '/base/captcha', + method: 'post' + }) +} +// @Summary 后端登录 +// @Produce application/json +// @Param data body {username:"string",password:"string"} +// @Router /base/login [post] +export const mysystemlogin = (data) => { + return request({ + url: '/base/mysystemlogin?id=1', + method: 'post', + data: data + }) +} +// @Summary 用户端登录 +// @Produce application/json +// @Param data body {username:"string",password:"string"} +// @Router /base/login [post] +export const mylogin = (data) => { + return request({ + url: '/base/mylogin', + method: 'post', + data: data + }) +} +// @Summary 获取系统左侧菜单 +// @Produce application/json +// @Param data body {username:"string",password:"string"} +// @Router /base/login [post] +export const getmenu = (data) => { + return request({ + url: '/systemmenu/getmenu', + method: 'post', + data: data + }) +} +export function logout() { + return request({ + url: '/vue-admin-template/user/logout', + method: 'post' + }) +} +// @Summary 系统菜单列表 +// @Produce application/json +// @Param data body {username:"string",password:"string"} +// @Router /base/login [post] +export const systemmenulist = (data) => { + return request({ + url: '/systemmenu/systemmenulist', + method: 'post', + data: data + }) +} +// @Summary 添加菜单 +// @Produce application/json +// @Param data body {username:"string",password:"string"} +// @Router /base/login [post] +export const addmenu = (data) => { + return request({ + url: '/systemmenu/addmenu', + method: 'post', + data: data + }) +} +// @Summary 修改菜单 +// @Produce application/json +// @Param data body {username:"string",password:"string"} +// @Router /base/login [post] +export const eitemenu = (data) => { + return request({ + url: '/systemmenu/eitemenu', + method: 'post', + data: data + }) +} +// @Summary 删除菜单 +// @Produce application/json +// @Param data body {username:"string",password:"string"} +// @Router /base/login [post] +export const delmenu = (data) => { + return request({ + url: '/systemmenu/delmenu', + method: 'post', + data: data + }) +} +// @Summary 添加菜单功能 +// @Produce application/json +// @Param data body {username:"string",password:"string"} +// @Router /base/login [post] +export const addmenuoperation = (data) => { + return request({ + url: '/systemmenu/addmenuoperation', + method: 'post', + data: data + }) +} +// @Summary 删除菜单功能 +// @Produce application/json +// @Param data body {username:"string",password:"string"} +// @Router /base/login [post] +export const delmenuperation = (data) => { + return request({ + url: '/systemmenu/delmenuperation', + method: 'post', + data: data + }) +} +// @Summary 查询个人信息 +// @Produce application/json +// @Param data body {username:"string",password:"string"} +// @Router /base/login [post] +export const scancode = (data) => { + return request({ + url: '/noverify/scancode', + method: 'post', + data: data + }) +} +// @Summary 超级登录 +// @Produce application/json +// @Param data body {username:"string",password:"string"} +// @Router /base/login [post] +export const scancodelogin = (data) => { + return request({ + url: '/base/scancodelogin', + method: 'post', + data: data + }) +} +// @Summary 登出 +// @Produce application/json +// @Param data body {username:"string",password:"string"} +// @Router /base/login [post] +export const signout = (data) => { + return request({ + url: '/base/signout', + method: 'post', + data: data + }) +} diff --git a/src/assets/404_images/404.png b/src/assets/404_images/404.png new file mode 100644 index 0000000000000000000000000000000000000000..3d8e2305cc973ad2121403aee4bf08728f76c461 GIT binary patch literal 98071 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
Uu4Um7DAUpfcjI28Sm@@eQW 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 literal 0 HcmV?d00001 diff --git a/src/assets/404_images/404_cloud.png b/src/assets/404_images/404_cloud.png new file mode 100644 index 0000000000000000000000000000000000000000..c6281d09013e0a2c5f8e699a0a6038d9480291e5 GIT binary patch literal 4766 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 literal 0 HcmV?d00001 diff --git a/src/assets/404_images/dashbord.png b/src/assets/404_images/dashbord.png new file mode 100644 index 0000000000000000000000000000000000000000..64981d0d02638a9a2558fae22b509b87a07745de GIT binary patch literal 72153 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

`c)`;wWSDJrsW}Y- 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%0AM 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 go5BBIn+a literal 0 HcmV?d00001 diff --git a/src/assets/404_images/login_background.jpg b/src/assets/404_images/login_background.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e601f24afda4237347f22d162d1e2ff5a7753b3b GIT binary patch literal 41154 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/404_images/login_left.svg b/src/assets/404_images/login_left.svg new file mode 100644 index 0000000..9c48b0b --- /dev/null +++ b/src/assets/404_images/login_left.svg @@ -0,0 +1,123 @@ + + + 搭建网站 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/404_images/logo.jpg b/src/assets/404_images/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..09502d587c7aa3fdef6e4a5ede414abad03fb4e0 GIT binary patch literal 27616 zcmeFYWmH_xwdxE=r6A11Q+!}We?(p)vcjnGr zYwr7B>&|?g>Mwn|`_!&eU3>4Ro@dwV!s|NVy`rpwEC2=u0DyUW0bZ8@Qg2uPckQ1} z{_lEtyZiMw01F9*1%?F<1`7a-1p|i#^V$m_e;Xt$EG*nV1O6Wk83hsP9V#pwJitQ)nLNj=3kleK)a6GOV|I6v` z-`dmRj(!S+vWTT+;?B*y1pkAdZOdhew5zD1ja90BWic4Ys(+w_gZvI|%1FsO-u4Sj z0WzG*hHbVYr8DR1V_VX`SReYvjq+!L*(Ma=u?hT|Fuq^!O3wdQ(OT~SdGcAVsfCO1 z`}3jhfG?F-sdhRZYKi9W>vliw=;`{{7SBHIKH04ZM-pX82-$K8S9rk`^J6pS8m;{( zHX@_|$x8|F*hjZYi!**6L208{V6+L>oHoO_plKFE%ViQ24|BbWgq~wq?V+XBHYIi&G2{ftCXwn@(pE#!2+e4Z-T^R4B4?JQkYSO%)>E zccU&Rdgac!_sTFY=(<5qMF_+3$7MwjzVRI2d|xk{jV(_l{1bC$6K+A7%8u&(SrdVl zP&t!&E?d6kU!3KHQgB8RIF^?<8E&E_Y!Fa_^P+`8i{wX^zWDLE2c&!errj3%hD?SRW~=yoIY9WpeUYreR5VSR^V3v9i5X zD&Bx5%gTb(J9rqL7gT?$OGPZ~(67lA=Olc!6wb5@(ZdayMe@j+(F1c zg?2r@0@Tc&xm$f1500kjL!LqG!ip7pPWYwv=XoakhFa2mkYFq*c9X?$0(F;Pv2mO@VKaSj-mXIbJBTv# z{t2(F@RKn`i4``SZZoK=)_QD)LN}d@IyP0V~1vaeWdLyIRCh)@9VSG~+d_YXagI7;g!>+17Wz zX*Gk!AtvOV-81}Pigo@gCqY+X=vq!z zCt;fW-M*IQ!tf{MTjmO1FDs=;pVRwDlVE{UQWnaHqa1>!Zfn^cIImevh`xr=d@ z_94}1wDOQoYjd}%8@$j-ajrwMm)T>B? z`DSG^8Gdg&)KML>>K@z%`%ZRgu|(nsS?5vAx^)?DVfM(O!chy0h7I2T`krNOHm!+A ztG`*Sx&@YmVFO ztBSQ@fvCKE(56xo6ocOHjPLFE-^#~0N`jN)W6Zy!g>J1+yf6cJDRi73w)FcT4$1ZA zdhyc5G=_>c$;Kw{2Zx)DMyy>|bPq2PGzF*q7%r%YH1-Jap%4VOXqXjfti{`Uqj?3; z`Yt>HX!Lh1X2Xraq2@Qzh)XVi$pNA#m6#3tWDqu!OB~lr4;K{&ziHt!8nAc#wM~Q5 zylioGS!q??P^3qe{>zDBX0K_lII843AZ4ads9{CCBTia~sJKeZd> z$y2ge%`L?>{V&Vnr=RT>_2KIk#J<1OXvdPop54wD)Rx!%{cIA?x}DCjmASDpYTxEx zZ8Rk4k%>p3|fwz0!J-)7lfnX>Lh(VP|^}#p!oNODk(Nn|p!yOKf<0(Sw z;Sc9;5Wmge4)VTDEnPQ%GqzmH)H*vKg^xM=zXn;apng=i!CD(chjx|s@zW1Y8d-Q5 zyAB~Kcqk^YsQRY^|;Xqo=?gwDCwaljaDr9T~(l+BRiJFr}>K*M-dN zrlzZ$=T_wFRUa;)g&yMM+79p7G|j5P4LX?#X={RbUP~>zT^7ld_`EhRC8FPKeaF;V zKuzfS?@r`%BN}GxvFt6&=RU}Vi$|nJdZ#fhZt=^17%IsKA?wFj&r`(RuaKTq-ewaV zJYR&$x*HP?Z5js+ep<8SGa>`ogYIr;R@lMGH3+)o>@Ki`3L3~cUE@95f6rSn#Obm| zNrpA437EM{>%+-Q^A5|F5`f*L=4crQq&r_}NvV3IEU@+|kktoY@pQ%#dpor+=6 zwD*Xv&BA<1zD4ImvwR+7!8@k@@Jd-y%fm&xQ-iW`+PYGTK=xg78R$g*fH%93h^xDs@5wH}5t=rg!RKb;@`$31N{- z%}L};@BYYx7gsUGtiV!M+b9&JA5oz@sQXuImuwGol{rhQqy+I}y58!md-C-@FUQm3 zL3CD|vix_?#OP`0<>F!)s#*TLDEgILMh99Z`rE(GC+CvnAljI@f`ipf5i zkpj}#BCx<)$p?Q#z(Eh0yDmyaqs2RnIL1=LWXmAYD%nOJybsA4 z3_7u-@VP=3lNfdEg}#u7+_9-;k5kV$Elhl=E@3t|a!p%kOrh|GW__=UxLx4=n$19? z$A?eE20_O%3bvHL)BVtLr~4hbq^`h%0Cy4}>jb4f1mC%a-+Bet&x)C4!x$6j2GSZ3 zY^z%~dbDfnnYE}I-`gBj5F*>CU%>cnjnVA|8F5a}TBFY$xxjybuF5eTw}+lhAF(>G z;FYpYf<8qYRA4igVmIDssZ9+#3vuFv={o=$layu9FbZPS=*|z)L|*)!K+d1e_9@r? z;sCN$yOH0oM466%dBQhl|HOnY5V6!un{;(^sTk_0XSIL?x^yRoNi--bHZNX99ir{i zyumJrm+E?V5O#YNr_}Nd^#YR;iz@=ji@_zgwZ5_CMHnaQ2QXY$<`_KDXi<50Bc4ev ziZT4-08ghuZD3?S%}Q-NxLKvN%3+)Nc9{$1vxU6+vtwD;j2`CN zF4b40*w{}(4s}wKn z1mon-ZL=>|`)5fC^Z6L+{`}NEv3G~dk9Cl2u7@0G3-I&DP;U+Gjs9hxAI#!<%DW!S z5^>%?CCB=sG6rD3hKJ7AXiFS$XDb&wL-j|KstoOKi#k7wcoeh~?0DA7k#31F2|01g z<4ule>gU7=Cs`1ShRV`?Mz>_7B+-lV#?cYQdN7{23P@{rq;eSln`5y&)C>O$YSDx> zpF8kQoZOcAJzg~p?7?IlTqCr^W7y$Ou?`=`ui8F?Qul?XOWtJ?=7hGGq*!NIcn}@{ z#dTKUW69!{9K6gHVo8hXJ;Wn=UQ(Rf%ZNFC{hnl;I<==WcDv{X7j zUJgqJdEe+hH)OAR-Bx==9KBs57=>n}7CBNZ96MI%*f%`zAcgSPK0e-lrN9%60MIVV<-rg<8qEEpj{J>b4#6+@w~1Cu_bxs`jGo@-X^{R_O0F1 zLT(r1%?xbqW8-caZkb}gkiU#icvYwC0}~CVAC=LWjoOzq?M6dV&5N{5A~x`_T}VHg zZe#qBh~#(JAg@dqL|ZDra_|3$&y~s2<@^{DAs`;^^2`1p#K56V6yoZ`J1WdLN%2r1 zbo+k%P{g;xiOWep z^j`suqHZfGuD)$`6^)H`ve(f28?Ys+u=~FR261QeKsAh957<`#acyHnz@x6H@&2W$ zm{O2`O3T(=yEtFKhETvSA?6)?xBU?jUoRtyfIi1ZTJp>3@V$asxyip!VJ!&c)Be=* zoPio^wWZ^TMuBjg1Rki~fbXE4SpStr_xj0zs8tk1hFA5k}0!2&Bf%E1gXA%?sI zd{uuyi0I|VGcRKcQkp7%7<$X*KIC4{a1sDc)U$f3{-(J@%V$N=;e2R5RO~{5CNYSs zqL4e5)b+7)rP21P1`)Zdh(4=D%+5qb{vk`h1T7=H3Q6eQc!4%J3(X*zm@SYS`+Uze zw-F)AfJ~0_ixcah5DTJ;VnC{`9o6#>()xfMZLx!hyZOEktC)Z1>Bm>G)`$|)v;-+E zoCzG-MFOnsr*7irxdLr}vNr2Wu{exn3fx3fZ!Pi0#>Uz#M)|yBpqWj4$1+K6X_w9` zQ6O2)7oDI0(H@KoYnJ4hln+r3VQ}+-=$@F>TDh|w4_Ks!v-Ca=(Ikp&j*bp(b6wP5 zviU}}LnG_zs{IHc)NfCGL@a?(T)PX26NclPyk=S1_j3h!`Me`i9!ErUzi%Eugl;0slOuG8iZc1qGanRZinm z#A_w<2hd$M;bH*9uC_%Cox4^!`Bkw#>YDHO;T;@Li<=_02HcA~#@+f_UO&)X!F<~Y z08ZTXw>#+cQs*73iZ6CXZ)AN=9=|mTpftdkk6UP&SR=HnWgbcPSr)G=8hKhb?3CZG zZ*}sojJ=Nt*r}Mp#Cio}iQGQyCA|WwI?SG`Df6)evr%^ zB~FrL1pq6*73qA-oxKoU2u4~Z`T;P-wyxSIe>JPyZ^!~ZlfUe$tdGZ*$z64+e!bBLOL@f$S|bRCd47JbhW{h-?` z9@*t0_mGkLXeH&FAM=aIJhp$=Gyd5=`Z*!q>mciLQ(gIdy422~1Nq8~}h3=1=HoKgVvBZ-t~-v=g+P@fC1*O7ye7(M^>*qedv& zT~tTZ9(pz#%c>H2&qL}h(JIAA{>(YN;L0;RHt56vjO|=3C6$ZA@Y^2wYL%tw_r@EA zm$dI~&#b*~8LH#&a{(`DSJ>oiu>kR65VN`__AMV5#k855!y`?WeR>5XEuCWd zF2qtk4CwDswxTz+DmB>)m%A;kEIVp98|9}m-OBQj@#2tBGbgunXN_$ze<>j`kdfg% z&Y-y_Fgzs}bU*3;tin5~KdTWULmJwi>qWmhFq-&CN9Z``KMNz9=)9 z9UYToEms5o_qVT1_GMIOCgqB5LFs&=Q9zW~+0UQ4cO1^h=sfk)Yf+u(o`Id{Cd;z} zo^Dwdc*08ekp#um-k0|wR=bfM2R@eUUnCQ}3VF1<*W7z;8U%hC|JKm3@!Dq!@o(yr zx{Evr-Bys0hX=eYCcqm>-cJkJWmK6mZoq-nY+Xwphc1BU^f#E?LepJh@aLGZt>&98 zBp;t?iTTCW4+hQ~I43)~DVPx!&<{&0jj1WhS@8t54{8R8?<%W3_u#cQ{?J@6J~}7# zc*WVo)8vGIEdmB>7%2v`P--!tIGxN2Rl%2*(;Qq3(YO|t{$wPD)IKQtPArJQ9Y32- zNc|%AX8L=Z9|dS}s|pZ|*EN#M9xRnr>D_Pq5T^7r0M9=;P&%Sl=$q;2DhtjTo^GJU zxtTaFt$PIs5U@`PvYccYmz%wq=HA zxl_L=Ssk)j&y^guKu8ECdD{S>&Fq-Bh@&j8l}0|8rB0L>qXpdw;+01~MGE7*0!HEp z*EENo#&X*%uRcAy5MR!|{LRiH3?BX0+8Jczxy*;xEN zGx~#e$qRdEYvQdRD4@xed|3KuvN7nqb)3QP6`<#MoRr3>YzCtUYxY5+kWoUqpCk4Y z0B|1`_Vg8Qm-+(jsyz;dW*=iamqLur>js8i!Y=1GCYL|<04c^&axBaCLbAGUg)3=k zybjaHFc$3;R&Qvzx72MSo+O8QA4mA_esWG653JdVWSgr8maUr*!Y6RQ{=Pv;VamFT z`@%0Hxx$sN^Y$1kMSV{h%jHwD4rxNw-vxL6O{~qf z9O6cPd2=$-q4U8⩽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 literal 0 HcmV?d00001 diff --git a/src/assets/404_images/logo.png b/src/assets/404_images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b497ee073990939017bc8e7eec7f3e869416fe22 GIT binary patch literal 8060 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 literal 0 HcmV?d00001 diff --git a/src/assets/404_images/logo_login.png b/src/assets/404_images/logo_login.png new file mode 100644 index 0000000000000000000000000000000000000000..e330458eae0dfc3c0d0a8185cf9a8810ad2e6c06 GIT binary patch literal 25312 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 + + + + {{ item.meta.title }} + {{ item.meta.title }} + + + + + + + + diff --git a/src/components/Hamburger/index.vue b/src/components/Hamburger/index.vue new file mode 100644 index 0000000..368b002 --- /dev/null +++ b/src/components/Hamburger/index.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/src/components/SvgIcon/index.vue b/src/components/SvgIcon/index.vue new file mode 100644 index 0000000..b07ded2 --- /dev/null +++ b/src/components/SvgIcon/index.vue @@ -0,0 +1,62 @@ + + + + + diff --git a/src/components/projectDialog/index.vue b/src/components/projectDialog/index.vue new file mode 100644 index 0000000..11b0c81 --- /dev/null +++ b/src/components/projectDialog/index.vue @@ -0,0 +1,151 @@ + + + + + \ No newline at end of file diff --git a/src/icons/index.js b/src/icons/index.js new file mode 100644 index 0000000..2c6b309 --- /dev/null +++ b/src/icons/index.js @@ -0,0 +1,9 @@ +import Vue from 'vue' +import SvgIcon from '@/components/SvgIcon'// svg component + +// register globally +Vue.component('svg-icon', SvgIcon) + +const req = require.context('./svg', false, /\.svg$/) +const requireAll = requireContext => requireContext.keys().map(requireContext) +requireAll(req) diff --git a/src/icons/svg/dashboard.svg b/src/icons/svg/dashboard.svg new file mode 100644 index 0000000..5317d37 --- /dev/null +++ b/src/icons/svg/dashboard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/example.svg b/src/icons/svg/example.svg new file mode 100644 index 0000000..46f42b5 --- /dev/null +++ b/src/icons/svg/example.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/eye-open.svg b/src/icons/svg/eye-open.svg new file mode 100644 index 0000000..88dcc98 --- /dev/null +++ b/src/icons/svg/eye-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/eye.svg b/src/icons/svg/eye.svg new file mode 100644 index 0000000..16ed2d8 --- /dev/null +++ b/src/icons/svg/eye.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/form.svg b/src/icons/svg/form.svg new file mode 100644 index 0000000..dcbaa18 --- /dev/null +++ b/src/icons/svg/form.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/link.svg b/src/icons/svg/link.svg new file mode 100644 index 0000000..48197ba --- /dev/null +++ b/src/icons/svg/link.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/nested.svg b/src/icons/svg/nested.svg new file mode 100644 index 0000000..06713a8 --- /dev/null +++ b/src/icons/svg/nested.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/password.svg b/src/icons/svg/password.svg new file mode 100644 index 0000000..e291d85 --- /dev/null +++ b/src/icons/svg/password.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/table.svg b/src/icons/svg/table.svg new file mode 100644 index 0000000..0e3dc9d --- /dev/null +++ b/src/icons/svg/table.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/tree.svg b/src/icons/svg/tree.svg new file mode 100644 index 0000000..dd4b7dd --- /dev/null +++ b/src/icons/svg/tree.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/user.svg b/src/icons/svg/user.svg new file mode 100644 index 0000000..0ba0716 --- /dev/null +++ b/src/icons/svg/user.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svgo.yml b/src/icons/svgo.yml new file mode 100644 index 0000000..d11906a --- /dev/null +++ b/src/icons/svgo.yml @@ -0,0 +1,22 @@ +# replace default config + +# multipass: true +# full: true + +plugins: + + # - name + # + # or: + # - name: false + # - name: true + # + # or: + # - name: + # param1: 1 + # param2: 2 + +- removeAttrs: + attrs: + - 'fill' + - 'fill-rule' diff --git a/src/layout/components/AppMain.vue b/src/layout/components/AppMain.vue new file mode 100644 index 0000000..63783eb --- /dev/null +++ b/src/layout/components/AppMain.vue @@ -0,0 +1,48 @@ + + + + + + + diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue new file mode 100644 index 0000000..b2c3ef8 --- /dev/null +++ b/src/layout/components/Navbar.vue @@ -0,0 +1,154 @@ + + + + + diff --git a/src/layout/components/Sidebar/FixiOSBug.js b/src/layout/components/Sidebar/FixiOSBug.js new file mode 100644 index 0000000..bc14856 --- /dev/null +++ b/src/layout/components/Sidebar/FixiOSBug.js @@ -0,0 +1,26 @@ +export default { + computed: { + device() { + return this.$store.state.app.device + } + }, + mounted() { + // In order to fix the click on menu on the ios device will trigger the mouseleave bug + // https://github.com/PanJiaChen/vue-element-admin/issues/1135 + this.fixBugIniOS() + }, + methods: { + fixBugIniOS() { + const $subMenu = this.$refs.subMenu + if ($subMenu) { + const handleMouseleave = $subMenu.handleMouseleave + $subMenu.handleMouseleave = (e) => { + if (this.device === 'mobile') { + return + } + handleMouseleave(e) + } + } + } + } +} diff --git a/src/layout/components/Sidebar/Item.vue b/src/layout/components/Sidebar/Item.vue new file mode 100644 index 0000000..aa1f5da --- /dev/null +++ b/src/layout/components/Sidebar/Item.vue @@ -0,0 +1,41 @@ + + + diff --git a/src/layout/components/Sidebar/Link.vue b/src/layout/components/Sidebar/Link.vue new file mode 100644 index 0000000..09075ed --- /dev/null +++ b/src/layout/components/Sidebar/Link.vue @@ -0,0 +1,49 @@ + + + diff --git a/src/layout/components/Sidebar/Logo.vue b/src/layout/components/Sidebar/Logo.vue new file mode 100644 index 0000000..040fab6 --- /dev/null +++ b/src/layout/components/Sidebar/Logo.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/src/layout/components/Sidebar/SidebarItem copy.vue b/src/layout/components/Sidebar/SidebarItem copy.vue new file mode 100644 index 0000000..a418c3d --- /dev/null +++ b/src/layout/components/Sidebar/SidebarItem copy.vue @@ -0,0 +1,95 @@ + + + diff --git a/src/layout/components/Sidebar/SidebarItem.vue b/src/layout/components/Sidebar/SidebarItem.vue new file mode 100644 index 0000000..9c308f2 --- /dev/null +++ b/src/layout/components/Sidebar/SidebarItem.vue @@ -0,0 +1,95 @@ + + + diff --git a/src/layout/components/Sidebar/index.vue b/src/layout/components/Sidebar/index.vue new file mode 100644 index 0000000..b1fef16 --- /dev/null +++ b/src/layout/components/Sidebar/index.vue @@ -0,0 +1,95 @@ + + + diff --git a/src/layout/components/Sidebar/subMenu copy.vue b/src/layout/components/Sidebar/subMenu copy.vue new file mode 100644 index 0000000..7163210 --- /dev/null +++ b/src/layout/components/Sidebar/subMenu copy.vue @@ -0,0 +1,42 @@ + + + + + \ No newline at end of file diff --git a/src/layout/components/Sidebar/subMenu.vue b/src/layout/components/Sidebar/subMenu.vue new file mode 100644 index 0000000..bf4eac9 --- /dev/null +++ b/src/layout/components/Sidebar/subMenu.vue @@ -0,0 +1,44 @@ + + + + + \ No newline at end of file diff --git a/src/layout/components/TagsView/ScrollPane.vue b/src/layout/components/TagsView/ScrollPane.vue new file mode 100644 index 0000000..bb753a1 --- /dev/null +++ b/src/layout/components/TagsView/ScrollPane.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/layout/components/TagsView/index.vue b/src/layout/components/TagsView/index.vue new file mode 100644 index 0000000..3929722 --- /dev/null +++ b/src/layout/components/TagsView/index.vue @@ -0,0 +1,294 @@ + + + + + + + diff --git a/src/layout/components/historyComponent/history.vue b/src/layout/components/historyComponent/history.vue new file mode 100644 index 0000000..8dffcc6 --- /dev/null +++ b/src/layout/components/historyComponent/history.vue @@ -0,0 +1,326 @@ + + + + + diff --git a/src/layout/components/index.js b/src/layout/components/index.js new file mode 100644 index 0000000..97ee3cd --- /dev/null +++ b/src/layout/components/index.js @@ -0,0 +1,3 @@ +export { default as Navbar } from './Navbar' +export { default as Sidebar } from './Sidebar' +export { default as AppMain } from './AppMain' diff --git a/src/layout/index.vue b/src/layout/index.vue new file mode 100644 index 0000000..ed63580 --- /dev/null +++ b/src/layout/index.vue @@ -0,0 +1,107 @@ + + + + + diff --git a/src/layout/mixin/ResizeHandler copy.js b/src/layout/mixin/ResizeHandler copy.js new file mode 100644 index 0000000..e8d0df8 --- /dev/null +++ b/src/layout/mixin/ResizeHandler copy.js @@ -0,0 +1,45 @@ +import store from '@/store' + +const { body } = document +const WIDTH = 992 // refer to Bootstrap's responsive design + +export default { + watch: { + $route(route) { + if (this.device === 'mobile' && this.sidebar.opened) { + store.dispatch('app/closeSideBar', { withoutAnimation: false }) + } + } + }, + beforeMount() { + window.addEventListener('resize', this.$_resizeHandler) + }, + beforeDestroy() { + window.removeEventListener('resize', this.$_resizeHandler) + }, + mounted() { + const isMobile = this.$_isMobile() + if (isMobile) { + store.dispatch('app/toggleDevice', 'mobile') + store.dispatch('app/closeSideBar', { withoutAnimation: true }) + } + }, + methods: { + // use $_ for mixins properties + // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential + $_isMobile() { + const rect = body.getBoundingClientRect() + return rect.width - 1 < WIDTH + }, + $_resizeHandler() { + if (!document.hidden) { + const isMobile = this.$_isMobile() + store.dispatch('app/toggleDevice', isMobile ? 'mobile' : 'desktop') + + if (isMobile) { + store.dispatch('app/closeSideBar', { withoutAnimation: true }) + } + } + } + } +} diff --git a/src/layout/mixin/ResizeHandler.js b/src/layout/mixin/ResizeHandler.js new file mode 100644 index 0000000..e8d0df8 --- /dev/null +++ b/src/layout/mixin/ResizeHandler.js @@ -0,0 +1,45 @@ +import store from '@/store' + +const { body } = document +const WIDTH = 992 // refer to Bootstrap's responsive design + +export default { + watch: { + $route(route) { + if (this.device === 'mobile' && this.sidebar.opened) { + store.dispatch('app/closeSideBar', { withoutAnimation: false }) + } + } + }, + beforeMount() { + window.addEventListener('resize', this.$_resizeHandler) + }, + beforeDestroy() { + window.removeEventListener('resize', this.$_resizeHandler) + }, + mounted() { + const isMobile = this.$_isMobile() + if (isMobile) { + store.dispatch('app/toggleDevice', 'mobile') + store.dispatch('app/closeSideBar', { withoutAnimation: true }) + } + }, + methods: { + // use $_ for mixins properties + // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential + $_isMobile() { + const rect = body.getBoundingClientRect() + return rect.width - 1 < WIDTH + }, + $_resizeHandler() { + if (!document.hidden) { + const isMobile = this.$_isMobile() + store.dispatch('app/toggleDevice', isMobile ? 'mobile' : 'desktop') + + if (isMobile) { + store.dispatch('app/closeSideBar', { withoutAnimation: true }) + } + } + } + } +} diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..5654222 --- /dev/null +++ b/src/main.js @@ -0,0 +1,60 @@ +import Vue from 'vue' + +import 'normalize.css/normalize.css' // A modern alternative to CSS resets + +import ElementUI from 'element-ui' +import * as echarts from 'echarts'; +import 'element-ui/lib/theme-chalk/index.css' +// import locale from 'element-ui/lib/locale/lang/en' // lang i18n + +import '@/styles/index.scss' // global css +import { Loading } from 'element-ui'; +import App from './App' +import store from './store' +import router from './router' + +// import 'handsontable/dist/handsontable.full.css'; +import '@/icons' // icon +// import '@/permission' // permission control + +/** + * If you don't want to use mock-server + * you want to use MockJs for mock api + * you can execute: mockXHR() + * + * Currently MockJs will be used in the production environment, + * please remove it before going online ! ! ! + */ +if (process.env.NODE_ENV === 'production') { + const { mockXHR } = require('../mock') + mockXHR() +} + +// set ElementUI lang to EN +// Vue.use(ElementUI, { locale }) +// 如果想要中文版 element-ui,按如下方式声明 +Vue.use(ElementUI) +Vue.prototype.$echarts = echarts +Vue.config.productionTip = false +Vue.prototype.openLoading = function() { + const loading = this.$loading({ // 声明一个loading对象 + lock: true, // 是否锁屏 + text: '加载中', // 加载动画的文字 + spinner: 'el-icon-loading', // 引入的loading图标 + background: 'rgba(0, 0, 0, 0.8)', // 背景颜色 + target: '.el-table, .table-flex, .region', // **需要遮罩的区域,这里写要添加loading的选择器** + fullscreen: false, + customClass: 'loadingclass' // **遮罩层新增类名,如果需要修改loading的样式** + }) + setTimeout(function () { // 设定定时器,超时5S后自动关闭遮罩层,避免请求失败时,遮罩层一直存在的问题 + loading.close(); // 关闭遮罩层 + },5000) + return loading; +} + +new Vue({ + el: '#app', + router, + store, + render: h => h(App) +}) diff --git a/src/mixins/infoList.js b/src/mixins/infoList.js new file mode 100644 index 0000000..8541ed5 --- /dev/null +++ b/src/mixins/infoList.js @@ -0,0 +1,75 @@ + +import { formatTimeToStr } from '@/utils/date' + +export default { + data() { + return { + page: 1, + total: 10, + pageSize: 10, + tableData: [], + tabledata:[], + searchInfo: {} + } + }, + methods: { + formatBoolean: function(bool) { + if (bool !== null) { + return bool ? '是' : '否' + } else { + return '' + } + }, + formatDate: function(time) { + if (time !== null && time !== '') { + var date = new Date(time) + return formatTimeToStr(date, 'yyyy-MM-dd hh:mm:ss') + } else { + return '' + } + }, + filterDict(value, type) { + const rowLabel = this[type + 'Options'] && this[type + 'Options'].filter(item => item.value === value) + return rowLabel && rowLabel[0] && rowLabel[0].label + }, + async getDict(type) { + const dicts = await getDict(type) + this[type + 'Options'] = dicts + return dicts + }, + handleSizeChange(val) { + this.pageSize = val + this.getTableData() + }, + handleCurrentChange(val) { + this.page = val + this.getTableData() + }, + // @params beforeFunc function 请求发起前执行的函数 默认为空函数 + // @params afterFunc function 请求完成后执行的函数 默认为空函数 + async getTableData(beforeFunc = () => {}, afterFunc = () => {}) { + beforeFunc() + const table = await this.listApi({ page: this.page, pageSize: this.pageSize, ...this.searchInfo }) + // console.log(table.code) + // console.log("datalist") + // console.log(table.data) + if (table.code === 0) { + this.tableData = table.data.list + this.total = table.data.total + this.count = table.data.count + this.page = table.data.page + this.pageSize = table.data.pageSize + this.pagesize = table.data.pagesize + this.tabledata = table.data.data + // if (table.data.data!='') { + // this.tableData = table.data.data + // } + } + if (table.code === 200) { + this.tableData = table.data + } + + afterFunc() + } + } +} diff --git a/src/permission.js b/src/permission.js new file mode 100644 index 0000000..fc999e9 --- /dev/null +++ b/src/permission.js @@ -0,0 +1,80 @@ +import router from './router' +import store from './store' +import { Message } from 'element-ui' +import NProgress from 'nprogress' // progress bar +import 'nprogress/nprogress.css' // progress bar style +import { getToken } from '@/utils/auth' // get token from cookie +import getPageTitle from '@/utils/get-page-title' + +NProgress.configure({ showSpinner: false }) // NProgress Configuration + +const whiteList = ['/login'] // no redirect whitelist + +router.beforeEach(async(to, from, next) => { + // start progress bar + NProgress.start() + + // set page title + document.title = getPageTitle(to.meta.title) + + // determine whether the user has logged in + const hasToken = getToken() + if (hasToken!='') { + next({path:'/index'}) + } else { + console.log("permission login") + next({path:'/login'}) + } + if (hasToken) { + console.log("hasToken") + console.log(hasToken) + // if (to.path === '/login') { + // console.log("111") + // // if is logged in, redirect to the home page + // next({ path: '/' }) + // NProgress.done() + // } else { + // console.log("222") + // const hasGetUserInfo = store.getters.name + // if (hasGetUserInfo) { + // console.log("333") + // next() + + // } else { + // try { + // console.log("444") + // // get user info + // await store.dispatch('user/getInfo') + + // next() + // } catch (error) { + // console.log("555") + // // remove token and go to login page to re-login + // await store.dispatch('user/resetToken') + // Message.error(error || 'Has Error') + // next(`/login?redirect=${to.path}`) + // NProgress.done() + // } + // } + // } + } else { + console.log("666") + /* has no token*/ + + if (whiteList.indexOf(to.path) !== -1) { + console.log("777") + // in the free login whitelist, go directly + next() + } else { + console.log("888") + // other pages that do not have permission to access are redirected to the login page. + next(`/login?redirect=${to.path}`) + NProgress.done() + } + } +}) + +router.afterEach(() => { + // finish progress bar + NProgress.done() +}) diff --git a/src/router/__index.js b/src/router/__index.js new file mode 100644 index 0000000..6ceee58 --- /dev/null +++ b/src/router/__index.js @@ -0,0 +1,164 @@ +import Vue from 'vue' +import Router from 'vue-router' +import {getmenu} from '../api/user.js' + +Vue.use(Router) + + +/* Layout */ +import Layout from '@/layout' + +export const constantRoutes = [ + { + path: '/login', + component: () => import('@/views/login/wxLogin'), + hidden: true + }, + { + path: '/approval', + component: () => import('@/views/approval/index'), + hidden: true + }, + { + path: '/index', + component: () => import('@/views/index'), + hidden: true + }, + { + path: '/404', + component: () => import('@/views/404'), + hidden: true + }, + { + path: '/', + component: Layout, + redirect: '/frontPage', + children: [{ + path: 'frontPage', + name: 'frontPage', + component: () => import('@/views/frontPage/index'), + meta: { title: '首页'} + }] + }, + + { + path: '/assessmentProgram', + component: Layout, + redirect: '/assessmentProgram/departmentalAssessment', + name: 'Example', + meta: { title: '考核方案', icon: 'el-icon-s-help' }, + children: [ + { + path: 'departmentalAssessment', + name: 'departmentalAssessment', + component: () => import('@/views/assessmentProgram/departmentalAssessment'), + meta: { title: '部门考核', icon: 'table' } + }, + + { + path: 'qualitativeIndicators', + name: 'qualitativeIndicators', + component: () => import('@/views/assessmentProgram/qualitativeIndicators'), + meta: { title: '定性考核', icon: 'tree' } + }, + + ] + }, + { + path: '/basicInfo', + component: Layout, + redirect: '/basicInfo/assessmentDimension', + name: 'Example', + meta: { title: '基础信息', icon: 'el-icon-s-help' }, + children: [ + { + path: 'assessmentDimension', + name: 'assessmentDimension', + component: () => import('@/views/basicInfo/assessmentDimension.vue'), + meta: { title: '考核维度', icon: 'table' } + }, + + { + path: 'project', + name: 'project', + component: () => import('@/views/basicInfo/project'), + meta: { title: '考核指标', icon: 'tree' } + }, + { + path: 'Target', + name: 'Target', + component: () => import('@/views/basicInfo/target'), + meta: { title: '指标目标', icon: 'tree' } + }, + + ] + }, + + { + path: '/details', + component: Layout, + redirect: '/details', + children: [{ + path: 'details', + name: 'Details', + component: () => import('@/views/record/details'), + + }] + }, + + // 404 page must be placed at the end !!! + { path: '*', redirect: '/404', hidden: true } +] + +const routert = new Router({ + linkActiveClass:"selected", + constantRoutes +}) + +const createRouter = () => new Router({ + // mode: 'history', // require service support + scrollBehavior: () => ({ y: 0 }), + routes: constantRoutes +}) +// 路由拦截 +routert.beforeEach((to,from,next)=>{ + + addRouters(); + console.log("123456") + next(); +}); +// 获取后台给的路由 +async function addRouters(){ + const res = await getmenu() + var data = routersData(res.data) + // 动态添加 + router.addRoute(data) + console.log("luyou") +} +// 拼接数据(路由) +function routersData(result){ + + router.push({ + path: '/aaa', + component: Layout, + redirect: '/aaa', + children: [{ + path: 'aaa', + name: 'aaa', + component: () => import('@/views/frontPage/index'), + meta: { title: '首页1'} + }] + + }) + +} + +const router = createRouter() + +// Detail see: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465 +export function resetRouter() { + const newRouter = createRouter() + router.matcher = newRouter.matcher // reset router +} + +export default router diff --git a/src/router/index.js b/src/router/index.js new file mode 100644 index 0000000..ba1c224 --- /dev/null +++ b/src/router/index.js @@ -0,0 +1,446 @@ +import Vue from 'vue' +import Router from 'vue-router' + +Vue.use(Router) + +/* Layout */ +import Layout from '@/layout' +/** + * Note: sub-menu only appear when route children.length >= 1 + * Detail see: https://panjiachen.github.io/vue-element-admin-site/guide/essentials/router-and-nav.html + * + * hidden: true if set true, item will not show in the sidebar(default is false) + * alwaysShow: true if set true, will always show the root menu + * if not set alwaysShow, when item has more than one children route, + * it will becomes nested mode, otherwise not show the root menu + * redirect: noRedirect if set noRedirect will no redirect in the breadcrumb + * name:'router-name' the name is used by (must set!!!) + * meta : { + roles: ['admin','editor'] control the page roles (you can set multiple roles) + title: 'title' the name show in sidebar and breadcrumb (recommend set) + icon: 'svg-name'/'el-icon-x' the icon show in the sidebar + breadcrumb: false if set false, the item will hidden in breadcrumb(default is true) + activeMenu: '/example/list' if set path, the sidebar will highlight the path you set + } + */ + +/** + * constantRoutes + * a base page that does not have permission requirements + * all roles can be accessed + */ +export const constantRoutes = [ + { + path: '/', + component: Layout, + redirect: '/frontPage', + children: [{ + path: 'frontPage', + name: 'frontPage', + component: () => import('@/views/frontPage/index'), + meta: { title: '首页'} + }] + }, + { + path: '/login', + component: () => import('@/views/login/wxLogin'), + hidden: true + }, + // 扫码登录中间件 + { + path: '/ceshi', + component: () => import('@/views/ce/index'), + // hidden: true + }, + { + path: '/lunbo', + component: () => import('@/views/lunbo/index'), + // hidden: true + }, + + { + path: '/approval', + component: () => import('@/views/approval/index'), + hidden: true + }, + // { + // path: '/details', + // component: () => import('@/views/record/details'), + // hidden: true + // }, + { + path: '/index', + component: () => import('@/views/index'), + hidden: true + }, + { + path: '/404', + component: () => import('@/views/404'), + hidden: true + }, + + { + path: '/permissionSetting', + component: Layout, + redirect: '/permissionSetting', + children: [{ + path: 'permissionSetting', + component: () => import('@/views/permission/permissionSetting'), + meta: { title: '权限配置'} + }] + }, + // /setsystem/systemmenulist + { + path: '/setsystem', + component: Layout, + children: [ + // 当 /user/:id 匹配成功 + // UserHome 将被渲染到 User 的 内部 + { + path: 'systemmenulist', + component: () => import('@/views/menuSettings/index'), + meta: { title: '菜单管理'} + }, + ], + }, + // 考核数据 + { + path: '/echarts', + component: Layout, + children: [ + // 当 /user/:id 匹配成功 + // UserHome 将被渲染到 User 的 内部 + { + path: 'table', + component: () => import('@/views/echarts/table'), + meta: { title: '明细表'} + }, + { + path: 'echarts', + component: () => import('@/views/echarts/echarts'), + meta: { title: '图表信息'} + }, + { + path: 'total', + component: () => import('@/views/echarts/total'), + meta: { title: '成绩表'} + }, + ], + }, + // hr设置 + { + path: '/personnel', + component: Layout, + children: [ + // 当 /user/:id 匹配成功 + // UserHome 将被渲染到 User 的 内部 + { + path: 'post', + component: () => import('@/views/personnel/post/index'), + meta: { title: '岗位管理'} + }, + + ], + }, + // hr设置 + { + path: '/hr', + component: Layout, + children: [ + // 当 /user/:id 匹配成功 + // UserHome 将被渲染到 User 的 内部 + { + path: 'personnel', + component: () => import('@/views/hr/personnel.vue'), + meta: { title: '人员管理'} + }, + { + path: 'position', + component: () => import('@/views/hr/position.vue'), + meta: { title: '职务分类'} + }, + { + path: 'jobTitle', + component: () => import('@/views/hr/jobTitle.vue'), + }, + { + path: 'organizeType', + component: () => import('@/views/hr/organizeType.vue'), + }, + { + path: 'organization', + component: () => import('@/views/hr/organization.vue'), + }, + { + path: 'team', + component: () => import('@/views/hr/team.vue'), + meta: { title: '班组管理'} + }, + ], + }, + // 数据提报 + { + path: '/qualitative', + component: Layout, + children: [ + // 当 /user/:id 匹配成功 + // UserHome 将被渲染到 User 的 内部 + { + path: 'qualitative', + component: () => import('@/views/qualitative/index'), + meta: { title: '定性考核'} + }, + { + path: 'mete', + component: () => import('@/views/mete/index'), + meta: { title: '定量考核'} + }, + ], + }, + // 荣誉档案 + { + path: '/honer', + component: Layout, + children: [ + // 当 /user/:id 匹配成功 + // UserHome 将被渲染到 User 的 内部 + { + path: 'index', + component: () => import('@/views/honor/index'), + meta: { title: '荣誉档案'} + }, + { + path: 'type', + component: () => import('@/views/honor/type'), + meta: { title: '载体类型'} + }, + ], + }, + // 审核记录 + { + path: '/approvalData', + component: Layout, + children: [ + // 当 /user/:id 匹配成功 + // UserHome 将被渲染到 User 的 内部 + { + path: 'approvalData', + component: () => import('@/views/approvalData/index'), + meta: { title: '审核记录'} + }, + ], + }, + + // 基础信息 + { + path: '/basicInfo', + component: Layout, + children: [ + // 当 /user/:id 匹配成功 + // UserHome 将被渲染到 User 的 内部 + { + path: 'assessmentDimension', + component: () => import('@/views/basicInfo/assessmentDimension.vue'), + meta: { title: '考核维度'} + }, + { + path: 'project', + component: () => import('@/views/basicInfo/project'), + meta: { title: '考核指标'} + }, + { + path: 'gwproject', + component: () => import('@/views/basicInfo/projectBase'), + meta: { title: '岗位指标'} + }, + { + path: 'Target', + component: () => import('@/views/basicInfo/targetBase'), + meta: { title: '考核目标'} + }, + ], + }, + // { + // path: '/', + // component: Layout, + // redirect: '/dashboard', + // children: [{ + // path: 'dashboard', + // name: 'Dashboard', + // component: () => import('@/views/approval/index'), + // meta: { title: '测试'} + // }] + // }, + // { + // path: '/aaa', + // component: Layout, + // redirect: '/aaa', + // children: [{ + // path: 'aaa', + // name: 'aaa', + // component: () => import('@/views/approval/aaa'), + // meta: { title: '测试1'} + // }] + // }, + // { + // path: '/bbb', + // component: Layout, + // redirect: '/bbb', + // children: [{ + // path: 'bbb', + // name: 'bbb', + // component: () => import('@/views/approval/bbb'), + // meta: { title: 'table编辑测试'} + // }] + // }, + // { + // path: '/bbb', + // component: Layout, + // redirect: '/bbb', + // children: [{ + // path: 'bbb', + // name: 'bbb', + // component: () => import('@/views/basicInfo/assessmentDimension'), + // meta: { title: '测试b'} + // }] + // }, + // { + // path: '/dataReporting', + // component: Layout, + // redirect: '/dataReporting/departmentKpi', + // name: 'Example', + // meta: { title: '数据提报', icon: 'el-icon-s-help' }, + // children: [ + // { + // path: 'departmentKpi', + // name: 'departmentKpi', + // component: () => import('@/views/dataReporting/departmentKpi'), + // meta: { title: '部门KPI', icon: 'table' } + // }, + // { + // path: 'personalKpi', + // name: 'personalKpi', + // component: () => import('@/views/dataReporting/personalKpi'), + // meta: { title: '个人KPI', icon: 'tree' } + // }, + // { + // path: 'operationalEvaluation', + // name: 'operationalEvaluation', + // component: () => import('@/views/dataReporting/operationalEvaluation'), + // meta: { title: '运营评价', icon: 'tree' } + // } + // ] + // }, + // 考核方案 + { + path: '/assessmentProgram', + component: Layout, + children: [ + // 当 /user/:id 匹配成功 + // UserHome 将被渲染到 User 的 内部 + { + path: 'departmentalAssessment', + component: () => import('@/views/assessmentProgram/departmentBase'), + meta: { title: '部门考核'} + }, + { + path: 'gwQualitativeIndicators', + component: () => import('@/views/assessmentProgram/qualitativeIndicatorsBase'), + meta: { title: '定性考核'} + }, + { + path: 'qualitativeIndicators', + component: () => import('@/views/assessmentProgram/qualitativeIndicators'), + meta: { title: '定性考核'} + }, + + ], + }, + + { + path: '/basicInfo', + component: Layout, + redirect: '/basicInfo/assessmentDimension', + name: 'Example', + meta: { title: '基础信息', icon: 'el-icon-s-help' }, + children: [ + { + path: 'assessmentDimension', + name: 'assessmentDimension', + component: () => import('@/views/basicInfo/assessmentDimension.vue'), + meta: { title: '考核维度', icon: 'table' } + }, + // { + // path: 'quantitativeIndicators', + // name: 'quantitativeIndicators', + // component: () => import('@/views/basicInfo/quantitativeIndicators'), + // meta: { title: '定量指标', icon: 'tree' } + // }, + // { + // path: 'qualitativeIndicators', + // name: 'qualitativeIndicators', + // component: () => import('@/views/basicInfo/qualitativeIndicators'), + // meta: { title: '定性指标', icon: 'tree' } + // }, + { + path: 'project', + name: 'project', + component: () => import('@/views/basicInfo/project'), + meta: { title: '考核指标', icon: 'tree' } + }, + { + path: 'Target', + name: 'Target', + component: () => import('@/views/basicInfo/targetBase'), + meta: { title: '考核目标', icon: 'tree' } + }, + // { + // path: 'jobEntry', + // name: 'jobEntry', + // component: () => import('@/views/basicInfo/jobEntry'), + // meta: { title: '岗位录入', icon: 'tree' } + // } + ] + }, + // { + // path: '/record', + // component: Layout, + // redirect: '/record', + // children: [{ + // path: 'record', + // name: 'Record', + // component: () => import('@/views/record/index'), + // meta: { title: '考核记录'} + // }] + // }, + { + path: '/details', + component: Layout, + redirect: '/details', + children: [{ + path: 'details', + name: 'Details', + component: () => import('@/views/record/details'), + // meta: { title: '考核记录详情'} + }] + }, + + // 404 page must be placed at the end !!! + { path: '*', redirect: '/404', hidden: true } +] + +const createRouter = () => new Router({ + // mode: 'history', // require service support + scrollBehavior: () => ({ y: 0 }), + routes: constantRoutes +}) + +const router = createRouter() + +// Detail see: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465 +export function resetRouter() { + const newRouter = createRouter() + router.matcher = newRouter.matcher // reset router +} + +export default router diff --git a/src/settings.js b/src/settings.js new file mode 100644 index 0000000..83299fc --- /dev/null +++ b/src/settings.js @@ -0,0 +1,16 @@ +module.exports = { + + title: '绩效考核', + + /** + * @type {boolean} true | false + * @description Whether fix the header + */ + fixedHeader: false, + + /** + * @type {boolean} true | false + * @description Whether show the logo in sidebar + */ + sidebarLogo: false +} diff --git a/src/store/getters.js b/src/store/getters.js new file mode 100644 index 0000000..5ab7b4c --- /dev/null +++ b/src/store/getters.js @@ -0,0 +1,8 @@ +const getters = { + sidebar: state => state.app.sidebar, + device: state => state.app.device, + token: state => state.user.token, + avatar: state => state.user.avatar, + name: state => state.user.name +} +export default getters diff --git a/src/store/index.js b/src/store/index.js new file mode 100644 index 0000000..6be466a --- /dev/null +++ b/src/store/index.js @@ -0,0 +1,19 @@ +import Vue from 'vue' +import Vuex from 'vuex' +import getters from './getters' +import app from './modules/app' +import settings from './modules/settings' +import user from './modules/user' + +Vue.use(Vuex) + +const store = new Vuex.Store({ + modules: { + app, + settings, + user + }, + getters +}) + +export default store diff --git a/src/store/modules/app.js b/src/store/modules/app.js new file mode 100644 index 0000000..7ea7e33 --- /dev/null +++ b/src/store/modules/app.js @@ -0,0 +1,48 @@ +import Cookies from 'js-cookie' + +const state = { + sidebar: { + opened: Cookies.get('sidebarStatus') ? !!+Cookies.get('sidebarStatus') : true, + withoutAnimation: false + }, + device: 'desktop' +} + +const mutations = { + TOGGLE_SIDEBAR: state => { + state.sidebar.opened = !state.sidebar.opened + state.sidebar.withoutAnimation = false + if (state.sidebar.opened) { + Cookies.set('sidebarStatus', 1) + } else { + Cookies.set('sidebarStatus', 0) + } + }, + CLOSE_SIDEBAR: (state, withoutAnimation) => { + Cookies.set('sidebarStatus', 0) + state.sidebar.opened = false + state.sidebar.withoutAnimation = withoutAnimation + }, + TOGGLE_DEVICE: (state, device) => { + state.device = device + } +} + +const actions = { + toggleSideBar({ commit }) { + commit('TOGGLE_SIDEBAR') + }, + closeSideBar({ commit }, { withoutAnimation }) { + commit('CLOSE_SIDEBAR', withoutAnimation) + }, + toggleDevice({ commit }, device) { + commit('TOGGLE_DEVICE', device) + } +} + +export default { + namespaced: true, + state, + mutations, + actions +} diff --git a/src/store/modules/settings.js b/src/store/modules/settings.js new file mode 100644 index 0000000..b3f33f8 --- /dev/null +++ b/src/store/modules/settings.js @@ -0,0 +1,32 @@ +import defaultSettings from '@/settings' + +const { showSettings, fixedHeader, sidebarLogo } = defaultSettings + +const state = { + showSettings: showSettings, + fixedHeader: fixedHeader, + sidebarLogo: sidebarLogo +} + +const mutations = { + CHANGE_SETTING: (state, { key, value }) => { + // eslint-disable-next-line no-prototype-builtins + if (state.hasOwnProperty(key)) { + state[key] = value + } + } +} + +const actions = { + changeSetting({ commit }, data) { + commit('CHANGE_SETTING', data) + } +} + +export default { + namespaced: true, + state, + mutations, + actions +} + diff --git a/src/store/modules/user.js b/src/store/modules/user.js new file mode 100644 index 0000000..141a956 --- /dev/null +++ b/src/store/modules/user.js @@ -0,0 +1,120 @@ +import { login, logout, getInfo } from '@/api/user' +import { getToken, setToken, removeToken } from '@/utils/auth' +import { resetRouter } from '@/router' +import router from '@/router/index' + +const getDefaultState = () => { + return { + userInfo:{}, + key:'', + token: getToken(), + //token: getToken(), + name: '', + avatar: '' + } +} + +const state = getDefaultState() + +const mutations = { + loginOut(state) { + console.log('user.js loginOut') + state.userInfo = {} + state.token = '' + state.key = '' + router.push('/login') + }, + setUserInfo(state, userInfo) { + // 这里的 `state` 对象是模块的局部状态 + state.userInfo = userInfo + }, + setKey(state, key) { + // 这里的 `state` 对象是模块的局部状态 + state.key = key + }, + setToken(state, token) { + // 这里的 `state` 对象是模块的局部状态 + state.token = token + }, + RESET_STATE: (state) => { + Object.assign(state, getDefaultState()) + }, + SET_TOKEN: (state, token) => { + state.token = token + }, + SET_NAME: (state, name) => { + state.name = name + }, + SET_AVATAR: (state, avatar) => { + state.avatar = avatar + } +} + +const actions = { + // user login + login({ commit }, userInfo) { + const { username, password } = userInfo + return new Promise((resolve, reject) => { + login({ username: username.trim(), password: password }).then(response => { + const { data } = response + commit('SET_TOKEN', data.token) + setToken(data.token) + resolve() + }).catch(error => { + reject(error) + }) + }) + }, + + // get user info + getInfo({ commit, state }) { + return new Promise((resolve, reject) => { + getInfo(state.token).then(response => { + const { data } = response + + if (!data) { + return reject('Verification failed, please Login again.') + } + + const { name, avatar } = data + + commit('SET_NAME', name) + commit('SET_AVATAR', avatar) + resolve(data) + }).catch(error => { + reject(error) + }) + }) + }, + + // user logout + logout({ commit, state }) { + return new Promise((resolve, reject) => { + logout(state.token).then(() => { + removeToken() // must remove token first + resetRouter() + commit('RESET_STATE') + resolve() + }).catch(error => { + reject(error) + }) + }) + }, + + // remove token + resetToken({ commit }) { + return new Promise(resolve => { + removeToken() // must remove token first + commit('RESET_STATE') + resolve() + }) + } +} + +export default { + namespaced: true, + state, + mutations, + actions +} + diff --git a/src/styles/element-ui.scss b/src/styles/element-ui.scss new file mode 100644 index 0000000..0062411 --- /dev/null +++ b/src/styles/element-ui.scss @@ -0,0 +1,49 @@ +// cover some element-ui styles + +.el-breadcrumb__inner, +.el-breadcrumb__inner a { + font-weight: 400 !important; +} + +.el-upload { + input[type="file"] { + display: none !important; + } +} + +.el-upload__input { + display: none; +} + + +// to fixed https://github.com/ElemeFE/element/issues/2461 +.el-dialog { + transform: none; + left: 0; + position: relative; + margin: 0 auto; +} + +// refine element ui upload +.upload-container { + .el-upload { + width: 100%; + + .el-upload-dragger { + width: 100%; + height: 200px; + } + } +} + +// dropdown +.el-dropdown-menu { + a { + display: block + } +} + +// to fix el-date-picker css style +.el-range-separator { + box-sizing: content-box; +} diff --git a/src/styles/index.scss b/src/styles/index.scss new file mode 100644 index 0000000..3b4da51 --- /dev/null +++ b/src/styles/index.scss @@ -0,0 +1,65 @@ +@import './variables.scss'; +@import './mixin.scss'; +@import './transition.scss'; +@import './element-ui.scss'; +@import './sidebar.scss'; + +body { + height: 100%; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; + font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif; +} + +label { + font-weight: 700; +} + +html { + height: 100%; + box-sizing: border-box; +} + +#app { + height: 100%; +} + +*, +*:before, +*:after { + box-sizing: inherit; +} + +a:focus, +a:active { + outline: none; +} + +a, +a:focus, +a:hover { + cursor: pointer; + color: inherit; + text-decoration: none; +} + +div:focus { + outline: none; +} + +.clearfix { + &:after { + visibility: hidden; + display: block; + font-size: 0; + content: " "; + clear: both; + height: 0; + } +} + +// main-container global css +.app-container { + padding: 20px; +} diff --git a/src/styles/mixin.scss b/src/styles/mixin.scss new file mode 100644 index 0000000..36b74bb --- /dev/null +++ b/src/styles/mixin.scss @@ -0,0 +1,28 @@ +@mixin clearfix { + &:after { + content: ""; + display: table; + clear: both; + } +} + +@mixin scrollBar { + &::-webkit-scrollbar-track-piece { + background: #d3dce6; + } + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background: #99a9bf; + border-radius: 20px; + } +} + +@mixin relative { + position: relative; + width: 100%; + height: 100%; +} diff --git a/src/styles/sidebar.scss b/src/styles/sidebar.scss new file mode 100644 index 0000000..94760cc --- /dev/null +++ b/src/styles/sidebar.scss @@ -0,0 +1,226 @@ +#app { + + .main-container { + min-height: 100%; + transition: margin-left .28s; + margin-left: $sideBarWidth; + position: relative; + } + + .sidebar-container { + transition: width 0.28s; + width: $sideBarWidth !important; + background-color: $menuBg; + height: 100%; + position: fixed; + font-size: 0px; + top: 0; + bottom: 0; + left: 0; + z-index: 1001; + overflow: hidden; + + // reset element-ui css + .horizontal-collapse-transition { + transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out; + } + + .scrollbar-wrapper { + overflow-x: hidden !important; + } + + .el-scrollbar__bar.is-vertical { + right: 0px; + } + + .el-scrollbar { + height: 100%; + } + + &.has-logo { + .el-scrollbar { + height: calc(100% - 50px); + } + } + + .is-horizontal { + display: none; + } + + a { + display: inline-block; + width: 100%; + overflow: hidden; + } + + .svg-icon { + margin-right: 16px; + } + + .sub-el-icon { + margin-right: 12px; + margin-left: -2px; + } + + .el-menu { + border: none; + height: 100%; + width: 100% !important; + } + + // menu hover + .submenu-title-noDropdown, + .el-submenu__title { + &:hover { + background-color: $menuHover !important; + } + } + + .is-active>.el-submenu__title { + color: $subMenuActiveText !important; + } + + & .nest-menu .el-submenu>.el-submenu__title, + & .el-submenu .el-menu-item { + min-width: $sideBarWidth !important; + background-color: $subMenuBg !important; + + &:hover { + background-color: $subMenuHover !important; + } + } + } + + .hideSidebar { + .sidebar-container { + width: 54px !important; + } + + .main-container { + margin-left: 54px; + } + + .submenu-title-noDropdown { + padding: 0 !important; + position: relative; + + .el-tooltip { + padding: 0 !important; + + .svg-icon { + margin-left: 20px; + } + + .sub-el-icon { + margin-left: 19px; + } + } + } + + .el-submenu { + overflow: hidden; + + &>.el-submenu__title { + padding: 0 !important; + + .svg-icon { + margin-left: 20px; + } + + .sub-el-icon { + margin-left: 19px; + } + + .el-submenu__icon-arrow { + display: none; + } + } + } + + .el-menu--collapse { + .el-submenu { + &>.el-submenu__title { + &>span { + height: 0; + width: 0; + overflow: hidden; + visibility: hidden; + display: inline-block; + } + } + } + } + } + + .el-menu--collapse .el-menu .el-submenu { + min-width: $sideBarWidth !important; + } + + // mobile responsive + .mobile { + .main-container { + margin-left: 0px; + } + + .sidebar-container { + transition: transform .28s; + width: $sideBarWidth !important; + } + + &.hideSidebar { + .sidebar-container { + pointer-events: none; + transition-duration: 0.3s; + transform: translate3d(-$sideBarWidth, 0, 0); + } + } + } + + .withoutAnimation { + + .main-container, + .sidebar-container { + transition: none; + } + } +} + +// when menu collapsed +.el-menu--vertical { + &>.el-menu { + .svg-icon { + margin-right: 16px; + } + .sub-el-icon { + margin-right: 12px; + margin-left: -2px; + } + } + + .nest-menu .el-submenu>.el-submenu__title, + .el-menu-item { + &:hover { + // you can use $subMenuHover + background-color: $menuHover !important; + } + } + + // the scroll bar appears when the subMenu is too long + >.el-menu--popup { + max-height: 100vh; + overflow-y: auto; + + &::-webkit-scrollbar-track-piece { + background: #d3dce6; + } + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background: #99a9bf; + border-radius: 20px; + } + } +} diff --git a/src/styles/transition.scss b/src/styles/transition.scss new file mode 100644 index 0000000..4cb27cc --- /dev/null +++ b/src/styles/transition.scss @@ -0,0 +1,48 @@ +// global transition css + +/* fade */ +.fade-enter-active, +.fade-leave-active { + transition: opacity 0.28s; +} + +.fade-enter, +.fade-leave-active { + opacity: 0; +} + +/* fade-transform */ +.fade-transform-leave-active, +.fade-transform-enter-active { + transition: all .5s; +} + +.fade-transform-enter { + opacity: 0; + transform: translateX(-30px); +} + +.fade-transform-leave-to { + opacity: 0; + transform: translateX(30px); +} + +/* breadcrumb transition */ +.breadcrumb-enter-active, +.breadcrumb-leave-active { + transition: all .5s; +} + +.breadcrumb-enter, +.breadcrumb-leave-active { + opacity: 0; + transform: translateX(20px); +} + +.breadcrumb-move { + transition: all .5s; +} + +.breadcrumb-leave-active { + position: absolute; +} diff --git a/src/styles/variables.scss b/src/styles/variables.scss new file mode 100644 index 0000000..be55772 --- /dev/null +++ b/src/styles/variables.scss @@ -0,0 +1,25 @@ +// sidebar +$menuText:#bfcbd9; +$menuActiveText:#409EFF; +$subMenuActiveText:#f4f4f5; //https://github.com/ElemeFE/element/issues/12951 + +$menuBg:#304156; +$menuHover:#263445; + +$subMenuBg:#1f2d3d; +$subMenuHover:#001528; + +$sideBarWidth: 210px; + +// the :export directive is the magic sauce for webpack +// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass +:export { + menuText: $menuText; + menuActiveText: $menuActiveText; + subMenuActiveText: $subMenuActiveText; + menuBg: $menuBg; + menuHover: $menuHover; + subMenuBg: $subMenuBg; + subMenuHover: $subMenuHover; + sideBarWidth: $sideBarWidth; +} diff --git a/src/utils/auth.js b/src/utils/auth.js new file mode 100644 index 0000000..dee6fe4 --- /dev/null +++ b/src/utils/auth.js @@ -0,0 +1,27 @@ +import Cookies from 'js-cookie' + +const TokenKey = 'vue_admin_template_token' +const KeyKey = 'vue_admin_template_key' + +export function getToken() { + return Cookies.get(TokenKey) +} + +export function setToken(token) { + return Cookies.set(TokenKey, token) +} + +export function removeToken() { + return Cookies.remove(TokenKey) +} +export function getKey() { + return Cookies.get(KeyKey) +} + +export function setKey(Key) { + return Cookies.set(KeyKey, Key) +} + +export function removeKey() { + return Cookies.remove(KeyKey) +} diff --git a/src/utils/bus.js b/src/utils/bus.js new file mode 100644 index 0000000..4b673fa --- /dev/null +++ b/src/utils/bus.js @@ -0,0 +1,6 @@ + +// using ES6 modules +import mitt from 'mitt' + +export const emitter = mitt() + diff --git a/src/utils/date.js b/src/utils/date.js new file mode 100644 index 0000000..6bb8570 --- /dev/null +++ b/src/utils/date.js @@ -0,0 +1,30 @@ +// 对Date的扩展,将 Date 转化为指定格式的String +// 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符, +// 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字) +// (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423 +// (new Date()).Format("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18 +// eslint-disable-next-line no-extend-native +Date.prototype.Format = function(fmt) { + var o = { + 'M+': this.getMonth() + 1, // 月份 + 'd+': this.getDate(), // 日 + 'h+': this.getHours(), // 小时 + 'm+': this.getMinutes(), // 分 + 's+': this.getSeconds(), // 秒 + 'q+': Math.floor((this.getMonth() + 3) / 3), // 季度 + 'S': this.getMilliseconds() // 毫秒 + } + if (/(y+)/.test(fmt)) { fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length)) } + for (var k in o) { + if (new RegExp('(' + k + ')').test(fmt)) { fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length))) } + } + return fmt +} + +export function formatTimeToStr(times, pattern) { + var d = new Date(times).Format('yyyy-MM-dd hh:mm:ss') + if (pattern) { + d = new Date(times).Format(pattern) + } + return d.toLocaleString() +} diff --git a/src/utils/get-page-title.js b/src/utils/get-page-title.js new file mode 100644 index 0000000..de84a07 --- /dev/null +++ b/src/utils/get-page-title.js @@ -0,0 +1,10 @@ +import defaultSettings from '@/settings' + +const title = defaultSettings.title || '绩效考核' + +export default function getPageTitle(pageTitle) { + if (pageTitle) { + return `${pageTitle} - ${title}` + } + return `${title}` +} diff --git a/src/utils/i18n.js b/src/utils/i18n.js new file mode 100644 index 0000000..76be5a4 --- /dev/null +++ b/src/utils/i18n.js @@ -0,0 +1,12 @@ +// translate router.meta.title, be used in breadcrumb sidebar tagsview +export function generateTitle(title) { + const hasKey = this.$te('route.' + title) + + if (hasKey) { + // $t :this method from vue-i18n, inject in @/lang/index.js + const translatedTitle = this.$t('route.' + title) + + return translatedTitle + } + return title +} diff --git a/src/utils/index.js b/src/utils/index.js new file mode 100644 index 0000000..4830c04 --- /dev/null +++ b/src/utils/index.js @@ -0,0 +1,117 @@ +/** + * Created by PanJiaChen on 16/11/18. + */ + +/** + * Parse the time to string + * @param {(Object|string|number)} time + * @param {string} cFormat + * @returns {string | null} + */ +export function parseTime(time, cFormat) { + if (arguments.length === 0 || !time) { + return null + } + const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}' + let date + if (typeof time === 'object') { + date = time + } else { + if ((typeof time === 'string')) { + if ((/^[0-9]+$/.test(time))) { + // support "1548221490638" + time = parseInt(time) + } else { + // support safari + // https://stackoverflow.com/questions/4310953/invalid-date-in-safari + time = time.replace(new RegExp(/-/gm), '/') + } + } + + if ((typeof time === 'number') && (time.toString().length === 10)) { + time = time * 1000 + } + date = new Date(time) + } + const formatObj = { + y: date.getFullYear(), + m: date.getMonth() + 1, + d: date.getDate(), + h: date.getHours(), + i: date.getMinutes(), + s: date.getSeconds(), + a: date.getDay() + } + const time_str = format.replace(/{([ymdhisa])+}/g, (result, key) => { + const value = formatObj[key] + // Note: getDay() returns 0 on Sunday + if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value ] } + return value.toString().padStart(2, '0') + }) + return time_str +} + +/** + * @param {number} time + * @param {string} option + * @returns {string} + */ +export function formatTime(time, option) { + if (('' + time).length === 10) { + time = parseInt(time) * 1000 + } else { + time = +time + } + const d = new Date(time) + const now = Date.now() + + const diff = (now - d) / 1000 + + if (diff < 30) { + return '刚刚' + } else if (diff < 3600) { + // less 1 hour + return Math.ceil(diff / 60) + '分钟前' + } else if (diff < 3600 * 24) { + return Math.ceil(diff / 3600) + '小时前' + } else if (diff < 3600 * 24 * 2) { + return '1天前' + } + if (option) { + return parseTime(time, option) + } else { + return ( + d.getMonth() + + 1 + + '月' + + d.getDate() + + '日' + + d.getHours() + + '时' + + d.getMinutes() + + '分' + ) + } +} + +/** + * @param {string} url + * @returns {Object} + */ +export function param2Obj(url) { + const search = decodeURIComponent(url.split('?')[1]).replace(/\+/g, ' ') + if (!search) { + return {} + } + const obj = {} + const searchArr = search.split('&') + searchArr.forEach(v => { + const index = v.indexOf('=') + if (index !== -1) { + const name = v.substring(0, index) + const val = v.substring(index + 1, v.length) + obj[name] = val + } + }) + return obj +} diff --git a/src/utils/request.js b/src/utils/request.js new file mode 100644 index 0000000..a3369d0 --- /dev/null +++ b/src/utils/request.js @@ -0,0 +1,108 @@ +import axios from 'axios' +import { MessageBox, Message } from 'element-ui' +import store from '@/store' +import { Loading } from 'element-ui'; +import { getToken,getKey } from '@/utils/auth' +import Vue from 'vue' +function showloading() { + //因为是全局导入ui,所以直接使用Vue.prototype,如果是局部导入可以命名为对应名称 + Vue.prototype.$loading({ + lock: true, + text: 'Loading', + spinner: 'el-icon-loading', + background: 'rgba(0, 0, 0, 0.7)' + }); +} +function endLoading() { //使用Element loading-close 方法 + Vue.prototype.$loading().close() +} +// create an axios instance +const service = axios.create({ + baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url + // withCredentials: true, // send cookies when cross-domain requests + timeout: 180000 // request timeout +}) + +// request interceptor +service.interceptors.request.use( + config => { + // do something before request is sent + + if (store.getters.token) { + // let each request carry token + // ['X-Token'] is a custom headers key + // please modify it according to the actual situation + config.headers['user-token'] = getToken() + config.headers['user-key'] = getKey() + } + return config + }, + error => { + // do something with request error + console.log(error) // for debug + return Promise.reject(error) + } +) + +// response interceptor +service.interceptors.response.use( + /** + * If you want to get http information such as headers or status + * Please return response => response + */ + + /** + * Determine the request status by custom code + * Here is just an example + * You can also judge the status by HTTP Status Code + */ + response => { + const res = response.data + console.log("res.code") + console.log(res.code) + // if the custom code is not 20000, it is judged as an error. + if (res.code !== 0) { + endLoading() + if(res.code === 7){ + console.log('res.code === 7') + store.commit('user/loginOut') + } + Message({ + message: res.msg || 'Error', + type: 'error', + duration: 5 * 1000 + }) + + // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired; + if (res.code === 50008 || res.code === 50012 || res.code === 50014) { + // to re-login + MessageBox.confirm('You have been logged out, you can cancel to stay on this page, or log in again', 'Confirm logout', { + confirmButtonText: 'Re-Login', + cancelButtonText: 'Cancel', + type: 'warning' + }).then(() => { + store.dispatch('user/resetToken').then(() => { + location.reload() + }) + }) + } + return res + // return Promise.reject(Error).catch(Error=>{console.log(Error)}) + // return Promise.reject(new Error(res.msg || 'Error')) + } else { + console.log("成功") + return res + } + }, + error => { + console.log('err' + error) // for debug + Message({ + message: error.msg, + type: 'error', + duration: 5 * 1000 + }) + return Promise.reject(error) + } +) + +export default service diff --git a/src/utils/request1.js b/src/utils/request1.js new file mode 100644 index 0000000..c498707 --- /dev/null +++ b/src/utils/request1.js @@ -0,0 +1,89 @@ +import axios from 'axios' +import { MessageBox, Message } from 'element-ui' +import store from '@/store' +import { getToken,getKey } from '@/utils/auth' + +// create an axios instance +const service = axios.create({ + baseURL: process.env.VUE_APP_BASE_API1, // url = base url + request url + // withCredentials: true, // send cookies when cross-domain requests + timeout: 180000 // request timeout +}) + +// request interceptor +service.interceptors.request.use( + config => { + // do something before request is sent + + if (store.getters.token) { + // let each request carry token + // ['X-Token'] is a custom headers key + // please modify it according to the actual situation + config.headers['user-token'] = getToken() + config.headers['user-key'] = getKey() + } + return config + }, + error => { + // do something with request error + console.log(error) // for debug + return Promise.reject(error) + } +) + +// response interceptor +service.interceptors.response.use( + /** + * If you want to get http information such as headers or status + * Please return response => response + */ + + /** + * Determine the request status by custom code + * Here is just an example + * You can also judge the status by HTTP Status Code + */ + response => { + const res = response.data + + // if the custom code is not 20000, it is judged as an error. + if (res.code !== 0) { + if(res.code === 7){ + store.commit('user/loginOut') + } + Message({ + message: res.msg || 'Error', + type: 'error', + duration: 5 * 1000 + }) + + // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired; + if (res.code === 50008 || res.code === 50012 || res.code === 50014) { + // to re-login + MessageBox.confirm('You have been logged out, you can cancel to stay on this page, or log in again', 'Confirm logout', { + confirmButtonText: 'Re-Login', + cancelButtonText: 'Cancel', + type: 'warning' + }).then(() => { + store.dispatch('user/resetToken').then(() => { + location.reload() + }) + }) + } + return Promise.reject(new Error(res.msg || 'Error')) + } else { + return res + } + }, + error => { + console.log('err' + error) // for debug + Message({ + message: error.msg, + type: 'error', + duration: 5 * 1000 + }) + return Promise.reject(error) + } +) + +export default service diff --git a/src/utils/requestFile.js b/src/utils/requestFile.js new file mode 100644 index 0000000..6cce14c --- /dev/null +++ b/src/utils/requestFile.js @@ -0,0 +1,89 @@ +import axios from 'axios' +import { MessageBox, Message } from 'element-ui' +import store from '@/store' +import { getToken,getKey } from '@/utils/auth' + +// create an axios instance +const service = axios.create({ + baseURL: process.env.VUE_APP_BASE_API2, // url = base url + request url + // withCredentials: true, // send cookies when cross-domain requests + timeout: 180000 // request timeout +}) + +// request interceptor +service.interceptors.request.use( + config => { + // do something before request is sent + + if (store.getters.token) { + // let each request carry token + // ['X-Token'] is a custom headers key + // please modify it according to the actual situation + config.headers['user-token'] = getToken() + config.headers['user-key'] = getKey() + } + return config + }, + error => { + // do something with request error + console.log(error) // for debug + return Promise.reject(error) + } +) + +// response interceptor +service.interceptors.response.use( + /** + * If you want to get http information such as headers or status + * Please return response => response + */ + + /** + * Determine the request status by custom code + * Here is just an example + * You can also judge the status by HTTP Status Code + */ + response => { + const res = response.data + + // if the custom code is not 20000, it is judged as an error. + if (res.code !== 0) { + if(res.code === 7){ + store.commit('user/loginOut') + } + Message({ + message: res.msg || 'Error', + type: 'error', + duration: 5 * 1000 + }) + + // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired; + if (res.code === 50008 || res.code === 50012 || res.code === 50014) { + // to re-login + MessageBox.confirm('You have been logged out, you can cancel to stay on this page, or log in again', 'Confirm logout', { + confirmButtonText: 'Re-Login', + cancelButtonText: 'Cancel', + type: 'warning' + }).then(() => { + store.dispatch('user/resetToken').then(() => { + location.reload() + }) + }) + } + return Promise.reject(new Error(res.msg || 'Error')) + } else { + return res + } + }, + error => { + console.log('err' + error) // for debug + Message({ + message: error.msg, + type: 'error', + duration: 5 * 1000 + }) + return Promise.reject(error) + } +) + +export default service diff --git a/src/utils/validate.js b/src/utils/validate.js new file mode 100644 index 0000000..8d962ad --- /dev/null +++ b/src/utils/validate.js @@ -0,0 +1,20 @@ +/** + * Created by PanJiaChen on 16/11/18. + */ + +/** + * @param {string} path + * @returns {Boolean} + */ +export function isExternal(path) { + return /^(https?:|mailto:|tel:)/.test(path) +} + +/** + * @param {string} str + * @returns {Boolean} + */ +export function validUsername(str) { + const valid_map = ['admin', 'editor'] + return valid_map.indexOf(str.trim()) >= 0 +} diff --git a/src/views/404.vue b/src/views/404.vue new file mode 100644 index 0000000..1791f55 --- /dev/null +++ b/src/views/404.vue @@ -0,0 +1,228 @@ + + + + + diff --git a/src/views/approval/aaa.vue b/src/views/approval/aaa.vue new file mode 100644 index 0000000..5ca5bbe --- /dev/null +++ b/src/views/approval/aaa.vue @@ -0,0 +1,129 @@ + + + + + \ No newline at end of file diff --git a/src/views/approval/bbb.vue b/src/views/approval/bbb.vue new file mode 100644 index 0000000..52498e0 --- /dev/null +++ b/src/views/approval/bbb.vue @@ -0,0 +1,17 @@ + + + + + \ No newline at end of file diff --git a/src/views/approval/index.vue b/src/views/approval/index.vue new file mode 100644 index 0000000..a3fc0b4 --- /dev/null +++ b/src/views/approval/index.vue @@ -0,0 +1,220 @@ + + + + + \ No newline at end of file diff --git a/src/views/approvalData/index.vue b/src/views/approvalData/index.vue new file mode 100644 index 0000000..a95fc65 --- /dev/null +++ b/src/views/approvalData/index.vue @@ -0,0 +1,743 @@ + + + + + diff --git a/src/views/assessmentProgram/assessmentDimension.vue b/src/views/assessmentProgram/assessmentDimension.vue new file mode 100644 index 0000000..2f1bb73 --- /dev/null +++ b/src/views/assessmentProgram/assessmentDimension.vue @@ -0,0 +1,326 @@ + + + + + diff --git a/src/views/assessmentProgram/departmentBase.vue b/src/views/assessmentProgram/departmentBase.vue new file mode 100644 index 0000000..40abd21 --- /dev/null +++ b/src/views/assessmentProgram/departmentBase.vue @@ -0,0 +1,465 @@ + + + + + + \ No newline at end of file diff --git a/src/views/assessmentProgram/departmentalAssessment copy.vue b/src/views/assessmentProgram/departmentalAssessment copy.vue new file mode 100644 index 0000000..838bcc9 --- /dev/null +++ b/src/views/assessmentProgram/departmentalAssessment copy.vue @@ -0,0 +1,1204 @@ + + + + + diff --git a/src/views/assessmentProgram/departmentalAssessment.vue b/src/views/assessmentProgram/departmentalAssessment.vue new file mode 100644 index 0000000..215d3b1 --- /dev/null +++ b/src/views/assessmentProgram/departmentalAssessment.vue @@ -0,0 +1,1829 @@ + + + + + diff --git a/src/views/assessmentProgram/gwDepartmentalAssessment.vue b/src/views/assessmentProgram/gwDepartmentalAssessment.vue new file mode 100644 index 0000000..32944ab --- /dev/null +++ b/src/views/assessmentProgram/gwDepartmentalAssessment.vue @@ -0,0 +1,2105 @@ + + + + + + \ No newline at end of file diff --git a/src/views/assessmentProgram/gwQualitativeIndicators.vue b/src/views/assessmentProgram/gwQualitativeIndicators.vue new file mode 100644 index 0000000..e471c81 --- /dev/null +++ b/src/views/assessmentProgram/gwQualitativeIndicators.vue @@ -0,0 +1,2523 @@ + + + + + diff --git a/src/views/assessmentProgram/jobEntry.vue b/src/views/assessmentProgram/jobEntry.vue new file mode 100644 index 0000000..61b2b20 --- /dev/null +++ b/src/views/assessmentProgram/jobEntry.vue @@ -0,0 +1,326 @@ + + + + + diff --git a/src/views/assessmentProgram/project.vue b/src/views/assessmentProgram/project.vue new file mode 100644 index 0000000..49e0ab0 --- /dev/null +++ b/src/views/assessmentProgram/project.vue @@ -0,0 +1,481 @@ + + + + + diff --git a/src/views/assessmentProgram/qualitativeIndicators copy 2.vue b/src/views/assessmentProgram/qualitativeIndicators copy 2.vue new file mode 100644 index 0000000..db4a71e --- /dev/null +++ b/src/views/assessmentProgram/qualitativeIndicators copy 2.vue @@ -0,0 +1,725 @@ + + + + + diff --git a/src/views/assessmentProgram/qualitativeIndicators copy.vue b/src/views/assessmentProgram/qualitativeIndicators copy.vue new file mode 100644 index 0000000..971b1cd --- /dev/null +++ b/src/views/assessmentProgram/qualitativeIndicators copy.vue @@ -0,0 +1,679 @@ + + + + + diff --git a/src/views/assessmentProgram/qualitativeIndicators.vue b/src/views/assessmentProgram/qualitativeIndicators.vue new file mode 100644 index 0000000..7e1ceaf --- /dev/null +++ b/src/views/assessmentProgram/qualitativeIndicators.vue @@ -0,0 +1,2216 @@ + + + + + diff --git a/src/views/assessmentProgram/qualitativeIndicatorsBase.vue b/src/views/assessmentProgram/qualitativeIndicatorsBase.vue new file mode 100644 index 0000000..fed4e7e --- /dev/null +++ b/src/views/assessmentProgram/qualitativeIndicatorsBase.vue @@ -0,0 +1,464 @@ + + + + + diff --git a/src/views/assessmentProgram/quantitativeIndicators.vue b/src/views/assessmentProgram/quantitativeIndicators.vue new file mode 100644 index 0000000..71219cd --- /dev/null +++ b/src/views/assessmentProgram/quantitativeIndicators.vue @@ -0,0 +1,901 @@ + + + + + diff --git a/src/views/assessmentProgram/rules.vue b/src/views/assessmentProgram/rules.vue new file mode 100644 index 0000000..aa11e28 --- /dev/null +++ b/src/views/assessmentProgram/rules.vue @@ -0,0 +1,409 @@ + + + + + diff --git a/src/views/assessmentProgram/subSection.vue b/src/views/assessmentProgram/subSection.vue new file mode 100644 index 0000000..598bc22 --- /dev/null +++ b/src/views/assessmentProgram/subSection.vue @@ -0,0 +1,373 @@ + + + + + diff --git a/src/views/basicInfo copy/assessmentDimension.vue b/src/views/basicInfo copy/assessmentDimension.vue new file mode 100644 index 0000000..71aa535 --- /dev/null +++ b/src/views/basicInfo copy/assessmentDimension.vue @@ -0,0 +1,326 @@ + + + + + diff --git a/src/views/basicInfo copy/jobEntry.vue b/src/views/basicInfo copy/jobEntry.vue new file mode 100644 index 0000000..61b2b20 --- /dev/null +++ b/src/views/basicInfo copy/jobEntry.vue @@ -0,0 +1,326 @@ + + + + + diff --git a/src/views/basicInfo copy/project.vue b/src/views/basicInfo copy/project.vue new file mode 100644 index 0000000..8dfd883 --- /dev/null +++ b/src/views/basicInfo copy/project.vue @@ -0,0 +1,472 @@ + + + + + diff --git a/src/views/basicInfo copy/qualitativeIndicators.vue b/src/views/basicInfo copy/qualitativeIndicators.vue new file mode 100644 index 0000000..e5a347f --- /dev/null +++ b/src/views/basicInfo copy/qualitativeIndicators.vue @@ -0,0 +1,431 @@ + + + + + diff --git a/src/views/basicInfo copy/quantitativeIndicators.vue b/src/views/basicInfo copy/quantitativeIndicators.vue new file mode 100644 index 0000000..cfd288b --- /dev/null +++ b/src/views/basicInfo copy/quantitativeIndicators.vue @@ -0,0 +1,432 @@ + + + + + + diff --git a/src/views/basicInfo/assessmentDimension.vue b/src/views/basicInfo/assessmentDimension.vue new file mode 100644 index 0000000..1dd8bbb --- /dev/null +++ b/src/views/basicInfo/assessmentDimension.vue @@ -0,0 +1,334 @@ + + + + + diff --git a/src/views/basicInfo/assessmentIndicators.vue b/src/views/basicInfo/assessmentIndicators.vue new file mode 100644 index 0000000..2a19a7e --- /dev/null +++ b/src/views/basicInfo/assessmentIndicators.vue @@ -0,0 +1,334 @@ + + + + + diff --git a/src/views/basicInfo/gwProject copy.vue b/src/views/basicInfo/gwProject copy.vue new file mode 100644 index 0000000..f13661f --- /dev/null +++ b/src/views/basicInfo/gwProject copy.vue @@ -0,0 +1,899 @@ + + + + + diff --git a/src/views/basicInfo/gwProject.vue b/src/views/basicInfo/gwProject.vue new file mode 100644 index 0000000..d76975f --- /dev/null +++ b/src/views/basicInfo/gwProject.vue @@ -0,0 +1,1009 @@ + + + + + diff --git a/src/views/basicInfo/gwTarget.vue b/src/views/basicInfo/gwTarget.vue new file mode 100644 index 0000000..726d91b --- /dev/null +++ b/src/views/basicInfo/gwTarget.vue @@ -0,0 +1,1247 @@ + + + + + diff --git a/src/views/basicInfo/jobEntry.vue b/src/views/basicInfo/jobEntry.vue new file mode 100644 index 0000000..61b2b20 --- /dev/null +++ b/src/views/basicInfo/jobEntry.vue @@ -0,0 +1,326 @@ + + + + + diff --git a/src/views/basicInfo/project.vue b/src/views/basicInfo/project.vue new file mode 100644 index 0000000..285666c --- /dev/null +++ b/src/views/basicInfo/project.vue @@ -0,0 +1,887 @@ + + + + + diff --git a/src/views/basicInfo/projectBase.vue b/src/views/basicInfo/projectBase.vue new file mode 100644 index 0000000..8e47ae4 --- /dev/null +++ b/src/views/basicInfo/projectBase.vue @@ -0,0 +1,464 @@ + + + + + diff --git a/src/views/basicInfo/qualitativeIndicators.vue b/src/views/basicInfo/qualitativeIndicators.vue new file mode 100644 index 0000000..7ebecc6 --- /dev/null +++ b/src/views/basicInfo/qualitativeIndicators.vue @@ -0,0 +1,437 @@ + + + + + diff --git a/src/views/basicInfo/quantitativeIndicators.vue b/src/views/basicInfo/quantitativeIndicators.vue new file mode 100644 index 0000000..cfd288b --- /dev/null +++ b/src/views/basicInfo/quantitativeIndicators.vue @@ -0,0 +1,432 @@ + + + + + + diff --git a/src/views/basicInfo/target.vue b/src/views/basicInfo/target.vue new file mode 100644 index 0000000..d21fa43 --- /dev/null +++ b/src/views/basicInfo/target.vue @@ -0,0 +1,1246 @@ + + + + + diff --git a/src/views/basicInfo/targetBase.vue b/src/views/basicInfo/targetBase.vue new file mode 100644 index 0000000..75a3190 --- /dev/null +++ b/src/views/basicInfo/targetBase.vue @@ -0,0 +1,465 @@ + + + + + diff --git a/src/views/basicInfo/workspace.code-workspace b/src/views/basicInfo/workspace.code-workspace new file mode 100644 index 0000000..c04eaf5 --- /dev/null +++ b/src/views/basicInfo/workspace.code-workspace @@ -0,0 +1,7 @@ +{ + "folders": [ + { + "path": "..\\..\\.." + } + ] +} \ No newline at end of file diff --git a/src/views/ce/index.vue b/src/views/ce/index.vue new file mode 100644 index 0000000..7581618 --- /dev/null +++ b/src/views/ce/index.vue @@ -0,0 +1,49 @@ + + + + + \ No newline at end of file diff --git a/src/views/course/courseware.vue b/src/views/course/courseware.vue new file mode 100644 index 0000000..6e950e0 --- /dev/null +++ b/src/views/course/courseware.vue @@ -0,0 +1,363 @@ + + + + + diff --git a/src/views/dashboard/index copy 2.vue b/src/views/dashboard/index copy 2.vue new file mode 100644 index 0000000..3836b07 --- /dev/null +++ b/src/views/dashboard/index copy 2.vue @@ -0,0 +1,502 @@ + + + + + diff --git a/src/views/dashboard/index copy.vue b/src/views/dashboard/index copy.vue new file mode 100644 index 0000000..0d0f2a4 --- /dev/null +++ b/src/views/dashboard/index copy.vue @@ -0,0 +1,87 @@ + + + + + diff --git a/src/views/dashboard/index.vue b/src/views/dashboard/index.vue new file mode 100644 index 0000000..3767107 --- /dev/null +++ b/src/views/dashboard/index.vue @@ -0,0 +1,517 @@ + + + + + diff --git a/src/views/dataReporting/departmentKpi.vue b/src/views/dataReporting/departmentKpi.vue new file mode 100644 index 0000000..e69de29 diff --git a/src/views/dataReporting/operationalEvaluation.vue b/src/views/dataReporting/operationalEvaluation.vue new file mode 100644 index 0000000..e69de29 diff --git a/src/views/dataReporting/personalKpi.vue b/src/views/dataReporting/personalKpi.vue new file mode 100644 index 0000000..e69de29 diff --git a/src/views/echarts/echarts.vue b/src/views/echarts/echarts.vue new file mode 100644 index 0000000..517948e --- /dev/null +++ b/src/views/echarts/echarts.vue @@ -0,0 +1,679 @@ + + + + + + \ No newline at end of file diff --git a/src/views/echarts/echarts1.vue b/src/views/echarts/echarts1.vue new file mode 100644 index 0000000..416ce51 --- /dev/null +++ b/src/views/echarts/echarts1.vue @@ -0,0 +1,824 @@ + + + + + + \ No newline at end of file diff --git a/src/views/echarts/table.vue b/src/views/echarts/table.vue new file mode 100644 index 0000000..543f584 --- /dev/null +++ b/src/views/echarts/table.vue @@ -0,0 +1,1479 @@ + + + + + + \ No newline at end of file diff --git a/src/views/echarts/total.vue b/src/views/echarts/total.vue new file mode 100644 index 0000000..1652ae1 --- /dev/null +++ b/src/views/echarts/total.vue @@ -0,0 +1,883 @@ + + + + + + \ No newline at end of file diff --git a/src/views/form/index.vue b/src/views/form/index.vue new file mode 100644 index 0000000..f4d66d3 --- /dev/null +++ b/src/views/form/index.vue @@ -0,0 +1,85 @@ + + + + + + diff --git a/src/views/frontPage/index.vue b/src/views/frontPage/index.vue new file mode 100644 index 0000000..abd8e9f --- /dev/null +++ b/src/views/frontPage/index.vue @@ -0,0 +1,1976 @@ + + + + diff --git a/src/views/honor/index.vue b/src/views/honor/index.vue new file mode 100644 index 0000000..47bacf6 --- /dev/null +++ b/src/views/honor/index.vue @@ -0,0 +1,680 @@ + + + + + diff --git a/src/views/honor/type.vue b/src/views/honor/type.vue new file mode 100644 index 0000000..548c31f --- /dev/null +++ b/src/views/honor/type.vue @@ -0,0 +1,333 @@ + + + + + diff --git a/src/views/hr/jobTitle.vue b/src/views/hr/jobTitle.vue new file mode 100644 index 0000000..2a957da --- /dev/null +++ b/src/views/hr/jobTitle.vue @@ -0,0 +1,386 @@ + + + + + diff --git a/src/views/hr/organization.vue b/src/views/hr/organization.vue new file mode 100644 index 0000000..5642c8e --- /dev/null +++ b/src/views/hr/organization.vue @@ -0,0 +1,484 @@ + + + + + diff --git a/src/views/hr/organizeType.vue b/src/views/hr/organizeType.vue new file mode 100644 index 0000000..e8f3815 --- /dev/null +++ b/src/views/hr/organizeType.vue @@ -0,0 +1,360 @@ + + + + + diff --git a/src/views/hr/personnel.vue b/src/views/hr/personnel.vue new file mode 100644 index 0000000..9672e36 --- /dev/null +++ b/src/views/hr/personnel.vue @@ -0,0 +1,2542 @@ + + + + + diff --git a/src/views/hr/position.vue b/src/views/hr/position.vue new file mode 100644 index 0000000..cc1e687 --- /dev/null +++ b/src/views/hr/position.vue @@ -0,0 +1,330 @@ + + + + + diff --git a/src/views/hr/team.vue b/src/views/hr/team.vue new file mode 100644 index 0000000..c68c0c8 --- /dev/null +++ b/src/views/hr/team.vue @@ -0,0 +1,323 @@ + + + + + diff --git a/src/views/index.vue b/src/views/index.vue new file mode 100644 index 0000000..1f7b032 --- /dev/null +++ b/src/views/index.vue @@ -0,0 +1,145 @@ + + + + + diff --git a/src/views/login/index copy.vue b/src/views/login/index copy.vue new file mode 100644 index 0000000..1db2464 --- /dev/null +++ b/src/views/login/index copy.vue @@ -0,0 +1,237 @@ + + + + + + + diff --git a/src/views/login/index.vue b/src/views/login/index.vue new file mode 100644 index 0000000..abac955 --- /dev/null +++ b/src/views/login/index.vue @@ -0,0 +1,318 @@ + + + + + + + diff --git a/src/views/login/wxLogin.vue b/src/views/login/wxLogin.vue new file mode 100644 index 0000000..0211821 --- /dev/null +++ b/src/views/login/wxLogin.vue @@ -0,0 +1,382 @@ + + + + + + + diff --git a/src/views/lunbo/index.vue b/src/views/lunbo/index.vue new file mode 100644 index 0000000..a9cad59 --- /dev/null +++ b/src/views/lunbo/index.vue @@ -0,0 +1,61 @@ + + + + \ No newline at end of file diff --git a/src/views/menuSettings/index.vue b/src/views/menuSettings/index.vue new file mode 100644 index 0000000..2cd67ca --- /dev/null +++ b/src/views/menuSettings/index.vue @@ -0,0 +1,417 @@ + + + + + diff --git a/src/views/mete/index.vue b/src/views/mete/index.vue new file mode 100644 index 0000000..6929cff --- /dev/null +++ b/src/views/mete/index.vue @@ -0,0 +1,581 @@ + + + + + diff --git a/src/views/nested/menu1/index.vue b/src/views/nested/menu1/index.vue new file mode 100644 index 0000000..30cb670 --- /dev/null +++ b/src/views/nested/menu1/index.vue @@ -0,0 +1,7 @@ + diff --git a/src/views/nested/menu1/menu1-1/index.vue b/src/views/nested/menu1/menu1-1/index.vue new file mode 100644 index 0000000..27e173a --- /dev/null +++ b/src/views/nested/menu1/menu1-1/index.vue @@ -0,0 +1,7 @@ + diff --git a/src/views/nested/menu1/menu1-2/index.vue b/src/views/nested/menu1/menu1-2/index.vue new file mode 100644 index 0000000..0c86276 --- /dev/null +++ b/src/views/nested/menu1/menu1-2/index.vue @@ -0,0 +1,7 @@ + diff --git a/src/views/nested/menu1/menu1-2/menu1-2-1/index.vue b/src/views/nested/menu1/menu1-2/menu1-2-1/index.vue new file mode 100644 index 0000000..f87d88f --- /dev/null +++ b/src/views/nested/menu1/menu1-2/menu1-2-1/index.vue @@ -0,0 +1,5 @@ + diff --git a/src/views/nested/menu1/menu1-2/menu1-2-2/index.vue b/src/views/nested/menu1/menu1-2/menu1-2-2/index.vue new file mode 100644 index 0000000..d88789f --- /dev/null +++ b/src/views/nested/menu1/menu1-2/menu1-2-2/index.vue @@ -0,0 +1,5 @@ + diff --git a/src/views/nested/menu1/menu1-3/index.vue b/src/views/nested/menu1/menu1-3/index.vue new file mode 100644 index 0000000..f7cd073 --- /dev/null +++ b/src/views/nested/menu1/menu1-3/index.vue @@ -0,0 +1,5 @@ + diff --git a/src/views/nested/menu2/index.vue b/src/views/nested/menu2/index.vue new file mode 100644 index 0000000..19dd48f --- /dev/null +++ b/src/views/nested/menu2/index.vue @@ -0,0 +1,5 @@ + diff --git a/src/views/permission/permissionSetting.vue b/src/views/permission/permissionSetting.vue new file mode 100644 index 0000000..a5004d9 --- /dev/null +++ b/src/views/permission/permissionSetting.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/views/permission/xiTong.vue b/src/views/permission/xiTong.vue new file mode 100644 index 0000000..11c8fa7 --- /dev/null +++ b/src/views/permission/xiTong.vue @@ -0,0 +1,335 @@ + + + + + + \ No newline at end of file diff --git a/src/views/personnel/post/index.vue b/src/views/personnel/post/index.vue new file mode 100644 index 0000000..6f22607 --- /dev/null +++ b/src/views/personnel/post/index.vue @@ -0,0 +1,688 @@ + + + + + diff --git a/src/views/qualitative/index copy.vue b/src/views/qualitative/index copy.vue new file mode 100644 index 0000000..accf023 --- /dev/null +++ b/src/views/qualitative/index copy.vue @@ -0,0 +1,518 @@ + + + + + diff --git a/src/views/qualitative/index.vue b/src/views/qualitative/index.vue new file mode 100644 index 0000000..425833c --- /dev/null +++ b/src/views/qualitative/index.vue @@ -0,0 +1,1306 @@ + + + + + diff --git a/src/views/record/details.vue b/src/views/record/details.vue new file mode 100644 index 0000000..0fd1550 --- /dev/null +++ b/src/views/record/details.vue @@ -0,0 +1,218 @@ + + + + + diff --git a/src/views/record/index.vue b/src/views/record/index.vue new file mode 100644 index 0000000..c15ca71 --- /dev/null +++ b/src/views/record/index.vue @@ -0,0 +1,172 @@ + + + + + diff --git a/src/views/roleSetting/index.vue b/src/views/roleSetting/index.vue new file mode 100644 index 0000000..3ff4348 --- /dev/null +++ b/src/views/roleSetting/index.vue @@ -0,0 +1,416 @@ + + + + + diff --git a/src/views/table/index.vue b/src/views/table/index.vue new file mode 100644 index 0000000..a1ed847 --- /dev/null +++ b/src/views/table/index.vue @@ -0,0 +1,79 @@ + + + diff --git a/src/views/tree/index.vue b/src/views/tree/index.vue new file mode 100644 index 0000000..89c6b01 --- /dev/null +++ b/src/views/tree/index.vue @@ -0,0 +1,78 @@ + + + + diff --git a/src/workspace.code-workspace b/src/workspace.code-workspace new file mode 100644 index 0000000..638df53 --- /dev/null +++ b/src/workspace.code-workspace @@ -0,0 +1,10 @@ +{ + "folders": [ + { + "path": ".." + } + ], + "settings": { + "thiefBook.filePath": "H:\\BaiduNetdiskDownload\\二号首长1--2部.txt" + } +} \ No newline at end of file diff --git a/tests/unit/.eslintrc.js b/tests/unit/.eslintrc.js new file mode 100644 index 0000000..958d51b --- /dev/null +++ b/tests/unit/.eslintrc.js @@ -0,0 +1,5 @@ +module.exports = { + env: { + jest: true + } +} diff --git a/tests/unit/components/Breadcrumb.spec.js b/tests/unit/components/Breadcrumb.spec.js new file mode 100644 index 0000000..1d94c8f --- /dev/null +++ b/tests/unit/components/Breadcrumb.spec.js @@ -0,0 +1,98 @@ +import { mount, createLocalVue } from '@vue/test-utils' +import VueRouter from 'vue-router' +import ElementUI from 'element-ui' +import Breadcrumb from '@/components/Breadcrumb/index.vue' + +const localVue = createLocalVue() +localVue.use(VueRouter) +localVue.use(ElementUI) + +const routes = [ + { + path: '/', + name: 'home', + children: [{ + path: 'dashboard', + name: 'dashboard' + }] + }, + { + path: '/menu', + name: 'menu', + children: [{ + path: 'menu1', + name: 'menu1', + meta: { title: 'menu1' }, + children: [{ + path: 'menu1-1', + name: 'menu1-1', + meta: { title: 'menu1-1' } + }, + { + path: 'menu1-2', + name: 'menu1-2', + redirect: 'noredirect', + meta: { title: 'menu1-2' }, + children: [{ + path: 'menu1-2-1', + name: 'menu1-2-1', + meta: { title: 'menu1-2-1' } + }, + { + path: 'menu1-2-2', + name: 'menu1-2-2' + }] + }] + }] + }] + +const router = new VueRouter({ + routes +}) + +describe('Breadcrumb.vue', () => { + const wrapper = mount(Breadcrumb, { + localVue, + router + }) + it('dashboard', () => { + router.push('/dashboard') + const len = wrapper.findAll('.el-breadcrumb__inner').length + expect(len).toBe(1) + }) + it('normal route', () => { + router.push('/menu/menu1') + const len = wrapper.findAll('.el-breadcrumb__inner').length + expect(len).toBe(2) + }) + it('nested route', () => { + router.push('/menu/menu1/menu1-2/menu1-2-1') + const len = wrapper.findAll('.el-breadcrumb__inner').length + expect(len).toBe(4) + }) + it('no meta.title', () => { + router.push('/menu/menu1/menu1-2/menu1-2-2') + const len = wrapper.findAll('.el-breadcrumb__inner').length + expect(len).toBe(3) + }) + // it('click link', () => { + // router.push('/menu/menu1/menu1-2/menu1-2-2') + // const breadcrumbArray = wrapper.findAll('.el-breadcrumb__inner') + // const second = breadcrumbArray.at(1) + // console.log(breadcrumbArray) + // const href = second.find('a').attributes().href + // expect(href).toBe('#/menu/menu1') + // }) + // it('noRedirect', () => { + // router.push('/menu/menu1/menu1-2/menu1-2-1') + // const breadcrumbArray = wrapper.findAll('.el-breadcrumb__inner') + // const redirectBreadcrumb = breadcrumbArray.at(2) + // expect(redirectBreadcrumb.contains('a')).toBe(false) + // }) + it('last breadcrumb', () => { + router.push('/menu/menu1/menu1-2/menu1-2-1') + const breadcrumbArray = wrapper.findAll('.el-breadcrumb__inner') + const redirectBreadcrumb = breadcrumbArray.at(3) + expect(redirectBreadcrumb.contains('a')).toBe(false) + }) +}) diff --git a/tests/unit/components/Hamburger.spec.js b/tests/unit/components/Hamburger.spec.js new file mode 100644 index 0000000..01ea303 --- /dev/null +++ b/tests/unit/components/Hamburger.spec.js @@ -0,0 +1,18 @@ +import { shallowMount } from '@vue/test-utils' +import Hamburger from '@/components/Hamburger/index.vue' +describe('Hamburger.vue', () => { + it('toggle click', () => { + const wrapper = shallowMount(Hamburger) + const mockFn = jest.fn() + wrapper.vm.$on('toggleClick', mockFn) + wrapper.find('.hamburger').trigger('click') + expect(mockFn).toBeCalled() + }) + it('prop isActive', () => { + const wrapper = shallowMount(Hamburger) + wrapper.setProps({ isActive: true }) + expect(wrapper.contains('.is-active')).toBe(true) + wrapper.setProps({ isActive: false }) + expect(wrapper.contains('.is-active')).toBe(false) + }) +}) diff --git a/tests/unit/components/SvgIcon.spec.js b/tests/unit/components/SvgIcon.spec.js new file mode 100644 index 0000000..31467a9 --- /dev/null +++ b/tests/unit/components/SvgIcon.spec.js @@ -0,0 +1,22 @@ +import { shallowMount } from '@vue/test-utils' +import SvgIcon from '@/components/SvgIcon/index.vue' +describe('SvgIcon.vue', () => { + it('iconClass', () => { + const wrapper = shallowMount(SvgIcon, { + propsData: { + iconClass: 'test' + } + }) + expect(wrapper.find('use').attributes().href).toBe('#icon-test') + }) + it('className', () => { + const wrapper = shallowMount(SvgIcon, { + propsData: { + iconClass: 'test' + } + }) + expect(wrapper.classes().length).toBe(1) + wrapper.setProps({ className: 'test' }) + expect(wrapper.classes().includes('test')).toBe(true) + }) +}) diff --git a/tests/unit/utils/formatTime.spec.js b/tests/unit/utils/formatTime.spec.js new file mode 100644 index 0000000..24e165b --- /dev/null +++ b/tests/unit/utils/formatTime.spec.js @@ -0,0 +1,30 @@ +import { formatTime } from '@/utils/index.js' + +describe('Utils:formatTime', () => { + const d = new Date('2018-07-13 17:54:01') // "2018-07-13 17:54:01" + const retrofit = 5 * 1000 + + it('ten digits timestamp', () => { + expect(formatTime((d / 1000).toFixed(0))).toBe('7月13日17时54分') + }) + it('test now', () => { + expect(formatTime(+new Date() - 1)).toBe('刚刚') + }) + it('less two minute', () => { + expect(formatTime(+new Date() - 60 * 2 * 1000 + retrofit)).toBe('2分钟前') + }) + it('less two hour', () => { + expect(formatTime(+new Date() - 60 * 60 * 2 * 1000 + retrofit)).toBe('2小时前') + }) + it('less one day', () => { + expect(formatTime(+new Date() - 60 * 60 * 24 * 1 * 1000)).toBe('1天前') + }) + it('more than one day', () => { + expect(formatTime(d)).toBe('7月13日17时54分') + }) + it('format', () => { + expect(formatTime(d, '{y}-{m}-{d} {h}:{i}')).toBe('2018-07-13 17:54') + expect(formatTime(d, '{y}-{m}-{d}')).toBe('2018-07-13') + expect(formatTime(d, '{y}/{m}/{d} {h}-{i}')).toBe('2018/07/13 17-54') + }) +}) diff --git a/tests/unit/utils/param2Obj.spec.js b/tests/unit/utils/param2Obj.spec.js new file mode 100644 index 0000000..e106ed8 --- /dev/null +++ b/tests/unit/utils/param2Obj.spec.js @@ -0,0 +1,14 @@ +import { param2Obj } from '@/utils/index.js' +describe('Utils:param2Obj', () => { + const url = 'https://github.com/PanJiaChen/vue-element-admin?name=bill&age=29&sex=1&field=dGVzdA==&key=%E6%B5%8B%E8%AF%95' + + it('param2Obj test', () => { + expect(param2Obj(url)).toEqual({ + name: 'bill', + age: '29', + sex: '1', + field: window.btoa('test'), + key: '测试' + }) + }) +}) diff --git a/tests/unit/utils/parseTime.spec.js b/tests/unit/utils/parseTime.spec.js new file mode 100644 index 0000000..56045af --- /dev/null +++ b/tests/unit/utils/parseTime.spec.js @@ -0,0 +1,35 @@ +import { parseTime } from '@/utils/index.js' + +describe('Utils:parseTime', () => { + const d = new Date('2018-07-13 17:54:01') // "2018-07-13 17:54:01" + it('timestamp', () => { + expect(parseTime(d)).toBe('2018-07-13 17:54:01') + }) + it('timestamp string', () => { + expect(parseTime((d + ''))).toBe('2018-07-13 17:54:01') + }) + it('ten digits timestamp', () => { + expect(parseTime((d / 1000).toFixed(0))).toBe('2018-07-13 17:54:01') + }) + it('new Date', () => { + expect(parseTime(new Date(d))).toBe('2018-07-13 17:54:01') + }) + it('format', () => { + expect(parseTime(d, '{y}-{m}-{d} {h}:{i}')).toBe('2018-07-13 17:54') + expect(parseTime(d, '{y}-{m}-{d}')).toBe('2018-07-13') + expect(parseTime(d, '{y}/{m}/{d} {h}-{i}')).toBe('2018/07/13 17-54') + }) + it('get the day of the week', () => { + expect(parseTime(d, '{a}')).toBe('五') // 星期五 + }) + it('get the day of the week', () => { + expect(parseTime(+d + 1000 * 60 * 60 * 24 * 2, '{a}')).toBe('日') // 星期日 + }) + it('empty argument', () => { + expect(parseTime()).toBeNull() + }) + + it('null', () => { + expect(parseTime(null)).toBeNull() + }) +}) diff --git a/tests/unit/utils/validate.spec.js b/tests/unit/utils/validate.spec.js new file mode 100644 index 0000000..f774905 --- /dev/null +++ b/tests/unit/utils/validate.spec.js @@ -0,0 +1,17 @@ +import { validUsername, isExternal } from '@/utils/validate.js' + +describe('Utils:validate', () => { + it('validUsername', () => { + expect(validUsername('admin')).toBe(true) + expect(validUsername('editor')).toBe(true) + expect(validUsername('xxxx')).toBe(false) + }) + it('isExternal', () => { + expect(isExternal('https://github.com/PanJiaChen/vue-element-admin')).toBe(true) + expect(isExternal('http://github.com/PanJiaChen/vue-element-admin')).toBe(true) + expect(isExternal('github.com/PanJiaChen/vue-element-admin')).toBe(false) + expect(isExternal('/dashboard')).toBe(false) + expect(isExternal('./dashboard')).toBe(false) + expect(isExternal('dashboard')).toBe(false) + }) +}) diff --git a/vue.config.js b/vue.config.js new file mode 100644 index 0000000..fd79dc7 --- /dev/null +++ b/vue.config.js @@ -0,0 +1,125 @@ +'use strict' +const path = require('path') +const defaultSettings = require('./src/settings.js') + +function resolve(dir) { + return path.join(__dirname, dir) +} + +const name = defaultSettings.title || 'vue Admin Template' // page title + +// If your port is set to 80, +// use administrator privileges to execute the command line. +// For example, Mac: sudo npm run +// You can change the port by the following methods: +// port = 9528 npm run dev OR npm run dev --port = 9528 +const port = process.env.port || process.env.npm_config_port || 9528 // dev port + +// All configuration item explanations can be find in https://cli.vuejs.org/config/ +module.exports = { + /** + * You will need to set publicPath if you plan to deploy your site under a sub path, + * for example GitHub Pages. If you plan to deploy your site to https://foo.github.io/bar/, + * then publicPath should be set to "/bar/". + * In most cases please use '/' !!! + * Detail: https://cli.vuejs.org/config/#publicpath + */ + publicPath: '/', + outputDir: 'dist', + assetsDir: 'static', + lintOnSave: false, + // lintOnSave: process.env.NODE_ENV === 'development', + productionSourceMap: false, + devServer: { + disableHostCheck: true, + port: port, + open: true, + overlay: { + warnings: false, + errors: true + }, + before: require('./mock/mock-server.js') + }, + configureWebpack: { + // provide the app's title in webpack's name field, so that + // it can be accessed in index.html to inject the correct title. + name: name, + resolve: { + alias: { + '@': resolve('src') + } + } + }, + chainWebpack(config) { + // it can improve the speed of the first screen, it is recommended to turn on preload + config.plugin('preload').tap(() => [ + { + rel: 'preload', + // to ignore runtime.js + // https://github.com/vuejs/vue-cli/blob/dev/packages/@vue/cli-service/lib/config/app.js#L171 + fileBlacklist: [/\.map$/, /hot-update\.js$/, /runtime\..*\.js$/], + include: 'initial' + } + ]) + + // when there are many pages, it will cause too many meaningless requests + config.plugins.delete('prefetch') + + // set svg-sprite-loader + config.module + .rule('svg') + .exclude.add(resolve('src/icons')) + .end() + config.module + .rule('icons') + .test(/\.svg$/) + .include.add(resolve('src/icons')) + .end() + .use('svg-sprite-loader') + .loader('svg-sprite-loader') + .options({ + symbolId: 'icon-[name]' + }) + .end() + + config + .when(process.env.NODE_ENV !== 'development', + config => { + config + .plugin('ScriptExtHtmlWebpackPlugin') + .after('html') + .use('script-ext-html-webpack-plugin', [{ + // `runtime` must same as runtimeChunk name. default is `runtime` + inline: /runtime\..*\.js$/ + }]) + .end() + config + .optimization.splitChunks({ + chunks: 'all', + cacheGroups: { + libs: { + name: 'chunk-libs', + test: /[\\/]node_modules[\\/]/, + priority: 10, + chunks: 'initial' // only package third parties that are initially dependent + }, + elementUI: { + name: 'chunk-elementUI', // split elementUI into a single package + priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app + test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm + }, + commons: { + name: 'chunk-commons', + test: resolve('src/components'), // can customize your rules + minChunks: 3, // minimum common number + priority: 5, + reuseExistingChunk: true + } + } + }) + // https:// webpack.js.org/configuration/optimization/#optimizationruntimechunk + config.optimization.runtimeChunk('single') + } + ) + } +} diff --git a/workspace.code-workspace b/workspace.code-workspace new file mode 100644 index 0000000..5f5f8e8 --- /dev/null +++ b/workspace.code-workspace @@ -0,0 +1,10 @@ +{ + "folders": [ + { + "path": "." + } + ], + "settings": { + "thiefBook.filePath": "H:\\BaiduNetdiskDownload\\二号首长1--2部.txt" + } +} \ No newline at end of file