提交 e3376ebb authored 作者: pengxiaohui's avatar pengxiaohui

设置模块接口调试

上级 1b59626c
......@@ -51,10 +51,10 @@ 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)
return httpRequest.put(`/api/cms/admin/v1/user/${data.sso_id}/update`, data)
}
/* ------------------------------------项目管理------------------------------------ */
......@@ -77,8 +77,15 @@ export function createProject(data) {
* 更新项目
*/
export function updateProject(data) {
return httpRequest.put(`/api/cms/admin/v1/project/${data.type_id}/update`, 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)
}
/* ------------------------------------类型管理------------------------------------ */
/**
* 获取类型列表
......@@ -99,3 +106,9 @@ export function createType(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 })
}
......@@ -8,7 +8,7 @@
<template v-slot:project_id="scope"><span class="details-handle" @click="handleDetails(scope.row)">{{scope.row.id}}</span></template>
<!-- 状态 -->
<template v-slot: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>
</table-list>
<el-drawer ref="drawer" :visible.sync="drawerVisible" size="490px" @close="handleDrawerClose">
......@@ -28,7 +28,7 @@
</el-form-item>
<el-form-item label="项目类型" prop="type_id">
<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.name" :value="item.id" v-for="item in projectTypeList" :key="item.id" />
</el-select>
</el-form-item>
<el-form-item label="项目网址" prop="project_uri">
......@@ -38,7 +38,7 @@
<el-checkbox :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 v-for="item in typeList" :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-form-item>
<el-form-item label="文章类型" style="margin-bottom:0;">
......@@ -66,7 +66,7 @@
</template>
<script>
import TableList from '@/components/TableList'
import { getProjectList, createProject } from '@/api/settings'
import { getProjectList, getTypeList, getContentTypesList, createProject, updateProject, deleteProject } from '@/api/settings'
const defaultForm = {
name: '',
short_name: '',
......@@ -89,9 +89,6 @@ export default {
{ id: '1', name: '启用' },
{ id: '0', name: '停用' }
],
projectTypeList: [
{ id: '111', label: '学位教育' }
],
selectedItem: {},
drawerVisible: false,
drawerType: '',
......@@ -102,21 +99,10 @@ export default {
type_id: { required: true, message: '请输入项目类型', trigger: 'blur' },
project_uri: { required: true, message: '请输入项目网址', trigger: 'blur' }
},
adTypeList: [
{ id: '111', name: 'banner广告A' },
{ id: '122', name: '正文区广告A' },
{ 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' }
],
projectTypeList: [],
adTypeList: [],
articleTypeList: [],
imageTextTypeList: [],
adType: {
isIndeterminate: false,
checkAll: false
......@@ -128,7 +114,8 @@ export default {
imageTextType: {
isIndeterminate: false,
checkAll: false
}
},
tableSelections: []
}
},
computed: {
......@@ -140,7 +127,7 @@ export default {
let text = ''
if (type === 'create') text = '新建项目'
else if (type === 'edit') text = '编辑项目'
else text = this.selectedItem.title || '项目详情'
else text = this.selectedItem.name || '项目详情'
return text
},
tableOptions() {
......@@ -183,6 +170,10 @@ export default {
}
}
},
created() {
this.fetchProjectTypeList()
this.fetchContentTypeList()
},
methods: {
handleCreate() {
this.drawerVisible = true
......@@ -192,15 +183,25 @@ export default {
this.selectedItem = Object.assign({}, val)
this.drawerVisible = true
this.drawerType = 'details'
Object.keys(this.form).forEach(key => {
const valItem = val[key]
if (valItem) {
this.form[key] = valItem
}
})
this.form.adType = val.advert_type_ids
this.form.articleType = val.article_type_ids
this.form.imageTextType = val.imgtext_type_ids
console.log(this.form)
},
handleCheckAllChange(val, target) {
this.form[target] = val ? this.typeList.map(item => item.id) : [];
this.form[target] = val ? this[target + 'List'].map(item => item.id) : [];
this[target].isIndeterminate = false;
},
handleCheckedChange(val, target) {
const checkedCount = val.length;
this[target].checkAll = checkedCount === this.typeList.length;
this[target].isIndeterminate = checkedCount > 0 && checkedCount < this.typeList.length;
this[target].checkAll = checkedCount === this[target + 'List'].length;
this[target].isIndeterminate = checkedCount > 0 && checkedCount < this[target + 'List'].length;
},
handleDrawerClose() {
this.drawerVisible = false
......@@ -209,25 +210,87 @@ export default {
handleDrawerSubmit() {
this.$refs.drawerForm.validate(valid => {
if (valid) {
console.log('drawerForm')
if (this.drawerType === 'create') {
this.fetchCreateProject()
} else {
const data = this.getFormData()
data.project_id = this.selectedItem.id
this.fetchUpdateProject(data)
}
this.drawerVisible = false
} else {
return false
}
})
},
selectionChange(val) {
console.log(val)
this.tableSelections = val.map(item => item.id)
},
fetchCreateProject() {
statusChange(val) {
this.fetchUpdateProject({
project_id: val.id,
status: val.status
}, 'status')
},
getFormData() {
const form = this.form
const data = {
name: this.form.role_name
advert_type_ids: form.adType,
article_type_ids: form.articleType,
imgtext_type_ids: form.imageTextType
}
Object.keys(form).forEach(key => {
if (typeof key === 'string') {
data[key] = form[key]
}
})
return data
},
fetchCreateProject() {
const data = this.getFormData()
createProject(data).then((res) => {
if (res.code === 0 && res.message === 'SUCCESS') {
this.fetchRoleList()
this.$message.success('创建角色成功')
this.$message.success('新建项目成功')
this.$refs.tabList.refetch()
} else {
this.$message.error('创建角色失败')
this.$message.error(res.message || '新建项目失败')
}
})
},
fetchUpdateProject(data, type) {
const msg = type === 'status' ? '更改状态' : '更改项目'
updateProject(data).then((res) => {
if (res.code === 0 && res.message === 'SUCCESS') {
this.$message.success(msg + '成功')
this.$refs.tabList.refetch()
} else {
this.$message.error(res.message || msg + '失败')
}
})
},
fetchDeleteProject() {
deleteProject({ project_id: this.tableSelections[0] }).then((res) => {
if (res.code === 0 && res.data && res.data.status) {
this.$message.success('删除项目成功')
this.$refs.tabList.refetch()
} else {
this.$message.error(res.message || '删除项目失败')
}
})
},
fetchProjectTypeList() {
getTypeList({ type: 0, status: 1, limit: 100 }).then((res) => {
if (res.code === 0 && res.data && Array.isArray(res.data.data)) {
this.projectTypeList = res.data.data
}
})
},
fetchContentTypeList() {
getContentTypesList().then((res) => {
if (res.code === 0 && res.data) {
this.adTypeList = res.data.advert_list
this.articleTypeList = res.data.article_list
this.imageTextTypeList = res.data.imgtext_list
}
})
}
......
......@@ -256,9 +256,9 @@ export default {
createRole(data).then((res) => {
if (res.code === 0 && res.message === 'SUCCESS') {
this.fetchRoleList()
this.$message.success('建角色成功')
this.$message.success('建角色成功')
} else {
this.$message.error('建角色失败')
this.$message.error('建角色失败')
}
})
},
......
......@@ -2,12 +2,27 @@
<div class="staff page_container">
<table-list v-bind="tableOptions" ref="tabList">
<template #header-aside>
<el-button type="primary" size="mini" @click="drawerVisible = true">新建员工</el-button>
<el-button type="primary" size="mini" @click="handleCreate">新建员工</el-button>
</template>
<!-- 姓名 -->
<template v-slot:table-name="{ row }">
<p class="details-handle" @click="handleDetails(row)">{{row.sso_user.real_name || row.sso_user.nickname}}</p>
</template>
<!-- 角色 -->
<template v-slot:table-role="{ row }">
<span v-for="(item, index) in row.roles" :key="index">{{index > 0 ? '、' : ''}}{{item.name}}</span>
</template>
<!-- 项目 -->
<template v-slot:table-project="{ row }">
<p class="details-handle" v-for="(item, index) in row.projects" :key="index">{{index > 0 ? '、' : ''}}{{item.name}}</p>
</template>
<!-- 创建人 -->
<template v-slot:table-creator="{ row }">
<p>{{row.create_user.real_name || row.create_user.nickname}}</p>
</template>
<template v-slot:name="scope"><span class="details-handle" @click="handleDetails(scope.row)">{{scope.row.ad_id}}</span></template>
<!-- 发布状态 -->
<template v-slot:status="{ row }">
<el-switch v-model="row.status"></el-switch>
<el-switch v-model="row.status" :active-value="0" :inactive-value="1" active-text="启用" inactive-text="停用" @change="statusChange(row)"></el-switch>
</template>
<!-- 操作 -->
<template v-slot:tools="{ row }">
......@@ -21,34 +36,39 @@
<el-form-item label="账户" prop="userid" v-if="dialogType === 'edit'">
<el-input v-model="form.userid" size="small" disabled></el-input>
</el-form-item>
<el-form-item label="账户" prop="userid" v-else style="position:relative;">
<el-select v-model="form.userid" placeholder="输入关键字搜索" size="small" filterable remote :remote-method="fetchUserList" :loading="searchUsersloading" style="width:100%;">
<el-option :label="user.username" :value="user.id" v-for="user in userList" :key="user.id" >
<span style="float: left">{{ user.username }}</span>
<span style="float: right; color: #8492a6; font-size: 13px; margin-left:10px;">{{ user.id }}</span>
<el-form-item label="账户" prop="sso_id" v-else style="position:relative;">
<el-select v-model="form.sso_id" placeholder="输入邮箱/手机号码搜索" size="small" filterable remote :remote-method="fetchUserList" :loading="searchUsersloading" style="width:100%;">
<el-option :label="user.real_name || user.nickname " :value="user.id" v-for="user in userList" :key="user.id" >
<div style="display:flex;">
<span>
{{ user.real_name || user.nickname }}
<template v-if="user.mobile">(手机号:{{user.mobile}})</template>
</span>
<span style="color: #8492a6; font-size: 13px; margin:0 20px 0 10px;" v-if="user.email">邮箱:{{ user.email }}</span>
<span style="color: #8492a6; font-size: 13px; margin:0 20px 0 10px;" v-else>ID:{{ user.id }}</span>
</div>
</el-option>
</el-select>
<p class="search-keywords-checked" v-if="searchKeywordsCheckMsg">{{searchKeywordsCheckMsg}}</p>
</el-form-item>
<el-form-item label="手机号" prop="phone">
<!-- <el-form-item label="手机号" prop="phone">
<el-input v-model="form.phone" size="small"></el-input>
</el-form-item>
<el-form-item label="邮箱" prop="email">
<el-input v-model="form.email" size="small"></el-input>
</el-form-item>
<el-form-item label="姓名" prop="username">
</el-form-item> -->
<!-- <el-form-item label="姓名" prop="username">
<el-input v-model="form.username" size="small"></el-input>
</el-form-item>
<el-form-item label="角色" prop="role">
<el-select v-model="form.role" placeholder="请选择角色" size="small" style="width:100%;">
</el-form-item> -->
<el-form-item label="角色" prop="role_id">
<el-select v-model="form.role_id" placeholder="请选择角色" size="small" style="width:100%;">
<el-option :label="role.name" :value="role.id" v-for="role in roleList" :key="role.id" ></el-option>
</el-select>
</el-form-item>
<el-form-item label="项目" prop="project">
<el-form-item label="项目" prop="project_ids">
<el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange">全选</el-checkbox>
<div style="margin: 8px 0;"></div>
<el-checkbox-group v-model="form.project" @change="handleCheckedProjectChange">
<el-checkbox v-for="pr in projectList" :label="pr.project_id" :key="pr.project_id">{{pr.project_name}}</el-checkbox>
<el-checkbox-group v-model="form.project_ids" @change="handleCheckedProjectChange">
<el-checkbox v-for="pr in projectList" :label="pr.id" :key="pr.id">{{pr.name}}</el-checkbox>
</el-checkbox-group>
</el-form-item>
</el-form>
......@@ -69,7 +89,7 @@
</el-form-item>
</template>
<template v-if="dialogType === 'phone'">
<el-form-item label="新手机号" prop="phone" :rules="[{ required: true, message: '请输入手机号', trigger: 'blur' }, { validator: (rule, value, callback) => checkedDialogForm(dialogForm.password, value, callback, '密码'), trigger: 'blur' }]">
<el-form-item label="新手机号" prop="phone" :rules="[{ required: true, message: '请输入手机号', trigger: 'blur' }, { validator: checkedMobile, trigger: 'blur' }]">
<el-input v-model="dialogForm.phone" size="small"></el-input>
</el-form-item>
<el-form-item label="确认号码" prop="ensurePhone" :rules="[{ required: true, message: '请输入确认密码', trigger: 'blur' }, { validator: (rule, value, callback) => checkedDialogForm(dialogForm.phone, value, callback, '手机号'), trigger: 'blur' }]">
......@@ -86,10 +106,21 @@
</template>
<script>
import TableList from '@/components/TableList'
import { getStaffList } from '@/api/settings'
import _ from 'lodash'
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{8}$/
const EMAIL_REG = /^[A-Za-z0-9]+([_.][A-Za-z0-9]+)*@([A-Za-z0-9-]+\.)+[A-Za-z]{2,6}$/
import { getStaffList, getProjectList, getRoleList, createStaff, updateStaff } from '@/api/settings'
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 EMAIL_REG = /^[A-Za-z0-9]+([_.][A-Za-z0-9]+)*@[A-Za-z0-9-.]+$/
const drawerForm = {
sso_id: '',
role_id: '',
project_ids: []
}
const dialogForm = {
password: '',
ensurePassword: '',
phone: '',
ensurePhone: ''
}
export default {
components: { TableList },
data() {
......@@ -102,68 +133,26 @@ export default {
}
}
}
const checkEmail = (rule, value, callback) => {
if (value) {
if (!EMAIL_REG.test(value)) {
callback(new Error('邮箱格式错误'));
} else {
callback()
}
}
}
return {
activeName: '0',
projectList: [
{ project_id: '111', project_name: '索菲亚项目' },
{ project_id: '1131', project_name: '官网' },
{ project_id: '13411', project_name: '项目的简称' },
{ project_id: '113132', project_name: '项目的简称' },
{ project_id: '1e3131', project_name: '项目的简称' },
{ project_id: '13131', project_name: 'cu' },
{ project_id: '222', project_name: 'kellet' }
],
roleList: [
{ id: '111', name: '超级管理员' },
{ id: '222', name: '数据管理员' }
],
projectList: [],
roleList: [],
drawerVisible: false,
drawerType: '',
checkAll: false,
isIndeterminate: false,
form: {
userid: '',
username: '',
phone: '',
email: '',
role: '',
project: []
},
form: Object.assign({}, drawerForm),
rules: {
userid: [{ required: true, message: '请选择账户', trigger: 'change' }],
username: [{ required: true, message: '请输入名称', trigger: 'blur' }],
phone: [
// { required: true, message: '请输入手机号', trigger: 'blur' },
{ validator: checkMobile, trigger: 'blur' }
],
email: [
// { required: true, message: '请输入邮箱', trigger: 'blur' },
{ validator: checkEmail, trigger: 'blur' }
],
role: [{ required: true, message: '请选择角色', trigger: 'change' }],
project: { required: true, message: '请选择项目', trigger: 'change' }
sso_id: [{ required: true, message: '请选择账户', trigger: 'change' }],
role_id: [{ required: true, message: '请选择角色', trigger: 'change' }],
project_ids: { required: true, message: '请选择项目', trigger: 'change' }
},
userList: [],
searchKeywordsCheckMsg: '',
searchUsersloading: false,
dialogVisible: false,
dialogType: '',
operateItem: '',
dialogForm: {
password: '',
ensurePassword: '',
phone: '',
ensurePhone: ''
},
dialogForm: Object.assign({}, dialogForm),
checkedMobile: checkMobile
}
},
......@@ -173,7 +162,12 @@ export default {
},
dialogTitle() {
const text = this.dialogType === 'pwd' ? '修改密码' : '修改手机'
return text + `(${this.operateItem.name})`
const user = this.operateItem.sso_user
let username = ''
if (user) {
username = user.real_name || user.nickname
}
return text + '(' + username + ')'
},
tableOptions() {
return {
......@@ -201,20 +195,37 @@ export default {
}
],
columns: [
{ prop: 'sso_user.real_name', label: '姓名' },
{ prop: 'role', label: '角色' },
{ prop: 'sso_user.mobile', label: '手机号' },
{ prop: 'sso_user.email', label: '邮箱' },
{ prop: 'project_ids', label: '项目' },
{ prop: 'author', label: '创建人' },
{ prop: 'created_at', label: '创建时间' },
{ prop: 'status', label: '状态', slots: 'status' },
{ prop: 'x', label: '操作', slots: 'tools' }
{ prop: 'selection', label: '', type: 'selection', minWidth: '50px', fixed: 'left' },
{ prop: 'sso_user.real_name', label: '姓名', slots: 'table-name', minWidth: '80px', fixed: 'left' },
{ prop: 'roles', label: '角色', slots: 'table-role', minWidth: '100px' },
{ prop: 'sso_user.mobile', label: '手机号', minWidth: '110px' },
{ prop: 'sso_user.email', label: '邮箱', minWidth: '160px' },
{ prop: 'projects', label: '项目', minWidth: '130px', slots: 'table-project' },
{ prop: 'create_user', label: '创建人', minWidth: '80px', slots: 'table-creator' },
{ prop: 'created_at', label: '创建时间', minWidth: '150px' },
{ prop: 'status', label: '状态', slots: 'status', minWidth: '140px', fixed: 'right' },
{ prop: 'x', label: '操作', slots: 'tools', minWidth: '200px', fixed: 'right' }
]
}
}
},
created() {
this.fetchProjectList()
this.fetchRoleList()
},
methods: {
handleCreate() {
this.drawerVisible = true
this.drawerType = 'create'
},
handleDrawerClose() {
this.drawerVisible = false
this.form = Object.assign({}, drawerForm)
},
handleDialogClose() {
this.drawerVisible = false
this.form = Object.assign({}, drawerForm)
},
handleCheckAllChange(val) {
this.form.project = val ? this.projectList.map(item => item.project_id) : [];
this.isIndeterminate = false;
......@@ -243,14 +254,29 @@ export default {
this.dialogType = 'phone'
},
handleDetails(val) {
this.operateItem = _.cloneDeep(val)
this.form = _.cloneDeep(val)
const form = this.form
form.sso_id = val.sso_id
form.role_id = val.roles[0] ? val.roles[0].id : ''
form.project_ids = val.projects.map(item => item.id) || []
this.operateItem = val
console.log(val)
this.drawerVisible = true
this.drawerType = 'details'
},
statusChange(val) {
this.fetchUpdateStaff({
sso_id: val.sso_id,
status: val.status
}, 'status')
},
handleDrawerSubmit() {
this.$refs.drawerForm.validate(valid => {
if (valid) {
console.log('drawerForm')
} else {
if (this.drawerType === 'create') {
this.fetchCreateStaff()
} else {
this.fetchUpdateStaff(this.form)
}
return false
}
})
......@@ -264,8 +290,65 @@ export default {
}
})
},
fetchCreateStaff() {
createStaff(this.form).then((res) => {
if (res.code === 0 && res.data && res.data.id) {
this.$message.success('新建员工成功')
this.$refs.tabList.refetch()
this.handleDrawerClose()
} else {
this.$message.error(res.message || '新建项目失败')
}
})
},
fetchUpdateStaff(data, type) {
const msg = type === 'status' ? '更改状态' : '更改员工信息'
updateStaff(data).then((res) => {
if (res.code === 0 && res.data && res.data.status) {
this.$message.success(msg + '成功')
this.$refs.tabList.refetch()
this.handleDrawerClose()
} else {
this.$message.error(res.message || msg + '失败')
}
})
},
fetchUserList(val) {
console.log(val)
let searchType = 'username'
if (EMAIL_REG.test(val)) {
searchType = 'email'
} else if (MOBILE_REG.test(val)) {
searchType = 'mobile'
}
if (!val) return false
else {
const params = {
[searchType]: val
}
this.searchUsersloading = true
searchUserList(params)
.then(res => {
this.searchUsersloading = false
if (res.data && Array.isArray(res.data.items)) {
this.userList = res.data.items
}
})
.catch(() => {})
}
},
fetchRoleList() {
getRoleList({ limit: 100 }).then((res) => {
if (res.code === 0 && res.data && Array.isArray(res.data.data)) {
this.roleList = res.data.data
}
})
},
fetchProjectList() {
getProjectList({ type: 0, status: 1, limit: 100 }).then((res) => {
if (res.code === 0 && res.data && Array.isArray(res.data.data)) {
this.projectList = res.data.data
}
})
}
}
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论