vue2-client 1.18.14 → 1.18.16

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vue2-client",
3
- "version": "1.18.14",
3
+ "version": "1.18.16",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "serve": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve --no-eslint",
@@ -87,6 +87,7 @@ const chartData = ref([])
87
87
  const loading = ref(false)
88
88
  let resizeObserver = null
89
89
  const activePointIndex = ref(-1)
90
+ const activeBarIndex = ref(-1)
90
91
  const selectedFilterValue = ref('')
91
92
  const selectedSideListValue = ref('')
92
93
 
@@ -259,36 +260,111 @@ const handleListChange = (value) => {
259
260
 
260
261
  // 常用图表预设,统一处理 dataset → ECharts option 的映射
261
262
  const presetResolvers = {
262
- bar: ({ dataset }) => ({
263
- animationDuration: 420,
264
- animationEasing: 'cubicOut',
265
- animationDelay: (_, idx) => idx * 60,
266
- tooltip: {
267
- trigger: 'axis',
268
- axisPointer: {
269
- type: 'shadow'
263
+ bar: ({ dataset = [], config = {}, state = {} }) => {
264
+ const activeIndex = typeof state.activeBarIndex === 'number' ? state.activeBarIndex : -1
265
+ if (!dataset.length) {
266
+ return {
267
+ xAxis: { type: 'category', data: [] },
268
+ yAxis: { type: 'value' },
269
+ series: [{ type: 'bar', data: [] }]
270
270
  }
271
- },
272
- xAxis: { type: 'category', data: dataset.map(item => item.label) },
273
- yAxis: { type: 'value' },
274
- series: [
275
- {
276
- type: 'bar',
277
- data: dataset.map(item => item.value),
278
- itemStyle: {
279
- color: '#3362DA',
280
- borderRadius: [4, 4, 0, 0]
271
+ }
272
+
273
+ const barColor = config.barColor || '#3362DA'
274
+ const barHighlightColor = config.barHighlightColor || '#4C7CFF'
275
+ const valueSuffix = config.valueSuffix || ''
276
+
277
+ const tooltipFormatter = (params = []) => {
278
+ if (!params.length) return ''
279
+ const point = params.find(item => item.seriesIndex === 0) || params[0]
280
+ const value = typeof point.data === 'object' ? point.data?.value : point.data
281
+ return `${point.axisValue}<br/>${value}${valueSuffix}`
282
+ }
283
+
284
+ return {
285
+ animationDuration: 420,
286
+ animationEasing: 'cubicOut',
287
+ animationDelay: (_, idx) => idx * 40,
288
+ tooltip: {
289
+ trigger: 'axis',
290
+ backgroundColor: '#1F5BFF',
291
+ borderWidth: 0,
292
+ textStyle: { color: '#fff' },
293
+ axisPointer: {
294
+ type: 'shadow',
295
+ shadowStyle: {
296
+ color: 'rgba(51, 98, 218, 0.08)'
297
+ }
281
298
  },
282
- emphasis: {
299
+ formatter: tooltipFormatter
300
+ },
301
+ grid: {
302
+ top: 40,
303
+ left: 60,
304
+ right: 40,
305
+ bottom: 40,
306
+ containLabel: true
307
+ },
308
+ xAxis: {
309
+ type: 'category',
310
+ data: dataset.map(item => item.label),
311
+ axisLine: { lineStyle: { color: '#C8D2E8' } },
312
+ axisLabel: { color: '#5C6C8C', fontWeight: 500 },
313
+ axisTick: { show: false },
314
+ splitLine: { show: false }
315
+ },
316
+ yAxis: {
317
+ type: 'value',
318
+ min: 0,
319
+ max: config.yMax ?? 100,
320
+ minInterval: 1,
321
+ axisLine: { show: false },
322
+ axisTick: { show: false },
323
+ axisLabel: {
324
+ color: '#5C6C8C',
325
+ fontWeight: 500,
326
+ formatter: value => `${value}${valueSuffix}`
327
+ },
328
+ splitLine: {
329
+ show: true,
330
+ lineStyle: { type: 'dashed', color: '#E0E6F1' }
331
+ }
332
+ },
333
+ series: [
334
+ {
335
+ type: 'bar',
336
+ data: dataset.map((item, idx) => ({
337
+ value: item.value,
338
+ barWidth: idx === activeIndex ? 10 : 5
339
+ })),
283
340
  itemStyle: {
284
- color: '#4C7CFF',
285
- shadowBlur: 18,
286
- shadowColor: 'rgba(76, 124, 255, 0.45)'
341
+ color: barColor,
342
+ borderRadius: [6, 6, 0, 0]
343
+ },
344
+ label: {
345
+ show: true,
346
+ position: 'top',
347
+ color: barColor,
348
+ fontWeight: 600,
349
+ formatter: params => {
350
+ const value = typeof params.data === 'object' ? params.data?.value : params.data
351
+ return `${value}${valueSuffix}`
352
+ }
353
+ },
354
+ emphasis: {
355
+ itemStyle: {
356
+ color: barHighlightColor,
357
+ shadowBlur: 18,
358
+ shadowColor: 'rgba(76, 124, 255, 0.45)'
359
+ },
360
+ label: {
361
+ color: barHighlightColor
362
+ }
287
363
  }
288
364
  }
289
- }
290
- ]
291
- }),
365
+ ]
366
+ }
367
+ },
292
368
  line: ({ dataset = [], config = {}, state = {} }) => {
293
369
  if (!dataset.length) {
294
370
  return {
@@ -598,6 +674,7 @@ const loadChartData = async (config) => {
598
674
  if (staticDataset) {
599
675
  chartData.value = staticDataset
600
676
  activePointIndex.value = -1
677
+ activeBarIndex.value = -1
601
678
  renderChart()
602
679
  emit('dataLoaded', chartData.value)
603
680
  return
@@ -615,12 +692,14 @@ const loadChartData = async (config) => {
615
692
  }
616
693
  chartData.value = transformedData
617
694
  activePointIndex.value = -1
695
+ activeBarIndex.value = -1
618
696
  renderChart()
619
697
  emit('dataLoaded', transformedData)
620
698
  } else {
621
699
  // 没有数据源,使用空数据
622
700
  chartData.value = []
623
701
  activePointIndex.value = -1
702
+ activeBarIndex.value = -1
624
703
  renderChart()
625
704
  }
626
705
  } catch (error) {
@@ -632,13 +711,21 @@ const loadChartData = async (config) => {
632
711
  // 渲染图表
633
712
  const handleChartClick = (params) => {
634
713
  const config = chartConfig.value || props.config
635
- if (config?.type !== 'line') return
636
- if (params?.componentType !== 'series') return
637
- if (params.seriesType !== 'line') return
638
- if (typeof params.dataIndex !== 'number') return
639
- if (activePointIndex.value === params.dataIndex) return
640
- activePointIndex.value = params.dataIndex
641
- renderChart()
714
+ if (!config || params?.componentType !== 'series') return
715
+ if (config.type === 'line' && params.seriesType === 'line') {
716
+ if (typeof params.dataIndex !== 'number') return
717
+ if (activePointIndex.value === params.dataIndex) return
718
+ activePointIndex.value = params.dataIndex
719
+ renderChart()
720
+ return
721
+ }
722
+ if (config.type === 'bar' && params.seriesType === 'bar') {
723
+ if (typeof params.dataIndex !== 'number') return
724
+ const nextIndex = activeBarIndex.value === params.dataIndex ? -1 : params.dataIndex
725
+ if (activeBarIndex.value === nextIndex) return
726
+ activeBarIndex.value = nextIndex
727
+ renderChart()
728
+ }
642
729
  }
643
730
 
644
731
  const renderChart = () => {
@@ -666,7 +753,10 @@ const renderChart = () => {
666
753
  const preset = resolver({
667
754
  dataset: chartData.value,
668
755
  config,
669
- state: { activePointIndex: activePointIndex.value }
756
+ state: {
757
+ activePointIndex: activePointIndex.value,
758
+ activeBarIndex: activeBarIndex.value
759
+ }
670
760
  })
671
761
 
672
762
  // 处理颜色配置:如果只有一个颜色,生成渐变数组
@@ -689,6 +779,7 @@ const renderChart = () => {
689
779
  if (config.options?.series && preset.series) {
690
780
  // 分离需要特殊处理的配置项
691
781
  const { xAxis: customXAxis, yAxis: customYAxis, series: customSeries, color: _, ...restOptions } = config.options
782
+ const normalizedCustomSeries = Array.isArray(customSeries) ? customSeries : [customSeries]
692
783
 
693
784
  finalOptions = {
694
785
  ...finalOptions,
@@ -713,14 +804,11 @@ const renderChart = () => {
713
804
  ...customYAxis
714
805
  }
715
806
  }),
716
- series: [
717
- {
718
- ...preset.series[0],
719
- ...customSeries[0],
720
- // 确保 data 来自预设(从 logic 获取的数据)
721
- data: preset.series[0].data
722
- }
723
- ]
807
+ series: preset.series.map((seriesItem, idx) => ({
808
+ ...seriesItem,
809
+ ...(normalizedCustomSeries[idx] || {}),
810
+ data: seriesItem.data
811
+ }))
724
812
  }
725
813
  } else {
726
814
  // 没有自定义 series 的情况
@@ -0,0 +1,64 @@
1
+ <template>
2
+ <a-card :bordered="false" v-if="currUserInfo">
3
+ <x-form-table
4
+ title="报建记录查询"
5
+ :queryParamsName="queryParamsName"
6
+ :fixedQueryForm="fixedQueryForm"
7
+ @action="action"
8
+ service-name="af-revenue"
9
+ ref="xFormTable">
10
+ </x-form-table>
11
+ </a-card>
12
+ </template>
13
+
14
+ <script>
15
+ import { mapState } from 'vuex'
16
+
17
+ export default {
18
+ name: 'ApplyRecordQuery',
19
+ components: {
20
+ XFormTable: () => import('@vue2-client/base-client/components/common/XFormTable/XFormTable.vue')
21
+ },
22
+ data () {
23
+ return {
24
+ // 查询配置名称
25
+ queryParamsName: 'ApplyRecordQueryCRUD',
26
+ // 查询表单固定值
27
+ fixedQueryForm: { ab_f_userinfo_id: this.currUserInfo.f_userinfo_id },
28
+ // 是否显示详情抽屉
29
+ detailVisible: false,
30
+ // 当前记录
31
+ record: {}
32
+ }
33
+ },
34
+ props: {
35
+ currUserInfo: {
36
+ type: Object,
37
+ default: () => undefined
38
+ }
39
+ },
40
+ mounted () {
41
+ this.$refs.xFormTable.refresh(true)
42
+ },
43
+ methods: {
44
+ action (record, id, actionType) {
45
+ this.detailVisible = true
46
+ console.log('触发了详情操作', record, id, actionType)
47
+ },
48
+ onClose () {
49
+ this.detailVisible = false
50
+ // 关闭详情之后重新查询表单
51
+ this.$refs.xFormTable.refreshTable(true)
52
+ }
53
+ },
54
+
55
+ computed: {
56
+ ...mapState('account', { currUser: 'user' }),
57
+ ...mapState('setting', { isMobile: 'isMobile' })
58
+ },
59
+ }
60
+ </script>
61
+
62
+ <style scoped>
63
+
64
+ </style>
@@ -0,0 +1,64 @@
1
+ <template>
2
+ <a-card :bordered="false" v-if="currUserInfo">
3
+ <x-form-table
4
+ title="安检记录查询"
5
+ :queryParamsName="queryParamsName"
6
+ :fixedQueryForm="fixedQueryForm"
7
+ @action="action"
8
+ service-name="af-revenue"
9
+ ref="xFormTable">
10
+ </x-form-table>
11
+ </a-card>
12
+ </template>
13
+
14
+ <script>
15
+ import { mapState } from 'vuex'
16
+
17
+ export default {
18
+ name: 'SafeCheckPaperV3RecordQuery',
19
+ components: {
20
+ XFormTable: () => import('@vue2-client/base-client/components/common/XFormTable/XFormTable.vue')
21
+ },
22
+ data () {
23
+ return {
24
+ // 查询配置名称
25
+ queryParamsName: 'SafeCheckRecordQueryCRUD',
26
+ // 查询表单固定值
27
+ fixedQueryForm: { tcp_f_userinfoid: this.currUserInfo.f_userinfo_id },
28
+ // 是否显示详情抽屉
29
+ detailVisible: false,
30
+ // 当前记录
31
+ record: {}
32
+ }
33
+ },
34
+ props: {
35
+ currUserInfo: {
36
+ type: Object,
37
+ default: () => undefined
38
+ }
39
+ },
40
+ mounted () {
41
+ this.$refs.xFormTable.refresh(true)
42
+ },
43
+ methods: {
44
+ action (record, id, actionType) {
45
+ this.detailVisible = true
46
+ console.log('触发了详情操作', record, id, actionType)
47
+ },
48
+ onClose () {
49
+ this.detailVisible = false
50
+ // 关闭详情之后重新查询表单
51
+ this.$refs.xFormTable.refreshTable(true)
52
+ }
53
+ },
54
+
55
+ computed: {
56
+ ...mapState('account', { currUser: 'user' }),
57
+ ...mapState('setting', { isMobile: 'isMobile' })
58
+ },
59
+ }
60
+ </script>
61
+
62
+ <style scoped>
63
+
64
+ </style>
@@ -0,0 +1,64 @@
1
+ <template>
2
+ <a-card :bordered="false" v-if="currUserInfo">
3
+ <x-form-table
4
+ title="工单记录查询"
5
+ :queryParamsName="queryParamsName"
6
+ :fixedQueryForm="fixedQueryForm"
7
+ @action="action"
8
+ service-name="af-revenue"
9
+ ref="xFormTable">
10
+ </x-form-table>
11
+ </a-card>
12
+ </template>
13
+
14
+ <script>
15
+ import { mapState } from 'vuex'
16
+
17
+ export default {
18
+ name: 'TelephoneV3RecordQuery',
19
+ components: {
20
+ XFormTable: () => import('@vue2-client/base-client/components/common/XFormTable/XFormTable.vue')
21
+ },
22
+ data () {
23
+ return {
24
+ // 查询配置名称
25
+ queryParamsName: 'TelephoneRecordQueryCRUD',
26
+ // 查询表单固定值
27
+ fixedQueryForm: { ts_f_userinfo_id: this.currUserInfo.f_userinfo_id },
28
+ // 是否显示详情抽屉
29
+ detailVisible: false,
30
+ // 当前记录
31
+ record: {}
32
+ }
33
+ },
34
+ props: {
35
+ currUserInfo: {
36
+ type: Object,
37
+ default: () => undefined
38
+ }
39
+ },
40
+ mounted () {
41
+ this.$refs.xFormTable.refresh(true)
42
+ },
43
+ methods: {
44
+ action (record, id, actionType) {
45
+ this.detailVisible = true
46
+ console.log('触发了详情操作', record, id, actionType)
47
+ },
48
+ onClose () {
49
+ this.detailVisible = false
50
+ // 关闭详情之后重新查询表单
51
+ this.$refs.xFormTable.refreshTable(true)
52
+ }
53
+ },
54
+
55
+ computed: {
56
+ ...mapState('account', { currUser: 'user' }),
57
+ ...mapState('setting', { isMobile: 'isMobile' })
58
+ },
59
+ }
60
+ </script>
61
+
62
+ <style scoped>
63
+
64
+ </style>
@@ -1,146 +1,155 @@
1
- <template>
2
- <a-tabs :activeKey="activeKey" @change="changeTab">
3
- <a-tab-pane
4
- v-for="tab in filteredTabs"
5
- :key="tab.key"
6
- :tab="tab.label"
7
- >
8
- <component
9
- :is="tab.component"
10
- :currUserInfo="userInfo"
11
- v-if="activeKey === tab.key && userInfo"
12
- ></component>
13
- </a-tab-pane>
14
- </a-tabs>
15
- </template>
16
-
17
- <script>
18
- import { mapState } from 'vuex'
19
- import XFormTable from '@vue2-client/base-client/components/common/XFormTable/XFormTable.vue'
20
- import XAddNativeForm from '@vue2-client/base-client/components/common/XAddNativeForm/XAddNativeForm.vue'
21
- import XDescriptions from '@vue2-client/base-client/components/common/XDescriptions/XDescriptions.vue'
22
- import UserRecordQuery from '@vue2-client/pages/userInfoDetailManage/UserRecordQuery'
23
- import MachineRecordQuery from '@vue2-client/pages/userInfoDetailManage/MachineRecordQuery'
24
- import UserChargeRecordQuery from '@vue2-client/pages/userInfoDetailManage/UserChargeRecordQuery'
25
- import UserHandRecordQuery from '@vue2-client/pages/userInfoDetailManage/UserHandRecordQuery'
26
- import FillCardRecordQuery from '@vue2-client/pages/userInfoDetailManage/FillCardRecordQuery'
27
- import FillGasRecordQuery from '@vue2-client/pages/userInfoDetailManage/FillGasRecordQuery'
28
- import ChangeMeterRecordQuery from '@vue2-client/pages/userInfoDetailManage/ChangeMeterRecordQuery'
29
- import InfoChangeRecordQuery from '@vue2-client/pages/userInfoDetailManage/InfoChangeRecordQuery'
30
- import InstructRecordQuery from '@vue2-client/pages/userInfoDetailManage/InstructRecordQuery'
31
- import MeterParamRecordQuery from '@vue2-client/pages/userInfoDetailManage/MeterParamRecordQuery'
32
- import OtherChargeRecordQuery from '@vue2-client/pages/userInfoDetailManage/OtherChargeRecordQuery'
33
- import TransferRecordQuery from '@vue2-client/pages/userInfoDetailManage/TransferRecordQuery'
34
- import WatchCollectionRecordQuery from '@vue2-client/pages/userInfoDetailManage/WatchCollectionRecordQuery'
35
- import UserException from '@vue2-client/pages/userInfoDetailManage/UserException'
36
- import PriceAdjustments from '@vue2-client/pages/userInfoDetailManage/PriceAdjustments'
37
- import uploadFilesHistory from '@vue2-client/pages/userInfoDetailManage/uploadFilesHistory'
38
- import InsuranceDetailQuery from '@vue2-client/pages/userInfoDetailManage/InsuranceDetailQuery'
39
- import ExceptionRecordQuery from '@vue2-client/pages/userInfoDetailManage/ExceptionRecordQuery'
40
- export default {
41
- name: 'UserInfoDetailQueryTabs',
42
- components: {
43
- XFormTable,
44
- XDescriptions,
45
- XAddNativeForm,
46
- UserRecordQuery,
47
- MachineRecordQuery,
48
- UserChargeRecordQuery,
49
- FillCardRecordQuery,
50
- FillGasRecordQuery,
51
- ChangeMeterRecordQuery,
52
- InfoChangeRecordQuery,
53
- InstructRecordQuery,
54
- MeterParamRecordQuery,
55
- OtherChargeRecordQuery,
56
- WatchCollectionRecordQuery,
57
- TransferRecordQuery,
58
- UserHandRecordQuery,
59
- UserException,
60
- PriceAdjustments,
61
- uploadFilesHistory,
62
- InsuranceDetailQuery,
63
- ExceptionRecordQuery
64
- },
65
- props: {
66
- userInfo: {
67
- type: Object,
68
- default: () => undefined
69
- }
70
- },
71
- data () {
72
- return {
73
- activeKey: '1',
74
- tabs: [
75
- { key: '1', label: '流水查询', permission: '流水查询', component: 'UserRecordQuery' },
76
- {
77
- key: '2',
78
- label: '机表流水查询',
79
- permission: '机表流水查询',
80
- component: 'MachineRecordQuery',
81
- condition: () => this.userInfo?.f_meter_type === '机表'
82
- },
83
- { key: '3', label: '收费查询', permission: '收费查询', component: 'UserChargeRecordQuery' },
84
- { key: '4', label: '抄表记录', permission: '抄表记录', component: 'UserHandRecordQuery' },
85
- {
86
- key: '5',
87
- label: '补卡查询',
88
- permission: '补卡查询',
89
- component: 'FillCardRecordQuery',
90
- condition: () => this.userInfo?.f_meter_type?.includes('卡表')
91
- },
92
- { key: '6', label: '补气查询', permission: '补气查询', component: 'FillGasRecordQuery' },
93
- { key: '7', label: '换表查询', permission: '换表查询', component: 'ChangeMeterRecordQuery' },
94
- { key: '8', label: '其他收费', permission: '其他收费', component: 'OtherChargeRecordQuery' },
95
- { key: '9', label: '过户查询', permission: '过户查询', component: 'TransferRecordQuery' },
96
- { key: '10', label: '档案变更记录', permission: '变更记录', component: 'InfoChangeRecordQuery' },
97
- {
98
- key: '11',
99
- label: '指令查看',
100
- permission: '指令查看',
101
- component: 'InstructRecordQuery',
102
- condition: () => this.userInfo?.f_meter_type === '物联网表'
103
- },
104
- {
105
- key: '12',
106
- label: '表具采集',
107
- permission: '表具采集',
108
- component: 'WatchCollectionRecordQuery',
109
- condition: () => this.userInfo?.f_meter_type === '物联网表'
110
- },
111
- { key: '13', label: '流量计参数查看', permission: '流量计参数查看', component: 'MeterParamRecordQuery' },
112
- { key: '14', label: '异常报警', permission: '异常报警', component: 'UserException' },
113
- { key: '15', label: '价格调整', permission: '价格调整', component: 'PriceAdjustments' },
114
- { key: '16', label: '附件查看', permission: '附件查看', component: 'uploadFilesHistory' },
115
- { key: '17', label: '保险明细', permission: '保险明细', component: 'InsuranceDetailQuery' },
116
- { key: '18', label: '异常查看', permission: '异常查看', component: 'ExceptionRecordQuery', condition: () => this.userInfo?.f_meter_type === '物联网表' },
117
- ],
118
- }
119
- },
120
- computed: {
121
- ...mapState('account', { currUser: 'user', login: 'login' }),
122
- ...mapState('setting', { isMobile: 'isMobile' }),
123
- currUserInfo () {
124
- return this.userInfo
125
- },
126
- filteredTabs () {
127
- return this.tabs.filter((tab) => {
128
- const hasPermission = this.login?.r.includes(tab.permission)
129
- const meetsCondition = tab.condition ? tab.condition() : true
130
- return hasPermission && meetsCondition
131
- })
132
- },
133
- },
134
- methods: {
135
- changeTab (key) {
136
- this.activeKey = key
137
- },
138
- },
139
- }
140
- </script>
141
-
142
- <style scoped lang="less">
143
- :deep(.ant-statistic-content-value) {
144
- color: @primary-color;
145
- }
146
- </style>
1
+ <template>
2
+ <a-tabs :activeKey="activeKey" @change="changeTab">
3
+ <a-tab-pane
4
+ v-for="tab in filteredTabs"
5
+ :key="tab.key"
6
+ :tab="tab.label"
7
+ >
8
+ <component
9
+ :is="tab.component"
10
+ :currUserInfo="userInfo"
11
+ v-if="activeKey === tab.key && userInfo"
12
+ ></component>
13
+ </a-tab-pane>
14
+ </a-tabs>
15
+ </template>
16
+
17
+ <script>
18
+ import { mapState } from 'vuex'
19
+ import XFormTable from '@vue2-client/base-client/components/common/XFormTable/XFormTable.vue'
20
+ import XAddNativeForm from '@vue2-client/base-client/components/common/XAddNativeForm/XAddNativeForm.vue'
21
+ import XDescriptions from '@vue2-client/base-client/components/common/XDescriptions/XDescriptions.vue'
22
+ import UserRecordQuery from '@vue2-client/pages/userInfoDetailManage/UserRecordQuery'
23
+ import MachineRecordQuery from '@vue2-client/pages/userInfoDetailManage/MachineRecordQuery'
24
+ import UserChargeRecordQuery from '@vue2-client/pages/userInfoDetailManage/UserChargeRecordQuery'
25
+ import UserHandRecordQuery from '@vue2-client/pages/userInfoDetailManage/UserHandRecordQuery'
26
+ import FillCardRecordQuery from '@vue2-client/pages/userInfoDetailManage/FillCardRecordQuery'
27
+ import FillGasRecordQuery from '@vue2-client/pages/userInfoDetailManage/FillGasRecordQuery'
28
+ import ChangeMeterRecordQuery from '@vue2-client/pages/userInfoDetailManage/ChangeMeterRecordQuery'
29
+ import InfoChangeRecordQuery from '@vue2-client/pages/userInfoDetailManage/InfoChangeRecordQuery'
30
+ import InstructRecordQuery from '@vue2-client/pages/userInfoDetailManage/InstructRecordQuery'
31
+ import MeterParamRecordQuery from '@vue2-client/pages/userInfoDetailManage/MeterParamRecordQuery'
32
+ import OtherChargeRecordQuery from '@vue2-client/pages/userInfoDetailManage/OtherChargeRecordQuery'
33
+ import TransferRecordQuery from '@vue2-client/pages/userInfoDetailManage/TransferRecordQuery'
34
+ import WatchCollectionRecordQuery from '@vue2-client/pages/userInfoDetailManage/WatchCollectionRecordQuery'
35
+ import UserException from '@vue2-client/pages/userInfoDetailManage/UserException'
36
+ import PriceAdjustments from '@vue2-client/pages/userInfoDetailManage/PriceAdjustments'
37
+ import uploadFilesHistory from '@vue2-client/pages/userInfoDetailManage/uploadFilesHistory'
38
+ import InsuranceDetailQuery from '@vue2-client/pages/userInfoDetailManage/InsuranceDetailQuery'
39
+ import ExceptionRecordQuery from '@vue2-client/pages/userInfoDetailManage/ExceptionRecordQuery'
40
+ import ApplyRecordQuery from '@vue2-client/pages/userInfoDetailManage/ApplyRecordQuery'
41
+ import SafeCheckPaperV3RecordQuery from '@vue2-client/pages/userInfoDetailManage/SafeCheckPaperV3RecordQuery'
42
+ import TelephoneV3RecordQuery from '@vue2-client/pages/userInfoDetailManage/TelephoneV3RecordQuery'
43
+ export default {
44
+ name: 'UserInfoDetailQueryTabs',
45
+ components: {
46
+ XFormTable,
47
+ XDescriptions,
48
+ XAddNativeForm,
49
+ UserRecordQuery,
50
+ MachineRecordQuery,
51
+ UserChargeRecordQuery,
52
+ FillCardRecordQuery,
53
+ FillGasRecordQuery,
54
+ ChangeMeterRecordQuery,
55
+ InfoChangeRecordQuery,
56
+ InstructRecordQuery,
57
+ MeterParamRecordQuery,
58
+ OtherChargeRecordQuery,
59
+ WatchCollectionRecordQuery,
60
+ TransferRecordQuery,
61
+ UserHandRecordQuery,
62
+ UserException,
63
+ PriceAdjustments,
64
+ uploadFilesHistory,
65
+ InsuranceDetailQuery,
66
+ ExceptionRecordQuery,
67
+ ApplyRecordQuery,
68
+ SafeCheckPaperV3RecordQuery,
69
+ TelephoneV3RecordQuery
70
+ },
71
+ props: {
72
+ userInfo: {
73
+ type: Object,
74
+ default: () => undefined
75
+ }
76
+ },
77
+ data () {
78
+ return {
79
+ activeKey: '1',
80
+ tabs: [
81
+ { key: '1', label: '流水查询', permission: '流水查询', component: 'UserRecordQuery' },
82
+ {
83
+ key: '2',
84
+ label: '机表流水查询',
85
+ permission: '机表流水查询',
86
+ component: 'MachineRecordQuery',
87
+ condition: () => this.userInfo?.f_meter_type === '机表'
88
+ },
89
+ { key: '3', label: '收费查询', permission: '收费查询', component: 'UserChargeRecordQuery' },
90
+ { key: '4', label: '抄表记录', permission: '抄表记录', component: 'UserHandRecordQuery' },
91
+ {
92
+ key: '5',
93
+ label: '补卡查询',
94
+ permission: '补卡查询',
95
+ component: 'FillCardRecordQuery',
96
+ condition: () => this.userInfo?.f_meter_type?.includes('卡表')
97
+ },
98
+ { key: '6', label: '补气查询', permission: '补气查询', component: 'FillGasRecordQuery' },
99
+ { key: '7', label: '换表查询', permission: '换表查询', component: 'ChangeMeterRecordQuery' },
100
+ { key: '8', label: '其他收费', permission: '其他收费', component: 'OtherChargeRecordQuery' },
101
+ { key: '9', label: '过户查询', permission: '过户查询', component: 'TransferRecordQuery' },
102
+ { key: '10', label: '档案变更记录', permission: '变更记录', component: 'InfoChangeRecordQuery' },
103
+ {
104
+ key: '11',
105
+ label: '指令查看',
106
+ permission: '指令查看',
107
+ component: 'InstructRecordQuery',
108
+ condition: () => this.userInfo?.f_meter_type === '物联网表'
109
+ },
110
+ {
111
+ key: '12',
112
+ label: '表具采集',
113
+ permission: '表具采集',
114
+ component: 'WatchCollectionRecordQuery',
115
+ condition: () => this.userInfo?.f_meter_type === '物联网表'
116
+ },
117
+ { key: '13', label: '流量计参数查看', permission: '流量计参数查看', component: 'MeterParamRecordQuery' },
118
+ { key: '14', label: '异常报警', permission: '异常报警', component: 'UserException' },
119
+ { key: '15', label: '价格调整', permission: '价格调整', component: 'PriceAdjustments' },
120
+ { key: '16', label: '附件查看', permission: '附件查看', component: 'uploadFilesHistory' },
121
+ { key: '17', label: '保险明细', permission: '保险明细', component: 'InsuranceDetailQuery' },
122
+ { key: '18', label: '异常查看', permission: '异常查看', component: 'ExceptionRecordQuery', condition: () => this.userInfo?.f_meter_type === '物联网表' },
123
+ { key: '19', label: '报建查看', permission: '报建查看', component: 'ApplyRecordQuery' },
124
+ { key: '20', label: '安检查看', permission: '安检查看', component: 'SafeCheckPaperV3RecordQuery' },
125
+ { key: '21', label: '工单查看', permission: '工单查看', component: 'TelephoneV3RecordQuery' },
126
+ ],
127
+ }
128
+ },
129
+ computed: {
130
+ ...mapState('account', { currUser: 'user', login: 'login' }),
131
+ ...mapState('setting', { isMobile: 'isMobile' }),
132
+ currUserInfo () {
133
+ return this.userInfo
134
+ },
135
+ filteredTabs () {
136
+ return this.tabs.filter((tab) => {
137
+ const hasPermission = this.login?.r.includes(tab.permission)
138
+ const meetsCondition = tab.condition ? tab.condition() : true
139
+ return hasPermission && meetsCondition
140
+ })
141
+ },
142
+ },
143
+ methods: {
144
+ changeTab (key) {
145
+ this.activeKey = key
146
+ },
147
+ },
148
+ }
149
+ </script>
150
+
151
+ <style scoped lang="less">
152
+ :deep(.ant-statistic-content-value) {
153
+ color: @primary-color;
154
+ }
155
+ </style>