From 50d8d1e99290e2325d7f9e5dc79fd5204709507f Mon Sep 17 00:00:00 2001 From: chenxf Date: Tue, 6 Jan 2026 14:14:26 +0800 Subject: [PATCH 1/7] =?UTF-8?q?feat(utils):=20=E6=B7=BB=E5=8A=A0=E5=93=8D?= =?UTF-8?q?=E5=BA=94=E6=95=B0=E6=8D=AE=E9=94=99=E8=AF=AF=E5=A4=84=E7=90=86?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 当 useResponseData 为 true 时,如果返回的 data.code 不等于 0, 则抛出包含错误信息的异常,确保错误能够被正确捕获和处理。 --- src/utils/request.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/utils/request.js b/src/utils/request.js index defa345..5186099 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -58,6 +58,9 @@ service.interceptors.response.use( }) } if (response.config.useResponseData) { + if (data.code !== 0) { + throw new Error(data.data?.message || data.msg) + } return data.data } return response.config.useHeader ? response : data From 883fbdc4c9146501f7e661bfac4baa8adc3a7bc1 Mon Sep 17 00:00:00 2001 From: chenxf Date: Tue, 6 Jan 2026 14:17:55 +0800 Subject: [PATCH 2/7] =?UTF-8?q?feat(EasyComponent):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E9=80=89=E9=A1=B9=E7=AE=A1=E7=90=86=E5=99=A8=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E6=B7=B1=E5=BA=A6=E6=9F=A5=E6=89=BE=E5=92=8C=E7=BC=93=E5=AD=98?= =?UTF-8?q?=E6=B8=85=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 引入 deepFindObjArr 工具函数用于深度查找对象数组 - 改进 Promise 处理逻辑,失败时设置为空数组而非删除缓存 - 新增 asyncGetOptionsItemByBaseCode 方法支持深度选项查找 - 重构 asyncGetOptionsLabelByBaseCode 依赖新的查找方法 - 添加 removeOptionsCache 方法用于清理选项缓存 fix(request): 调整响应拦截器条件判断逻辑 - 修改错误处理条件,当 useResponseData 配置为 true 时也跳过拦截处理 --- src/plugins/EasyComponent/optionsManager.js | 47 +++++++++++++++------ src/utils/request.js | 2 +- 2 files changed, 34 insertions(+), 15 deletions(-) diff --git a/src/plugins/EasyComponent/optionsManager.js b/src/plugins/EasyComponent/optionsManager.js index a0df017..fe650ff 100644 --- a/src/plugins/EasyComponent/optionsManager.js +++ b/src/plugins/EasyComponent/optionsManager.js @@ -1,3 +1,4 @@ +import { deepFindObjArr } from './object-helper' import { ComponentConfig } from './globalConfig' import { createPathObject } from './utils' @@ -14,16 +15,18 @@ export function getOptionsByBaseCode(baseCode) { return OptionsMap[baseCode] } if (OptionsMap[baseCode] instanceof Promise) { - OptionsMap[baseCode].then((data) => { - if (Array.isArray(data)) { - OptionsMap[baseCode] = data - } else { - throw new Error('BaseOptionsLoader必须返回Array或Promise') - } - }).catch((e) => { - console.error(e) - delete OptionsMap[baseCode] - }) + OptionsMap[baseCode] + .then((data) => { + if (Array.isArray(data)) { + OptionsMap[baseCode] = data + } else { + throw new Error('BaseOptionsLoader必须返回Array或Promise') + } + }) + .catch((e) => { + console.error(e) + OptionsMap[baseCode] = [] + }) return [] } throw new Error('BaseOptionsLoader必须返回Array或Promise') @@ -39,10 +42,26 @@ export async function asyncGetOptionsByBaseCode(baseCode) { return OptionsMap[baseCode] } -export async function asyncGetOptionsLabelByBaseCode(baseCode, value) { +export async function asyncGetOptionsItemByBaseCode(baseCode, value, deepOption) { return asyncGetOptionsByBaseCode(baseCode).then((arr) => { - return (arr.find((item) => { - return item.value === value - }) || {}).label + if (deepOption) { + return deepFindObjArr(arr, (item) => { + return item.value === value + }, typeof deepOption === 'object' ? deepOption : undefined) + } else { + return ( + arr.find((item) => { + return item.value === value + }) || {} + ) + } }) } + +export async function asyncGetOptionsLabelByBaseCode(baseCode, value, deepOption) { + return (await asyncGetOptionsItemByBaseCode(baseCode, value, deepOption))?.label +} + +export function removeOptionsCache(baseCode) { + delete OptionsMap[baseCode] +} diff --git a/src/utils/request.js b/src/utils/request.js index 5186099..442d7c1 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -78,7 +78,7 @@ service.interceptors.response.use( location.reload() }) } else { - if (error.config.throwError) { // 不被拦截处理 + if (error.config.throwError || error.config.useResponseData) { // 不被拦截处理 throw error.response } else { Message({ From 0e6b333fcfaf5195979ca7f5fd8318ad01a43f6f Mon Sep 17 00:00:00 2001 From: chenxf Date: Tue, 6 Jan 2026 14:18:29 +0800 Subject: [PATCH 3/7] fix --- src/plugins/EasyComponent/object-helper.js | 75 ++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 src/plugins/EasyComponent/object-helper.js diff --git a/src/plugins/EasyComponent/object-helper.js b/src/plugins/EasyComponent/object-helper.js new file mode 100644 index 0000000..7137d7c --- /dev/null +++ b/src/plugins/EasyComponent/object-helper.js @@ -0,0 +1,75 @@ +export function scanObj(obj, handler) { + for (const key in obj) { + if ( + typeof obj[key] === 'object' && + obj[key] !== null && + !Array.isArray(obj[key]) + ) { + scanObj(obj[key], handler) + } else { + handler(obj, key) + } + } +} + +export function filterObj(obj, fn, clone = true) { + if (clone) { + obj = JSON.parse(JSON.stringify(obj)) + } + scanObj(obj, (currentObj, key) => { + if (!fn(currentObj[key])) { + delete currentObj[key] + } + }) + return obj +} + +export function resetObj(obj, fn, clone = false) { + if (clone) { + obj = JSON.parse(JSON.stringify(obj)) + } + scanObj(obj, (currentObj, key) => { + const readyValue = (() => { + if (Array.isArray(currentObj[key])) { + return [] + } + return undefined + })() + currentObj[key] = fn ? fn(currentObj, key, readyValue) : readyValue + }) + return obj +} + +export function scanObjArr( + objArr, + handler, + options = { children: 'children' }, + parent +) { + for (const obj of objArr) { + handler(obj, objArr, parent) + if (Array.isArray(obj[options.children])) { + scanObjArr(obj[options.children], handler, options, obj, parent) + } + } +} + +export function deepFindObjArr( + objArr, + handler, + options = { children: 'children' } +) { + let result + let lock = false + scanObjArr( + objArr, + (obj, objArr) => { + if (!lock && handler(obj, objArr)) { + lock = true + result = obj + } + }, + options + ) + return result +} From 1ee6f196d33adc58a63eebcf4c7ba132bca9869c Mon Sep 17 00:00:00 2001 From: chenxf Date: Tue, 6 Jan 2026 14:38:32 +0800 Subject: [PATCH 4/7] fix --- src/api/index.js | 13 +++++++++++++ src/utils/index.js | 44 ++++++++++++++++++++++++++++++++++++++++++++ vue.config.js | 3 +-- 3 files changed, 58 insertions(+), 2 deletions(-) diff --git a/src/api/index.js b/src/api/index.js index 72b9a84..0b9c2c5 100644 --- a/src/api/index.js +++ b/src/api/index.js @@ -2,6 +2,7 @@ import request from '@/utils/request' export function findNextSequenceFlowList(params) { return request({ + useResponseData: true, url: '/xrActivity/findNextSequenceFlowList', method: 'get', params @@ -10,6 +11,7 @@ export function findNextSequenceFlowList(params) { export function taskInfo(params) { return request({ + useResponseData: true, url: '/xrTaskList/taskInfo', method: 'get', params @@ -23,6 +25,7 @@ export function taskInfo(params) { */ export function getEBaseinfo(params) { return request({ + useResponseData: true, url: '/baseinfo/getEBaseinfo', method: 'get', params @@ -36,6 +39,7 @@ export function getEBaseinfo(params) { */ export function baseinfoList(data) { return request({ + useResponseData: true, url: '/baseinfo/baseinfoList', method: 'post', data @@ -44,6 +48,7 @@ export function baseinfoList(data) { export function marketEntities(data) { return request({ + useResponseData: true, url: '/xr-claim/marketEntities', method: 'post', data @@ -51,6 +56,7 @@ export function marketEntities(data) { } export function fetchAicorgUrl(params) { return request({ + useResponseData: true, url: '/user/fetchAicorgUrl', method: 'post', params @@ -59,6 +65,7 @@ export function fetchAicorgUrl(params) { export function isTaskCreater(params) { return request({ + useResponseData: true, url: '/xrTaskList/isTaskCreater', method: 'get', params @@ -67,6 +74,7 @@ export function isTaskCreater(params) { export function findCurrentNode(params) { return request({ + useResponseData: true, url: '/xrActivity/findCurrentNode', method: 'get', params @@ -79,6 +87,7 @@ export function findCurrentNode(params) { */ export function listBaseinfo(data) { return request({ + useResponseData: true, url: '/baseinfo/list', method: 'post', data @@ -91,6 +100,7 @@ export function listBaseinfo(data) { */ export function superviseDeptEBaseinfoList(data) { return request({ + useResponseData: true, url: '/xr-supervisor/superviseDeptEBaseinfoList', method: 'post', data @@ -104,6 +114,7 @@ export function superviseDeptEBaseinfoList(data) { */ export function getTOrgunitsByOrgnumber(params) { return request({ + useResponseData: true, url: '/tOrgunits/getTOrgunitsByOrgnumber', method: 'get', params @@ -112,6 +123,7 @@ export function getTOrgunitsByOrgnumber(params) { export function getEntTSAbnListPage(data) { return request({ + useResponseData: true, url: '/baseinfo/getEntTSAbnListPage', method: 'post', data @@ -120,6 +132,7 @@ export function getEntTSAbnListPage(data) { export function getEntIllegalPage(data) { return request({ + useResponseData: true, url: '/baseinfo/getEntIllegalPage', method: 'post', data diff --git a/src/utils/index.js b/src/utils/index.js index accc574..3f0db5a 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -1,3 +1,4 @@ +import { Loading } from 'element-ui' /** * Created by PanJiaChen on 16/11/18. */ @@ -131,3 +132,46 @@ export function resetObj(obj, defaultValue = {}) { } } } + +export const createGlobalLoading = (function() { + const handlersMap = { + default: [] + } + let loading + return function(handler, scopeKey = 'default', cusLoading) { + if (!handlersMap[scopeKey]) { + handlersMap[scopeKey] = [] + } + const handlers = handlersMap[scopeKey] + if (handlers.length === 0) { + if (cusLoading) { + if (typeof cusLoading.start === 'function') { + cusLoading.start() + } + } else { + loading = Loading.service({ + lock: true, + text: '请稍后', + spinner: 'el-icon-loading', + background: 'rgba(0, 0, 0, 0.7)' + }) + } + } + const id = (new Date()).valueOf() + handlers.push(id) + return (async() => { return typeof handler === 'function' ? handler() : handler })().then((result) => { + return result + }).finally(() => { + handlers.splice(handlers.indexOf(id), 1) + if (handlers.length === 0) { + if (cusLoading) { + if (typeof cusLoading.finally === 'function') { + cusLoading.finally() + } + } else { + loading.close() + } + } + }) + } +})() diff --git a/vue.config.js b/vue.config.js index cec2b20..82e32a6 100644 --- a/vue.config.js +++ b/vue.config.js @@ -50,8 +50,7 @@ module.exports = { // target: `http://172.22.80.129`, changeOrigin: true } - }, - after: require('./mock/mock-server.js') + } }, configureWebpack: { // provide the app's title in webpack's name field, so that From 65367e116932478abc62da65f37f7d3e88debe49 Mon Sep 17 00:00:00 2001 From: chenxf Date: Tue, 6 Jan 2026 14:44:36 +0800 Subject: [PATCH 5/7] =?UTF-8?q?fix(forceNotice):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=8C=85=E5=90=AB=E5=A4=84=E7=90=86=E9=A1=B5=E9=9D=A2=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E6=98=A0=E5=B0=84=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修正uniscid字段为uniscId,保持命名规范一致性 - 修正entname字段为entName,保持命名规范一致性 - 修正分页总数计算,使用data.length替代data.total --- src/views/forceNotice/inclusion/handle.vue | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/views/forceNotice/inclusion/handle.vue b/src/views/forceNotice/inclusion/handle.vue index 25c223f..e440d24 100644 --- a/src/views/forceNotice/inclusion/handle.vue +++ b/src/views/forceNotice/inclusion/handle.vue @@ -169,24 +169,24 @@ export default { { type: 'input', label: '统一社会信用代码/注册号', - prop: 'uniscid', + prop: 'uniscId', tableProps: { showOverflowTooltip: true, width: '220px', formatter: (row, column, cellValue, index) => { - return `${row.uniscid || row.regNo || ''}` + return `${row.uniscId || row.regNo || ''}` } } }, { type: 'input', label: '主体名称', - prop: 'entname', + prop: 'entName', tableProps: { showOverflowTooltip: true, width: '300px', formatter: (row, column, cellValue, index) => { - return `${row.entname || ''}` + return `${row.entName || ''}` } } }, @@ -691,7 +691,7 @@ export default { }).then((data) => { return { tableData: data, - total: data.total + total: data.length } }) }, From 39597fe39bcc9564817564344412a491fd197b09 Mon Sep 17 00:00:00 2001 From: chenxf Date: Tue, 6 Jan 2026 15:37:26 +0800 Subject: [PATCH 6/7] =?UTF-8?q?refactor(api):=20=E6=9B=B4=E6=96=B0API?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3URL=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 统一调整API接口路径命名规范,将带有xr前缀的路径更改为标准路径: - /xrBaseCode/list -> /constant/list - /xrAttachment/delLawFile -> /attachment/delLawFile - /xrAttachment/listByBizSepNo -> /attachment/listByBizSepNo feat(main): 添加全局console对象 在Vue原型链上添加console对象,便于全局调试使用 refactor(handle): 优化组件中的事件处理逻辑 - 修复radio组件change事件处理函数,使用箭头函数并修正参数引用 - 为flowModel添加默认空数组返回,避免undefined错误 - 修正API响应数据结构,从data.data获取实际数据 --- src/api/force.js | 6 +++--- src/main.js | 1 + src/views/forceNotice/inclusion/handle.vue | 10 +++++----- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/api/force.js b/src/api/force.js index 25db417..8155c1b 100644 --- a/src/api/force.js +++ b/src/api/force.js @@ -236,7 +236,7 @@ export function isTaskCreater(params) { export function xrBaseCodeList(data) { return request({ useResponseData: true, - url: '/xrBaseCode/list', + url: '/constant/list', method: 'post', data }).then((data) => { @@ -253,7 +253,7 @@ export function xrBaseCodeList(data) { export function xrAttachmentDelLawFile(params) { return request({ useResponseData: true, - url: '/xrAttachment/delLawFile', + url: '/attachment/delLawFile', method: 'post', params }) @@ -262,7 +262,7 @@ export function xrAttachmentDelLawFile(params) { export function xrAttachmentListByBizSepNo(data) { return request({ useResponseData: true, - url: '/xrAttachment/listByBizSepNo', + url: '/attachment/listByBizSepNo', method: 'post', data }) diff --git a/src/main.js b/src/main.js index 9485925..7fc5296 100644 --- a/src/main.js +++ b/src/main.js @@ -49,6 +49,7 @@ Vue.prototype.$moment = moment // 工具类 Vue.prototype.$util = util Vue.prototype.$utils = utils +Vue.prototype.console = console Vue.component('paper-swiper', () => import ('@/components/PaperSwiper')) Vue.component('paper', () => import ('@/components/Paper')) Vue.component('CommonTitle', () => import ('@/components/CommonTitle')) diff --git a/src/views/forceNotice/inclusion/handle.vue b/src/views/forceNotice/inclusion/handle.vue index e440d24..2716849 100644 --- a/src/views/forceNotice/inclusion/handle.vue +++ b/src/views/forceNotice/inclusion/handle.vue @@ -109,9 +109,9 @@
{ // 调用方法并传入 isUpper 参数 - getUsersWithPermission(val === '上级部门处理人' ? 1 : 0); + getUsersWithPermission(localSelection === '上级部门处理人' ? 1 : 0); scope.easyFormItemBindData.componentScope.formInstance.clearValidate(scope.field.prop); }" > @@ -396,7 +396,7 @@ export default { required: true, span: 24, options: ({ formData }) => { - return this.flowModel + return this.flowModel || [] }, showInForm: () => { return !this.readonly @@ -601,7 +601,7 @@ export default { permission, this.$store.getters.orgId ).then((data) => { - this.nextPerformerMap = data + this.nextPerformerMap = data.data })) } return Promise.all(ps) @@ -677,7 +677,7 @@ export default { this.$store.getters.orgId, isUpper ).then((data) => { - this.nextPerformerMap = data + this.nextPerformerMap = data.data })) } return Promise.all(ps) From 4ca16abd59431d10c8405840ec121d14b6ec8b24 Mon Sep 17 00:00:00 2001 From: chenxf Date: Tue, 6 Jan 2026 15:45:30 +0800 Subject: [PATCH 7/7] =?UTF-8?q?refactor(EntList):=20=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E5=AF=BC=E5=85=A5getIsUserProp=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将getIsUserProp从 '@/api/abnormal' 移至 '@/api/force',使API调用更加集中和规范。 refactor(SpeList): 统一导入getIsUserProp API 将getIsUserProp从 '@/api/abnormal' 移至 '@/api/force',使API调用更加集中和规范。 fix(inclusion/list): 修复字段名错误并添加格式化器 修复uniscid字段名为uniscId,并为历史记录表格添加企业名称格式化显示功能。 --- src/views/forceNotice/component/EntList.vue | 3 +-- src/views/forceNotice/component/SpeList.vue | 3 +-- src/views/forceNotice/inclusion/list.vue | 7 +++++-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/views/forceNotice/component/EntList.vue b/src/views/forceNotice/component/EntList.vue index ada9b2d..33911b2 100644 --- a/src/views/forceNotice/component/EntList.vue +++ b/src/views/forceNotice/component/EntList.vue @@ -28,8 +28,7 @@