## 问题分析 1. **日期时间字段设置问题**:在 `ViewGrid/methods.js` 中,所有日期和日期时间类型的查询字段都被强制设置为 `range = true`,意味着它们必须是范围查询 2. **查询参数处理逻辑问题**:在 `getSearchParameters` 方法中,对于日期时间类型的处理存在问题: - 代码期望日期时间值是一个数组,包含开始时间和结束时间 - 当 `value` 是字符串时,代码无法正确处理 - 导致日期时间查询参数无法正确生成 3. **查询条件格式问题**:生成的查询条件格式可能与后端期望的格式不一致 ## 解决方案 1. **修改日期时间字段设置**: - 移除强制将所有日期时间字段设置为范围查询的代码 - 允许根据实际需求设置单个日期时间查询或范围查询 2. **优化查询参数处理逻辑**: - 正确处理日期时间类型的单个值和范围值 - 确保生成的查询条件格式正确 - 添加适当的日志记录,便于调试 3. **增强错误处理**: - 添加对异常情况的处理 - 确保查询功能在各种情况下都能正常工作 ## 具体修改 1. **修改 `ViewGrid/methods.js`**: - 移除或修改 `initFormOptions` 方法中强制设置 `range = true` 的代码 - 优化 `getSearchParameters` 方法中的日期时间处理逻辑 2. **修改建议**: - 保留 `range` 属性的设置,但允许通过配置覆盖 - 增强 `getSearchParameters` 方法,正确处理日期时间的单个值和范围值 - 添加适当的日志记录 3. **修改 `getSearchParameters` 方法**: ```javascript getSearchParameters() { // 获取查询参数 if (!this.fiexdSearchForm) { this.searchBoxShow = false; } let query = { wheres: [] }; for (const key in this.searchFormFields) { let value = this.searchFormFields[key]; if (this.emptyValue(value)) continue; if (typeof value == 'number') { value = value + ''; } let displayType = this.getSearchItem(key); // 处理日期时间类型 if (['date', 'datetime'].indexOf(displayType) != -1) { if (Array.isArray(value)) { // 范围查询 for (let index = 0; index < value.length; index++) { if (!this.emptyValue(value[index])) { query.wheres.push({ name: key, value: (value[index] + '').trim(), displayType: index === 0 ? 'greaterorequal' : 'lessorequal' }); } } } else { // 单个值查询 query.wheres.push({ name: key, value: (value + '').trim(), displayType: 'equal' }); } continue; } // 处理其他类型 query.wheres.push({ name: key, value: typeof value == 'string' ? (value + '').trim() : value.join(','), displayType: displayType }); } return query; } ``` 4. **修改 `initFormOptions` 方法**: ```javascript initFormOptions(formOptions, keys, formFields, isEdit) { // 初始化查询、编辑对象的下拉框数据源、图片上传链接地址 // ... 其他代码 ... // 移除或修改强制设置range=true的代码 // this.searchFormOptions.forEach((item) => { // item.forEach((x) => { // if (x.type == 'date' || x.type == 'datetime') x.range = true; // }); // }); // ... 其他代码 ... } ``` 这样修改后,日期时间查询功能应该能够正常工作,无论是单个值查询还是范围查询都能正确处理。