vue2-client 1.12.70 → 1.12.72

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.
@@ -1,44 +1,44 @@
1
- <template>
2
- <div id="test">
3
- <a-card :bordered="false">
4
- <XReport
5
- ref="main"
6
- :use-oss-for-img="false"
7
- config-name="nurseWorkstationCover"
8
- server-name="af-his"
9
- :show-img-in-cell="true"
10
- :display-only="true"
11
- :edit-mode="false"
12
- :dont-format="true"/>
13
- </a-card>
14
- </div>
15
- </template>
16
-
17
- <script>
18
- import XReport from './XReport'
19
- import XAddReport from '../XAddReport/XAddReport.vue'
20
- // eslint-disable-next-line no-unused-vars
21
-
22
- export default {
23
- name: 'XReportDemo',
24
- components: {
25
- XReport, XAddReport
26
- },
27
- mounted () {
28
- // this.$refs.xAddReport.init({
29
- // configName: 'skinTestExecuActionCover',
30
- // selectedId: '11111',
31
- // mixinData: {}
32
- // })
33
- },
34
- data () {
35
- return {
36
- }
37
- },
38
- methods: {
39
- }
40
- }
41
- </script>
42
- <style scoped>
43
-
44
- </style>
1
+ <template>
2
+ <div id="test">
3
+ <a-card :bordered="false">
4
+ <XReport
5
+ ref="main"
6
+ :use-oss-for-img="false"
7
+ config-name="openPrescriptionCover"
8
+ server-name="af-his"
9
+ :show-img-in-cell="true"
10
+ :display-only="true"
11
+ :edit-mode="false"
12
+ :dont-format="true"/>
13
+ </a-card>
14
+ </div>
15
+ </template>
16
+
17
+ <script>
18
+ import XReport from './XReport'
19
+ import XAddReport from '../XAddReport/XAddReport.vue'
20
+ // eslint-disable-next-line no-unused-vars
21
+
22
+ export default {
23
+ name: 'XReportDemo',
24
+ components: {
25
+ XReport, XAddReport
26
+ },
27
+ mounted () {
28
+ // this.$refs.xAddReport.init({
29
+ // configName: 'skinTestExecuActionCover',
30
+ // selectedId: '11111',
31
+ // mixinData: {}
32
+ // })
33
+ },
34
+ data () {
35
+ return {
36
+ }
37
+ },
38
+ methods: {
39
+ }
40
+ }
41
+ </script>
42
+ <style scoped>
43
+
44
+ </style>
@@ -88,6 +88,7 @@
88
88
  <script>
89
89
 
90
90
  import { runLogic } from '@vue2-client/services/api/common'
91
+ import { initDiagnosisDropdown } from './diagnosisAutocomplete'
91
92
 
92
93
  export default {
93
94
  name: 'XHisEditor',
@@ -163,12 +164,42 @@ export default {
163
164
  },
164
165
  methods: {
165
166
  runLogic,
167
+ async initDiagnosisAutocomplete (dropDownBoxParams) {
168
+ if (!this.editorRef || !this.editorRef.document) {
169
+ return
170
+ }
171
+
172
+ // 添加参数检查
173
+ if (!dropDownBoxParams || !Array.isArray(dropDownBoxParams) || dropDownBoxParams.length === 0) {
174
+ return
175
+ }
176
+
177
+ dropDownBoxParams.forEach(async (param) => {
178
+ if (param.identificationCode && param.dataLogic) {
179
+ try {
180
+ let preliDiagnoData = null
181
+ // 保留获取后端数据的逻辑
182
+ await runLogic(param.dataLogic,
183
+ {}, 'af-his').then(res => {
184
+ preliDiagnoData = res
185
+ })
186
+ const scriptElement = this.editorRef.document.createElement('script')
187
+ scriptElement.textContent = `(${initDiagnosisDropdown.toString()})(editor,${JSON.stringify(preliDiagnoData)},'${param.identificationCode}')`
188
+ this.editorRef.document.body.appendChild(scriptElement)
189
+ } catch (error) {
190
+
191
+ }
192
+ }
193
+ })
194
+ },
166
195
  // 初始化文档
167
- onload: function (e) {
168
- this.editorRef = e.target.contentWindow.editor
169
- this.$emit('init', {})
196
+ onload (e) {
197
+ if (e && e.target && e.target.contentWindow) {
198
+ this.editorRef = e.target.contentWindow.editor
199
+ // 等待文档加载完成
200
+ this.$emit('init', {})
201
+ }
170
202
  },
171
- // 初始化组件
172
203
  init (params) {
173
204
  const {
174
205
  fileUrl,
@@ -177,6 +208,7 @@ export default {
177
208
  bindObject,
178
209
  saveDataLogicName,
179
210
  logicExtraParams,
211
+ dropDownBoxParams,
180
212
  serviceName,
181
213
  showModeChoose = true,
182
214
  modeType = 'readonly'
@@ -194,29 +226,36 @@ export default {
194
226
  this.showModeChoose = showModeChoose
195
227
  this.modeType = modeType
196
228
  this.ready = true
197
- this.loadFile(fileUrl, bindObject, currResData)
229
+ // 先加载文件
230
+ this.loadFile(fileUrl, bindObject, currResData).then(() => {
231
+ // 文件加载完成后再初始化自动完成
232
+ this.initDiagnosisAutocomplete(dropDownBoxParams)
233
+ })
198
234
  this.loadResList()
199
235
  },
200
236
  // 加载文档
201
237
  loadFile (fileUrl, bindObject, currResData) {
202
238
  this.loading = true
203
- this.editorRef.loadUrl(fileUrl).then(() => {
204
- if (bindObject) {
205
- this.editorRef.setBindObject(bindObject)
206
- if (bindObject.template) {
207
- for (const key of Object.keys(bindObject.template)) {
208
- this.editorRef.bindDataList(key, bindObject.template[key])
239
+ return new Promise((resolve) => {
240
+ this.editorRef.loadUrl(fileUrl).then(() => {
241
+ if (bindObject) {
242
+ this.editorRef.setBindObject(bindObject)
243
+ if (bindObject.template) {
244
+ for (const key of Object.keys(bindObject.template)) {
245
+ this.editorRef.bindDataList(key, bindObject.template[key])
246
+ }
209
247
  }
210
248
  }
211
- }
212
- this.changeMode()
213
- this.fileUrl = fileUrl
214
- if (!currResData.f_file_name) {
215
- currResData.f_file_name = '未命名'
216
- }
217
- this.currResData = currResData
218
- this.loading = false
219
- this.$emit('afterLoadFile', {})
249
+ this.changeMode()
250
+ this.fileUrl = fileUrl
251
+ if (!currResData.f_file_name) {
252
+ currResData.f_file_name = '未命名'
253
+ }
254
+ this.currResData = currResData
255
+ this.loading = false
256
+ this.$emit('afterLoadFile', {})
257
+ resolve()
258
+ })
220
259
  })
221
260
  },
222
261
  // 加载文档列表
@@ -270,7 +309,7 @@ export default {
270
309
  },
271
310
  // 重新加载
272
311
  reload (params) {
273
- runLogic('getMedicalRecord', params, this.serviceName).then(res => {
312
+ runLogic('getFileInformation', params, this.serviceName).then(res => {
274
313
  this.resDataModalVisible = false
275
314
  this.init({
276
315
  modeType: this.modeType,
@@ -280,7 +319,8 @@ export default {
280
319
  bindObject: res.bindObject,
281
320
  saveDataLogicName: this.saveDataLogicName,
282
321
  serviceName: this.serviceName,
283
- logicExtraParams: this.logicExtraParams
322
+ logicExtraParams: this.logicExtraParams,
323
+ dropDownBoxParams: this.dropDownBoxParams
284
324
  })
285
325
  })
286
326
  },
@@ -0,0 +1,241 @@
1
+ export function initDiagnosisDropdown (editor, data, identificationCode) {
2
+ if (typeof editor === 'undefined' || !editor.$) {
3
+ return
4
+ }
5
+
6
+ // 确保元素存在
7
+ const diagnosisField = editor.$(identificationCode)
8
+
9
+ if (!diagnosisField.length) {
10
+ return
11
+ }
12
+
13
+ // 更详细的调试信息
14
+ const fieldElement = diagnosisField[0]
15
+
16
+ // 模拟诊断数据
17
+ const mockDiagnosisList = data
18
+ // 生成唯一的下拉框类名
19
+ const dropdownClassName = `diagnosis-dropdown-${identificationCode.replace('#', '')}`
20
+ // 创建下拉列表容器 - 使用 Ant Design 风格
21
+ editor.$(`.${dropdownClassName}`).remove() // 修改这里,使用唯一的类名
22
+ const dropdownList = editor.document.createElement('div')
23
+ dropdownList.className = dropdownClassName // 使用唯一的类名
24
+
25
+ // 添加 Ant Design 样式,修改样式选择器使用唯一的类名
26
+ const styleElement = editor.document.createElement('style')
27
+ styleElement.textContent = `
28
+ .${dropdownClassName} {
29
+ display: none;
30
+ position: absolute;
31
+ z-index: 999999;
32
+ background: #fff;
33
+ border-radius: 2px;
34
+ box-shadow: 0 3px 6px -4px rgba(0,0,0,.12), 0 6px 16px 0 rgba(0,0,0,.08), 0 9px 28px 8px rgba(0,0,0,.05);
35
+ padding: 4px 0;
36
+ min-width: 300px;
37
+ width: auto;
38
+ max-width: 400px;
39
+ max-height: 256px;
40
+ overflow-y: auto;
41
+ }
42
+ .${dropdownClassName}::-webkit-scrollbar {
43
+ width: 6px;
44
+ height: 6px;
45
+ }
46
+ .${dropdownClassName}::-webkit-scrollbar-thumb {
47
+ background: rgba(0,0,0,.2);
48
+ border-radius: 3px;
49
+ }
50
+ .${dropdownClassName} .ant-list-item {
51
+ padding: 8px 12px;
52
+ cursor: pointer;
53
+ transition: all .3s;
54
+ white-space: nowrap;
55
+ }
56
+ .${dropdownClassName} .ant-list-item:hover {
57
+ background: #f5f5f5;
58
+ }
59
+ .${dropdownClassName} .ant-list-item-content {
60
+ display: flex;
61
+ flex-direction: row;
62
+ align-items: center;
63
+ gap: 8px;
64
+ }
65
+ .${dropdownClassName} .ant-list-item-title {
66
+ color: rgba(0,0,0,.85);
67
+ font-weight: 500;
68
+ font-size: 14px;
69
+ line-height: 1.5715;
70
+ flex: 1;
71
+ min-width: 120px;
72
+ }
73
+ .${dropdownClassName} .ant-list-item-description {
74
+ color: rgba(0,0,0,.45);
75
+ font-size: 12px;
76
+ line-height: 1.5715;
77
+ min-width: 80px;
78
+ }
79
+ .${dropdownClassName} .ant-list-empty {
80
+ padding: 16px;
81
+ color: rgba(0,0,0,.45);
82
+ text-align: center;
83
+ min-width: 200px;
84
+ }
85
+ `
86
+ editor.document.head.appendChild(styleElement)
87
+
88
+ // 将下拉列表添加到编辑器文档中
89
+ diagnosisField.after(dropdownList)
90
+
91
+ // 获取当前模式
92
+ function getCurrentMode () {
93
+ return editor.option.mode
94
+ }
95
+
96
+ // 检查是否允许编辑
97
+ function isEditableMode () {
98
+ const currentMode = getCurrentMode()
99
+ return currentMode === 'form' || currentMode === 'design'
100
+ }
101
+
102
+ // 更新下拉列表位置的函数
103
+ function updateDropdownPosition () {
104
+ try {
105
+ // 获取输入框的位置和尺寸
106
+ const fieldRect = fieldElement.getBoundingClientRect()
107
+
108
+ // 获取父容器的滚动位置
109
+ const scrollTop = editor.$(editor.document).scrollTop()
110
+ const scrollLeft = editor.$(editor.document).scrollLeft()
111
+
112
+ // 计算绝对位置
113
+ const top = fieldRect.bottom + scrollTop
114
+ const left = fieldRect.left + scrollLeft
115
+
116
+ // 设置下拉列表位置,不设置宽度,让它自适应内容
117
+ dropdownList.style.cssText = `
118
+ position: absolute;
119
+ top: ${top}px;
120
+ left: ${left}px;
121
+ display: block;
122
+ `
123
+ } catch (error) {
124
+ }
125
+ }
126
+
127
+ // 处理输入事件的函数
128
+ function handleInput () {
129
+ if (!isEditableMode()) {
130
+ dropdownList.style.display = 'none'
131
+ return
132
+ }
133
+
134
+ const keyword = this.textContent.trim()
135
+
136
+ if (keyword && keyword !== '请输入') {
137
+ const results = mockDiagnosisList.filter(item =>
138
+ item.name.toLowerCase().includes(keyword.toLowerCase()) ||
139
+ item.code.toLowerCase().includes(keyword.toLowerCase())
140
+ )
141
+
142
+ // 1. 先清空内容
143
+ dropdownList.innerHTML = ''
144
+
145
+ // 2. 添加内容
146
+ if (results.length === 0) {
147
+ dropdownList.innerHTML = `
148
+ <div class="ant-list-empty">
149
+ <div style="color: rgba(0,0,0,.25);">
150
+ <svg viewBox="64 64 896 896" width="16" height="16" fill="currentColor">
151
+ <path d="M928 224H768v-56c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v56H548v-56c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v56H328v-56c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v56H96c-17.7 0-32 14.3-32 32v576c0 17.7 14.3 32 32 32h832c17.7 0 32-14.3 32-32V256c0-17.7-14.3-32-32-32zM424 688c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v48zm0-136c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v48zm136 136c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v48zm0-136c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v48zm136 136c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v48zm0-136c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v48z"/>
152
+ </svg>
153
+ <div style="margin-top: 8px;">无匹配结果</div>
154
+ </div>
155
+ </div>
156
+ `
157
+ } else {
158
+ const itemsHtml = results.map(item => `
159
+ <div class="ant-list-item">
160
+ <div class="ant-list-item-content">
161
+ <div class="ant-list-item-title">${item.name}</div>
162
+ <div class="ant-list-item-description">${item.code}</div>
163
+ </div>
164
+ </div>
165
+ `).join('')
166
+ dropdownList.innerHTML = itemsHtml
167
+ }
168
+
169
+ // 3. 更新位置并显示
170
+ updateDropdownPosition()
171
+ } else {
172
+ dropdownList.style.display = 'none'
173
+ }
174
+ }
175
+
176
+ // 输入法编辑状态处理
177
+ let isCompositing = false
178
+
179
+ // 输入法开始
180
+ fieldElement.addEventListener('compositionstart', function (e) {
181
+ isCompositing = true
182
+ })
183
+
184
+ // 输入法结束
185
+ fieldElement.addEventListener('compositionend', function (e) {
186
+ isCompositing = false
187
+ handleInput.call(this)
188
+ })
189
+
190
+ // 输入事件
191
+ fieldElement.addEventListener('input', function (e) {
192
+ if (!isCompositing) {
193
+ handleInput.call(this)
194
+ }
195
+ })
196
+
197
+ // 焦点事件
198
+ fieldElement.addEventListener('focus', function (e) {
199
+ })
200
+
201
+ // 失去焦点事件
202
+ fieldElement.addEventListener('blur', function (e) {
203
+ setTimeout(() => {
204
+ if (!this.textContent.trim()) {
205
+ this.textContent = '请输入'
206
+ }
207
+ }, 200)
208
+ })
209
+
210
+ // 点击选项事件
211
+ editor.$(dropdownList).on('mousedown', '.ant-list-item', function (e) {
212
+ e.preventDefault()
213
+ e.stopPropagation()
214
+ if (isEditableMode()) {
215
+ const name = editor.$(this).find('.ant-list-item-title').text()
216
+ fieldElement.textContent = name
217
+ dropdownList.style.display = 'none'
218
+ fieldElement.focus()
219
+ }
220
+ })
221
+
222
+ // 点击文档其他区域时隐藏下拉列表,修改选择器
223
+ editor.$(editor.document).on('mousedown', function (e) {
224
+ if (!editor.$(e.target).closest(`.${dropdownClassName}, ${identificationCode}`).length) {
225
+ dropdownList.style.display = 'none'
226
+ }
227
+ })
228
+
229
+ // 添加滚动事件监听,实时更新下拉列表位置
230
+ editor.$(editor.window).on('scroll', function () {
231
+ if (dropdownList.style.display !== 'none') {
232
+ updateDropdownPosition()
233
+ }
234
+ })
235
+
236
+ editor.$(editor.window).on('resize', function () {
237
+ if (dropdownList.style.display !== 'none') {
238
+ updateDropdownPosition()
239
+ }
240
+ })
241
+ }
@@ -28,7 +28,6 @@ export default {
28
28
  },
29
29
  created () {
30
30
  this.getData(this.queryParamsName)
31
- this.getComponentByName()
32
31
  },
33
32
  methods: {
34
33
  async getData (config) {
@@ -37,6 +36,10 @@ export default {
37
36
  })
38
37
  },
39
38
  handleClick (index) {
39
+ console.log('xlist按钮被点击了!')
40
+ console.warn(this.getComponentByName)
41
+ const xCollapseComponent = this.getComponentByName('XCollapse')
42
+ console.warn('xCollapseComponent', xCollapseComponent)
40
43
  this.$emit('listClick', this.data[index])
41
44
  },
42
45
  refreshList () {
@@ -4,7 +4,7 @@
4
4
  @updateImg="updateImg"
5
5
  ref="main"
6
6
  :use-oss-for-img="false"
7
- config-name="openPrescriptionCover"
7
+ config-name="outpatientWait"
8
8
  server-name="af-his"
9
9
  :show-img-in-cell="true"
10
10
  :display-only="displayOnly"
@@ -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: 'PriceAdjustments',
19
+ components: {
20
+ XFormTable: () => import('@vue2-client/base-client/components/common/XFormTable/XFormTable.vue')
21
+ },
22
+ data() {
23
+ return {
24
+ // 查询配置名称
25
+ queryParamsName: 'PriceAdjustmentsCRUD',
26
+ // 查询表单固定值
27
+ fixedQueryForm: {p_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>
@@ -67,6 +67,7 @@ export default {
67
67
  this.$refs['bill-print'].print({
68
68
  id: record.uc_id,
69
69
  billUrl: billUrl,
70
+ billType: record.uc_type,
70
71
  operator: this.currUser.name,
71
72
  billStyle: '普通票据'
72
73
  })
@@ -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: 'UserException',
19
+ components: {
20
+ XFormTable: () => import('@vue2-client/base-client/components/common/XFormTable/XFormTable.vue')
21
+ },
22
+ data() {
23
+ return {
24
+ // 查询配置名称
25
+ queryParamsName: 'UserException360CRUD',
26
+ // 查询表单固定值
27
+ fixedQueryForm: {e_f_user_id: this.currUserInfo.f_user_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>
@@ -32,6 +32,8 @@ import MeterParamRecordQuery from '@vue2-client/pages/userInfoDetailManage/Meter
32
32
  import OtherChargeRecordQuery from '@vue2-client/pages/userInfoDetailManage/OtherChargeRecordQuery'
33
33
  import TransferRecordQuery from '@vue2-client/pages/userInfoDetailManage/TransferRecordQuery'
34
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'
35
37
 
36
38
  export default {
37
39
  name: 'UserInfoDetailQueryTabs',
@@ -52,6 +54,8 @@ export default {
52
54
  WatchCollectionRecordQuery,
53
55
  TransferRecordQuery,
54
56
  UserHandRecordQuery,
57
+ UserException,
58
+ PriceAdjustments,
55
59
  },
56
60
  props: {
57
61
  userInfo: {
@@ -84,7 +88,7 @@ export default {
84
88
  { key: '7', label: '换表查询', permission: '换表查询', component: 'ChangeMeterRecordQuery' },
85
89
  { key: '8', label: '其他收费', permission: '其他收费', component: 'OtherChargeRecordQuery' },
86
90
  { key: '9', label: '过户查询', permission: '过户查询', component: 'TransferRecordQuery' },
87
- { key: '10', label: '档案变更记录', permission: '变更记录', component: 'InfoChangeRecordQuery' },
91
+ { key: '10', label: '档案变更记录', permission: '变更记录', component: 'UserException' },
88
92
  {
89
93
  key: '11',
90
94
  label: '指令查看',
@@ -100,6 +104,8 @@ export default {
100
104
  condition: () => this.userInfo?.f_meter_type === '物联网表'
101
105
  },
102
106
  { key: '13', label: '流量计参数查看', permission: '流量计参数查看', component: 'MeterParamRecordQuery' },
107
+ { key: '14', label: '异常报警', permission: '异常报警', component: 'MeterParamRecordQuery' },
108
+ { key: '15', label: '价格调整', permission: '价格调整', component: 'PriceAdjustments' },
103
109
  ],
104
110
  }
105
111
  },