<!--
|
* @Description: 低代码呈现页面
|
* @Author: Ben Lin
|
* @version:
|
* @Date: 2024-05-30 13:28:20
|
* @LastEditors: Ben Lin
|
* @LastEditTime: 2024-08-06 19:57:41
|
-->
|
<template>
|
<div>
|
<Suspense>
|
<mainTable />
|
</Suspense>
|
</div>
|
</template>
|
<script lang="ts" setup>
|
import { Ref, h, onMounted, provide, ref, unref, watch } from 'vue';
|
import mainTable from './mainTable.vue';
|
import { GetEnum, getEntity, getListByPage } from '/@/api/tigerapi/system';
|
import { useRoute, useRouter } from 'vue-router';
|
import { Tag, Tooltip } from 'ant-design-vue';
|
import { isNullOrEmpty, isNullOrUnDef } from '/@/utils/is';
|
import { custOnChange, OpenCustModal, GetUseModalData, initRoute } from '../data';
|
import { useLocale } from '/@/locales/useLocale';
|
import { uploadApi } from '/@/api/sys/upload';
|
import { useGo } from '/@/hooks/web/usePage';
|
import { useI18n } from '/@/hooks/web/useI18n';
|
import { getRoleButtons } from '/@/api/sys/menu';
|
import { EntityCustFunctionType } from '/@/api/tigerapi/model/basModel';
|
import { isFunction } from 'xe-utils';
|
|
const { getLocale } = useLocale();
|
const { t } = useI18n();
|
const route = useRoute();
|
const { currentRoute } = useRouter();
|
const go = useGo();
|
const objParams = ref(JSON.parse(decodeURI(route.params?.id as string)));
|
const entityName = ref(objParams.value.ID);
|
const _columns = ref<any[]>([]);
|
const _searchFormSchema = ref<any[]>([]);
|
const _crudFormSchema = ref<any[]>([]);
|
const useModalData = ref({}); //表单中插槽渲染按钮打开模态框useModal方法
|
const isExistSql = ref('');
|
const custImport = ref<any[]>([]);
|
const isMounted = ref(false);
|
const buttons = ref([]);
|
const AuthOption = ref({
|
BY_ORG: '',
|
BY_PROD: '',
|
BY_WH: '',
|
});
|
const keyFieldValues = ref<any>(null);
|
provide<Ref<any>>('objParams', objParams);
|
provide<Ref<any[]>>('_columns', _columns);
|
provide<Ref<any[]>>('_searchFormSchema', _searchFormSchema);
|
provide<Ref<any[]>>('_crudFormSchema', _crudFormSchema);
|
provide<Ref<string>>('isExistSql', isExistSql);
|
provide<Ref<{}>>('AuthOption', AuthOption);
|
provide<Ref<any>>('keyFieldValues', keyFieldValues);
|
onMounted(async () => {
|
/* 用json获取列 */
|
// _searchFormSchema.value = await fetchJson(
|
// `${globSetting.downloadUrl}/LowCode/${objParams.value.ID}/${objParams.value.ID}_Searchform.json`,
|
// );
|
// var objs = await fetchJson(
|
// `${globSetting.downloadUrl}/LowCode/${objParams.value.ID}/${objParams.value.ID}_Baseform.json`,
|
// );
|
// for (const i in objs) {
|
// if (!isNullOrEmpty(objs[i].customRender)) {
|
// const func = new Function(objs[i].customRender)();
|
// objs[i].customRender = ({ record }) => {
|
// let texts = func(record);
|
// return h(Tooltip, { title: texts.text }, () =>
|
// h(Tag, { color: texts.color }, () => texts.text),
|
// );
|
// };
|
// }
|
// }
|
// _columns.value = objs;
|
isMounted.value = false;
|
const EntityCustFunction = ref([
|
{
|
ActionItem(params: Recordable<any>, data, ...args) {},
|
} as EntityCustFunctionType,
|
]);
|
/* 动态import实体名.ts的自定义方法 */
|
try {
|
custImport.value = await import(`../entityts/${objParams.value.ID}.ts`);
|
} catch (e) {}
|
const [{ InitCrudFormSchema }] = isNullOrUnDef(custImport.value['default'])
|
? EntityCustFunction.value
|
: custImport.value['default']();
|
isMounted.value = true;
|
|
//获取表单中插槽渲染的按钮点击弹出模态窗口的实例
|
useModalData.value = GetUseModalData(objParams.value.ID);
|
const data = await getEntity({
|
sqlcmd: "ASSEMBLY_NAME ='" + objParams.value.ID + "'",
|
entityName: 'SYS_LOW_CODE',
|
order: '',
|
});
|
AuthOption.value.BY_ORG = data.Data.Items[0].BY_ORG;
|
AuthOption.value.BY_PROD = data.Data.Items[0].BY_PROD;
|
AuthOption.value.BY_WH = data.Data.Items[0].BY_WH;
|
var searchForms = JSON.parse(data.Data.Items[0].SEARCH_FORM_JSON);
|
for (const i in searchForms) {
|
if (
|
!isNullOrEmpty(searchForms[i].componentProps) &&
|
!isNullOrEmpty(searchForms[i].componentProps.api) &&
|
searchForms[i].componentProps.api == 'GetEnum'
|
) {
|
searchForms[i].componentProps.api = GetEnum;
|
searchForms[i].componentProps.params.name =
|
`${objParams.value.ID}+${searchForms[i].field}s`;
|
searchForms[i].componentProps.labelField = unref(getLocale) == 'zh_CN' ? 'Desc' : 'Name';
|
}
|
if (
|
!isNullOrEmpty(searchForms[i].componentProps) &&
|
!isNullOrEmpty(searchForms[i].componentProps.api) &&
|
searchForms[i].componentProps.api == 'getEntity'
|
) {
|
searchForms[i].componentProps.api = getEntity;
|
searchForms[i].componentProps.resultField = 'Data.Items';
|
}
|
onChangeConfig(searchForms[i]);
|
}
|
_searchFormSchema.value = searchForms;
|
var _cruds: any[] = [];
|
/* 如果有初始化增删改页面结构的方法,则进入 */
|
if (InitCrudFormSchema && isFunction(InitCrudFormSchema)) {
|
_cruds = InitCrudFormSchema(objParams.value.ID);
|
} else {
|
/* 没有初始化增删改页面结构的方法时进入 */
|
_cruds = JSON.parse(data.Data.Items[0].FORM_JSON);
|
}
|
for (const i in _cruds) {
|
if (
|
!isNullOrEmpty(_cruds[i].componentProps) &&
|
!isNullOrEmpty(_cruds[i].componentProps.api) &&
|
_cruds[i].componentProps.api == 'GetEnum'
|
) {
|
_cruds[i].componentProps.api = GetEnum;
|
_cruds[i].componentProps.params.name = `${objParams.value.ID}+${_cruds[i].field}s`;
|
_cruds[i].componentProps.labelField = unref(getLocale) == 'zh_CN' ? 'Desc' : 'Name';
|
}
|
if (
|
!isNullOrEmpty(_cruds[i].componentProps) &&
|
!isNullOrEmpty(_cruds[i].componentProps.api) &&
|
_cruds[i].componentProps.api == 'getEntity'
|
) {
|
_cruds[i].componentProps.api = getEntity;
|
_cruds[i].componentProps.resultField = 'Data.Items';
|
}
|
if (_cruds[i].component == 'Upload') {
|
_cruds[i].componentProps = {};
|
_cruds[i].componentProps.api = uploadApi;
|
_cruds[i].componentProps.multiple = false;
|
_cruds[i].componentProps.maxNumber = 1;
|
_cruds[i].componentProps.uploadParams = { entityName: objParams.value.ID };
|
_cruds[i].rules = [{ required: true, message: '请选择上传文件' }];
|
}
|
if (_cruds[i].isexist == 'Y') {
|
isExistSql.value = _cruds[i].field;
|
}
|
onChangeConfig(_cruds[i]);
|
}
|
_crudFormSchema.value = _cruds;
|
|
var objs = JSON.parse(data.Data.Items[0].BASE_FORM_JSON);
|
for (const i in objs) {
|
if (!isNullOrEmpty(objs[i].customRender)) {
|
const func = new Function(objs[i].customRender)();
|
objs[i].customRender = ({ record }) => {
|
let texts = func(record);
|
return h(Tooltip, { title: texts.text }, () =>
|
h(Tag, { color: texts.color }, () => texts.text),
|
);
|
};
|
}
|
}
|
_columns.value = objs;
|
buttons.value = await getRoleButtons(currentRoute.value.meta.menuCode as string);
|
});
|
|
/**
|
* @description: Select 自定义onChange方法
|
* @param {*} obj
|
* @return {*}
|
*/
|
function onChangeConfig(obj: any) {
|
if (obj.component == 'Select') {
|
var options = obj.componentProps.options;
|
var onChange = obj.componentProps.onChange;
|
obj.componentProps = ({ schema, tableAction, formActionType, formModel }) => {
|
return {
|
options: options,
|
onChange: (e) => custOnChange(e, onChange, objParams.value.ID),
|
};
|
};
|
}
|
}
|
</script>
|