2024-07-30 20:04:38 +08:00

234 lines
5.4 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="normal-container module-cfg-box">
<div class="header-box">
<a-space>
<a-input
v-model:value="modularName"
placeholder="请输入数据来源名称"
allow-clear
style="width: 200px"
@change="search"
/>
<a-select
placeholder="请选择项目"
v-model:value="projectId"
:options="projectSel"
allow-clear
style="width: 200px"
@change="search"
></a-select>
<a-button type="primary" @click="openCreateModal">新建</a-button>
</a-space>
</div>
<div class="content-box">
<a-table
:columns="moduleCfgCols"
:data-source="dataList"
:pagination="false"
size="small"
bordered
>
<template #bodyCell="{ column, record }">
<template v-if="column.dataIndex === 'is_show'">
<a-switch
:checked="record.is_show"
:checkedValue="1"
:unCheckedValue="0"
@change="toChangeStatus(record.modular_id, $event)"
/>
</template>
<template v-if="column.dataIndex === 'action'">
<a-space>
<a-button type="link" size="small" @click="openFieldModal(record)"
>字段管理</a-button
>
<a-button
type="link"
size="small"
@click="toGetModularDetail(record.modular_id)"
>编辑</a-button
>
<a-popconfirm
title="确定删除吗?"
@confirm="toDelete(record.modular_id)"
>
<a-button type="link" size="small">删除</a-button>
</a-popconfirm>
</a-space>
</template>
</template>
</a-table>
<a-pagination
v-model:current="pageState.page"
:total="pageState.total"
:page-size="pageState.perPage"
:hide-on-single-page="false"
size="small"
class="pagination-box"
@change="toGetModularList"
/>
</div>
<CreateModal
:width="700"
:open="modalState.visible"
:title="modalState.title"
:type="modalState.type"
:data="modalState.data"
:projectSelect="projectSel"
@cancel="modalState.visible = false"
@ok="toSave"
/>
<FieldModal
title="字段管理"
width="90%"
:open="fieldModalState.visible"
:modularId="fieldModalState.modularId"
@cancel="fieldModalState.visible = false"
/>
</div>
</template>
<script setup>
import { ref, reactive, onMounted } from "vue";
import { message } from "ant-design-vue";
import { moduleCfgCols } from "./config";
import {
getModularList,
deleteModular,
getModularDetail,
getProjectSelect,
saveModular,
updateStatus,
} from "./service";
import CreateModal from "./components/create-modal.vue";
import FieldModal from "./components/field-modal.vue";
const dataList = ref([]);
const listLoading = ref(false);
const saveLoading = ref(false);
const detailLoading = ref(false);
const modularName = ref("");
const projectId = ref();
const projectSel = ref([]);
const modalState = reactive({
title: "",
visible: false,
type: "", // add - 新建edit - 编辑
data: {},
});
const fieldModalState = reactive({
visible: false,
title: "",
modularId: undefined,
});
const pageState = reactive({
page: 1,
pageSize: 20,
total: 0,
});
onMounted(() => {
toGetModularList();
toGetProjectSel();
});
const toGetProjectSel = () => {
getProjectSelect().then((res) => {
projectSel.value = res.data;
});
};
const toGetModularList = () => {
listLoading.value = true;
getModularList({
page: pageState.page,
perPage: pageState.pageSize,
modularName: modularName.value,
projectId: projectId.value,
}).then((res) => {
dataList.value = res.data.list;
pageState.total = res.data.total;
listLoading.value = false;
});
};
// 详情
const toGetModularDetail = (modularId) => {
detailLoading.value = true;
modalState.visible = true;
modalState.title = "编辑";
modalState.type = "edit";
getModularDetail({ modularId })
.then((res) => {
modalState.data = res.data;
})
.finally(() => {
detailLoading.value = false;
});
};
// 保存
const toSave = (data) => {
saveLoading.value = true;
saveModular(data)
.then(() => {
message.success("保存成功");
modalState.visible = false;
toGetModularList();
})
.finally(() => {
saveLoading.value = false;
});
};
// 删除
const toDelete = (id) => {
deleteModular({ modular_id: id }).then(() => {
message.success("删除成功");
search();
});
};
const toChangeStatus = (id, status) => {
updateStatus({
modular_id: id,
status,
}).then(() => {
message.success("修改成功");
search();
});
};
// 点击新建
const openCreateModal = () => {
modalState.visible = true;
modalState.title = "新建";
modalState.type = "add";
modalState.data = {};
};
const search = () => {
pageState.page = 1;
toGetModularList();
};
const openFieldModal = (record) => {
fieldModalState.visible = true;
fieldModalState.modularId = record.modular_id;
};
</script>
<style lang="less">
.header-box {
margin-bottom: 10px;
}
.@{ant-prefix}-table-wrapper {
margin-bottom: 10px;
}
.pagination-box {
text-align: center;
}
</style>