You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

221 lines
6.0 KiB

<!-- @format -->
<template>
<ns-view-list-table v-bind="tableConfig" :model="data" ref="mainRef" rowKey="uuid" />
10 months ago
<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>
10 months ago
</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,
},
});
});
10 months ago
const getOrgRandomCode = () => {
http.post(enterPrise.getCode).then((res) => {
formData.value.orgCode = res.data;
10 months ago
});
};
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,
10 months ago
footerStyle: { textAlign: 'right' },
ok: serverOK,
cancel: onClose,
10 months ago
});
// 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>