|
@@ -30,7 +30,7 @@
|
|
|
<ReplacePage />
|
|
|
<span>{{ $t('documentEditor.replace') }}</span>
|
|
|
</Button>
|
|
|
- <Button class="with-text" :class="{ disabled: !selectedPageList.length }" @click="">
|
|
|
+ <Button class="with-text" :class="{ disabled: !selectedPageList.length }" @click="openMovePageDialog">
|
|
|
<MovePage />
|
|
|
<span>{{ $t('documentEditor.move') }}</span>
|
|
|
</Button>
|
|
@@ -59,6 +59,7 @@
|
|
|
<InsertPageSettingDialog @insertPage="handleInsertPage" :selectedPageIndex="selectedPageList.length === 1 ? selectedPageList[0] + 1 : -1" :totalPages="pageList.length" />
|
|
|
<DeletePageDialog @deletePage="handleDeletePage" />
|
|
|
<ExtractPageSettingDialog @extractPage="handleExtractPage" :totalPages="pageList.length" :selectedPageList="selectedPageList" />
|
|
|
+ <MovePageSettingDialog @movePage="handleMovePage" :totalPages="pageList.length" :selectedPageList="selectedPageList" />
|
|
|
</template>
|
|
|
|
|
|
<script setup>
|
|
@@ -66,7 +67,6 @@ import { computed, ref, watch, onMounted, reactive, onUnmounted } from 'vue'
|
|
|
import { useViewerStore } from '@/stores/modules/viewer'
|
|
|
import { useDocumentStore } from '@/stores/modules/document'
|
|
|
import core from '@/core'
|
|
|
-import { saveAs } from 'file-saver'
|
|
|
|
|
|
const useViewer = useViewerStore()
|
|
|
const useDocument = useDocumentStore()
|
|
@@ -155,6 +155,7 @@ const selectPage = (index) => {
|
|
|
// 全选
|
|
|
const selectAll = () => {
|
|
|
if (selectedPageList.length < pageList.length) {
|
|
|
+ selectedPageList.length = 0
|
|
|
for (let i = 0; i < pageList.length; i++) {
|
|
|
selectedPageList.push(i)
|
|
|
}
|
|
@@ -296,6 +297,68 @@ const handleExtractPage = async (data) => {
|
|
|
selectedPageList.length = 0
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+// 打开移动页面弹窗
|
|
|
+const openMovePageDialog = () => {
|
|
|
+ useViewer.openElement('movePageSettingDialog')
|
|
|
+}
|
|
|
+
|
|
|
+// 移动页面
|
|
|
+const handleMovePage = (targetIndex) => {
|
|
|
+ if (selectedPageList.length === 1) { // 移动一页
|
|
|
+ const index = selectedPageList[0]
|
|
|
+ const tIndex = index > targetIndex ? targetIndex : targetIndex - 1
|
|
|
+ const [page] = pageList.splice(index, 1)
|
|
|
+ pageList.splice(tIndex, 0, page)
|
|
|
+
|
|
|
+ const operation = {
|
|
|
+ type: 'move',
|
|
|
+ index,
|
|
|
+ targetIndex: tIndex
|
|
|
+ }
|
|
|
+ core.saveDocumentEdit(operation)
|
|
|
+ useDocument.setDocEditorOperationList(operation)
|
|
|
+ selectedPageList[0] = tIndex
|
|
|
+
|
|
|
+ } else { // 移动多页
|
|
|
+ selectedPageList.sort((a, b) => a - b)
|
|
|
+
|
|
|
+ for (let i = 0; i < selectedPageList.length; i++) {
|
|
|
+ let index, tIndex
|
|
|
+ if (selectedPageList[i] === targetIndex) {
|
|
|
+ index = selectedPageList[i]
|
|
|
+ tIndex = targetIndex
|
|
|
+ } else if (selectedPageList[i] > targetIndex) {
|
|
|
+ index = selectedPageList[i]
|
|
|
+ if (selectedPageList.includes(targetIndex)) {
|
|
|
+ tIndex = targetIndex
|
|
|
+ for (let j = 0; j < selectedPageList.length; j++) {
|
|
|
+ if (selectedPageList[j] === tIndex) tIndex++
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ tIndex = targetIndex
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ index = selectedPageList[i] - i
|
|
|
+ tIndex = targetIndex - 1
|
|
|
+ }
|
|
|
+
|
|
|
+ if (selectedPageList.includes(index) && selectedPageList.includes(tIndex)) continue
|
|
|
+
|
|
|
+ const [page] = pageList.splice(index, 1)
|
|
|
+ pageList.splice(tIndex, 0, page)
|
|
|
+
|
|
|
+ const operation = {
|
|
|
+ type: 'move',
|
|
|
+ index,
|
|
|
+ targetIndex: tIndex
|
|
|
+ }
|
|
|
+ core.saveDocumentEdit(operation)
|
|
|
+ useDocument.setDocEditorOperationList(operation)
|
|
|
+ selectedPageList[i] = selectedPageList[i] > targetIndex ? tIndex : tIndex - i
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss">
|