234 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			234 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <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>
 | 
