<!--
|
* __----~~~~~~~~~~~------___
|
* . . ~~//====...... __--~ ~~
|
* -. \_|// |||\\ ~~~~~~::::... /~
|
* ___-==_ _-~o~ \/ ||| \\ _/~~-
|
* __---~~~.==~||\=_ -_--~/_-~|- |\\ \\ _/~
|
* _-~~ .=~ | \\-_ '-~7 /- / || \ /
|
* .~ .~ | \\ -_ / /- / || \ /
|
* / ____ / | \\ ~-_/ /|- _/ .|| \ /
|
* |~~ ~~|--~~~~--_ \ ~==-/ | \~--===~~ .\
|
* ' ~-| /| |-~\~~ __--~~
|
* |-~~-_/ | | ~\_ _-~ /\
|
* / \ \__ \/~ \__
|
* _--~ _/ | .-~~____--~-/ ~~==.
|
* ((->/~ '.|||' -_| ~~-/ , . _||
|
* -_ ~\ ~~---l__i__i__i--~~_/
|
* _-~-__ ~) \--______________--~~
|
* //.-~~~-~_--~- |-------~~~~~~~~
|
* //.-~~~--\
|
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
*
|
* 神兽保佑 永无BUG
|
-->
|
|
<!--
|
* @Description: 通用侧边框
|
* @Author: Ben Lin
|
* @version:
|
* @Date: 2024-05-30 13:28:20
|
* @LastEditors: Ben Lin
|
* @LastEditTime: 2024-06-14 09:14:35
|
-->
|
<template>
|
<BasicDrawer
|
v-bind="$attrs"
|
@register="registerDrawer"
|
showFooter
|
:title="getTitle"
|
width="600px"
|
@ok="handleSubmit"
|
>
|
<BasicForm @register="registerForm">
|
<template #[item]="{ field }" v-for="item in crudColSlots" :key="item">
|
<a-button
|
v-if="field"
|
class="mt-1 ml-1"
|
size="small"
|
@click="handleSelectItem(item)"
|
preIcon="search|svg"
|
/>
|
<GeneralModal
|
@register="registerItemAdd"
|
@success="(d, u) => handleItemSuccess(d, u, item)"
|
/>
|
</template>
|
</BasicForm>
|
</BasicDrawer>
|
</template>
|
<script lang="ts" setup>
|
import { ref, computed, unref, onMounted } from 'vue';
|
import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
|
import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
|
import { useGlobSetting } from '/@/hooks/setting';
|
import GeneralModal from '/@/views/components/GeneralModal.vue';
|
import { SaveEntity, fetchJson, formatValues } from '/@/api/tigerapi/system';
|
import { useModal } from '/@/components/Modal';
|
import { isNullOrUnDef } from '/@/utils/is';
|
import { useMessage } from '/@/hooks/web/useMessage';
|
import { useI18n } from '/@/hooks/web/useI18n';
|
import { isFunction } from 'xe-utils';
|
|
const emit = defineEmits(['success', 'register']);
|
const { t } = useI18n();
|
const { createErrorModal } = useMessage();
|
const globSetting = useGlobSetting();
|
const isUpdate = ref(true);
|
const ifSave = ref(true);
|
const entityName = ref('');
|
const formSchema = ref([]);
|
const crudColSlots = ref<any>([]);
|
const isExistSql = ref('');
|
const [registerItemAdd, { openModal: openItemModal }] = useModal();
|
const [registerForm, { resetFields, setFieldsValue, getFieldsValue, validate }] = useForm({
|
labelWidth: 140,
|
schemas: formSchema as unknown as FormSchema[],
|
actionColOptions: {
|
span: 24,
|
},
|
showActionButtonGroup: false,
|
});
|
|
const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
|
/* 动态import实体名.ts的自定义方法 */
|
let m = {} as any;
|
try {
|
m = await import(`./entityts/${data?.keyName}.ts`);
|
} catch (e) {}
|
isUpdate.value = !!data?.isUpdate;
|
ifSave.value = !!data?.ifSave;
|
entityName.value = data?.entityName;
|
formSchema.value = !isNullOrUnDef(m.default)
|
? m.default()[0].GetCrudForm(data?.name, data?.data, data.record)
|
: data?.formJson;
|
crudColSlots.value = data?.crudColSlots;
|
isExistSql.value = data?.isExistSql;
|
resetFields();
|
setDrawerProps({ confirmLoading: false });
|
|
if (unref(isUpdate)) {
|
setFieldsValue({
|
...data.record,
|
});
|
} else {
|
if (!isNullOrUnDef(data?.keyFieldValues)) {
|
setFieldsValue(data?.keyFieldValues);
|
}
|
}
|
});
|
|
const getTitle = computed(() => (!unref(isUpdate) ? '新增' : '编辑'));
|
|
onMounted(async () => {});
|
async function handleSubmit() {
|
try {
|
let values = await validate();
|
//判断保存的值如果是[]数组的,就直接取[0]第一个值,一般针对上传模板的地址
|
values = formatValues(values);
|
setDrawerProps({ confirmLoading: true });
|
// TODO custom api
|
if (!unref(ifSave)) {
|
//保存
|
SaveEntity(
|
values,
|
unref(isUpdate),
|
unref(entityName),
|
`${isExistSql.value}='${values[isExistSql.value]}'`,
|
).then((action) => {
|
if (action.IsSuccessed) {
|
closeDrawer();
|
emit('success', values, { isUpdate: isUpdate.value });
|
} else {
|
createErrorModal({ title: t('sys.api.errorTip'), content: action.Message });
|
}
|
});
|
} else {
|
closeDrawer();
|
emit('success', values, { isUpdate: isUpdate.value });
|
}
|
} finally {
|
setDrawerProps({ confirmLoading: false });
|
}
|
}
|
|
/**
|
* @description: 弹出选择框选择成功后事件
|
* @param {*} d
|
* @param {*} u
|
* @param {*} item
|
* @return {*}
|
*/
|
function handleItemSuccess(d, u, item) {
|
/* 动态import实体名.ts的自定义方法 */
|
try {
|
import(`./entityts/${getFieldsValue()[`${item.replace(/add/, '')}PSelect_0`]}.ts`)
|
.then((m) => {
|
const [{ GetSelectSuccess }] = m.default();
|
setFieldsValue(GetSelectSuccess(d, u));
|
})
|
.catch(() => {
|
setFieldsValue({
|
ITEM_CODE: d.values['val'],
|
});
|
});
|
} catch (e) {}
|
}
|
|
/**
|
* @description: 弹出选择框
|
* @param {*} item
|
* @return {*}
|
*/
|
function handleSelectItem(item) {
|
/* 动态import实体名.ts的自定义方法 */
|
try {
|
import(`./entityts/${getFieldsValue()[`${item.replace(/add/, '')}PSelect_0`]}.ts`)
|
.then((m) => {
|
const [{ OpenSelectItem }] = m.default();
|
OpenSelectItem(openItemModal);
|
})
|
.catch(() => {
|
openItemModal(true, {
|
title: '物料列表',
|
schemas: [
|
{
|
field: 'ITEM_CODE',
|
component: 'Input',
|
label: '物料编码',
|
colProps: {
|
span: 12,
|
},
|
},
|
],
|
ItemColumns: [
|
{
|
title: t('物料编码'),
|
dataIndex: 'ITEM_CODE',
|
resizable: true,
|
sorter: true,
|
width: 200,
|
},
|
{
|
title: t('物料名称'),
|
dataIndex: 'ITEM_NAME',
|
resizable: true,
|
sorter: true,
|
width: 180,
|
},
|
],
|
tableName: 'BAS_ITEM',
|
rowKey: 'ITEM_CODE',
|
searchInfo: { TABLE_NAME: 'BAS_ITEM' },
|
});
|
});
|
} catch (e) {}
|
}
|
</script>
|