<template>
|
<PageWrapper
|
:dense="dense"
|
contentFullHeight
|
fixedHeight
|
contentClass="flex"
|
:title="pageTitle"
|
:content="pageContent"
|
@back="goBack"
|
>
|
<GeneralTree
|
class="w-1/4 xl:w-1/5"
|
v-if="isMounted"
|
@select="handleSelect"
|
@UnSelect="UnSelect"
|
:title="title"
|
:treeData="treeData"
|
:create-icon="createIcon"
|
:fieldNames="fieldNames"
|
/><!--
|
add
|
@handle-add="handleAdd" -->
|
<div class="w-3/4 xl:w-4/5 p-5">
|
<RouteAction v-if="entityName == 'ProdRouteBinding' && rotType == 'Product'" />
|
</div>
|
<!-- <BasicTable class="w-3/4 xl:w-4/5" @register="registerTable">
|
<template #toolbar>
|
<a-button type="primary" @click="handleCreate" preIcon="add_02|svg"> 新增 </a-button>
|
</template>
|
<template #bodyCell="{ column, record }">
|
<template v-if="column.key === 'action'">
|
<TableAction :actions="createActions(record)" />
|
</template>
|
</template>
|
</BasicTable> -->
|
<!-- <normalDrawer @register="registerDrawer" @success="handleSuccess" /> -->
|
<CustModal
|
@register="registerCust"
|
@success="custSuccess"
|
:type="cType"
|
:detailSlots="dtlSlots"
|
>
|
<!-- 用插槽自定义多表单 -->
|
<template #[item.name] v-for="item in dtlSlots" :key="item.name">
|
<BasicForm @register="useFormData[item.name][0]" v-if="useFormData[item.name]">
|
<!-- 用插槽自定义弹出选择框 -->
|
<template #[name]="{ field }" v-for="name in item.slots" :key="name">
|
<a-button
|
class="mt-1 ml-1"
|
size="small"
|
@click="handleCustClick(field)"
|
:preIcon="item.preIcons[name]"
|
/>
|
<GeneralModal
|
@register="useModalData[name][0]"
|
@success="(d, u) => handleEntSuccess(d, u, item.name)"
|
/>
|
</template>
|
</BasicForm>
|
<!-- 自定义内容 -->
|
</template>
|
</CustModal>
|
</PageWrapper>
|
</template>
|
<script lang="ts" setup>
|
import { PageWrapper } from '@/components/Page';
|
import GeneralTree from '/@/views/components/GeneralTree.vue';
|
import { useModal } from '@/components/Modal';
|
import GeneralModal from '/@/views/components/GeneralModal.vue';
|
import RouteAction from './RouteAction.vue';
|
import CustModal from '/@/views/components/CustModal.vue';
|
import { OpenCustModal, getOthersValues } from '../data';
|
import { Ref, onMounted, provide, reactive, ref } from 'vue';
|
import { useRoute } from 'vue-router';
|
import { useDrawer } from '/@/components/Drawer';
|
import { BasicForm, useForm } from '/@/components/Form/index';
|
import { TreeItem } from '/@/components/TigerTree';
|
import { useTabs } from '/@/hooks/web/useTabs';
|
import { isNullOrUnDef } from '/@/utils/is';
|
import { useGo } from '/@/hooks/web/usePage';
|
|
defineOptions({ name: 'DeptManagement' });
|
|
const go = useGo();
|
const route = useRoute();
|
const { setTitle } = useTabs();
|
const objParams = ref(JSON.parse(decodeURI(route.params?.id as string))); //ref(JSON.parse(history.state.obj))
|
const entityName = ref(objParams.value.Name);
|
const formSchemas = ref({}); //弹出框或高级页面多表单结构
|
const useModalData = ref({}); //表单中插槽渲染按钮打开模态框useModal方法
|
const useFormData = ref({});
|
const colSlots = ref<any>(objParams.value.colSlots); //按钮插槽
|
const crudColSlots = ref<any>(objParams.value.crudColSlots);
|
const cType = ref('');
|
const dtlSlots = ref([] as any[]);
|
const selectVals = ref({});
|
const baseCards = ref([] as any[]);
|
const otherCards = ref([] as any[]);
|
const searchInfo = reactive<Recordable>({});
|
const treeData = ref<TreeItem[]>([]);
|
const title = ref('');
|
const fieldNames = ref({});
|
const dense = isNullOrUnDef(objParams.value.dense) ? ref(false) : ref(objParams.value.dense);
|
const pageTitle = ref(objParams.value.pageTitle);
|
const pageContent = ref(objParams.value.pageContent);
|
const others = ref(getOthersValues(entityName.value, objParams.value.CODE, objParams.value.ID));
|
const prodCode = ref('');
|
const rotType = ref('');
|
const isMounted = ref(false);
|
const custImport = ref(null);
|
const [registerCust, { openModal: openCustomModal, closeModal }] = useModal();
|
const [registerItemAdd, { openModal: openItemModal }] = useModal();
|
const [registerDrawer, { openDrawer }] = useDrawer();
|
provide<Ref<string>>('prodCode', prodCode);
|
setTitle(objParams.value.Title); //设置标签页标题
|
// const [registerTable, { reload }] = useTable({
|
// title: '列表信息',
|
// api: getRoleListByPage,
|
// columns,
|
// formConfig: {
|
// labelWidth: 120,
|
// schemas: searchFormSchema,
|
// },
|
// pagination: false,
|
// striped: false,
|
// useSearchForm: true,
|
// showTableSetting: true,
|
// bordered: true,
|
// showIndexColumn: false,
|
// canResize: false,
|
// actionColumn: {
|
// width: 80,
|
// title: '操作',
|
// dataIndex: 'action',
|
// // slots: { customRender: 'action' },
|
// fixed: undefined,
|
// },
|
// });
|
|
/**
|
* @description: 获取树形数据
|
* @param {*} type
|
* @return {*}
|
*/
|
async function fetch(type: string) {
|
if (!isNullOrUnDef(custImport.value)) {
|
const [{ fetchTreeData }] = custImport.value.default();
|
//根据type获取树形数据
|
const data = await fetchTreeData(type, objParams.value.CODE);
|
title.value = data.title;
|
treeData.value = data.treeData;
|
fieldNames.value = data.fieldNames;
|
}
|
}
|
|
/**
|
* @description: 页面左侧点击返回链接时的操作
|
* @return {*}
|
*/
|
function goBack() {
|
if (!isNullOrUnDef(custImport.value)) {
|
const [{ GetHomeUrl }] = custImport.value.default();
|
// 本例的效果时点击返回始终跳转到账号列表页,实际应用时可返回上一页
|
go(GetHomeUrl(entityName.value));
|
}
|
}
|
|
// function handleAdd(){
|
// console.log('handleAdd');
|
// }
|
|
/**
|
* @description: 树形节点图标
|
* @param {*} params
|
* @param {*} type
|
* @return {*}
|
*/
|
function createIcon(params: Recordable<any>) {
|
if (isNullOrUnDef(custImport.value)) {
|
return '';
|
} else {
|
const [{CreateIcon}] = custImport.value.default();
|
return CreateIcon(params);
|
}
|
}
|
|
onMounted(async () => {
|
isMounted.value = false;
|
/* 动态import实体名.ts的自定义方法 */
|
try {
|
custImport.value = await import(/* @vite-ignore */ `../entityts/${entityName.value}`);
|
await fetch(entityName.value);
|
isMounted.value = true;
|
} catch (e) {}
|
});
|
|
/**
|
* @description: 生成列表中操作项的按钮
|
* @param {*} record
|
* @return {*}
|
*/
|
function createActions(record) {
|
// return GetActionsData(
|
// {
|
// record,
|
// isUpdate: true,
|
// ifSave: true,
|
// entityName: entityName.value,
|
// formJson: getFormSchema(`${entityName.value}_Crud`),
|
// cType,
|
// dtlSlots,
|
// useModalData,
|
// useFormData,
|
// crudColSlots,
|
// },
|
// openDrawer,
|
// reload,
|
// openCustomModal,
|
// useForm,
|
// useModal,
|
// );
|
}
|
|
/**
|
* @description: 验证表单
|
* @return {*}
|
*/
|
async function validate() {
|
let validates = {};
|
const Keys = Object.getOwnPropertyNames(useFormData.value);
|
let i;
|
for (i = 0; i < Keys.length; i++) {
|
validates[Keys[i]] = await useFormData.value[Keys[i]][1].validate();
|
}
|
return validates;
|
}
|
|
// function handleEdit(record: Recordable) {
|
// openModal(true, {
|
// record,
|
// isUpdate: true,
|
// });
|
// }
|
|
// function handleDelete(record: Recordable) {
|
// console.log(record);
|
// }
|
|
function handleSelect(deptId = '', info) {
|
searchInfo.deptId = deptId;
|
prodCode.value = info.selectedNodes[0].code;
|
rotType.value = info.selectedNodes[0].type;
|
// reload();
|
}
|
|
/**
|
* @description: 取消选择时事件返回方法
|
* @param {*} node
|
* @return {*}
|
*/
|
function UnSelect(node) {
|
prodCode.value = '';
|
rotType.value = '';
|
// reload();
|
}
|
|
// function handleSuccess() {
|
// reload();
|
// }
|
|
/**
|
* @description: 弹出框确定返回
|
* @param {*} d
|
* @return {*}
|
*/
|
function custSuccess(d) {
|
// reload();
|
}
|
|
/**
|
* @description: 各表单内弹出选择框选择成功后方法
|
* @param {*} d
|
* @param {*} u
|
* @param {*} item
|
* @return {*}
|
*/
|
function handleEntSuccess(d, u, item) {
|
/* 动态import实体名.ts的自定义方法 */
|
try {
|
import(/* @vite-ignore */ `../entityts/${cType.value}`).then((m) => {
|
const [{ GetSelectSuccess }] = m.default();
|
var values = GetSelectSuccess(d, u);
|
selectVals.value = values; //保存弹出框选择的结果
|
let _val = {};
|
_val[d.returnFieldName] = values[d.returnFieldName];
|
useFormData.value[item][1].setFieldsValue(_val);
|
});
|
} catch (e) {}
|
}
|
|
/**
|
* @description: 打开自定义模态框
|
* @param {*} item
|
* @return {*}
|
*/
|
function handleCustClick(item) {
|
OpenCustModal(
|
useModalData.value[item][1].openModal, //带入openModal方法
|
cType.value,
|
item,
|
[],
|
// selectVals.value['ROUTE_CODE'],
|
); //[openRvModal], selectVals.value['ID']这是自定义参数,按实际需求
|
}
|
</script>
|