vue2-client 1.14.39 → 1.14.41

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,36 @@
1
+ <script>
2
+ export default {
3
+ props: {
4
+ weekDays: {
5
+ type: Array,
6
+ default: () => []
7
+ }
8
+ },
9
+ computed: {
10
+ columns () {
11
+ const baseColumns = [
12
+ { title: '序号', dataIndex: 'index', width: 60 },
13
+ { title: '科室', dataIndex: 'department', width: 120 },
14
+ { title: '医生', dataIndex: 'doctor', width: 100 },
15
+ { title: '上/下/晚', dataIndex: 'shiftType', width: 80 },
16
+ ]
17
+
18
+ // 增加防御判断,确保 weekDays 存在
19
+ const dayColumns = this.weekDays.length > 0
20
+ ? this.weekDays.map((day, dayIndex) => ({
21
+ title: `${day.label} ${day.date}`,
22
+ dataIndex: `shifts-${dayIndex}`, // 改为字符串形式
23
+ dayIndex: dayIndex,
24
+ width: 120,
25
+ }))
26
+ : []
27
+
28
+ const tailColumns = [
29
+ { title: '排班数', dataIndex: 'count', width: 80 }
30
+ ]
31
+
32
+ return [...baseColumns, ...dayColumns, ...tailColumns]
33
+ }
34
+ }
35
+ }
36
+ </script>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vue2-client",
3
- "version": "1.14.39",
3
+ "version": "1.14.41",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "serve": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve --no-eslint",
@@ -0,0 +1,91 @@
1
+ <template>
2
+ <div class="tree-container">
3
+ <div class="tree-list">
4
+ <tree-node
5
+ v-for="node in treeData"
6
+ :key="node.id"
7
+ :node="node"
8
+ @toggle="toggleNode"/>
9
+ </div>
10
+ </div>
11
+ </template>
12
+
13
+ <script>
14
+ import TreeNode from './TreeNode.vue'
15
+
16
+ export default {
17
+ name: 'TreeList',
18
+ components: {
19
+ TreeNode
20
+ },
21
+ data() {
22
+ return {
23
+ treeData: [
24
+ {
25
+ id: '1',
26
+ title: '体征',
27
+ expanded: false,
28
+ children: [
29
+ {
30
+ id: '1-1',
31
+ title: '一般情况'
32
+ },
33
+ {
34
+ id: '1-2',
35
+ title: '皮肤粘膜'
36
+ },
37
+ {
38
+ id: '1-3',
39
+ title: '头颈',
40
+ expanded: false,
41
+ children: [
42
+ {
43
+ id: '1-3-1',
44
+ title: '头部'
45
+ },
46
+ {
47
+ id: '1-3-2',
48
+ title: '颈部'
49
+ }
50
+ ]
51
+ }
52
+ ]
53
+ }
54
+ ]
55
+ }
56
+ },
57
+ methods: {
58
+ toggleNode(node) {
59
+ node.expanded = !node.expanded
60
+ }
61
+ }
62
+ }
63
+ </script>
64
+
65
+ <style scoped>
66
+ .tree-container {
67
+ width: 240px;
68
+ height: 400px;
69
+ border: 1px solid #e8e8e8;
70
+ overflow-y: auto;
71
+ padding: 8px;
72
+ }
73
+
74
+ /* 自定义滚动条样式 */
75
+ .tree-container::-webkit-scrollbar {
76
+ width: 6px;
77
+ }
78
+
79
+ .tree-container::-webkit-scrollbar-thumb {
80
+ background-color: #ccc;
81
+ border-radius: 3px;
82
+ }
83
+
84
+ .tree-container::-webkit-scrollbar-track {
85
+ background-color: #f5f5f5;
86
+ }
87
+
88
+ .tree-list {
89
+ font-size: 14px;
90
+ }
91
+ </style>
@@ -0,0 +1,81 @@
1
+ <template>
2
+ <div class="tree-node">
3
+ <div class="node-content" @click="handleClick">
4
+ <span v-if="hasChildren" class="toggle-icon">
5
+ {{ node.expanded ? '-' : '+' }}
6
+ </span>
7
+ <span class="node-title">{{ node.title }}</span>
8
+ </div>
9
+ <div v-if="hasChildren && node.expanded" class="node-children">
10
+ <tree-node
11
+ v-for="child in node.children"
12
+ :key="child.id"
13
+ :node="child"
14
+ @toggle="$emit('toggle', $event)"
15
+ :level="level + 1"/>
16
+ </div>
17
+ </div>
18
+ </template>
19
+
20
+ <script>
21
+ export default {
22
+ name: 'TreeNode',
23
+ props: {
24
+ node: {
25
+ type: Object,
26
+ required: true
27
+ },
28
+ level: {
29
+ type: Number,
30
+ default: 0
31
+ }
32
+ },
33
+ computed: {
34
+ hasChildren() {
35
+ return this.node.children && this.node.children.length > 0
36
+ }
37
+ },
38
+ methods: {
39
+ handleClick() {
40
+ if (this.hasChildren) {
41
+ this.$emit('toggle', this.node)
42
+ }
43
+ }
44
+ }
45
+ }
46
+ </script>
47
+
48
+ <style scoped>
49
+ .tree-node {
50
+ margin: 2px 0;
51
+ }
52
+
53
+ .node-content {
54
+ display: flex;
55
+ align-items: center;
56
+ padding: 4px 0;
57
+ user-select: none;
58
+ }
59
+
60
+ .toggle-icon {
61
+ width: 16px;
62
+ text-align: center;
63
+ font-size: 14px;
64
+ color: #666;
65
+ margin-right: 4px;
66
+ cursor: pointer;
67
+ }
68
+
69
+ .node-title {
70
+ flex: 1;
71
+ cursor: default;
72
+ }
73
+
74
+ .node-content:hover {
75
+ background-color: #f5f5f5;
76
+ }
77
+
78
+ .node-children {
79
+ padding-left: 20px;
80
+ }
81
+ </style>
@@ -1,3 +1,3 @@
1
- import AmapPointRendering from './AmapPointRendering'
2
-
3
- export default AmapPointRendering
1
+ import AmapPointRendering from './AmapPointRendering'
2
+
3
+ export default AmapPointRendering
@@ -0,0 +1,191 @@
1
+ <template>
2
+ <a-row
3
+ class="title_box"
4
+ :style="{backgroundColor: requiredParameters.backgroundColor,height:requiredParameters.height}"
5
+ type="flex"
6
+ v-model="requiredParameters">
7
+ <a-col class="title_col_left" :flex="3">
8
+ <div class="title_img_box">
9
+ <img src="../img/header10086.png" class="title_img" alt="">
10
+ </div>
11
+ <div class="title_name">{{ requiredParameters.title }}</div>
12
+ </a-col>
13
+ <a-col class="title_col_right" id="titleSelect" :flex="3" style="padding-right: 3%" v-model="dateData">
14
+ <div class="title_date_box">
15
+ <div class="title_data">{{ dateData.date }}</div>
16
+ <div class="title_week">{{ dateData.dayOfWeek }}</div>
17
+ </div>
18
+ <div class="title_time">{{ dateData.time }}</div>
19
+ <div style="font-size: x-large;margin-left: 1%">|</div>
20
+ <div class="title_refresh" @click="refreshTitle"><a-icon type="undo" style="font-size: x-large;"/></div>
21
+ <div class="title_refresh_box">
22
+ <div class="title_refresh_time">{{ dateData.refreshTime }}</div>
23
+ <div class="latest_update_time">最新更新时间</div>
24
+ </div>
25
+ </a-col>
26
+ </a-row>
27
+ </template>
28
+
29
+ <script>
30
+
31
+ export default {
32
+ name: 'TitleComponent',
33
+ components: {},
34
+ data () {
35
+ return {
36
+ dateData: {
37
+ date: '',
38
+ dayOfWeek: '',
39
+ time: '',
40
+ refreshTime: ''
41
+ },
42
+ timer: null
43
+ }
44
+ },
45
+ props: {
46
+ requiredParameters: {
47
+ type: Object,
48
+ default: () => ({
49
+ title: '',
50
+ backgroundColor: '',
51
+ height: ''
52
+ }),
53
+ }
54
+ },
55
+ created () {
56
+ this.updateDateData()
57
+ this.startTimer()
58
+ },
59
+ beforeDestroy () {
60
+ this.stopTimer()
61
+ },
62
+ methods: {
63
+ // 刷新页面
64
+ refreshTitle () {
65
+ this.$forceUpdate()
66
+ const now = new Date()
67
+ this.dateData.refreshTime = now.toLocaleTimeString()
68
+ this.$emit('refreshTitle')
69
+ },
70
+ updateDateData () {
71
+ const now = new Date()
72
+ const options = { weekday: 'long' }
73
+ this.dateData.date = this.formatDate(now)
74
+ this.dateData.time = this.formatTime(now)
75
+ this.dateData.dayOfWeek = now.toLocaleDateString(undefined, options)
76
+ this.dateData.refreshTime = now.toLocaleTimeString()
77
+ },
78
+ formatDate (date) {
79
+ const month = date.getMonth() + 1
80
+ const day = date.getDate()
81
+ return `${month}月${day}日`
82
+ },
83
+ formatTime (date) {
84
+ const hours = String(date.getHours()).padStart(2, '0')
85
+ const minutes = String(date.getMinutes()).padStart(2, '0')
86
+ return `${hours}:${minutes}`
87
+ },
88
+ startTimer () {
89
+ this.timer = setInterval(() => {
90
+ const now = new Date()
91
+ this.dateData.time = this.formatTime(now)
92
+ }, 10000) // 每秒更新一次
93
+ },
94
+ stopTimer () {
95
+ if (this.timer) {
96
+ clearInterval(this.timer)
97
+ this.timer = null
98
+ }
99
+ }
100
+ }
101
+ }
102
+ </script>
103
+
104
+ <style scoped>
105
+ .title_box {
106
+ width: 100%;
107
+ min-height:42px;
108
+ }
109
+ .title_col_left {
110
+ height: 100%;
111
+ color: white;
112
+ display: flex;
113
+ align-content: center;
114
+ align-items: center;
115
+ }
116
+ .title_col_right {
117
+ height: 100%;
118
+ color: white;
119
+ display: flex;
120
+ align-content: center;
121
+ align-items: center;
122
+ justify-content: flex-end;
123
+ }
124
+ .title_img_box {
125
+ height: 80%;
126
+ width: auto;
127
+ margin-left: 1%;
128
+ border-radius: 50%;
129
+ background-color: #35baf6;
130
+ }
131
+ .title_img{
132
+ width: 100%;
133
+ height: 100%;
134
+ }
135
+ .title_name {
136
+ font-size: medium !important;
137
+ font-weight: bold;
138
+ margin-left: 1%;
139
+ }
140
+ .title_date_box{
141
+ width: 20%;
142
+ height: 100%;
143
+ display: flex;
144
+ flex-direction: column;
145
+ justify-content: center;
146
+ }
147
+ .title_data{
148
+ display: flex;
149
+ justify-content: center;
150
+ align-items: center;
151
+ font-size: smaller;
152
+ }
153
+ .title_week{
154
+ display: flex;
155
+ justify-content: center;
156
+ align-items: center;
157
+ font-size: smaller;
158
+ }
159
+ .title_time{
160
+ font-size: x-large;
161
+ }
162
+ .title_refresh{
163
+ margin-left: 1%;
164
+ height: 100%;
165
+ align-content: center;
166
+ align-items: center;
167
+ cursor: pointer;
168
+ display: flex;
169
+ width: 7%;
170
+ justify-content: center;
171
+ min-width: 31px;
172
+ }
173
+ .title_refresh:hover{
174
+ background-color: rgb(31, 138, 137);
175
+ }
176
+ .title_refresh:active{
177
+ background-color: rgb(26, 129, 128);
178
+ }
179
+ .title_refresh_box{
180
+ margin-right: 1%;
181
+ }
182
+ .latest_update_time{
183
+ font-size: x-small;
184
+ }
185
+ .title_refresh_time{
186
+ display: flex;
187
+ font-size: x-small;
188
+ align-content: center;
189
+ justify-content: center;
190
+ }
191
+ </style>
@@ -1,3 +1,3 @@
1
- import XDetailsView from './XDetailsView'
2
-
3
- export default XDetailsView
1
+ import XDetailsView from './XDetailsView'
2
+
3
+ export default XDetailsView
@@ -1,3 +1,3 @@
1
- import XFormGroupDetails from './XFormGroupDetails'
2
-
3
- export default XFormGroupDetails
1
+ import XFormGroupDetails from './XFormGroupDetails'
2
+
3
+ export default XFormGroupDetails
@@ -67,6 +67,7 @@
67
67
  :customDelete="customDelete"
68
68
  :extraHeight="extraHeight"
69
69
  :serviceName="serviceName"
70
+ :pageMaxSize="realQueryConfig.queryPagesSize"
70
71
  @add="add"
71
72
  @move="move"
72
73
  @edit="edit"
@@ -151,6 +151,12 @@ export default {
151
151
  } else {
152
152
  exportData = this.tableContext.getTableData()
153
153
  }
154
+ if (tHeader.includes('序号')) {
155
+ exportData = exportData.map((item, index) => ({
156
+ ...item,
157
+ 序号: index + 1
158
+ }))
159
+ }
154
160
  this.confirmLoading = false
155
161
  exportJson(tHeader, exportData.map(v => filterVal.map(j => v[j])), `${this.tableContext.title || ''}数据_${new Date().toLocaleString()}`)
156
162
  },
@@ -502,6 +502,10 @@ export default {
502
502
  extraHeight: {
503
503
  type: Number,
504
504
  default: 80
505
+ },
506
+ pageMaxSize: {
507
+ type: Number,
508
+ default: null
505
509
  }
506
510
  },
507
511
  computed: {
@@ -523,6 +527,14 @@ export default {
523
527
  ...mapState('account', { currUser: 'user' }),
524
528
  ...mapState('setting', ['compatible'])
525
529
  },
530
+ watch: {
531
+ pageMaxSize: {
532
+ handler (val) {
533
+ this.tableContext.pageMaxSize = val
534
+ },
535
+ immediate: true
536
+ }
537
+ },
526
538
  mounted () {
527
539
  window.addEventListener('resize', this.handleResize)
528
540
  },
@@ -15,6 +15,7 @@
15
15
  :hidePagination="tableContext.simpleMode"
16
16
  :showSelected="!tableContext.simpleMode"
17
17
  :pageSize="tableContext.simpleMode ? 1000 : undefined"
18
+ :pageMaxSize="tableContext.pageMaxSize"
18
19
  :setScrollYHeight="tableContext.setScrollYHeight"
19
20
  :selectRowMode="tableContext.selectRowMode"
20
21
  :size="tableContext.tableSize"
@@ -149,6 +150,7 @@
149
150
  :hidePagination="tableContext.simpleMode"
150
151
  :showSelected="!tableContext.simpleMode"
151
152
  :pageSize="tableContext.simpleMode ? 1000 : undefined"
153
+ :pageMaxSize="tableContext.pageMaxSize"
152
154
  :setScrollYHeight="tableContext.setScrollYHeight"
153
155
  :selectRowMode="tableContext.selectRowMode"
154
156
  :size="tableContext.tableSize"