vue2-client 1.12.15 → 1.12.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.12.15",
3
+ "version": "1.12.16",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "serve": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve --no-eslint",
@@ -1,8 +1,8 @@
1
1
  <template>
2
- <div class="card-box">
2
+ <div class="card-box" v-if="!configurationParameters.drawerMode">
3
3
  <div
4
4
  class="section-tab"
5
- v-bind:innerText="configurationParameters"
5
+ :innerText="configurationParameters"
6
6
  contenteditable="true"
7
7
  :style="{ backgroundColor: configurationParameters.tabBackgroundColor }">
8
8
  <a-icon :type="configurationParameters.icon" style="margin-left: 2%;font-size: medium;"/>
@@ -32,6 +32,47 @@
32
32
  </div>
33
33
  </div>
34
34
  </div>
35
+ <div v-else class="card-box">
36
+ <div
37
+ class="section-tab"
38
+ :innerText="configurationParameters"
39
+ contenteditable="true"
40
+ :style="{ backgroundColor: configurationParameters.tabBackgroundColor }">
41
+ <a-icon :type="configurationParameters.icon" style="margin-left: 2%;font-size: medium;"/>
42
+ {{ configurationParameters.tab }}
43
+ </div>
44
+ <a-collapse accordion class="accordion" :activeKey="activeKey" @change="switchDrawers">
45
+ <a-collapse-panel
46
+ v-for="(time, rowId) in times"
47
+ :header="time"
48
+ :style="{backgroundColor:rowId === rowIndex ? configurationParameters.tabBackgroundColor : '#fff'}"
49
+ :key="rowId" >
50
+ <div class="patient-overview">
51
+ <div
52
+ class="overview-section"
53
+ v-for="(item,index) in data"
54
+ :key="index"
55
+ :style="{borderBottom: index === data.length - 1 ? 'none' : '1px solid #ddd'}">
56
+ <div class="section-header" :style="{ backgroundColor: item.backgroundColor, color: item.fontColor }">
57
+ {{ item.titleName }}({{ item.messageNumber }})
58
+ </div>
59
+ <div class="patient-list-container">
60
+ <div class="patient-list">
61
+ <div
62
+ v-for="(patient, i) in item.showData"
63
+ :key="i"
64
+ class="patient-item"
65
+ :title="`${patient.room_number} - ${patient.patient_name}`">
66
+ <span class="card_data" :style="{ color: item.fontColor }">{{ patient.room_number }}</span>
67
+ <span class="card_data" >{{ patient.patient_name }}</span>
68
+ </div>
69
+ </div>
70
+ </div>
71
+ </div>
72
+ </div>
73
+ </a-collapse-panel>
74
+ </a-collapse>
75
+ </div>
35
76
  </template>
36
77
 
37
78
  <script>
@@ -39,22 +80,29 @@
39
80
  import { getConfigByName, runLogic } from '@vue2-client/services/api/common'
40
81
 
41
82
  export default {
42
- name: 'XCardSet',
83
+ name: 'CardComponent',
43
84
  data () {
44
85
  return {
45
86
  tab: 'container',
46
87
  data: [
47
88
  { room_number: '', patient_name: '' }
48
89
  ],
90
+ activeKey: '0',
91
+ times: [],
92
+ DateTimes: [],
93
+ rowIndex: 0,
49
94
  /* 配置参数(titleName:行标题名,dataSource:数据源,parameter:参数,fontColor:文字颜色,backgroundColor:背景颜色,
50
- pageSize:分页数量,tabBackgroundColor:标签背景颜色,isPrimarySource:是否取mainDataSource中的元素) */
95
+ pageSize:分页数量,tabBackgroundColor:标签背景颜色,isPrimarySource:是否取mainDataSource中的元素) drawerMode:是否选用抽屉模式
96
+ times:如果选用抽屉 */
51
97
  configurationParameters: {
98
+ drawerMode: false,
52
99
  tab: '',
53
100
  icon: '',
54
101
  tabBackgroundColor: '',
55
102
  mainDataSource: '',
56
103
  serverName: '',
57
104
  parameter: { pageSize: 8 },
105
+ times: 4,
58
106
  configurationData: [
59
107
  {
60
108
  titleName: '',
@@ -80,28 +128,79 @@ export default {
80
128
  async getData (data) {
81
129
  this.data = []
82
130
  getConfigByName(data, 'af-his', res => {
83
- this.configurationParameters = res
84
- console.log(this.configurationParameters)
85
- runLogic(res.mainDataSource, res.parameter, 'af-his').then(result => {
86
- for (let i = 0; i < res.configurationData.length; i++) {
87
- const ConfigureDisplayData = {
88
- titleName: res.configurationData[i].titleName,
89
- fontColor: res.configurationData[i].fontColor,
90
- backgroundColor: res.configurationData[i].backgroundColor,
91
- messageNumber: result[res.configurationData[i].dataSource + 'Total'][0].total,
92
- showData: []
93
- }
94
- this.data.push(ConfigureDisplayData)
95
- this.data[i].showData = result[res.configurationData[i].dataSource]
131
+ if (!res.drawerMode) {
132
+ this.renderDeck(res)
133
+ } else { this.renderData(res) }
134
+ })
135
+ },
136
+ // 渲染卡片组数据
137
+ async renderDeck (res, times) {
138
+ this.configurationParameters = await res
139
+ if (res.drawerMode) {
140
+ res.parameter.times = await times
141
+ }
142
+ runLogic(res.mainDataSource, res.parameter).then(result => {
143
+ for (let i = 0; i < res.configurationData.length; i++) {
144
+ const ConfigureDisplayData = {
145
+ titleName: res.configurationData[i].titleName,
146
+ fontColor: res.configurationData[i].fontColor,
147
+ backgroundColor: res.configurationData[i].backgroundColor,
148
+ messageNumber: result[res.configurationData[i].dataSource + 'Total'][0].total,
149
+ showData: []
96
150
  }
97
- })
151
+ this.data.push(ConfigureDisplayData)
152
+ this.data[i].showData = result[res.configurationData[i].dataSource]
153
+ }
98
154
  })
155
+ },
156
+ formatTime (date) {
157
+ const year = date.getFullYear()
158
+ const month = String(date.getMonth() + 1).padStart(2, '0')
159
+ const day = String(date.getDate()).padStart(2, '0')
160
+ const hours = String(date.getHours()).padStart(2, '0')
161
+ return `${year}-${month}-${day} ${hours}:00`
162
+ },
163
+ getTimes (n) {
164
+ const times = []
165
+ const now = new Date()
166
+ for (let i = 0; i <= n; i++) {
167
+ const time = new Date(now.getTime() + i * 60 * 60 * 1000)
168
+ times.push(this.formatTime(time))
169
+ }
170
+ return times
171
+ },
172
+ formatTimeToHHMM (timeString) {
173
+ const date = new Date(timeString)
174
+ const hours = String(date.getHours()).padStart(2, '0')
175
+ const minutes = String(date.getMinutes()).padStart(2, '0')
176
+ return `${hours}:${minutes}`
177
+ },
178
+ // 获取数据并渲染数据
179
+ renderData (data) {
180
+ this.times = []
181
+ this.DateTimes = []
182
+ const time = this.getTimes(data.times)
183
+ for (let i = 0; i < data.times; i++) {
184
+ const startTime = this.formatTimeToHHMM(time[i])
185
+ const endTime = this.formatTimeToHHMM(time[i + 1])
186
+ this.times.push(`${startTime} ~ ${endTime}`)
187
+ this.DateTimes.push(`${time[i]} and ${time[i + 1]}`)
188
+ }
189
+ this.renderDeck(data, `${time[0]} and ${time[1]}`)
190
+ },
191
+ // 切换抽屉
192
+ switchDrawers (activeKey) {
193
+ if (activeKey !== undefined) {
194
+ console.log('Active Header:', this.DateTimes[activeKey])
195
+ this.data = []
196
+ this.renderDeck(this.configurationParameters, this.DateTimes[activeKey])
197
+ this.rowIndex = activeKey
198
+ }
99
199
  }
100
200
  },
101
201
  watch: {
102
202
  queryParamsName: {
103
203
  handler (newValue) {
104
- console.log(newValue)
105
204
  this.getData(newValue)
106
205
  },
107
206
  deep: true
@@ -111,6 +210,9 @@ export default {
111
210
  </script>
112
211
 
113
212
  <style scoped>
213
+ .accordion{
214
+ width: 100%;
215
+ }
114
216
  .patient-overview {
115
217
  width: 100%;
116
218
  padding: 0.5%;
@@ -136,7 +238,7 @@ export default {
136
238
  width: 100%;
137
239
  padding-left: 1%;
138
240
  }
139
- .overview-section {
241
+ .overview-section{
140
242
  display: flex;
141
243
  flex-wrap: nowrap;
142
244
  align-items: center;
@@ -188,7 +290,7 @@ export default {
188
290
  flex-direction: row;
189
291
  height: 100%;
190
292
  }
191
- .card_data {
293
+ .card_data{
192
294
  display: inline-block;
193
295
  max-width: 5ch; /* 最多显示 3 个字符 */
194
296
  white-space: nowrap;
@@ -1,145 +1,145 @@
1
- <template>
2
- <div>
3
- <a-collapse
4
- :activeKey="activeKey"
5
- @change="handleChange"
6
- >
7
- <a-collapse-panel
8
- v-for="(panel, panelIndex) in config.showData"
9
- :key="panelIndex.toString()"
10
- :show-arrow="false"
11
- >
12
- <template #header>
13
- <div class="header-content">
14
- <span
15
- class="header-text"
16
- :style="config.titleStyle"
17
- >
18
- {{ panel.title }}
19
- </span>
20
- <span
21
- v-for="(item, headerIndex) in panel.title2 || []"
22
- :key="headerIndex"
23
- class="info-item"
24
- :style="config.title2Style"
25
- >
26
- <span>{{ item.key }}:</span>
27
- <span>{{ item.value }}</span>
28
- </span>
29
- <span
30
- class="time-item"
31
- :style="config.title3Style"
32
- >
33
- {{ panel.title3 }}
34
- </span>
35
- </div>
36
- </template>
37
- <!-- 根据类型显示不同内容 -->
38
- <template v-if="panel.type === 'picture'">
39
- <img :src="panel.configName" alt="图片" style="width: 100%; max-width: 500px;"/>
40
- </template>
41
- <template v-else-if="panel.type === 'cover'">
42
- <x-report
43
- :use-oss-for-img="false"
44
- :config-name="panel.configName"
45
- server-name="af-his"
46
- :show-img-in-cell="true"
47
- :display-only="true"
48
- :edit-mode="false"
49
- :show-save-button="false"
50
- :no-padding="true"
51
- :dont-format="true">
52
- </x-report>
53
- </template>
54
- </a-collapse-panel>
55
- </a-collapse>
56
- </div>
57
- </template>
58
-
59
- <script>
60
- import XReport from '@vue2-client/base-client/components/common/XReportGrid'
61
- import { getConfigByName, runLogic } from '@vue2-client/services/api/common'
62
-
63
- export default {
64
- name: 'XCollapse',
65
- components: {
66
- XReport
67
- },
68
- data () {
69
- return {
70
- activeKey: [],
71
- config: {}
72
- }
73
- },
74
- props: {
75
- // json名
76
- queryParamsName: {
77
- type: Object,
78
- default: 'zsftestConfig'
79
- },
80
- },
81
- created () {
82
- this.getData(this.queryParamsName)
83
- },
84
- methods: {
85
- async getData (config) {
86
- getConfigByName(config, 'af-his', res => {
87
- this.config = res
88
- runLogic(res.mainLogic, {}, 'af-his').then(result => {
89
- console.log(result)
90
- this.config.showData = result
91
- this.activeKey = this.config.showData.map((_, panelIndex) => panelIndex.toString())
92
- })
93
- })
94
- },
95
- handleChange (keys) {
96
- this.activeKey = keys
97
- },
98
- },
99
- watch: {
100
- queryParamsName: {
101
- handler (newValue) {
102
- console.log(newValue)
103
- this.getData(newValue)
104
- },
105
- deep: true
106
- }
107
- }
108
- }
109
- </script>
110
-
111
- <style scoped>
112
- .header-content {
113
- display: flex;
114
- align-items: center;
115
- gap: 24px;
116
- }
117
-
118
- .header-text {
119
- margin-right: 16px;
120
- font-size: 16px;
121
- font-weight: 800; /* 默认加粗 */
122
- }
123
-
124
- .info-item {
125
- display: inline-flex;
126
- align-items: center;
127
- gap: 4px;
128
- font-size: 12px;
129
- color: #888888;
130
- }
131
-
132
- .time-item {
133
- margin-left: auto;
134
- text-align: right;
135
- }
136
-
137
- /* 覆盖 ant-design-vue 的默认样式 */
138
- :deep(.ant-collapse-header) {
139
- align-items: center !important;
140
- }
141
-
142
- :deep(.ant-collapse-header-text) {
143
- flex: 1;
144
- }
145
- </style>
1
+ <template>
2
+ <div>
3
+ <a-collapse
4
+ :activeKey="activeKey"
5
+ @change="handleChange"
6
+ >
7
+ <a-collapse-panel
8
+ v-for="(panel, panelIndex) in config.showData"
9
+ :key="panelIndex.toString()"
10
+ :show-arrow="false"
11
+ >
12
+ <template #header>
13
+ <div class="header-content">
14
+ <span
15
+ class="header-text"
16
+ :style="config.titleStyle"
17
+ >
18
+ {{ panel.title }}
19
+ </span>
20
+ <span
21
+ v-for="(item, headerIndex) in panel.title2 || []"
22
+ :key="headerIndex"
23
+ class="info-item"
24
+ :style="config.title2Style"
25
+ >
26
+ <span>{{ item.key }}:</span>
27
+ <span>{{ item.value }}</span>
28
+ </span>
29
+ <span
30
+ class="time-item"
31
+ :style="config.title3Style"
32
+ >
33
+ {{ panel.title3 }}
34
+ </span>
35
+ </div>
36
+ </template>
37
+ <!-- 根据类型显示不同内容 -->
38
+ <template v-if="panel.type === 'picture'">
39
+ <img :src="panel.configName" alt="图片" style="width: 100%; max-width: 500px;"/>
40
+ </template>
41
+ <template v-else-if="panel.type === 'cover'">
42
+ <x-report
43
+ :use-oss-for-img="false"
44
+ :config-name="panel.configName"
45
+ server-name="af-his"
46
+ :show-img-in-cell="true"
47
+ :display-only="true"
48
+ :edit-mode="false"
49
+ :show-save-button="false"
50
+ :no-padding="true"
51
+ :dont-format="true">
52
+ </x-report>
53
+ </template>
54
+ </a-collapse-panel>
55
+ </a-collapse>
56
+ </div>
57
+ </template>
58
+
59
+ <script>
60
+ import XReport from '@vue2-client/base-client/components/common/XReportGrid'
61
+ import { getConfigByName, runLogic } from '@vue2-client/services/api/common'
62
+
63
+ export default {
64
+ name: 'XCollapse',
65
+ components: {
66
+ XReport
67
+ },
68
+ data () {
69
+ return {
70
+ activeKey: [],
71
+ config: {}
72
+ }
73
+ },
74
+ props: {
75
+ // json名
76
+ queryParamsName: {
77
+ type: Object,
78
+ default: 'zsftestConfig'
79
+ },
80
+ },
81
+ created () {
82
+ this.getData(this.queryParamsName)
83
+ },
84
+ methods: {
85
+ async getData (config) {
86
+ getConfigByName(config, 'af-his', res => {
87
+ this.config = res
88
+ runLogic(res.mainLogic, {}, 'af-his').then(result => {
89
+ console.log(result)
90
+ this.config.showData = result
91
+ this.activeKey = this.config.showData.map((_, panelIndex) => panelIndex.toString())
92
+ })
93
+ })
94
+ },
95
+ handleChange (keys) {
96
+ this.activeKey = keys
97
+ },
98
+ },
99
+ watch: {
100
+ queryParamsName: {
101
+ handler (newValue) {
102
+ console.log(newValue)
103
+ this.getData(newValue)
104
+ },
105
+ deep: true
106
+ }
107
+ }
108
+ }
109
+ </script>
110
+
111
+ <style scoped>
112
+ .header-content {
113
+ display: flex;
114
+ align-items: center;
115
+ gap: 24px;
116
+ }
117
+
118
+ .header-text {
119
+ margin-right: 16px;
120
+ font-size: 16px;
121
+ font-weight: 800; /* 默认加粗 */
122
+ }
123
+
124
+ .info-item {
125
+ display: inline-flex;
126
+ align-items: center;
127
+ gap: 4px;
128
+ font-size: 12px;
129
+ color: #888888;
130
+ }
131
+
132
+ .time-item {
133
+ margin-left: auto;
134
+ text-align: right;
135
+ }
136
+
137
+ /* 覆盖 ant-design-vue 的默认样式 */
138
+ :deep(.ant-collapse-header) {
139
+ align-items: center !important;
140
+ }
141
+
142
+ :deep(.ant-collapse-header-text) {
143
+ flex: 1;
144
+ }
145
+ </style>
@@ -0,0 +1,15 @@
1
+ <template>
2
+ <x-collapse query-params-name="zsftestConfig" />
3
+ </template>
4
+
5
+ <script>
6
+ import XCollapse from '@vue2-client/base-client/components/common/XCollapse/XCollapse.vue'
7
+ export default {
8
+ name: 'Demo',
9
+ components: { XCollapse }
10
+ }
11
+ </script>
12
+
13
+ <style scoped>
14
+
15
+ </style>