提交 d7dfabbf authored 作者: 王鹏飞's avatar 王鹏飞

update

上级 88ad610c
...@@ -56,7 +56,12 @@ export function createStaff(data) { ...@@ -56,7 +56,12 @@ export function createStaff(data) {
export function updateStaff(data) { export function updateStaff(data) {
return httpRequest.put(`/api/cms/admin/v1/user/${data.sso_id}/update`, data) return httpRequest.put(`/api/cms/admin/v1/user/${data.sso_id}/update`, data)
} }
/**
* 批量删除员工
*/
export function batchDeleteStaff(data) {
return httpRequest.put('/api/cms/admin/v1/user/batch-delete', data)
}
/* ------------------------------------项目管理------------------------------------ */ /* ------------------------------------项目管理------------------------------------ */
/** /**
* 获取项目列表 * 获取项目列表
...@@ -112,3 +117,9 @@ export function updateType(data) { ...@@ -112,3 +117,9 @@ export function updateType(data) {
export function getContentTypesList(params) { export function getContentTypesList(params) {
return httpRequest.get('/api/cms/admin/v1/type/content-types', { params }) return httpRequest.get('/api/cms/admin/v1/type/content-types', { params })
} }
/**
* 批量删除类型
*/
export function batchDeleteType(data) {
return httpRequest.put('/api/cms/admin/v1/type/batch-delete', data)
}
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
<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" style="height: 100%"> <el-table :data="dataList" size="mini" v-loading="loading" v-bind="$attrs" v-on="$listeners" style="height: 100%">
<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" v-if="visible(item)">
<template v-slot:default="scope" v-if="item.slots"> <template v-slot:default="scope" v-if="item.slots">
<slot :name="item.slots" v-bind="scope"></slot> <slot :name="item.slots" v-bind="scope"></slot>
</template> </template>
...@@ -165,6 +165,9 @@ export default { ...@@ -165,6 +165,9 @@ export default {
this.page.currentPage = 1 this.page.currentPage = 1
this.page.size = value this.page.size = value
this.fetchList() this.fetchList()
},
visible(item) {
return Object.prototype.hasOwnProperty.call(item, 'visible') ? item.visible : true
} }
}, },
beforeMount() { beforeMount() {
......
...@@ -148,7 +148,7 @@ export default { ...@@ -148,7 +148,7 @@ export default {
} }
], ],
columns: [ columns: [
{ type: 'selection' }, { type: 'selection', visible: this.hasDelete },
{ prop: 'image_url', label: '图片', slots: 'image' }, { prop: 'image_url', label: '图片', slots: 'image' },
{ prop: 'id', label: '广告ID', slots: 'table-id' }, { prop: 'id', label: '广告ID', slots: 'table-id' },
{ prop: 'title', label: '标题' }, { prop: 'title', label: '标题' },
......
...@@ -143,7 +143,7 @@ export default { ...@@ -143,7 +143,7 @@ export default {
} }
], ],
columns: [ columns: [
{ type: 'selection' }, { type: 'selection', visible: this.hasDelete },
{ prop: 'image_url', label: '图片', slots: 'image' }, { prop: 'image_url', label: '图片', slots: 'image' },
{ prop: 'id', label: '文章ID', slots: 'table-id' }, { prop: 'id', label: '文章ID', slots: 'table-id' },
{ prop: 'title', label: '标题' }, { prop: 'title', label: '标题' },
......
...@@ -131,7 +131,7 @@ export default { ...@@ -131,7 +131,7 @@ export default {
} }
], ],
columns: [ columns: [
{ type: 'selection' }, { type: 'selection', visible: this.hasDelete },
{ prop: 'image_url', label: '图片', slots: 'image' }, { prop: 'image_url', label: '图片', slots: 'image' },
{ prop: 'id', label: '图文ID', slots: 'table-id' }, { prop: 'id', label: '图文ID', slots: 'table-id' },
{ prop: 'title', label: '标题' }, { prop: 'title', label: '标题' },
......
...@@ -2,24 +2,47 @@ ...@@ -2,24 +2,47 @@
<div class="project page_container"> <div class="project page_container">
<table-list v-bind="tableOptions" ref="tabList" @selection-change="selectionChange"> <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" v-if="hasCreate">新建项目</el-button>
</template> </template>
<!-- 项目Id --> <!-- 项目Id -->
<template v-slot:project_id="scope"><span class="details-handle" @click="handleDetails(scope.row)">{{scope.row.id}}</span></template> <template v-slot:project_id="scope"
><span class="details-handle" @click="handleDetails(scope.row)">{{ scope.row.id }}</span></template
>
<!-- 状态 --> <!-- 状态 -->
<template v-slot:status="{ row }"> <template v-slot:status="{ row }">
<el-switch v-model="row.status" :active-value="1" :inactive-value="0" active-text="启用" inactive-text="停用" @change="statusChange(row)"></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-drawer ref="drawer" :visible.sync="drawerVisible" size="490px" @close="handleDrawerClose"> <el-drawer ref="drawer" :visible.sync="drawerVisible" size="490px" @close="handleDrawerClose">
<template slot="title"> <template slot="title">
<h5> <h5>
{{drawerTitle}} {{ drawerTitle }}
<el-button v-if="drawerType !== 'create'" type="primary" @click="drawerType = 'edit'" size="mini" style="float:right;margin-right:30px;">编辑</el-button> <el-button
v-if="drawerType !== 'create'"
type="primary"
@click="drawerType = 'edit'"
size="mini"
style="float: right; margin-right: 30px"
>编辑</el-button
>
</h5> </h5>
</template> </template>
<div class="drawer__content"> <div class="drawer__content">
<el-form :model="form" :rules="rules" ref="drawerForm" label-width="80px" class="drawer-form" :disabled="isDetails"> <el-form
:model="form"
:rules="rules"
ref="drawerForm"
label-width="80px"
class="drawer-form"
:disabled="isDetails"
>
<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>
...@@ -27,32 +50,49 @@ ...@@ -27,32 +50,49 @@
<el-input v-model="form.short_name" 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_id"> <el-form-item label="项目类型" prop="type_id">
<el-select v-model="form.type_id" placeholder="请选择项目类型" size="small" style="width:100%;"> <el-select v-model="form.type_id" placeholder="请选择项目类型" size="small" style="width: 100%">
<el-option :label="item.name" :value="item.id" v-for="item in projectTypeList" :key="item.id" /> <el-option :label="item.name" :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="project_uri"> <el-form-item label="项目网址" prop="project_uri">
<el-input v-model="form.project_uri" 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
<div style="margin: 2px 0;"></div> :indeterminate="adType.isIndeterminate"
v-model="adType.checkAll"
@change="val => handleCheckAllChange(val, 'adType')"
>全选</el-checkbox
>
<div style="margin: 2px 0"></div>
<el-checkbox-group v-model="form.adType" @change="val => handleCheckedChange(val, 'adType')"> <el-checkbox-group v-model="form.adType" @change="val => handleCheckedChange(val, 'adType')">
<el-checkbox v-for="item in adTypeList" :label="item.id" :key="item.id">{{item.name}}</el-checkbox> <el-checkbox v-for="item in adTypeList" :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="articleType.isIndeterminate" v-model="articleType.checkAll" @change="val => handleCheckAllChange(val, 'articleType')">全选</el-checkbox> <el-checkbox
<div style="margin: 2px 0;"></div> :indeterminate="articleType.isIndeterminate"
v-model="articleType.checkAll"
@change="val => handleCheckAllChange(val, 'articleType')"
>全选</el-checkbox
>
<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 articleTypeList" :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
<div style="margin: 2px 0;"></div> :indeterminate="imageTextType.isIndeterminate"
v-model="imageTextType.checkAll"
@change="val => handleCheckAllChange(val, 'imageTextType')"
>全选</el-checkbox
>
<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 imageTextTypeList" :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,7 +106,14 @@ ...@@ -66,7 +106,14 @@
</template> </template>
<script> <script>
import TableList from '@/components/TableList' import TableList from '@/components/TableList'
import { getProjectList, getTypeList, getContentTypesList, createProject, updateProject, deleteProject } from '@/api/settings' import {
getProjectList,
getTypeList,
getContentTypesList,
createProject,
updateProject,
deleteProject
} from '@/api/settings'
const defaultForm = { const defaultForm = {
name: '', name: '',
short_name: '', short_name: '',
...@@ -119,6 +166,18 @@ export default { ...@@ -119,6 +166,18 @@ export default {
} }
}, },
computed: { computed: {
// 权限列表
permissions() {
return this.$store.state.user.permissions
},
// 创建权限
hasCreate() {
return this.permissions.includes('setting-function-project-create')
},
// 删除权限
hasDelete() {
return this.permissions.includes('setting-function-project-delete')
},
isDetails() { isDetails() {
return this.drawerType === 'details' return this.drawerType === 'details'
}, },
...@@ -156,7 +215,7 @@ export default { ...@@ -156,7 +215,7 @@ export default {
} }
], ],
columns: [ columns: [
{ prop: 'selection', label: '', type: 'selection', minWidth: '50px', fixed: 'left' }, { type: 'selection', minWidth: '50px', fixed: 'left', visible: this.hasDelete },
{ prop: 'id', label: '项目ID', slots: 'project_id', minWidth: '160px', fixed: 'left' }, { prop: 'id', label: '项目ID', slots: 'project_id', minWidth: '160px', fixed: 'left' },
{ prop: 'name', label: '项目名称', minWidth: '150px', fixed: 'left' }, { prop: 'name', label: '项目名称', minWidth: '150px', fixed: 'left' },
{ prop: 'short_name', label: '项目简称', minWidth: '150px' }, { prop: 'short_name', label: '项目简称', minWidth: '150px' },
...@@ -195,13 +254,13 @@ export default { ...@@ -195,13 +254,13 @@ export default {
console.log(this.form) console.log(this.form)
}, },
handleCheckAllChange(val, target) { handleCheckAllChange(val, target) {
this.form[target] = val ? this[target + 'List'].map(item => item.id) : []; this.form[target] = val ? this[target + 'List'].map(item => item.id) : []
this[target].isIndeterminate = false; this[target].isIndeterminate = false
}, },
handleCheckedChange(val, target) { handleCheckedChange(val, target) {
const checkedCount = val.length; const checkedCount = val.length
this[target].checkAll = checkedCount === this[target + 'List'].length; this[target].checkAll = checkedCount === this[target + 'List'].length
this[target].isIndeterminate = checkedCount > 0 && checkedCount < this[target + 'List'].length; this[target].isIndeterminate = checkedCount > 0 && checkedCount < this[target + 'List'].length
}, },
handleDrawerClose() { handleDrawerClose() {
this.drawerVisible = false this.drawerVisible = false
...@@ -227,10 +286,13 @@ export default { ...@@ -227,10 +286,13 @@ export default {
this.tableSelections = val.map(item => item.id) this.tableSelections = val.map(item => item.id)
}, },
statusChange(val) { statusChange(val) {
this.fetchUpdateProject({ this.fetchUpdateProject(
{
project_id: val.id, project_id: val.id,
status: val.status status: val.status
}, 'status') },
'status'
)
}, },
getFormData() { getFormData() {
const form = this.form const form = this.form
...@@ -248,7 +310,7 @@ export default { ...@@ -248,7 +310,7 @@ export default {
}, },
fetchCreateProject() { fetchCreateProject() {
const data = this.getFormData() const data = this.getFormData()
createProject(data).then((res) => { createProject(data).then(res => {
if (res.code === 0 && res.message === 'SUCCESS') { if (res.code === 0 && res.message === 'SUCCESS') {
this.$message.success('新建项目成功') this.$message.success('新建项目成功')
this.$refs.tabList.refetch() this.$refs.tabList.refetch()
...@@ -259,7 +321,7 @@ export default { ...@@ -259,7 +321,7 @@ export default {
}, },
fetchUpdateProject(data, type) { fetchUpdateProject(data, type) {
const msg = type === 'status' ? '更改状态' : '更改项目' const msg = type === 'status' ? '更改状态' : '更改项目'
updateProject(data).then((res) => { updateProject(data).then(res => {
if (res.code === 0 && res.message === 'SUCCESS') { if (res.code === 0 && res.message === 'SUCCESS') {
this.$message.success(msg + '成功') this.$message.success(msg + '成功')
this.$refs.tabList.refetch() this.$refs.tabList.refetch()
...@@ -269,7 +331,7 @@ export default { ...@@ -269,7 +331,7 @@ export default {
}) })
}, },
fetchDeleteProject() { fetchDeleteProject() {
deleteProject({ project_id: this.tableSelections[0] }).then((res) => { deleteProject({ project_id: this.tableSelections[0] }).then(res => {
if (res.code === 0 && res.data && res.data.status) { if (res.code === 0 && res.data && res.data.status) {
this.$message.success('删除项目成功') this.$message.success('删除项目成功')
this.$refs.tabList.refetch() this.$refs.tabList.refetch()
...@@ -279,14 +341,14 @@ export default { ...@@ -279,14 +341,14 @@ export default {
}) })
}, },
fetchProjectTypeList() { fetchProjectTypeList() {
getTypeList({ type: 0, status: 1, limit: 100 }).then((res) => { getTypeList({ type: 0, status: 1, limit: 100 }).then(res => {
if (res.code === 0 && res.data && Array.isArray(res.data.data)) { if (res.code === 0 && res.data && Array.isArray(res.data.data)) {
this.projectTypeList = res.data.data this.projectTypeList = res.data.data
} }
}) })
}, },
fetchContentTypeList() { fetchContentTypeList() {
getContentTypesList().then((res) => { getContentTypesList().then(res => {
if (res.code === 0 && res.data) { if (res.code === 0 && res.data) {
this.adTypeList = res.data.advert_list this.adTypeList = res.data.advert_list
this.articleTypeList = res.data.article_list this.articleTypeList = res.data.article_list
...@@ -298,23 +360,23 @@ export default { ...@@ -298,23 +360,23 @@ export default {
} }
</script> </script>
<style scoped> <style scoped>
.details-handle{ .details-handle {
cursor:pointer; cursor: pointer;
} }
.details-handle:hover{ .details-handle:hover {
color:#409EFF; color: #409eff;
} }
.drawer__content{ .drawer__content {
height:100%; height: 100%;
} }
.drawer-form{ .drawer-form {
width:450px; width: 450px;
margin:0 20px; margin: 0 20px;
padding:20px 0 10px; padding: 20px 0 10px;
min-height: calc(100% - 73px); min-height: calc(100% - 73px);
} }
.drawer__footer{ .drawer__footer {
text-align:center; text-align: center;
padding-bottom:15px; padding-bottom: 15px;
} }
</style> </style>
<template> <template>
<div class="staff page_container"> <div class="staff page_container">
<table-list v-bind="tableOptions" ref="tabList"> <table-list v-bind="tableOptions" ref="tabList" @selection-change="handleSelectionChange">
<template #header-aside> <template #header-aside>
<el-button type="primary" size="mini" @click="handleCreate">新建员工</el-button> <el-button type="primary" size="mini" @click="handleCreate" v-if="hasCreate">新建员工</el-button>
</template> </template>
<!-- 姓名 --> <!-- 姓名 -->
<template v-slot:table-name="{ row }"> <template v-slot:table-name="{ row }">
...@@ -29,6 +29,11 @@ ...@@ -29,6 +29,11 @@
<el-button type="text" @click="changePassword(row)">重置密码</el-button> <el-button type="text" @click="changePassword(row)">重置密码</el-button>
<el-button type="text" @click="changePhone(row)">更换手机号</el-button> <el-button type="text" @click="changePhone(row)">更换手机号</el-button>
</template> </template>
<template #footer>
<el-button size="mini" :disabled="!multipleSelection.length" @click="handleRemove" v-if="hasDelete"
>删除</el-button
>
</template>
</table-list> </table-list>
<el-drawer :title="drawerTitle" :visible.sync="drawerVisible" size="440px" :destroy-on-close="true"> <el-drawer :title="drawerTitle" :visible.sync="drawerVisible" size="440px" :destroy-on-close="true">
<div class="drawer__content"> <div class="drawer__content">
...@@ -120,7 +125,7 @@ ...@@ -120,7 +125,7 @@
</template> </template>
<script> <script>
import TableList from '@/components/TableList' import TableList from '@/components/TableList'
import { getStaffList, getProjectList, getRoleList, createStaff, updateStaff } from '@/api/settings' import { getStaffList, getProjectList, getRoleList, createStaff, updateStaff, batchDeleteStaff } from '@/api/settings'
import { sendCode } from '@/api/account' import { sendCode } from '@/api/account'
import { searchUserList } from '@/api/system' import { searchUserList } from '@/api/system'
const MOBILE_REG = /^1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{4,8}$/ const MOBILE_REG = /^1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{4,8}$/
...@@ -175,6 +180,18 @@ export default { ...@@ -175,6 +180,18 @@ export default {
} }
}, },
computed: { computed: {
// 权限列表
permissions() {
return this.$store.state.user.permissions
},
// 创建权限
hasCreate() {
return this.permissions.includes('setting-function-user-create')
},
// 删除权限
hasDelete() {
return this.permissions.includes('setting-function-user-delete')
},
drawerTitle() { drawerTitle() {
return this.drawerType === 'create' ? '新建员工' : '编辑员工' return this.drawerType === 'create' ? '新建员工' : '编辑员工'
}, },
...@@ -213,7 +230,7 @@ export default { ...@@ -213,7 +230,7 @@ export default {
} }
], ],
columns: [ columns: [
{ prop: 'selection', label: '', type: 'selection', minWidth: '50px', fixed: 'left' }, { type: 'selection', minWidth: '50px', fixed: 'left', visible: this.hasDelete },
{ prop: 'sso_user.real_name', label: '姓名', slots: 'table-name', minWidth: '80px', fixed: 'left' }, { prop: 'sso_user.real_name', label: '姓名', slots: 'table-name', minWidth: '80px', fixed: 'left' },
{ prop: 'roles', label: '角色', slots: 'table-role', minWidth: '100px' }, { prop: 'roles', label: '角色', slots: 'table-role', minWidth: '100px' },
{ prop: 'sso_user.mobile', label: '手机号', minWidth: '110px' }, { prop: 'sso_user.mobile', label: '手机号', minWidth: '110px' },
...@@ -232,6 +249,18 @@ export default { ...@@ -232,6 +249,18 @@ export default {
this.fetchRoleList() this.fetchRoleList()
}, },
methods: { methods: {
// 删除
handleRemove() {
const ids = this.multipleSelection.map(item => item.id)
batchDeleteStaff({ sso_ids: ids }).then(res => {
if (res.code === 0) {
this.$message.success('删除成功')
this.$refs.tableList.refetch(true)
} else {
this.$message.error(res.message)
}
})
},
handleCreate() { handleCreate() {
this.drawerVisible = true this.drawerVisible = true
this.drawerType = 'create' this.drawerType = 'create'
......
<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" v-if="hasCreate"
<el-tabs v-model="activeName" type="card"> >新建类型</el-button
>
<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="tableList"> <table-list v-bind="projectTableOptions" ref="tableList" @selection-change="handleSelectionChange">
<!-- 项目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
>
<!-- 创建人 --> <!-- 创建人 -->
<template v-slot:table-creater="{ row }"><p>{{row.sso_user.realname || row.sso_user.nickname}}</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="停用" @change="statusChange(row)"></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 #footer>
<el-button size="mini" :disabled="!multipleSelection.length" @click="handleRemove" v-if="hasDelete"
>删除</el-button
>
</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="tableList"> <table-list v-bind="contentTableOptions" ref="tableList" @selection-change="handleSelectionChange">
<!-- 项目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
>
<!-- 创建人 --> <!-- 创建人 -->
<template v-slot:table-creater="{ row }"><p>{{row.sso_user.realname || row.sso_user.nickname}}</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-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="停用" @change="statusChange(row)"></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 #footer>
<el-button size="mini" :disabled="!multipleSelection.length" @click="handleRemove" v-if="hasDelete"
>删除</el-button
>
</template> </template>
</table-list> </table-list>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
<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="name" :rules="{ required: true, message: '请输入项目类型名称', trigger: 'blur' }"> <el-form-item
label="项目类型名称"
prop="name"
:rules="{ required: true, message: '请输入项目类型名称', trigger: 'blur' }"
>
<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 v-if="dialogType === 'create'" label="参数ID为:" prop="tag" :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.tag" size="small"></el-input> <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="category" :rules="[{ required: true, message: '请选择手机号', trigger: 'change' }]"> <el-form-item
<el-select v-model="form.category" placeholder="请选择类型" size="small" style="width:100%;"> label="内容类型为:"
<el-option :label="item.name" :value="item.id" v-for="item in contentTypeList" :key="item.id" ></el-option> prop="category"
:rules="[{ required: true, message: '请选择手机号', trigger: 'change' }]"
>
<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-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item v-if="dialogType === 'create'" label="参数ID为:" prop="tag" :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.tag" 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="name" :rules="{ required: true, message: '请输入类型名称', trigger: 'blur' }"> <el-form-item
label="类型名称为:"
prop="name"
:rules="{ required: true, message: '请输入类型名称', trigger: 'blur' }"
>
<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>
</template> </template>
...@@ -62,7 +126,7 @@ ...@@ -62,7 +126,7 @@
</template> </template>
<script> <script>
import TableList from '@/components/TableList' import TableList from '@/components/TableList'
import { getTypeList, createType, updateType } from '@/api/settings.js' import { getTypeList, createType, updateType, batchDeleteType } from '@/api/settings.js'
const defaultForm = { const defaultForm = {
name: '', name: '',
category: '', category: '',
...@@ -73,31 +137,59 @@ export default { ...@@ -73,31 +137,59 @@ export default {
data() { data() {
return { return {
activeName: '0', activeName: '0',
contentTypeList: [
{ id: 1, name: '文章' },
{ id: 2, name: '广告' },
{ id: 3, name: '图文' }
],
dialogVisible: false,
dialogType: '',
form: Object.assign({}, defaultForm),
selectedId: '',
multipleSelection: []
}
},
computed: {
// 权限列表
permissions() {
return this.$store.state.user.permissions
},
// 创建权限
hasCreate() {
return this.permissions.includes('setting-function-type-create')
},
// 删除权限
hasDelete() {
return this.permissions.includes('setting-function-type-delete')
},
// 项目类型 // 项目类型
projectTableOptions: { projectTableOptions() {
return {
remote: { remote: {
httpRequest: getTypeList, httpRequest: getTypeList,
params: { type: 0 } params: { type: 0 }
}, },
columns: [ columns: [
{ prop: 'selection', label: '', type: 'selection', minWidth: '50px' }, { type: 'selection', visible: this.hasDelete },
{ prop: 'id', label: '项目类型ID', slots: 'table-id', minWidth: '150px' }, { prop: 'id', label: '项目类型ID', slots: 'table-id', minWidth: '150px' },
{ prop: 'name', label: '项目类型', minWidth: '150px' }, { prop: 'name', label: '项目类型', minWidth: '150px' },
{ prop: 'sso_user', label: '创建人', slots: 'table-creater', minWidth: '100px' }, { prop: 'sso_user', label: '创建人', slots: 'table-creater', minWidth: '100px' },
{ prop: 'created_at', label: '创建时间', minWidth: '150px' }, { prop: 'created_at', label: '创建时间', minWidth: '150px' },
{ prop: 'tag', label: '参数ID', minWidth: '80px' }, { prop: 'tag', label: '参数ID', minWidth: '80px' },
{ prop: 'status', label: '状态', slots: 'table-status', minWidth: '150px' } { prop: 'status', label: '状态', slots: 'table-status', minWidth: '150px' }
], ]
data: [] }
}, },
// 内容类型 // 内容类型
contentTableOptions: { contentTableOptions() {
return {
remote: { remote: {
httpRequest: getTypeList, httpRequest: getTypeList,
params: { type: 1 } params: { type: 1 }
}, },
columns: [ columns: [
{ prop: 'selection', label: '', type: 'selection', minWidth: '50px' }, { type: 'selection', visible: this.hasDelete },
{ prop: 'id', label: '内容ID', slots: 'table-id', minWidth: '150px' }, { prop: 'id', label: '内容ID', slots: 'table-id', minWidth: '150px' },
{ prop: 'name', label: '类型名称', minWidth: '150px' }, { prop: 'name', label: '类型名称', minWidth: '150px' },
{ prop: 'category', label: '内容类型', slots: 'table-category', minWidth: '80px' }, { prop: 'category', label: '内容类型', slots: 'table-category', minWidth: '80px' },
...@@ -106,19 +198,8 @@ export default { ...@@ -106,19 +198,8 @@ export default {
{ prop: 'tag', label: '参数ID', minWidth: '100px' }, { prop: 'tag', label: '参数ID', minWidth: '100px' },
{ prop: 'status', label: '状态', slots: 'table-status', minWidth: '150px' } { prop: 'status', label: '状态', slots: 'table-status', minWidth: '150px' }
] ]
},
contentTypeList: [
{ id: 1, name: '文章' },
{ id: 2, name: '广告' },
{ id: 3, name: '图文' }
],
dialogVisible: false,
dialogType: '',
form: Object.assign({}, defaultForm),
selectedId: ''
} }
}, },
computed: {
dialogTitle() { dialogTitle() {
let text = this.dialogType === 'create' ? '新建' : '修改' let text = this.dialogType === 'create' ? '新建' : '修改'
text += this.activeName === '0' ? '项目' : '内容' text += this.activeName === '0' ? '项目' : '内容'
...@@ -140,6 +221,25 @@ export default { ...@@ -140,6 +221,25 @@ export default {
} }
}, },
methods: { methods: {
handleTabClick() {
this.multipleSelection = []
},
// 选择
handleSelectionChange(value) {
this.multipleSelection = value
},
// 删除
handleRemove() {
const ids = this.multipleSelection.map(item => item.id)
batchDeleteType({ ids }).then(res => {
if (res.code === 0) {
this.$message.success('删除成功')
this.$refs.tableList.refetch(true)
} else {
this.$message.error(res.message)
}
})
},
handleCreate() { handleCreate() {
this.dialogType = 'create' this.dialogType = 'create'
this.dialogVisible = true this.dialogVisible = true
...@@ -175,36 +275,43 @@ export default { ...@@ -175,36 +275,43 @@ export default {
}) })
}, },
statusChange(val) { statusChange(val) {
this.fetchUpdateType({ this.fetchUpdateType(
{
type_id: val.id, type_id: val.id,
status: val.status status: val.status
}, 'status') },
'status'
)
}, },
fetchCreateType() { fetchCreateType() {
const params = { ...this.form } const params = { ...this.form }
!params.category && (params.category = 0) !params.category && (params.category = 0)
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.$refs.tableList.refetch() this.$refs.tableList.refetch()
this.$message.success('新建类型成功') this.$message.success('新建类型成功')
} else { } else {
this.$message.error(res.message || '新建类型失败') this.$message.error(res.message || '新建类型失败')
} }
}).catch(() => { })
.catch(() => {
this.$message.error('新建类型失败') this.$message.error('新建类型失败')
}) })
}, },
fetchUpdateType(data, type) { fetchUpdateType(data, type) {
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.$message.success(msg + '成功') this.$message.success(msg + '成功')
this.$refs.tableList.refetch() this.$refs.tableList.refetch()
} else { } else {
this.$message.error(res.message || msg + '失败') this.$message.error(res.message || msg + '失败')
} }
}).catch(() => { })
.catch(() => {
this.$message.error(msg + '失败') this.$message.error(msg + '失败')
}) })
} }
...@@ -212,27 +319,27 @@ export default { ...@@ -212,27 +319,27 @@ export default {
} }
</script> </script>
<style scoped> <style scoped>
.type{ .type {
box-sizing:border-box; box-sizing: border-box;
padding:15px; padding: 15px;
position:relative; position: relative;
} }
.btn-create{ .btn-create {
position:absolute; position: absolute;
right:20px; right: 20px;
top:16px; top: 16px;
z-index:1; z-index: 1;
} }
.el-tabs{ .el-tabs {
height:100%; height: 100%;
} }
.el-tabs ::v-deep.el-tabs__content{ .el-tabs ::v-deep.el-tabs__content {
height:calc(100% - 56px); height: calc(100% - 56px);
} }
.el-tab-pane{ .el-tab-pane {
height:100%; height: 100%;
} }
.table-list .table-list-bd{ .table-list .table-list-bd {
height:100%; height: 100%;
} }
</style> </style>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论