后台 工作台 权限管理接口对接

This commit is contained in:
Mrtangl 2022-04-12 18:36:34 +08:00
parent 8d52d7e924
commit 32bb1b7b89
11 changed files with 65 additions and 289 deletions

View File

@ -2,30 +2,31 @@ import request from '@/utils/request'
import { terminal } from '@/config/app'
export function adminLists(params: any) {
return request.get('/auth.admin/lists', { params })
return request.get('/system/admin/lists', { params })
}
// 管理员添加
export function apiAdminAdd(params: any) {
return request.post('/auth.admin/add', params)
return request.post('/system/admin/add', params)
}
export function apiAdminEdit(params: any) {
return request.post('/auth.admin/edit', params)
return request.post('/system/admin/edit', params)
}
// 管理员删除
export function apiAdminDelete(params: { id: number }) {
return request.post('/auth.admin/delete', params)
return request.post('/system/admin/del', params)
}
// 管理员详情
export function apiAdminDetail(params: any) {
return request.get('/auth.admin/detail', { params })
return request.get('/system/admin/detail', { params })
}
// 角色列表
export function apiRoleLists(params: any) {
return request.get('/auth.role/lists', { params })
return request.get('/system/role/lists', { params })
}
// 添加角色
export function apiRoleAdd(params: any) {

View File

@ -11,7 +11,7 @@ export function apiSetCopyright(params: any) {
// 获取网站信息
export function apiGetWebsite() {
return request.get('/setting.web.web_setting/getWebsite')
return request.get('/setting/website')
}
// 设置网站信息
export function apiSetWebsite(params: any) {
@ -64,8 +64,6 @@ export function apiLoginConfigSet(params: any) {
}
/** E 用户设置 **/
// 获取系统日志列表
export function apiSystemLogLists(params: any) {
return request.get('/setting.system.log/lists', { params })

View File

@ -2,16 +2,16 @@ import request from '@/utils/request'
import { terminal } from '@/config/app'
// 登录
export function apiLogin(params: { account: string; password: string }) {
return request.post('/login/account', { ...params, terminal })
export function apiLogin(params: { username: string; password: string }) {
return request.post('/system/login', { ...params, terminal })
}
// 退出登录
export function apiLogout() {
return request.post('/login/logout')
return request.post('/system/logout')
}
// 用户信息
export function apiUserInfo() {
return request.get('/auth.admin/mySelf')
return request.get('/system/admin/self')
}

View File

@ -2,5 +2,5 @@ import request from '@/utils/request'
// 工作台主页
export function apiWorkbench() {
return request.get('/Workbench/index')
return request.get('/index/console')
}

View File

@ -1,237 +0,0 @@
<template>
<div class="cl-editor-quill">
<div ref="editorRef" class="editor" :style="style"></div>
<material-select ref="materialRef" :hidden="true" :limit="-1" @change="filesChange" />
</div>
</template>
<script setup lang="ts">
import { computed, defineComponent, onMounted, onUnmounted, ref, toRefs, watch } from 'vue'
import Quill from 'quill'
import 'quill/dist/quill.snow.css'
import MaterialSelect from '@/components/material-select/index.vue'
interface Props {
//
modelValue: string
//
options?: Record<any, any>
//
width?: number | string
//
height?: number | string
minHeight?: number | string
}
const props = withDefaults(defineProps<Props>(), {
options: () => ({}),
width: '100%',
height: '100%',
})
const emit = defineEmits<{
(event: 'update:modelValue', val: string): void
(event: 'load', quill: any): void
}>()
let quill: any = null
const editorRef = ref()
const materialRef = ref()
//
const content = ref('')
//
const cursorIndex = ref(0)
//
const uploadFileHandler = () => {
const selection = quill.getSelection()
if (selection) {
cursorIndex.value = selection.index
}
materialRef.value.showPopup()
}
//
const filesChange = (files: any[]) => {
if (files.length > 0) {
//
files.forEach((file, i) => {
quill.insertEmbed(cursorIndex.value + i, 'image', file, Quill.sources.USER)
})
//
quill.setSelection(cursorIndex.value + files.length)
}
}
//
const setContent = (val: string) => {
quill.root.innerHTML = val || ''
}
//
const style = computed<any>(() => {
return {
height: typeof props.height == 'string' ? props.height : `${props.height}px`,
width: typeof props.width == 'string' ? props.width : `${props.width}px`,
}
})
//
watch(
() => props.modelValue,
(val: string) => {
if (val) {
if (val !== content.value) {
setContent(val)
}
} else {
setContent('')
}
}
)
onMounted(() => {
//
quill = new Quill(editorRef.value, {
theme: 'snow',
placeholder: '输入内容',
modules: {
toolbar: [
['bold', 'italic', 'underline', 'strike'],
['blockquote', 'code-block'],
[{ header: 1 }, { header: 2 }],
[{ list: 'ordered' }, { list: 'bullet' }],
[{ script: 'sub' }, { script: 'super' }],
[{ indent: '-1' }, { indent: '+1' }],
[{ direction: 'rtl' }],
[{ size: ['small', false, 'large', 'huge'] }],
[{ header: [1, 2, 3, 4, 5, 6, false] }],
[{ color: [] }, { background: [] }],
[{ font: [] }],
[{ align: [] }],
['clean'],
['link', 'image'],
],
},
...props.options,
})
//
quill.getModule('toolbar').addHandler('image', uploadFileHandler)
//
quill.on('text-change', () => {
content.value = quill.root.innerHTML
emit('update:modelValue', content.value)
})
setContent(props.modelValue)
//
emit('load', quill)
})
</script>
<style lang="scss">
.cl-editor-quill {
background-color: #fff;
.ql-snow {
line-height: 22px !important;
}
#quill-upload-btn {
display: none;
}
.ql-snow {
border: 1px solid #dcdfe6;
}
.ql-snow .ql-tooltip[data-mode='link']::before {
content: '请输入链接地址:';
}
.ql-snow .ql-tooltip.ql-editing a.ql-action::after {
border-right: 0px;
content: '保存';
padding-right: 0px;
}
.ql-snow .ql-tooltip[data-mode='video']::before {
content: '请输入视频地址:';
}
.ql-snow .ql-picker.ql-size .ql-picker-label::before,
.ql-snow .ql-picker.ql-size .ql-picker-item::before {
content: '14px';
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='small']::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='small']::before {
content: '10px';
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='large']::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='large']::before {
content: '18px';
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='huge']::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='huge']::before {
content: '32px';
}
.ql-snow .ql-picker.ql-header .ql-picker-label::before,
.ql-snow .ql-picker.ql-header .ql-picker-item::before {
content: '文本';
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value='1']::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value='1']::before {
content: '标题1';
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value='2']::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value='2']::before {
content: '标题2';
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value='3']::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value='3']::before {
content: '标题3';
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value='4']::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value='4']::before {
content: '标题4';
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value='5']::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value='5']::before {
content: '标题5';
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value='6']::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value='6']::before {
content: '标题6';
}
.ql-snow .ql-picker.ql-font .ql-picker-label::before,
.ql-snow .ql-picker.ql-font .ql-picker-item::before {
content: '标准字体';
}
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value='serif']::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value='serif']::before {
content: '衬线字体';
}
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value='monospace']::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value='monospace']::before {
content: '等宽字体';
}
}
</style>

View File

@ -1,14 +1,16 @@
<template>
<div v-if="permission" class="perm">
<template v-if="hasPermission">
<!-- <div v-if="permission" class="perm"> -->
<div class="perm">
<!-- <template v-if="hasPermission"> -->
<template>
<router-view></router-view>
</template>
<template v-else>
<!-- <template v-else>
<div class="no-perm flex flex-col flex-center">
<img src="@/assets/images/no_perm.png" />
<div class="muted">暂无查看权限</div>
</div>
</template>
</template> -->
</div>
</template>

View File

@ -30,14 +30,16 @@ const permission: Module<PermissionModule, any> = {
actions: {
getPermission({ commit }) {
return new Promise((resolve, reject) => {
apiConfigGetAuth()
.then(data => {
commit('setPermission', data)
resolve(data)
})
.catch(err => {
reject(err)
})
// apiConfigGetAuth()
// .then(data => {
// commit('setPermission', data)
// resolve(data)
// })
// .catch(err => {
// reject(err)
// })
resolve({})
})
}
}

View File

@ -25,9 +25,11 @@ const user: Module<UserModule, any> = {
// 登录
login({ commit }, data) {
const { account, password } = data
console.log(data, '----------------------')
return new Promise((resolve, reject) => {
apiLogin({
account: account.trim(),
username: account,
password: password
})
.then((data: any) => {

View File

@ -69,8 +69,20 @@ request.interceptors.response.use(
case 200:
return eventResponse.success(response.data)
case 300:
case 310:
case 311:
case 312:
case 313:
case 314:
case 403:
case 404:
case 500:
return eventResponse.error(response.data)
case -1:
case 330:
case 331:
case 332:
case 333:
return eventResponse.redirect()
case 2:
return eventResponse.page(response.data)

View File

@ -3,13 +3,13 @@
<el-card shadow="never">
<el-form class="ls-form" :model="formData" label-width="80px" size="small" inline>
<el-form-item label="账号:">
<el-input v-model="formData.account" class="ls-input" />
<el-input v-model="formData.username" class="ls-input" />
</el-form-item>
<el-form-item label="名称:">
<el-input v-model="formData.name" class="ls-input" />
<el-input v-model="formData.nickname" class="ls-input" />
</el-form-item>
<el-form-item label="角色:">
<el-select v-model="formData.role_id" placeholder="全部">
<el-select v-model="formData.role" placeholder="全部">
<el-option
v-for="(item, index) in roleList"
:key="index"
@ -38,32 +38,28 @@
<el-avatar :size="50" :src="row.avatar"></el-avatar>
</template>
</el-table-column>
<el-table-column label="账号" prop="account" min-width="100"></el-table-column>
<el-table-column label="名称" prop="name" min-width="100"></el-table-column>
<el-table-column
label="角色"
prop="role_name"
min-width="100"
></el-table-column>
<el-table-column label="账号" prop="username" min-width="100"></el-table-column>
<el-table-column label="名称" prop="nickname" min-width="100"></el-table-column>
<el-table-column label="角色" prop="role" min-width="100"></el-table-column>
<el-table-column
label="创建时间"
prop="create_time"
prop="createTime"
min-width="150"
></el-table-column>
<el-table-column
label="最近登录时间"
prop="login_time"
prop="lastLoginTime"
min-width="150"
></el-table-column>
<el-table-column
label="最近登录IP"
prop="login_ip"
prop="lastLoginIp"
min-width="100"
></el-table-column>
<el-table-column label="状态" min-width="100">
<template #default="{ row }">
<el-switch
v-model="row.disable"
v-model="row.isDisable"
:active-value="0"
:inactive-value="1"
@change="changeStatus(row)"
@ -117,9 +113,9 @@ export default defineComponent({
setup() {
//
const formData = reactive({
account: '',
name: '',
role_id: ''
username: '',
nickname: '',
role: ''
})
const roleList: Ref<any[]> = ref([])
const { pager, requestApi, resetParams, resetPage } = usePages({
@ -129,10 +125,10 @@ export default defineComponent({
const changeStatus = (data: any) => {
apiAdminEdit({
id: data.id,
account: data.account,
name: data.name,
role_id: data.role_id,
disable: data.disable,
username: data.username,
nickname: data.nickname,
role: data.role,
isDisable: data.isDisable,
multipoint_login: data.multipoint_login
}).finally(() => {
requestApi()

View File

@ -9,9 +9,9 @@
<el-table :data="pager.lists" size="medium">
<el-table-column prop="id" label="ID"></el-table-column>
<el-table-column prop="name" label="名称"></el-table-column>
<el-table-column prop="desc" label="备注"></el-table-column>
<el-table-column prop="remark" label="备注"></el-table-column>
<el-table-column prop label="权限"></el-table-column>
<el-table-column prop="create_time" label="创建时间"></el-table-column>
<el-table-column prop="createTime" label="创建时间"></el-table-column>
<el-table-column prop label="操作">
<template #default="{ row }">
<!-- 编辑 -->
@ -64,7 +64,7 @@ export default defineComponent({
const formData = reactive({
id: 0, // id
name: '', //
desc: '', //
remark: '', //
create_time: '', //
num: 0 // 使
})