提交 12e84639 authored 作者: pengxiaohui's avatar pengxiaohui

接入高级设置和类型管理接口

上级 3f8ede6a
import httpRequest from '@/utils/axios' import httpRequest from '@/utils/axios'
/* ------------------------------------高级设置------------------------------------ */
/** /**
* 获取角色列表 * 获取角色列表
*/ */
export function getRoleList(params) { export function getRoleList(params) {
return httpRequest.get('/api/cms/admin/v1/roles', { 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/roles', { params })
}
/* ------------------------------------类型管理------------------------------------ */
/**
* 获取类型列表
*/
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)
} }
\ No newline at end of file
...@@ -93,7 +93,6 @@ export default { ...@@ -93,7 +93,6 @@ export default {
watch: { watch: {
$route: { $route: {
handler: function(nv) { handler: function(nv) {
console.log(nv)
if (nv && nv.path) this.defaultActive = nv.path if (nv && nv.path) this.defaultActive = nv.path
else this.defaultActive = '' else this.defaultActive = ''
}, },
......
...@@ -52,7 +52,6 @@ export default { ...@@ -52,7 +52,6 @@ export default {
}, },
async logout() { async logout() {
await this.$store.dispatch('logout') await this.$store.dispatch('logout')
// console.log(this.$route.fullPath)
this.$router.push(this.$route.fullPath) this.$router.push(this.$route.fullPath)
} }
} }
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<el-tabs v-model="activeName" type="card"> <el-tabs v-model="activeName" type="card">
<el-tab-pane label="角色权限" name="0" lazy> <el-tab-pane label="角色权限" name="0" lazy>
<table-list v-bind="tableOptions" ref="tabList"> <table-list v-bind="tableOptions" ref="tabList">
<template v-slot:table-role-name="{ row }"><span class="color-blue">{{row.role_name}}</span></template> <template v-slot:table-role-name="{ row }"><span class="color-blue">{{row.name}}</span></template>
<!-- 操作 --> <!-- 操作 -->
<template v-slot:table-operate="{ row }"> <template v-slot:table-operate="{ row }">
<el-button type="text" @click="handleEdit(row)" size="mini">编辑名称</el-button> <el-button type="text" @click="handleEdit(row)" size="mini">编辑名称</el-button>
...@@ -45,8 +45,7 @@ ...@@ -45,8 +45,7 @@
</template> </template>
<script> <script>
import TableList from '@/components/TableList' import TableList from '@/components/TableList'
import { permissionList } from './permission' import { getRoleList, getPermissionList, createRole, deleteRole, updateRole } from '@/api/settings.js'
import { getRoleList } from '@/api/settings.js'
function recursionData(arr) { function recursionData(arr) {
const leafArr = [] const leafArr = []
function recursion(target) { function recursion(target) {
...@@ -57,6 +56,7 @@ function recursionData(arr) { ...@@ -57,6 +56,7 @@ function recursionData(arr) {
} else if (Array.isArray(target.children)) { } else if (Array.isArray(target.children)) {
list = target.children list = target.children
} }
list.reverse()
list.filter(item => { list.filter(item => {
if (Array.isArray(item.children) && item.children.length > 0) { if (Array.isArray(item.children) && item.children.length > 0) {
const _prop = item.tag.replace(/-/g, '_') const _prop = item.tag.replace(/-/g, '_')
...@@ -88,7 +88,7 @@ export default { ...@@ -88,7 +88,7 @@ export default {
params: {} params: {}
}, },
columns: [ columns: [
{ prop: 'role_name', label: '角色名称', slots: 'table-role-name' }, { prop: 'name', label: '角色名称', slots: 'table-role-name' },
{ prop: 'role_owner', label: '角色拥有人' }, { prop: 'role_owner', label: '角色拥有人' },
{ prop: 'operate', label: '操作', slots: 'table-operate' } { prop: 'operate', label: '操作', slots: 'table-operate' }
], ],
...@@ -190,7 +190,7 @@ export default { ...@@ -190,7 +190,7 @@ export default {
this.selectedTableItem = val this.selectedTableItem = val
this.dialogVisible = true this.dialogVisible = true
this.dialogType = 'permission' this.dialogType = 'permission'
this.reviewPermission(val.permission) this.reviewPermission(val.permission_tags)
}, },
reviewPermission(permissions) { reviewPermission(permissions) {
// const permissionData = [] // const permissionData = []
...@@ -200,6 +200,7 @@ export default { ...@@ -200,6 +200,7 @@ export default {
targetArr.push(item.tag) targetArr.push(item.tag)
} }
}) })
this.checkAll = this.isCheckAll
}, },
handleCheckAllChange(val) { handleCheckAllChange(val) {
if (val) { if (val) {
...@@ -230,7 +231,21 @@ export default { ...@@ -230,7 +231,21 @@ export default {
handleDialogSubmit() { handleDialogSubmit() {
this.$refs.dialogForm.validate(valid => { this.$refs.dialogForm.validate(valid => {
if (valid) { if (valid) {
console.log('dialogForm') switch (this.dialogType) {
case 'create':
this.fetchCreateRole()
break
case 'delete':
this.fetchDeleteRole()
break
case 'edit':
this.fetchUpdateRole()
break
case 'permission':
this.fetchUpdateRolePermissions()
break
}
this.dialogVisible = false
} else { } else {
return false return false
} }
...@@ -242,23 +257,99 @@ export default { ...@@ -242,23 +257,99 @@ export default {
limit: 20 limit: 20
} }
getRoleList(params).then((res) => { getRoleList(params).then((res) => {
console.log(res) if (res.code === 0 && res.data && Array.isArray(res.data.data)) {
// console.log(res.data.data)
this.tableOptions.data = res.data.data
}
})
},
fetchCreateRole() {
const data = {
name: this.form.role_name
}
createRole(data).then((res) => {
if (res.code === 0 && res.message === 'SUCCESS') {
this.fetchRoleList()
this.$message.success('创建角色成功')
} else {
this.$message.error('创建角色失败')
}
})
},
fetchUpdateRole() {
const data = {
role_id: this.selectedTableItem.id,
name: this.form.role_name
}
updateRole(data).then((res) => {
if (res.code === 0 && res.data && res.data.status) {
this.fetchRoleList()
this.$message.success('编辑角色名称成功')
} else {
this.$message.error('编辑角色名称失败')
}
})
},
fetchDeleteRole() {
const data = {
role_id: this.selectedTableItem.id
}
deleteRole(data).then((res) => {
if (res.code === 0 && res.data && res.data.status) {
this.fetchRoleList()
this.$message.success('删除角色成功')
} else {
this.$message.error('删除角色失败')
}
})
},
fetchUpdateRolePermissions() {
const permissionArr = []
Object.keys(this.form).forEach(key => {
const item = this.form[key]
if (Array.isArray(item)) {
item.forEach((it) => {
permissionArr.push(it)
})
}
})
const data = {
role_id: this.selectedTableItem.id,
permission_tags: permissionArr
}
updateRole(data).then((res) => {
if (res.code === 0 && res.data && res.data.status) {
this.fetchRoleList()
this.$message.success('权限配置成功')
} else {
this.$message.error('权限配置失败')
}
}) })
}, },
fetchPermissionList() { async fetchPermissionList() {
const result = permissionList const result = await new Promise((resolve, reject) => {
const leafNodeList = recursionData(result) getPermissionList().then((res) => {
this.permissionLeafCount = leafNodeList.length if (res.code === 0 && Array.isArray(res.data)) {
this.permissionLeafList = leafNodeList resolve(res.data)
console.log(leafNodeList) } else reject()
result.forEach(item => { }).catch(() => {
item.children.forEach(subItem => { reject()
const key = subItem.v_model_key
permissionForm[key] = []
}) })
}) })
this.permissionList = result if (result) {
this.assignForm() const leafNodeList = recursionData(result)
this.permissionLeafCount = leafNodeList.length
this.permissionLeafList = leafNodeList
// console.log(leafNodeList)
result.forEach(item => {
item.children.forEach(subItem => {
const key = subItem.v_model_key
permissionForm[key] = []
})
})
this.permissionList = result
this.assignForm()
}
} }
} }
} }
......
<template> <template>
<div class="type page_container"> <div class="type page_container">
<el-button class="btn-create" type="primary" @click="handleCreate" size="small">新建类型</el-button> <el-button class="btn-create" type="primary" @click="handleCreate" size="small">新建类型</el-button>
<el-tabs v-model="activeName" type="card"> <el-tabs v-model="activeName" type="card" @tab-click="handleTabClick">
<el-tab-pane label="项目类型" name="0" lazy> <el-tab-pane label="项目类型" name="0" lazy>
<table-list v-bind="projectTableOptions" ref="tabList"> <table-list v-bind="projectTableOptions" ref="tabList">
<!-- 项目Id --> <!-- 项目Id -->
<template v-slot:table-id="{ row }"><span class="details-handle" @click="handleDetails(row)">{{row.id}}</span></template> <template v-slot:table-id="{ row }"><p class="details-handle" @click="handleDetails(row)">{{row.id}}</p></template>
<!-- 创建人 -->
<template v-slot:table-creater="{ row }"><p>{{row.sso_user.realname || row.sso_user.nickname}}</p></template>
<!-- 状态 --> <!-- 状态 -->
<template v-slot:table-status="{ row }"> <template v-slot:table-status="{ row }">
<el-switch v-model="row.status" :active-value="1" :inactive-value="0" active-text="启用" inactive-text="停用"></el-switch> <el-switch v-model="row.status" :active-value="1" :inactive-value="0" active-text="启用" inactive-text="停用" @change="statusChange(row)"></el-switch>
</template> </template>
</table-list> </table-list>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="内容类型" name="1" lazy> <el-tab-pane label="内容类型" name="1" lazy>
<table-list v-bind="contentTableOptions" ref="tabList"> <table-list v-bind="contentTableOptions" ref="tabList">
<!-- 项目Id --> <!-- 项目Id -->
<template v-slot:table-id="{ row }"><span class="details-handle" @click="handleDetails(row)">{{row.id}}</span></template> <template v-slot:table-id="{ row }"><p class="details-handle" @click="handleDetails(row)">{{row.id}}</p></template>
<!-- 创建人 -->
<template v-slot:table-creater="{ row }"><p>{{row.sso_user.realname || row.sso_user.nickname}}</p></template>
<!-- 创建人 -->
<template v-slot:table-category="{ row }"><p>{{row.category | categoryFilter}}</p></template>
<!-- 状态 --> <!-- 状态 -->
<template v-slot:table-status="{ row }"> <template v-slot:table-status="{ row }">
<el-switch v-model="row.status" :active-value="1" :inactive-value="0" active-text="启用" inactive-text="停用"></el-switch> <el-switch v-model="row.status" :active-value="1" :inactive-value="0" active-text="启用" inactive-text="停用" @change="statusChange(row)"></el-switch>
</template> </template>
</table-list> </table-list>
</el-tab-pane> </el-tab-pane>
...@@ -26,21 +32,24 @@ ...@@ -26,21 +32,24 @@
<el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="440px" @close="handleDialogClose" :destroy-on-close="true"> <el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="440px" @close="handleDialogClose" :destroy-on-close="true">
<el-form :model="form" label-width="110px" ref="dialogForm" class="dialog-form"> <el-form :model="form" label-width="110px" ref="dialogForm" class="dialog-form">
<template v-if="activeName === '0'"> <template v-if="activeName === '0'">
<el-form-item label="项目类型名称" prop="project_type_name" :rules="{ required: true, message: '请输入项目类型名称', trigger: 'blur' }"> <el-form-item label="项目类型名称" prop="name" :rules="{ required: true, message: '请输入项目类型名称', trigger: 'blur' }">
<el-input v-model="form.project_type_name" size="small"></el-input> <el-input v-model="form.name" size="small"></el-input>
</el-form-item>
<el-form-item v-if="dialogType === 'create'" label="参数ID为:" prop="tag" :rules="{ required: true, message: '请输入参数ID', trigger: 'blur' }">
<el-input v-model="form.tag" size="small"></el-input>
</el-form-item> </el-form-item>
</template> </template>
<template v-else> <template v-else>
<el-form-item label="内容类型为:" prop="content_type" :rules="[{ required: true, message: '请选择手机号', trigger: 'change' }]"> <el-form-item label="内容类型为:" prop="category" :rules="[{ required: true, message: '请选择手机号', trigger: 'change' }]">
<el-select v-model="form.content_type" placeholder="请选择角色" size="small" style="width:100%;"> <el-select v-model="form.category" placeholder="请选择类型" size="small" style="width:100%;">
<el-option :label="item.name" :value="item.id" v-for="item in contentTypeList" :key="item.id" ></el-option> <el-option :label="item.name" :value="item.id" v-for="item in contentTypeList" :key="item.id" ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="参数ID为:" prop="query_id" :rules="{ required: true, message: '请输入参数ID', trigger: 'blur' }"> <el-form-item v-if="dialogType === 'create'" label="参数ID为:" prop="tag" :rules="{ required: true, message: '请输入参数ID', trigger: 'blur' }">
<el-input v-model="form.query_id" size="small"></el-input> <el-input v-model="form.tag" size="small"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="类型名称为:" prop="content_type_name" :rules="{ required: true, message: '请输入类型名称', trigger: 'blur' }"> <el-form-item label="类型名称为:" prop="name" :rules="{ required: true, message: '请输入类型名称', trigger: 'blur' }">
<el-input v-model="form.content_type_name" size="small"></el-input> <el-input v-model="form.name" size="small"></el-input>
</el-form-item> </el-form-item>
</template> </template>
</el-form> </el-form>
...@@ -53,11 +62,11 @@ ...@@ -53,11 +62,11 @@
</template> </template>
<script> <script>
import TableList from '@/components/TableList' import TableList from '@/components/TableList'
import { getTypeList, createType, updateType } from '@/api/settings.js'
const defaultForm = { const defaultForm = {
project_type_name: '', name: '',
content_type: '', category: '',
query_id: '', tag: ''
content_type_name: ''
} }
export default { export default {
components: { TableList }, components: { TableList },
...@@ -71,14 +80,13 @@ export default { ...@@ -71,14 +80,13 @@ export default {
}, },
columns: [ columns: [
{ prop: 'id', label: '项目类型ID', slots: 'table-id' }, { prop: 'id', label: '项目类型ID', slots: 'table-id' },
{ prop: 'type', label: '项目类型' }, { prop: 'name', label: '项目类型' },
{ prop: 'author', label: '创建人' }, { prop: 'sso_user', label: '创建人', slots: 'table-creater' },
{ prop: 'create_time', label: '创建时间' }, { prop: 'created_at', label: '创建时间' },
{ prop: 'tag', label: '参数ID' },
{ prop: 'status', label: '状态', slots: 'table-status' } { prop: 'status', label: '状态', slots: 'table-status' }
], ],
data: [ data: []
{ id: '123', type: '学位教育', author: '张三', create_time: '2021-04-23 09:00:31', status: 1 }
]
}, },
// 内容类型 // 内容类型
contentTableOptions: { contentTableOptions: {
...@@ -87,25 +95,24 @@ export default { ...@@ -87,25 +95,24 @@ export default {
}, },
columns: [ columns: [
{ prop: 'id', label: '内容ID', slots: 'table-id' }, { prop: 'id', label: '内容ID', slots: 'table-id' },
{ prop: 'type_name', label: '类型名称' }, { prop: 'name', label: '类型名称' },
{ prop: 'type', label: '内容类型' }, { prop: 'category', label: '内容类型', slots: 'table-category' },
{ prop: 'author', label: '创建人' }, { prop: 'sso_user', label: '创建人', slots: 'table-creater' },
{ prop: 'create_time', label: '创建时间' }, { prop: 'created_at', label: '创建时间' },
{ prop: 'query_id', label: '参数ID' }, { prop: 'tag', label: '参数ID' },
{ prop: 'status', label: '状态', slots: 'table-status' } { prop: 'status', label: '状态', slots: 'table-status' }
], ],
data: [ data: []
{ id: '123', type_name: '最新动态', type: '文章', author: '张三', create_time: '2021-04-23 09:00:31', query_id: '33', status: 1 }
]
}, },
contentTypeList: [ contentTypeList: [
{ id: 0, name: '广告' },
{ id: 1, name: '文章' }, { id: 1, name: '文章' },
{ id: 2, name: '图文' } { id: 2, name: '广告' },
{ id: 3, name: '图文' }
], ],
dialogVisible: false, dialogVisible: false,
dialogType: '', dialogType: '',
form: Object.assign({}, defaultForm) form: Object.assign({}, defaultForm),
selectedId: ''
} }
}, },
computed: { computed: {
...@@ -115,20 +122,38 @@ export default { ...@@ -115,20 +122,38 @@ export default {
return text + '类型' return text + '类型'
} }
}, },
filters: {
categoryFilter(val) {
let text = '广告'
switch (val) {
case 1:
text = '文章'
break
case 3:
text = '图文'
break
}
return text
}
},
created() {
this.fetchTypeList()
},
methods: { methods: {
handleTabClick() {
this.fetchTypeList()
},
handleCreate() { handleCreate() {
this.dialogType = 'create' this.dialogType = 'create'
this.dialogVisible = true this.dialogVisible = true
}, },
handleDetails(val) { handleDetails(val) {
this.dialogType = 'details' this.dialogType = 'edit'
this.dialogVisible = true this.dialogVisible = true
const isProject = this.activeName === '0' this.selectedId = val.id
this.form = { this.form = {
project_type_name: isProject ? val.type : '', name: val.name,
content_type: isProject ? '' : val.type, category: val.category
query_id: isProject ? '' : val.query_id,
content_type_name: isProject ? '' : val.type_name
} }
}, },
handleDialogClose() { handleDialogClose() {
...@@ -138,10 +163,67 @@ export default { ...@@ -138,10 +163,67 @@ export default {
handleDialogSubmit() { handleDialogSubmit() {
this.$refs.dialogForm.validate(valid => { this.$refs.dialogForm.validate(valid => {
if (valid) { if (valid) {
console.log('dialogForm') if (this.dialogType === 'create') {
this.fetchCreateType()
} else {
const params = { ...this.form }
delete params.tag
params.type_id = this.selectedId
this.fetchUpdateType(params, 'name')
}
} else { } else {
return false return false
} }
this.handleDialogClose()
})
},
statusChange(val) {
// console.log(val)
this.fetchUpdateType({
type_id: val.id,
status: val.status
}, 'status')
},
fetchCreateType() {
const params = { ...this.form }
!params.category && (params.category = 0)
params.type = this.activeName === '0' ? 0 : 1
createType(params).then((res) => {
if (res.code === 0 && res.data && res.data.id) {
this.fetchTypeList()
this.$message.success('新建类型成功')
} else {
this.$message.error('新建类型失败')
}
}).catch(() => {
this.$message.error('新建类型失败')
})
},
fetchUpdateType(data, type) {
const msg = type === 'status' ? '更改状态' : '更改类型名称'
updateType(data).then((res) => {
if (res.code === 0 && res.data && res.data.status) {
this.fetchTypeList()
this.$message.success(msg + '成功')
} else {
this.$message.error(msg + '失败')
}
}).catch(() => {
this.$message.error(msg + '失败')
})
},
fetchTypeList() {
const params = {
type: this.activeName === '0' ? 0 : 1,
page: 1,
limit: 10
}
getTypeList(params).then((res) => {
if (res.code === 0 && res.data && Array.isArray(res.data.data)) {
const data = res.data.data
if (this.activeName === '0') this.projectTableOptions.data = data
else this.contentTableOptions.data = data
}
}) })
} }
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论