284 lines
6.5 KiB
Vue
284 lines
6.5 KiB
Vue
<template>
|
||
|
||
<a-list-layout>
|
||
<template #search>
|
||
<a-alert message="数据字典:用户Online列表,用于系统在线用户监控" type="info" style="margin-top: 1px;" />
|
||
</template>
|
||
<pro-table rowKey="id" ref="tableRef" :fetch="fetch" :columns="columns" :toolbar="toolbar" :operate="operate"
|
||
:param="state.param" :pagination="pagination"
|
||
:row-selection="{ selectedRowKeys: state.selectedRowKeys, onChange: onSelectChange }">
|
||
</pro-table>
|
||
<!-- 字典数据抽屉容器:统一用抽屉承载,内部组件负责渲染内容 -->
|
||
<a-drawer
|
||
:visible="state.visibleData"
|
||
:width="720"
|
||
title="字典数据"
|
||
destroyOnClose
|
||
@close="state.visibleData = false"
|
||
>
|
||
<dictData :visible="true" :record="state.recordData" @close="state.visibleData = false" />
|
||
</a-drawer>
|
||
</a-list-layout>
|
||
<save :visible="state.visibleSave" @close="closeSave"></save>
|
||
<edit :visible="state.visibleEdit" @close="closeEdit" :record="state.recordEdit"></edit>
|
||
|
||
</template>
|
||
<script>
|
||
import save from './modal/save.vue';
|
||
import edit from './modal/edit.vue';
|
||
import data from './modal/data.vue';
|
||
import {
|
||
message,
|
||
Modal as modal
|
||
} from '@hwork/ant-design-vue';
|
||
import {
|
||
ExclamationCircleOutlined
|
||
} from '@ant-design/icons-vue';
|
||
import {
|
||
page,
|
||
change,
|
||
remove,
|
||
removeBatch
|
||
} from "@/api/module/dict";
|
||
import {
|
||
reactive,
|
||
createVNode,
|
||
ref
|
||
} from 'vue';
|
||
|
||
const removeKey = "remove";
|
||
const removeBatchKey = "removeBatch";
|
||
|
||
export default {
|
||
components: {
|
||
save,
|
||
edit,
|
||
dictData: data,
|
||
},
|
||
setup() {
|
||
|
||
const tableRef = ref()
|
||
|
||
const switchFormat = {
|
||
yes: true,
|
||
no: false,
|
||
event: function (value, record) {
|
||
// record.enable = !record.enable;
|
||
record.enable = value;
|
||
change({
|
||
"id": record.id,
|
||
"enable": record.enable
|
||
})
|
||
tableRef.value.reload();
|
||
return record;
|
||
// return value;
|
||
}
|
||
}
|
||
|
||
const columns = [
|
||
{
|
||
dataIndex: "index",
|
||
key: "index",
|
||
title: "序号",
|
||
width: 60,
|
||
fixed: 'left',
|
||
align: 'center'
|
||
},
|
||
{
|
||
dataIndex: "code",
|
||
key: "code",
|
||
title: "标识",
|
||
width: 150
|
||
},
|
||
{
|
||
dataIndex: "enable",
|
||
key: "enable",
|
||
title: "状态",
|
||
width: 100,
|
||
switch: switchFormat
|
||
},
|
||
{
|
||
dataIndex: "name",
|
||
key: "name",
|
||
title: "名称",
|
||
}
|
||
];
|
||
|
||
/// 数据来源 [模拟]
|
||
const fetch = async (param) => {
|
||
var response = await page(param);
|
||
return {
|
||
total: response.data.total,
|
||
data: response.data.record,
|
||
};
|
||
};
|
||
|
||
/// 删除角色
|
||
const removeMethod = (record) => {
|
||
modal.confirm({
|
||
title: '您是否确定要删除此字典?',
|
||
icon: createVNode(ExclamationCircleOutlined),
|
||
okText: '确定',
|
||
cancelText: '取消',
|
||
onOk() {
|
||
message.loading({
|
||
content: "提交中...",
|
||
key: removeKey
|
||
});
|
||
remove({
|
||
"id": record.id
|
||
}).then((response) => {
|
||
if (response.success) {
|
||
message.success({
|
||
content: "删除成功",
|
||
key: removeKey,
|
||
duration: 1
|
||
}).then(() => {
|
||
tableRef.value.reload()
|
||
})
|
||
} else {
|
||
message.error({
|
||
content: "删除失败",
|
||
key: removeKey,
|
||
duration: 1
|
||
})
|
||
}
|
||
})
|
||
}
|
||
});
|
||
}
|
||
|
||
/// 批量删除
|
||
const removeBatchMethod = (ids) => {
|
||
modal.confirm({
|
||
title: '您是否确定要删除选择字典?',
|
||
icon: createVNode(ExclamationCircleOutlined),
|
||
okText: '确定',
|
||
cancelText: '取消',
|
||
onOk() {
|
||
message.loading({
|
||
content: "提交中...",
|
||
key: removeBatchKey
|
||
});
|
||
removeBatch({
|
||
"ids": ids
|
||
}).then((response) => {
|
||
if (response.success) {
|
||
message.success({
|
||
content: "删除成功",
|
||
key: removeBatchKey,
|
||
duration: 1
|
||
}).then(() => {
|
||
tableRef.value.reload()
|
||
})
|
||
} else {
|
||
message.error({
|
||
content: "删除失败",
|
||
key: removeBatchKey,
|
||
duration: 1
|
||
})
|
||
}
|
||
})
|
||
}
|
||
});
|
||
}
|
||
|
||
/// 工具栏
|
||
const toolbar = [{
|
||
label: "新增",
|
||
icon: 'PlusOutlined',
|
||
event: function () {
|
||
state.visibleSave = true
|
||
}
|
||
},
|
||
{
|
||
label: "删除",
|
||
icon: 'DeleteOutlined',
|
||
danger: true,
|
||
event: function () {
|
||
removeBatchMethod(state.selectedRowKeys)
|
||
}
|
||
},
|
||
{
|
||
label: "强制更新缓存",
|
||
icon: 'ReloadOutlined',
|
||
event: function () {
|
||
removeBatchMethod(state.selectedRowKeys)
|
||
}
|
||
},
|
||
];
|
||
|
||
/// 行操作
|
||
const operate = [{
|
||
label: "查看",
|
||
event: function (record) {
|
||
state.visibleData = true, state.recordData = record
|
||
}
|
||
},
|
||
{
|
||
label: "修改",
|
||
event: function (record) {
|
||
state.visibleEdit = true, state.recordEdit = record
|
||
},
|
||
},
|
||
{
|
||
label: "删除",
|
||
isDel: true,
|
||
event: function (record) {
|
||
removeMethod(record)
|
||
}
|
||
},
|
||
];
|
||
|
||
const pagination = {
|
||
pageNum: 1,
|
||
pageSize: 20,
|
||
showSizeChanger: true, // 显示可改变每页条数
|
||
pageSizeOptions: ["10", "20", "50", "100"], // 每页条数选项设置
|
||
showTotal: total => `共 ${total} 条记录`, // 显示总条数
|
||
showSizeChange: (current, pageSize) => (this.pageSize = pageSize) // 改变每页条数时更新显示
|
||
};
|
||
|
||
const state = reactive({
|
||
selectedRowKeys: [],
|
||
param: {
|
||
name: "",
|
||
code: ""
|
||
},
|
||
visibleEdit: false,
|
||
visibleSave: false,
|
||
visibleData: false,
|
||
recordData: {},
|
||
recordEdit: {},
|
||
});
|
||
|
||
const onSelectChange = selectedRowKeys => {
|
||
state.selectedRowKeys = selectedRowKeys;
|
||
};
|
||
|
||
const closeSave = function () {
|
||
state.visibleSave = false
|
||
tableRef.value.reload()
|
||
}
|
||
|
||
const closeEdit = function () {
|
||
state.visibleEdit = false
|
||
tableRef.value.reload()
|
||
}
|
||
|
||
return {
|
||
state,
|
||
fetch,
|
||
toolbar,
|
||
columns,
|
||
operate,
|
||
closeSave,
|
||
closeEdit,
|
||
pagination,
|
||
onSelectChange,
|
||
tableRef
|
||
};
|
||
},
|
||
};
|
||
</script>
|