vue2-client 1.22.24 → 1.22.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="com.codeverse.userSettings.MarscodeWorkspaceAppSettingsState">
4
+ <option name="chatAppRouterInfo" value="chat-session" />
5
+ </component>
6
+ </project>
@@ -1,6 +1,7 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <module type="WEB_MODULE" version="4">
3
- <component name="NewModuleRootManager">
2
+ <module type="JAVA_MODULE" version="4">
3
+ <component name="NewModuleRootManager" inherit-compiler-output="true">
4
+ <exclude-output />
4
5
  <content url="file://$MODULE_DIR$" />
5
6
  <orderEntry type="inheritedJdk" />
6
7
  <orderEntry type="sourceFolder" forTests="false" />
@@ -0,0 +1,14 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="PublishConfigData" remoteFilesAllowedToDisappearOnAutoupload="false">
4
+ <serverData>
5
+ <paths name="50.4">
6
+ <serverdata>
7
+ <mappings>
8
+ <mapping local="$PROJECT_DIR$" web="/" />
9
+ </mappings>
10
+ </serverdata>
11
+ </paths>
12
+ </serverData>
13
+ </component>
14
+ </project>
package/.idea/misc.xml CHANGED
@@ -1,12 +1,6 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="MavenImportPreferences">
4
- <option name="generalSettings">
5
- <MavenGeneralSettings>
6
- <option name="localRepository" value="D:\apache-maven-3.5.2\repository" />
7
- <option name="mavenHome" value="D:/apache-maven-3.5.2" />
8
- <option name="userSettingsFile" value="D:\apache-maven-3.5.2\conf\settings.xml" />
9
- </MavenGeneralSettings>
10
- </option>
11
- </component>
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="ProjectRootManager" version="2" languageLevel="JDK_22" default="true" project-jdk-name="22" project-jdk-type="JavaSDK">
4
+ <output url="file://$PROJECT_DIR$/out" />
5
+ </component>
12
6
  </project>
package/.idea/vcs.xml CHANGED
@@ -1,6 +1,6 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="VcsDirectoryMappings">
4
- <mapping directory="" vcs="Git" />
5
- </component>
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="VcsDirectoryMappings">
4
+ <mapping directory="" vcs="Git" />
5
+ </component>
6
6
  </project>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vue2-client",
3
- "version": "1.22.24",
3
+ "version": "1.22.25",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "serve": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve --no-eslint",
@@ -22,44 +22,46 @@
22
22
  @focus="handleFocus"
23
23
  :style="inputStyle">
24
24
  <div slot="dropdownRender">
25
- <a-tabs
26
- v-model="activeKey"
27
- :size="size"
28
- @mousedown="handleTabMousedown"
29
- >
30
- <a-tab-pane
31
- :tab="view.key"
32
- v-for="(view,index) in viewArr"
33
- :key="view.key"
34
- v-if="contexts > index"
35
- :disabled="tagData[view.value].length === 0">
36
- <a-input
37
- v-model="searchKeyword[index]"
38
- placeholder="搜索"
39
- class="search-input"
40
- style="margin-bottom: 10px; width: 100%;"
41
- />
42
- <a-checkable-tag
43
- :style="tagStyle"
44
- v-for="item of filteredTags(view.value, index)"
45
- :key="item.code"
46
- @change="tagClick(view.key, item)"
47
- >
48
- <a-tooltip
49
- placement="top"
50
- :mouseEnterDelay="0.5"
51
- :title="item.name"
52
- :getPopupContainer=" triggerNode => { return triggerNode.parentElement } "
25
+ <a-spin :spinning="loading" tip="加载中...">
26
+ <a-tabs
27
+ v-model="activeKey"
28
+ :size="size"
29
+ @mousedown="handleTabMousedown"
30
+ >
31
+ <a-tab-pane
32
+ :tab="view.key"
33
+ v-for="(view,index) in viewArr"
34
+ :key="view.key"
35
+ v-if="contexts > index"
36
+ :disabled="tagData[view.value].length === 0">
37
+ <a-input
38
+ v-model="searchKeyword[index]"
39
+ placeholder="搜索"
40
+ class="search-input"
41
+ style="margin-bottom: 10px; width: 100%;"
42
+ />
43
+ <a-checkable-tag
44
+ :style="tagStyle"
45
+ v-for="item of filteredTags(view.value, index)"
46
+ :key="item.code"
47
+ @change="tagClick(view.key, item)"
53
48
  >
54
- {{ item?.name?.length > 8 ? `${item.name.slice(0, 8)}...` : item.name }}
55
- </a-tooltip>
56
- </a-checkable-tag>
57
- <a-empty v-if="tagData[view.value].length === 0" :img="Empty.PRESENTED_IMAGE_SIMPLE"></a-empty>
58
- </a-tab-pane>
59
- <a-button slot="tabBarExtraContent" @click="back">
60
- 收起
61
- </a-button>
62
- </a-tabs>
49
+ <a-tooltip
50
+ placement="top"
51
+ :mouseEnterDelay="0.5"
52
+ :title="item.name"
53
+ :getPopupContainer=" triggerNode => { return triggerNode.parentElement } "
54
+ >
55
+ {{ item?.name?.length > 8 ? `${item.name.slice(0, 8)}...` : item.name }}
56
+ </a-tooltip>
57
+ </a-checkable-tag>
58
+ <a-empty v-if="tagData[view.value].length === 0" :img="Empty.PRESENTED_IMAGE_SIMPLE"></a-empty>
59
+ </a-tab-pane>
60
+ <a-button slot="tabBarExtraContent" @click="back">
61
+ 收起
62
+ </a-button>
63
+ </a-tabs>
64
+ </a-spin>
63
65
  </div>
64
66
  </a-select>
65
67
  </div>
@@ -95,6 +97,7 @@ export default {
95
97
  return {
96
98
  Empty,
97
99
  open: false,
100
+ loading: false,
98
101
  tagData: {
99
102
  divisionsForTree: [],
100
103
  // 市
@@ -131,6 +134,7 @@ export default {
131
134
  }
132
135
  },
133
136
  async mounted () {
137
+ this.loading = true
134
138
  runLogic('getOperatingAreas', {
135
139
  orgId: this.currUser.orgid
136
140
  }, 'af-revenue').then(res => {
@@ -138,6 +142,8 @@ export default {
138
142
  if (this.value) {
139
143
  this.setValue(this.value, res)
140
144
  }
145
+ }).finally(() => {
146
+ this.loading = false
141
147
  })
142
148
  },
143
149
  model: {
@@ -287,9 +293,42 @@ export default {
287
293
  parent = findParent(parent.code, tree)
288
294
  }
289
295
  }
296
+ // 设置下级数据,确保可以正常选择
297
+ if (this.model[0].code) {
298
+ const provinceNode = findNode(this.model[0].code, tree)
299
+ this.tagData.cityData = provinceNode ? provinceNode.children || [] : []
300
+ }
301
+ if (this.model[1].code) {
302
+ const cityNode = findNode(this.model[1].code, tree)
303
+ this.tagData.areaData = cityNode ? cityNode.children || [] : []
304
+ }
305
+ if (this.model[2].code) {
306
+ const areaNode = findNode(this.model[2].code, tree)
307
+ this.tagData.streetData = areaNode ? areaNode.children || [] : []
308
+ }
309
+ if (this.model[3].code) {
310
+ const streetNode = findNode(this.model[3].code, tree)
311
+ this.tagData.communityData = streetNode ? streetNode.children || [] : []
312
+ }
290
313
  this.getResultText(this.contexts)
291
314
  }
292
315
  },
316
+ resetState () {
317
+ this.tagData.cityData = []
318
+ this.tagData.areaData = []
319
+ this.tagData.streetData = []
320
+ this.tagData.communityData = []
321
+ this.model = [
322
+ { name: '', code: '' },
323
+ { name: '', code: '' },
324
+ { name: '', code: '' },
325
+ { name: '', code: '' },
326
+ { name: '', code: '' }
327
+ ]
328
+ this.activeKey = '省/直辖市'
329
+ this.valueView = undefined
330
+ this.searchKeyword = ['', '', '', '', '']
331
+ },
293
332
  tagClick (e, item) {
294
333
  if (e === '省/直辖市') {
295
334
  // 如果是同一个标签
@@ -1,6 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="Encoding" native2AsciiForPropertiesFiles="true" defaultCharsetForPropertiesFiles="UTF-8">
4
- <file url="PROJECT" charset="UTF-8" />
5
- </component>
6
- </project>
@@ -1,137 +0,0 @@
1
- Index: src/base-client/components/common/XFormTable/demo.vue
2
- IDEA additional info:
3
- Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
4
- <+><template>\r\n <a-card :bordered=\"false\">\r\n <x-form-table\r\n title=\"示例表单\"\r\n :queryParamsName=\"queryParamsName\"\r\n :fixedAddForm=\"fixedAddForm\"\r\n :externalSelectedRowKeys=\"selectedKeys\"\r\n @action=\"action\"\r\n @selectRow=\"selectRow\"\r\n @columnClick=\"columnClick\"\r\n @ceshi=\"ceshi\"\r\n @rowDblClick=\"rowDblClick\"\r\n serviceName=\"af-revenue\"\r\n ref=\"xFormTable\"\r\n :reserveSpaceForButtons=\"true\"\r\n @tableBaseEnter=\"tableBaseEnter\"\r\n @addFormSubmit=\"addFormSubmit\"\r\n ></x-form-table>\r\n </a-card>\r\n</template>\r\n\r\n<script>\r\nimport XFormTable from '@vue2-client/base-client/components/common/XFormTable/XFormTable.vue'\r\nimport { microDispatch } from '@vue2-client/utils/microAppUtils'\r\nexport default {\r\n name: 'Demo',\r\n components: {\r\n XFormTable\r\n },\r\n data() {\r\n return {\r\n // 查询配置文件名\r\n queryParamsName: 'Test01CRUD',\r\n // 查询配置左侧tree\r\n xTreeConfigName: 'addressType',\r\n // 新增表单固定值\r\n fixedAddForm: {},\r\n // 是否显示详情抽屉\r\n detailVisible: false,\r\n // 当前记录\r\n record: {},\r\n // 选中的行keys\r\n selectedKeys: [],\r\n selected: {\r\n keys: [],\r\n rows: []\r\n }\r\n }\r\n },\r\n\r\n methods: {\r\n tableBaseEnter(...args) {\r\n const [attr, value, currentRecord, currentIndex, nextRecord, nextIndex] = args\r\n console.log('====>', attr, value, currentRecord, currentIndex, nextRecord, nextIndex)\r\n\r\n console.log('当前行:', currentIndex, '下一行:', nextIndex)\r\n if (!nextIndex) {\r\n this.$message.warning('没有下一行')\r\n return\r\n }\r\n // 跳转到下一行的同一列\r\n this.$refs.xFormTable.$refs.xTable.focusInput(nextIndex, attr.model)\r\n setTimeout(() => {\r\n this.$refs.xFormTable.$refs.xTable.focusInput(nextIndex, attr.model)\r\n }, 10)\r\n },\r\n handleCustomQuery() {\r\n this.$refs.xFormTable.queryTable({\r\n uf_f_alias: 'XianFeng',\r\n uf_f_card_id: '10500030'\r\n })\r\n },\r\n rowDblClick(record) {\r\n console.log('rowDblClick', record)\r\n },\r\n // input框 行編輯參數傳遞\r\n ceshi(...args) {\r\n // attr, value, currentRecord, currentIndex, nextRecord, nextIndex\r\n const [attr, value, currentRecord, currentIndex, nextRecord, nextIndex] = args\r\n console.log('ceshi', attr, value, currentRecord, currentIndex, nextRecord, nextIndex)\r\n // 示例:当按下 Enter 键且有下一行时,跳转到下一行的同一列\r\n // 可以在这里执行业务逻辑(例如:保存数据)\r\n console.log('当前行:', currentIndex, '下一行:', nextIndex)\r\n if (!nextIndex) {\r\n this.$message.warning('没有下一行')\r\n return\r\n }\r\n // 跳转到下一行的同一列\r\n this.$refs.xFormTable.$refs.xTable.focusInput(nextIndex, attr.model)\r\n },\r\n test() {\r\n this.$refs.xFormTable.setTableData([])\r\n },\r\n defaultF() {\r\n this.$refs.xFormTable.setTableSize('default')\r\n },\r\n middleF() {\r\n this.$refs.xFormTable.setTableSize('middle')\r\n },\r\n smallF() {\r\n this.$refs.xFormTable.setTableSize('small')\r\n },\r\n columnClick(key, value, record) {\r\n microDispatch({\r\n type: 'v3route',\r\n path: '/bingliguanli/dianzibingliluru',\r\n props: { selected: arguments[0].his_f_admission_id }\r\n })\r\n },\r\n action(record, id, actionType) {\r\n this.detailVisible = true\r\n console.log('触发了详情操作', record, id, actionType)\r\n },\r\n onClose() {\r\n this.detailVisible = false\r\n // 关闭详情之后重新查询表单\r\n this.$refs.xFormTable.refreshTable(true)\r\n },\r\n selectRow(selectedRowKeys, selectedRows) {\r\n this.selected = {\r\n keys: selectedRowKeys,\r\n rows: selectedRows\r\n }\r\n },\r\n addFormSubmit(params, callback){\r\n callback()\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped></style>\r\n
5
- Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
6
- <+>UTF-8
7
- ===================================================================
8
- diff --git a/src/base-client/components/common/XFormTable/demo.vue b/src/base-client/components/common/XFormTable/demo.vue
9
- --- a/src/base-client/components/common/XFormTable/demo.vue (revision cb0e303eb0f8e4fd4e1bf13352d6033873d047d7)
10
- +++ b/src/base-client/components/common/XFormTable/demo.vue (date 1782808068826)
11
- @@ -3,18 +3,8 @@
12
- <x-form-table
13
- title="示例表单"
14
- :queryParamsName="queryParamsName"
15
- - :fixedAddForm="fixedAddForm"
16
- - :externalSelectedRowKeys="selectedKeys"
17
- - @action="action"
18
- - @selectRow="selectRow"
19
- - @columnClick="columnClick"
20
- - @ceshi="ceshi"
21
- - @rowDblClick="rowDblClick"
22
- - serviceName="af-revenue"
23
- + serviceName="af-iot"
24
- ref="xFormTable"
25
- - :reserveSpaceForButtons="true"
26
- - @tableBaseEnter="tableBaseEnter"
27
- - @addFormSubmit="addFormSubmit"
28
- ></x-form-table>
29
- </a-card>
30
- </template>
31
- @@ -30,7 +20,7 @@
32
- data() {
33
- return {
34
- // 查询配置文件名
35
- - queryParamsName: 'Test01CRUD',
36
- + queryParamsName: 'crud_device_exception_list_manage',
37
- // 查询配置左侧tree
38
- xTreeConfigName: 'addressType',
39
- // 新增表单固定值
40
- Index: src/config/default/setting.config.js
41
- IDEA additional info:
42
- Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
43
- <+>// 此配置为系统默认设置\r\nmodule.exports = {\r\n lang: 'CN', // 语言,可选 CN(简体)、HK(繁体)、US(英语),也可扩展其它语言\r\n theme: { // 主题\r\n color: '#1890ff', // 主题色\r\n mode: 'dark', // 主题模式 可选 dark、 light 和 night\r\n success: '#52c41a', // 成功色\r\n warning: '#faad14', // 警告色\r\n error: '#f5222f' // 错误色\r\n },\r\n layout: 'side', // 导航布局,可选 side 和 head,分别为侧边导航和顶部导航\r\n fixedHeader: true, // 固定头部状态栏,true:固定,false:不固定\r\n fixedSideBar: true, // 固定侧边栏,true:固定,false:不固定\r\n fixedTabs: true, // 固定页签头,true:固定,false:不固定\r\n pageWidth: 'fixed', // 内容区域宽度,fixed:固定宽度,fluid:流式宽度\r\n weekMode: false, // 色弱模式,true:开启,false:不开启\r\n multiPage: true, // 多页签模式,true:开启,false:不开启\r\n cachePage: true, // 是否缓存页面数据,仅多页签模式下生效,true 缓存, false 不缓存\r\n hideSetting: false, // 隐藏设置抽屉,true:隐藏,false:不隐藏\r\n homePage: '/dashboard/workplace', // 首页路由, 登陆后默认打开\r\n ticketPage: '/submitTicket', // 提交工单路由\r\n systemName: 'V4基础组件平台', // 系统名称\r\n logoSrc: '/defaultLogo.png', // LOGO路径\r\n systemNameFontSize: '20px', // 系统名称字体大小\r\n systemDesc: '为PC端中、后台系统业务开发提供支持', // 系统描述\r\n copyright: '2022 AoFengSoft', // copyright\r\n copyrightStyle: undefined,\r\n asyncRoutes: true, // 异步加载路由,true:开启,false:不开启\r\n showPageTitle: true, // 是否显示页面标题(PageLayout 布局中的页面标题),true:显示,false:不显示\r\n filterMenu: true, // 根据权限过滤菜单,true:过滤,false:不过滤\r\n animate: { // 动画设置\r\n disabled: true, // 禁用动画,true:禁用,false:启用\r\n name: 'lightSpeed', // 动画效果,支持的动画效果可参考 ./animate.config.js\r\n direction: 'left' // 动画方向,切换页面时动画的方向,参考 ./animate.config.js\r\n },\r\n footerLinks: [ // 页面底部链接,{link: '链接地址', name: '名称/显示文字', icon: '图标,支持 ant design vue 图标库'}\r\n ],\r\n // 菜单工具项显示\r\n menuTools: {\r\n // 通知\r\n notice: true\r\n },\r\n // 旧系统路径\r\n iframeSrc: '/singlepage/index.html',\r\n // 兼容旧版本 V4(最新产品) V3(V3产品) OA(公司OA)\r\n compatible: 'V4',\r\n // 路由资源名称\r\n routeName: '智慧燃气',\r\n // 自定义组件集合 格式为组件名: 组件路径(不需要带@/)\r\n customizeComponent: {},\r\n // 自定义默认头像路径\r\n defaultAvatarUrl: 'https://gw.alipayobjects.com/zos/rmsportal/jZUIxmJycoymBprLOUbT.png',\r\n gaode_key: 'a37ffa0cad038bef7242cdff7084cd36',\r\n gaode_secret_key: 'da72499e61d9299f447bb5b2af9f9e6c',\r\n}\r\n
44
- Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
45
- <+>UTF-8
46
- ===================================================================
47
- diff --git a/src/config/default/setting.config.js b/src/config/default/setting.config.js
48
- --- a/src/config/default/setting.config.js (revision cb0e303eb0f8e4fd4e1bf13352d6033873d047d7)
49
- +++ b/src/config/default/setting.config.js (date 1782892265295)
50
- @@ -43,7 +43,7 @@
51
- // 旧系统路径
52
- iframeSrc: '/singlepage/index.html',
53
- // 兼容旧版本 V4(最新产品) V3(V3产品) OA(公司OA)
54
- - compatible: 'V4',
55
- + compatible: 'V3',
56
- // 路由资源名称
57
- routeName: '智慧燃气',
58
- // 自定义组件集合 格式为组件名: 组件路径(不需要带@/)
59
- Index: src/base-client/components/common/XTable/ExportExcel.vue
60
- IDEA additional info:
61
- Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
62
- <+><script>\r\nimport { exportData, getConfigByNameAsync, queryAll } from '@vue2-client/services/api/common'\r\nimport { formatDate } from '@vue2-client/utils/util'\r\nimport { exportJson } from '@vue2-client/utils/excel/Export2Excel'\r\nimport { Ellipsis } from '@vue2-client/components'\r\nimport PrintBill from '@vue2-client/base-client/components/common/XPrint/PrintBill.vue'\r\nimport hiPrintCss from '@vue2-client/base-client/components/common/XPrint/css/hiPrintCss'\r\n\r\nexport default {\r\n name: 'ExportExcel',\r\n components: { PrintBill, Ellipsis },\r\n data () {\r\n return {\r\n // 导出列选择\r\n exportModalVisible: false,\r\n summaryLoadingShow: false,\r\n tipMsg: '正在获取汇总数据。。。',\r\n exportType: false,\r\n type: 'export',\r\n modalTitle: '',\r\n selectedExportColumns: [],\r\n exportSelectedRows: false,\r\n allColumnsSelected: false,\r\n exportFileName: '',\r\n confirmLoading: null,\r\n printData: {},\r\n // 选中的查询条件字段名\r\n selectedQueryConditions: [],\r\n // 查询条件的 labelData 数据\r\n queryLabelData: null,\r\n // 自定义表头行数据\r\n customHeaders: [],\r\n }\r\n },\r\n inject: ['tableContext', 'getFormLabelData'],\r\n computed: {\r\n // 组合 tableColumns 与 excelImageExportTemplate 中的列,避免重复\r\n exportColumns () {\r\n const tableColumns = this.tableContext?.tableColumns || []\r\n const templateList = this.tableContext?.excelImageExportTemplate || []\r\n if (!Array.isArray(templateList) || !templateList.length) return tableColumns\r\n\r\n const existedKeys = new Set(tableColumns.map(column => column.dataIndex))\r\n const extraColumns = []\r\n\r\n templateList.forEach(item => {\r\n const columns = Array.isArray(item.column) ? item.column : []\r\n const titles = Array.isArray(item.title) ? item.title : []\r\n\r\n columns.forEach((colKey, index) => {\r\n if (!colKey || existedKeys.has(colKey)) return\r\n const colTitle = titles[index] || colKey\r\n extraColumns.push({\r\n dataIndex: colKey,\r\n title: colTitle,\r\n slotType: 'excelImageExportTemplate',\r\n defaultExport: false\r\n })\r\n existedKeys.add(colKey)\r\n })\r\n })\r\n\r\n return tableColumns.concat(extraColumns)\r\n }\r\n },\r\n methods: {\r\n // 导出选中或本页数据\r\n handleExport (type, title, customHeaders = []) {\r\n this.modalTitle = '选择导出列'\r\n this.exportFileName = title || '查询导出'\r\n this.type = 'export'\r\n this.customHeaders = customHeaders\r\n this.handle(type)\r\n },\r\n // 打印选中或本页数据\r\n handlePrint (type, printData) {\r\n this.modalTitle = '选择打印数据列'\r\n this.type = 'print'\r\n this.printData = printData\r\n this.customHeaders = []\r\n this.handle(type)\r\n },\r\n handle (type) {\r\n this.exportType = type\r\n this.confirmLoading = false\r\n this.exportModalVisible = true\r\n // 组织默认选中的字段\r\n this.selectedExportColumns = this.exportColumns\r\n .filter(column => column.slotType !== 'action' && column.defaultExport)\r\n .map(column => column.dataIndex)\r\n\r\n // 获取查询条件的 labelData,并默认全部选中\r\n if (this.getFormLabelData) {\r\n this.queryLabelData = this.getFormLabelData()\r\n // 默认全部选中所有查询条件字段(根据 labels 数组的索引)\r\n if (this.queryLabelData && this.queryLabelData.labels && this.queryLabelData.labels.length > 0) {\r\n this.selectedQueryConditions = this.queryLabelData.labels.map((_, index) => index)\r\n }\r\n }\r\n },\r\n handleGen () {\r\n const tHeader = this.exportColumns\r\n .filter(column => this.selectedExportColumns.includes(column.dataIndex))\r\n .map(column => column.title)\r\n const filterVal = this.exportColumns\r\n .filter(column => this.selectedExportColumns.includes(column.dataIndex))\r\n .map(column => column.dataIndex)\r\n this.confirmLoading = true\r\n if (this.type === 'export') {\r\n if (this.exportType === 'curPage' || this.exportType === 'selected') {\r\n this.handleExportCur(tHeader, filterVal, this.exportType === 'selected')\r\n } else if (this.exportType === 'exportByQuery') {\r\n this.handleExportByQuery(tHeader, filterVal)\r\n }\r\n } else {\r\n if (this.exportType === 'curPage' || this.exportType === 'selected') {\r\n this.handlePrintCur(tHeader, filterVal, this.exportType === 'selected')\r\n } else if (this.exportType === 'exportByQuery') {\r\n this.handlePrintByQuery(tHeader, filterVal)\r\n }\r\n }\r\n },\r\n // 打印选中或本页数据\r\n handlePrintCur (tHeader, filterVal, isSelected) {\r\n let exportData\r\n if (isSelected) {\r\n exportData = this.tableContext.selectedRows\r\n } else {\r\n exportData = this.tableContext.getTableData()\r\n }\r\n // 获取模板内容\r\n this.handlePrintGen(tHeader, filterVal, exportData)\r\n },\r\n // 打印查询结果\r\n async handlePrintByQuery (tHeader, filterVal) {\r\n try {\r\n const requestParameters = this.tableContext.requestParameters\r\n this.summaryLoadingShow = true\r\n this.tipMsg = '正在组织数据。。。'\r\n const res = await queryAll(Object.assign(requestParameters, { userId: this.tableContext.currUser?.id, pageSize: 200 }), this.tableContext.serviceName, this.tableContext.env === 'dev')\r\n this.handlePrintGen(tHeader, filterVal, res.data)\r\n } finally {\r\n this.confirmLoading = false\r\n }\r\n },\r\n // 获取模板内容\r\n handlePrintGen (tHeader, filterVal, exportData) {\r\n getConfigByNameAsync(this.tableContext.printTemplate, this.tableContext.serviceName).then(async res => {\r\n if (this.printData && this.printData.summary) {\r\n this.summaryLoadingShow = true\r\n this.tipMsg = '正在获取汇总数据。。。'\r\n this.printData.summaryData = {}\r\n const tempSummary = await this.printData.summary()\r\n tempSummary.forEach(row => {\r\n this.printData.summaryData[row.key] = row.value\r\n })\r\n this.summaryLoadingShow = false\r\n }\r\n // 如果模板中有默认表格 使用当前选中字段替换表格内容\r\n const crudTableIndex = res.panels[0].printElements.findIndex(h => h.printElementType?.type === 'table' && h.options.field === 'CRUD_TABLE')\r\n if (crudTableIndex !== -1) {\r\n console.log()\r\n res.panels[0].printElements[crudTableIndex].options.columns = [tHeader.map((title, index) => {\r\n return {\r\n colspan: 1,\r\n field: filterVal[index],\r\n columnId: filterVal[index],\r\n rowspan: 1,\r\n width: res.panels[0].printElements[crudTableIndex].options.width / tHeader.length,\r\n checked: true,\r\n fixed: false,\r\n title: title,\r\n tableSummary: this.tableContext.summaryData.find(item => item.title === title) ? 'sum' : undefined\r\n }\r\n })]\r\n }\r\n this.$nextTick(() => {\r\n console.log('打印数据预览', this.printData)\r\n this.$print(undefined, res, { ...this.printData, CRUD_TABLE: exportData }, {}, {\r\n callback: () => {\r\n this.confirmLoading = false\r\n this.closeModal()\r\n this.$emit('ok')\r\n },\r\n styleHandler: () => {\r\n this.confirmLoading = false\r\n return hiPrintCss()\r\n }\r\n })\r\n })\r\n }).finally(() => {\r\n this.confirmLoading = false\r\n this.summaryLoadingShow = false\r\n })\r\n },\r\n // 对字段值进行脱敏处理\r\n desensitizeValue (value) {\r\n if (value === null || value === undefined || value === '') return value\r\n const str = String(value)\r\n if (str.length <= 2) return str.replace(/./g, '*')\r\n if (str.length <= 6) return str[0] + '*'.repeat(str.length - 2) + str[str.length - 1]\r\n return str.slice(0, 3) + '****' + str.slice(-4)\r\n },\r\n // 导出选中或本页数据\r\n handleExportCur (tHeader, filterVal, isSelected) {\r\n let exportData\r\n if (isSelected) {\r\n exportData = this.tableContext.selectedRows\r\n } else {\r\n exportData = this.tableContext.getTableData()\r\n }\r\n if (tHeader.includes('序号')) {\r\n exportData = exportData.map((item, index) => ({\r\n ...item,\r\n 序号: index + 1\r\n }))\r\n }\r\n const desensitizeFields = this.tableContext.exportDesensitizeFields || []\r\n if (desensitizeFields.length > 0) {\r\n exportData = exportData.map(row => {\r\n const newRow = { ...row }\r\n desensitizeFields.forEach(field => {\r\n if (Object.prototype.hasOwnProperty.call(newRow, field)) {\r\n newRow[field] = this.desensitizeValue(newRow[field])\r\n }\r\n })\r\n return newRow\r\n })\r\n }\r\n this.confirmLoading = false\r\n exportJson(tHeader, exportData.map(v => filterVal.map(j => v[j])), `${this.tableContext.title || ''}数据_${new Date().toLocaleString()}`)\r\n },\r\n // 导出符合条件的数据\r\n handleExportByQuery (tHeader, tDataList) {\r\n const that = this\r\n const conditionParams = Object.assign(that.tableContext.form, that.tableContext.fixedQueryForm)\r\n Object.keys(conditionParams).forEach(key => {\r\n if (Array.isArray(conditionParams[key])) {\r\n // 检查数组中是否包含 null\r\n const hasNull = conditionParams[key].every(item => item === '') || conditionParams[key].length === 0\r\n // 如果包含 null,则删除该属性\r\n if (hasNull) {\r\n delete conditionParams[key]\r\n }\r\n }\r\n })\r\n const dateTime = formatDate(new Date(), 'yyyy-MM-dd_hh-mm-ss')\r\n const fileNamePrefix = this.exportFileName || '查询导出'\r\n const name = `${fileNamePrefix}_${dateTime}`\r\n const queryData = this.buildDisplayText(this.queryLabelData?.labelData, this.queryLabelData?.labels, this.selectedQueryConditions)\r\n if (queryData) {\r\n this.customHeaders.push(queryData)\r\n }\r\n const param = {\r\n queryParamsName: this.tableContext.queryParamsName,\r\n queryParams: this.tableContext.queryParams,\r\n tHeader: tHeader,\r\n tDataList: tDataList,\r\n form: conditionParams,\r\n userId: this.tableContext.currUser.id,\r\n fileName: name,\r\n headerData: this.customHeaders\r\n }\r\n exportData(param, this.tableContext.serviceName).then(res => {\r\n this.closeModal()\r\n if (!res.isAsync) {\r\n let value = res.result\r\n if (this.tableContext.compatible === 'V4' && (Object.keys(res).length === 1 && Object.prototype.hasOwnProperty.call(res, 'value'))) {\r\n value = res.value\r\n }\r\n this.confirmLoading = false\r\n window.open(value)\r\n }\r\n })\r\n },\r\n closeModal () {\r\n this.exportModalVisible = false\r\n },\r\n // 新增的全选方法\r\n handleSelectAllColumns (e) {\r\n if (e.target.checked) {\r\n this.selectedExportColumns = this.exportColumns\r\n .filter(column => column.slotType !== 'action').map(column => column.dataIndex)\r\n } else {\r\n this.selectedExportColumns = []\r\n }\r\n },\r\n // 全选查询条件\r\n handleSelectAllQueryConditions (e) {\r\n if (e.target.checked && this.queryLabelData && this.queryLabelData.labels) {\r\n this.selectedQueryConditions = this.queryLabelData.labels.map((_, index) => index)\r\n } else {\r\n this.selectedQueryConditions = []\r\n }\r\n },\r\n // 校验文件名不能包含特殊字符\r\n validateFileName () {\r\n // 允许的字符:中文 字母 数字 下划线 - 点\r\n const regex = /^[a-zA-Z0-9_\\-.\\u4e00-\\u9fa5]+$/\r\n if (!regex.test(this.exportFileName)) {\r\n this.$message.warn('文件名称仅仅支持包含中文、字母、数字、下划线、-和点')\r\n this.exportFileName = this.exportFileName.slice(0, -1)\r\n }\r\n },\r\n buildDisplayText(labelData, labels, indexArr) {\r\n if (!labelData || !labels || !Array.isArray(labels) || labels.length === 0 || indexArr.length === 0) {\r\n return null\r\n }\r\n\r\n const keys = Object.keys(labelData)\r\n\r\n const result = indexArr\r\n .filter(i => labels[i] && keys[i] && labelData[keys[i]] != null)\r\n .map(i => {\r\n const label = labels[i]\r\n let value = labelData[keys[i]]\r\n\r\n if (Array.isArray(value)) {\r\n value = value.join(', ')\r\n }\r\n\r\n return `${label}: ${value}`\r\n })\r\n .join('; ')\r\n\r\n return result || null\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<template>\r\n <a-modal\r\n :title=\"modalTitle\"\r\n width=\"35vw\"\r\n :z-index=\"1001\"\r\n :confirmLoading=\"confirmLoading\"\r\n v-model=\"exportModalVisible\"\r\n :destroy-on-close=\"true\"\r\n @ok=\"handleGen\"\r\n >\r\n <a-row v-if=\"type === 'export'\" type=\"flex\" style=\"padding-left: 3rem; padding-bottom: 1rem\" align=\"middle\">\r\n <a-col style=\"padding-right: 0.5rem\">\r\n <span>文件名: </span>\r\n </a-col>\r\n <a-col>\r\n <a-input\r\n @change=\"validateFileName\"\r\n placeholder=\"请输入导出文件名\"\r\n v-model=\"exportFileName\"\r\n />\r\n </a-col>\r\n </a-row>\r\n <!-- 导出列勾选区域 -->\r\n <div style=\"padding-left: 3rem\">\r\n <a-row type=\"flex\" justify=\"space-between\" v-show=\"!summaryLoadingShow\">\r\n <a-col :span=\"8\" style=\"margin-top: 3px\">\r\n <a-checkbox\r\n :checked=\"selectedExportColumns.length === exportColumns.length\"\r\n @change=\"handleSelectAllColumns\"\r\n >\r\n 全选\r\n </a-checkbox>\r\n </a-col>\r\n </a-row>\r\n <a-checkbox-group v-model=\"selectedExportColumns\" v-show=\"!summaryLoadingShow\">\r\n <a-row type=\"flex\" justify=\"space-between\">\r\n <a-col\r\n :span=\"8\"\r\n style=\"margin-top: 3px\"\r\n v-for=\"column in exportColumns.filter(res => res.slotType !== 'action')\"\r\n :key=\"column.dataIndex\">\r\n <a-checkbox\r\n :label=\"column.title\"\r\n :value=\"column.dataIndex\"\r\n >\r\n <ellipsis :length=\"18\" tooltip>\r\n {{ column.title }}\r\n </ellipsis>\r\n </a-checkbox>\r\n </a-col>\r\n </a-row>\r\n </a-checkbox-group>\r\n </div>\r\n <!-- 查询条件勾选区域 -->\r\n <div v-if=\"queryLabelData && queryLabelData.labels && queryLabelData.labels.length > 0\" class=\"query-label\">\r\n <a-row type=\"flex\" style=\"padding-left: 3rem; padding-bottom: 1rem\" align=\"middle\" v-show=\"!summaryLoadingShow\">\r\n <a-col style=\"padding-right: 0.5rem\">\r\n <span>导出查询条件: </span>\r\n </a-col>\r\n </a-row>\r\n <div style=\"padding-left: 3rem\">\r\n <a-row type=\"flex\" justify=\"space-between\" v-show=\"!summaryLoadingShow\">\r\n <a-col :span=\"8\" style=\"margin-top: 3px\">\r\n <a-checkbox\r\n :checked=\"selectedQueryConditions.length === queryLabelData.labels.length && queryLabelData.labels.length > 0\"\r\n @change=\"handleSelectAllQueryConditions\"\r\n >\r\n 全选\r\n </a-checkbox>\r\n </a-col>\r\n </a-row>\r\n <a-checkbox-group v-model=\"selectedQueryConditions\" v-show=\"!summaryLoadingShow\" style=\"width: 100%\">\r\n <a-row type=\"flex\" justify=\"space-between\">\r\n <a-col\r\n :span=\"8\"\r\n style=\"margin-top: 3px\"\r\n v-for=\"(label, index) in queryLabelData.labels\"\r\n :key=\"index\">\r\n <a-checkbox\r\n :label=\"label\"\r\n :value=\"index\"\r\n >\r\n <ellipsis :length=\"18\" tooltip>\r\n {{ label }}\r\n </ellipsis>\r\n </a-checkbox>\r\n </a-col>\r\n </a-row>\r\n </a-checkbox-group>\r\n </div>\r\n </div>\r\n <a-row type=\"flex\" justify=\"center\" v-show=\"summaryLoadingShow\">\r\n <a-spin :tip=\"tipMsg\" v-show=\"summaryLoadingShow\"/>\r\n </a-row>\r\n </a-modal>\r\n</template>\r\n\r\n<style scoped lang=\"less\">\r\n.query-label {\r\n border-top: 1px solid #f0f0f0; margin-top: 1rem; padding-top: 1rem;\r\n :deep(.ant-checkbox-group) {\r\n width: 100%;\r\n display: block;\r\n }\r\n}\r\n</style>\r\n
63
- Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
64
- <+>UTF-8
65
- ===================================================================
66
- diff --git a/src/base-client/components/common/XTable/ExportExcel.vue b/src/base-client/components/common/XTable/ExportExcel.vue
67
- --- a/src/base-client/components/common/XTable/ExportExcel.vue (revision cb0e303eb0f8e4fd4e1bf13352d6033873d047d7)
68
- +++ b/src/base-client/components/common/XTable/ExportExcel.vue (date 1782893708968)
69
- @@ -267,6 +267,8 @@
70
- let value = res.result
71
- if (this.tableContext.compatible === 'V4' && (Object.keys(res).length === 1 && Object.prototype.hasOwnProperty.call(res, 'value'))) {
72
- value = res.value
73
- + } else if (this.tableContext === 'V3') {
74
- + value = res?.includes('resource') ? res : `/resource/${process.env.VUE_APP_SYSTEM_NAME}/excel/${res}`
75
- }
76
- this.confirmLoading = false
77
- window.open(value)
78
- Index: src/main.js
79
- IDEA additional info:
80
- Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
81
- <+>import Vue from 'vue'\r\nimport App from './App.vue'\r\nimport Router from 'vue-router'\r\nimport Vuex from 'vuex'\r\nimport { routerOptions, modules, i18n, message, bootstrap } from '../index'\r\n// import eventLogPlugin from '@/plugins/EventLogPlugin'\r\nimport findParentData from '@vue2-client/plugins/FindParentsData'\r\nimport { Modal } from 'ant-design-vue'\r\n\r\nimport VueDraggableResizable from 'vue-draggable-resizable'\r\nimport XScrollBox from '@vue2-client/components/xScrollBox'\r\n\r\nVue.use(Router)\r\nVue.use(Vuex)\r\n// Vue.use(eventLogPlugin)\r\nVue.use(findParentData)\r\n\r\n// 创建router store\r\nconst store = new Vuex.Store({ modules })\r\nconst router = new Router(routerOptions)\r\n\r\nVue.config.devtools = true\r\n// 绑定原型\r\nVue.Modal = Modal\r\nVue.component('VueDraggableResizable', VueDraggableResizable)\r\nVue.component('XScrollBox', XScrollBox)\r\n\r\nbootstrap({ router, store, i18n, message }).then(() => {\r\n new Vue({\r\n router,\r\n store,\r\n i18n,\r\n render: h => h(App)\r\n }).$mount('#app')\r\n})\r\n
82
- Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
83
- <+>UTF-8
84
- ===================================================================
85
- diff --git a/src/main.js b/src/main.js
86
- --- a/src/main.js (revision cb0e303eb0f8e4fd4e1bf13352d6033873d047d7)
87
- +++ b/src/main.js (date 1782807814818)
88
- @@ -15,6 +15,11 @@
89
- // Vue.use(eventLogPlugin)
90
- Vue.use(findParentData)
91
-
92
- +// 开启 nginx 加密
93
- +Vue.mmType = 'nginx'
94
- +Vue.HWQMM = [51, 150, 231, 300, 565, 708, 721, 952, 738, 560, 935, 912, 1274, 1148, 840, 1440]
95
- +
96
- +
97
- // 创建router store
98
- const store = new Vuex.Store({ modules })
99
- const router = new Router(routerOptions)
100
- Index: src/router/async/router.map.js
101
- IDEA additional info:
102
- Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
103
- <+>const { homePage } = require('../../config')\r\n// 视图组件\r\nconst view = {\r\n tabs: () => import('@vue2-client/layouts/tabs'),\r\n blank: () => import('@vue2-client/layouts/BlankView'),\r\n page: () => import('@vue2-client/layouts/PageView'),\r\n // his-web$ceshiGrid?type=GridView&configName=RxPreparedMed\r\n gridView: () => import('@vue2-client/layouts/GridView'),\r\n login: () => import('@vue2-client/pages/login/Login'),\r\n loginv3: () => import('@vue2-client/pages/login/LoginV3')\r\n}\r\n// 动态路由对象定义\r\nconst routerResource = {}\r\n// --------------------------------------基本视图组件--------------------------------------\r\n// 空白视图\r\nrouterResource.blank = view.blank\r\n// 单页面视图\r\nrouterResource.singlePage = view.blank\r\n// 栅格配置视图\r\nrouterResource.gridView = () => import('@vue2-client/layouts/GridView')\r\n// VuePage视图\r\nrouterResource.vuePage = () => import('@vue2-client/layouts/VuePage')\r\n// 测试\r\nrouterResource.businessQuery = view.blank\r\n// 业务查询 - 收费查询\r\nrouterResource.chargeQuery = () => import('@vue2-client/base-client/components/common/XFormTable/demo.vue')\r\n// --------------------------------------仪表盘--------------------------------------\r\nrouterResource.dashboard = view.blank\r\n// 工作台\r\nrouterResource.workplace = () => import('@vue2-client/pages/dashboard/workplace')\r\n// --------------------------------------系统配置--------------------------------------\r\nrouterResource.system = view.blank\r\n// 字典管理\r\nrouterResource.dictionaryManage = () => import('@vue2-client/pages/system/dictionary')\r\n// 文件管理\r\nrouterResource.fileManager = () => import('@vue2-client/pages/system/file')\r\n// 登录日志\r\nrouterResource.loginInfor = () => import('@vue2-client/pages/system/monitor/loginInfor')\r\n// 操作日志\r\nrouterResource.operLog = () => import('@vue2-client/pages/system/monitor/operLog')\r\n// 系统问题反馈工单\r\nrouterResource.submitTicket = () => import('@vue2-client/pages/system/ticket')\r\n// 通用服务评价\r\nrouterResource.ServiceReview = () => import('@vue2-client/pages/ServiceReview')\r\n// 系统设置\r\nrouterResource.settings = () => import('@vue2-client/pages/system/settings')\r\n// 页面编辑器\r\nrouterResource.editablePage = () => import('@vue2-client/pages/lowCode/lowCodeEditor.vue')\r\n// 数据检索\r\nrouterResource.dynamicStatistics = () => import('@vue2-client/pages/DynamicStatistics')\r\n// 数据检索(新)\r\nrouterResource.newDynamicStatistics = () => import('@vue2-client/pages/NewDynamicStatistics')\r\n\r\nrouterResource.machineHand = () => import('@vue2-client/base-client/components/common/XFormTable/demo.vue')\r\n// 示例页面\r\nrouterResource.example = {\r\n path: 'example',\r\n name: '示例主页面',\r\n // component: () => import('@vue2-client/pages/LayoutTest/index.vue')\r\n // component: () => import('@vue2-client/base-client/components/common/XDescriptions/demo.vue')\r\n // component: () => import('@vue2-client/base-client/components/his/HChart/demo.vue'),\r\n // component: () => import('@vue2-client/pages/WorkflowDetail/WorkFlowDemo.vue'),\r\n // component: () => import('@vue2-client/base-client/components/common/XFormTable/demo.vue')\r\n // component: () => import('@vue2-client/base-client/components/common/AfMap/demo.vue')\r\n // component: () => import('@vue2-client/base-client/components/common/ImagePreviewModal/demo.vue'),\r\n // component: () => import('@vue2-client/base-client/components/common/XImagePreview/demo.vue'),\r\n // component: () => import('@vue2-client/components/xScrollBox/example.vue'),\r\n // component: () => import('@vue2-client/pages/WorkflowDetail/WorkFlowDemo.vue'),\r\n // component: () => import('@vue2-client/pages/addressSelect/addressDemo.vue'),\r\n // component: () => import('@vue2-client/base-client/components/common/XDescriptions/demo.vue'),\r\n // component: () => import('@vue2-client/base-client/components/common/XAddNativeForm/demo.vue')\r\n // component: () => import('@vue2-client/base-client/components/common/XInspectionDetailDrawer/demo.vue')\r\n component: () => import('@vue2-client/base-client/components/common/XFormGroup/demo.vue')\r\n // component: () => import('@vue2-client/base-client/components/common/XReport/XReportDemo.vue'),\r\n // component: () => import('@vue2-client/base-client/components/common/XReportGrid/XReportDemo.vue'),\r\n // component: () => import('@vue2-client/base-client/components/common/HIS/demo.vue'),\r\n // component: () => import('@vue2-client/base-client/components/common/XDatePicker/demo.vue'),\r\n // component: () => import('@vue2-client/base-client/components/common/XTab/XTabDemo.vue'),\r\n // component: () => import('@vue2-client/base-client/components/common/XRate/demo.vue'),\r\n // component: () => import('@vue2-client/base-client/components/common/XForm/demo.vue'),\r\n // component: () => import('@vue2-client/base-client/components/his/XTimeSelect/XTimeSelectDemo.vue'),\r\n // component: () => import('@vue2-client/base-client/components/his/XImportExcelButton/XFrontImportExcelDemo.vue'),\r\n // component: () => import('@vue2-client/pages/WorkflowDetail/WorkFlowDemo.vue'),\r\n // component: () => import('@vue2-client/pages/WorkflowDetail/WorkFlowDemo.vue'),\r\n // component: () => import('@vue2-client/pages/XPageViewExample/index.vue'),\r\n // component: () => import('@vue2-client/base-client/components/common/XButtons/XButtonDemo.vue'),\r\n // component: () => import('@vue2-client/base-client/components/common/XLabelSelect/XLabelSelectDemo.vue'),\r\n // component: () => import('@vue2-client/base-client/components/common/XCheckList/XCheckList.vue'),\r\n // component: () => import('@vue2-client/base-client/components/common/XPrint/Demo.vue'),\r\n // component: () => import('@vue2-client/base-client/components/AI/demo.vue'),\r\n // component: () => import('@vue2-client/components/g2Charts/demo.vue'),\r\n // component: () => import('@vue2-client/pages/LogicCallExample/index.vue'),\r\n // component: () => import('@vue2-client/components/FilePreview/FilePreviewDemo.vue'),\r\n // component: () => import('@vue2-client/pages/ReportGrid/index.vue'),\r\n // component: () => import('@vue2-client/base-client/components/common/HIS/demo.vue'),\r\n}\r\n// routerResource.example = () =>\r\n// import('@vue2-client/pages/Example')\r\nrouterResource.XReportView = () => import('@vue2-client/pages/XReportView')\r\n\r\nrouterResource.XReportGrid = () => import('@vue2-client/base-client/components/common/XReportGrid/XReportDemo')\r\n\r\nrouterResource.XTab = () => import('@vue2-client/base-client/components/common/XInspectionDetailDrawer/demo.vue')\r\nrouterResource.addressManage = () => import('@vue2-client/base-client/components/common/XFormTable/demo.vue')\r\n// 大屏界面, 放行登录\r\nrouterResource.bigDashboard = () => import('@vue2-client/pages/dashboard/index.vue')\r\n\r\n// 基础路由组件注册\r\nconst routerMap = {\r\n login: {\r\n authority: '*',\r\n path: '/login',\r\n component: process.env.VUE_APP_LOGIN_VERSION === 'V3' ? view.loginv3 : view.login\r\n },\r\n root: {\r\n path: '/',\r\n name: '首页',\r\n // 只有在非微前端环境下才进行重定向,或者通过环境变量控制\r\n redirect: window.__MICRO_APP_ENVIRONMENT__ ? undefined : homePage,\r\n component: process.env.VUE_APP_SINGLE_PAPER === 'TRUE' ? view.blank : view.tabs\r\n },\r\n exp403: {\r\n authority: '*',\r\n name: 'exp403',\r\n path: '403',\r\n component: () => import('@vue2-client/pages/exception/403')\r\n },\r\n exp404: {\r\n name: 'exp404',\r\n path: '404',\r\n component: () => import('@vue2-client/pages/exception/404')\r\n },\r\n exp500: {\r\n name: 'exp500',\r\n path: '500',\r\n component: () => import('@vue2-client/pages/exception/500')\r\n }\r\n}\r\nObject.assign(routerMap, routerResource)\r\nexport default routerMap\r\n
104
- Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
105
- <+>UTF-8
106
- ===================================================================
107
- diff --git a/src/router/async/router.map.js b/src/router/async/router.map.js
108
- --- a/src/router/async/router.map.js (revision cb0e303eb0f8e4fd4e1bf13352d6033873d047d7)
109
- +++ b/src/router/async/router.map.js (date 1782808039098)
110
- @@ -27,7 +27,7 @@
111
- // --------------------------------------仪表盘--------------------------------------
112
- routerResource.dashboard = view.blank
113
- // 工作台
114
- -routerResource.workplace = () => import('@vue2-client/pages/dashboard/workplace')
115
- +routerResource.workplace = () => import('@vue2-client/base-client/components/common/XFormTable/demo.vue')
116
- // --------------------------------------系统配置--------------------------------------
117
- routerResource.system = view.blank
118
- // 字典管理
119
- Index: vue.config.js
120
- IDEA additional info:
121
- Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
122
- <+>const path = require('path')\r\nconst webpack = require('webpack')\r\nconst ThemeColorReplacer = require('webpack-theme-color-replacer')\r\nconst { getThemeColors, modifyVars } = require('./src/utils/themeUtil')\r\nconst { resolveCss } = require('./src/utils/theme-color-replacer-extend')\r\nconst CompressionWebpackPlugin = require('compression-webpack-plugin')\r\nconst CssMinimizerPlugin = require('css-minimizer-webpack-plugin')\r\n// const CopyPlugin = require('copy-webpack-plugin')\r\n\r\nconst productionGzipExtensions = ['js', 'css']\r\nconst isProd = process.env.NODE_ENV === 'production'\r\n\r\n// v4 产品演示\r\nconst liuli = 'http://192.168.50.67:31567'\r\nconst v3Server = 'http://192.168.50.67:31567'\r\nconst geoserver = 'http://192.168.50.67:31567'\r\n// const gateway = 'http://192.168.50.67:31467'\r\n// const testUpload = 'http://123.60.214.109:8406'\r\nconst OSSServerDev = 'http://192.168.50.67:30351'\r\nconst revenue = 'http://192.168.50.67:31567'\r\n// const revenue = 'http://127.0.0.1:31467'\r\n// const OSSServerProd = 'http://192.168.50.67:31351'\r\n// const testUploadLocal = 'http://127.0.0.1:9001'\r\n// v3 铜川\r\n// const v3Server = 'http://61.134.55.234:8405'\r\n// const gateway = 'http://61.134.55.234:8456/webmeter'\r\n// v3 涉县\r\n// const v3Server = 'http://221.193.244.147:9600'\r\n// const gateway = 'http://221.193.244.147:9600/webmeter'\r\n// 本地\r\n// const local = 'http://localhost:8080'\r\n\r\nmodule.exports = {\r\n devServer: {\r\n // development server port 8000\r\n port: 8020,\r\n // If you want to turn on the proxy, please remove the mockjs /src/main.jsL11\r\n proxy: {\r\n // '/apply-image': {\r\n // target: revenue,\r\n // },\r\n '/rs': {\r\n target: v3Server,\r\n ws: false,\r\n changeOrigin: true\r\n },\r\n '/api/af-revenue': {\r\n target: v3Server,\r\n changeOrigin: true\r\n },\r\n '/revenue-web/api/af-revenue': {\r\n pathRewrite: { '^/revenue-web/': '/' },\r\n target: v3Server,\r\n changeOrigin: true\r\n },\r\n '/resource': {\r\n // pathRewrite: { '^/resource': '/' },\r\n target: revenue,\r\n changeOrigin: true\r\n },\r\n '/api': {\r\n // v3用\r\n // pathRewrite: { '^/api/af-oa/': '/rs/', '^/api/af-iot/': '/rs/' },\r\n target: v3Server,\r\n changeOrigin: true\r\n },\r\n '/gis/geoserver': {\r\n // pathRewrite: { '^/gis': '/' },\r\n target: geoserver,\r\n changeOrigin: true,\r\n ws: true\r\n },\r\n\r\n '/linepatrol/geoserver': {\r\n // pathRewrite: { '^/linepatrol': '/' },\r\n target: geoserver,\r\n ws: true,\r\n changeOrigin: true\r\n },\r\n '/api/af-apply': {\r\n // pathRewrite: { '^/api/af-apply': '/' },\r\n target: revenue,\r\n changeOrigin: true\r\n },\r\n '/api/af-scada': {\r\n target: revenue,\r\n changeOrigin: true\r\n },\r\n '/api/af-oa': {\r\n // v3用\r\n // pathRewrite: { '^/api/af-oa/': '/rs/', '^/api/af-iot/': '/rs/' },\r\n target: liuli,\r\n changeOrigin: true\r\n },\r\n '/api/af-runtime': {\r\n pathRewrite: { '^/api/af-runtime/': '/' },\r\n target: 'http://127.0.0.1:9001',\r\n // target: revenue,\r\n changeOrigin: true\r\n },\r\n '/api/af-liuli': {\r\n // pathRewrite: { '^/api/af-liuli/': '/' },\r\n // target: 'http://127.0.0.1:9014',\r\n target: revenue,\r\n changeOrigin: true\r\n },\r\n '/api/af-gaslink': {\r\n // pathRewrite: { '^/api/af-gaslink/': '/' },\r\n // target: 'http://127.0.0.1:9036',\r\n target: revenue,\r\n changeOrigin: true\r\n },\r\n '/devApi': {\r\n // v3用\r\n // pathRewrite: { '^/api/af-system/': '/rs/', '^/api/af-iot/': '/rs/' },\r\n // pathRewrite: { '^/api/': '/' },\r\n target: revenue,\r\n changeOrigin: true\r\n },\r\n '/ai': {\r\n target: 'http://192.168.50.67:31761',\r\n pathRewrite: { '^/ai': '/' },\r\n changeOrigin: true\r\n },\r\n '/oss': {\r\n target: OSSServerDev,\r\n pathRewrite: { '^/oss': '/' },\r\n changeOrigin: true\r\n },\r\n '/hai-api': {\r\n target: 'http://192.168.50.67:30556',\r\n pathRewrite: { '^/hai-api': '' },\r\n changeOrigin: true,\r\n secure: false,\r\n ws: false\r\n }\r\n },\r\n client: {\r\n overlay: false\r\n }\r\n },\r\n pluginOptions: {\r\n 'style-resources-loader': {\r\n preProcessor: 'less',\r\n patterns: [path.resolve(__dirname, './src/theme/theme.less')]\r\n }\r\n },\r\n configureWebpack: config => {\r\n config.devtool = 'inline-source-map'\r\n // 忽略.md文件\r\n config.module.rules.push({\r\n test: /\\.md$/,\r\n exclude: /node_modules/,\r\n use: 'ignore-loader'\r\n })\r\n config.context = path.resolve(__dirname, './')\r\n config.resolve = {\r\n extensions: ['.js', '.vue', '.json'],\r\n alias: {\r\n '@vue2-client': path.resolve('src'),\r\n '@': path.resolve('src')\r\n }\r\n }\r\n config.entry.app = ['core-js/stable', 'regenerator-runtime/runtime', 'whatwg-fetch', './src/main.js']\r\n config.performance = {\r\n hints: false\r\n }\r\n if (isProd) {\r\n config.plugins.push(\r\n new ThemeColorReplacer({\r\n fileName: 'css/theme-colors-[contenthash:8].css',\r\n matchColors: getThemeColors(),\r\n injectCss: true,\r\n resolveCss\r\n })\r\n )\r\n }\r\n // Ignore all locale files of moment.js\r\n config.plugins.push(\r\n new webpack.IgnorePlugin({\r\n resourceRegExp: /^\\.\\/locale$/,\r\n contextRegExp: /moment$/\r\n })\r\n )\r\n\r\n config.plugins.push()\r\n\r\n // 生产环境下将资源压缩成gzip格式\r\n if (isProd) {\r\n // add `CompressionWebpack` plugin to webpack plugins\r\n config.plugins.push(\r\n new CompressionWebpackPlugin({\r\n algorithm: 'gzip',\r\n test: new RegExp('\\\\.(' + productionGzipExtensions.join('|') + ')$'),\r\n threshold: 10240,\r\n minRatio: 0.8\r\n })\r\n )\r\n }\r\n // if prod, add externals\r\n // if (isProd) {\r\n // config.externals = assetsCDN.externals\r\n // }\r\n },\r\n chainWebpack: config => {\r\n // 生产环境下关闭css压缩的 colormin 项,因为此项优化与主题色替换功能冲突\r\n if (isProd) {\r\n config.optimization.minimizer('css').use(CssMinimizerPlugin, [\r\n {\r\n minimizerOptions: {\r\n preset: [\r\n 'default',\r\n {\r\n discardComments: { removeAll: true },\r\n colormin: false\r\n }\r\n ],\r\n ignoreOrder: true\r\n }\r\n }\r\n ])\r\n }\r\n config.resolve.alias.set('@vue2-client', path.resolve(__dirname, 'src'))\r\n },\r\n css: {\r\n extract: !isProd\r\n ? {\r\n filename: 'css/[name].css',\r\n chunkFilename: 'css/[name].css',\r\n ignoreOrder: true\r\n }\r\n : {\r\n ignoreOrder: true\r\n },\r\n loaderOptions: {\r\n less: {\r\n lessOptions: {\r\n modifyVars: modifyVars(),\r\n javascriptEnabled: true\r\n }\r\n },\r\n sass: {}\r\n }\r\n },\r\n publicPath: process.env.VUE_APP_PUBLIC_PATH,\r\n outputDir: 'dist',\r\n assetsDir: 'static',\r\n productionSourceMap: false\r\n}\r\n
123
- Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
124
- <+>UTF-8
125
- ===================================================================
126
- diff --git a/vue.config.js b/vue.config.js
127
- --- a/vue.config.js (revision cb0e303eb0f8e4fd4e1bf13352d6033873d047d7)
128
- +++ b/vue.config.js (date 1782807786631)
129
- @@ -12,7 +12,7 @@
130
-
131
- // v4 产品演示
132
- const liuli = 'http://192.168.50.67:31567'
133
- -const v3Server = 'http://192.168.50.67:31567'
134
- +const v3Server = 'http://60.13.220.242:8405'
135
- const geoserver = 'http://192.168.50.67:31567'
136
- // const gateway = 'http://192.168.50.67:31467'
137
- // const testUpload = 'http://123.60.214.109:8406'
@@ -1,4 +0,0 @@
1
- <changelist name="Uncommitted_changes_before_Update_at_2026_7_1_16_15_[Changes]" date="1782893713347" recycled="true" deleted="true">
2
- <option name="PATH" value="$PROJECT_DIR$/.idea/shelf/Uncommitted_changes_before_Update_at_2026_7_1_16_15_[Changes]/shelved.patch" />
3
- <option name="DESCRIPTION" value="Uncommitted changes before Update at 2026/7/1 16:15 [Changes]" />
4
- </changelist>
@@ -1,140 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="ChangeListManager">
4
- <list default="true" id="a9b56467-cc7a-4aa4-b3b8-8de4daacc681" name="Changes" comment="fix(websocket): 修复 WebSocket 连接协议问题&#10;&#10;- 修改 WebSocket URL 构造逻辑以支持 HTTPS 环境下的 WSS 协议&#10;- 根据当前页面协议动态选择 ws 或 wss 协议&#10;- 更新版本号从 1.22.17 到 1.22.18">
5
- <change beforePath="$PROJECT_DIR$/package.json" beforeDir="false" afterPath="$PROJECT_DIR$/package.json" afterDir="false" />
6
- <change beforePath="$PROJECT_DIR$/src/base-client/components/common/XTable/ExportExcel.vue" beforeDir="false" afterPath="$PROJECT_DIR$/src/base-client/components/common/XTable/ExportExcel.vue" afterDir="false" />
7
- </list>
8
- <option name="SHOW_DIALOG" value="false" />
9
- <option name="HIGHLIGHT_CONFLICTS" value="true" />
10
- <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
11
- <option name="LAST_RESOLUTION" value="IGNORE" />
12
- </component>
13
- <component name="Git.Settings">
14
- <option name="RECENT_BRANCH_BY_REPOSITORY">
15
- <map>
16
- <entry key="$PROJECT_DIR$" value="master" />
17
- </map>
18
- </option>
19
- <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
20
- </component>
21
- <component name="GitLabMergeRequestFiltersHistory">{
22
- &quot;lastFilter&quot;: {
23
- &quot;state&quot;: &quot;OPENED&quot;,
24
- &quot;assignee&quot;: {
25
- &quot;type&quot;: &quot;org.jetbrains.plugins.gitlab.mergerequest.ui.filters.GitLabMergeRequestsFiltersValue.MergeRequestsMemberFilterValue.MergeRequestsAssigneeFilterValue&quot;,
26
- &quot;username&quot;: &quot;Qmz&quot;,
27
- &quot;fullname&quot;: &quot;权敏哲&quot;
28
- }
29
- }
30
- }</component>
31
- <component name="GitLabMergeRequestsSettings">{
32
- &quot;selectedUrlAndAccountId&quot;: {
33
- &quot;first&quot;: &quot;http://192.168.0.167:32573/v4/v4-client/af-vue2-client.git&quot;,
34
- &quot;second&quot;: &quot;63d0ce94-00ad-48ba-9e08-d166feb89923&quot;
35
- }
36
- }</component>
37
- <component name="ProjectColorInfo">{
38
- &quot;associatedIndex&quot;: 7
39
- }</component>
40
- <component name="ProjectId" id="3FTPOxG6f49MzNIl3AgtpM9cryK" />
41
- <component name="ProjectViewState">
42
- <option name="showLibraryContents" value="true" />
43
- </component>
44
- <component name="PropertiesComponent">{
45
- &quot;keyToString&quot;: {
46
- &quot;ModuleVcsDetector.initialDetectionPerformed&quot;: &quot;true&quot;,
47
- &quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
48
- &quot;RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252&quot;: &quot;true&quot;,
49
- &quot;RunOnceActivity.git.unshallow&quot;: &quot;true&quot;,
50
- &quot;RunOnceActivity.typescript.service.memoryLimit.init&quot;: &quot;true&quot;,
51
- &quot;git-widget-placeholder&quot;: &quot;dev&quot;,
52
- &quot;javascript.preferred.runtime.type.id&quot;: &quot;node&quot;,
53
- &quot;node.js.detected.package.eslint&quot;: &quot;true&quot;,
54
- &quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;,
55
- &quot;nodejs_package_manager_path&quot;: &quot;yarn&quot;,
56
- &quot;npm.serve.executor&quot;: &quot;Run&quot;,
57
- &quot;ts.external.directory.path&quot;: &quot;F:\\software\\webstorm\\WebStorm 2025.3.1\\plugins\\javascript-plugin\\jsLanguageServicesImpl\\external&quot;,
58
- &quot;vue.rearranger.settings.migration&quot;: &quot;true&quot;
59
- }
60
- }</component>
61
- <component name="RunManager">
62
- <configuration name="serve" type="js.build_tools.npm" temporary="true" nameIsGenerated="true">
63
- <package-json value="$PROJECT_DIR$/package.json" />
64
- <command value="run" />
65
- <scripts>
66
- <script value="serve" />
67
- </scripts>
68
- <node-interpreter value="project" />
69
- <envs />
70
- <method v="2" />
71
- </configuration>
72
- <recent_temporary>
73
- <list>
74
- <item itemvalue="npm.serve" />
75
- </list>
76
- </recent_temporary>
77
- </component>
78
- <component name="SharedIndexes">
79
- <attachedChunks>
80
- <set>
81
- <option value="bundled-js-predefined-d6986cc7102b-9b0f141eb926-JavaScript-WS-253.29346.143" />
82
- </set>
83
- </attachedChunks>
84
- </component>
85
- <component name="TaskManager">
86
- <task active="true" id="Default" summary="Default task">
87
- <changelist id="a9b56467-cc7a-4aa4-b3b8-8de4daacc681" name="Changes" comment="" />
88
- <created>1782096058058</created>
89
- <option name="number" value="Default" />
90
- <option name="presentableId" value="Default" />
91
- <updated>1782096058058</updated>
92
- <workItem from="1782096059367" duration="677000" />
93
- <workItem from="1782117020400" duration="681000" />
94
- <workItem from="1782281597428" duration="60000" />
95
- <workItem from="1782367464979" duration="288000" />
96
- <workItem from="1782368152976" duration="181000" />
97
- <workItem from="1782807134766" duration="23000" />
98
- <workItem from="1782807350768" duration="1764000" />
99
- <workItem from="1782887234775" duration="1014000" />
100
- <workItem from="1782891196227" duration="3263000" />
101
- </task>
102
- <task id="LOCAL-00001" summary="feat(map): 添加地图默认折叠配置支持&#10;&#10;- 在地图组件初始化时设置 collapsed 属性的默认值&#10;- 从 MAP_OPTIONS 配置中读取 defaultCollapsed 设置&#10;- 当配置不存在时,默认值设为 true&#10;- 更新项目版本号从 1.22.11 到 1.22.12">
103
- <option name="closed" value="true" />
104
- <created>1782096310966</created>
105
- <option name="number" value="00001" />
106
- <option name="presentableId" value="LOCAL-00001" />
107
- <option name="project" value="LOCAL" />
108
- <updated>1782096310966</updated>
109
- </task>
110
- <task id="LOCAL-00002" summary="fix(websocket): 修复 WebSocket 连接协议问题&#10;&#10;- 修改 WebSocket URL 构造逻辑以支持 HTTPS 环境下的 WSS 协议&#10;- 根据当前页面协议动态选择 ws 或 wss 协议&#10;- 更新版本号从 1.22.17 到 1.22.18">
111
- <option name="closed" value="true" />
112
- <created>1782367742059</created>
113
- <option name="number" value="00002" />
114
- <option name="presentableId" value="LOCAL-00002" />
115
- <option name="project" value="LOCAL" />
116
- <updated>1782367742059</updated>
117
- </task>
118
- <option name="localTasksCounter" value="3" />
119
- <servers />
120
- </component>
121
- <component name="TypeScriptGeneratedFilesManager">
122
- <option name="version" value="3" />
123
- </component>
124
- <component name="Vcs.Log.Tabs.Properties">
125
- <option name="TAB_STATES">
126
- <map>
127
- <entry key="MAIN">
128
- <value>
129
- <State />
130
- </value>
131
- </entry>
132
- </map>
133
- </option>
134
- </component>
135
- <component name="VcsManagerConfiguration">
136
- <MESSAGE value="feat(map): 添加地图默认折叠配置支持&#10;&#10;- 在地图组件初始化时设置 collapsed 属性的默认值&#10;- 从 MAP_OPTIONS 配置中读取 defaultCollapsed 设置&#10;- 当配置不存在时,默认值设为 true&#10;- 更新项目版本号从 1.22.11 到 1.22.12" />
137
- <MESSAGE value="fix(websocket): 修复 WebSocket 连接协议问题&#10;&#10;- 修改 WebSocket URL 构造逻辑以支持 HTTPS 环境下的 WSS 协议&#10;- 根据当前页面协议动态选择 ws 或 wss 协议&#10;- 更新版本号从 1.22.17 到 1.22.18" />
138
- <option name="LAST_COMMIT_MESSAGE" value="fix(websocket): 修复 WebSocket 连接协议问题&#10;&#10;- 修改 WebSocket URL 构造逻辑以支持 HTTPS 环境下的 WSS 协议&#10;- 根据当前页面协议动态选择 ws 或 wss 协议&#10;- 更新版本号从 1.22.17 到 1.22.18" />
139
- </component>
140
- </project>