map/ui/dasadmin/src/views/backend/auth/Enumeration/index.vue
2024-11-07 09:39:14 +08:00

734 lines
24 KiB
Vue

<template>
<div class="Enumeration">
<el-container class="containerPart">
<el-aside class="defaultAside">
<el-main class="treeMain">
<el-tree
style="max-width: 600px;margin-top: 2.2%"
ref="TypeTree"
:data="TypeData"
:props="defaultProps"
node-key="id"
@node-click="handleNodeClick"
@node-contextmenu="enumContextMenu"
/>
</el-main>
</el-aside>
<el-container class="defaultMainContainer">
<el-header class="defaultHeader">
<div class="searchPart">
<el-input v-model="queryName" class="searchInput" placeholder="按名称查询枚举名"></el-input>
<el-button @click="clickQuery" type="primary" :icon="Search" class="defaultBtn">查询</el-button>
</div>
<div class="btnPart">
<el-button type="primary" :icon="Plus" class="defaultBtn" @click="fromAddType">新增枚举类型</el-button>
<el-button type="primary" :icon="Plus" class="defaultBtn" @click="fromAddValue">新增枚举值</el-button>
</div>
</el-header>
<el-main class="mainPart">
<el-table :data="tableData" class="tablePart">
<!-- <el-table-column type="selection" width="55" />-->
<el-table-column prop="description" label="枚举描述" />
<el-table-column prop="value" label="枚举值" />
<el-table-column label="操作">
<template #default="scope">
<span style="color: #0064aa; cursor: pointer" @click="enumValueEdit(scope)">查看</span>
|
<span style="color: #0064aa; cursor: pointer" @click="fromDelete(scope)">删除</span>
</template>
</el-table-column>
</el-table>
<div class="mainFooter" style="display: flex; justify-content: right">
<el-pagination
v-model:current-page="currentPage"
v-model:page-size="currentPageSize"
:total="pageTotal"
:page-sizes="pagePagination"
background
:pager-count="7"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
layout="prev, pager, next, jumper,sizes,total"
></el-pagination>
</div>
</el-main>
</el-container>
<!--新增枚举类型-->
<el-dialog v-model="visibleTypeAdd" title="新增枚举类型" width="500" :before-close="handleClose">
<el-form
ref="formRef"
:inline="true"
:model="formInlineAdd"
:rules="rules"
style="padding: 24px 40px; font-size: 14px; line-height: 1.5; word-wrap: break-word; font-size: 20px"
>
<el-form-item label="名称:" prop="name">
<el-input v-model="formInlineAdd.name" placeholder="" clearable />
</el-form-item>
<el-form-item label="&nbsp;&nbsp;描述:">
<el-input v-model="formInlineAdd.description" placeholder="" clearable />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="onSubmitType">保存</el-button>
<el-button @click="visibleTypeAdd = false">取消</el-button>
</div>
</template>
</el-dialog>
<!--编辑枚举类型-->
<el-dialog v-model="visibleTypeEdit" title="编辑枚举类型" width="500" :before-close="handleCloseTypeEdit">
<el-form
ref="formRef"
:inline="true"
:model="formInlineEdit"
:rules="rules"
style="padding: 24px 40px; font-size: 14px; line-height: 1.5; word-wrap: break-word; font-size: 20px"
>
<el-form-item label="名称:" prop="name">
<el-input v-model="formInlineEdit.name" placeholder="" clearable />
</el-form-item>
<el-form-item label="&nbsp;&nbsp;描述:">
<el-input v-model="formInlineEdit.description" placeholder="" clearable />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="onSubmitTypeEdit">保存</el-button>
<el-button @click="visibleTypeEdit = false">取消</el-button>
</div>
</template>
</el-dialog>
<!--新增枚举值-->
<el-dialog v-model="visibleValueAdd" title="新增枚举值" width="500" :before-close="handleClosevalue">
<el-form
ref="formRef"
:inline="true"
:model="formInlineValue"
:rules="rules1"
style="padding: 24px 40px; font-size: 14px; line-height: 1.5; word-wrap: break-word; font-size: 20px"
>
<el-form-item label="枚举值:" prop="value">
<el-input v-model="formInlineValue.value" placeholder="" clearable />
</el-form-item>
<el-form-item label="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;描述:" prop="enumDesc">
<el-input v-model="formInlineValue.description" placeholder="" clearable />
</el-form-item>
<el-form-item label="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;排序:">
<el-input-number :min="0" v-model="formInlineValue.orderNumber" placeholder="" />
</el-form-item>
<el-form-item label="&nbsp;&nbsp;是否有效:">
<el-switch @change="addhandleSwitchChange"
:active-value="1"
:inactive-value="0"
v-model="formInlineValue.isActive" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="onSubmitvalue">保存</el-button>
<el-button @click="visibleValueAdd = false">取消</el-button>
</div>
</template>
</el-dialog>
<!-- 删除确认弹框 -->
<el-dialog v-model="dialogVisibleDelete" title="操作提示" width="500" :before-close="handleCloseDelete">
<span>确定是否删除?</span>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="dialogVisibleDelete1"> 确定 </el-button>
<el-button @click="dialogVisibleDelete = false">取消</el-button>
</div>
</template>
</el-dialog>
<!--编辑枚举值-->
<el-dialog v-model="visibleValueEdit" title="查看枚举值" width="500" :before-close="edithandleClosevalue">
<el-form
ref="formRef"
:inline="true"
:model="fromUpDate"
:rules="rules1"
style="padding: 24px 40px; font-size: 14px; line-height: 1.5; word-wrap: break-word; font-size: 20px"
>
<el-form-item label="枚举值:" prop="value">
<el-input v-model="fromUpDate.value" placeholder="" clearable />
</el-form-item>
<el-form-item label="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;描述:" prop="enumDesc">
<el-input v-model="fromUpDate.description" placeholder="" clearable />
</el-form-item>
<el-form-item label="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;排序:">
<el-input-number :min="0" v-model="fromUpDate.orderNumber" placeholder="" />
</el-form-item>
<el-form-item label="&nbsp;&nbsp;是否有效:">
<el-switch @change="edithandleSwitchChange"
:active-value="1"
:inactive-value="0"
v-model="fromUpDate.isActive" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="EditonSubmitvalue">保存</el-button>
<el-button @click="visibleValueEdit = false"> 取消 </el-button>
</div>
</template>
</el-dialog>
<ContextMenu :pos="enumcontextMenuPos" v-model:visible="enumOperateVisible">
<template #default>
<div class="modelOperate">
<el-button @click="enumTypeEdit(curnodeData)">修改</el-button>
<el-popconfirm title="确认删除?" @confirm="delenumType">
<template #reference>
<el-button @click.stop>删除</el-button>
</template>
</el-popconfirm>
</div>
</template>
</ContextMenu>
</el-container>
</div>
</template>
<script setup lang="ts">
import {nextTick, onMounted, reactive, ref} from 'vue'
import { Search, Plus } from '@element-plus/icons-vue'
import { ElMessage, FormRules } from 'element-plus'
import {
enumListQuery,
enumTreeQuery,
enumTypeAdd,
enumTypecurEdit,
enumTypeDelete,
enumValueAdd,
enumValueDelete,
enumValuepageEdit
} from "/@/api/backend/Enumeration/request";
import ContextMenu from '/@/views/backend/auth/model/contextMenu.vue'
import {delModelReq} from "/@/api/backend/deviceModel/request";
const activeName = ref('1')
interface Tree {
enumId: number,
enumName: string,
enumDesc: string,
}
const defaultProps = {
children: 'children',
label: 'description',
}
const tableData = ref()
//const TypeData=ref()
const TypeData=ref([{
id: 0,
name: "",
description: "枚举类型配置",
children: []
}])
const TypeTree = ref()
const formRef = ref()
const enumTypeId=ref()
// 搜索查询
const queryName = ref('')
const queryListData = reactive({
pageSize: 20,
pageNum: 1,
description: '',
enumTypeId: '',
})
const clickQuery = () => {
queryListData.description = queryName.value
queryenumValueMethod(queryListData)
}
const enumTreeTypeList = () => {
enumTreeQuery().then((res) => {
if (res.code == 200) {
//TypeData.value = res.data
TypeData.value[0].children = res.data
nextTick(() => {
enumTypeId.value=res.data[0]?.id
//TypeTree.value?.setCurrentKey(res.data[0]?.id!, false)
TypeTree.value?.setCurrentKey(TypeData.value[0].id!, false)
queryListData.description =queryName.value
queryListData.enumTypeId = res.data[0].id
queryListData.pageNum=currentPage.value,
queryListData.pageSize=currentPageSize.value
queryenumValueMethod(queryListData)
})
} else {
ElMessage.error({
message: res.msg,
type: 'error',
})
}
})
}
const queryParameter = ref()
const nodename = ref()
const curnodeData=ref({
id: '',
description: '',
name:''
})
const handleNodeClick = (data: any) => {
queryParameter.value = data
enumTypeId.value=data.id
queryListData.enumTypeId=data.id
queryListData.description=queryName.value
queryListData.pageNum=currentPage.value
queryListData.pageSize=currentPageSize.value
nodename.value=data.description
curnodeData.value.id=data.id
curnodeData.value.name=data.name
curnodeData.value.description=data.description
queryenumValueMethod(queryListData)
}
const currentPage = ref(1)
const currentPageSize = ref(20)
const pageTotal = ref(0)
const pagePagination = ref([20, 50, 100])
const handleSizeChange = (val: number) => {
queryListData.pageSize = val
queryenumValueMethod(queryListData)
}
const handleCurrentChange = (val: number) => {
queryListData.pageNum = val
queryenumValueMethod(queryListData)
}
//新增枚举类型
interface RuleForm {
name: string | undefined
description: string | undefined
}
const rules = reactive<FormRules<RuleForm>>({
name: [
{
required: true,
message: '名称不能为空',
trigger: 'blur',
}]
})
const visibleTypeAdd = ref(false)
const formInlineAdd = reactive<RuleForm>({
name: '',
description: ''
})
const fromAddType = () => {
visibleTypeAdd.value = true
formInlineAdd.name = ''
formInlineAdd.description =''
}
const handleClose = (done: () => void) => {
visibleTypeAdd.value = false
}
const onSubmitType = () => {
formRef.value.validate((valid: any) => {
if (valid) {
enumTypeAdd(formInlineAdd).then((res: any) => {
if (res.code == 200) {
enumTreeTypeList()
ElMessage({
message: res.msg,
type: 'success',
})
} else {
ElMessage.error({
message: res.msg,
type: 'error',
})
}
})
visibleTypeAdd.value = false
}
})
}
//新增枚举值
interface RuleForm1 {
enumTypeId: number | string
value: string
description: string| undefined
orderNumber: number
isActive: number
}
const rules1 = reactive<FormRules<RuleForm1>>({
value: [
{
required: true,
message: '值不能为空',
trigger: 'blur',
}]
})
const visibleValueAdd= ref(false)
const formInlineValue = reactive<RuleForm1>({
enumTypeId: enumTypeId.value,
value: ' ',
description: ' ',
orderNumber: 0,
isActive:0
})
const fromAddValue = () => {
visibleValueAdd.value= true
formInlineValue.enumTypeId =enumTypeId.value
formInlineValue.value = ''
formInlineValue.description = ''
formInlineValue.orderNumber =0
formInlineValue.isActive =0
}
const handleClosevalue = (done: () => void) => {
visibleValueAdd.value = false
}
const queryenumValueMethod = (data: any) => {
enumListQuery(data).then((res) => {
if (res.code == 200) {
tableData.value = res.data.rows
pageTotal.value = res.data.total
} else {
ElMessage.error({
message: res.msg,
type: 'error',
})
}
})
}
const onSubmitvalue = () => {
formRef.value.validate((valid: any) => {
if (valid) {
enumValueAdd(formInlineValue).then((res: any) => {
if (res.code == 200) {
queryListData.description =queryName.value
queryListData.enumTypeId = enumTypeId.value
queryListData.pageNum=currentPage.value,
queryListData.pageSize=currentPageSize.value
queryenumValueMethod(queryListData)
ElMessage({
message: res.msg,
type: 'success',
})
} else {
ElMessage.error({
message: res.msg,
type: 'error',
})
}
})
visibleValueAdd.value = false
}
})
}
// 删除
const fromDeleteData = reactive({
id: '',
})
interface fromDelete {
row?: any[]
}
const fromDelete = (data: any) => {
dialogVisibleDelete.value = true
fromDeleteData.id = data.row.id
}
// 删除提示弹框
const dialogVisibleDelete = ref(false)
const handleCloseDelete = (done: () => void) => {
dialogVisibleDelete.value = false
}
const dialogVisibleDelete1 = (done: () => void) => {
dialogVisibleDelete.value = false
enumValueDelete(fromDeleteData).then((res) => {
if (res.code == 200) {
setTimeout(() => {
ElMessage({
message: res.msg,
type: 'success',
})
}, 1000)
const queryData2 = {
description: queryName.value,
enumTypeId: enumTypeId.value,
pageNum: currentPage.value,
pageSize: currentPageSize.value,
}
queryenumValueMethod(queryData2)
} else {
ElMessage.error({
message: res.msg,
type: 'error',
})
}
})
}
// 编辑枚举值
const fromUpDate = reactive({
id: '',
enumTypeId: '',
value:'',
description : '',
orderNumber: 0,
isActive: 0
})
const addhandleSwitchChange = (value: any) => {
formInlineValue.isActive = value ? 1 : 0
}
const edithandleSwitchChange = (value: any) => {
fromUpDate.isActive = value ? 1 : 0
}
const visibleValueEdit = ref(false)
const enumValueEdit = (data: any) => {
visibleValueEdit.value = true
fromUpDate.id = data.row.id
fromUpDate.enumTypeId = data.row.enumTypeIdStr
fromUpDate.value = data.row.value
fromUpDate.description = data.row.description
fromUpDate.orderNumber = data.row.orderNumber
fromUpDate.isActive = data.row.isActive
}
const edithandleClosevalue = (done: () => void) => {
visibleValueEdit.value = false
}
const EditonSubmitvalue = () => {
formRef.value.validate((valid: any) => {
if (valid) {
enumValuepageEdit(fromUpDate).then((res: any) => {
if (res.code == 200) {
queryListData.description =queryName.value
queryListData.enumTypeId = enumTypeId.value
queryListData.pageNum=currentPage.value,
queryListData.pageSize=currentPageSize.value
queryenumValueMethod(queryListData)
ElMessage({
message: res.msg,
type: 'success',
})
} else {
ElMessage.error({
message: res.msg,
type: 'error',
})
}
})
visibleValueEdit.value = false
}
})
}
const visibleTypeEdit=ref(false)
const formInlineEdit=reactive({
id:'',
name: '',
description: ''
})
const enumTypeEdit = (curnodeData) => {
visibleTypeEdit.value=true
formInlineEdit.id = curnodeData.id
formInlineEdit.name = curnodeData.name
formInlineEdit.description = curnodeData.description
}
const handleCloseTypeEdit = (done: () => void) => {
visibleTypeEdit.value = false
}
const onSubmitTypeEdit = () => {
formRef.value.validate((valid: any) => {
if (valid) {
enumTypecurEdit(formInlineEdit).then((res: any) => {
if (res.code == 200) {
enumTreeTypeList()
ElMessage({
message: res.msg,
type: 'success',
})
} else {
ElMessage.error({
message: res.msg,
type: 'error',
})
}
})
visibleTypeEdit.value = false
}
})
}
const contextMenuTreeData=ref({
id:'',
name: '',
description: ''
})
const enumOperateVisible = ref(false)
const enumcontextMenuPos = ref({
x: 0,
y: 0,
})
const enumContextMenu = (event: any,curnodeData) => {
enumcontextMenuPos.value.x = event.pageX
enumcontextMenuPos.value.y = event.pageY
contextMenuTreeData.value = curnodeData
if(nodename.value=="枚举类型配置"||nodename.value==undefined){
enumOperateVisible.value = false
}else{
enumOperateVisible.value = true
}
}
const delenumType = () => {
enumTypeDelete({ id: contextMenuTreeData.value!.id! })
.then((res) => {
if (res.code == 200) {
enumTreeTypeList()
ElMessage({
message: res.msg,
type: 'success',
})
} else {
ElMessage.error({
message: res.msg,
type: 'error',
})
}
})
.catch((err) => {
ElMessage.error(err?.response?.data?.msg ?? '删除失败')
})
}
onMounted(() => {
enumTreeTypeList()
})
</script>
<style scoped lang="scss">
$defaultHeaderHeight: 60px;
@mixin searchInput($value) {
margin-right: $value;
width: 220px;
height: 40px;
}
$paginationHeight: 32px;
.Enumeration{
width: 100%;
height: 100%;
.containerPart{
height: 100%;
.defaultAside{
width: 260px;
height: 100%;
border-right: 1px solid #eaebed;
.el-main{
.demo-collapse{
.el-collapse{
border: none;
border-color: transparent;
}
.el-collapse-item{
:deep(.el-collapse-item__arrow){
pointer-events: auto;
}
.collapse-title {
flex: 1 0 90%;
order: 1;
}
:deep(.el-collapse-item__header){
background: #d0e5f2;
border-radius: 4px;
padding-left: 10px;
text-align:left
}
:deep(.el-collapse-item__wrap){
border: none;
border-color: transparent;
}
}
}
}
.treeMain{
.treeTitle{
height:40px;
background: #d0e5f2;
line-height: 40px;
display: inline-block;
width: 100%;
border-radius: 4px;
padding-left: 10px;
}
}
}
.defaultMainContainer{
height: 100%;
.defaultHeader{
display: flex;
justify-content: space-between;
align-items: center;
height: $defaultHeaderHeight;
.searchPart {
display: flex;
justify-content: space-between;
align-items: center;
}
.defaultBtn {
height: 40px;
}
.searchInput {
@include searchInput(10px);
}
}
.tablePart {
height: calc(100% - $paginationHeight);
}
}
.el-form--inline .el-form-item{
width: 100%;
}
}
.modelOperate{
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: center;
width: 80px;
height: 80px;
.el-button {
margin: 0;
}
}
}
</style>