sh-view 2.8.1 → 2.8.3
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/.eslintrc.js +25 -20
- package/other.js +8 -8
- package/package.json +9 -6
- package/packages/components/index.js +91 -91
- package/packages/components/sh-alert/alert.ts +30 -0
- package/packages/components/sh-alert/index.vue +143 -168
- package/packages/components/sh-badge/index.vue +242 -242
- package/packages/components/sh-calendar/index.vue +650 -650
- package/packages/components/sh-card/index.vue +148 -148
- package/packages/components/sh-code-editor/index.vue +19 -19
- package/packages/components/sh-col/index.vue +92 -92
- package/packages/components/sh-corner/index.vue +230 -230
- package/packages/components/sh-count-to/index.vue +131 -131
- package/packages/components/sh-date/index.vue +301 -301
- package/packages/components/sh-drawer/index.vue +579 -579
- package/packages/components/sh-drawer/scrollbar.js +78 -78
- package/packages/components/sh-empty/index.vue +42 -42
- package/packages/components/sh-form/js/props.js +76 -76
- package/packages/components/sh-form/js/useForm.js +229 -229
- package/packages/components/sh-header/index.vue +261 -260
- package/packages/components/sh-icon/css/default/ionicons.svg +869 -869
- package/packages/components/sh-icon/css/font/iconfont.json +247 -247
- package/packages/components/sh-icon/index.vue +41 -41
- package/packages/components/sh-image/index.vue +133 -133
- package/packages/components/sh-list/index.vue +146 -146
- package/packages/components/sh-loading/index.vue +53 -53
- package/packages/components/sh-modal/index.vue +188 -188
- package/packages/components/sh-noticebar/index.vue +215 -215
- package/packages/components/sh-poptip/index.vue +597 -597
- package/packages/components/sh-progress/index.vue +276 -276
- package/packages/components/sh-pull-refresh/index.vue +289 -289
- package/packages/components/sh-result/index.vue +114 -114
- package/packages/components/sh-row/index.vue +66 -66
- package/packages/components/sh-split/components/trigger.vue +33 -33
- package/packages/components/sh-split/index.vue +342 -342
- package/packages/components/sh-table/components/importModal.vue +363 -363
- package/packages/components/sh-table/components/sh-column.vue +68 -68
- package/packages/components/sh-table/js/excel_to_json.js +313 -313
- package/packages/components/sh-table/js/props.js +305 -305
- package/packages/components/sh-table/js/tableMethods.js +167 -167
- package/packages/components/sh-table/js/useTable.js +636 -636
- package/packages/components/sh-table/table.vue +217 -217
- package/packages/components/sh-tabs/index.vue +426 -426
- package/packages/components/sh-tag/index.vue +168 -168
- package/packages/components/sh-toolbar/index.vue +182 -182
- package/packages/components/sh-tree/components/table-tree.vue +289 -289
- package/packages/components/sh-tree/mixin/treeProps.js +122 -122
- package/packages/components/sh-upload/index.vue +535 -535
- package/packages/components/sh-water-fall/index.vue +80 -80
- package/packages/components/sh-water-mark/index.vue +96 -96
- package/packages/css/index.js +4 -4
- package/packages/directive/index.js +19 -19
- package/packages/directive/module/click-out.js +14 -14
- package/packages/directive/module/draggable.js +42 -42
- package/packages/directive/module/line-clamp.js +22 -22
- package/packages/directive/module/prevent-click.js +18 -18
- package/packages/directive/module/resize.js +14 -14
- package/packages/directive/module/ripple.js +166 -166
- package/packages/index.js +39 -39
- package/packages/mixin/index.js +86 -86
- package/packages/other/sh-cron-modal/components/cron-content.vue +294 -294
- package/packages/other/sh-cron-modal/index.vue +81 -81
- package/packages/other/sh-cron-modal/mixin/cron-emits.js +1 -1
- package/packages/other/sh-cron-modal/mixin/cron-props.js +9 -9
- package/packages/other/sh-cron-modal/tabs/cron-week-box.vue +126 -126
- package/packages/other/sh-menu/index.vue +326 -326
- package/packages/other/sh-menu/menu-group-content.vue +136 -136
- package/packages/other/sh-menu/menu-item-content.vue +71 -71
- package/packages/other/sh-menu-card/index.vue +250 -250
- package/packages/other/sh-menu-card/menu-box.vue +87 -87
- package/packages/other/sh-preview/components/sh-excel.vue +163 -163
- package/packages/other/sh-preview/js/data-hook.js +41 -41
- package/packages/other/sh-preview/js/data-props.js +15 -15
- package/packages/other/sh-system-tip/index.vue +115 -115
- package/packages/utils/resize.js +69 -70
- package/packages/utils/transfer-queue.js +12 -12
- package/packages/vxeTable/index.js +193 -184
- package/packages/vxeTable/plugins/export.js +450 -450
- package/packages/vxeTable/render/cell/vxe-render-img.vue +27 -27
- package/packages/vxeTable/render/cell/vxe-render-table.vue +51 -51
- package/packages/vxeTable/render/cell/vxe-render-time.vue +44 -44
- package/packages/vxeTable/render/cell/vxe-render-tree.vue +70 -70
- package/packages/vxeTable/render/filters/vxe-filter-input.vue +26 -26
- package/packages/vxeTable/render/filters/vxe-filter-time.vue +26 -26
- package/packages/vxeTable/render/globalRenders.jsx +514 -514
- package/packages/vxeTable/render/mixin/cell-hooks.js +198 -198
- package/packages/vxeTable/render/mixin/cell-props.js +23 -23
- package/packages/vxeTable/render/mixin/filter-hooks.js +46 -46
- package/tsconfig.json +25 -0
- package/types/component.d.ts +1 -0
- 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>
|