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.
 
 
 
 
 
 

88 lines
2.5 KiB

<template>
<div v-if="state.isReload && state.pageType === PageTemplateType.GRID" :class="props.configId ? 'pt-2.5' : ''" style="height: 100%">
<GridPage
ref="gridPageRef"
:platform-grid-config="state.pageConfig"
:grid-before-request-data="gridBeforeRequestData"
:grid-before-editor-data-submit="gridBeforeEditorDataSubmit"
></GridPage>
</div>
</template>
<script setup lang="ts">
import { reactive, ref, onMounted, nextTick, watch } from 'vue';
import { useRoute } from 'vue-router';
import { axios, Environment } from 'platform-core';
import { getPageConfig, PageTemplateType, Page } from './page.ts';
import GridPage from './grid/GridPage.vue';
const gridPageRef = ref();
const props = defineProps({
configId: { type: String, default: '' },
gridBeforeRequestData: { type: Function, default: () => {} },
gridBeforeEditorDataSubmit: { type: Function, default: () => {} },
gridInitLoadData: { type: Boolean, default: false },
});
const route = useRoute();
const state = reactive({
isReload: true,
pageType: '',
pageConfig: {},
});
watch(
() => props.configId,
(newVal, oldVal) => {
reload();
},
);
const reload = () => {
state.isReload = false;
nextTick(() => {
state.isReload = true;
getConfig();
});
};
const getJsonStr = async () => {
// 两种接收参数的方式,一种是页面嵌套该组件为子组件,将configId传进来,另一种是通过路由将参数传进来。
const result = await getPageConfig((props.configId ? props.configId : route.query.id) as string);
if (result) {
state.pageConfig = eval('(' + result.config + ')');
state.pageType = result.type;
}
};
const getConfig = async () => {
const resp = await axios.get(Environment.apiContextPath('api/template/config/fetch/') + (props.configId ? props.configId : route.query.id));
if (resp && resp.data && resp.data.templateConfig?.templatePageLoadType === 'JSON') {
getJsonStr();
} else if (resp && resp.data) {
const templateConfig = resp.data.templateConfig;
const templateGrid = resp.data.templateGrid;
const templateGridFields = resp.data.templateGridFields;
state.pageType = templateConfig.templateType;
// 根据配置组装数据对象
const page = new Page(templateConfig, templateGrid, templateGridFields);
state.pageConfig = page.buildGridConfig();
}
};
const refresh = () => {
gridPageRef.value.refresh();
};
onMounted(async () => {
await getConfig();
if (props.gridInitLoadData) {
gridPageRef.value.refresh();
}
});
defineExpose({
refresh,
});
</script>