sh-view 2.8.0 → 2.8.2

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 (91) hide show
  1. package/.eslintrc.js +25 -20
  2. package/other.js +8 -8
  3. package/package.json +9 -6
  4. package/packages/components/index.js +91 -91
  5. package/packages/components/sh-alert/alert.ts +30 -0
  6. package/packages/components/sh-alert/index.vue +143 -168
  7. package/packages/components/sh-badge/index.vue +242 -242
  8. package/packages/components/sh-calendar/index.vue +650 -650
  9. package/packages/components/sh-card/index.vue +148 -148
  10. package/packages/components/sh-code-editor/index.vue +19 -19
  11. package/packages/components/sh-col/index.vue +92 -92
  12. package/packages/components/sh-corner/index.vue +230 -230
  13. package/packages/components/sh-count-to/index.vue +131 -131
  14. package/packages/components/sh-date/index.vue +301 -301
  15. package/packages/components/sh-drawer/index.vue +579 -579
  16. package/packages/components/sh-drawer/scrollbar.js +78 -78
  17. package/packages/components/sh-empty/index.vue +42 -42
  18. package/packages/components/sh-form/js/props.js +76 -76
  19. package/packages/components/sh-form/js/useForm.js +229 -229
  20. package/packages/components/sh-header/index.vue +261 -260
  21. package/packages/components/sh-icon/css/default/ionicons.svg +869 -869
  22. package/packages/components/sh-icon/css/font/iconfont.json +247 -247
  23. package/packages/components/sh-icon/index.vue +41 -41
  24. package/packages/components/sh-image/index.vue +133 -133
  25. package/packages/components/sh-list/index.vue +146 -146
  26. package/packages/components/sh-loading/index.vue +53 -53
  27. package/packages/components/sh-modal/index.vue +188 -188
  28. package/packages/components/sh-noticebar/index.vue +215 -215
  29. package/packages/components/sh-poptip/index.vue +597 -597
  30. package/packages/components/sh-progress/index.vue +276 -276
  31. package/packages/components/sh-pull-refresh/index.vue +289 -289
  32. package/packages/components/sh-result/index.vue +114 -114
  33. package/packages/components/sh-row/index.vue +66 -66
  34. package/packages/components/sh-split/components/trigger.vue +33 -33
  35. package/packages/components/sh-split/index.vue +342 -342
  36. package/packages/components/sh-table/components/importModal.vue +363 -363
  37. package/packages/components/sh-table/components/sh-column.vue +68 -68
  38. package/packages/components/sh-table/js/excel_to_json.js +313 -313
  39. package/packages/components/sh-table/js/props.js +305 -305
  40. package/packages/components/sh-table/js/tableMethods.js +167 -167
  41. package/packages/components/sh-table/js/useTable.js +636 -636
  42. package/packages/components/sh-table/table.vue +217 -217
  43. package/packages/components/sh-tabs/index.vue +426 -426
  44. package/packages/components/sh-tag/index.vue +168 -168
  45. package/packages/components/sh-toolbar/index.vue +182 -182
  46. package/packages/components/sh-tree/components/table-tree.vue +289 -289
  47. package/packages/components/sh-tree/mixin/treeProps.js +122 -122
  48. package/packages/components/sh-upload/index.vue +535 -535
  49. package/packages/components/sh-water-fall/index.vue +80 -80
  50. package/packages/components/sh-water-mark/index.vue +96 -96
  51. package/packages/css/index.js +4 -4
  52. package/packages/directive/index.js +19 -19
  53. package/packages/directive/module/click-out.js +14 -14
  54. package/packages/directive/module/draggable.js +42 -42
  55. package/packages/directive/module/line-clamp.js +22 -22
  56. package/packages/directive/module/prevent-click.js +18 -18
  57. package/packages/directive/module/resize.js +14 -14
  58. package/packages/directive/module/ripple.js +166 -166
  59. package/packages/index.js +39 -39
  60. package/packages/mixin/index.js +86 -86
  61. package/packages/other/sh-cron-modal/components/cron-content.vue +294 -294
  62. package/packages/other/sh-cron-modal/index.vue +81 -81
  63. package/packages/other/sh-cron-modal/mixin/cron-emits.js +1 -1
  64. package/packages/other/sh-cron-modal/mixin/cron-props.js +9 -9
  65. package/packages/other/sh-cron-modal/tabs/cron-week-box.vue +126 -126
  66. package/packages/other/sh-menu/index.vue +326 -326
  67. package/packages/other/sh-menu/menu-group-content.vue +136 -136
  68. package/packages/other/sh-menu/menu-item-content.vue +71 -71
  69. package/packages/other/sh-menu-card/index.vue +250 -250
  70. package/packages/other/sh-menu-card/menu-box.vue +87 -87
  71. package/packages/other/sh-preview/components/sh-excel.vue +163 -163
  72. package/packages/other/sh-preview/js/data-hook.js +41 -41
  73. package/packages/other/sh-preview/js/data-props.js +15 -15
  74. package/packages/other/sh-system-tip/index.vue +115 -115
  75. package/packages/utils/resize.js +69 -70
  76. package/packages/utils/transfer-queue.js +12 -12
  77. package/packages/vxeTable/index.js +193 -184
  78. package/packages/vxeTable/plugins/export.js +450 -450
  79. package/packages/vxeTable/render/cell/vxe-render-img.vue +27 -27
  80. package/packages/vxeTable/render/cell/vxe-render-table.vue +51 -51
  81. package/packages/vxeTable/render/cell/vxe-render-time.vue +44 -44
  82. package/packages/vxeTable/render/cell/vxe-render-tree.vue +70 -70
  83. package/packages/vxeTable/render/filters/vxe-filter-input.vue +26 -26
  84. package/packages/vxeTable/render/filters/vxe-filter-time.vue +26 -26
  85. package/packages/vxeTable/render/globalRenders.jsx +514 -514
  86. package/packages/vxeTable/render/mixin/cell-hooks.js +198 -198
  87. package/packages/vxeTable/render/mixin/cell-props.js +23 -23
  88. package/packages/vxeTable/render/mixin/filter-hooks.js +46 -46
  89. package/tsconfig.json +25 -0
  90. package/types/component.d.ts +1 -0
  91. package/types/index.ts +0 -0
@@ -1,163 +1,163 @@
1
- <script>
2
- import { defineComponent, computed, getCurrentInstance, ref } from 'vue'
3
- import dataHook from '../js/data-hook'
4
- import dataProps from '../js/data-props'
5
- import ExcelJS from 'exceljs'
6
- import ExcelTable from '@wolf-table/table'
7
- import '@wolf-table/table/dist/table.min.css'
8
- export default defineComponent({
9
- name: 'ShExcel',
10
- props: dataProps,
11
- emits: ['rendered', 'error'],
12
- setup(props, context) {
13
- const { proxy } = getCurrentInstance()
14
- const { $vUtils } = proxy
15
-
16
- const wordBooks = ref([])
17
-
18
- let defaultOption = {
19
- scrollable: true,
20
- resizable: true,
21
- selectable: true,
22
- editable: false,
23
- copyable: true
24
- }
25
- const excelOptions = computed(() => {
26
- return Object.assign({}, defaultOption, props.options)
27
- })
28
- const tabConfig = computed(() => {
29
- return {
30
- modelValue: wordBooks.value.length ? wordBooks.value[0].name : '',
31
- options: wordBooks.value,
32
- labelKey: 'name',
33
- labelField: 'name',
34
- placement: 'bottom',
35
- type: 'card',
36
- animated: false
37
- }
38
- })
39
-
40
- const getWorkBookByBuffer = async buffer => {
41
- const wb = new ExcelJS.Workbook()
42
- let workbook = await wb.xlsx.load(buffer)
43
- let workbookData = []
44
- workbook.eachSheet(sheet => {
45
- // 构造数据源结构
46
- let sheetData = { name: sheet.name, styles: [], cells: [], merges: [] }
47
- for (let mergeRange in sheet._merges) {
48
- sheetData.merges.push(sheet._merges[mergeRange].shortRange)
49
- }
50
- // 遍历行
51
- sheet.eachRow((row, rowNumber) => {
52
- let cellResult = {}
53
- // includeEmpty = false 不包含空白单元格
54
- row.eachCell({ includeEmpty: true }, function (cell, colNumber) {
55
- let cellText = ''
56
- if (cell.value && cell.value.result) {
57
- // Excel 单元格有公式
58
- cellText = cell.value.result
59
- } else if (cell.value && cell.value.richText) {
60
- // Excel 单元格是多行文本
61
- for (let text in cell.value.richText) {
62
- // 多行文本做累加
63
- cellText += cell.value.richText[text].text
64
- }
65
- } else {
66
- // Excel 单元格无公式
67
- cellText = cell.value
68
- }
69
- // 解析单元格,包含样式
70
- // 单元格存在背景色
71
- if (cell.style?.fill?.fgColor?.argb) {
72
- let cellBgcolor = cell.style.fill.fgColor.argb.trim().toLowerCase() //去掉前后空格
73
- let argb = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(cellBgcolor)
74
- let rgb = `rgba(${parseInt(argb[2], 16)}, ${parseInt(argb[3], 16)}, ${parseInt(argb[4], 16)})`
75
- let percent = (parseInt(argb[1], 16) / 255) * 100
76
- cell.style.bgcolor = $vUtils.fade(rgb, percent)
77
- }
78
- // 字体颜色
79
- if (cell.style?.font?.color?.argb) {
80
- let cellcolor = cell.style.font.color.argb.trim().toLowerCase() //去掉前后空格
81
- let argb = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(cellcolor)
82
- let rgb = `rgba(${parseInt(argb[2], 16)}, ${parseInt(argb[3], 16)}, ${parseInt(argb[4], 16)})`
83
- let percent = (parseInt(argb[1], 16) / 255) * 100
84
- cell.style.color = $vUtils.fade(rgb, percent)
85
- }
86
- // exceljs 对齐的格式转成能识别的对齐格式
87
- if (cell.style?.alignment?.horizontal) {
88
- cell.style.align = cell.style.alignment.horizontal
89
- cell.style.valign = cell.style.alignment.vertical
90
- }
91
- // 单元格
92
- cellResult = { value: cellText, style: sheetData.styles.length }
93
- // 解析单元格,包含样式
94
- sheetData.styles.push(cell.style)
95
- sheetData.cells.push([rowNumber - 1, colNumber - 1, cellResult])
96
- })
97
- })
98
- workbookData.push(sheetData)
99
- })
100
- return workbookData
101
- }
102
-
103
- const domRender = async (data, container) => {
104
- if (!data || typeof data === 'string') {
105
- container.innerHTML = data
106
- return true
107
- }
108
- const { width, height } = container.getBoundingClientRect()
109
- const buffer = await data.arrayBuffer()
110
- const workData = await getWorkBookByBuffer(buffer)
111
- wordBooks.value = workData
112
- let tables = []
113
- setTimeout(() => {
114
- workData.forEach((sheet, sheetIndex) => {
115
- let refName = `sheet${sheet.name}Ref`
116
- sheet.workTable = ExcelTable.create(
117
- proxy.$refs[refName][0],
118
- () => width,
119
- () => (height ? height - 32 : 300),
120
- excelOptions.value
121
- )
122
- sheet.workTable.data(sheet).render()
123
- })
124
- })
125
- return tables
126
- }
127
-
128
- const useData = dataHook(props, context, proxy, {
129
- domRender
130
- })
131
-
132
- return {
133
- ...useData,
134
- tabConfig
135
- }
136
- }
137
- })
138
- </script>
139
-
140
- <template>
141
- <div ref="rootRef" class="sh-office-excel">
142
- <sh-tabs v-bind="tabConfig">
143
- <template #tabContent="tabs">
144
- <template v-for="(tab, tabIndex) in tabs" :key="tabIndex">
145
- <div style="position: relative; width: 100%">
146
- <div :ref="`sheet${tab.name}Ref`"></div>
147
- </div>
148
- </template>
149
- </template>
150
- </sh-tabs>
151
- </div>
152
- </template>
153
-
154
- <style lang="scss">
155
- .sh-office-excel {
156
- position: relative;
157
- .wolf-table-scrollbar {
158
- &.vertical {
159
- opacity: 1 !important;
160
- }
161
- }
162
- }
163
- </style>
1
+ <script>
2
+ import { defineComponent, computed, getCurrentInstance, ref } from 'vue'
3
+ import dataHook from '../js/data-hook'
4
+ import dataProps from '../js/data-props'
5
+ import ExcelJS from 'exceljs'
6
+ import ExcelTable from '@wolf-table/table'
7
+ import '@wolf-table/table/dist/table.min.css'
8
+ export default defineComponent({
9
+ name: 'ShExcel',
10
+ props: dataProps,
11
+ emits: ['rendered', 'error'],
12
+ setup(props, context) {
13
+ const { proxy } = getCurrentInstance()
14
+ const { $vUtils } = proxy
15
+
16
+ const wordBooks = ref([])
17
+
18
+ let defaultOption = {
19
+ scrollable: true,
20
+ resizable: true,
21
+ selectable: true,
22
+ editable: false,
23
+ copyable: true
24
+ }
25
+ const excelOptions = computed(() => {
26
+ return Object.assign({}, defaultOption, props.options)
27
+ })
28
+ const tabConfig = computed(() => {
29
+ return {
30
+ modelValue: wordBooks.value.length ? wordBooks.value[0].name : '',
31
+ options: wordBooks.value,
32
+ labelKey: 'name',
33
+ labelField: 'name',
34
+ placement: 'bottom',
35
+ type: 'card',
36
+ animated: false
37
+ }
38
+ })
39
+
40
+ const getWorkBookByBuffer = async buffer => {
41
+ const wb = new ExcelJS.Workbook()
42
+ let workbook = await wb.xlsx.load(buffer)
43
+ let workbookData = []
44
+ workbook.eachSheet(sheet => {
45
+ // 构造数据源结构
46
+ let sheetData = { name: sheet.name, styles: [], cells: [], merges: [] }
47
+ for (let mergeRange in sheet._merges) {
48
+ sheetData.merges.push(sheet._merges[mergeRange].shortRange)
49
+ }
50
+ // 遍历行
51
+ sheet.eachRow((row, rowNumber) => {
52
+ let cellResult = {}
53
+ // includeEmpty = false 不包含空白单元格
54
+ row.eachCell({ includeEmpty: true }, function (cell, colNumber) {
55
+ let cellText = ''
56
+ if (cell.value && cell.value.result) {
57
+ // Excel 单元格有公式
58
+ cellText = cell.value.result
59
+ } else if (cell.value && cell.value.richText) {
60
+ // Excel 单元格是多行文本
61
+ for (let text in cell.value.richText) {
62
+ // 多行文本做累加
63
+ cellText += cell.value.richText[text].text
64
+ }
65
+ } else {
66
+ // Excel 单元格无公式
67
+ cellText = cell.value
68
+ }
69
+ // 解析单元格,包含样式
70
+ // 单元格存在背景色
71
+ if (cell.style?.fill?.fgColor?.argb) {
72
+ let cellBgcolor = cell.style.fill.fgColor.argb.trim().toLowerCase() //去掉前后空格
73
+ let argb = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(cellBgcolor)
74
+ let rgb = `rgba(${parseInt(argb[2], 16)}, ${parseInt(argb[3], 16)}, ${parseInt(argb[4], 16)})`
75
+ let percent = (parseInt(argb[1], 16) / 255) * 100
76
+ cell.style.bgcolor = $vUtils.fade(rgb, percent)
77
+ }
78
+ // 字体颜色
79
+ if (cell.style?.font?.color?.argb) {
80
+ let cellcolor = cell.style.font.color.argb.trim().toLowerCase() //去掉前后空格
81
+ let argb = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(cellcolor)
82
+ let rgb = `rgba(${parseInt(argb[2], 16)}, ${parseInt(argb[3], 16)}, ${parseInt(argb[4], 16)})`
83
+ let percent = (parseInt(argb[1], 16) / 255) * 100
84
+ cell.style.color = $vUtils.fade(rgb, percent)
85
+ }
86
+ // exceljs 对齐的格式转成能识别的对齐格式
87
+ if (cell.style?.alignment?.horizontal) {
88
+ cell.style.align = cell.style.alignment.horizontal
89
+ cell.style.valign = cell.style.alignment.vertical
90
+ }
91
+ // 单元格
92
+ cellResult = { value: cellText, style: sheetData.styles.length }
93
+ // 解析单元格,包含样式
94
+ sheetData.styles.push(cell.style)
95
+ sheetData.cells.push([rowNumber - 1, colNumber - 1, cellResult])
96
+ })
97
+ })
98
+ workbookData.push(sheetData)
99
+ })
100
+ return workbookData
101
+ }
102
+
103
+ const domRender = async (data, container) => {
104
+ if (!data || typeof data === 'string') {
105
+ container.innerHTML = data
106
+ return true
107
+ }
108
+ const { width, height } = container.getBoundingClientRect()
109
+ const buffer = await data.arrayBuffer()
110
+ const workData = await getWorkBookByBuffer(buffer)
111
+ wordBooks.value = workData
112
+ let tables = []
113
+ setTimeout(() => {
114
+ workData.forEach((sheet, sheetIndex) => {
115
+ let refName = `sheet${sheet.name}Ref`
116
+ sheet.workTable = ExcelTable.create(
117
+ proxy.$refs[refName][0],
118
+ () => width,
119
+ () => (height ? height - 32 : 300),
120
+ excelOptions.value
121
+ )
122
+ sheet.workTable.data(sheet).render()
123
+ })
124
+ })
125
+ return tables
126
+ }
127
+
128
+ const useData = dataHook(props, context, proxy, {
129
+ domRender
130
+ })
131
+
132
+ return {
133
+ ...useData,
134
+ tabConfig
135
+ }
136
+ }
137
+ })
138
+ </script>
139
+
140
+ <template>
141
+ <div ref="rootRef" class="sh-office-excel">
142
+ <sh-tabs v-bind="tabConfig">
143
+ <template #tabContent="tabs">
144
+ <template v-for="(tab, tabIndex) in tabs" :key="tabIndex">
145
+ <div style="position: relative; width: 100%">
146
+ <div :ref="`sheet${tab.name}Ref`"></div>
147
+ </div>
148
+ </template>
149
+ </template>
150
+ </sh-tabs>
151
+ </div>
152
+ </template>
153
+
154
+ <style lang="scss">
155
+ .sh-office-excel {
156
+ position: relative;
157
+ .wolf-table-scrollbar {
158
+ &.vertical {
159
+ opacity: 1 !important;
160
+ }
161
+ }
162
+ }
163
+ </style>
@@ -1,41 +1,41 @@
1
- import { onMounted, ref, watch } from 'vue'
2
-
3
- export default function (props, context, proxy, state) {
4
- const rootRef = ref(null)
5
- const { $vUtils, $http } = proxy
6
- const { emit } = context
7
-
8
- const initData = async () => {
9
- if (!props.src) return
10
- let container = rootRef.value
11
- try {
12
- let fileRes = props.src
13
- if (typeof props.src === 'string') {
14
- fileRes = await fetch(props.src, props.serverConfig)
15
- if (fileRes && fileRes.status !== 200) {
16
- throw new Error(fileRes)
17
- }
18
- }
19
- await state.domRender(fileRes, container)
20
- emit('rendered')
21
- } catch (e) {
22
- await state.domRender(e.message, container)
23
- emit('error', e)
24
- }
25
- }
26
-
27
- onMounted(() => {
28
- initData()
29
- })
30
-
31
- watch(
32
- () => props.src,
33
- () => {
34
- initData()
35
- }
36
- )
37
-
38
- return {
39
- rootRef
40
- }
41
- }
1
+ import { onMounted, ref, watch } from 'vue'
2
+
3
+ export default function (props, context, proxy, state) {
4
+ const rootRef = ref(null)
5
+ const { $vUtils, $http } = proxy
6
+ const { emit } = context
7
+
8
+ const initData = async () => {
9
+ if (!props.src) return
10
+ let container = rootRef.value
11
+ try {
12
+ let fileRes = props.src
13
+ if (typeof props.src === 'string') {
14
+ fileRes = await fetch(props.src, props.serverConfig)
15
+ if (fileRes && fileRes.status !== 200) {
16
+ throw new Error(fileRes)
17
+ }
18
+ }
19
+ await state.domRender(fileRes, container)
20
+ emit('rendered')
21
+ } catch (e) {
22
+ await state.domRender(e.message, container)
23
+ emit('error', e)
24
+ }
25
+ }
26
+
27
+ onMounted(() => {
28
+ initData()
29
+ })
30
+
31
+ watch(
32
+ () => props.src,
33
+ () => {
34
+ initData()
35
+ }
36
+ )
37
+
38
+ return {
39
+ rootRef
40
+ }
41
+ }
@@ -1,15 +1,15 @@
1
- export default {
2
- src: [String, ArrayBuffer, Blob],
3
- options: {
4
- type: Object,
5
- default() {
6
- return {}
7
- }
8
- },
9
- serverConfig: {
10
- type: Object,
11
- default() {
12
- return {}
13
- }
14
- }
15
- }
1
+ export default {
2
+ src: [String, ArrayBuffer, Blob],
3
+ options: {
4
+ type: Object,
5
+ default() {
6
+ return {}
7
+ }
8
+ },
9
+ serverConfig: {
10
+ type: Object,
11
+ default() {
12
+ return {}
13
+ }
14
+ }
15
+ }
@@ -1,115 +1,115 @@
1
- <template>
2
- <sh-header size="large">
3
- <template #title>
4
- <div v-html="headerTitle.title"></div>
5
- </template>
6
- <div>{{ headerTitle.desc }}</div>
7
- </sh-header>
8
- </template>
9
-
10
- <script>
11
- import { defineComponent, computed, onActivated } from 'vue'
12
- export default defineComponent({
13
- name: 'SystemTip',
14
- props: {
15
- name: {
16
- type: String,
17
- default: ''
18
- }
19
- },
20
- setup(props, context) {
21
- let nowdate = new Date()
22
-
23
- const headerDate = computed(() => {
24
- let hours = nowdate.getHours()
25
- let month = nowdate.getMonth() + 1
26
- let day = nowdate.getDate()
27
- let week = nowdate.getDay()
28
- return { date: nowdate, hours, month, day, week }
29
- })
30
- const headerWeek = computed(() => {
31
- let { week } = headerDate.value
32
- let tw = ''
33
- switch (week) {
34
- case 0:
35
- tw = '星期天'
36
- break
37
- case 1:
38
- tw = '星期一'
39
- break
40
- case 2:
41
- tw = '星期二'
42
- break
43
- case 3:
44
- tw = '星期三'
45
- break
46
- case 4:
47
- tw = '星期四'
48
- break
49
- case 5:
50
- tw = '星期五'
51
- break
52
- case 6:
53
- tw = '星期六'
54
- break
55
- }
56
- return tw
57
- })
58
- const headerTitle = computed(() => {
59
- let { hours } = headerDate.value
60
- let title = ''
61
- let desc = ''
62
- switch (true) {
63
- case hours === 0 || (hours >= 23 && hours <= 24):
64
- title = '午夜啦,早点休息喔'
65
- desc = '思念不因劳累而改变,问候不因疲惫而变懒,祝福不因休息而变缓,关怀随星星眨眼,牵挂在深夜依然,轻轻道声:祝你晚安!'
66
- break
67
- case hours >= 1 && hours <= 4:
68
- title = '凌晨啦,注意身体喔'
69
- desc = '时间不早啦,记得早点休息,保证睡眠质量!'
70
- break
71
- case hours >= 5 && hours <= 6:
72
- title = '清晨啦,准备迎接新的一天吧'
73
- desc = '睁开眼,缓一缓,快起床,伸懒腰;笑一笑,美好的一天又开始了.早安,祝你今天好心情,工作顺利,生活甜美!'
74
- break
75
- case hours >= 7 && hours <= 8:
76
- title = '早上好,记得吃早餐喔'
77
- desc = '一日之计在于晨,愿我这阳光初露时的小小问候能将快乐带给你,愿你用快乐开启,用微笑结束这美好的一天.'
78
- break
79
- case hours >= 9 && hours <= 10:
80
- title = '上午好,时刻保持好心情呀'
81
- desc = '上午好,一束阳光照在身,祝你天天都开心,财神家中去,梦想变成真,今天中大奖,明天去上任.'
82
- break
83
- case hours >= 11 && hours <= 12:
84
- title = '中午好,午餐时间到啦'
85
- desc = '中午好,到了吃午餐的时间了,吃完午餐记得午睡一小会,保证下午可以有良好的精神状态.'
86
- break
87
- case hours >= 13 && hours <= 16:
88
- title = '下午好,别太辛苦了'
89
- desc = '送各位一杯下午茶:已祝福为叶,叮咛做花,热情为水,包容当杯,喝出你一天好心情和一生的幸福,下午愉快!'
90
- break
91
- case hours >= 17 && hours <= 18:
92
- title = '傍晚啦,看看窗外的风景吧'
93
- desc = '工作是做不完的,身体可是累的垮的!看看外面的天空吧!'
94
- break
95
- case hours >= 19 && hours <= 22:
96
- title = '晚上好,准备好进入梦乡啦'
97
- desc = '睡前请把窗户打开,让"幸福"进来,睡前请把"心情"打开,让"快乐"入驻,睡前请把"思想"放飞,让甜蜜入梦!今晚祝你好梦成真,幸福一生!晚安!'
98
- break
99
- }
100
- return { title: `Hi! <span class="primary">${props.name}</span> ${title}`, desc }
101
- })
102
-
103
- onActivated(() => {
104
- nowdate = new Date()
105
- })
106
-
107
- return {
108
- headerWeek,
109
- headerTitle
110
- }
111
- }
112
- })
113
- </script>
114
-
115
- <style lang="scss" scoped></style>
1
+ <template>
2
+ <sh-header size="large">
3
+ <template #title>
4
+ <div v-html="headerTitle.title"></div>
5
+ </template>
6
+ <div>{{ headerTitle.desc }}</div>
7
+ </sh-header>
8
+ </template>
9
+
10
+ <script>
11
+ import { defineComponent, computed, onActivated } from 'vue'
12
+ export default defineComponent({
13
+ name: 'SystemTip',
14
+ props: {
15
+ name: {
16
+ type: String,
17
+ default: ''
18
+ }
19
+ },
20
+ setup(props, context) {
21
+ let nowdate = new Date()
22
+
23
+ const headerDate = computed(() => {
24
+ let hours = nowdate.getHours()
25
+ let month = nowdate.getMonth() + 1
26
+ let day = nowdate.getDate()
27
+ let week = nowdate.getDay()
28
+ return { date: nowdate, hours, month, day, week }
29
+ })
30
+ const headerWeek = computed(() => {
31
+ let { week } = headerDate.value
32
+ let tw = ''
33
+ switch (week) {
34
+ case 0:
35
+ tw = '星期天'
36
+ break
37
+ case 1:
38
+ tw = '星期一'
39
+ break
40
+ case 2:
41
+ tw = '星期二'
42
+ break
43
+ case 3:
44
+ tw = '星期三'
45
+ break
46
+ case 4:
47
+ tw = '星期四'
48
+ break
49
+ case 5:
50
+ tw = '星期五'
51
+ break
52
+ case 6:
53
+ tw = '星期六'
54
+ break
55
+ }
56
+ return tw
57
+ })
58
+ const headerTitle = computed(() => {
59
+ let { hours } = headerDate.value
60
+ let title = ''
61
+ let desc = ''
62
+ switch (true) {
63
+ case hours === 0 || (hours >= 23 && hours <= 24):
64
+ title = '午夜啦,早点休息喔'
65
+ desc = '思念不因劳累而改变,问候不因疲惫而变懒,祝福不因休息而变缓,关怀随星星眨眼,牵挂在深夜依然,轻轻道声:祝你晚安!'
66
+ break
67
+ case hours >= 1 && hours <= 4:
68
+ title = '凌晨啦,注意身体喔'
69
+ desc = '时间不早啦,记得早点休息,保证睡眠质量!'
70
+ break
71
+ case hours >= 5 && hours <= 6:
72
+ title = '清晨啦,准备迎接新的一天吧'
73
+ desc = '睁开眼,缓一缓,快起床,伸懒腰;笑一笑,美好的一天又开始了.早安,祝你今天好心情,工作顺利,生活甜美!'
74
+ break
75
+ case hours >= 7 && hours <= 8:
76
+ title = '早上好,记得吃早餐喔'
77
+ desc = '一日之计在于晨,愿我这阳光初露时的小小问候能将快乐带给你,愿你用快乐开启,用微笑结束这美好的一天.'
78
+ break
79
+ case hours >= 9 && hours <= 10:
80
+ title = '上午好,时刻保持好心情呀'
81
+ desc = '上午好,一束阳光照在身,祝你天天都开心,财神家中去,梦想变成真,今天中大奖,明天去上任.'
82
+ break
83
+ case hours >= 11 && hours <= 12:
84
+ title = '中午好,午餐时间到啦'
85
+ desc = '中午好,到了吃午餐的时间了,吃完午餐记得午睡一小会,保证下午可以有良好的精神状态.'
86
+ break
87
+ case hours >= 13 && hours <= 16:
88
+ title = '下午好,别太辛苦了'
89
+ desc = '送各位一杯下午茶:已祝福为叶,叮咛做花,热情为水,包容当杯,喝出你一天好心情和一生的幸福,下午愉快!'
90
+ break
91
+ case hours >= 17 && hours <= 18:
92
+ title = '傍晚啦,看看窗外的风景吧'
93
+ desc = '工作是做不完的,身体可是累的垮的!看看外面的天空吧!'
94
+ break
95
+ case hours >= 19 && hours <= 22:
96
+ title = '晚上好,准备好进入梦乡啦'
97
+ desc = '睡前请把窗户打开,让"幸福"进来,睡前请把"心情"打开,让"快乐"入驻,睡前请把"思想"放飞,让甜蜜入梦!今晚祝你好梦成真,幸福一生!晚安!'
98
+ break
99
+ }
100
+ return { title: `Hi! <span class="primary">${props.name}</span> ${title}`, desc }
101
+ })
102
+
103
+ onActivated(() => {
104
+ nowdate = new Date()
105
+ })
106
+
107
+ return {
108
+ headerWeek,
109
+ headerTitle
110
+ }
111
+ }
112
+ })
113
+ </script>
114
+
115
+ <style lang="scss" scoped></style>