<template>
|
<PageWrapper dense contentFullHeight fixedHeight contentClass="flex">
|
<CustTree
|
class="w-1/4 xl:w-1/5"
|
@select="handleSelect"
|
:title="title"
|
:treeData="treeData"
|
:create-icon="createIcon"
|
:fieldNames="fieldNames"
|
/><!--
|
add
|
@handle-add="handleAdd" -->
|
<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]"
|
/>
|
<NormalModal
|
@register="useModalData[name][0]"
|
@success="(d, u) => handleEntSuccess(d, u, item.name)"
|
/>
|
</template>
|
</BasicForm>
|
<!-- 自定义内容 -->
|
</template>
|
</CustModal>
|
</PageWrapper>
|
</template>
|
<script lang="ts" setup>
|
import { BasicTable, useTable, TableAction } from '@/components/Table';
|
import { getEntity, getRoleListByPage, convertToTree } from '@/api/tigerapi/system';
|
import { PageWrapper } from '@/components/Page';
|
import CustTree from './CustTree.vue';
|
import { useModal } from '@/components/Modal';
|
import normalDrawer from '../normalDrawer.vue';
|
import NormalModal from '/@/views/components/NormalModal.vue';
|
import CustModal from '/@/views/components/CustModal.vue';
|
import { columns, searchFormSchema } from './dept.data';
|
import {
|
GetActionsData,
|
GetSelectSuccess,
|
OpenCustModal,
|
fetchTreeData,
|
getFormSchema,
|
getOthersValues,
|
} from '../data';
|
import { onMounted, 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 { createIconByType } from '../data';
|
import { RouteToProd } from '/@/api/tigerapi/mes/router';
|
|
defineOptions({ name: 'DeptManagement' });
|
|
const route = useRoute();
|
const objParams = ref(JSON.parse(decodeURI(route.params?.id as string)));
|
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 others = ref(getOthersValues(entityName.value, objParams.value.CODE, objParams.value.ID));
|
const [registerCust, { openModal: openCustomModal, closeModal }] = useModal();
|
const [registerItemAdd, { openModal: openItemModal }] = useModal();
|
const [registerDrawer, { openDrawer }] = useDrawer();
|
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) {
|
//根据type获取树形数据
|
const data = await fetchTreeData(type);
|
title.value = data.title;
|
treeData.value = data.treeData;
|
fieldNames.value = data.fieldNames;
|
}
|
|
// function handleAdd(){
|
// console.log('handleAdd');
|
// }
|
|
/**
|
* @description: 树形节点图标
|
* @param {*} params
|
* @param {*} type
|
* @return {*}
|
*/
|
function createIcon(params: Recordable<any>) {
|
return createIconByType(params, entityName.value);
|
}
|
|
onMounted(() => {
|
fetch(entityName.value);
|
});
|
|
/**
|
* @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 handleCreate() {
|
// validate().then((res) => {
|
// const Keys = Object.getOwnPropertyNames(useFormData.value);
|
// let i;
|
// for (i = 0; i < Keys.length; i++) {
|
// others.value[objParams.value.pCode] = objParams.value.IsID
|
// ? res[Keys[i]]['ID']
|
// : res[Keys[i]][objParams.value.pCode];
|
// }
|
// openDrawer(true, {
|
// isUpdate: false,
|
// ifSave: true,
|
// entityName: entityName.value,
|
// formJson: getFormSchema(`${entityName.value}_Crud`),
|
// crudColSlots,
|
// others: others.value,
|
// });
|
// });
|
RouteToProd({rotId: 'e4712192f75b465585107fdcd13d8003', prodCode: 'K5019AA013517'}).then(() => {
|
|
});
|
}
|
|
// function handleEdit(record: Recordable) {
|
// openModal(true, {
|
// record,
|
// isUpdate: true,
|
// });
|
// }
|
|
// function handleDelete(record: Recordable) {
|
// console.log(record);
|
// }
|
|
function handleSelect(deptId = '') {
|
searchInfo.deptId = deptId;
|
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) {
|
var values = GetSelectSuccess(d, u, cType.value);
|
selectVals.value = values; //保存弹出框选择的结果
|
let _val = {};
|
_val[d.returnFieldName] = values[d.returnFieldName];
|
useFormData.value[item][1].setFieldsValue(_val);
|
}
|
|
/**
|
* @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>
|