sh-view 1.5.3 → 1.6.1

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": "sh-view",
3
- "version": "1.5.3",
3
+ "version": "1.6.1",
4
4
  "description": "基于vxe-table、view-ui-plus二次封装",
5
5
  "main": "packages/index.js",
6
6
  "scripts": {
@@ -17,27 +17,30 @@
17
17
  "@codemirror/lang-sql": "^6.5.2",
18
18
  "@codemirror/theme-one-dark": "^6.1.2",
19
19
  "@tinymce/tinymce-vue": "^5.0.0",
20
+ "@vue-office/docx": "^1.2.3",
21
+ "@vue-office/excel": "^1.2.7",
22
+ "@vue-office/pdf": "^1.2.6",
20
23
  "babel-polyfill": "^6.26.0",
21
24
  "codemirror": "^6.0.1",
22
- "core-js": "^3.8.3",
25
+ "core-js": "^3.32.0",
23
26
  "cron-parser": "^4.8.1",
24
- "docx-preview": "^0.1.11",
25
27
  "exceljs": "^4.3.0",
26
28
  "file-saver": "^2.0.5",
27
29
  "jspdf": "^2.5.1",
28
30
  "jszip": "^3.10.1",
29
- "tinymce": "^5.10.5",
30
31
  "sh-tools": "^1.2.0",
32
+ "tinymce": "^5.10.5",
31
33
  "view-ui-plus": "^1.3.14",
32
34
  "vue": "^3.3.4",
35
+ "vue-masonry": "^0.16.0",
33
36
  "vue-ripple-directive": "^2.0.1",
34
37
  "vue-router": "^4.2.2",
35
- "vue-masonry": "^0.16.0",
36
38
  "vuex": "^4.1.0",
37
- "vxe-table": "^4.5.0-beta.10",
39
+ "vxe-table": "^4.5.0-beta.16",
38
40
  "vxe-table-plugin-export-pdf": "^3.0.4",
39
41
  "vxe-table-plugin-export-xlsx": "^3.0.5",
40
42
  "xe-clipboard": "^1.10.2",
43
+ "xe-utils": "^3.5.11",
41
44
  "xlsx": "^0.18.5"
42
45
  },
43
46
  "devDependencies": {
@@ -198,7 +198,7 @@ export default {
198
198
  let result = '',
199
199
  error = null
200
200
  try {
201
- if (typeof modelValue === 'object') {
201
+ if (typeof modelValue === 'object' && value) {
202
202
  result = out ? JSON.parse(value, null, indent) : JSON.stringify(value, null, indent)
203
203
  } else {
204
204
  result = value
@@ -3,7 +3,7 @@
3
3
  </template>
4
4
 
5
5
  <script>
6
- import Icons from './icons'
6
+ import Icons from './icons.vue'
7
7
  export default {
8
8
  name: 'ShIcon',
9
9
  components: { Icons },
@@ -39,7 +39,7 @@
39
39
  </template>
40
40
 
41
41
  <script>
42
- import ivGroupItem from './components/iv-group-item'
42
+ import ivGroupItem from './components/iv-group-item.vue'
43
43
  export default {
44
44
  name: 'ShIvForm',
45
45
  components: {
@@ -1,15 +1,22 @@
1
1
  <template>
2
2
  <div class="sh-preview">
3
- <template v-if="previewObj.component">
4
- <component :is="previewObj.component" :url="url" :width="width" :height="height" disabled />
5
- </template>
6
- <iframe v-else :src="(previewObj.base || '') + url + '#scrollbars=0&toolbar=0&statusbar=0'" :width="width" :height="height" frameborder="0"></iframe>
3
+ <component :is="componentName" v-bind="componentProps" :style="componentStyles" @rendered="onRendered" @error="onError" />
7
4
  </div>
8
5
  </template>
9
6
 
10
7
  <script>
8
+ import ShWord from '@vue-office/docx'
9
+ import '@vue-office/docx/lib/index.css'
10
+ import ShExcel from '@vue-office/excel'
11
+ import '@vue-office/excel/lib/index.css'
12
+ import ShPdf from '@vue-office/pdf'
11
13
  export default {
12
14
  name: 'ShPreview',
15
+ components: {
16
+ ShWord,
17
+ ShExcel,
18
+ ShPdf
19
+ },
13
20
  props: {
14
21
  type: {
15
22
  type: String
@@ -29,26 +36,42 @@ export default {
29
36
  default: '600px'
30
37
  }
31
38
  },
32
- data() {
33
- return {
34
- compTypeObj: [
35
- {
36
- types: ['word', 'doc', 'docx'],
37
- component: 'ShWord'
38
- },
39
- {
40
- types: ['excel', 'xlsx'],
41
- component: 'ShSheet'
42
- }
43
- ]
44
- }
45
- },
39
+ emits: ['ready', 'error'],
46
40
  computed: {
47
41
  previewType() {
48
42
  return (this.type && this.type.toLowerCase()) || (this.url && this.url.substr(this.url.lastIndexOf('.') + 1).toLowerCase())
49
43
  },
50
- previewObj() {
51
- return this.compTypeObj.find(item => item.types.includes(this.previewType)) || {}
44
+ componentName() {
45
+ if (['word', 'doc', 'docx'].includes(this.previewType)) {
46
+ return 'sh-word'
47
+ } else if (['excel', 'xlsx'].includes(this.previewType)) {
48
+ return 'sh-excel'
49
+ } else if (['pdf'].includes(this.previewType)) {
50
+ return 'sh-pdf'
51
+ }
52
+ return 'iframe'
53
+ },
54
+ componentProps() {
55
+ let srcPrefix = this.base || ''
56
+ let srcSuffix = this.componentName === 'iframe' ? '#scrollbars=0&toolbar=0&statusbar=0' : ''
57
+ return {
58
+ src: srcPrefix + this.url + srcSuffix,
59
+ frameborder: 0
60
+ }
61
+ },
62
+ componentStyles() {
63
+ return {
64
+ width: this.width,
65
+ height: this.height
66
+ }
67
+ }
68
+ },
69
+ methods: {
70
+ onRendered(data) {
71
+ this.$emit('ready', data)
72
+ },
73
+ onError(data) {
74
+ this.$emit('error', data)
52
75
  }
53
76
  }
54
77
  }
@@ -29,7 +29,7 @@
29
29
  </template>
30
30
 
31
31
  <script>
32
- import UImg from './u-img'
32
+ import UImg from './u-img.vue'
33
33
  export default {
34
34
  name: 'UList',
35
35
  components: {
@@ -58,7 +58,7 @@
58
58
  </template>
59
59
 
60
60
  <script>
61
- import UList from './components/u-list'
61
+ import UList from './components/u-list.vue'
62
62
  export default {
63
63
  name: 'ShUpload',
64
64
  components: {
@@ -178,7 +178,7 @@
178
178
  import defaultData from './mixin/defaultData'
179
179
  import props from './js/props'
180
180
  import methods from './js/methods'
181
- import importModal from './components/importModal'
181
+ import importModal from './components/importModal.vue'
182
182
  export default {
183
183
  name: 'ShTable',
184
184
  components: {
@@ -13,8 +13,8 @@
13
13
  </template>
14
14
 
15
15
  <script>
16
- import vxeDirectTree from './vxe-direct-tree'
17
- import vxeSelectTree from './vxe-select-tree'
16
+ import vxeDirectTree from './vxe-direct-tree.vue'
17
+ import vxeSelectTree from './vxe-select-tree.vue'
18
18
  import props from './js/props'
19
19
  export default {
20
20
  name: 'ShTree',
@@ -22,7 +22,7 @@
22
22
 
23
23
  <script>
24
24
  import defaultData from './mixin/defaultData'
25
- import tableTree from './components/table-tree'
25
+ import tableTree from './components/table-tree.vue'
26
26
  import treeMethods from './js/treeMethods'
27
27
  export default {
28
28
  name: 'ShDirectTree',
@@ -44,7 +44,7 @@
44
44
 
45
45
  <script>
46
46
  import defaultData from './mixin/defaultData'
47
- import tableTree from './components/table-tree'
47
+ import tableTree from './components/table-tree.vue'
48
48
  import treeMethods from './js/treeMethods'
49
49
  export default {
50
50
  name: 'ShSelectTree',
@@ -1,29 +1,27 @@
1
1
  // 全局公共封装组件
2
- import ShCard from './global-components/sh-card'
3
- import ShCodeEditor from './global-components/sh-code-editor'
4
- import ShCorner from './global-components/sh-corner'
5
- import ShCountTo from './global-components/sh-count-to'
6
- import ShEmpty from './global-components/sh-empty'
7
- import ShHeader from './global-components/sh-header'
8
- import ShIcon from './global-components/sh-icon'
9
- import ShIvForm from './global-components/sh-iv-form'
10
- import ShLayout from './global-components/sh-layout'
11
- import ShLoading from './global-components/sh-loading'
12
- import ShNoticeBar from './global-components/sh-noticebar'
13
- import ShPreview from './global-components/sh-preview'
14
- import ShPullRefresh from './global-components/sh-pull-refresh'
15
- import ShResult from './global-components/sh-result'
16
- import ShSheet from './global-components/sh-sheet'
17
- import ShUpload from './global-components/sh-upload'
18
- import ShForm from './global-components/sh-vxe-form'
19
- import ShList from './global-components/sh-vxe-list'
20
- import ShModal from './global-components/sh-vxe-modal'
21
- import ShQuery from './global-components/sh-vxe-query'
22
- import ShTable from './global-components/sh-vxe-table'
23
- import ShToolbar from './global-components/sh-vxe-toolbar'
24
- import ShTree from './global-components/sh-vxe-tree'
25
- import ShWaterFall from './global-components/sh-water-fall'
26
- import ShWord from './global-components/sh-word'
2
+ import ShCard from './global-components/sh-card/index.vue'
3
+ import ShCodeEditor from './global-components/sh-code-editor/index.vue'
4
+ import ShCorner from './global-components/sh-corner/index.vue'
5
+ import ShCountTo from './global-components/sh-count-to/index.vue'
6
+ import ShEmpty from './global-components/sh-empty/index.vue'
7
+ import ShHeader from './global-components/sh-header/index.vue'
8
+ import ShIcon from './global-components/sh-icon/index.vue'
9
+ import ShIvForm from './global-components/sh-iv-form/index.vue'
10
+ import ShLayout from './global-components/sh-layout/index.vue'
11
+ import ShLoading from './global-components/sh-loading/index.vue'
12
+ import ShNoticeBar from './global-components/sh-noticebar/index.vue'
13
+ import ShPreview from './global-components/sh-preview/index.vue'
14
+ import ShPullRefresh from './global-components/sh-pull-refresh/index.vue'
15
+ import ShResult from './global-components/sh-result/index.vue'
16
+ import ShUpload from './global-components/sh-upload/index.vue'
17
+ import ShForm from './global-components/sh-vxe-form/index.vue'
18
+ import ShList from './global-components/sh-vxe-list/index.vue'
19
+ import ShModal from './global-components/sh-vxe-modal/index.vue'
20
+ import ShQuery from './global-components/sh-vxe-query/index.vue'
21
+ import ShTable from './global-components/sh-vxe-table/index.vue'
22
+ import ShToolbar from './global-components/sh-vxe-toolbar/index.vue'
23
+ import ShTree from './global-components/sh-vxe-tree/index.vue'
24
+ import ShWaterFall from './global-components/sh-water-fall/index.vue'
27
25
 
28
26
  const components = {
29
27
  ShCard,
@@ -40,7 +38,6 @@ const components = {
40
38
  ShPreview,
41
39
  ShPullRefresh,
42
40
  ShResult,
43
- ShSheet,
44
41
  ShUpload,
45
42
  ShForm,
46
43
  ShList,
@@ -49,8 +46,7 @@ const components = {
49
46
  ShTable,
50
47
  ShToolbar,
51
48
  ShTree,
52
- ShWaterFall,
53
- ShWord
49
+ ShWaterFall
54
50
  }
55
51
 
56
52
  const index = {
@@ -43,7 +43,7 @@
43
43
  </template>
44
44
 
45
45
  <script>
46
- import menuBox from './menu-box'
46
+ import menuBox from './menu-box.vue'
47
47
  export default {
48
48
  name: 'MenuCard',
49
49
  components: {
@@ -3,7 +3,7 @@ import './css/index.scss'
3
3
  import VXETablePluginExportXLSX from 'vxe-table-plugin-export-xlsx'
4
4
  import VXETablePluginExportPDF from 'vxe-table-plugin-export-pdf'
5
5
  import XEClipboard from 'xe-clipboard'
6
- import { defaultPublicRenders, defaultExtraRenders, defaultFilterRenders, defaultPublicRendersNames } from './render/globalRenders'
6
+ import { defaultPublicRenders, defaultExtraRenders, defaultFilterRenders, defaultPublicRendersNames } from './render/globalRenders.jsx'
7
7
 
8
8
  let vxeOptions = {
9
9
  zIndex: 599,
@@ -1,32 +1,32 @@
1
1
  // 渲染器组件封装
2
- import vxeRenderInput from './cell/vxe-render-input'
3
- import vxeRenderTextarea from './cell/vxe-render-textarea'
4
- import vxeRenderSelect from './cell/vxe-render-select'
5
- import vxeRenderTree from './cell/vxe-render-tree'
6
- import vxeRenderTime from './cell/vxe-render-time'
7
- import vxeRenderProgress from './cell/vxe-render-progress'
8
- import vxeRenderSwitch from './cell/vxe-render-switch'
9
- import vxeRenderMoney from './cell/vxe-render-money'
10
- import vxeRenderCheckbox from './cell/vxe-render-checkbox'
11
- import vxeRenderCheckgroup from './cell/vxe-render-checkgroup'
12
- import vxeRenderRadio from './cell/vxe-render-radio'
13
- import vxeRenderRadiogroup from './cell/vxe-render-radiogroup'
14
- import vxeRenderTable from './cell/vxe-render-table'
15
- import vxeRenderImg from './cell/vxe-render-img'
16
- import vxeRenderHref from './cell/vxe-render-href'
17
- import vxeRenderUpload from './cell/vxe-render-upload'
18
- import vxeRenderCode from './cell/vxe-render-code'
19
- import vxeRenderGoption from './cell/vxe-render-goption'
2
+ import vxeRenderInput from './cell/vxe-render-input.vue'
3
+ import vxeRenderTextarea from './cell/vxe-render-textarea.vue'
4
+ import vxeRenderSelect from './cell/vxe-render-select.vue'
5
+ import vxeRenderTree from './cell/vxe-render-tree.vue'
6
+ import vxeRenderTime from './cell/vxe-render-time.vue'
7
+ import vxeRenderProgress from './cell/vxe-render-progress.vue'
8
+ import vxeRenderSwitch from './cell/vxe-render-switch.vue'
9
+ import vxeRenderMoney from './cell/vxe-render-money.vue'
10
+ import vxeRenderCheckbox from './cell/vxe-render-checkbox.vue'
11
+ import vxeRenderCheckgroup from './cell/vxe-render-checkgroup.vue'
12
+ import vxeRenderRadio from './cell/vxe-render-radio.vue'
13
+ import vxeRenderRadiogroup from './cell/vxe-render-radiogroup.vue'
14
+ import vxeRenderTable from './cell/vxe-render-table.vue'
15
+ import vxeRenderImg from './cell/vxe-render-img.vue'
16
+ import vxeRenderHref from './cell/vxe-render-href.vue'
17
+ import vxeRenderUpload from './cell/vxe-render-upload.vue'
18
+ import vxeRenderCode from './cell/vxe-render-code.vue'
19
+ import vxeRenderGoption from './cell/vxe-render-goption.vue'
20
20
 
21
21
  // 头部渲染器封装
22
- import vxeHeaderMoney from './header/vxe-header-money'
22
+ import vxeHeaderMoney from './header/vxe-header-money.vue'
23
23
 
24
24
  // 底部渲染器封装
25
- import vxeFooterInput from './footer/vxe-footer-input'
26
- import vxeFooterMoney from './footer/vxe-footer-money'
25
+ import vxeFooterInput from './footer/vxe-footer-input.vue'
26
+ import vxeFooterMoney from './footer/vxe-footer-money.vue'
27
27
 
28
28
  // 过滤器组件封装
29
- import vxeFilterInput from './filters/vxe-filter-input'
29
+ import vxeFilterInput from './filters/vxe-filter-input.vue'
30
30
 
31
31
  // 系统图片
32
32
  import imgPlaceholder from '../../assets/img/square-image.png'
@@ -1,173 +0,0 @@
1
- <template>
2
- <div :id="sheetId" ref="shSheet" class="sh-sheet" :style="sheetStyles"></div>
3
- </template>
4
-
5
- <script>
6
- export default {
7
- name: 'ShSheet',
8
- props: {
9
- option: {
10
- type: Object,
11
- default() {
12
- return {}
13
- }
14
- },
15
- title: {
16
- type: String,
17
- default: ''
18
- },
19
- width: {
20
- type: String,
21
- default: '100%'
22
- },
23
- height: {
24
- type: String,
25
- default: '600'
26
- },
27
- disabled: {
28
- type: Boolean
29
- },
30
- readonly: {
31
- type: Boolean
32
- },
33
- url: {
34
- type: String,
35
- default: ''
36
- }
37
- },
38
- data() {
39
- return {}
40
- },
41
- computed: {
42
- sheetId() {
43
- return 'ShSheet' + this._.uid
44
- },
45
- sheetStyles() {
46
- return {
47
- width: this.width,
48
- height: this.height
49
- }
50
- },
51
- sheetOption() {
52
- let { disabled, readonly, sheetId } = this
53
- let isedit = !disabled && !readonly
54
- let defaultOption = {
55
- title: this.title,
56
- lang: 'zh',
57
- // plugins: ['chart'],
58
- allowCopy: true, // 允许复制
59
- showinfobar: isedit,
60
- showtoolbar: isedit, // 工具栏
61
- showtoolbarConfig: {}, // 自定义工具栏
62
- showstatisticBar: true, // 底部计数栏
63
- showstatisticBarConfig: {
64
- count: true, // 计数栏
65
- view: true, // 打印视图
66
- zoom: true // 缩放
67
- }, // 自定义计数栏
68
- showsheetbar: true, // 底部sheet页
69
- showsheetbarConfig: {
70
- add: isedit, // 新增sheet
71
- menu: true, // sheet管理菜单
72
- sheet: true // sheet页显示
73
- }, // 自定义底部sheet页
74
- enableAddRow: isedit, // 允许添加行
75
- enableAddBackTop: true, // 允许回到顶部
76
- cellRightClickConfig: {
77
- copy: false, // 复制
78
- copyAs: false, // 复制为
79
- paste: false, // 粘贴
80
- insertRow: false, // 插入行
81
- insertColumn: false, // 插入列
82
- deleteRow: false, // 删除选中行
83
- deleteColumn: false, // 删除选中列
84
- deleteCell: false, // 删除单元格
85
- hideRow: false, // 隐藏选中行和显示选中行
86
- hideColumn: false, // 隐藏选中列和显示选中列
87
- rowHeight: false, // 行高
88
- columnWidth: false, // 列宽
89
- clear: false, // 清除内容
90
- matrix: false, // 矩阵操作选区
91
- sort: false, // 排序选区
92
- filter: false, // 筛选选区
93
- chart: false, // 图表生成
94
- image: false, // 插入图片
95
- link: false, // 插入链接
96
- data: false, // 数据验证
97
- cellFormat: false // 设置单元格格式
98
- }, // 自定义单元格右键菜单
99
- sheetRightClickConfig: {
100
- delete: false, // 删除
101
- copy: false, // 复制
102
- rename: false, // 重命名
103
- color: false, // 更改颜色
104
- hide: false, // 隐藏,取消隐藏
105
- move: false // 向左移,向右移
106
- }, // 自定义sheet页右击菜单
107
- sheetFormulaBar: isedit, // 是否显示公式栏
108
- defaultFontSize: 14, // 初始化默认字体大小
109
- functionButton: false, // 功能按钮
110
- data: [],
111
- userInfo: ''
112
- }
113
- return Object.assign(defaultOption, this.option, { container: sheetId })
114
- }
115
- },
116
- watch: {
117
- sheetOption: {
118
- handler() {
119
- this.sheetRender()
120
- },
121
- deep: true
122
- },
123
- url: {
124
- handler() {
125
- this.sheetRender()
126
- }
127
- }
128
- },
129
- mounted() {
130
- this.sheetRender()
131
- },
132
- methods: {
133
- async sheetRender() {
134
- const that = this
135
- try {
136
- window.luckysheet.destroy() // 先销毁当前容器
137
- let sheetOption = that.sheetOption
138
- if (that.url) {
139
- let contentJson = await that.getFileContent()
140
- sheetOption.data = contentJson.sheets
141
- sheetOption.title = contentJson.info.name
142
- sheetOption.userInfo = contentJson.info.creator
143
- }
144
- window.luckysheet.create(sheetOption)
145
- } catch (e) {
146
- that.msgerror(`初始化失败:${e.message}`)
147
- }
148
- },
149
- // 获取文件流
150
- async getFileContent() {
151
- return new Promise(async (resolve, reject) => {
152
- let fileRes = await this.$http.request({
153
- methods: 'get',
154
- url: this.url,
155
- responseType: 'blob'
156
- })
157
- window.LuckyExcel.transformExcelToLucky(fileRes, (exportJson, luckysheetfile) => {
158
- if (exportJson.sheets == null || exportJson.sheets.length === 0) {
159
- reject(new Error('读取excel文件内容失败!'))
160
- }
161
- resolve(exportJson)
162
- })
163
- })
164
- }
165
- }
166
- }
167
- </script>
168
-
169
- <style lang="scss" scoped>
170
- .sh-sheet {
171
- position: relative;
172
- }
173
- </style>
@@ -1,110 +0,0 @@
1
- <template>
2
- <div :ref="wordRef" class="sh-word"></div>
3
- </template>
4
-
5
- <script>
6
- let docxPreview = require('docx-preview')
7
- export default {
8
- name: 'ShWord',
9
- props: {
10
- option: {
11
- type: Object,
12
- default() {
13
- return {}
14
- }
15
- },
16
- title: {
17
- type: String,
18
- default: ''
19
- },
20
- width: {
21
- type: String,
22
- default: '100%'
23
- },
24
- height: {
25
- type: String,
26
- default: '600'
27
- },
28
- disabled: {
29
- type: Boolean
30
- },
31
- readonly: {
32
- type: Boolean
33
- },
34
- url: {
35
- type: String,
36
- default: ''
37
- }
38
- },
39
- data() {
40
- return {}
41
- },
42
- computed: {
43
- wordRef() {
44
- return 'shWord' + this._.uid
45
- },
46
- wordOption() {
47
- let defaultOption = {
48
- width: this.width,
49
- height: this.height,
50
- className: 'sh-word-wrap', //默认和文档样式类的类名/前缀
51
- inWrapper: true, //启用围绕文档内容呈现包装器
52
- ignoreWidth: true, //禁用页面的渲染宽度
53
- ignoreHeight: false, //禁用页面的渲染高度
54
- ignoreFonts: false, //禁用字体渲染
55
- breakPages: true, //在分页符上启用分页
56
- ignoreLastRenderedPageBreak: true, //在lastRenderedPageBreak元素上禁用分页
57
- experimental: false, //启用实验功能(制表符停止计算)
58
- trimXmlDeclaration: true, //如果为true,则在解析之前将从xml文档中删除xml声明
59
- useBase64URL: false, //如果为true,图像、字体等将转换为base 64 URL,否则使用URL.createObjectURL
60
- useMathMLPolyfill: false, //包括用于铬、边等的MathML多填充。
61
- showChanges: false, //启用文档更改的实验渲染(插入/删除)
62
- debug: false //启用额外的日志记录
63
- }
64
- return Object.assign(defaultOption, this.option)
65
- }
66
- },
67
- watch: {
68
- wordOption: {
69
- handler() {
70
- this.sheetRender()
71
- },
72
- deep: true
73
- },
74
- url: {
75
- handler() {
76
- this.sheetRender()
77
- }
78
- }
79
- },
80
- mounted() {
81
- this.wordRender()
82
- },
83
- methods: {
84
- async wordRender() {
85
- const that = this
86
- try {
87
- if (that.url) {
88
- let content = await that.getFileContent()
89
- docxPreview
90
- .renderAsync(content, that.$refs[that.wordRef], null, that.wordOption)
91
- .then(res => {})
92
- .catch(err => {})
93
- }
94
- } catch (e) {
95
- that.msgerror(`初始化失败:${e.message}`)
96
- }
97
- },
98
- // 获取文件流
99
- async getFileContent() {
100
- return this.$http.request({
101
- methods: 'get',
102
- url: this.url,
103
- responseType: 'blob'
104
- })
105
- }
106
- }
107
- }
108
- </script>
109
-
110
- <style lang="scss" scoped></style>