<template>
|
<div class="jeecg-flow-demo">
|
<BasicForm @register="registerForm"></BasicForm>
|
<a-tabs v-model:activeKey="activeKey" @change="handleChangeTabs">
|
<a-tab-pane tab="客户信息" key="jeecgOrderCustomerForm" :forceRender="true">
|
<JeecgOrderCustomerForm ref="jeecgOrderCustomerFormRef" :formData="formData"></JeecgOrderCustomerForm>
|
</a-tab-pane>
|
|
<a-tab-pane tab="机票信息" key="jeecgOrderTicket" :forceRender="true">
|
<JVxeTable v-if="ok" ref="jeecgOrderTicketRef" stripe rowSelection keepSource :maxHeight="300" :loading="table2.loading" :columns="table2.columns" :dataSource="table2.dataSource"> </JVxeTable>
|
</a-tab-pane>
|
</a-tabs>
|
</div>
|
</template>
|
|
<script>
|
import { BasicForm, useForm } from '/@/components/Form/index';
|
import { computed, defineComponent, ref, reactive } from 'vue';
|
import { defHttp } from '/@/utils/http/axios';
|
import { propTypes } from '/@/utils/propTypes';
|
import { getBpmFormSchema, jeecgOrderTicketColumns } from '../data';
|
import JeecgOrderCustomerForm from './JeecgOrderCustomerForm.vue';
|
|
export default defineComponent({
|
name: 'JeecgOrderMainForm',
|
components: {
|
BasicForm,
|
JeecgOrderCustomerForm,
|
},
|
props: {
|
formData: propTypes.object.def({}),
|
formBpm: propTypes.bool.def(true),
|
},
|
setup(props) {
|
const [registerForm, { setFieldsValue, setProps, getFieldsValue, updateSchema }] = useForm({
|
labelWidth: 150,
|
schemas: getBpmFormSchema(props.formData),
|
showActionButtonGroup: false,
|
baseColProps: { span: 8 },
|
});
|
|
const formDisabled = computed(() => {
|
if (props.formData.disabled === false) {
|
return false;
|
}
|
return true;
|
});
|
|
const jeecgOrderCustomerFormRef = ref();
|
const jeecgOrderTicketRef = ref();
|
const ok = ref(false);
|
|
let formData = {};
|
const queryByIdUrl = '/test/jeecgOrderMain/queryById';
|
async function initFormData() {
|
console.log('props.formData', props.formData);
|
let params = { id: props.formData.dataId };
|
const data = await defHttp.get({ url: queryByIdUrl, params });
|
console.log('data', data);
|
formData = { ...data };
|
//设置表单的值
|
await setFieldsValue(formData);
|
await setProps({ disabled: formDisabled.value });
|
|
await jeecgOrderCustomerFormRef.value.initFormData(props.formData.dataId);
|
await loadOrderTicketData(props.formData.dataId);
|
ok.value = true;
|
}
|
|
async function submitForm() {
|
let data = getFieldsValue();
|
let params = Object.assign({}, formData, data);
|
console.log('表单数据', params);
|
await saveOrUpdate(params, true);
|
}
|
|
initFormData();
|
|
const activeKey = ref('jeecgOrderCustomerForm');
|
function handleChangeTabs() {}
|
// 机票信息
|
const table2 = reactive({
|
loading: false,
|
dataSource: [],
|
columns: filterSubTableColnmns(jeecgOrderTicketColumns, 'order:'),
|
});
|
|
async function loadOrderTicketData(mainId) {
|
const queryByIdUrl = '/test/jeecgOrderMain/queryOrderTicketListByMainId';
|
let params = { id: mainId };
|
table2.dataSource = [];
|
const data = await defHttp.get({ url: queryByIdUrl, params });
|
if (data && data.length > 0) {
|
table2.dataSource = [...data];
|
}
|
}
|
|
//新增权限处理方法
|
function filterSubTableColnmns(columns, pre) {
|
let authList = props.formData.permissionList;
|
//注意:如果子表配置显示反向 这里不处理其逻辑 即隐藏无法在流程表单中实现,请使用全局表单权限实现
|
let temp = columns.filter((item) => {
|
let oneAuth = authList.find((auth) => {
|
return auth.action === pre + item.key;
|
});
|
if (!oneAuth) {
|
return true;
|
}
|
|
//代码严谨处理,防止一个授权标识,配置多次
|
if (oneAuth instanceof Array) {
|
oneAuth = oneAuth[0];
|
}
|
|
//禁用逻辑
|
if (oneAuth.type == '2' && !oneAuth.isAuth) {
|
item['disabled'] = true;
|
return true;
|
}
|
//隐藏逻辑逻辑
|
if (oneAuth.type == '1' && !oneAuth.isAuth) {
|
return false;
|
}
|
return true;
|
});
|
return temp;
|
}
|
|
return {
|
registerForm,
|
formDisabled,
|
submitForm,
|
jeecgOrderCustomerFormRef,
|
activeKey,
|
handleChangeTabs,
|
table2,
|
jeecgOrderTicketRef,
|
ok,
|
};
|
},
|
});
|
</script>
|
|
<style lang="less">
|
/*.jeecg-flow-demo{
|
.vxe-header--row{
|
.vxe-header--column .vxe-cell{
|
width: 180px !important;
|
}
|
.vxe-header--column:first-child .vxe-cell{
|
width: 40px !important;
|
}
|
}
|
}*/
|
</style>
|