Lufaneng 11 months ago
parent 04747f0018
commit 7252ac8a5e

Binary file not shown.

Before

Width:  |  Height:  |  Size: 338 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 718 KiB

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

@ -7,7 +7,6 @@ export {}
/* prettier-ignore */ /* prettier-ignore */
declare module 'vue' { declare module 'vue' {
export interface GlobalComponents { export interface GlobalComponents {
ElAlert: typeof import('element-plus/es')['ElAlert']
ElAside: typeof import('element-plus/es')['ElAside'] ElAside: typeof import('element-plus/es')['ElAside']
ElBreadcrumb: typeof import('element-plus/es')['ElBreadcrumb'] ElBreadcrumb: typeof import('element-plus/es')['ElBreadcrumb']
ElBreadcrumbItem: typeof import('element-plus/es')['ElBreadcrumbItem'] ElBreadcrumbItem: typeof import('element-plus/es')['ElBreadcrumbItem']
@ -22,9 +21,7 @@ declare module 'vue' {
ElFormItem: typeof import('element-plus/es')['ElFormItem'] ElFormItem: typeof import('element-plus/es')['ElFormItem']
ElHeader: typeof import('element-plus/es')['ElHeader'] ElHeader: typeof import('element-plus/es')['ElHeader']
ElIcon: typeof import('element-plus/es')['ElIcon'] ElIcon: typeof import('element-plus/es')['ElIcon']
ElImage: typeof import('element-plus/es')['ElImage']
ElInput: typeof import('element-plus/es')['ElInput'] ElInput: typeof import('element-plus/es')['ElInput']
ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
ElMain: typeof import('element-plus/es')['ElMain'] ElMain: typeof import('element-plus/es')['ElMain']
ElMenu: typeof import('element-plus/es')['ElMenu'] ElMenu: typeof import('element-plus/es')['ElMenu']
ElMenuItem: typeof import('element-plus/es')['ElMenuItem'] ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
@ -35,7 +32,6 @@ declare module 'vue' {
ElSubMenu: typeof import('element-plus/es')['ElSubMenu'] ElSubMenu: typeof import('element-plus/es')['ElSubMenu']
ElTable: typeof import('element-plus/es')['ElTable'] ElTable: typeof import('element-plus/es')['ElTable']
ElTableColumn: typeof import('element-plus/es')['ElTableColumn'] ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
ElUpload: typeof import('element-plus/es')['ElUpload']
MapSelector: typeof import('./components/MapSelector.vue')['default'] MapSelector: typeof import('./components/MapSelector.vue')['default']
Pagination: typeof import('./components/Pagination/index.vue')['default'] Pagination: typeof import('./components/Pagination/index.vue')['default']
RouterLink: typeof import('vue-router')['RouterLink'] RouterLink: typeof import('vue-router')['RouterLink']

@ -181,9 +181,9 @@ router.beforeEach(async (to, from, next) => {
const userStore = useUserStore() const userStore = useUserStore()
// 如果没有 token并且不在白名单中则重定向到登录 // 如果没有 token并且不在白名单中则重定向到登录
// if (!userStore.token && !whiteList.includes(to.path)) { if (!userStore.token && !whiteList.includes(to.path)) {
// return next('/login') return next('/login')
// } }
// 如果有 token 但还没有添加动态路由 // 如果有 token 但还没有添加动态路由
// if (userStore.token && !hasAddRoutes) { // if (userStore.token && !hasAddRoutes) {

@ -30,9 +30,9 @@ export const useUserStore = defineStore('user', () => {
routerList.value = [] routerList.value = []
// 重置路由 // 重置路由
import('@/router').then(({ resetRouter }) => { // import('@/router').then(({ resetRouter }) => {
resetRouter() // resetRouter()
}) // })
} }
return { token, setToken, setUserInfo, userInfo, logout } return { token, setToken, setUserInfo, userInfo, logout }
}) })

@ -6,7 +6,8 @@ const props = defineProps({
required: true, required: true,
}, },
row: [Object], row: [Object],
categoryList: { current_parent_id: [String, Number],
originData: {
type: Array, type: Array,
default: [], default: [],
}, },
@ -57,6 +58,8 @@ if (!isAdd.value) {
formField.value = { formField.value = {
...props.row, ...props.row,
} }
} else {
formField.value.parent_id = props.current_parent_id
} }
</script> </script>
@ -78,6 +81,16 @@ if (!isAdd.value) {
v-loading="loading" v-loading="loading"
label-width="100" label-width="100"
> >
<el-form-item prop="parent_id" label="上级目录">
<el-select placeholder="请输入" v-model="formField.parent_id" disabled="">
<el-option
v-for="item in originData"
:value="item.id"
:label="item.name"
:key="item.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item prop="name" label="名称"> <el-form-item prop="name" label="名称">
<el-input placeholder="请输入" v-model="formField.name" /> <el-input placeholder="请输入" v-model="formField.name" />
</el-form-item> </el-form-item>

@ -14,12 +14,12 @@
placeholder="请输入" placeholder="请输入"
style="width: 220px" style="width: 220px"
v-model="queryParams.name" v-model="queryParams.name"
@keyup.enter="handleQuery" @keyup.enter="getList"
/> />
</el-form-item> </el-form-item>
<el-form-item label-width="100px"> <el-form-item label-width="100px">
<el-button icon="Search" type="primary" @click="handleQuery"> </el-button> <el-button icon="Search" type="primary" @click="getList"> </el-button>
<el-button icon="RefreshRight" @click="resetQuery"> </el-button> <el-button icon="RefreshRight" @click="resetQuery"> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -33,19 +33,23 @@
:data="tableData" :data="tableData"
v-loading="loading" v-loading="loading"
header-row-class-name="table-header" header-row-class-name="table-header"
row-key="id"
> >
<el-table-column align="center" label="名称" prop="name" show-overflow-tooltip /> <el-table-column label="名称" prop="name" show-overflow-tooltip />
<el-table-column align="center" label="字段" prop="code" show-overflow-tooltip /> <el-table-column align="center" label="字段" prop="code" show-overflow-tooltip />
<el-table-column align="center" label="描述" prop="description" show-overflow-tooltip /> <el-table-column align="center" label="描述" prop="description" show-overflow-tooltip />
<el-table-column align="center" label="类型" prop="type"> <el-table-column align="center" label="类型" prop="type" width="100">
<template #default="{ row }"> <template #default="{ row }">
<span v-if="row.type == 1"></span> <span v-if="row.type == 1"></span>
<span v-if="row.type == 2"></span> <span v-if="row.type == 2"></span>
<span v-if="row.type == 3"></span> <span v-if="row.type == 3"></span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column align="center" label="操作" width="120"> <el-table-column align="center" label="操作" width="180">
<template #default="{ row }"> <template #default="{ row }">
<el-button v-if="row.status != 1" link type="primary" @click="addChildren(row)">
添加子项
</el-button>
<el-button v-if="row.status != 1" link type="primary" @click="edit(row)"> <el-button v-if="row.status != 1" link type="primary" @click="edit(row)">
编辑 编辑
</el-button> </el-button>
@ -58,13 +62,13 @@
</el-table> </el-table>
</div> </div>
<pagination <!-- <pagination
v-show="total > 0" v-show="total > 0"
:total="total" :total="total"
v-model:limit="queryParams.limit" v-model:limit="queryParams.limit"
v-model:page="queryParams.page" v-model:page="queryParams.page"
@pagination="getList" @pagination="getList"
/> /> -->
<HandleDialog <HandleDialog
v-if="isShowDialog" v-if="isShowDialog"
@ -73,12 +77,15 @@
:categoryList="categoryList" :categoryList="categoryList"
@closed="isShowDialog = false" @closed="isShowDialog = false"
@on-success="getList" @on-success="getList"
:originData="originData"
:current_parent_id="current_parent_id"
/> />
</div> </div>
</template> </template>
<script setup> <script setup>
import { useTableRPC } from '@/utils/hook' import { useTableRPC } from '@/utils/hook'
import RPC from '@/utils/rpc'
import HandleDialog from './HandleDialog.vue' import HandleDialog from './HandleDialog.vue'
const rowType = ref('') const rowType = ref('')
@ -86,6 +93,13 @@ const currentRow = ref(null)
const add = () => { const add = () => {
isShowDialog.value = true isShowDialog.value = true
currentRow.value = null currentRow.value = null
current_parent_id.value = 0
rowType.value = 'add'
}
const addChildren = (row) => {
isShowDialog.value = true
currentRow.value = null
current_parent_id.value = row.id
rowType.value = 'add' rowType.value = 'add'
} }
const edit = (row) => { const edit = (row) => {
@ -94,31 +108,108 @@ const edit = (row) => {
currentRow.value = row currentRow.value = row
} }
const { const current_parent_id = ref(0)
loading,
tableData, // const {
tableRef, // loading,
searchFormRef, // tableData,
total, // tableRef,
queryParams, // searchFormRef,
getList, // total,
handleQuery, // queryParams,
resetQuery, // getList,
handleDelete, // handleQuery,
isShowDialog, // resetQuery,
maxHeight, // handleDelete,
tableContainerEl, // isShowDialog,
} = useTableRPC({ // maxHeight,
queryParams: {}, // tableContainerEl,
remoteDataFn: '/permission/list', // } = useTableRPC({
deleteConfig: { // queryParams: {},
remote: '/permission/delete', // remoteDataFn: '/permission/list',
key: 'id', // deleteConfig: {
message(row) { // remote: '/permission/delete',
return `确认删除 “${row.name}` // key: 'id',
}, // message(row) {
}, // return ` ${row.name}`
}) // },
// },
// })
const loading = ref(false)
const tableData = ref([])
const queryParams = ref({})
const isShowDialog = ref(false)
const transformParams = (params) => {
const _params = {
page: 1,
limit: -1,
orderby: params.orderby || null,
like: {},
}
for (const k in params) {
if (params[k] && k !== 'page' && k !== 'limit' && k !== 'orderby') {
_params.like[k] = [`%${params[k]}%`]
}
}
return _params
}
const handleDelete = (row) => {
ElMessageBox.confirm(`确认删除 “${row.name}`, '提醒', {
type: 'warning',
})
.then(() => {
RPC.post('/permission/delete', { id: row.id })
.then(() => {
getList()
ElMessage.success('删除成功')
})
.catch((e) => {
console.error(`删除失败:${e}`)
})
})
.catch(() => {
onError?.()
})
}
const resetQuery = () => {
queryParams.value = {}
getList()
}
function buildTree(data, rootId = 0) {
// 1. id -> 便
const map = {}
data.forEach((item) => {
map[item.id] = { ...item, children: [] }
})
// 2.
const tree = []
data.forEach((item) => {
const node = map[item.id]
if (item.parent_id === rootId) {
//
tree.push(node)
} else if (map[item.parent_id]) {
// children
map[item.parent_id].children.push(node)
}
})
return tree
}
const originData = ref([{ id: 0, name: '无' }])
const getList = () => {
loading.value = true
RPC.post('/permission/list', transformParams(queryParams.value))
.then((res) => {
console.log(res)
originData.value = [{ id: 0, name: '无' }, ...res.rows] || [{ id: 0, name: '无' }]
tableData.value = buildTree(res.rows || [])
})
.finally(() => {
loading.value = false
})
}
getList() getList()
</script> </script>

@ -1,13 +1,13 @@
<template> <template>
<div class="login"> <div class="login">
<div class="container"> <div class="titleBox">
<div class="titleBox"> <div class="col"></div>
<div class="col"></div> <div class="title">
<div class="title"> <!-- WELCOME -->
WELCOME <div class="text">智能电梯图纸生成后台</div>
<div class="text">智能电梯图纸生成后台</div>
</div>
</div> </div>
</div>
<div class="container">
<el-form ref="loginRef" class="login-form" :model="loginForm" :rules="loginRules"> <el-form ref="loginRef" class="login-form" :model="loginForm" :rules="loginRules">
<el-form-item prop="username"> <el-form-item prop="username">
<el-input <el-input
@ -105,8 +105,29 @@ const handleLogin = () => {
.login { .login {
height: 98vh; height: 98vh;
position: relative; position: relative;
background: center / cover url('@/assets/images/login/login_bg.jpg') no-repeat; background: center / cover url('@/assets/images/login/login_bg.png') no-repeat;
.titleBox {
font-size: 32px;
font-weight: bold;
display: flex;
color: #fff;
align-items: center;
position: fixed;
top: 40px;
left: 30px;
.col {
width: 1px;
height: 30px;
background-color: #fff;
margin-right: 20px;
}
.text {
font-size: 26px;
// margin-top: 10px;
}
}
.container { .container {
width: 380px; width: 380px;
position: absolute; position: absolute;
@ -114,26 +135,6 @@ const handleLogin = () => {
left: 50%; left: 50%;
transform: translate(-50%, -50%); transform: translate(-50%, -50%);
.titleBox {
font-size: 32px;
font-weight: bold;
display: flex;
color: #fff;
align-items: center;
.col {
width: 1px;
height: 86px;
background-color: #fff;
margin-right: 38px;
}
.text {
font-size: 26px;
margin-top: 10px;
}
}
.login-form { .login-form {
width: 380px; width: 380px;
margin: 60px 0; margin: 60px 0;

Loading…
Cancel
Save