diff --git a/io.sc.platform.core.frontend/src/platform/components/date/WDate.vue b/io.sc.platform.core.frontend/src/platform/components/date/WDate.vue index a3101cf6..7bb419a3 100644 --- a/io.sc.platform.core.frontend/src/platform/components/date/WDate.vue +++ b/io.sc.platform.core.frontend/src/platform/components/date/WDate.vue @@ -24,8 +24,18 @@ @@ -48,6 +58,7 @@ const dateRef = ref(); const attrs = useAttrs(); const slots = useSlots(); const modelValue = defineModel(); +const proxyRef = ref(); interface FieldProps extends FormFieldProps {} const props = withDefaults(defineProps(), { @@ -82,6 +93,9 @@ const fieldMethodsClass = new FieldMethods(); watch( () => modelValue.value, (newVal, oldVal) => { + if (!Tools.isEmpty(newVal)) { + proxyRef.value.hide(); + } if (!Tools.isEmpty(newVal) && newVal !== oldVal && newVal.length > 10) { modelValue.value = newVal?.substring(0, 10); } diff --git a/io.sc.platform.core.frontend/src/platform/components/date/WDateRange.vue b/io.sc.platform.core.frontend/src/platform/components/date/WDateRange.vue index f8d9527d..0a575588 100644 --- a/io.sc.platform.core.frontend/src/platform/components/date/WDateRange.vue +++ b/io.sc.platform.core.frontend/src/platform/components/date/WDateRange.vue @@ -1,40 +1,84 @@ @@ -49,15 +93,22 @@ const dateRangeRef = ref(); const attrs = useAttrs(); const slots = useSlots(); const modelValue = defineModel(); +const proxyRef = ref(); -interface FieldProps extends FormFieldProps {} +interface FieldProps extends FormFieldProps { + displayMode?: string; + // queryContainsEndDate?: boolean; +} const props = withDefaults(defineProps(), { showIf: true, + // 显示模式:single(单个组件),dual(并排显示模式) + displayMode: 'single', }); class FieldMethods extends FormFieldMethods { isTemplateSlot = this.getSlotType(slots); slotNames = this.getSlotNames(slots, props); updateValue = (value_) => { + proxyRef.value.hide(); if (props['onUpdateValue']) { props['onUpdateValue']({ value: value_, diff --git a/io.sc.platform.core.frontend/src/platform/components/grid/ts/function/Criteria.ts b/io.sc.platform.core.frontend/src/platform/components/grid/ts/function/Criteria.ts index e8046200..6f252600 100644 --- a/io.sc.platform.core.frontend/src/platform/components/grid/ts/function/Criteria.ts +++ b/io.sc.platform.core.frontend/src/platform/components/grid/ts/function/Criteria.ts @@ -39,6 +39,9 @@ export class Criteria extends Base { */ private buildCriteria(value: any, fieldName: string) { const queryOperator = this.queryFormFields[fieldName]['queryOperator']; + if (typeof value === 'string') { + value = value.trim(); + } if (!Tools.isEmpty(queryOperator)) { return { fieldName: fieldName, @@ -58,11 +61,22 @@ export class Criteria extends Base { value: value, }; } else if (typeof value === 'object' && this.queryFormFields[fieldName]['type'] === 'w-date-range') { + const endDateStr = value['to']; + let toValue = value['to']; + if (!Tools.isEmpty(endDateStr)) { + toValue = this.strDateAddDay(endDateStr); + } return { fieldName: fieldName, operator: Constant.CRITERIA_OPERATOR.betweenInclusive, start: value['from'], - end: value['to'], + end: toValue, + }; + } else if (this.queryFormFields[fieldName]['type'] === 'w-select') { + return { + fieldName: fieldName, + operator: Constant.CRITERIA_OPERATOR.equals, + value: value, }; } else { return { @@ -73,6 +87,28 @@ export class Criteria extends Base { } } + /** + * 字符串日期增加天数 + * @param dateStr 字符串日期 + * @param dayNum 增加的天数 + * @returns + */ + private strDateAddDay(dateStr: string, dayNum: number = 1) { + // 拆分日期并转为数字(月份需减1,因JS月份从0开始) + const [year, month, day] = dateStr.split('-').map(Number); + const date = new Date(year, month - 1, day); + + // 核心:增加一天(自动处理跨月/年) + date.setDate(date.getDate() + dayNum); + + // 格式化为YYYY-MM-DD(自动补零) + const newYear = date.getFullYear(); + const newMonth = String(date.getMonth() + 1).padStart(2, '0'); + const newDay = String(date.getDate()).padStart(2, '0'); + + return `${newYear}-${newMonth}-${newDay}`; + } + /** * 根据请求入参拼上查询面板构建 criteria 查询对象,转换成 URLSearchParams 后返回 * @param reqParams 请求入参 @@ -103,7 +139,8 @@ export class Criteria extends Base { (!Tools.isEmpty(queryFormData[item]) && Array.isArray(queryFormData[item]) && queryFormData[item].length > 0) ) { if ( - (this.queryFormFields[item]['type'] === 'w-date-range' && !Tools.isEmpty(queryFormData[item]['from'])) || + (this.queryFormFields[item]['type'] === 'w-date-range' && + (!Tools.isEmpty(queryFormData[item]['from']) || !Tools.isEmpty(queryFormData[item]['to']))) || this.queryFormFields[item]['type'] !== 'w-date-range' ) { // 根据数据进行operator处理 diff --git a/io.sc.platform.core.frontend/src/platform/components/grid/ts/toolbar/buttons/Query.ts b/io.sc.platform.core.frontend/src/platform/components/grid/ts/toolbar/buttons/Query.ts index 93552787..d6503f81 100644 --- a/io.sc.platform.core.frontend/src/platform/components/grid/ts/toolbar/buttons/Query.ts +++ b/io.sc.platform.core.frontend/src/platform/components/grid/ts/toolbar/buttons/Query.ts @@ -1,4 +1,4 @@ -import { $t } from '@/platform'; +import { $t, NotifyManager } from '@/platform'; import { PropsType, TableType } from '../../index'; import { Button } from '../Button'; @@ -11,8 +11,17 @@ export class Query extends Button { this.getButtonConfig = this.getButtonConfig.bind(this); } - click(args) { - this.tools?.apiFM.operator.refreshGrid(); + async click(args) { + if (args.grid?.getQueryForm()) { + const formValidate = await args.grid.getQueryForm().validate(); + if (formValidate) { + this.tools?.apiFM.operator.refreshGrid(); + } else { + NotifyManager.error('查询表单存在不符合要求的字段'); + } + } else { + this.tools?.apiFM.operator.refreshGrid(); + } } getButtonConfig() { diff --git a/io.sc.platform.core.frontend/src/platform/components/workflow/WWorkflowAction.vue b/io.sc.platform.core.frontend/src/platform/components/workflow/WWorkflowAction.vue index 44b8cb36..22b10f13 100644 --- a/io.sc.platform.core.frontend/src/platform/components/workflow/WWorkflowAction.vue +++ b/io.sc.platform.core.frontend/src/platform/components/workflow/WWorkflowAction.vue @@ -154,6 +154,7 @@ const getSubmitData = (action, assignee = undefined) => { const data = getData(action, assignee); if (props.isContainsFile) { const formData = props.formData; + formData.delete('data'); formData.append('data', JSON.stringify(data)); return formData; } else { diff --git a/io.sc.platform.core.frontend/src/platform/index.ts b/io.sc.platform.core.frontend/src/platform/index.ts index 3aa3298b..0d21d388 100644 --- a/io.sc.platform.core.frontend/src/platform/index.ts +++ b/io.sc.platform.core.frontend/src/platform/index.ts @@ -193,6 +193,7 @@ export type { CriteriaType } from './components'; export { arrayToMap, componentRegistryName } from './components'; export type { FormFieldProps } from './components'; export { FormFieldMethods } from './components'; +export { FormValidators } from './components'; /** * 导出 UI 工具类