提交 01f6ed3e authored 作者: pengxiaohui's avatar pengxiaohui

设置模块调试接口

上级 764d0da6
...@@ -36,12 +36,48 @@ export function updateRole(data) { ...@@ -36,12 +36,48 @@ export function updateRole(data) {
export function deleteRole(data) { export function deleteRole(data) {
return httpRequest.delete(`/api/cms/admin/v1/role/${data.role_id}/delete`, data) return httpRequest.delete(`/api/cms/admin/v1/role/${data.role_id}/delete`, data)
} }
/* ------------------------------------员工管理------------------------------------ */ /* ------------------------------------员工管理------------------------------------ */
/** /**
* 获取员工列表 * 获取员工列表
*/ */
export function getStaffList(params) { export function getStaffList(params) {
return httpRequest.get('/api/cms/admin/v1/roles', { 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.type_id}/update`, data)
}
/* ------------------------------------项目管理------------------------------------ */
/**
* 获取项目列表
* @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.type_id}/update`, data)
} }
/* ------------------------------------类型管理------------------------------------ */ /* ------------------------------------类型管理------------------------------------ */
/** /**
...@@ -58,18 +94,8 @@ export function createType(data) { ...@@ -58,18 +94,8 @@ export function createType(data) {
return httpRequest.post('/api/cms/admin/v1/type/create', data) return httpRequest.post('/api/cms/admin/v1/type/create', data)
} }
/** /**
* 更新角色 * 更新类型
*/ */
export function updateType(data) { export function updateType(data) {
return httpRequest.put(`/api/cms/admin/v1/type/${data.type_id}/update`, data) return httpRequest.put(`/api/cms/admin/v1/type/${data.type_id}/update`, data)
} }
/**
* 获取项目列表
* @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 })
}
...@@ -35,8 +35,8 @@ ...@@ -35,8 +35,8 @@
<div class="table-list-hd-aside"><slot name="header-aside" /></div> <div class="table-list-hd-aside"><slot name="header-aside" /></div>
</div> </div>
<slot></slot> <slot></slot>
<div class="table-list-bd"> <div class="table-list-bd" :style="{height: bodyHeight}">
<el-table :data="dataList" size="mini" v-loading="loading" v-bind="$attrs" v-on="$listeners"> <el-table :data="dataList" size="mini" v-loading="loading" v-bind="$attrs" v-on="$listeners" height="calc(100% - 40px)">
<template v-for="item in columns"> <template v-for="item in columns">
<el-table-column v-bind="item" :key="item.prop"> <el-table-column v-bind="item" :key="item.prop">
<template v-slot:default="scope" v-if="item.slots"> <template v-slot:default="scope" v-if="item.slots">
...@@ -51,7 +51,7 @@ ...@@ -51,7 +51,7 @@
:page-sizes="[10, 20, 30, 50, 100]" :page-sizes="[10, 20, 30, 50, 100]"
:page-size="page.size" :page-size="page.size"
:total="page.total" :total="page.total"
:hide-on-single-page="true" :hide-on-single-page="false"
@size-change="pageSizeChange" @size-change="pageSizeChange"
@current-change="fetchList" @current-change="fetchList"
v-if="hasPagination" v-if="hasPagination"
...@@ -69,6 +69,8 @@ export default { ...@@ -69,6 +69,8 @@ export default {
remote: { type: Object, default: () => ({}) }, remote: { type: Object, default: () => ({}) },
// 筛选 // 筛选
filters: { type: Array, default: () => [] }, filters: { type: Array, default: () => [] },
// 列表是否有多选
tableSelection: { type: Boolean, default: false },
// 列表项 // 列表项
columns: { type: Array, default: () => [] }, columns: { type: Array, default: () => [] },
// 列表数据 // 列表数据
...@@ -76,7 +78,8 @@ export default { ...@@ -76,7 +78,8 @@ export default {
// 是否含有翻页 // 是否含有翻页
hasPagination: { type: Boolean, default: true }, hasPagination: { type: Boolean, default: true },
// 每页多少条数据 // 每页多少条数据
limit: { type: Number, default: 20 } limit: { type: Number, default: 20 },
bodyHeight: { type: String, default: '100%' }
}, },
data() { data() {
return { return {
...@@ -172,6 +175,7 @@ export default { ...@@ -172,6 +175,7 @@ export default {
<style lang="scss"> <style lang="scss">
.table-list { .table-list {
padding: 10px; padding: 10px;
height:calc(100% - 20px)
} }
.table-list-hd { .table-list-hd {
display: flex; display: flex;
...@@ -179,8 +183,11 @@ export default { ...@@ -179,8 +183,11 @@ export default {
.table-list-filter { .table-list-filter {
flex: 1; flex: 1;
} }
// .table-list-bd {
// height:calc(100% - 50px)
// }
.table-list-pagination { .table-list-pagination {
padding: 20px 0; padding: 10px 0;
text-align: right; text-align: right;
} }
</style> </style>
<template> <template>
<div class="project page_container"> <div class="project page_container">
<table-list v-bind="tableOptions" ref="tabList"> <table-list v-bind="tableOptions" ref="tabList" @selection-change="selectionChange">
<template #header-aside> <template #header-aside>
<el-button type="primary" size="mini" @click="handleCreate">新建项目</el-button> <el-button type="primary" size="mini" @click="handleCreate">新建项目</el-button>
</template> </template>
...@@ -23,16 +23,16 @@ ...@@ -23,16 +23,16 @@
<el-form-item label="项目名称" prop="name"> <el-form-item label="项目名称" prop="name">
<el-input v-model="form.name" size="small"></el-input> <el-input v-model="form.name" size="small"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="项目简称" prop="abbr"> <el-form-item label="项目简称" prop="short_name">
<el-input v-model="form.abbr" size="small"></el-input> <el-input v-model="form.short_name" size="small"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="项目类型" prop="type"> <el-form-item label="项目类型" prop="type_id">
<el-select v-model="form.type" placeholder="请选择项目类型" size="small" style="width:100%;"> <el-select v-model="form.type_id" placeholder="请选择项目类型" size="small" style="width:100%;">
<el-option :label="item.label" :value="item.id" v-for="item in projectTypeList" :key="item.id" /> <el-option :label="item.label" :value="item.id" v-for="item in projectTypeList" :key="item.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="项目网址" prop="website"> <el-form-item label="项目网址" prop="project_uri">
<el-input v-model="form.website" size="small"></el-input> <el-input v-model="form.project_uri" size="small"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="广告类型" style="margin-bottom:0;"> <el-form-item label="广告类型" style="margin-bottom:0;">
<el-checkbox :indeterminate="adType.isIndeterminate" v-model="adType.checkAll" @change="val => handleCheckAllChange(val, 'adType')">全选</el-checkbox> <el-checkbox :indeterminate="adType.isIndeterminate" v-model="adType.checkAll" @change="val => handleCheckAllChange(val, 'adType')">全选</el-checkbox>
...@@ -45,14 +45,14 @@ ...@@ -45,14 +45,14 @@
<el-checkbox :indeterminate="articleType.isIndeterminate" v-model="articleType.checkAll" @change="val => handleCheckAllChange(val, 'articleType')">全选</el-checkbox> <el-checkbox :indeterminate="articleType.isIndeterminate" v-model="articleType.checkAll" @change="val => handleCheckAllChange(val, 'articleType')">全选</el-checkbox>
<div style="margin: 2px 0;"></div> <div style="margin: 2px 0;"></div>
<el-checkbox-group v-model="form.articleType" @change="val => handleCheckedChange(val, 'articleType')"> <el-checkbox-group v-model="form.articleType" @change="val => handleCheckedChange(val, 'articleType')">
<el-checkbox v-for="item in typeList" :label="item.id" :key="item.id">{{item.name}}</el-checkbox> <el-checkbox v-for="item in articleTypeList" :label="item.id" :key="item.id">{{item.name}}</el-checkbox>
</el-checkbox-group> </el-checkbox-group>
</el-form-item> </el-form-item>
<el-form-item label="图文类型" style="margin-bottom:0;"> <el-form-item label="图文类型" style="margin-bottom:0;">
<el-checkbox :indeterminate="imageTextType.isIndeterminate" v-model="imageTextType.checkAll" @change="val => handleCheckAllChange(val, 'imageTextType')">全选</el-checkbox> <el-checkbox :indeterminate="imageTextType.isIndeterminate" v-model="imageTextType.checkAll" @change="val => handleCheckAllChange(val, 'imageTextType')">全选</el-checkbox>
<div style="margin: 2px 0;"></div> <div style="margin: 2px 0;"></div>
<el-checkbox-group v-model="form.imageTextType" @change="val => handleCheckedChange(val, 'imageTextType')"> <el-checkbox-group v-model="form.imageTextType" @change="val => handleCheckedChange(val, 'imageTextType')">
<el-checkbox v-for="item in typeList" :label="item.id" :key="item.id">{{item.name}}</el-checkbox> <el-checkbox v-for="item in imageTextTypeList" :label="item.id" :key="item.id">{{item.name}}</el-checkbox>
</el-checkbox-group> </el-checkbox-group>
</el-form-item> </el-form-item>
</el-form> </el-form>
...@@ -66,12 +66,12 @@ ...@@ -66,12 +66,12 @@
</template> </template>
<script> <script>
import TableList from '@/components/TableList' import TableList from '@/components/TableList'
import { getProjectList } from '@/api/settings' import { getProjectList, createProject } from '@/api/settings'
const defaultForm = { const defaultForm = {
name: '', name: '',
abbr: '', short_name: '',
type: '', type_id: '',
website: '', project_uri: '',
adType: [], adType: [],
articleType: [], articleType: [],
imageTextType: [] imageTextType: []
...@@ -98,14 +98,24 @@ export default { ...@@ -98,14 +98,24 @@ export default {
form: Object.assign({}, defaultForm), form: Object.assign({}, defaultForm),
rules: { rules: {
name: { required: true, message: '请输入项目名称', trigger: 'blur' }, name: { required: true, message: '请输入项目名称', trigger: 'blur' },
abbr: { required: true, message: '请输入项目简称', trigger: 'blur' }, short_name: { required: true, message: '请输入项目简称', trigger: 'blur' },
type: { required: true, message: '请输入项目类型', trigger: 'blur' }, type_id: { required: true, message: '请输入项目类型', trigger: 'blur' },
website: { required: true, message: '请输入项目网址', trigger: 'blur' } project_uri: { required: true, message: '请输入项目网址', trigger: 'blur' }
}, },
typeList: [ adTypeList: [
{ id: '111', name: 'banner广告' }, { id: '111', name: 'banner广告A' },
{ id: '122', name: '正文区广告' }, { id: '122', name: '正文区广告A' },
{ id: '1331', name: '侧边栏广告' } { id: '1331', name: '侧边栏广告a' }
],
articleTypeList: [
{ id: '111', name: 'banner广告b' },
{ id: '122', name: '正文区广告b' },
{ id: '1331', name: '侧边栏广告b' }
],
imageTextTypeList: [
{ id: '111', name: 'banner广告c' },
{ id: '122', name: '正文区广告c' },
{ id: '1331', name: '侧边栏广告c' }
], ],
adType: { adType: {
isIndeterminate: false, isIndeterminate: false,
...@@ -159,15 +169,17 @@ export default { ...@@ -159,15 +169,17 @@ export default {
} }
], ],
columns: [ columns: [
{ prop: 'id', label: '项目ID', slots: 'project_id' }, { prop: 'selection', label: '', type: 'selection', minWidth: '50px', fixed: 'left' },
{ prop: 'name', label: '项目名称' }, { prop: 'id', label: '项目ID', slots: 'project_id', minWidth: '160px', fixed: 'left' },
{ prop: 'short_name', label: '项目简称' }, { prop: 'name', label: '项目名称', minWidth: '150px', fixed: 'left' },
{ prop: 'type_id', label: '项目类型' }, { prop: 'short_name', label: '项目简称', minWidth: '150px' },
{ prop: 'project_uri', label: '项目网址' }, { prop: 'type.name', label: '项目类型', minWidth: '150px' },
{ prop: 'sso_user.nickname', label: '创建人' }, { prop: 'project_uri', label: '项目网址', minWidth: '150px' },
{ prop: 'created_at', label: '创建时间' }, { prop: 'sso_user.nickname', label: '创建人', minWidth: '150px' },
{ prop: 'status', label: '状态', slots: 'status' } { prop: 'created_at', label: '创建时间', minWidth: '150px' },
] { prop: 'status', label: '状态', slots: 'status', minWidth: '150px', fixed: 'right' }
],
bodyHeight: 'calc(100% - 50px)'
} }
} }
}, },
...@@ -202,6 +214,22 @@ export default { ...@@ -202,6 +214,22 @@ export default {
return false return false
} }
}) })
},
selectionChange(val) {
console.log(val)
},
fetchCreateProject() {
const data = {
name: this.form.role_name
}
createProject(data).then((res) => {
if (res.code === 0 && res.message === 'SUCCESS') {
this.fetchRoleList()
this.$message.success('创建角色成功')
} else {
this.$message.error('创建角色失败')
}
})
} }
} }
} }
......
...@@ -365,4 +365,16 @@ export default { ...@@ -365,4 +365,16 @@ export default {
.sub-title{ .sub-title{
font-size:16px; font-size:16px;
} }
.el-tabs{
height:100%;
}
.el-tabs ::v-deep.el-tabs__content{
height:calc(100% - 56px);
}
.el-tab-pane{
height:100%;
}
.table-list .table-list-bd{
height:100%;
}
</style> </style>
...@@ -209,7 +209,8 @@ export default { ...@@ -209,7 +209,8 @@ export default {
{ prop: 'status', label: '状态', slots: 'status' }, { prop: 'status', label: '状态', slots: 'status' },
{ prop: 'x', label: '操作', slots: 'tools' } { prop: 'x', label: '操作', slots: 'tools' }
], ],
data: [{ name: 'a', role: '超级管理员', phone: '123812312321', email: 'dsfdsxxx' }] data: [{ name: 'a', role: '超级管理员', phone: '123812312321', email: 'dsfdsxxx' }],
bodyHeight: 'calc(100% - 50px)'
} }
} }
}, },
......
<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" @tab-click="handleTabClick"> <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="projectTableOptions" ref="tabList"> <table-list v-bind="projectTableOptions" ref="tableList">
<!-- 项目Id --> <!-- 项目Id -->
<template v-slot:table-id="{ row }"><p class="details-handle" @click="handleDetails(row)">{{row.id}}</p></template> <template v-slot:table-id="{ row }"><p class="details-handle" @click="handleDetails(row)">{{row.id}}</p></template>
<!-- 创建人 --> <!-- 创建人 -->
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
</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="tableList">
<!-- 项目Id --> <!-- 项目Id -->
<template v-slot:table-id="{ row }"><p class="details-handle" @click="handleDetails(row)">{{row.id}}</p></template> <template v-slot:table-id="{ row }"><p class="details-handle" @click="handleDetails(row)">{{row.id}}</p></template>
<!-- 创建人 --> <!-- 创建人 -->
...@@ -80,12 +80,13 @@ export default { ...@@ -80,12 +80,13 @@ export default {
params: { type: 0 } params: { type: 0 }
}, },
columns: [ columns: [
{ prop: 'id', label: '项目类型ID', slots: 'table-id' }, { prop: 'selection', label: '', type: 'selection', minWidth: '50px' },
{ prop: 'name', label: '项目类型' }, { prop: 'id', label: '项目类型ID', slots: 'table-id', minWidth: '150px' },
{ prop: 'sso_user', label: '创建人', slots: 'table-creater' }, { prop: 'name', label: '项目类型', minWidth: '150px' },
{ prop: 'created_at', label: '创建时间' }, { prop: 'sso_user', label: '创建人', slots: 'table-creater', minWidth: '100px' },
{ prop: 'tag', label: '参数ID' }, { prop: 'created_at', label: '创建时间', minWidth: '150px' },
{ prop: 'status', label: '状态', slots: 'table-status' } { prop: 'tag', label: '参数ID', minWidth: '80px' },
{ prop: 'status', label: '状态', slots: 'table-status', minWidth: '150px' }
], ],
data: [] data: []
}, },
...@@ -96,15 +97,15 @@ export default { ...@@ -96,15 +97,15 @@ export default {
params: { type: 1 } params: { type: 1 }
}, },
columns: [ columns: [
{ prop: 'id', label: '内容ID', slots: 'table-id' }, { prop: 'selection', label: '', type: 'selection', minWidth: '50px' },
{ prop: 'name', label: '类型名称' }, { prop: 'id', label: '内容ID', slots: 'table-id', minWidth: '150px' },
{ prop: 'category', label: '内容类型', slots: 'table-category' }, { prop: 'name', label: '类型名称', minWidth: '150px' },
{ prop: 'category', label: '内容类型', slots: 'table-category', minWidth: '80px' },
{ prop: 'sso_user', label: '创建人', slots: 'table-creater' }, { prop: 'sso_user', label: '创建人', slots: 'table-creater' },
{ prop: 'created_at', label: '创建时间' }, { prop: 'created_at', label: '创建时间', minWidth: '150px' },
{ prop: 'tag', label: '参数ID' }, { prop: 'tag', label: '参数ID', minWidth: '100px' },
{ prop: 'status', label: '状态', slots: 'table-status' } { prop: 'status', label: '状态', slots: 'table-status', minWidth: '150px' }
], ]
data: []
}, },
contentTypeList: [ contentTypeList: [
{ id: 1, name: '文章' }, { id: 1, name: '文章' },
...@@ -139,12 +140,12 @@ export default { ...@@ -139,12 +140,12 @@ export default {
} }
}, },
created() { created() {
this.fetchTypeList() // this.fetchTypeList()
}, },
methods: { methods: {
handleTabClick() { // handleTabClick() {
this.fetchTypeList() // this.fetchTypeList()
}, // },
handleCreate() { handleCreate() {
this.dialogType = 'create' this.dialogType = 'create'
this.dialogVisible = true this.dialogVisible = true
...@@ -192,10 +193,10 @@ export default { ...@@ -192,10 +193,10 @@ export default {
params.type = this.activeName === '0' ? 0 : 1 params.type = this.activeName === '0' ? 0 : 1
createType(params).then((res) => { createType(params).then((res) => {
if (res.code === 0 && res.data && res.data.id) { if (res.code === 0 && res.data && res.data.id) {
this.fetchTypeList() this.$refs.tableList.refetch()
this.$message.success('新建类型成功') this.$message.success('新建类型成功')
} else { } else {
this.$message.error('新建类型失败') this.$message.error(res.message || '新建类型失败')
} }
}).catch(() => { }).catch(() => {
this.$message.error('新建类型失败') this.$message.error('新建类型失败')
...@@ -205,28 +206,14 @@ export default { ...@@ -205,28 +206,14 @@ export default {
const msg = type === 'status' ? '更改状态' : '更改类型名称' const msg = type === 'status' ? '更改状态' : '更改类型名称'
updateType(data).then((res) => { updateType(data).then((res) => {
if (res.code === 0 && res.data && res.data.status) { if (res.code === 0 && res.data && res.data.status) {
this.fetchTypeList()
this.$message.success(msg + '成功') this.$message.success(msg + '成功')
this.$refs.tableList.refetch()
} else { } else {
this.$message.error(msg + '失败') this.$message.error(res.message || msg + '失败')
} }
}).catch(() => { }).catch(() => {
this.$message.error(msg + '失败') 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
}
})
} }
} }
} }
...@@ -243,4 +230,16 @@ export default { ...@@ -243,4 +230,16 @@ export default {
top:16px; top:16px;
z-index:1; z-index:1;
} }
.el-tabs{
height:100%;
}
.el-tabs ::v-deep.el-tabs__content{
height:calc(100% - 56px);
}
.el-tab-pane{
height:100%;
}
.table-list .table-list-bd{
height:100%;
}
</style> </style>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论