diff --git a/src/components/AdvancedSearchForm/index.vue b/src/components/AdvancedSearchForm/index.vue new file mode 100644 index 0000000..dc93d45 --- /dev/null +++ b/src/components/AdvancedSearchForm/index.vue @@ -0,0 +1,81 @@ + + + diff --git a/src/components/DynamicSearchForm/index.vue b/src/components/DynamicSearchForm/index.vue deleted file mode 100644 index a9d0503..0000000 --- a/src/components/DynamicSearchForm/index.vue +++ /dev/null @@ -1,56 +0,0 @@ - - - - - diff --git a/src/components/DynamicTable/index.vue b/src/components/DynamicTable/index.vue deleted file mode 100644 index d9b6479..0000000 --- a/src/components/DynamicTable/index.vue +++ /dev/null @@ -1,145 +0,0 @@ - - - - - diff --git a/src/components/Selector/lineSelectorPlus.vue b/src/components/Selector/lineSelectorPlus.vue index 1b37a47..00a0a81 100644 --- a/src/components/Selector/lineSelectorPlus.vue +++ b/src/components/Selector/lineSelectorPlus.vue @@ -204,6 +204,7 @@ visible.value = true nextTick(() => { + searchFormState.value.enabledState = 'ENABLE' // 加载生产线分类 dynamicTreeRef.value.loadTreeData() diff --git a/src/components/Table/index.vue b/src/components/Table/index.vue index 001fd15..58a9602 100644 --- a/src/components/Table/index.vue +++ b/src/components/Table/index.vue @@ -337,6 +337,7 @@ // 刷新 const refresh = (bool = false) => { + console.log(123131) bool && (data.localPagination = Object.assign( {}, diff --git a/src/hook/useFormHandler.js b/src/hook/useFormHandler.js index c1eda01..4880040 100644 --- a/src/hook/useFormHandler.js +++ b/src/hook/useFormHandler.js @@ -3,190 +3,154 @@ import { cloneDeep } from 'lodash-es' import useTabs from '@/utils/useTabs' import extendFieldApi from '@/api/base/extendfield/extendFieldApi' -/** - * 使用表单处理程序封装表单的提交、初始化和回退逻辑。 - * @param {Array} formItems 表单项配置,包含表单字段名、默认值等信息。 - * @param {Object} api 包含表单提交和获取详情方法的对象。 - * @param backRouter - * @returns {Object} 返回包含表单数据、提交加载状态、表单引用、提交函数等的对象。 - */ export default function useFormHandler(formItems, api, backRouter) { - // 初始化页面类型状态 const state = reactive({ PAGE_TYPE: '' }) - let extendFormData = ref({}) - // 操作信息 - let inform = reactive({ + + const extendFormData = ref({}) + const inform = reactive({ createUserName: '', createTime: '', updateUserName: '', updateTime: '' }) - // 初始化表单数据对象 - let formData = reactive({}) - // 初始化提交加载状态 + const formData = reactive({}) const submitLoading = ref(false) - // 初始化表单引用数组 const formRefs = ref([]) - // 使用vue-router的useRoute钩子获取当前路由信息 const route = useRoute() - // 使用vue-router的useRouter钩子获取路由管理对象 const router = useRouter() - /** - * 根据表单项配置初始化表单数据。 - * @param {Array} formItems 表单项配置数组。 - * @param {Object} formData 初始化后的表单数据对象。 - */ - const initializeFormData = (formItems, formData) => { + // 初始化表单数据 + const initializeFormData = () => { formItems.forEach((item) => { formData[item.name] = item.defaultValue || null }) } - /** - * 处理表单提交逻辑。 - * @param {Object} params 提交时额外的参数配置,包含是否深度克隆formData的标志。 - */ - const onSubmit = async (params) => { + // 提交表单 + const onSubmit = async (params = {}) => { + submitLoading.value = true try { - // 验证所有表单字段 - await Promise.all(formRefs.value.map((form) => form.validate())) - submitLoading.value = true + await validateForms() - // 根据参数配置决定是否深度克隆formData - let formDataParam = params.isDeep ? cloneDeep(params) : formData - - // 安全地处理路由查询参数 - const safeId = validateAndCleanId(route.query.id) + const formDataParam = params.isDeep ? cloneDeep(params) : formData + const safeId = validateAndCleanId(route.query.id || params.id) if (safeId) { formDataParam.id = safeId } - // 调用api提交表单数据 - await api.submitForm(formDataParam, safeId) - // 提交成功后返回上一页,并关闭当前标签页 - handleBack(backRouter) + const res = await api.submitForm(formDataParam, safeId) + + if (params.isEnable) return res + + handleBack() } catch (error) { - console.error('Validation error:', error) + console.error('Validation or submission error:', error) + throw error } finally { submitLoading.value = false } } - /** - * 校验并清洁ID,确保其安全使用。 - * @param {string} id 待校验的ID。 - * @returns {string|undefined} 校验通过后返回清洁的ID,否则返回undefined。 - */ + // 验证表单 + const validateForms = () => { + return Promise.all(formRefs.value.map((form) => form.validate())) + } + + // 校验并清洁ID const validateAndCleanId = (id) => { - if (id && /^[a-zA-Z0-9\-_]+$/.test(id)) { - return id - } - console.warn('Invalid ID:', id) - return undefined + return id && /^[a-zA-Z0-9\-_]+$/.test(id) ? id : undefined } - /** - * 处理返回操作,返回上一级页面并关闭当前标签页。 - */ - const handleBack = (routerPath) => { - // useTabs.close(route) - useTabs.close('', routerPath) + // 返回并关闭当前标签页 + const handleBack = () => { + useTabs.close('', backRouter) } - /** - * 根据页面类型加载表单数据。 - * @param {String} pageType 页面类型,用于区分新增和编辑等不同场景。 - * @returns {Promise} 返回获取的详情数据。 - */ + // 根据页面类型加载表单数据 const fetchData = async (pageType) => { - initializeFormData(formItems, formData) + initializeFormData() if (pageType && pageType !== 'ADD') { try { const res = await api.getDetail({ id: route.query.id }) - - // 根据返回的详情数据初始化表单数据 - for (let key in formData) { - if (res[key] !== undefined) { - formData[key] = res[key] - } - } - - // 操作信息 - for (let key in inform) { - if (res[key] !== undefined) { - inform[key] = res[key] - } - } - - // 扩展字段 + populateFormData(res) if (res.extJson) { extendFormData.value = JSON.parse(res.extJson) } return res } catch (error) { - console.error('API request failed:', error) + console.error('Failed to fetch data:', error) } } } - /** - * 扩展字段。 - */ - const getExtendField = async (model) => { - let extendData = [] - // 字段扩展 - const resExtendField = await extendFieldApi.extendFieldTypeList({ - enabledState: 'ENABLE', - model + // 填充表单数据 + const populateFormData = (data) => { + Object.keys(formData).forEach((key) => { + if (data[key] !== undefined) formData[key] = data[key] }) - console.log(resExtendField, 'resExtendField') + Object.keys(inform).forEach((key) => { + if (data[key] !== undefined) inform[key] = data[key] + }) + } - if (resExtendField) { - resExtendField.forEach((item) => { - if (item.showValues) { - const showValues = JSON.parse(item.showValues) - let options = [] - showValues.forEach((value) => { - options.push({ - value: value.name, - label: value.name - }) - }) - extendData.push({ - label: item.name, - name: item.fieldName, - type: item.showType, - span: 6, - attrs: { - placeholder: '请输入内容', - options - } - }) - } + // 获取扩展字段 + const getExtendField = async (model) => { + try { + const resExtendField = await extendFieldApi.extendFieldTypeList({ + enabledState: 'ENABLE', + model }) + console.log(resExtendField, 'resExtendField') + const extendData = + resExtendField?.map((item) => { + if (item.enabledState === 'ENABLE') { + const options = item.showValues + ? JSON.parse(item.showValues).map((value) => ({ + value: value.name, + label: value.name + })) + : [] + return { + label: item.name, + name: item.fieldName, + type: item.showType, + span: 6, + attrs: { + placeholder: '请输入内容', + options + } + } + } + }) || [] extendData.forEach((item) => { - if (item.fieldName) extendFormData.value[item.fieldName] = null + if (item && item.fieldName) extendFormData.value[item.fieldName] = null }) - return extendData - } else { + + console.log(extendData.length, 'extendData') + if (extendData) { + return extendData + } else { + return [] + } + } catch (error) { + console.error('Failed to get extend fields:', error) return [] } } - // 返回包含各种处理函数和状态的对象 return { formData, submitLoading, formRefs, inform, extendFormData, + populateFormData, getExtendField, onSubmit, handleBack, diff --git a/src/hook/useTableManagement.js b/src/hook/useTableManagement.js index 521f599..8bdfafc 100644 --- a/src/hook/useTableManagement.js +++ b/src/hook/useTableManagement.js @@ -13,9 +13,7 @@ import useTabs from '@/utils/useTabs' */ export function useTableManagement(apiModule = {}, tableColumns, hasPermData, isShowAction = true) { const searchFormState = ref({}) - const searchFormRef = ref(null) const selectedRowKeys = ref([]) - let advanced = ref(false) const router = useRouter() @@ -62,14 +60,6 @@ export function useTableManagement(apiModule = {}, tableColumns, hasPermData, is }) } - // 重置 - const reset = () => { - if (tableRef.value) { - searchFormRef.value.resetFields() - tableRef.value.refresh(true) - } - } - // 删除 const deleteRecord = (record) => { let params = [{ id: record.id }] @@ -97,24 +87,17 @@ export function useTableManagement(apiModule = {}, tableColumns, hasPermData, is }) } - const toggleAdvanced = () => { - advanced.value = !advanced.value - } // 返回Hook的值 return { searchFormState, - searchFormRef, tableRef, selectedRowKeys, columns, options, - advanced, loadData, - reset, deleteRecord, deleteBatchRecords, - navigateTo, - toggleAdvanced + navigateTo } } diff --git a/src/views/productionBusiness/basicData/materiel/detail/index.vue b/src/views/productionBusiness/basicData/materiel/detail/index.vue index 26bb287..35c8e13 100644 --- a/src/views/productionBusiness/basicData/materiel/detail/index.vue +++ b/src/views/productionBusiness/basicData/materiel/detail/index.vue @@ -292,12 +292,13 @@ } const onSubmitForm = () => { + console.log(dataSource.value, 'dataSource.value') onSubmit({ isDeep: true, - materialPackageList: dataSource.value, ...formData, ...productFormData.value, - extJson: JSON.stringify(extendFormData.value) || '' + extJson: JSON.stringify(extendFormData.value) || '', + materialPackageList: dataSource.value }) } @@ -790,7 +791,9 @@ packageProportionCount.push(item.productQty * item.unitRate) }) - formData.packageProportion = calculateRatios(packageProportionCount).join(':') + formData.packageProportion = calculateRatios(packageProportionCount) + ? calculateRatios(packageProportionCount).join(':') + : null } } @@ -806,6 +809,16 @@ ratios.push(arr[i] / arr[i - 1]) } + for (let i = 0; i < ratios.length; i++) { + // 检查是否有小数点 + if (!Number.isInteger(ratios[i])) { + return notification.error({ + message: `包装比例转换提示`, + description: `结果不能有小数,请重新填写` + }) + } + } + return ratios } diff --git a/src/views/productionBusiness/basicData/materiel/formFields/detailFields.js b/src/views/productionBusiness/basicData/materiel/formFields/detailFields.js new file mode 100644 index 0000000..e69de29 diff --git a/src/views/productionBusiness/basicData/materiel/formFields/drawerForm.js b/src/views/productionBusiness/basicData/materiel/formFields/drawerForm.js new file mode 100644 index 0000000..e69de29 diff --git a/src/views/productionBusiness/basicData/materiel/formFields/searchFields.js b/src/views/productionBusiness/basicData/materiel/formFields/searchFields.js new file mode 100644 index 0000000..7602096 --- /dev/null +++ b/src/views/productionBusiness/basicData/materiel/formFields/searchFields.js @@ -0,0 +1,12 @@ +import tool from '@/utils/tool' + +export const searchFields = [ + { name: 'name', label: '名称', component: 'a-input', props: { placeholder: '请输入名称' } }, + { + name: 'enabledState', + label: '可用状态', + component: 'a-select', + props: { placeholder: '请选择状态', options: tool.dictList('COMMON_STATUS') } + }, + { name: 'number', label: '编码', component: 'a-input', props: { placeholder: '请输入编码' } } +] diff --git a/src/views/productionBusiness/basicData/materiel/index.vue b/src/views/productionBusiness/basicData/materiel/index.vue index 8c498d1..8cc6c9a 100644 --- a/src/views/productionBusiness/basicData/materiel/index.vue +++ b/src/views/productionBusiness/basicData/materiel/index.vue @@ -1,33 +1,10 @@