@toolspack/ttd-pdfjs 0.0.9 → 0.1.0
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/README.md +14 -1
- package/lib/demo.html +8 -1
- package/lib/ttd-pdfjs.common.js +10485 -6736
- package/lib/ttd-pdfjs.umd.js +10487 -6739
- package/lib/ttd-pdfjs.umd.min.js +11 -24
- package/package.json +3 -3
- package/src/packages/pdfjs/PdfView216.vue +125 -68
- package/src/packages/pdfjs/SwitchPage.vue +139 -27
- /package/lib/static/fonts/{element-icons.ff18efd1.woff → element-icons.535877f5.woff} +0 -0
- /package/lib/static/fonts/{element-icons.f1a45d74.ttf → element-icons.732389de.ttf} +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@toolspack/ttd-pdfjs",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.1.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"main": "lib/ttd-pdfjs.umd.min.js",
|
|
6
6
|
"scripts": {
|
|
@@ -22,9 +22,9 @@
|
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
24
|
"@babel/plugin-proposal-class-properties": "^7.18.6",
|
|
25
|
-
"@vue/cli-plugin-babel": "~4.5.
|
|
25
|
+
"@vue/cli-plugin-babel": "~4.5.11",
|
|
26
26
|
"@vue/cli-plugin-eslint": "~4.5.11",
|
|
27
|
-
"@vue/cli-service": "
|
|
27
|
+
"@vue/cli-service": "^4.5.11",
|
|
28
28
|
"@vue/eslint-config-airbnb": "^5.3.0",
|
|
29
29
|
"babel-eslint": "^10.1.0",
|
|
30
30
|
"babel-plugin-component": "^1.1.1",
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="pdf-view">
|
|
3
3
|
<div class="pdf-view-control" v-if="showPages">
|
|
4
|
-
<switch-page ref="switchPage"
|
|
4
|
+
<switch-page ref="switchPage" :scale='compuscale' :rotate="compuRotate" :numPages="page_count"
|
|
5
|
+
:gage="page" :zoomEnable="zoomEnable" :rotateEnable="rotateEnable"
|
|
6
|
+
@page="onChangePage" @zoom="onScale" @rotate="onRotate"></switch-page>
|
|
5
7
|
</div>
|
|
6
8
|
<div class="pdf-view-area-wapper">
|
|
7
9
|
<div :style="style">
|
|
@@ -9,12 +11,13 @@
|
|
|
9
11
|
class="center pdf-view-area"
|
|
10
12
|
@drop="onDrop"
|
|
11
13
|
@dragover="onDragOver"
|
|
14
|
+
:key="pdfurl"
|
|
12
15
|
:style="{'border': border?'1px solid #666': ''}"
|
|
13
16
|
v-if="pdfurl"
|
|
14
17
|
>
|
|
15
18
|
<div v-if="fileLoading" class="pdf-view-loading">文件加载中...</div>
|
|
16
|
-
|
|
17
|
-
<canvas class="canvasstyle" ref="canvas"></canvas>
|
|
19
|
+
<div v-else-if="pageRendering" class="pdf-view-rendering">内容渲染中...</div>
|
|
20
|
+
<canvas :key="pdfurl +'canvas'" class="canvasstyle" ref="canvas"></canvas>
|
|
18
21
|
<div class="label-area">
|
|
19
22
|
<slot></slot>
|
|
20
23
|
</div>
|
|
@@ -56,6 +59,7 @@ if (getChromeVersion()) {
|
|
|
56
59
|
const PDFJS = require('pdfjs-dist')
|
|
57
60
|
|
|
58
61
|
const defautScale = 1.0
|
|
62
|
+
const defaultRotate = 0
|
|
59
63
|
// PDFJS.GlobalWorkerOptions.workerSrc = require('pdfjs-dist/legacy/build/pdf.worker.min.js')
|
|
60
64
|
PDFJS.GlobalWorkerOptions.workerSrc = require('pdfjs-dist/build/pdf.worker.min.js')
|
|
61
65
|
// https://unpkg.com/pdfjs-dist@2.16.105/cmaps/
|
|
@@ -64,6 +68,9 @@ PDFJS.GlobalWorkerOptions.workerSrc = require('pdfjs-dist/build/pdf.worker.min.j
|
|
|
64
68
|
|
|
65
69
|
const cMapUrl = 'https://wsp.totodi.com/staticfiles_web/web/pdfjs/cmaps/'
|
|
66
70
|
|
|
71
|
+
export const maxscale = 3
|
|
72
|
+
export const minscale = 0.2
|
|
73
|
+
|
|
67
74
|
export default {
|
|
68
75
|
components: { SwitchPage },
|
|
69
76
|
props: {
|
|
@@ -74,10 +81,23 @@ export default {
|
|
|
74
81
|
type: Number,
|
|
75
82
|
default: defautScale,
|
|
76
83
|
},
|
|
84
|
+
|
|
85
|
+
rotate: {
|
|
86
|
+
type: Number,
|
|
87
|
+
default: defaultRotate,
|
|
88
|
+
},
|
|
77
89
|
showPages: {
|
|
78
90
|
type: [String, Number, Boolean],
|
|
79
91
|
default: true,
|
|
80
92
|
},
|
|
93
|
+
zoomEnable: {
|
|
94
|
+
type: [String, Number, Boolean],
|
|
95
|
+
default: false,
|
|
96
|
+
},
|
|
97
|
+
rotateEnable: {
|
|
98
|
+
type: [String, Number, Boolean],
|
|
99
|
+
default: false,
|
|
100
|
+
},
|
|
81
101
|
border: {
|
|
82
102
|
type: [String, Number, Boolean],
|
|
83
103
|
default: true,
|
|
@@ -104,9 +124,10 @@ export default {
|
|
|
104
124
|
fileLoading: true,
|
|
105
125
|
pageNumPending: null,
|
|
106
126
|
compuscale: defautScale, // 放大倍数
|
|
127
|
+
compuRotate: 0, // 实际旋转度数
|
|
107
128
|
page_count: 0, // 总页数
|
|
108
|
-
maxscale
|
|
109
|
-
minscale
|
|
129
|
+
maxscale, // 最大放大倍数
|
|
130
|
+
minscale, // 最小放大倍数
|
|
110
131
|
isready: false,
|
|
111
132
|
initPage: true, // 初始化页面
|
|
112
133
|
style: {
|
|
@@ -117,57 +138,67 @@ export default {
|
|
|
117
138
|
},
|
|
118
139
|
methods: {
|
|
119
140
|
async renderPage(num) {
|
|
141
|
+
console.log('renderPage ', this.pageRendering)
|
|
142
|
+
if (this.pageRendering) {
|
|
143
|
+
this.pageNumPending = num;
|
|
144
|
+
} else {
|
|
120
145
|
// 渲染pdf
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
let scaleNum = vm.compuscale
|
|
127
|
-
let viewport = ''
|
|
128
|
-
const viewboxWidth = this.showWidth
|
|
129
|
-
if (this.initPage && viewboxWidth) {
|
|
130
|
-
const desiredWidth = parseInt(viewboxWidth, 10) - 2
|
|
131
|
-
// 首先获得pdf 原本宽度,然后根据showWidth 计算缩放倍数
|
|
132
|
-
viewport = page.getViewport({ scale: 1.0 })
|
|
133
|
-
scaleNum = desiredWidth / viewport.width
|
|
134
|
-
this.initPage = false
|
|
135
|
-
this.compuscale = scaleNum
|
|
136
|
-
this.maxscale = scaleNum
|
|
146
|
+
const vm = this
|
|
147
|
+
this.pageRendering = true
|
|
148
|
+
// Using promise to fetch the page
|
|
149
|
+
if (!this.pdfDoc) {
|
|
150
|
+
return false
|
|
137
151
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
152
|
+
try {
|
|
153
|
+
const page = await this.pdfDoc.getPage(num)
|
|
154
|
+
let scaleNum = vm.compuscale
|
|
155
|
+
let viewport = ''
|
|
156
|
+
const viewboxWidth = this.showWidth
|
|
157
|
+
if (this.initPage && viewboxWidth) {
|
|
158
|
+
const desiredWidth = parseInt(viewboxWidth, 10) - 2
|
|
159
|
+
// 首先获得pdf 原本宽度,然后根据showWidth 计算缩放倍数
|
|
160
|
+
viewport = page.getViewport({ scale: 1.0 })
|
|
161
|
+
scaleNum = desiredWidth / viewport.width
|
|
162
|
+
this.initPage = false
|
|
163
|
+
this.compuscale = scaleNum
|
|
164
|
+
this.maxscale = scaleNum
|
|
165
|
+
}
|
|
166
|
+
// 重新渲染 缩放过的PDF
|
|
167
|
+
viewport = page.getViewport({ scale: scaleNum, rotation: this.compuRotate })
|
|
168
|
+
this.viewport = viewport
|
|
141
169
|
|
|
142
|
-
|
|
143
|
-
|
|
170
|
+
// 将 canvas 尺寸 传给父组件
|
|
171
|
+
this.$emit('size', viewport, num)
|
|
144
172
|
|
|
145
|
-
|
|
146
|
-
|
|
173
|
+
// Render PDF page into canvas context
|
|
174
|
+
vm.isready = true
|
|
147
175
|
|
|
148
|
-
|
|
176
|
+
const { canvas } = vm.$refs
|
|
149
177
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
178
|
+
this.style.width = `${viewport.width + 2}px`;
|
|
179
|
+
canvas.height = viewport.height
|
|
180
|
+
canvas.width = viewport.width
|
|
153
181
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
182
|
+
const renderContext = {
|
|
183
|
+
canvasContext: canvas.getContext('2d'),
|
|
184
|
+
viewport,
|
|
185
|
+
}
|
|
186
|
+
// Wait for rendering to finish
|
|
187
|
+
await page.render(renderContext).promise
|
|
188
|
+
// console.log(' await page.render 168')
|
|
189
|
+
vm.pageRendering = false
|
|
190
|
+
if (vm.pageNumPending !== null) {
|
|
162
191
|
// New page rendering is pending
|
|
163
|
-
|
|
164
|
-
|
|
192
|
+
vm.renderPage(vm.pageNumPending)
|
|
193
|
+
vm.pageNumPending = null
|
|
194
|
+
}
|
|
195
|
+
this.$emit('renderSuccess')
|
|
196
|
+
} catch (error) {
|
|
197
|
+
console.error(error)
|
|
198
|
+
} finally {
|
|
199
|
+
// console.log('finally 178')
|
|
200
|
+
this.pageRendering = false
|
|
165
201
|
}
|
|
166
|
-
this.$emit('renderSuccess')
|
|
167
|
-
} catch (error) {
|
|
168
|
-
console.error(error)
|
|
169
|
-
} finally {
|
|
170
|
-
this.pageRendering = false
|
|
171
202
|
}
|
|
172
203
|
},
|
|
173
204
|
prev() {
|
|
@@ -206,13 +237,15 @@ export default {
|
|
|
206
237
|
}
|
|
207
238
|
this.viewport = null
|
|
208
239
|
this.pdfDoc.destroy();
|
|
240
|
+
// console.log('closepdf end')
|
|
209
241
|
}
|
|
210
|
-
this.pdfDoc = null
|
|
242
|
+
// this.pdfDoc = null
|
|
211
243
|
this.isready = false
|
|
212
244
|
this.compuscale = this.scale
|
|
213
245
|
this.$emit('closepdf')
|
|
214
246
|
},
|
|
215
247
|
queueRenderPage(num) {
|
|
248
|
+
// console.log('queueRenderPage 226', this.pageRendering)
|
|
216
249
|
if (this.pageRendering) {
|
|
217
250
|
this.pageNumPending = num
|
|
218
251
|
} else {
|
|
@@ -231,6 +264,10 @@ export default {
|
|
|
231
264
|
// console.log('-----encodeURI------', url)
|
|
232
265
|
// }
|
|
233
266
|
console.log('----PdfView---', url)
|
|
267
|
+
if (this.pdfDoc) {
|
|
268
|
+
// console.log('pdfDocument is ready destroy,,')
|
|
269
|
+
this.pdfDoc.destroy();
|
|
270
|
+
}
|
|
234
271
|
let pdfDoc_
|
|
235
272
|
try {
|
|
236
273
|
pdfDoc_ = await PDFJS.getDocument({
|
|
@@ -249,16 +286,13 @@ export default {
|
|
|
249
286
|
} finally {
|
|
250
287
|
this.fileLoading = false
|
|
251
288
|
}
|
|
252
|
-
|
|
253
|
-
//
|
|
254
|
-
if (this.pdfDoc) {
|
|
255
|
-
console.log('pdfDocument is ready destroy,,')
|
|
256
|
-
await this.closepdf();
|
|
257
|
-
this.pdfDoc = null
|
|
258
|
-
}
|
|
289
|
+
// console.log('pdfDoc_', pdfDoc_)
|
|
290
|
+
// debugger
|
|
259
291
|
this.pdfDoc = pdfDoc_
|
|
292
|
+
// 初始化pdf
|
|
260
293
|
this.page_count = pdfDoc_.numPages
|
|
261
294
|
this.$emit('numPages', pdfDoc_.numPages)
|
|
295
|
+
// console.log('265', this.pageRendering)
|
|
262
296
|
this.renderPage(this.pageNum)
|
|
263
297
|
this.emitPage(this.pageNum)
|
|
264
298
|
},
|
|
@@ -272,15 +306,19 @@ export default {
|
|
|
272
306
|
},
|
|
273
307
|
updateScale() {
|
|
274
308
|
this.compuscale = this.scale
|
|
309
|
+
// console.log('updateScale 278')
|
|
310
|
+
this.renderPage(this.pageNum)
|
|
311
|
+
},
|
|
312
|
+
onScale(scale) {
|
|
313
|
+
this.compuscale = scale
|
|
314
|
+
this.renderPage(this.pageNum)
|
|
315
|
+
},
|
|
316
|
+
onRotate(rotate) {
|
|
317
|
+
this.compuRotate = rotate
|
|
275
318
|
this.renderPage(this.pageNum)
|
|
276
319
|
},
|
|
277
320
|
},
|
|
278
321
|
mounted() {
|
|
279
|
-
this.compuscale = this.scale
|
|
280
|
-
// this.initPage = true
|
|
281
|
-
// if (this.pdfurl) {
|
|
282
|
-
// this.loadUrl(this.pdfurl)
|
|
283
|
-
// }
|
|
284
322
|
},
|
|
285
323
|
beforeDestroy() {
|
|
286
324
|
// console.log('---', this.pdfDoc)
|
|
@@ -289,21 +327,34 @@ export default {
|
|
|
289
327
|
}
|
|
290
328
|
},
|
|
291
329
|
watch: {
|
|
292
|
-
scale
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
330
|
+
scale: {
|
|
331
|
+
handler(val) {
|
|
332
|
+
if (val) {
|
|
333
|
+
this.compuscale = val
|
|
334
|
+
}
|
|
335
|
+
},
|
|
336
|
+
immediate: true,
|
|
337
|
+
},
|
|
338
|
+
rotate: {
|
|
339
|
+
handler(val) {
|
|
340
|
+
if (val) {
|
|
341
|
+
this.compuRotate = val
|
|
342
|
+
}
|
|
343
|
+
},
|
|
344
|
+
immediate: true,
|
|
296
345
|
},
|
|
297
346
|
pdfurl: {
|
|
298
347
|
handler(val) {
|
|
348
|
+
// console.log('watch url change: ', val)
|
|
349
|
+
if (this.pdfDoc) {
|
|
350
|
+
// console.log('closepdf')
|
|
351
|
+
this.closepdf();
|
|
352
|
+
}
|
|
299
353
|
this.$nextTick(() => {
|
|
300
354
|
if (val) {
|
|
301
355
|
this.pageNum = 1
|
|
302
356
|
this.initPage = true
|
|
303
357
|
this.loadUrl(val)
|
|
304
|
-
if (this.pdfDoc) {
|
|
305
|
-
this.closepdf();
|
|
306
|
-
}
|
|
307
358
|
}
|
|
308
359
|
if (this.showPages) {
|
|
309
360
|
this.$refs.switchPage.setPage(1)
|
|
@@ -314,7 +365,13 @@ export default {
|
|
|
314
365
|
},
|
|
315
366
|
// 监听页码变化,渲染对应合同页
|
|
316
367
|
page(newPage, oldPage) {
|
|
317
|
-
|
|
368
|
+
// console.log('watch page change: ', newPage)
|
|
369
|
+
if (this.pdfDoc) {
|
|
370
|
+
this.queueRenderPage(newPage)
|
|
371
|
+
} else {
|
|
372
|
+
this.pageNum = newPage
|
|
373
|
+
// console.log('no pdfDoc')
|
|
374
|
+
}
|
|
318
375
|
},
|
|
319
376
|
},
|
|
320
377
|
}
|
|
@@ -1,79 +1,191 @@
|
|
|
1
1
|
<template lang="html">
|
|
2
2
|
<div class="switch-page">
|
|
3
|
-
<
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
</
|
|
3
|
+
<div class='switch-page-btn'>
|
|
4
|
+
<el-button size="mini" @click="switchPage('prev')" icon=el-icon-arrow-up>上一页</el-button>
|
|
5
|
+
<el-button size="mini" @click="switchPage('next')" icon=el-icon-arrow-down>下一页</el-button>
|
|
6
|
+
<span style="margin-left: 6px">
|
|
7
|
+
<el-input v-model.number="itemPage" style="width: 50px;margin: 0 4px; font-size:14px;" size="mini"
|
|
8
|
+
@keyup.native.enter="goPage" @change="goPage"></el-input>/{{numPages}}
|
|
9
|
+
</span>
|
|
10
|
+
</div>
|
|
11
|
+
<div class='switch-page-scale'>
|
|
12
|
+
<el-button size="mini" :disabled="!zoomEnable" @click="zoomIn" icon=el-icon-minus></el-button>
|
|
13
|
+
<el-button size="mini" :disabled="!zoomEnable" @click="zoomOut" icon=el-icon-plus></el-button>
|
|
14
|
+
<el-select v-model="itemScale" :disabled="!zoomEnable" @change=onZoomChange size="mini" style="margin-left:10px" placeholder="请选择">
|
|
15
|
+
<el-option
|
|
16
|
+
v-for="item in EnumOptions"
|
|
17
|
+
:key="item.value"
|
|
18
|
+
:label="item.label"
|
|
19
|
+
:value="item.value">
|
|
20
|
+
</el-option>
|
|
21
|
+
</el-select>
|
|
22
|
+
</div>
|
|
23
|
+
<div class='switch-page-rotate'>
|
|
24
|
+
<el-button size="mini" @click="rotateRight" :disabled="!rotateEnable" icon=el-icon-refresh-right>顺时针旋转</el-button>
|
|
25
|
+
<el-button size="mini" @click="rotateLeft" :disabled="!rotateEnable" icon=el-icon-refresh-left>逆时针旋转</el-button>
|
|
26
|
+
</div>
|
|
11
27
|
</div>
|
|
12
28
|
</template>
|
|
13
29
|
|
|
14
30
|
<script>
|
|
31
|
+
import { maxscale, minscale } from './PdfView216.vue'
|
|
32
|
+
|
|
33
|
+
export const EnumOptions = [
|
|
34
|
+
// { label: '自动缩放', value: '' },
|
|
35
|
+
// { label: '实际大小', value: '' },
|
|
36
|
+
// { label: '适合页面', value: '' },
|
|
37
|
+
// { label: '适合页宽', value: 'auto' },
|
|
38
|
+
{ label: '50%', value: '50%' },
|
|
39
|
+
{ label: '75%', value: '75%' },
|
|
40
|
+
{ label: '100%', value: '100%' },
|
|
41
|
+
{ label: '125%', value: '125%' },
|
|
42
|
+
{ label: '150%', value: '150%' },
|
|
43
|
+
{ label: '200%', value: '200%' },
|
|
44
|
+
{ label: '300%', value: '300%' },
|
|
45
|
+
]
|
|
15
46
|
export default {
|
|
16
47
|
name: 'switch-page',
|
|
17
48
|
props: {
|
|
18
49
|
numPages: {
|
|
19
50
|
type: [Number, String],
|
|
20
51
|
},
|
|
52
|
+
page: {
|
|
53
|
+
type: [Number, String],
|
|
54
|
+
default: 1,
|
|
55
|
+
},
|
|
56
|
+
scale: {
|
|
57
|
+
type: [Number],
|
|
58
|
+
default: 1,
|
|
59
|
+
},
|
|
60
|
+
rotate: {
|
|
61
|
+
type: [Number],
|
|
62
|
+
default: 0,
|
|
63
|
+
},
|
|
64
|
+
zoomEnable: {
|
|
65
|
+
type: [String, Number, Boolean],
|
|
66
|
+
default: false,
|
|
67
|
+
},
|
|
68
|
+
rotateEnable: {
|
|
69
|
+
type: [String, Number, Boolean],
|
|
70
|
+
default: false,
|
|
71
|
+
},
|
|
21
72
|
},
|
|
22
73
|
data() {
|
|
23
74
|
return {
|
|
24
|
-
|
|
25
|
-
|
|
75
|
+
itemPage: '', // 内部保存的页码,
|
|
76
|
+
EnumOptions,
|
|
77
|
+
itemScale: 'auto',
|
|
78
|
+
itemRotate: 0,
|
|
26
79
|
}
|
|
27
80
|
},
|
|
28
81
|
watch: {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
82
|
+
page: {
|
|
83
|
+
handler(value) {
|
|
84
|
+
this.itemPage = value
|
|
85
|
+
},
|
|
86
|
+
immediate: true,
|
|
87
|
+
},
|
|
88
|
+
numPages: {
|
|
89
|
+
handler(value) {
|
|
90
|
+
this.itemPage = 1
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
scale: {
|
|
94
|
+
handler(value) {
|
|
95
|
+
this.itemScale = `${Math.round(value * 100)}%`
|
|
96
|
+
},
|
|
97
|
+
immediate: true,
|
|
98
|
+
},
|
|
99
|
+
rotate: {
|
|
100
|
+
handler(value) {
|
|
101
|
+
this.itemRotate = value
|
|
102
|
+
},
|
|
103
|
+
immediate: true,
|
|
32
104
|
},
|
|
33
105
|
},
|
|
34
106
|
methods: {
|
|
35
107
|
switchPage(str) {
|
|
36
108
|
if (str === 'prev') {
|
|
37
|
-
if (this.
|
|
109
|
+
if (this.itemPage === 1) {
|
|
38
110
|
return
|
|
39
111
|
}
|
|
40
|
-
this.
|
|
112
|
+
this.itemPage--
|
|
41
113
|
}
|
|
42
114
|
if (str === 'next') {
|
|
43
|
-
if (this.
|
|
115
|
+
if (this.itemPage === this.numPages) {
|
|
44
116
|
this.$message({ message: '当前已是最后一页', type: 'warning' })
|
|
45
117
|
return
|
|
46
118
|
}
|
|
47
|
-
this.
|
|
119
|
+
this.itemPage++
|
|
48
120
|
}
|
|
49
|
-
this.$emit('page', this.
|
|
121
|
+
this.$emit('page', this.itemPage)
|
|
50
122
|
},
|
|
51
123
|
setPage(page = 1) {
|
|
52
|
-
this.
|
|
124
|
+
this.itemPage = page
|
|
53
125
|
},
|
|
54
126
|
goPage() {
|
|
55
127
|
if (this.itemPage > 0) {
|
|
56
128
|
if (this.itemPage >= this.numPages) {
|
|
57
|
-
this.
|
|
58
|
-
this.itemPage = this.page
|
|
59
|
-
} else {
|
|
60
|
-
this.page = this.itemPage
|
|
129
|
+
this.itemPage = this.numPages
|
|
61
130
|
}
|
|
62
|
-
|
|
131
|
+
} else {
|
|
132
|
+
this.itemPage = 1
|
|
133
|
+
}
|
|
134
|
+
this.$emit('page', this.itemPage)
|
|
135
|
+
},
|
|
136
|
+
zoomIn() {
|
|
137
|
+
let numScale = window.parseInt(this.itemScale)
|
|
138
|
+
if (Number.isNaN(numScale)) {
|
|
139
|
+
numScale = 100
|
|
140
|
+
this.itemScale = `${numScale}%`
|
|
141
|
+
this.$emit('zoom', numScale / 100)
|
|
142
|
+
}
|
|
143
|
+
if (numScale > minscale * 100) {
|
|
144
|
+
numScale -= 10
|
|
145
|
+
this.itemScale = `${numScale}%`
|
|
146
|
+
this.$emit('zoom', numScale / 100)
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
zoomOut() {
|
|
150
|
+
let numScale = window.parseInt(this.itemScale)
|
|
151
|
+
if (Number.isNaN(numScale)) {
|
|
152
|
+
numScale = 100
|
|
153
|
+
this.itemScale = `${numScale}%`
|
|
154
|
+
this.$emit('zoom', numScale / 100)
|
|
155
|
+
}
|
|
156
|
+
if (numScale < maxscale * 100) {
|
|
157
|
+
numScale += 10
|
|
158
|
+
this.itemScale = `${numScale}%`
|
|
159
|
+
this.$emit('zoom', numScale / 100)
|
|
63
160
|
}
|
|
64
161
|
},
|
|
162
|
+
onZoomChange() {
|
|
163
|
+
const numScale = window.parseInt(this.itemScale)
|
|
164
|
+
this.$emit('zoom', numScale / 100)
|
|
165
|
+
},
|
|
166
|
+
rotateRight() {
|
|
167
|
+
this.$emit('rotate', this.itemRotate + 90)
|
|
168
|
+
},
|
|
169
|
+
rotateLeft() {
|
|
170
|
+
this.$emit('rotate', this.itemRotate - 90)
|
|
171
|
+
},
|
|
65
172
|
},
|
|
66
173
|
}
|
|
67
174
|
</script>
|
|
68
175
|
|
|
69
|
-
<style lang="
|
|
176
|
+
<style lang="less" scoped>
|
|
70
177
|
.switch-page {
|
|
71
178
|
margin: 0;
|
|
72
179
|
padding: 0;
|
|
73
|
-
|
|
180
|
+
display: flex;
|
|
181
|
+
flex-direction: row;
|
|
182
|
+
.switch-page-scale{
|
|
183
|
+
flex: 1;
|
|
184
|
+
text-align: center;
|
|
185
|
+
}
|
|
74
186
|
}
|
|
75
187
|
.switch-page button {
|
|
76
|
-
font-size:
|
|
188
|
+
font-size: 14px;
|
|
77
189
|
padding: 6px !important;
|
|
78
190
|
}
|
|
79
191
|
</style>
|
|
File without changes
|
|
File without changes
|