vue2-client 1.16.24 → 1.16.26

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.
Files changed (25) hide show
  1. package/package.json +112 -112
  2. package/src/assets/img/paymentMethod/icon1.png +0 -0
  3. package/src/assets/img/paymentMethod/icon2.png +0 -0
  4. package/src/assets/img/paymentMethod/icon3.png +0 -0
  5. package/src/assets/img/paymentMethod/icon4.png +0 -0
  6. package/src/assets/img/paymentMethod/icon5.png +0 -0
  7. package/src/assets/img/paymentMethod/icon6.png +0 -0
  8. package/src/base-client/components/common/HIS/HAddNativeForm/HAddNativeForm.vue +478 -478
  9. package/src/base-client/components/common/HIS/HAddNativeForm/index.js +3 -3
  10. package/src/base-client/components/common/HIS/HButtons/HButtons.vue +365 -365
  11. package/src/base-client/components/common/HIS/HForm/HForm.vue +133 -0
  12. package/src/base-client/components/common/HIS/HForm/index.js +3 -0
  13. package/src/base-client/components/common/HIS/HFormTable/HFormTable.vue +219 -219
  14. package/src/base-client/components/common/HIS/HTab/HTab.vue +293 -293
  15. package/src/base-client/components/common/HIS/demo.vue +54 -54
  16. package/src/base-client/components/common/XReport/XReportHospitalizationDemo.vue +45 -0
  17. package/src/base-client/components/common/XReportGrid/XReportTrGroup.vue +816 -813
  18. package/src/base-client/components/his/XCharge/XCharge.vue +610 -610
  19. package/src/base-client/components/his/XCharge/testConfig.js +149 -0
  20. package/src/base-client/components/his/XSidebar/XSidebar.vue +283 -283
  21. package/src/base-client/components/his/XSimpleTable/XSimpleTable.vue +119 -119
  22. package/src/base-client/components/his/XTimeSelect/XTimeSelect.vue +200 -200
  23. package/src/base-client/components/his/threeTestOrders/threeTestOrders.vue +482 -482
  24. package/src/router/async/router.map.js +131 -129
  25. package/src/services/api/common.js +1 -0
@@ -1,119 +1,119 @@
1
- <template>
2
- <div class="table-container" :style="{ height: tableHeight }">
3
- <a-table
4
- :columns="processedColumns"
5
- :dataSource="tableData"
6
- :pagination="false"
7
- :bordered="false"
8
- :rowKey="rowKey"
9
- :scroll="{ y: scrollY }"
10
- />
11
- </div>
12
- </template>
13
-
14
- <script>
15
- import { getConfigByName, runLogic } from '@vue2-client/services/api/common'
16
-
17
- export default {
18
- props: {
19
- queryParamsName: String,
20
- rowKey: {
21
- type: String,
22
- default: 'id'
23
- },
24
- parameter: {
25
- type: Object,
26
- default: () => ({})
27
- }
28
- },
29
- data () {
30
- return {
31
- columns: [],
32
- tableData: [],
33
- tableHeight: 'auto', // 默认高度
34
- scrollY: undefined
35
- }
36
- },
37
- watch: {
38
- queryParamsName: {
39
- immediate: true,
40
- handler (val) {
41
- val && this.init(val, this.parameter)
42
- }
43
- }
44
- },
45
- computed: {
46
- processedColumns () {
47
- return this.columns.map(column => ({
48
- ...column,
49
- customHeaderCell: column.headerStyle
50
- ? () => ({ style: column.headerStyle })
51
- : undefined
52
- }))
53
- }
54
- },
55
- methods: {
56
- init (config, parameterData) {
57
- getConfigByName(config, 'af-his', res => {
58
- // 从配置中获取表格高度
59
- this.tableHeight = res.tableHeight || '400px' // 默认400px
60
- this.columns = res.columns || []
61
-
62
- runLogic(res.logicName, parameterData, 'af-his').then(result => {
63
- this.tableData = result.map((item, index) => ({
64
- ...item,
65
- key: item[this.rowKey] || `row_${index}`
66
- }))
67
-
68
- this.$nextTick(() => {
69
- this.scrollY = this.tableHeight
70
- })
71
- })
72
- })
73
- }
74
- }
75
- }
76
- </script>
77
-
78
- <style scoped>
79
- /* 表格容器 */
80
- .table-container {
81
- overflow: hidden;
82
- display: flex;
83
- flex-direction: column;
84
- }
85
-
86
- /* 基础无边框样式 */
87
- /deep/ .ant-table {
88
- border: none !important;
89
- flex: 1;
90
- display: flex;
91
- flex-direction: column;
92
- }
93
-
94
- /deep/ .ant-table-content {
95
- flex: 1;
96
- display: flex;
97
- flex-direction: column;
98
- }
99
-
100
- /deep/ .ant-table-body {
101
- flex: 1;
102
- overflow-y: auto !important;
103
- }
104
-
105
- /deep/ .ant-table-tbody > tr > td {
106
- border-bottom: none !important;
107
- padding: 6px !important;
108
- }
109
-
110
- /deep/ .ant-table-thead > tr > th {
111
- border-bottom: none !important;
112
- background: none !important;
113
- padding: 8px 6px !important;
114
- position: sticky;
115
- top: 0;
116
- z-index: 1;
117
- background-color: white !important;
118
- }
119
- </style>
1
+ <template>
2
+ <div class="table-container" :style="{ height: tableHeight }">
3
+ <a-table
4
+ :columns="processedColumns"
5
+ :dataSource="tableData"
6
+ :pagination="false"
7
+ :bordered="false"
8
+ :rowKey="rowKey"
9
+ :scroll="{ y: scrollY }"
10
+ />
11
+ </div>
12
+ </template>
13
+
14
+ <script>
15
+ import { getConfigByName, runLogic } from '@vue2-client/services/api/common'
16
+
17
+ export default {
18
+ props: {
19
+ queryParamsName: String,
20
+ rowKey: {
21
+ type: String,
22
+ default: 'id'
23
+ },
24
+ parameter: {
25
+ type: Object,
26
+ default: () => ({})
27
+ }
28
+ },
29
+ data () {
30
+ return {
31
+ columns: [],
32
+ tableData: [],
33
+ tableHeight: 'auto', // 默认高度
34
+ scrollY: undefined
35
+ }
36
+ },
37
+ watch: {
38
+ queryParamsName: {
39
+ immediate: true,
40
+ handler (val) {
41
+ val && this.init(val, this.parameter)
42
+ }
43
+ }
44
+ },
45
+ computed: {
46
+ processedColumns () {
47
+ return this.columns.map(column => ({
48
+ ...column,
49
+ customHeaderCell: column.headerStyle
50
+ ? () => ({ style: column.headerStyle })
51
+ : undefined
52
+ }))
53
+ }
54
+ },
55
+ methods: {
56
+ init (config, parameterData) {
57
+ getConfigByName(config, 'af-his', res => {
58
+ // 从配置中获取表格高度
59
+ this.tableHeight = res.tableHeight || '400px' // 默认400px
60
+ this.columns = res.columns || []
61
+
62
+ runLogic(res.logicName, parameterData, 'af-his').then(result => {
63
+ this.tableData = result.map((item, index) => ({
64
+ ...item,
65
+ key: item[this.rowKey] || `row_${index}`
66
+ }))
67
+
68
+ this.$nextTick(() => {
69
+ this.scrollY = this.tableHeight
70
+ })
71
+ })
72
+ })
73
+ }
74
+ }
75
+ }
76
+ </script>
77
+
78
+ <style scoped>
79
+ /* 表格容器 */
80
+ .table-container {
81
+ overflow: hidden;
82
+ display: flex;
83
+ flex-direction: column;
84
+ }
85
+
86
+ /* 基础无边框样式 */
87
+ /deep/ .ant-table {
88
+ border: none !important;
89
+ flex: 1;
90
+ display: flex;
91
+ flex-direction: column;
92
+ }
93
+
94
+ /deep/ .ant-table-content {
95
+ flex: 1;
96
+ display: flex;
97
+ flex-direction: column;
98
+ }
99
+
100
+ /deep/ .ant-table-body {
101
+ flex: 1;
102
+ overflow-y: auto !important;
103
+ }
104
+
105
+ /deep/ .ant-table-tbody > tr > td {
106
+ border-bottom: none !important;
107
+ padding: 6px !important;
108
+ }
109
+
110
+ /deep/ .ant-table-thead > tr > th {
111
+ border-bottom: none !important;
112
+ background: none !important;
113
+ padding: 8px 6px !important;
114
+ position: sticky;
115
+ top: 0;
116
+ z-index: 1;
117
+ background-color: white !important;
118
+ }
119
+ </style>
@@ -1,200 +1,200 @@
1
- <template>
2
- <div class="x-time-select">
3
- <div class="time-select-container">
4
- <div v-if="type === 'range'" class="picker-wrapper">
5
- <a-range-picker
6
- :value="dateRange"
7
- :placeholder="['开始日期', '结束日期']"
8
- separator="至"
9
- :disabled="disabled"
10
- :allowClear="allowClear"
11
- :format="format"
12
- :showTime="showTime"
13
- @change="handleDateChange"
14
- />
15
- </div>
16
- <div v-if="type === 'date'" class="picker-wrapper">
17
- <a-date-picker
18
- :value="dateRange[0]"
19
- :format="format"
20
- :disabled="disabled"
21
- :allowClear="allowClear"
22
- :showTime="showTime"
23
- @change="handleDateChange"
24
- />
25
- </div>
26
-
27
- </div>
28
- </div>
29
- </template>
30
-
31
- <script>
32
- import moment from 'moment'
33
- import { getConfigByName } from '@vue2-client/services/api/common'
34
-
35
- export default {
36
- name: 'XTimeSelect',
37
- inject: ['getComponentByName'],
38
- props: {
39
- queryParamsName: {
40
- type: String,
41
- default: null
42
- },
43
- value: {
44
- type: Array,
45
- default: () => []
46
- },
47
- defaultTime: {
48
- type: Array,
49
- default: () => []
50
- },
51
- disabled: {
52
- type: Boolean,
53
- default: false
54
- },
55
- allowClear: {
56
- type: Boolean,
57
- default: true
58
- },
59
- format: {
60
- type: String,
61
- default: 'YYYY-MM-DD'
62
- }
63
- },
64
- data () {
65
- return {
66
- dateRange: [],
67
- type: 'range'
68
- }
69
- },
70
- computed: {
71
- showTime () {
72
- // 根据format判断是否需要显示时间选择器
73
- return this.format && (this.format.includes('HH:mm') || this.format.includes('hh:mm'))
74
- }
75
- },
76
- watch: {
77
- value: {
78
- handler (newVal) {
79
- this.convertValueToMoment(newVal)
80
- },
81
- immediate: true,
82
- deep: true
83
- },
84
- defaultTime: {
85
- handler (newVal) {
86
- // 只有在没有传入value时才使用defaultTime
87
- if (!this.value || this.value.length === 0) {
88
- this.convertValueToMoment(newVal)
89
- }
90
- },
91
- immediate: true,
92
- deep: true
93
- },
94
- type () {
95
- this.convertValueToMoment(this.value)
96
- }
97
-
98
- },
99
- created () {
100
- this.getData(this.queryParamsName)
101
- },
102
- methods: {
103
- convertValueToMoment (value) {
104
- // 如果没有传入value或value为空,则使用defaultTime
105
- const timeToUse = (value && value.length > 0) ? value : this.defaultTime
106
- if (this.type === 'range' && timeToUse?.length === 2) {
107
- this.dateRange = [
108
- timeToUse[0] ? moment(timeToUse[0]) : null,
109
- timeToUse[1] ? moment(timeToUse[1]) : null
110
- ]
111
- } else if (this.type === 'date' && timeToUse?.length === 1) {
112
- this.dateRange = [timeToUse[0] ? moment(timeToUse[0]) : null]
113
- } else {
114
- this.dateRange = []
115
- }
116
- },
117
- handleDateChange (dates, dateStrings) {
118
- if (this.type === 'date') {
119
- // 单个日期选择器,dates是一个moment对象或null
120
- this.dateRange = [dates]
121
- } else {
122
- // 范围选择器,dates是一个数组
123
- this.dateRange = dates
124
- }
125
- this.$emit('change', dateStrings)
126
- },
127
- async getData (data) {
128
- if (data) {
129
- getConfigByName(data, 'af-his', res => {
130
- if (['date', 'range'].includes(res.type)) {
131
- this.type = res.type
132
- }
133
- // 处理format配置
134
- if (res.format !== undefined) {
135
- this.format = res.format
136
- }
137
- // 处理defaultTime配置
138
- if (res.defaultTime !== undefined) {
139
- if (res.defaultTime === 'now') {
140
- // 如果配置为'now',设置当前时间
141
- const now = moment().format(this.format)
142
- if (this.type === 'range') {
143
- this.defaultTime = [now, now]
144
- } else if (this.type === 'date') {
145
- this.defaultTime = [now]
146
- }
147
- } else if (Array.isArray(res.defaultTime)) {
148
- // 如果配置为数组,直接使用
149
- this.defaultTime = res.defaultTime
150
- }
151
- }
152
- this.convertValueToMoment(this.value)
153
- })
154
- }
155
- }
156
- }
157
- }
158
- </script>
159
-
160
- <style scoped>
161
- .x-time-select {
162
- position: relative;
163
- width: 100%;
164
- box-sizing: border-box;
165
- display: block;
166
- }
167
-
168
- .time-select-container {
169
- display: flex;
170
- align-items: center;
171
- }
172
-
173
- .picker-wrapper {
174
- flex: 1;
175
- }
176
-
177
- .x-time-select :deep(.ant-picker-range),
178
- .x-time-select :deep(.ant-picker) {
179
- width: 100%;
180
- height: 30px;
181
- border-radius: 7px;
182
- background: #FFFFFF;
183
- border: 1px solid #E5E9F0;
184
- }
185
- .x-time-select :deep(.ant-calendar-picker) {
186
- width: 100%;
187
- display: block;
188
- }
189
- .x-time-select :deep(.ant-calendar-picker-input) {
190
- width: 100%;
191
- height: 30px;
192
- border-radius: 7px;
193
- background: #FFFFFF;
194
- border: 1px solid #E5E9F0;
195
- }
196
-
197
- .x-time-select :deep(.ant-input) {
198
- width: 100%;
199
- }
200
- </style>
1
+ <template>
2
+ <div class="x-time-select">
3
+ <div class="time-select-container">
4
+ <div v-if="type === 'range'" class="picker-wrapper">
5
+ <a-range-picker
6
+ :value="dateRange"
7
+ :placeholder="['开始日期', '结束日期']"
8
+ separator="至"
9
+ :disabled="disabled"
10
+ :allowClear="allowClear"
11
+ :format="format"
12
+ :showTime="showTime"
13
+ @change="handleDateChange"
14
+ />
15
+ </div>
16
+ <div v-if="type === 'date'" class="picker-wrapper">
17
+ <a-date-picker
18
+ :value="dateRange[0]"
19
+ :format="format"
20
+ :disabled="disabled"
21
+ :allowClear="allowClear"
22
+ :showTime="showTime"
23
+ @change="handleDateChange"
24
+ />
25
+ </div>
26
+
27
+ </div>
28
+ </div>
29
+ </template>
30
+
31
+ <script>
32
+ import moment from 'moment'
33
+ import { getConfigByName } from '@vue2-client/services/api/common'
34
+
35
+ export default {
36
+ name: 'XTimeSelect',
37
+ inject: ['getComponentByName'],
38
+ props: {
39
+ queryParamsName: {
40
+ type: String,
41
+ default: null
42
+ },
43
+ value: {
44
+ type: Array,
45
+ default: () => []
46
+ },
47
+ defaultTime: {
48
+ type: Array,
49
+ default: () => []
50
+ },
51
+ disabled: {
52
+ type: Boolean,
53
+ default: false
54
+ },
55
+ allowClear: {
56
+ type: Boolean,
57
+ default: true
58
+ },
59
+ format: {
60
+ type: String,
61
+ default: 'YYYY-MM-DD'
62
+ }
63
+ },
64
+ data () {
65
+ return {
66
+ dateRange: [],
67
+ type: 'range'
68
+ }
69
+ },
70
+ computed: {
71
+ showTime () {
72
+ // 根据format判断是否需要显示时间选择器
73
+ return this.format && (this.format.includes('HH:mm') || this.format.includes('hh:mm'))
74
+ }
75
+ },
76
+ watch: {
77
+ value: {
78
+ handler (newVal) {
79
+ this.convertValueToMoment(newVal)
80
+ },
81
+ immediate: true,
82
+ deep: true
83
+ },
84
+ defaultTime: {
85
+ handler (newVal) {
86
+ // 只有在没有传入value时才使用defaultTime
87
+ if (!this.value || this.value.length === 0) {
88
+ this.convertValueToMoment(newVal)
89
+ }
90
+ },
91
+ immediate: true,
92
+ deep: true
93
+ },
94
+ type () {
95
+ this.convertValueToMoment(this.value)
96
+ }
97
+
98
+ },
99
+ created () {
100
+ this.getData(this.queryParamsName)
101
+ },
102
+ methods: {
103
+ convertValueToMoment (value) {
104
+ // 如果没有传入value或value为空,则使用defaultTime
105
+ const timeToUse = (value && value.length > 0) ? value : this.defaultTime
106
+ if (this.type === 'range' && timeToUse?.length === 2) {
107
+ this.dateRange = [
108
+ timeToUse[0] ? moment(timeToUse[0]) : null,
109
+ timeToUse[1] ? moment(timeToUse[1]) : null
110
+ ]
111
+ } else if (this.type === 'date' && timeToUse?.length === 1) {
112
+ this.dateRange = [timeToUse[0] ? moment(timeToUse[0]) : null]
113
+ } else {
114
+ this.dateRange = []
115
+ }
116
+ },
117
+ handleDateChange (dates, dateStrings) {
118
+ if (this.type === 'date') {
119
+ // 单个日期选择器,dates是一个moment对象或null
120
+ this.dateRange = [dates]
121
+ } else {
122
+ // 范围选择器,dates是一个数组
123
+ this.dateRange = dates
124
+ }
125
+ this.$emit('change', dateStrings)
126
+ },
127
+ async getData (data) {
128
+ if (data) {
129
+ getConfigByName(data, 'af-his', res => {
130
+ if (['date', 'range'].includes(res.type)) {
131
+ this.type = res.type
132
+ }
133
+ // 处理format配置
134
+ if (res.format !== undefined) {
135
+ this.format = res.format
136
+ }
137
+ // 处理defaultTime配置
138
+ if (res.defaultTime !== undefined) {
139
+ if (res.defaultTime === 'now') {
140
+ // 如果配置为'now',设置当前时间
141
+ const now = moment().format(this.format)
142
+ if (this.type === 'range') {
143
+ this.defaultTime = [now, now]
144
+ } else if (this.type === 'date') {
145
+ this.defaultTime = [now]
146
+ }
147
+ } else if (Array.isArray(res.defaultTime)) {
148
+ // 如果配置为数组,直接使用
149
+ this.defaultTime = res.defaultTime
150
+ }
151
+ }
152
+ this.convertValueToMoment(this.value)
153
+ })
154
+ }
155
+ }
156
+ }
157
+ }
158
+ </script>
159
+
160
+ <style scoped>
161
+ .x-time-select {
162
+ position: relative;
163
+ width: 100%;
164
+ box-sizing: border-box;
165
+ display: block;
166
+ }
167
+
168
+ .time-select-container {
169
+ display: flex;
170
+ align-items: center;
171
+ }
172
+
173
+ .picker-wrapper {
174
+ flex: 1;
175
+ }
176
+
177
+ .x-time-select :deep(.ant-picker-range),
178
+ .x-time-select :deep(.ant-picker) {
179
+ width: 100%;
180
+ height: 30px;
181
+ border-radius: 7px;
182
+ background: #FFFFFF;
183
+ border: 1px solid #E5E9F0;
184
+ }
185
+ .x-time-select :deep(.ant-calendar-picker) {
186
+ width: 100%;
187
+ display: block;
188
+ }
189
+ .x-time-select :deep(.ant-calendar-picker-input) {
190
+ width: 100%;
191
+ height: 30px;
192
+ border-radius: 7px;
193
+ background: #FFFFFF;
194
+ border: 1px solid #E5E9F0;
195
+ }
196
+
197
+ .x-time-select :deep(.ant-input) {
198
+ width: 100%;
199
+ }
200
+ </style>