/* * @Author: wei.li * @Date: 2022-06-23 17:29:11 * @LastEditors: levi7754 levi7754@163.com * @LastEditTime: 2025-12-04 13:34:40 * @Description: file content */ import { clone, isArray, isString, isEmpty, toDateString } from 'xe-utils'; import { useRender } from '@utogether/utils'; const renderHook = useRender(); export const rulesFormat = (records, rule, t) => { records .filter(colunm => colunm.required) .forEach(colunm => { const { field, title } = colunm; rule[field] = [ { required: true, message: `${t('message.required')}${title ? t(title) : t(`message.${field}`)}` } ]; }); return rule; }; export const columnFormat = columns => { return columns.map(m => { if (m.type) return m; m.title = m.title || `message.${m.field}`; return m; }); }; const searchBtn: IFormItemProps = { span: 6, align: 'right', collapseNode: false, itemRender: { name: 'VxeButtonGroup', options: [ { type: 'submit', submit: 'submit', content: 'message.btn.search', status: 'primary', icon: 'ri-search-line' }, { type: 'reset', name: 'reset', content: 'message.btn.reset', status: 'info', icon: 'ri-refresh-line' } ], events: null } }; export const formatGridItems = (records, favorite) => { const formItems = records.filter(f => f.visible !== false); const len = formItems.length; // 前3个存在时间范围 或者 存在span = 12 const isDateRange = len > 2 && formItems.some((f, idx) => idx < 3 && (f.span > 6 || getDateRange(f))); // 需要展示折叠按钮 const isCollapse = isDateRange || len > 3; const defaultCollapse = { collapseTags: true, collapseTagsTooltip: true, multiple: true }; const items = formItems.map((item, idx) => { item.folding = isDateRange ? isCollapse && idx > 1 : isCollapse && idx > 2; item.span = getDateRange(item) ? 12 : item.span || 6; if (item.code && !item.itemRender) { item.itemRender = renderHook.renderDict(item.code); } item.itemRender = item.itemRender || { name: '$input' }; item.title = item.title || `message.${item.field}`; if (item.multiple || item.itemRender?.props?.multiple) { item.itemRender.props = Object.assign(defaultCollapse, item.itemRender?.props || {}); } return item; }); const btn = clone(searchBtn, true); btn.collapseNode = isCollapse; favorite && btn.itemRender.options.length < 3 && btn.itemRender.options.push(favorite); if (isCollapse) { // 按钮设置为 折叠节点 // 折叠时将搜索按钮插入到第一列的最后 const idx = isDateRange ? 2 : 3; items.splice(idx, 0, btn); } else { items.push(btn); } return items; }; const getDateRange = item => { if (item.itemRender?.name === '#SuDateRange') { return item.itemRender?.props?.type === 'daterange' || !item.itemRender?.props?.type; } return false; }; export const formatButton = (buttons, auth?) => { buttons.forEach(btn => { btn.auth = auth ? auth[btn.code] || btn.auth : btn.auth; if (!btn.name) { btn.name = `message.${btn.name || btn.code}`; } else if (!btn.name.includes('message.')) { btn.name = `message.${btn.name}`; } }); return buttons; }; export const queryAll = (props, http, form, fetchParam) => { const params = { pageNum: 1, pageSize: 100000 }; Object.assign(params, form, fetchParam || {}); const query = formatDateRange(params, props.formItems); const ajax = props.version === 'v2' ? http.get : http.post; return new Promise((resolve, reject) => { ajax(props.serviceCode.fetch, query) .then((response: IResponseData) => { resolve(response.list); }) .catch((e: any) => { reject(e); }); }); }; /** 查询服务 */ export const query = (props, form, page, http, fetchParam) => { for (const i in form) { if (form[i] && isString(form[i])) { form[i] = form[i].trim(); } } const params = { pageNum: page.currentPage, pageSize: page.pageSize }; Object.assign(params, form, fetchParam || {}); const query = formatDateRange(params, props.formItems); const { version, serviceCode: { fetch } } = props; if (!fetch) return null; if (version === 'v2') { return http.get(fetch, query); } return http.post(fetch, query); }; /** 删除服务 */ export const del = (http, removeRecords, props) => { const { serviceCode, version, isSingleSubmit } = props; const { del } = serviceCode; if (!del) return null; if (version === 'v2') { return http.delete(del, !isSingleSubmit ? removeRecords : removeRecords[0]); } return http.post(del, !isSingleSubmit ? removeRecords : removeRecords[0]); }; /** 更新服务 */ export const save = (http, body, props, confirmParam) => { const allService = []; const { serviceCode, isSingleSubmit, version, multiField } = props; const { add, update } = serviceCode; const { insertRecords, updateRecords } = body; if (!isEmpty(insertRecords) && add) { insertRecords.forEach(m => { !isEmpty(confirmParam) && Object.assign(m, confirmParam); m = !isEmpty(multiField) ? setMultiField(props, m, confirmParam) : m; }); const service = http.post(add, !isSingleSubmit ? insertRecords : insertRecords[0]); allService.push(service); } if (!isEmpty(updateRecords) && update) { const records = !isEmpty(multiField) ? updateRecords.map(m => setMultiField(props, m, confirmParam)) : updateRecords; let service = null; if (version === 'v2') { service = http.put(update, !isSingleSubmit ? records : records[0]); } else { service = http.post(update, !isSingleSubmit ? records : records[0]); } allService.push(service); } return allService; }; const formatDateRange = (listQuery: any, formItems) => { const dateRanges = formItems.filter(f => f.itemRender?.name === '#SuDateRange'); if (isEmpty(dateRanges)) return listQuery; const query = clone(listQuery, true); dateRanges.forEach((element: any) => { const val = query[element.field]; if (val && element.toField) { query[element.fromField] = toDateString(val[0], 'yyyy-MM-dd 00:00:00'); query[element.toField] = toDateString(val[1], 'yyyy-MM-dd 23:59:59'); delete query[element.field]; } else if (val) { query[`${element.field}From`] = toDateString(val[0], 'yyyy-MM-dd 00:00:00'); query[`${element.field}To`] = toDateString(val[1], 'yyyy-MM-dd 23:59:59'); delete query[element.field]; } }); return query; }; const setMultiField = (props, source: any, confirmParam) => { const { multiField } = props; multiField.forEach(field => { source[field] = isArray(source[field]) ? source[field].join(',') : source[field]; }); Object.assign(source, confirmParam || {}); return source; };