提交 426b1046 authored 作者: pengxiaohui's avatar pengxiaohui

update

上级 bd8d3d44
module.exports = { module.exports = {
domain: 'dev.ezijing.com', domain: 'dev.ezijing.com',
url: 'https://cms-admin2.ezijing.com/api', url: 'https://certs-admin2.ezijing.com/api',
webpack: { webpack: {
externals: { externals: {
CKEDITOR: 'window.CKEDITOR', CKEDITOR: 'window.CKEDITOR',
......
...@@ -8,6 +8,12 @@ export function logout() { ...@@ -8,6 +8,12 @@ export function logout() {
export function getUser() { export function getUser() {
return httpRequest.get('/api/passport/account/get-user-info') return httpRequest.get('/api/passport/account/get-user-info')
} }
/**
* 获取登录用户的权限
*/
export function getUserPermissions() {
return httpRequest.get('/api/certs/user/get-info')
}
// 发送验证码 // 发送验证码
export function sendCode(data) { export function sendCode(data) {
return httpRequest({ return httpRequest({
...@@ -35,3 +41,20 @@ export function updateUserInfo(data) { ...@@ -35,3 +41,20 @@ export function updateUserInfo(data) {
data data
}) })
} }
/**
* 文件上传
*/
export function fileUpload(formData) {
return httpRequest({
url: 'https://webapp-pub.oss-cn-beijing.aliyuncs.com',
method: 'post',
headers: { 'Content-Type': 'multipart/form-data' },
timeout: 900000,
data: formData,
withCredentials: false
})
}
// 获取oss signature
export function getSignature() {
return httpRequest.get('/api/usercenter/aliyun/get-signature')
}
\ No newline at end of file
import httpRequest from '@/utils/axios'
/* ------------------------------------广告------------------------------------ */
/**
* 获取广告列表
* @param {string} type_id 类型id
* @param {number} id_title id或标题
* @param {string} project_id 项目id
*/
export function getAdList(params) {
return httpRequest.get('/api/cms/admin/v1/advertisements', { params })
}
/**
* 创建广告
*/
export function createAd(data) {
return httpRequest.post('/api/cms/admin/v1/advertisement/create', data)
}
/**
* 更新广告
* @param {string} id 广告id
* @param {object} data 广告表单数据
*/
export function updateAd(id, data) {
return httpRequest.put(`/api/cms/admin/v1/advertisement/${id}/update`, data)
}
/**
* 发布广告
* @param {string} id
* @param {number} data.is_publish 发布1 取消发布0
*/
export function publishAd(id, data) {
return httpRequest.post(`/api/cms/admin/v1/advertisement/${id}/publish`, data)
}
/**
* 审核广告
* @param {string} id
* @param {number} data.audit_status 2通过 3驳回
* @param {string} data.audit_remarks 审核说明
*/
export function auditAd(id, data) {
return httpRequest.post(`/api/cms/admin/v1/advertisement/${id}/audit`, data)
}
/**
* 置顶广告
* @param {string} id
* @param {number} data.is_top 是否置顶:0否 1是
* @param {number} data.weight 权重:0-10
*/
export function topAd(id, data) {
return httpRequest.post(`/api/cms/admin/v1/advertisement/${id}/top`, data)
}
/**
* 批量删除广告
* @param {string} data.ids
*/
export function batchDeleteAd(data) {
return httpRequest.post('/api/cms/admin/v1/advertisement/batch-delete', data)
}
/* ------------------------------------文章------------------------------------ */
/**
* 获取文章列表
* @param {string} type_id 类型id
* @param {number} id_title id或标题
* @param {string} project_id 项目id
*/
export function getArticleList(params) {
return httpRequest.get('/api/cms/admin/v1/articles', { params })
}
/**
* 创建文章
*/
export function createArticle(data) {
return httpRequest.post('/api/cms/admin/v1/article/create', data)
}
/**
* 更新文章
* @param {string} id
* @param {number} data
*/
export function updateArticle(id, data) {
return httpRequest.put(`/api/cms/admin/v1/article/${id}/update`, data)
}
/**
* 审核文章
* @param {string} id
* @param {number} data.audit_status 2通过 3驳回
* @param {string} data.audit_remarks 审核说明
*/
export function auditArticle(id, data) {
return httpRequest.post(`/api/cms/admin/v1/article/${id}/audit`, data)
}
/**
* 发布文章
* @param {string} id
* @param {number} data.is_publish 发布1 取消发布0
*/
export function publishArticle(id, data) {
return httpRequest.post(`/api/cms/admin/v1/article/${id}/publish`, data)
}
/**
* 置顶文章
* @param {string} id
* @param {number} data.is_top 是否置顶:0否 1是
*/
export function topArticle(id, data) {
return httpRequest.post(`/api/cms/admin/v1/article/${id}/top`, data)
}
/**
* 推荐文章
* @param {string} id
* @param {number} data.is_recommend 是否推荐:0否 1是
*/
export function recommendArticle(id, data) {
return httpRequest.post(`/api/cms/admin/v1/article/${id}/recommend`, data)
}
/**
* 批量删除文章
* @param {string} data.ids
*/
export function batchDeleteArticle(data) {
return httpRequest.post('/api/cms/admin/v1/article/batch-delete', data)
}
/* ------------------------------------图文------------------------------------ */
/**
* 获取图文列表
* @param {string} type_id 类型id
* @param {number} id_title id或标题
* @param {string} project_id 项目id
*/
export function getImgTextList(params) {
return httpRequest.get('/api/cms/admin/v1/img-texts', { params })
}
/**
* 创建文章
*/
export function createImgText(data) {
return httpRequest.post('/api/cms/admin/v1/img-text/create', data)
}
/**
* 更新图文
* @param {string} id
* @param {number} data
*/
export function updateImgText(id, data) {
return httpRequest.put(`/api/cms/admin/v1/img-text/${id}/update`, data)
}
/**
* 审核图文
* @param {string} id
* @param {number} data.audit_status 2通过 3驳回
* @param {string} data.audit_remarks 审核说明
*/
export function auditImgText(id, data) {
return httpRequest.post(`/api/cms/admin/v1/img-text/${id}/audit`, data)
}
/**
* 发布图文
* @param {string} id
* @param {number} data.is_publish 发布1 取消发布0
*/
export function publishImgText(id, data) {
return httpRequest.post(`/api/cms/admin/v1/img-text/${id}/publish`, data)
}
/**
* 获取广告/文章/图文新建时所选项目对应的类型
* @param {number} content_type 类型 1文章 2广告 3图文
* @param {string} params.project_id 项目id
*/
export function getProjectContentTypeList(type, params) {
return httpRequest.get(`/api/cms/admin/v1/type/${type}/project`, { params })
}
/**
* 置顶图文
* @param {string} id
* @param {number} data.is_top 是否置顶:0否 1是
*/
export function topImgText(id, data) {
return httpRequest.post(`/api/cms/admin/v1/img-text/${id}/top`, data)
}
/**
* 批量删除图文
* @param {string} data.ids
*/
export function batchDeleteImgText(data) {
return httpRequest.post('/api/cms/admin/v1/img-text/batch-delete', data)
}
import httpRequest from '@/utils/axios'
/**
* 课程列表
*/
export function getCourseList(params) {
return httpRequest.get('/api/certs/v1/course/list', { params })
}
/**
* 创建课程
* @data 课程信息
*/
export function createCourse(data) {
return httpRequest.post('/api/certs/v1/course/create', data)
}
/**
* 更新课程
* @id 课程id
* @data 课程信息
*/
export function updateCourse(id, data) {
return httpRequest.post(`/api/certs/v1/course/update/${id}`, data)
}
/**
* 删除课程
* @ids 课程id,以,连接
*/
export function deleteCourse(ids) {
return httpRequest.post(`/api/certs/v1/course/delete/${ids}`)
}
/**
* 课程导入
*/
export function importCourse(formData) {
return httpRequest({
url: '/api/certs/v1/course/import',
method: 'post',
headers: { 'Content-Type': 'multipart/form-data' },
timeout: 900000,
data: formData,
withCredentials: false
})
}
/**
* 导出课程列表
* @params.key 课程ID、课程名称
*/
export function exportCourseList(params) {
return httpRequest({
url: '/api/certs/v1/course/download',
method: 'get',
params,
responseType: 'blob'
})
}
\ No newline at end of file
import httpRequest from '@/utils/axios'
/**
* 项目列表
*/
export function getProjectList(params) {
return httpRequest.get('/api/certs/v1/project/list', { params })
}
/**
* 创建项目
* @data 项目信息
*/
export function createProject(data) {
return httpRequest.post('/api/certs/v1/project/create', data)
}
/**
* 更新项目
* @id 项目id
* @data 项目信息
*/
export function updateProject(id, data) {
return httpRequest.post(`/api/certs/v1/project/update/${id}`, data)
}
/**
* 删除项目
* @ids 项目id,以,连接
*/
export function deleteProject(ids) {
return httpRequest.post(`/api/certs/v1/project/delete/${ids}`)
}
/**
* 更新项目关联的课程
* @type 操作类型(1:新增;2:删除)
* @project_id 项目id
* @courses_id 课程ID,多个使用英文逗号分割
*/
export function updateProjectCourseRelation(data) {
return httpRequest.post('/api/certs/v1/project/update-course', data)
}
/**
* 更新项目关联的学员
* @type 操作类型(1:新增;2:删除)
* @project_id 项目id
* @students_id 学员ID,多个使用英文逗号分割
*/
export function updateProjectStudentRelation(data) {
return httpRequest.post('/api/certs/v1/project/update-student', data)
}
/**
* 导出项目列表
* @params.key 项目ID、项目名称
* @params.type 项目类型
*/
export function exportProjectList(params) {
return httpRequest({
url: '/api/certs/v1/project/download',
method: 'get',
params,
responseType: 'blob'
})
}
\ No newline at end of file
import httpRequest from '@/utils/axios'
/**
* 角色列表
*/
export function getRoleList() {
return httpRequest.get('/api/certs/management/role/index')
}
/**
* 新建/更新角色
*/
export function saveRole(data) {
return httpRequest.post('/api/certs/management/role/create-or-update', data)
}
/**
* 删除角色
*/
export function deleteRole(data) {
return httpRequest.post('/api/certs/management/role/delete', data)
}
/**
* 查询角色详情
*/
export function getRoleDetails(params) {
return httpRequest.get('/api/certs/management/role/manage', { params })
}
/**
* 查询所有权限
*/
export function getPermissionList(params) {
return httpRequest.get('/api/certs/management/permission/index', { params })
}
/**
* 配置权限
*/
export function setPermissions(data) {
return httpRequest.post('/api/certs/management/role/manage?name=' + data.name, data)
}
\ No newline at end of file
import httpRequest from '@/utils/axios'
/* ------------------------------------高级设置------------------------------------ */
/**
* 获取角色列表
*/
export function getRoleList(params) {
return httpRequest.get('/api/cms/admin/v1/roles', { params })
}
/**
* 获取权限列表
*/
export function getPermissionList(params) {
return httpRequest.get('/api/cms/admin/v1/permissions', { params })
}
/**
* 创建角色
*/
export function createRole(data) {
return httpRequest.post('/api/cms/admin/v1/role/create', data)
}
/**
* 获取角色详情
*/
export function getRoleDetails(params) {
return httpRequest.get(`/api/cms/admin/v1/role/${params.role_id}/detail`, { params })
}
/**
* 更新角色
*/
export function updateRole(data) {
return httpRequest.put(`/api/cms/admin/v1/role/${data.role_id}/update`, data)
}
/**
* 删除角色
*/
export function deleteRole(data) {
return httpRequest.delete(`/api/cms/admin/v1/role/${data.role_id}/delete`, data)
}
/* ------------------------------------员工管理------------------------------------ */
/**
* 获取员工列表
*/
export function getStaffList(params) {
return httpRequest.get('/api/cms/admin/v1/users', { params })
}
/**
* 创建员工
*/
export function createStaff(data) {
return httpRequest.post('/api/cms/admin/v1/user/create', data)
}
/**
* 更新员工
*/
export function updateStaff(data) {
return httpRequest.put(`/api/cms/admin/v1/user/${data.sso_id}/update`, data)
}
/**
* 批量删除员工
*/
export function batchDeleteStaff(data) {
return httpRequest.post('/api/cms/admin/v1/user/batch-delete', data)
}
/**
* 删除用户缓存
*/
export function clearUserCached(id) {
return httpRequest.get(`/api/cms/admin/v1/user/${id}/clear-cached`)
}
/* ------------------------------------项目管理------------------------------------ */
/**
* 获取项目列表
* @param {string} name 项目名称
* @param {string} type_id 项目id
* @param {number} status 创建的时候是否展示:0不展示,1展示
*/
export function getProjectList(params) {
return httpRequest.get('/api/cms/admin/v1/projects', { params })
}
/**
* 创建项目
*/
export function createProject(data) {
return httpRequest.post('/api/cms/admin/v1/project/create', data)
}
/**
* 更新项目
*/
export function updateProject(data) {
return httpRequest.put(`/api/cms/admin/v1/project/${data.project_id}/update`, data)
}
/**
* 删除项目
*/
export function deleteProject(data) {
return httpRequest.delete(`/api/cms/admin/v1/project/${data.project_id}/delete`, data)
}
/* ------------------------------------类型管理------------------------------------ */
/**
* 获取类型列表
* @param {number} type 0项目类型 1内容类型
*/
export function getTypeList(params) {
return httpRequest.get('/api/cms/admin/v1/types', { params })
}
/**
* 创建类型
*/
export function createType(data) {
return httpRequest.post('/api/cms/admin/v1/type/create', data)
}
/**
* 更新类型
*/
export function updateType(data) {
return httpRequest.put(`/api/cms/admin/v1/type/${data.type_id}/update`, data)
}
/**
* 获取所有的内容分类
*/
export function getContentTypesList(params) {
return httpRequest.get('/api/cms/admin/v1/type/content-types', { params })
}
/**
* 批量删除类型
*/
export function batchDeleteType(data) {
return httpRequest.post('/api/cms/admin/v1/type/batch-delete', data)
}
import httpRequest from '@/utils/axios'
/**
* 学员列表
* @params.key 学籍ID、学员姓名
* @params.email 邮箱
* @params.mobile 手机号
*/
export function getStudentList(params) {
return httpRequest.get('/api/certs/v1/student/list', { params })
}
/**
* 导出学员列表
* @params.key 学籍ID、学员姓名
* @params.email 邮箱
* @params.mobile 手机号
*/
export function exportStudentList(params) {
return httpRequest({
url: '/api/certs/v1/student/download',
method: 'get',
params,
responseType: 'blob'
})
}
/**
* 学员导入
*/
export function importStudents(formData) {
console.log(formData)
return httpRequest({
url: '/api/certs/v1/student/import',
method: 'post',
headers: { 'Content-Type': 'multipart/form-data' },
timeout: 900000,
data: formData
})
}
/**
* 学员详情
* @id 学籍ID
*/
export function getStudentDetails(id) {
return httpRequest.get(`/api/certs/v1/student/view/${id}`)
}
/**
* 更新学员信息
* @id 学籍ID
* @data 学员信息
*/
export function updateStudentInfo(id, data) {
return httpRequest.post(`/api/certs/v1/student/update/${id}`, data)
}
/**
* 删除学员
* @ids 学籍ID,以,连接
*/
export function deleteStudent(ids) {
return httpRequest.post(`/api/certs/v1/student/delete/${ids}`)
}
/**
* 学位列表
* @id 学籍ID
*/
export function getStudentDegreeList(id) {
return httpRequest.get(`/api/certs/v1/student/degree-list/${id}`)
}
/**
* 编辑/新增学位
* @id 学籍ID
* @data 学位信息
*/
export function saveStudentDegree(data) {
let api = '/api/certs/v1/student/save-degree'
if (data.id) api = api + '/' + data.id
return httpRequest.post(api, data)
}
/**
* 删除学位
* @ids 学位ID,以,连接
*/
export function deleteStudentDegree(ids) {
return httpRequest.post(`/api/certs/v1/student/delete-degree/${ids}`)
}
/**
* 学员课程列表
* @id 学籍ID
*/
export function getStudentCourseList(id) {
return httpRequest.get(`/api/certs/v1/student/course-list/${id}`)
}
/**
* 保存学员课程列表
* @id 学籍ID
*/
export function saveStudentCourseList(id, data) {
return httpRequest.post(`/api/certs/v1/student/save-course/${id}`, data)
}
\ No newline at end of file
import httpRequest from '@/utils/axios'
/**
* 操作日志
*/
export function operateLog(params) {
const logMsg = `操作人:${params.user.nickname},操作:${params.type}`
const data = {
detail: logMsg
}
httpRequest.post('/api/live/admin/v2/system/log/write', data).then(res => {
}).catch(() => {})
}
/**
* 模糊搜索
*/
export function searchUserList(params) {
return httpRequest.get('/api/cms/admin/v1/common/user-search', { params })
}
/**
* 获取当前用户的角色和权限
*/
export function getUserRolesPermissions() {
return httpRequest.get('/api/cms/admin/v1/common/user-detail')
}
/**
* 文件上传
*/
export function fileUpload(formData) {
return httpRequest({
url: 'https://webapp-pub.oss-cn-beijing.aliyuncs.com',
method: 'post',
headers: { 'Content-Type': 'multipart/form-data' },
timeout: 900000,
data: formData,
withCredentials: false
})
}
// 获取oss signature
export function getSignature() {
return httpRequest.get('/api/usercenter/aliyun/get-signature')
}
import httpRequest from '@/utils/axios'
/**
* 授权(用户)列表
*/
export function getAssignUserList(params) {
return httpRequest.get('/api/certs/management/assignment/index', { params })
}
/**
* 搜索用户
*/
export function searchUsers(params) {
return httpRequest.get('/api/certs/management/assignment/search', { params })
}
/**
* 用户授权
*/
export function assignUser(data) {
return httpRequest.post('/api/certs/management/assignment/create', data)
}
/**
* 删除授权用户
*/
export function deleteAssignUser(data) {
return httpRequest.post('/api/certs/management/assignment/delete', data)
}
\ No newline at end of file
...@@ -51,7 +51,7 @@ export default { ...@@ -51,7 +51,7 @@ export default {
}, },
methods: { methods: {
handlleSelect(path) { handlleSelect(path) {
console.log(path) // console.log(path)
this.$router.push(path) this.$router.push(path)
} }
} }
......
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
</el-form-item> </el-form-item>
</template> </template>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" @click="search">搜索</el-button> <el-button type="primary" icon="el-icon-search" @click="search">查询</el-button>
<el-button icon="el-icon-refresh-left" @click="reset">重置</el-button> <el-button icon="el-icon-refresh-left" @click="reset">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
...@@ -42,7 +42,7 @@ ...@@ -42,7 +42,7 @@
</div> </div>
<slot></slot> <slot></slot>
<div class="table-list-bd"> <div class="table-list-bd">
<el-table :data="dataList" size="mini" v-loading="loading" v-bind="$attrs" v-on="$listeners" height="100%"> <el-table ref="table" :data="dataList" size="mini" v-loading="loading" v-bind="$attrs" v-on="$listeners" height="100%">
<template v-for="item in columns"> <template v-for="item in columns">
<el-table-column v-bind="item" :key="item.prop" v-if="visible(item)"> <el-table-column v-bind="item" :key="item.prop" v-if="visible(item)">
<template v-slot:default="scope" v-if="item.slots || item.computed"> <template v-slot:default="scope" v-if="item.slots || item.computed">
...@@ -54,9 +54,7 @@ ...@@ -54,9 +54,7 @@
</el-table> </el-table>
</div> </div>
<div class="table-list-ft"> <div class="table-list-ft">
<div>
<slot name="footer"></slot> <slot name="footer"></slot>
</div>
<el-pagination <el-pagination
class="table-list-pagination" class="table-list-pagination"
layout="total, prev, pager, next, sizes, jumper" layout="total, prev, pager, next, sizes, jumper"
...@@ -95,7 +93,8 @@ export default { ...@@ -95,7 +93,8 @@ export default {
loading: false, loading: false,
params: this.remote.params || {}, params: this.remote.params || {},
dataList: this.data, dataList: this.data,
page: { total: 0, size: this.limit, currentPage: 1 } page: { total: 0, size: this.limit, currentPage: 1 },
selection: []
} }
}, },
watch: { watch: {
...@@ -128,7 +127,7 @@ export default { ...@@ -128,7 +127,7 @@ export default {
// 翻页参数设置 // 翻页参数设置
if (this.hasPagination) { if (this.hasPagination) {
params.page = this.page.currentPage params.page = this.page.currentPage
params.limit = this.page.size params['per-page'] = this.page.size
} }
// 接口请求之前 // 接口请求之前
if (beforeRequest) { if (beforeRequest) {
...@@ -142,9 +141,9 @@ export default { ...@@ -142,9 +141,9 @@ export default {
this.loading = true this.loading = true
httpRequest(params) httpRequest(params)
.then(res => { .then(res => {
const { data = [], total = 0 } = res.data || {} const { list = [], total = 0 } = res.data || {}
this.page.total = total this.page.total = total
this.dataList = callback ? callback(data) : data this.dataList = callback ? callback(list) : list
}) })
.finally(() => { .finally(() => {
this.loading = false this.loading = false
...@@ -176,6 +175,13 @@ export default { ...@@ -176,6 +175,13 @@ export default {
}, },
visible(item) { visible(item) {
return Object.prototype.hasOwnProperty.call(item, 'visible') ? item.visible : true return Object.prototype.hasOwnProperty.call(item, 'visible') ? item.visible : true
},
tableReview(arr, list) { // 默认选中
list.forEach(item => {
if (arr.indexOf(item.id) > -1) {
this.$refs.table.toggleRowSelection(item, true)
}
})
} }
}, },
beforeMount() { beforeMount() {
...@@ -200,6 +206,7 @@ export default { ...@@ -200,6 +206,7 @@ export default {
} }
.table-list-bd { .table-list-bd {
flex: 1; flex: 1;
height: 0;
} }
.table-list-bd .el-table th:first-child .cell{ .table-list-bd .el-table th:first-child .cell{
padding-left:14px; padding-left:14px;
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" /> <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" /> <meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" /> <meta http-equiv="Expires" content="0" />
<title>紫荆内容管理系统</title> <title>紫荆证书查询管理系统</title>
<meta <meta
name="viewport" name="viewport"
id="viewport" id="viewport"
......
差异被折叠。
<template>
<div class="form-container">
<el-form :model="form" :rules="rules" ref="ruleForm" label-width="140px" :disabled="!isEditFlag">
<el-form-item label="项目名称:" prop="chinese_name">
<el-input v-model="form.chinese_name" placeholder="请输入项目名称" size="mini"/>
</el-form-item>
<el-form-item label="项目名称(英):" prop="english_name">
<el-input v-model="form.english_name" placeholder="请输入项目英文名称" size="mini"/>
</el-form-item>
<el-form-item label="项目类型" prop="type">
<el-select v-model="form.type" placeholder="请选择项目类型" size="small" style="width:100%;">
<el-option v-for="item in typeList" :label="item.name" :value="item.id" :key="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="发布时间" prop="pubdate">
<el-date-picker v-model="form.pubdate" type="datetime" placeholder="请选择发布时间" size="small" value-format="yyyy-MM-dd hh:mm:ss" style="width:100%;"/>
</el-form-item>
</el-form>
<div class="foot-btn-bar" v-if="isEditFlag">
<el-button size="mini" @click="handleCancel">取消</el-button>
<el-button type="primary" size="mini" @click="handleEnsure">确认提交</el-button>
</div>
</div>
</template>
<script>
export default {
props: {
value: {
type: Boolean
},
details: {
type: Object
}
},
data() {
return {
form: {
chinese_name: '',
english_name: '',
type: '',
pubdate: ''
},
rules: {
chinese_name: { required: true, message: '请输入项目名称', trigger: 'blur' },
en_name: { required: true, message: '请输入项目英文名称', trigger: 'blur' },
type: { required: true, message: '请选择项目类型', trigger: 'change' },
pubdate: { required: true, message: '请选择发布时间', trigger: 'change' }
},
typeList: [
{ id: 1, name: '长期' },
{ id: 2, name: '短期' }
]
}
},
computed: {
isEditFlag() {
return this.value
}
},
created() {
if (this.details && this.details.id) {
this.form = this.details
}
},
methods: {
handleCancel() {
this.$refs.ruleForm.clearValidate()
this.$emit('input', false)
},
handleEnsure() {
this.$refs.ruleForm.validate((valid) => {
if (valid) {
this.$emit('formSubmit', this.form)
}
})
}
}
}
</script>
<style scoped>
.el-form{
width:450px;
margin:15px auto 0;
}
.foot-btn-bar{
text-align:center;
}
</style>
\ No newline at end of file
<template>
<div class="project-course">
<table-list v-bind="tableOptions" ref="tabList" @selection-change="handleSelectionChange">
<template #footer>
<div v-if="isEdit">
已选中 {{multipleSelection.length}}
<el-button style="margin-left:15px;" size="mini" :disabled="!multipleSelection.length" @click="handleRemove" v-if="hasSave">删除</el-button>
</div>
<div v-else>
已选中 {{multipleSelection.length}}
<el-button style="margin-left:15px;" size="mini" @click="handleCancel">取消</el-button>
<el-button style="margin-left:15px;" type="primary" size="mini" :disabled="!multipleSelection.length" @click="fetchCourseRelation" v-if="hasSave">确认提交</el-button>
</div>
</template>
</table-list>
</div>
</template>
<script>
import { getCourseList } from '@/api/course'
import { updateProjectCourseRelation } from '@/api/project'
import TableList from '@/components/TableList'
export default {
components: { TableList },
props: {
isEdit: {
type: Boolean,
default: false
},
id: {
type: String
}
},
data() {
return {
multipleSelection: []
}
},
computed: {
permissions() {
return this.$store.state.user.permissions || []
},
hasSave() {
return this.permissions.includes('v1/project/update-course')
},
tableOptions() {
const params = { key: '' }
if (this.isEdit) params.project_id = this.id
return {
remote: {
httpRequest: getCourseList,
params: params
},
filters: [
{ type: 'input', placeholder: '请输入课程ID/课程名称', prop: 'key' }
],
columns: [
{ type: 'selection', minWidth: '50px', fixed: 'left', visible: this.hasDelete },
{ prop: 'id', label: '课程ID', minWidth: '120px', fixed: 'left' },
{ prop: 'chinese_name', label: '课程名称', minWidth: '130px' },
{ prop: 'english_name', label: '课程名称(英)', minWidth: '160px' },
{ prop: 'pubdate', label: '发布时间', minWidth: '120px' }
]
}
}
},
methods: {
handleSelectionChange(val) {
this.multipleSelection = val.map(item => item.id)
},
handleRemove() {
this.$confirm('确定删除选中的课程与此项目的关联?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消'
}).then(() => {
this.fetchCourseRelation()
}).catch(() => {});
},
fetchCourseRelation() {
const msg = this.isEdit ? '删除课程' : '添加课程'
const params = {
type: this.isEdit ? 2 : 1,
project_id: this.id,
courses_id: this.multipleSelection.join()
}
updateProjectCourseRelation(params).then(res => {
if (res.code === 0 && res.message === 'OK') {
this.$message.success(msg + '成功')
this.$emit('tableRefetch')
if (this.isEdit) this.$refs.tabList.refetch()
else this.$emit('input', false)
} else {
this.$message.error(msg + '失败')
}
})
}
}
}
</script>
<style>
.project-course{
height:100%;
}
</style>
\ No newline at end of file
<template>
<div class="project-info">
<div class="btn-bar" v-if="!isEdit">
<el-button v-if="hasUpdate" type="primary" size="mini" @click="isEdit = true">编辑</el-button>
</div>
<info-form v-model="isEdit" :details="info" @formSubmit="fetchUpdateProject"/>
</div>
</template>
<script>
import InfoForm from './InfoForm'
import { updateProject } from '@/api/project'
export default {
components: { InfoForm },
props: {
info: {
type: Object
}
},
data() {
return {
isEdit: false
}
},
computed: {
permissions() {
return this.$store.state.user.permissions || []
},
hasUpdate() {
return this.permissions.includes('v1/project/update')
}
},
created() {
console.log(this.info)
},
methods: {
fetchUpdateProject(val) {
updateProject(val.id, val).then(res => {
const msg = '编辑项目'
if (res.code === 0 && res.message === 'OK') {
this.$message.success(msg + '成功')
this.createDrawerVisible = false
this.$emit('tableRefetch')
} else {
this.$message.error(msg + '失败')
}
})
}
}
}
</script>
<style scoped>
.btn-bar{
text-align:right;
margin-right:20px;
}
</style>
\ No newline at end of file
<template>
<div class="project-student">
<table-list v-bind="tableOptions" ref="tabList" @selection-change="handleSelectionChange">
<template #footer>
<div v-if="isEdit">
已选中 {{multipleSelection.length}}
<el-button style="margin-left:15px;" size="mini" :disabled="!multipleSelection.length" @click="handleRemove" v-if="hasSave">删除</el-button>
</div>
<div v-else>
已选中 {{multipleSelection.length}}
<el-button style="margin-left:15px;" size="mini" @click="handleCancel">取消</el-button>
<el-button style="margin-left:15px;" type="primary" size="mini" :disabled="!multipleSelection.length" @click="fetchStudentRelation" v-if="hasSave">确认提交</el-button>
</div>
</template>
</table-list>
</div>
</template>
<script>
import TableList from '@/components/TableList'
import { getStudentList } from '@/api/student'
import { updateProjectStudentRelation } from '@/api/project'
const genderMap = { 0: '男', 1: '女', 2: '未知' }
export default {
components: { TableList },
props: {
isEdit: {
type: Boolean,
default: false
},
id: {
type: String
}
},
data() {
return {
multipleSelection: []
}
},
computed: {
permissions() {
return this.$store.state.user.permissions || []
},
hasSave() {
return this.permissions.includes('v1/project/update-student')
},
tableOptions() {
const params = { key: '', mobile: '', email: '' }
if (this.isEdit) params.project_id = this.id
return {
remote: {
httpRequest: getStudentList,
params: params
},
filters: [
{ type: 'input', placeholder: '请输入学员ID/学员名称', prop: 'key' },
{ type: 'input', placeholder: '请输入手机号', prop: 'mobile' },
{ type: 'input', placeholder: '请输入邮箱地址', prop: 'email' }
],
columns: [
{ type: 'selection', minWidth: '50px', fixed: 'left', visible: this.hasDelete },
{ prop: 'id', label: '学员ID', minWidth: '120px', fixed: 'left' },
{ prop: 'chinese_name', label: '姓名', minWidth: '90px' },
{
prop: 'gender',
label: '性别',
minWidth: '60px',
computed({ row }) {
return genderMap[row.gender || 2]
}
},
{ prop: 'id_number', label: '身份证号', minWidth: '150px' },
{ prop: 'mobile', label: '电话号码', minWidth: '130px' },
{ prop: 'email', label: '邮箱地址', minWidth: '150px' },
{ prop: 'created_time', label: '创建时间', minWidth: '150px' }
]
}
}
},
methods: {
handleSelectionChange(val) {
this.multipleSelection = val.map(item => item.id)
},
handleRemove() {
this.$confirm('确定删除选中的学员与此项目的关联?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消'
}).then(() => {
this.fetchStudentRelation()
}).catch(() => {});
},
handleCancel() {},
fetchStudentRelation () {
const msg = this.isEdit ? '删除学员' : '添加学员'
const params = {
type: this.isEdit ? 2 : 1,
project_id: this.id,
students_id: this.multipleSelection.join()
}
updateProjectStudentRelation(params).then(res => {
if (res.code === 0 && res.message === 'OK') {
this.$message.success(msg + '成功')
this.$emit('tableRefetch')
if (this.isEdit) this.$refs.tabList.refetch()
else this.$emit('input', false)
} else {
this.$message.error(msg + '失败')
}
})
}
}
}
</script>
<style>
.project-student{
height:100%
}
</style>
\ No newline at end of file
差异被折叠。
差异被折叠。
<template>
<div class="student-degree">
<div class="btn-bar">
<el-button v-if="hasSave" type="primary" size="mini" @click="handleCreate">新增</el-button>
</div>
<el-table :data="tableData" size="mini" style="width: 100%">
<el-table-column label="Major" width="120" prop="major" />
<el-table-column label="Degree Level" min-width="150" prop="level" />
<el-table-column label="Degree Type" min-width="240" prop="type" />
<el-table-column label="Program" min-width="120" prop="project.chinese_name" />
<el-table-column label="Operations" min-width="130">
<template slot-scope="scope">
<el-button v-if="hasSave" type="text" @click="handleEdit(scope.row)">编辑</el-button>
<el-button v-if="hasDelete" type="text" @click="handleDelete(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="520px" append-to-body @close="handleClose">
<el-form :model="form" :rules="rules" ref="ruleForm" label-width="120px">
<el-form-item label="Major" prop="major">
<el-input v-model="form.major" size="small" placeholder="请输入课程"/>
</el-form-item>
<el-form-item label="Degree Level" prop="level">
<el-input v-model="form.level" size="small" placeholder="请输入学位"/>
</el-form-item>
<el-form-item label="Degree Type" prop="type">
<el-input v-model="form.type" size="small" placeholder="请输入专业"/>
</el-form-item>
<el-form-item label="Program" prop="project_id">
<el-select v-model="form.project_id" placeholder="请选择项目" size="small" style="width:100%;">
<el-option v-for="item in projectOptions" :label="item.project.chinese_name" :value="item.project_id" :key="item.value"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button size="mini" @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="handleSubmit" size="mini">提交</el-button>
</el-form-item>
</el-form>
</el-dialog>
</div>
</template>
<script>
import { getStudentDegreeList, saveStudentDegree, getStudentCourseList } from '@/api/student'
const defaultForm = {
major: '',
level: '',
type: '',
project_id: ''
}
export default {
props: {
id: {
type: String
}
},
data() {
return {
tableData: [],
form: Object.assign({ student_id: this.id }, defaultForm),
rules: {
major: { required: true, message: '请输入专业', trigger: 'blur' },
level: { required: true, message: '请学位', trigger: 'blur' },
type: { required: true, message: '请学位类型', trigger: 'blur' },
project_id: { required: true, message: '请选择项目', trigger: 'blur' }
},
projectOptions: [],
dialogVisible: false,
dialogTitle: ''
}
},
computed: {
permissions() {
return this.$store.state.user.permissions || []
},
hasSave() {
return this.permissions.includes('v1/student/save-degree')
},
hasDelete() {
return this.permissions.includes('v1/student/delete-degree')
}
},
created() {
this.fetchDegreeList()
},
methods: {
handleCreate() {
this.dialogTitle = '新增学位'
this.dialogVisible = true
this.fetchProjectList()
},
handleEdit(val) {
this.dialogTitle = '编辑学位'
this.dialogVisible = true
this.form = val
},
handleDelete(val) {
console.log(val)
},
handleClose() {
this.form = Object.assign({ student_id: this.id }, defaultForm)
},
handleSubmit() {
this.$refs.ruleForm.validate((valid) => {
if (valid) {
this.fetchSubmit()
}
})
},
fetchDegreeList() {
const params = {
page: 1,
'per-page': 100
}
getStudentDegreeList(this.id, params).then(res => {
if (res.code === 0 && res.data && Array.isArray(res.data.list)) {
this.tableData = res.data.list
}
})
},
fetchProjectList() {
getStudentCourseList(this.id || '').then(res => {
if (res.code === 0 && res.message === 'OK') {
this.projectOptions = res.data
}
})
},
fetchSubmit() {
saveStudentDegree(this.form).then(res => {
if (res.code === 0 && res.message === 'OK') {
this.$message.success(this.dialogTitle + '成功')
this.fetchDegreeList()
this.dialogVisible = false
} else {
this.$message.error(this.dialogTitle + '失败')
}
})
}
}
}
</script>
<style scoped>
.student-degree{
min-height:60vh;
}
.btn-bar{
text-align:right;
}
</style>
\ No newline at end of file
差异被折叠。
<template>
<el-select v-model="userId" v-bind="options" placeholder="输入邮箱/手机号码搜索" filterable remote :remote-method="fetchUserList" :loading="searchUsersloading" @change="handleChange">
<el-option :label="user.realname || user.nickname " :value="user.id" v-for="user in userList" :key="user.id" >
<span style="float: left">
{{ user.realname || user.nickname }}
<template v-if="user.mobile">(手机号:{{user.mobile}})</template>
</span>
<span style="float: right; color: #8492a6; font-size: 13px; margin:0 20px 0 10px;" v-if="user.email">邮箱:{{ user.email }}</span>
<span style="float: right; color: #8492a6; font-size: 13px; margin:0 20px 0 10px;" v-else>ID:{{ user.id }}</span>
</el-option>
</el-select>
</template>
<script>
import { searchUsers } from '@/api/user'
export default {
props: {
value: {
type: [Array, String]
},
defaultList: {
type: Array,
default: () => {
return []
}
},
options: {
type: Object,
default: () => {
return {}
}
}
},
data() {
return {
userId: this.value,
searchUsersloading: false,
userList: []
}
},
watch: {
value: {
handler: function (nv) {
this.userId = nv
},
immediate: true,
deep: true
},
defaultList: {
handler: function (nv) {
this.userList = nv
},
immediate: true,
deep: true
}
},
methods: {
handleChange() {
const selectedUser = this.userList.find(item => item.id === this.userId)
this.$emit('input', this.userId)
this.$emit('select', selectedUser)
},
fetchUserList(val) {
this.searchUsersloading = true
searchUsers({ q: val || '' })
.then(res => {
this.searchUsersloading = false
if (res.data && Array.isArray(res.data.list)) {
this.userList = res.data.list
}
})
}
}
}
</script>
<style scoped>
.el-select{
width:100%;
}
</style>
\ No newline at end of file
<template>
<div class="user page_container">
<div class="btn-bar">
<div class="filter">
<div style="display:inline-block;width:220px;margin-right:12px;" v-if="hasSearchUser">
<user-search v-model="filter.uid" :options="{ size: 'small', clearable: true }"/>
</div>
<div style="display:inline-block;width:220px;margin-right:12px;">
<el-select v-model="filter.role" placeholder="请选择角色" size="small" style="width:100%;" clearable>
<el-option :label="role.description" :value="role.name" v-for="role in roleList" :key="role.id" ></el-option>
</el-select>
</div>
<el-button type="primary" size="small" icon="el-icon-search" @click="fetchAssignUserList">查询</el-button>
<el-button icon="el-icon-refresh-left" size="small" @click="handleReset">重置</el-button>
</div>
<el-button v-if="hasCreate" type="primary" size="mini" @click="drawerVisible = true">新增授权</el-button>
</div>
<el-table :data="tableData" size="mini" style="width: 100%">
<el-table-column label="用户ID" min-width="120" prop="userId" />
<el-table-column label="用户姓名" min-width="150" prop="userName" />
<el-table-column label="角色" min-width="150" prop="roleName" />
<el-table-column label="操作" min-width="130">
<template slot-scope="scope" v-if="scope.row.name !== 'superAdmin'">
<!-- <el-button type="text" @click="handleEdit(scope.row)">编辑</el-button> -->
<el-button v-if="hasDelete" type="text" @click="handleDelete(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<el-drawer title="新增用户" :append-to-body="true" :visible.sync="drawerVisible" size="520px">
<div class="drawer-container">
<el-form :model="form" :rules="rules" ref="ruleForm" label-width="140px">
<el-form-item label="账户" prop="uid" v-if="dialogType === 'edit'">
<el-input v-model="form.uid" size="small" disabled></el-input>
</el-form-item>
<el-form-item label="账户" prop="uid" v-else style="position:relative;">
<user-search v-model="form.uid" :options="{ size: 'small' }"/>
</el-form-item>
<el-form-item label="角色" prop="role">
<el-select v-model="form.role" placeholder="请选择角色" size="small" style="width:100%;">
<el-option :label="role.description" :value="role.name" v-for="role in roleList" :key="role.id" ></el-option>
</el-select>
</el-form-item>
</el-form>
<div class="drawer-footer">
<el-button size="mini" @click="drawerVisible = false">取 消</el-button>
<el-button size="mini" type="primary" @click="handleSubmit" >提交</el-button>
</div>
</div>
</el-drawer>
</div>
</template>
<script>
import UserSearch from './components/UserSearch'
import { getRoleList } from '@/api/role'
import { getAssignUserList, searchUsers, assignUser, deleteAssignUser } from '@/api/user'
const defaultForm = {
uid: '',
role: ''
}
export default {
components: { UserSearch },
data() {
return {
tableData: [],
drawerVisible: false,
filter: Object.assign({}, defaultForm),
form: Object.assign({}, defaultForm),
rules: {
uid: { required: true, message: '请选择用户', trigger: 'change' },
role: { required: true, message: '请选择角色', trigger: 'change' }
},
dialogType: 'create',
searchUsersloading: false,
userList: [],
roleList: []
}
},
computed: {
permissions() {
return this.$store.state.user.permissions || []
},
hasCreate() {
return this.permissions.includes('management/assignment/create')
},
hasSearchUser() {
return this.permissions.includes('management/assignment/search')
},
hasDelete() {
return this.permissions.includes('management/assignment/delete')
}
},
created() {
this.fetchAssignUserList()
this.fetchRoleList()
},
methods: {
handleReset() {
this.filter = Object.assign({}, defaultForm)
this.fetchAssignUserList()
},
handleCreate() {
this.drawerVisible = true
this.dialogType = 'create'
},
handleDelete(row) {
this.$confirm('执行删除将导致此用户无法登录系统, 是否继续执行删除?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消'
}).then(() => {
this.fetchDeleteAssignUser({ uid: row.userId, role: row.roleName })
}).catch(() => {});
},
handleEdit() {
this.drawerVisible = true
this.dialogType = 'edit'
},
handleSubmit() {
this.$refs.ruleForm.validate((valid) => {
if (valid) {
this.fetchCreateAssignUser()
}
});
},
fetchCreateAssignUser() {
assignUser(this.form).then(res => {
const msg = this.dialogType === 'create' ? '新增用户' : '编辑用户'
if (res.code === 0 && res.message === 'OK') {
this.$message.success(msg + '成功')
this.fetchAssignUserList()
this.drawerVisible = false
} else {
this.$message.error(msg + '失败')
}
})
},
fetchDeleteAssignUser(data) {
deleteAssignUser(data).then(res => {
const msg = '删除用户'
if (res.code === 0 && res.message === 'OK') {
this.$message.success(msg + '成功')
this.fetchAssignUserList()
} else {
this.$message.error(msg + '失败')
}
})
},
fetchAssignUserList() {
const params = {
uid: this.filter.uid,
role: this.filter.role
}
getAssignUserList(params).then(res => {
if (res.code === 0 && Array.isArray(res.data)) {
this.tableData = res.data
}
})
},
fetchSearchUsers(val) {
this.searchUsersloading = true
searchUsers({ q: val || '' })
.then(res => {
this.searchUsersloading = false
if (res.data && Array.isArray(res.data.list)) {
this.userList = res.data.list
}
})
},
fetchRoleList() {
getRoleList().then(res => {
if (res.code === 0 && Array.isArray(res.data)) {
this.roleList = res.data
}
})
}
}
}
</script>
<style scoped>
.user{
box-sizing:border-box;
padding: 15px;
}
.btn-bar{
padding-bottom:10px;
display:flex;
}
.filter{
flex:1;
}
.drawer-container{
height:100%;
display:flex;
flex-direction: column;
}
.el-form{
flex:1;
padding:15px 25px 0 0;
}
.drawer-footer{
padding:15px 0;
text-align:center;
}
</style>
\ No newline at end of file
...@@ -10,52 +10,65 @@ export default [ ...@@ -10,52 +10,65 @@ export default [
{ {
path: '/student', path: '/student',
component: Layout, component: Layout,
meta: { onlyShowOneChild: true }, meta: { onlyShowOneChild: true, permission: 'v1/student/list' },
children: [ children: [
{ {
path: '', path: '',
name: 'Student', name: 'Student',
component: () => import('@/pages/student/index'), component: () => import('@/pages/student/index'),
meta: { title: '学员管理', icon: '', permission: 'content-menu-advert-list' } meta: { title: '学员管理', icon: '', permission: 'v1/student/list' }
} }
] ]
}, },
{ {
path: '/course', path: '/course',
component: Layout, component: Layout,
meta: { onlyShowOneChild: true }, meta: { onlyShowOneChild: true, permission: 'v1/course/list' },
children: [ children: [
{ {
path: '', path: '',
name: 'Course', name: 'Course',
component: () => import('@/pages/course/index'), component: () => import('@/pages/course/index'),
meta: { title: '课程管理', icon: '', permission: 'content-menu-advert-list' } meta: { title: '课程管理', icon: '', permission: 'v1/course/list' }
} }
] ]
}, },
{ {
path: '/project', path: '/project',
component: Layout, component: Layout,
meta: { onlyShowOneChild: true }, meta: { onlyShowOneChild: true, permission: 'v1/project/list' },
children: [ children: [
{ {
path: '', path: '',
name: 'Project', name: 'Project',
component: () => import('@/pages/project/index'), component: () => import('@/pages/project/index'),
meta: { title: '项目管理', icon: '', permission: 'content-menu-advert-list' } meta: { title: '项目管理', icon: '', permission: 'v1/project/list' }
} }
] ]
}, },
{ {
path: '/role', path: '/role',
component: Layout, component: Layout,
meta: { onlyShowOneChild: true }, meta: { onlyShowOneChild: true, permission: 'management/role/index' },
children: [ children: [
{ {
path: '', path: '',
name: 'Role', name: 'Role',
component: () => import('@/pages/role/index'), component: () => import('@/pages/role/index'),
meta: { title: '权限管理', icon: '', permission: 'content-menu-advert-list' } meta: { title: '权限管理', icon: '', permission: 'management/role/index' }
}
]
},
{
path: '/user',
component: Layout,
meta: { onlyShowOneChild: true, permission: 'management/assignment/index' },
children: [
{
path: '',
name: 'User',
component: () => import('@/pages/user/index'),
meta: { title: '授权管理', icon: '', permission: 'management/assignment/index' }
} }
] ]
}, },
......
...@@ -3,7 +3,6 @@ const getters = { ...@@ -3,7 +3,6 @@ const getters = {
roles: state => state.user.roles, roles: state => state.user.roles,
sidebar: state => state.app.sidebar, sidebar: state => state.app.sidebar,
permission_routes: state => state.permission.routes, permission_routes: state => state.permission.routes,
projects: state => state.user.projects,
permissions: state => state.user.permissions permissions: state => state.user.permissions
} }
export default getters export default getters
import Cookies from 'js-cookie' import Cookies from 'js-cookie'
import { getProjectContentTypeList } from '@/api/contentManage'
const state = { const state = {
sidebar: { sidebar: {
...@@ -18,22 +17,12 @@ const mutations = { ...@@ -18,22 +17,12 @@ const mutations = {
} else { } else {
Cookies.set('sidebarStatus', 0) Cookies.set('sidebarStatus', 0)
} }
},
SET_TYPELIST: (state, list) => {
console.log(list)
state.typeList = list
} }
} }
const actions = { const actions = {
toggleSideBar({ commit }) { toggleSideBar({ commit }) {
commit('TOGGLE_SIDEBAR') commit('TOGGLE_SIDEBAR')
},
getTypeList({ commit }, type, id) {
getProjectContentTypeList(type, id).then(res => {
const data = res.data
commit('SET_TYPELIST', data)
})
} }
} }
......
import { getUser, logout } from '@/api/account' import { getUser, logout, getUserPermissions } from '@/api/common'
import { getUserRolesPermissions } from '@/api/system'
import router, { resetRouter } from '@/router' import router, { resetRouter } from '@/router'
const user = { const user = {
state: { state: {
...@@ -63,38 +62,22 @@ const user = { ...@@ -63,38 +62,22 @@ const user = {
}, },
// 检测角色权限 // 检测角色权限
async checkRolesPermissions({ commit }) { async checkRolesPermissions({ commit }) {
const obj = await getUserRolesPermissions().then(res => { const obj = await getUserPermissions().then(res => {
if (res.code === 0) { if (res.code === 0) {
const data = res.data const data = res.data
let roles = []
let permissions = [] let permissions = []
let projects = []
if (data.roles && Array.isArray(data.roles)) {
roles = data.roles
}
commit('setRoles', roles)
if (data.permissions && Array.isArray(data.permissions)) { if (data.permissions && Array.isArray(data.permissions)) {
permissions = data.permissions permissions = data.permissions
} }
commit('setPermissions', permissions) commit('setPermissions', permissions)
if (data.projects && Array.isArray(data.projects)) {
projects = data.projects
commit('setProjects', projects)
} else {
commit('setProjects', [])
}
return { return {
roles, permissions
permissions,
projects
} }
} else { } else {
return {} return {}
} }
}).catch(() => { }).catch(() => {
commit('setRoles', null)
commit('setPermissions', null) commit('setPermissions', null)
commit('setProjects', [])
return {} return {}
}) })
return obj return obj
......
...@@ -6,7 +6,7 @@ import { getNonce } from '@/utils/utils' ...@@ -6,7 +6,7 @@ import { getNonce } from '@/utils/utils'
const httpRequest = axios.create({ const httpRequest = axios.create({
timeout: 60000, timeout: 60000,
withCredentials: true, withCredentials: true,
headers: { 'Content-Type': 'application/json', apikey: 'McS1WsnMwMhsfc7cJ7Y0' } headers: { 'Content-Type': 'application/x-www-form-urlencoded', apikey: 'McS1WsnMwMhsfc7cJ7Y0' }
}) })
// 请求拦截 // 请求拦截
...@@ -22,6 +22,7 @@ httpRequest.interceptors.request.use( ...@@ -22,6 +22,7 @@ httpRequest.interceptors.request.use(
// Object.keys(defaultParams).forEach(key => { // Object.keys(defaultParams).forEach(key => {
// params.append(key, defaultParams[key]) // params.append(key, defaultParams[key])
// }) // })
console.log(config)
} else { } else {
params = Object.assign({}, defaultParams, params) params = Object.assign({}, defaultParams, params)
if (['post', 'put', 'delete'].includes(config.method)) { if (['post', 'put', 'delete'].includes(config.method)) {
...@@ -50,7 +51,7 @@ httpRequest.interceptors.response.use( ...@@ -50,7 +51,7 @@ httpRequest.interceptors.response.use(
return Promise.reject(data) return Promise.reject(data)
} }
if (data.code === 403) { if (data.code === 403) {
window.location.href = `${webConf.others.loginUrl}?rd=${encodeURIComponent(window.location.href)}` // window.location.href = `${webConf.others.loginUrl}?rd=${encodeURIComponent(window.location.href)}`
} }
return data return data
}, },
...@@ -59,7 +60,7 @@ httpRequest.interceptors.response.use( ...@@ -59,7 +60,7 @@ httpRequest.interceptors.response.use(
const { status, message, code } = error.response.data const { status, message, code } = error.response.data
// 未登录 // 未登录
if (status === 403) { if (status === 403) {
window.location.href = `${webConf.others.loginUrl}?rd=${encodeURIComponent(window.location.href)}` // window.location.href = `${webConf.others.loginUrl}?rd=${encodeURIComponent(window.location.href)}`
} else if (status === 400 && code === 401) { } else if (status === 400 && code === 401) {
// router.push('/role') // router.push('/role')
} else { } else {
......
...@@ -17,6 +17,7 @@ export default class BeforeEnter { ...@@ -17,6 +17,7 @@ export default class BeforeEnter {
if (to.path.includes('error-page')) { if (to.path.includes('error-page')) {
next() next()
} else { } else {
console.log(to)
if (!permissions.includes(to.meta.permission)) { if (!permissions.includes(to.meta.permission)) {
router.push('/error-page/401') router.push('/error-page/401')
} }
......
...@@ -76,3 +76,32 @@ export function dateFormat(time, cFormat) { ...@@ -76,3 +76,32 @@ export function dateFormat(time, cFormat) {
}) })
return timeStr return timeStr
} }
/**
* 文件下载
* @param {string} fileUrl 文件下载地址
* @param {string} fileName 文件名
* @returns {null}
*/
export function funDownload(fileUrl, fileName) {
// console.log(fileUrl)
const elink = document.createElement('a')// 创建一个a标签
elink.download = fileName;// 设置a标签的下载属性
elink.style.display = 'none';// 将a标签设置为隐藏
elink.href = fileUrl;// 把之前处理好的地址赋给a标签的href
document.body.appendChild(elink);// 将a标签添加到body中
elink.click();// 执行a标签的点击方法
// URL.revokeObjectURL(elink.href) // 下载完成释放URL 对象
document.body.removeChild(elink)// 移除a标签
}
/**
* 分割字符串,取得尾部
* @param {string} str 字符串
* @param {string} split 分割符
* @returns {string}
*/
export function splitStrLast(str, split) {
const fileNameArr = str.split(split)
const last = fileNameArr[fileNameArr.length - 1]
return last
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论