<!-- @format --> <template> <ns-view-list-table v-bind="tableConfig" :model="data" ref="mainRef" rowKey="uuid" /> <ns-drawer v-bind="addDrawerConfig"> <ns-form ref="formRef" :schemas="formSchema" :model="formData" formLayout="vertical" /> <template #footer> <ns-button style="margin-right: 8px" @click="onClose">取消</ns-button> <ns-button type="primary" @click="operateForm" :disabled="!formDisabled">确定</ns-button> </template> </ns-drawer> <ns-drawer :width="600" :visible="borderVisible" :body-style="{ paddingBottom: '80px' }" :footer-style="{ textAlign: 'right' }" destroyOnClose @close="onClose"> <ns-button type="primary" @click="borderAdd">新增</ns-button> <ns-button type="primary" style="margin-left: 10px; margin-bottom: 10px" @click="borderAddSon" >新增子集</ns-button > <a-directory-tree @select="handleSelect" multiple :tree-data="treeData"> <template #title="{ title, key }"> {{ title }} <ns-button type="link" @click="editTree(title, key)">编辑</ns-button> <ns-button type="link" danger @click="deleteTree(title, key)">删除</ns-button> </template> </a-directory-tree> </ns-drawer> <ns-drawer v-bind="serverDrawer"> <ns-input-search placeholder="请选择开通模块" v-model:value="searchValue" style="margin-bottom: 8px" @search="onSearch" /> <a-tree v-if="treeData?.length" v-model:checkedKeys="checkedKeys" v-bind="serverTree" /> </ns-drawer> <TreeAdd ref="treeAdd" /> </template> <script lang="ts" setup> import { Modal } from 'ant-design-vue'; import { computed, createVNode, defineComponent, reactive, ref, watch } from 'vue'; import { http } from '/nerv-lib/util/http'; import { cloneDeep } from 'lodash-es'; import TreeAdd from './TreeAdd.vue'; import { ExclamationCircleOutlined } from '@ant-design/icons-vue'; import { h } from 'vue'; import { formConfig } from './config'; import { NsMessage } from '/nerv-lib/component'; import { mockData, treeData } from './mock'; import { enterPrise } from '/@/api/origanizemanage'; import { tableConfig as insertConfig } from './config'; defineOptions({ name: 'EnterpriseManageIndex', }); const data = reactive({}); const treeAdd = ref(); const mainRef = ref(); let formData = ref({}); const formRef = ref(); const searchValue = ref<string>(''); const checkedKeys = ref<string[]>([]); const visible = ref(false); const borderVisible = ref(false); const serviceVisible = ref(false); const treeAddVisible = ref(false); const formSchema = formConfig; const opType = ref<string>('add'); const calMap = { add: enterPrise.save, edit: enterPrise.edit, }; const comApi = computed(() => { return calMap[opType.value as keyof typeof calMap]; }); const tableConfig = computed(() => { return insertConfig({ visible, formData, opType, getOrgRandomCode, borderVisible, serviceVisible, server: { getTree, }, }); }); const getOrgRandomCode = () => { http.post(enterPrise.getCode).then((res) => { formData.value.orgCode = res.data; }); }; getOrgRandomCode(); const onClose = () => { visible.value = false; borderVisible.value = false; serviceVisible.value = false; }; // 企业表单drawer const addDrawerConfig = ref({ width: '520', visible: visible, footerStyle: { textAlign: 'right' }, destroyOnClose: true, onClose: onClose, }); const formDisabled = computed(() => { return formRef.value?.validateResult; }); //企业表单数据操作 const operateForm = () => { formRef.value?.triggerSubmit().then((res) => { console.log(formData.value, 'formData.value'); http.post(comApi.value, res).then(() => { NsMessage.success('操作成功'); visible.value = false; mainRef.value?.nsTableRef.reload(); }); }); }; // 服务操作逻辑区域 const serverOK = () => { serviceVisible.value = false; }; const ServiceSelect = (selectedKeys: any, info: any) => { console.log(selectedKeys, 'selectedKeys'); console.log(info, 'info'); }; const serverTree = ref({ checkable: true, onSelect: ServiceSelect, defaultExpandAll: true, treeData: treeData, fieldNames: { children: 'menus', title: 'label', key: 'code' }, }); const getTree = (params) => { http.post(enterPrise.permissionTree, params).then((res) => { treeData.value = res.data.data; }); }; // 开通服务模块drawer const serverDrawer = ref({ width: '450', visible: serviceVisible, footerStyle: { textAlign: 'right' }, ok: serverOK, cancel: onClose, }); // drawer form const opMap: any = { type: 'add', fuc: () => {}, record: {}, }; watch(checkedKeys, () => { console.log('checkedKeys', checkedKeys.value); }); const handleSelect = (selectedKeys: any, info: any) => { console.log(selectedKeys, 'selectedKeys'); console.log(info, 'info'); }; const borderAdd = () => { treeAddVisible.value = true; treeAdd.value?.toggle(); }; const borderAddSon = () => { treeAddVisible.value = true; }; const editTree = (title: any, key: any) => { console.log(title, 'title'); console.log(key, 'key'); }; const deleteTree = (title: any, key: any) => { console.log(title, 'title'); console.log(key, 'key'); Modal.confirm({ title: '是否确定删除', icon: createVNode(ExclamationCircleOutlined), content: createVNode('div', { style: 'color:red;' }, ''), onOk() { // http // .post('/api/parking_merchant/objs/gateInfo/delete', { // uuid: record.uuid, // }) // .then((res) => { // mainRef.value.nsTableRef.reload(); // }); }, onCancel() { console.log('Cancel'); }, class: 'test', }); }; const onSearch = () => { console.log(searchValue.value); }; </script>