vue2-client 1.14.33 → 1.14.34

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.
@@ -143,8 +143,8 @@ export default {
143
143
  handler () {
144
144
  if (this.userInfo) {
145
145
  console.log('userinfo', this.userInfo)
146
- this.openUserBtnShow = this.userInfo.f_meter_type.includes('物联网表')
147
- this.valveBtnShow = this.userInfo.f_meter_type.includes('物联网表') && this.userInfo.f_user_state !== '停用'
146
+ this.openUserBtnShow = this.userInfo.f_meter_type.includes('物联网表') && this.login?.r.includes('开户权限')
147
+ this.valveBtnShow = this.userInfo.f_meter_type.includes('物联网表') && this.userInfo.f_user_state !== '停用' && this.login?.r.includes('开关阀权限')
148
148
  }
149
149
  },
150
150
  deep: true
@@ -277,7 +277,7 @@ export default {
277
277
  },
278
278
  mounted () {},
279
279
  computed: {
280
- ...mapState('account', { currUser: 'user' }),
280
+ ...mapState('account', { currUser: 'user',login: 'login' }),
281
281
  ...mapState('setting', { isMobile: 'isMobile' })
282
282
  }
283
283
  }
@@ -1,47 +1,47 @@
1
- import AMapLoader from '@amap/amap-jsapi-loader'
2
- let Amap
3
- async function GetGDMap (secretKey, key) {
4
- if (!Amap) {
5
- window._AMapSecurityConfig = {
6
- securityJsCode: secretKey
7
- }
8
- // 解决高德地图加载报错 ---> 禁止多种API加载方式混用
9
- AMapLoader.reset()
10
- Amap = await AMapLoader.load({
11
- key: key, // 申请好的Web端开发者Key,首次调用 load 时必填
12
- version: '2.0', // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
13
- plugins: ['AMap.IndexCluster', 'AMP.MarkerCluster', 'AMap.InfoWindow', 'AMap.HeatMap', 'AMap.HawkEye', 'AMap.DistrictSearch',
14
- 'AMap.ToolBar', 'AMap.Geolocation', 'AMap.MouseTool',
15
- 'AMap.Geocoder', 'AMap.MarkerClusterer', 'AMap.AutoComplete', 'AMap.Scale'], // 需要使用的的插件列表,如比例尺'AMap.Scale'等
16
- AMapUI: {
17
- version: '1.1', // AMapUI 缺省 1.1
18
- plugins: ['misc/PositionPicker'] // 需要加载的 AMapUI ui插件
19
- }
20
- })
21
- }
22
- return Amap
23
- }
24
-
25
- async function getGDMap (address) {
26
- new (await GetGDMap()).Geocoder({
27
- radius: 500 // 范围,默认:500
28
- }).getLocation(address, function (status, result) {
29
- if (status === 'complete' && result.geocodes.length) {
30
- return ({ lng: result.geocodes[0].location.lng, lat: result.geocodes[0].location.lat })
31
- } else {
32
- // eslint-disable-next-line prefer-promise-reject-errors
33
- throw new Error('根据经纬度查询地址失败')
34
- }
35
- })
36
- }
37
-
38
- async function GetLocation (address) {
39
- return new Promise((resolve, reject) => {
40
- try {
41
- resolve(getGDMap(address))
42
- } catch (e) {
43
- reject(e)
44
- }
45
- })
46
- }
47
- export { GetGDMap, GetLocation }
1
+ import AMapLoader from '@amap/amap-jsapi-loader'
2
+ let Amap
3
+ async function GetGDMap (secretKey, key) {
4
+ if (!Amap) {
5
+ window._AMapSecurityConfig = {
6
+ securityJsCode: secretKey
7
+ }
8
+ // 解决高德地图加载报错 ---> 禁止多种API加载方式混用
9
+ AMapLoader.reset()
10
+ Amap = await AMapLoader.load({
11
+ key: key, // 申请好的Web端开发者Key,首次调用 load 时必填
12
+ version: '2.0', // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
13
+ plugins: ['AMap.IndexCluster', 'AMP.MarkerCluster', 'AMap.InfoWindow', 'AMap.HeatMap', 'AMap.HawkEye', 'AMap.DistrictSearch',
14
+ 'AMap.ToolBar', 'AMap.Geolocation', 'AMap.MouseTool',
15
+ 'AMap.Geocoder', 'AMap.MarkerClusterer', 'AMap.AutoComplete', 'AMap.Scale'], // 需要使用的的插件列表,如比例尺'AMap.Scale'等
16
+ AMapUI: {
17
+ version: '1.1', // AMapUI 缺省 1.1
18
+ plugins: ['misc/PositionPicker'] // 需要加载的 AMapUI ui插件
19
+ }
20
+ })
21
+ }
22
+ return Amap
23
+ }
24
+
25
+ async function getGDMap (address) {
26
+ new (await GetGDMap()).Geocoder({
27
+ radius: 500 // 范围,默认:500
28
+ }).getLocation(address, function (status, result) {
29
+ if (status === 'complete' && result.geocodes.length) {
30
+ return ({ lng: result.geocodes[0].location.lng, lat: result.geocodes[0].location.lat })
31
+ } else {
32
+ // eslint-disable-next-line prefer-promise-reject-errors
33
+ throw new Error('根据经纬度查询地址失败')
34
+ }
35
+ })
36
+ }
37
+
38
+ async function GetLocation (address) {
39
+ return new Promise((resolve, reject) => {
40
+ try {
41
+ resolve(getGDMap(address))
42
+ } catch (e) {
43
+ reject(e)
44
+ }
45
+ })
46
+ }
47
+ export { GetGDMap, GetLocation }
@@ -1,36 +0,0 @@
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>
@@ -1,91 +0,0 @@
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>
@@ -1,81 +0,0 @@
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,191 +0,0 @@
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>