diff --git a/package.json b/package.json index 2176fb1..dc5cd07 100644 --- a/package.json +++ b/package.json @@ -62,6 +62,7 @@ "opencollective-postinstall": "^2.0.2", "vue-svg-icon-loader": "^2.1.1", "vue-template-compiler": "^2.6.10", - "webpack-theme-color-replacer": "^1.3.12" + "webpack-theme-color-replacer": "^1.3.12", + "webpack": "^4.44.2" } -} +} \ No newline at end of file diff --git a/public/index.html b/public/index.html index b523e40..cd1fc0a 100644 --- a/public/index.html +++ b/public/index.html @@ -1,134 +1,160 @@ - - - - - - Ant Design Pro - - - <% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.css) { %> - - <% } %> - + } - - -
-
- -
- -
- + /* 组织机构数选择组件样式修改 start */ + .popover-tree>.ant-popover-content { + margin-top: -15px; + border: 1px solid #1890ff; + max-height: 400px; + overflow-y: auto; + } + + .popover-tree>.ant-popover-content>.ant-popover-arrow { + display: none; + } + + /* 组织机构数选择组件样式修改 end */ + + /* 项目管理 - 选择单位组件样式 start */ + .tree-transfer .ant-transfer-list-body-customize-wrapper { + overflow-y: auto !important; + height: 500px !important; + } + + .tree-transfer .ant-transfer-list-content { + height: 500px !important; + } + + /* 项目管理 - 选择单位组件样式 end */ + + + <% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.css) { %> + + <% } %> + + + + +
+
+ +
+
+
- - <% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.js) { %> - - <% } %> - - +
+ + <% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.js) { %> + + <% } %> + + \ No newline at end of file diff --git a/src/api/project/project.js b/src/api/project/project.js index 4f99135..5dcef94 100644 --- a/src/api/project/project.js +++ b/src/api/project/project.js @@ -1,7 +1,8 @@ import request from '@/utils/request' const projectApi = { -// add: 'sys/menu/add', + add: 'project/add', + getDict:'projecct/getDict', // get: 'sys/menu/get', // update: 'sys/menu/update', // del: 'sys/menu/delete', @@ -9,13 +10,20 @@ const projectApi = { list: 'project/pageList' } -// export function menuAdd (params) { -// return request({ -// url: menuApi.add, -// method: 'post', -// data: params -// }) -// } +export function projectAdd (params) { + return request({ + url: projectApi.add, + method: 'post', + data: params + }) +} +export function dictGet (params) { + return request({ + url: projectApi.getDict, + method: 'get', + params: params + }) +} // export function menuGet (params) { // return request({ // url: menuApi.get, @@ -38,6 +46,7 @@ const projectApi = { // }) // } export function getProjectList (params) { + console.log("------------{}",params) return request({ url: projectApi.list, method: 'get', diff --git a/src/config/defaultSettings.js b/src/config/defaultSettings.js index 91268d5..6801019 100644 --- a/src/config/defaultSettings.js +++ b/src/config/defaultSettings.js @@ -14,7 +14,7 @@ export default { navTheme: 'dark', // theme for nav menu - primaryColor: '#5555ff', // primary color of ant design + primaryColor: '#1890ff', // primary color of ant design layout: 'topmenu', // nav menu position: `sidemenu` or `topmenu` contentWidth: 'Fluid', // layout of content: `Fluid` or `Fixed`, only works when layout is topmenu fixedHeader: false, // sticky header diff --git a/src/config/router.config.js b/src/config/router.config.js index 056420c..ebbbd14 100644 --- a/src/config/router.config.js +++ b/src/config/router.config.js @@ -21,13 +21,13 @@ export const asyncRouterMap = [ name: 'dashboard', redirect: '/dashboard/workplace', component: RouteView, - meta: { title: 'menu.dashboard', keepAlive: true, icon: bxAnaalyse, permission: [ 'dashboard' ] }, + meta: { title: 'menu.dashboard', keepAlive: true, icon: bxAnaalyse, permission: ['dashboard'] }, children: [ { path: '/dashboard/workplace', name: 'Workplace', component: () => import('@/views/dashboard/Workplace'), - meta: { title: 'menu.dashboard.workplace', keepAlive: true, permission: [ 'dashboard' ] } + meta: { title: 'menu.dashboard.workplace', keepAlive: true, permission: ['dashboard'] } } ] }, @@ -37,13 +37,13 @@ export const asyncRouterMap = [ name: 'security', redirect: '/security/user', component: RouteView, - meta: { title: '系统设置', keepAlive: true, icon: bxAnaalyse, permission: [ 'security' ] }, + meta: { title: '系统设置', keepAlive: true, icon: bxAnaalyse, permission: ['security'] }, children: [ { path: '/security/user', name: 'SecurityUser', component: () => import('@/views/security/user/UserList'), - meta: { title: '用户管理', keepAlive: true, permission: [ 'security' ] } + meta: { title: '用户管理', keepAlive: true, permission: ['security'] } }, { path: '/security/role', @@ -74,27 +74,87 @@ export const asyncRouterMap = [ // 项目管理 { path: '/project', - redirect: '/project/projectList', + redirect: '/project/list', component: RouteView, - meta: { title: '项目管理', icon: bxAnaalyse, permission: [ 'from' ] }, + meta: { title: '项目管理', icon: bxAnaalyse, permission: ['from'] }, children: [ { - path: '/project/projectList', + path: '/project/list', name: 'projectList', component: () => import('@/views/project/ProjectList'), - meta: { title: '自主项目', keepAlive: true, permission: [ 'form' ] } + meta: { title: '自主项目', keepAlive: true, permission: ['form'] }, + }, + { + path: '/project/add', + name: 'ProjectForm', + component: () => import('@/views/project/ProjectForm'), + meta: { title: '新增项目', keepAlive: true, permission: ['form'], show: false } + }, + { + path: '/project/addClass', + name: 'addClass', + component: () => import('@/views/project/AddClass'), + meta: { title: '新增种类', keepAlive: true, permission: ['form'] } + }, + { + path: '/project/unitSelect', + name: 'unitSelect', + component: () => import('@/views/project/ProjectUnitSelect'), + meta: { title: '选择单位', keepAlive: true, permission: ['form'] } }, { path: '/form/step-form', name: 'StepForm', component: () => import('@/views/form/stepForm/StepForm'), - meta: { title: '系统推荐', keepAlive: true, permission: [ 'form' ] } + meta: { title: '系统推荐', keepAlive: true, permission: ['form'] } }, { path: '/form/advanced-form', name: 'AdvanceForm', component: () => import('@/views/form/advancedForm/AdvancedForm'), - meta: { title: '终端培训', keepAlive: true, permission: [ 'form' ] } + meta: { title: '终端培训', keepAlive: true, permission: ['form'] } + } + ] + }, + // 课程管理 + { + path: '/courseManagement', + redirect: '/courseManagement/course/courseList', + component: RouteView, + meta: { title: '课程管理', icon: bxAnaalyse, permission: ['from'] }, + children: [ + { + path: '/courseManagement/course/courseList', + name: 'courseList', + component: () => import('@/views/course/CourseList'), + meta: { title: '系统课程', keepAlive: true, permission: ['form'] } + }, + { + path: '/courseManagement/customCourseList', + name: 'customCourse', + component: () => import('@/views/course/customCourseList'), + meta: { title: '自制课程', keepAlive: true, permission: ['form'] } + }, + { + path: '/form/advanced-form', + name: 'AdvanceForm', + component: () => import('@/views/form/advancedForm/AdvancedForm'), + meta: { title: '资源库', keepAlive: true, permission: ['form'] } + } + ] + }, + // 档案管理 + { + path: "/archives", + redirect: "/archives/user", + component: RouteView, + meta: { title: '档案管理', icon: 'profile', permission: ['form'] }, + children: [ + { + path: "/archives/user", + name: "archivesUser", + component: () => import('@/views/archives/user/Index'), + meta: { title: '人员档案', keepAlive: true, permission: ['form'] } } ] }, @@ -103,25 +163,25 @@ export const asyncRouterMap = [ path: '/form', redirect: '/form/base-form', component: RouteView, - meta: { title: '表单页', icon: 'form', permission: [ 'form' ] }, + meta: { title: '表单页', icon: 'form', permission: ['form'] }, children: [ { path: '/form/base-form', name: 'BaseForm', component: () => import('@/views/form/basicForm/Index'), - meta: { title: '基础表单', keepAlive: true, permission: [ 'form' ] } + meta: { title: '基础表单', keepAlive: true, permission: ['form'] } }, { path: '/form/step-form', name: 'StepForm', component: () => import('@/views/form/stepForm/StepForm'), - meta: { title: '分步表单', keepAlive: true, permission: [ 'form' ] } + meta: { title: '分步表单', keepAlive: true, permission: ['form'] } }, { path: '/form/advanced-form', name: 'AdvanceForm', component: () => import('@/views/form/advancedForm/AdvancedForm'), - meta: { title: '高级表单', keepAlive: true, permission: [ 'form' ] } + meta: { title: '高级表单', keepAlive: true, permission: ['form'] } } ] }, @@ -132,51 +192,51 @@ export const asyncRouterMap = [ name: 'list', component: RouteView, redirect: '/list/table-list', - meta: { title: '列表页', icon: 'table', permission: [ 'table' ] }, + meta: { title: '列表页', icon: 'table', permission: ['table'] }, children: [ { path: '/list/table-list/:pageNo([1-9]\\d*)?', name: 'TableListWrapper', hideChildrenInMenu: true, // 强制显示 MenuItem 而不是 SubMenu component: () => import('@/views/list/TableList'), - meta: { title: '查询表格', keepAlive: true, permission: [ 'table' ] } + meta: { title: '查询表格', keepAlive: true, permission: ['table'] } }, { path: '/list/basic-list', name: 'BasicList', component: () => import('@/views/list/BasicList'), - meta: { title: '标准列表', keepAlive: true, permission: [ 'table' ] } + meta: { title: '标准列表', keepAlive: true, permission: ['table'] } }, { path: '/list/card', name: 'CardList', component: () => import('@/views/list/CardList'), - meta: { title: '卡片列表', keepAlive: true, permission: [ 'table' ] } + meta: { title: '卡片列表', keepAlive: true, permission: ['table'] } }, { path: '/list/search', name: 'SearchList', component: () => import('@/views/list/search/SearchLayout'), redirect: '/list/search/article', - meta: { title: '搜索列表', keepAlive: true, permission: [ 'table' ] }, + meta: { title: '搜索列表', keepAlive: true, permission: ['table'] }, children: [ { path: '/list/search/article', name: 'SearchArticles', component: () => import('../views/list/search/Article'), - meta: { title: '搜索列表(文章)', permission: [ 'table' ] } + meta: { title: '搜索列表(文章)', permission: ['table'] } }, { path: '/list/search/project', name: 'SearchProjects', component: () => import('../views/list/search/Projects'), - meta: { title: '搜索列表(项目)', permission: [ 'table' ] } + meta: { title: '搜索列表(项目)', permission: ['table'] } }, { path: '/list/search/application', name: 'SearchApplications', component: () => import('../views/list/search/Applications'), - meta: { title: '搜索列表(应用)', permission: [ 'table' ] } + meta: { title: '搜索列表(应用)', permission: ['table'] } } ] } @@ -188,19 +248,19 @@ export const asyncRouterMap = [ name: 'profile', component: RouteView, redirect: '/profile/basic', - meta: { title: '详情页', icon: 'profile', permission: [ 'profile' ] }, + meta: { title: '详情页', icon: 'profile', permission: ['profile'] }, children: [ { path: '/profile/basic', name: 'ProfileBasic', component: () => import('@/views/profile/basic/Index'), - meta: { title: '基础详情页', permission: [ 'profile' ] } + meta: { title: '基础详情页', permission: ['profile'] } }, { path: '/profile/advanced', name: 'ProfileAdvanced', component: () => import('@/views/profile/advanced/Advanced'), - meta: { title: '高级详情页', permission: [ 'profile' ] } + meta: { title: '高级详情页', permission: ['profile'] } } ] }, @@ -210,19 +270,19 @@ export const asyncRouterMap = [ name: 'result', component: RouteView, redirect: '/result/success', - meta: { title: '结果页', icon: 'check-circle-o', permission: [ 'result' ] }, + meta: { title: '结果页', icon: 'check-circle-o', permission: ['result'] }, children: [ { path: '/result/success', name: 'ResultSuccess', component: () => import(/* webpackChunkName: "result" */ '@/views/result/Success'), - meta: { title: '成功', keepAlive: false, hiddenHeaderContent: true, permission: [ 'result' ] } + meta: { title: '成功', keepAlive: false, hiddenHeaderContent: true, permission: ['result'] } }, { path: '/result/fail', name: 'ResultFail', component: () => import(/* webpackChunkName: "result" */ '@/views/result/Error'), - meta: { title: '失败', keepAlive: false, hiddenHeaderContent: true, permission: [ 'result' ] } + meta: { title: '失败', keepAlive: false, hiddenHeaderContent: true, permission: ['result'] } } ] }, @@ -232,25 +292,25 @@ export const asyncRouterMap = [ name: 'exception', component: RouteView, redirect: '/exception/403', - meta: { title: '异常页', icon: 'warning', permission: [ 'exception' ] }, + meta: { title: '异常页', icon: 'warning', permission: ['exception'] }, children: [ { path: '/exception/403', name: 'Exception403', component: () => import(/* webpackChunkName: "fail" */ '@/views/exception/403'), - meta: { title: '403', permission: [ 'exception' ] } + meta: { title: '403', permission: ['exception'] } }, { path: '/exception/404', name: 'Exception404', component: () => import(/* webpackChunkName: "fail" */ '@/views/exception/404'), - meta: { title: '404', permission: [ 'exception' ] } + meta: { title: '404', permission: ['exception'] } }, { path: '/exception/500', name: 'Exception500', component: () => import(/* webpackChunkName: "fail" */ '@/views/exception/500'), - meta: { title: '500', permission: [ 'exception' ] } + meta: { title: '500', permission: ['exception'] } } ] }, @@ -260,19 +320,19 @@ export const asyncRouterMap = [ component: RouteView, redirect: '/account/center', name: 'account', - meta: { title: '个人页', icon: 'user', keepAlive: true, permission: [ 'user' ] }, + meta: { title: '个人页', icon: 'user', keepAlive: true, permission: ['user'] }, children: [ { path: '/account/center', name: 'center', component: () => import('@/views/account/center/Index'), - meta: { title: '个人中心', keepAlive: true, permission: [ 'user' ] } + meta: { title: '个人中心', keepAlive: true, permission: ['user'] } }, { path: '/account/settings', name: 'settings', component: () => import('@/views/account/settings/Index'), - meta: { title: '个人设置', hideHeader: true, permission: [ 'user' ] }, + meta: { title: '个人设置', hideHeader: true, permission: ['user'] }, redirect: '/account/settings/base', hideChildrenInMenu: true, children: [ @@ -280,31 +340,31 @@ export const asyncRouterMap = [ path: '/account/settings/base', name: 'BaseSettings', component: () => import('@/views/account/settings/BaseSetting'), - meta: { title: '基本设置', hidden: true, permission: [ 'user' ] } + meta: { title: '基本设置', hidden: true, permission: ['user'] } }, { path: '/account/settings/security', name: 'SecuritySettings', component: () => import('@/views/account/settings/Security'), - meta: { title: '安全设置', hidden: true, keepAlive: true, permission: [ 'user' ] } + meta: { title: '安全设置', hidden: true, keepAlive: true, permission: ['user'] } }, { path: '/account/settings/custom', name: 'CustomSettings', component: () => import('@/views/account/settings/Custom'), - meta: { title: '个性化设置', hidden: true, keepAlive: true, permission: [ 'user' ] } + meta: { title: '个性化设置', hidden: true, keepAlive: true, permission: ['user'] } }, { path: '/account/settings/binding', name: 'BindingSettings', component: () => import('@/views/account/settings/Binding'), - meta: { title: '账户绑定', hidden: true, keepAlive: true, permission: [ 'user' ] } + meta: { title: '账户绑定', hidden: true, keepAlive: true, permission: ['user'] } }, { path: '/account/settings/notification', name: 'NotificationSettings', component: () => import('@/views/account/settings/Notification'), - meta: { title: '新消息通知', hidden: true, keepAlive: true, permission: [ 'user' ] } + meta: { title: '新消息通知', hidden: true, keepAlive: true, permission: ['user'] } } ] } @@ -314,19 +374,19 @@ export const asyncRouterMap = [ path: '/other', name: 'otherPage', component: RouteView, - meta: { title: '其他组件', icon: 'slack', permission: [ 'dashboard' ] }, + meta: { title: '其他组件', icon: 'slack', permission: ['dashboard'] }, redirect: '/other/icon-selector', children: [ { path: '/other/icon-selector', name: 'TestIconSelect', component: () => import('@/views/other/IconSelectorView'), - meta: { title: 'IconSelector', icon: 'tool', keepAlive: true, permission: [ 'dashboard' ] } + meta: { title: 'IconSelector', icon: 'tool', keepAlive: true, permission: ['dashboard'] } }, { path: '/other/list', component: RouteView, - meta: { title: '业务布局', icon: 'layout', permission: [ 'support' ] }, + meta: { title: '业务布局', icon: 'layout', permission: ['support'] }, redirect: '/other/list/tree-list', children: [ { @@ -423,7 +483,7 @@ export const constantRouterMap = [ path: 'dictionaryItem/list/:id', name: 'DictionaryItemList', component: () => import('@/views/sys/dictionaryItem/DictionaryItemList'), - meta: { title: '词典项', keepAlive: true, permission: [ 'dictionaryItem' ] } + meta: { title: '词典项', keepAlive: true, permission: ['dictionaryItem'] } } ] }, diff --git a/src/router/index.js b/src/router/index.js index 8b53d4d..db8bc1b 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -4,7 +4,7 @@ import { constantRouterMap, asyncRouterMap } from '@/config/router.config' // hack router push callback const originalPush = Router.prototype.push -Router.prototype.push = function push (location, onResolve, onReject) { +Router.prototype.push = function push(location, onResolve, onReject) { if (onResolve || onReject) return originalPush.call(this, location, onResolve, onReject) return originalPush.call(this, location).catch(err => err) } @@ -12,8 +12,8 @@ Router.prototype.push = function push (location, onResolve, onReject) { Vue.use(Router) export default new Router({ - mode: 'history', - base: process.env.BASE_URL, + mode: 'hash', // history + // base: process.env.BASE_URL, scrollBehavior: () => ({ y: 0 }), routes: constantRouterMap.concat(asyncRouterMap) }) diff --git a/src/views/project/ProjectList.vue b/src/views/project/ProjectList.vue index d1cba82..c8af6b3 100644 --- a/src/views/project/ProjectList.vue +++ b/src/views/project/ProjectList.vue @@ -1,6 +1,6 @@ @@ -70,102 +75,93 @@ import moment from 'moment' import { STable } from '@/components' import { getProjectList } from '@/api/project/project' +import ProjectForm from '@/views/project/ProjectForm' +import router from '@/router/index.js' export default { - name: 'TableList', + name: 'ProjectList', + props: {}, components: { STable, + ProjectForm, + router, }, data() { return { - mdl: {}, - // 高级搜索 展开/关闭 - advanced: false, // 查询参数 queryParam: {}, // 表头 columns: [ - { - title: '序号', - width: 60, - scopedSlots: { customRender: 'serial' }, - }, - { - title: '项目名称', - dataIndex: 'projectName', - key: 'projectName' - }, + { title: '序号', key: 'id', dataIndex: 'id', width: 60, scopedSlots: { customRender: 'serial' } }, + { title: '项目名称', dataIndex: 'projectName', key: 'projectName' }, { title: '时间', - dataIndex: 'description', - }, - { - title: '人数', - dataIndex: 'callNo', - // sorter: true, - needTotal: true, - // customRender: (text) => text + ' 次', - }, - { - title: '项目类型', - dataIndex: 'description', + dataIndex: 'startDate', + key: 'startDate', + customRender: (text, record, index) => { + return record.startDate + ' - ' + record.endDate + }, }, + { title: '人数', key: 'personNum', dataIndex: 'personNum', customRender: (text) => text + '人' }, + { title: '项目类型', dataIndex: 'projectType', key: 'projectType' }, { title: '项目状态', - dataIndex: 'description', + dataIndex: 'status', + key: 'status', + customRender: (text, record, index) => { + //项目状态 1-未发布 2-未开始 3-进行中 4-已完成 5-已中止 + if (text == 1) { + return '未发布' + } + if (text == 2) { + return '未开始' + } + if (text == 3) { + return '进行中' + } + if (text == 4) { + return '已完成' + } + if (text == 5) { + return '已中止' + } + }, }, - { - title: '创建人员', - dataIndex: 'projectStatus', - }, - { - title: '创建时间', - dataIndex: 'updatedAt', - sorter: true, - }, - // { - // title: '操作', - // dataIndex: 'action', - // width: '150px', - // scopedSlots: { customRender: 'action' }, - // }, + { title: '创建人员', key: 'createBy', dataIndex: 'createBy' }, + { title: '创建时间', key: 'createDate', dataIndex: 'createDate' }, { title: '操作', - key: 'operation', - width: 100, + width: 200, + key: 'status', align: 'center', - scopedSlots: { customRender: 'action' } - } + scopedSlots: { customRender: 'action' }, + }, ], // 加载数据方法 必须为 Promise 对象 - loadData: parameter => { - return getProjectList(Object.assign(parameter, this.queryParam)).then(res => { return res; }) + loadData: (parameter) => { + return getProjectList(Object.assign(parameter, this.queryParam)).then((res) => { + return res + }) }, + selectedRowKeys: [], selectedRows: [], - - // custom table alert & rowSelection - options: { - alert: { - show: true, - clear: () => { - this.selectedRowKeys = [] - }, - }, - rowSelection: { - selectedRowKeys: this.selectedRowKeys, - onChange: this.onSelectChange, - }, - }, - optionAlertShow: false, } }, created() { this.tableOption() - getRoleList({ t: new Date() }) }, methods: { + // 增 + handledCreate() { + return this.$router.push( + // {name: 'ProjectForm'} + { path: 'project/project/add' } + ) + // router.push() + }, + tableOption() { if (!this.optionAlertShow) { this.options = { @@ -190,11 +186,6 @@ export default { } }, - handleEdit(record) { - this.$emit('onEdit', record) - }, - handleOk() { }, - onSelectChange(selectedRowKeys, selectedRows) { this.selectedRowKeys = selectedRowKeys this.selectedRows = selectedRows @@ -211,3 +202,4 @@ export default { }, } + diff --git a/vue.config.js b/vue.config.js index 5422b82..af8906a 100644 --- a/vue.config.js +++ b/vue.config.js @@ -31,6 +31,10 @@ const assetsCDN = { // vue.config.js const vueConfig = { + // 打包资源路径 + publicPath: './', + // 输出文件目录 + outputDir: 'dist', configureWebpack: { // webpack plugins plugins: [