|
@@ -8,7 +8,7 @@
|
|
|
<img src="../assets/image/icon.png" class="soft-icon" />
|
|
|
<span style="letter-spacing: 2px;">{{productName}}</span>
|
|
|
</p>
|
|
|
- <el-menu default-active="1" class="xy-menu" active-text-color="#409EFF" background-color="#333744" text-color="#fff" style="margin-top: 10px;">
|
|
|
+ <el-menu :default-active="menuIndex" class="xy-menu" active-text-color="#409EFF" background-color="#333744" text-color="#fff" style="margin-top: 10px;">
|
|
|
<el-menu-item index="1" @click="setMenuIndex(1)">
|
|
|
<img src="../assets/image/n-huo.png" class="menu-img"/>
|
|
|
<span slot="title">常用转换</span>
|
|
@@ -187,14 +187,13 @@
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
</div>
|
|
|
-
|
|
|
</template>
|
|
|
|
|
|
<template v-else>
|
|
|
<el-row type="flex" class="row-bg">
|
|
|
<el-col :span="1" style="text-align: right;">
|
|
|
<el-button style="margin-top: 8px;" type="primary" size="mini"
|
|
|
- icon="el-icon-s-home" circle @click="activeName=''"></el-button>
|
|
|
+ icon="el-icon-s-home" circle @click="activeName='';menuIndex='1'"></el-button>
|
|
|
</el-col>
|
|
|
<el-col :span="23" style="padding: 0 15px;">
|
|
|
<el-tabs v-model="activeName" v-if="activeName.split('-')[0] == '2'">
|
|
@@ -275,21 +274,34 @@
|
|
|
|
|
|
<div class="soft-content" v-else>
|
|
|
<div class="content-left">
|
|
|
- <p class="title">
|
|
|
- <i class="el-icon-notebook-2"></i>
|
|
|
- 文件列表
|
|
|
- <span style="color: #F22C40;">{{ loadingTips }}</span>
|
|
|
- </p>
|
|
|
<div class="table-scroll" @dragover.prevent @drop="handleDrop">
|
|
|
- <vxe-table
|
|
|
- show-overflow
|
|
|
- class="img-table"
|
|
|
- max-height="100%"
|
|
|
- empty-text="没有更多数据了!"
|
|
|
- :row-config="{isHover: true}"
|
|
|
- :edit-config="{trigger: 'click', mode: 'cell'}"
|
|
|
- :data="this[listStr + 'List']"
|
|
|
- :scroll-y="{enabled: true}">
|
|
|
+
|
|
|
+ <vxe-table v-show="['1-1','1-2','1-3','1-4','1-5','1-6','3-6','3-7'].indexOf(activeName) > -1"
|
|
|
+ show-overflow class="img-table" max-height="100%" empty-text="没有更多数据了!" :row-config="{isHover: true}"
|
|
|
+ :edit-config="{trigger: 'click', mode: 'cell'}" :data="this[listStr + 'List']" :scroll-y="{enabled: true}">
|
|
|
+ <vxe-column field="name" title="文件名"></vxe-column>
|
|
|
+ <vxe-column field="size" title="大小" width="120"></vxe-column>
|
|
|
+ <vxe-column field="totalPages" title="总页数" width="100"></vxe-column>
|
|
|
+ <vxe-column field="progress" title="页码" width="180">
|
|
|
+ <template #default="{ row, rowIndex }">
|
|
|
+ <el-button size="small" type="warning" @click="selectPageNum(rowIndex)" v-if="!row.selectPages || row.selectPages.length == 0">全部页码</el-button>
|
|
|
+ <el-button size="small" type="warning" @click="selectPageNum(rowIndex)" v-else>{{row.selectPages.join(',')}}</el-button>
|
|
|
+ </template>
|
|
|
+ </vxe-column>
|
|
|
+ <vxe-column field="progress" title="进度" width="180">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <el-progress :text-inside="true" :stroke-width="20" :percentage="row.percent"></el-progress>
|
|
|
+ </template>
|
|
|
+ </vxe-column>
|
|
|
+ <vxe-column title="操作" width="80">
|
|
|
+ <template #default="{ row, rowIndex }">
|
|
|
+ <i class="el-icon-delete cur-pointer" @click="delFile(rowIndex)"></i>
|
|
|
+ </template>
|
|
|
+ </vxe-column>
|
|
|
+ </vxe-table>
|
|
|
+
|
|
|
+ <vxe-table v-show="['1-1','1-2','1-3','1-4','1-5','1-6','3-6','3-7'].indexOf(activeName) == -1" show-overflow class="img-table" max-height="100%" empty-text="没有更多数据了!" :row-config="{isHover: true}"
|
|
|
+ :edit-config="{trigger: 'click', mode: 'cell'}" :data="this[listStr + 'List']" :scroll-y="{enabled: true}">
|
|
|
<vxe-column field="name" title="文件名"></vxe-column>
|
|
|
<vxe-column field="size" title="大小" width="120"></vxe-column>
|
|
|
<vxe-column field="progress" title="进度" width="180">
|
|
@@ -307,6 +319,207 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
+ <!-- 底部设置区域 -->
|
|
|
+ <div class="img-footer-area" v-if="this[listStr + 'List'].length > 0">
|
|
|
+ <div class="footer-line-between">
|
|
|
+ <!-- 1格式转化 -->
|
|
|
+ <div class="handle-item" v-if="menuIndex == '1' || menuIndex == '2'">
|
|
|
+ <label class="handle-label">输出格式:</label>
|
|
|
+ <el-select v-model="handleData.format" style="width:80px;" size="small">
|
|
|
+ <el-option v-for="(item, key) in outputVedio" :key="key" :value="item" :label="item"></el-option>
|
|
|
+ </el-select>
|
|
|
+
|
|
|
+ <label class="handle-label">视频清晰度:</label>
|
|
|
+ <el-select v-model="handleData.type" style="width:100px" size="small" @change="selectVideoType">
|
|
|
+ <el-option :value="1" label="画质区分"></el-option>
|
|
|
+ <el-option :value="2" label="码率区分"></el-option>
|
|
|
+ </el-select>
|
|
|
+
|
|
|
+ <template v-if="handleData.type == 2">
|
|
|
+ <label class="handle-label">视频码率:</label>
|
|
|
+ <el-select v-model="handleData.quality" style="width:100px;" size="small">
|
|
|
+ <el-option value="1" label="同源视频"></el-option>
|
|
|
+ <el-option value="1m" label="1Mbit/s"></el-option>
|
|
|
+ <el-option value="1.5m" label="1.5Mbit/s"></el-option>
|
|
|
+ <el-option value="2m" label="2Mbit/s"></el-option>
|
|
|
+ <el-option value="3m" label="3Mbit/s"></el-option>
|
|
|
+ <el-option value="4m" label="4Mbit/s"></el-option>
|
|
|
+ <el-option value="5m" label="5Mbit/s"></el-option>
|
|
|
+ <el-option value="8m" label="8Mbit/s"></el-option>
|
|
|
+ <el-option value="10m" label="10Mbit/s"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </template>
|
|
|
+ <template v-else>
|
|
|
+ <label class="handle-label">视频画质:</label>
|
|
|
+ <el-select v-model="handleData.quality" style="width:80px" size="small">
|
|
|
+ <el-option value="1" label="原画"></el-option>
|
|
|
+ <el-option value="2" label="高清"></el-option>
|
|
|
+ <el-option value="3" label="流畅"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <label class="handle-label">视频分辨率:</label>
|
|
|
+ <el-select v-model="handleData.fenbianlv" style="width:120px;" size="small" @change="changeFenbianlv">
|
|
|
+ <el-option :value="-1" label="同原视频"></el-option>
|
|
|
+ <el-option :value="1" label="3840*2160"></el-option>
|
|
|
+ <el-option :value="2" label="1280*720"></el-option>
|
|
|
+ <el-option :value="3" label="720*576"></el-option>
|
|
|
+ <el-option :value="4" label="640*480"></el-option>
|
|
|
+ <el-option :value="5" label="自定义"></el-option>
|
|
|
+ <el-option :value="6" label="自定义(16:9)"></el-option>
|
|
|
+ <el-option :value="7" label="自定义(4:3)"></el-option>
|
|
|
+ </el-select>
|
|
|
+
|
|
|
+ <template v-if="[5, 6, 7].includes(handleData.fenbianlv)">
|
|
|
+ <label class="handle-label">宽:</label>
|
|
|
+ <el-input-number size="small" v-model="handleData.width" style="width: 100px;" controls-position="right" @change="changeWidth" :min="1"></el-input-number>
|
|
|
+
|
|
|
+ <label class="handle-label">高:</label>
|
|
|
+ <el-input-number size="small" v-model="handleData.height" style="width: 100px;" controls-position="right" @change="changeHeight" :min="1"></el-input-number>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 3视频转gif -->
|
|
|
+ <div class="handle-item" v-if="menuIndex == '3'">
|
|
|
+ <label class="handle-label">视频分辨率:</label>
|
|
|
+ <el-select v-model="handleData.fenbianlv" style="width:100px;" size="small" @change="changeFenbianlv">
|
|
|
+ <el-option :value="-1" label="同原视频"></el-option>
|
|
|
+ <el-option :value="1" label="3840*2160"></el-option>
|
|
|
+ <el-option :value="2" label="1280*720"></el-option>
|
|
|
+ <el-option :value="3" label="720*576"></el-option>
|
|
|
+ <el-option :value="4" label="640*480"></el-option>
|
|
|
+ <el-option :value="5" label="自定义"></el-option>
|
|
|
+ <el-option :value="6" label="自定义(16:9)"></el-option>
|
|
|
+ <el-option :value="7" label="自定义(4:3)"></el-option>
|
|
|
+ </el-select>
|
|
|
+ <template v-if="[5, 6, 7].includes(handleData.fenbianlv)">
|
|
|
+ <label class="handle-label">宽:</label>
|
|
|
+ <el-input-number size="small" v-model="handleData.width" style="width: 100px;" controls-position="right" @change="changeWidth" :min="1"></el-input-number>
|
|
|
+
|
|
|
+ <label class="handle-label">高:</label>
|
|
|
+ <el-input-number size="small" v-model="handleData.height" style="width: 100px;" controls-position="right" @change="changeHeight" :min="1"></el-input-number>
|
|
|
+ </template>
|
|
|
+
|
|
|
+
|
|
|
+ <label class="handle-label">开始时间:</label>
|
|
|
+ 第 <el-input-number size="small" v-model="handleData.start" style="width: 90px;" controls-position="right" :min="0"></el-input-number> 秒
|
|
|
+
|
|
|
+ <label class="handle-label">结束时间:</label>
|
|
|
+ <el-select v-model="handleData.isVideoDuration" size="small" style="width:120px">
|
|
|
+ <el-option :value="1" label="同原视频"></el-option>
|
|
|
+ <el-option :value="2" label="自定义时间"></el-option>
|
|
|
+ </el-select>
|
|
|
+ <template v-if="handleData.isVideoDuration != 1">
|
|
|
+ <label class="handle-label"> </label>
|
|
|
+ 第 <el-input-number size="small" v-model="handleData.limit" style="width: 90px;" controls-position="right" :min="1"></el-input-number> 秒
|
|
|
+ </template>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 4视频转音频 -->
|
|
|
+ <div class="handle-item" v-if="menuIndex == '4'">
|
|
|
+ <label class="handle-label">音频格式:</label>
|
|
|
+ <el-select v-model="handleData.auto_format" style="width:100px;" size="small">
|
|
|
+ <el-option v-for="(item,key) in outputAudio" :key="key" :value="item" :label="item"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 5视频压缩 -->
|
|
|
+ <div class="handle-item" v-if="menuIndex == '5'">
|
|
|
+ <label class="handle-label">视频分辨率:</label>
|
|
|
+ <el-select v-model="handleData.fenbianlv" style="width:100px;" size="small" @change="changeFenbianlv">
|
|
|
+ <el-option :value="-1" label="同原视频"></el-option>
|
|
|
+ <el-option :value="1" label="3840*2160"></el-option>
|
|
|
+ <el-option :value="2" label="1280*720"></el-option>
|
|
|
+ <el-option :value="3" label="720*576"></el-option>
|
|
|
+ <el-option :value="4" label="640*480"></el-option>
|
|
|
+ <el-option :value="5" label="自定义"></el-option>
|
|
|
+ <el-option :value="6" label="自定义(16:9)"></el-option>
|
|
|
+ <el-option :value="7" label="自定义(4:3)"></el-option>
|
|
|
+ </el-select>
|
|
|
+ <template v-if="[5, 6, 7].includes(handleData.fenbianlv)">
|
|
|
+ <label class="handle-label">宽:</label>
|
|
|
+ <el-input-number size="small" v-model="handleData.width" style="width: 100px;" controls-position="right" @change="changeWidth" :min="1"></el-input-number>
|
|
|
+
|
|
|
+ <label class="handle-label">高:</label>
|
|
|
+ <el-input-number size="small" v-model="handleData.height" style="width: 100px;" controls-position="right" @change="changeHeight" :min="1"></el-input-number>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <label class="handle-label">视频码率:</label>
|
|
|
+ <el-select v-model="handleData.videoQuality" style="width:100px;" size="small">
|
|
|
+ <el-option value="-1" label="同原视频"></el-option>
|
|
|
+ <el-option value="0.9" label="90%"></el-option>
|
|
|
+ <el-option value="0.8" label="80%"></el-option>
|
|
|
+ <el-option value="0.7" label="70%"></el-option>
|
|
|
+ <el-option value="0.6" label="60%"></el-option>
|
|
|
+ <el-option value="0.5" label="50%"></el-option>
|
|
|
+ <el-option value="0.4" label="40%"></el-option>
|
|
|
+ <el-option value="0.3" label="30%"></el-option>
|
|
|
+ <el-option value="0.2" label="20%"></el-option>
|
|
|
+ <el-option value="0.1" label="10%"></el-option>
|
|
|
+ </el-select>
|
|
|
+
|
|
|
+ <label class="handle-label">音频码率:</label>
|
|
|
+ <el-select v-model="handleData.audioQuality" style="width:100px;" size="small">
|
|
|
+ <el-option value="-1" label="同原视频"></el-option>
|
|
|
+ <el-option value="64" label="64"></el-option>
|
|
|
+ <el-option value="96" label="96"></el-option>
|
|
|
+ <el-option value="128" label="128(标准)"></el-option>
|
|
|
+ <el-option value="160" label="160"></el-option>
|
|
|
+ <el-option value="192" label="192(较高)"></el-option>
|
|
|
+ <el-option value="256" label="256"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 6音频消音 -->
|
|
|
+ <div class="handle-item remove" v-if="menuIndex == '6'">
|
|
|
+ <label class="handle-label">去除声音:</label>
|
|
|
+ <el-checkbox v-model="handleData.audioRemove" disabled></el-checkbox>
|
|
|
+ <el-input-number size="small" disabled style="opacity: 0;"></el-input-number>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 7视频变速 -->
|
|
|
+ <div class="handle-item" style="padding: 4px 0;" v-if="menuIndex == '7'">
|
|
|
+ <label class="handle-label">选择设置:</label>
|
|
|
+ <el-radio-group v-model="handleData.reverseSet" size="mini">
|
|
|
+ <el-radio-button :label="1" >变速</el-radio-button>
|
|
|
+ <el-radio-button :label="2" >倒放</el-radio-button>
|
|
|
+ </el-radio-group>
|
|
|
+ <template v-if="handleData.reverseSet == 1">
|
|
|
+ <label class="handle-label">播放速度:</label>
|
|
|
+ <el-slider class="info-input" v-model="handleData.speed" :min="0.5" :max="2.0" :step="0.05" style="margin-right: 10px;"></el-slider> {{handleData.speed}}倍
|
|
|
+ </template>
|
|
|
+ <template v-else>
|
|
|
+ <label class="handle-label">视频倒放:</label>
|
|
|
+ <el-checkbox v-model="handleData.reverse"></el-checkbox>
|
|
|
+ <label class="handle-label">声音倒放:</label>
|
|
|
+ <el-checkbox v-model="handleData.areverse"></el-checkbox>
|
|
|
+
|
|
|
+ <span style="margin-left: 20px;color: #F56C6C;font-size: 12px;">倒放视频会消耗大量的CPU资源和时间,请控制视频时长不超过5分钟</span>
|
|
|
+ </template>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 8音量调整 -->
|
|
|
+ <div class="handle-item" v-if="menuIndex == '8'" style="margin-bottom: 5px;">
|
|
|
+ <label class="handle-label">音量调整:</label>
|
|
|
+ <el-slider class="info-input" v-model="handleData.volume" :min="0.5" :max="2.0" :step="0.05" style="margin-right: 10px;"></el-slider> {{handleData.volume}}倍
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div style="display: flex; justify-content: space-between; margin-top: 5px;">
|
|
|
+ <div>
|
|
|
+ <label class="handle-label">保存目录:</label>
|
|
|
+ <el-input :title="handleData.newPath" ref="upload-input" @focus="pickPath" placeholder="请选择输出目录" size="small" v-model="handleData.newPath" readonly style="width:240px;" prefix-icon="el-icon-folder"></el-input>
|
|
|
+ <el-popover placement="bottom" popper-class="popper-open" trigger="hover" content="打开保存目录">
|
|
|
+ <i class="el-icon-folder-opened" slot="reference" style="padding-left: 5px; cursor: pointer; font-size: 22px; vertical-align: middle;" @click="openFolder()"></i>
|
|
|
+ </el-popover>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <el-button type="danger" style="margin-left: 20px;" @click="exportFile()" :loading="exportLoading">开始处理</el-button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+
|
|
|
</template>
|
|
|
|
|
|
<!-- 合并进度 -->
|
|
@@ -331,12 +544,12 @@
|
|
|
<el-dialog title="非会员提示" :visible.sync="tipsModal" width="400px">
|
|
|
<div class="member-model">
|
|
|
<div class="tips-flex">
|
|
|
- <Icon class="md-bulb" type="md-bulb" size="60" color="#BD2C00"/>
|
|
|
+ <i class="el-icon-s-opportunity"></i>
|
|
|
<p class="m-title">{{tipsDesc}}</p>
|
|
|
</div>
|
|
|
<div class="member-btn">
|
|
|
- <Button v-if="isPwd" style="margin:0 10px;" @click="exportFile(true)">继续转换</Button>
|
|
|
- <Button type="error" @click="openVip()">开通会员</Button>
|
|
|
+ <el-button size="small" round v-if="isPwd" @click="exportFile(true)">继续转换</el-button>
|
|
|
+ <el-button size="small" round type="primary" @click="openVip()">开通会员</el-button>
|
|
|
</div>
|
|
|
</div>
|
|
|
</el-dialog>
|
|
@@ -345,16 +558,17 @@
|
|
|
<el-dialog title="选择页码" :visible.sync="pagesModal" width="400px">
|
|
|
<div class="member-model">
|
|
|
<div class="tips-flex">
|
|
|
- <Select v-if="fileList.length > 0 && selectIndex >= 0" v-model="fileList[selectIndex].selectPages" multiple>
|
|
|
- <Option v-for="(item, key) in fileList[selectIndex].totalPages" :value="item" :key="key">{{ item }}</Option>
|
|
|
- </Select>
|
|
|
+ <el-select v-if="fileList.length > 0 && selectIndex >= 0" v-model="fileList[selectIndex].selectPages" multiple placeholder="请选择">
|
|
|
+ <el-option v-for="(item, key) in fileList[selectIndex].totalPages" :key="key" :label="item" :value="item">
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
</div>
|
|
|
<div class="tips-flex" style="margin-top: 20px;">
|
|
|
- <Checkbox v-model="selectAll">同步成所有PDF的页码选择</Checkbox>
|
|
|
+ <el-checkbox v-model="selectAll">同步成所有PDF的页码选择</el-checkbox>
|
|
|
</div>
|
|
|
<div class="member-btn">
|
|
|
- <Button style="margin:0 10px;" @click="pagesModal = false; selectPages = -1;">取消</Button>
|
|
|
- <Button type="primary" @click="pageSure()">确定</Button>
|
|
|
+ <el-button size="small" round @click="pagesModal = false; selectPages = -1;">取消</el-button>
|
|
|
+ <el-button size="small" round type="primary" @click="pageSure()">确定</el-button>
|
|
|
</div>
|
|
|
</div>
|
|
|
</el-dialog>
|
|
@@ -396,6 +610,7 @@
|
|
|
},
|
|
|
data() {
|
|
|
return {
|
|
|
+ menuIndex: '1',
|
|
|
productName: pjson.softInfo.softName,
|
|
|
imgUrl: this.$api.imgUrl,
|
|
|
imgSrc: '',
|
|
@@ -482,8 +697,6 @@
|
|
|
}
|
|
|
this.handleData.newPath = this.downloadDir;
|
|
|
|
|
|
- this.defaultFont = 'c:\\windows\\fonts\\simkai.ttf';
|
|
|
-
|
|
|
// 打开浏览器
|
|
|
const {
|
|
|
shell
|
|
@@ -536,6 +749,7 @@
|
|
|
},
|
|
|
changeMenu(name) {
|
|
|
this.activeName = name;
|
|
|
+ this.menuIndex = (Number(name.split('-')[0]) + 1).toString();
|
|
|
},
|
|
|
// 选择目录
|
|
|
pickPath() {
|
|
@@ -839,7 +1053,6 @@
|
|
|
break;
|
|
|
}
|
|
|
if(fileList.length > 0){
|
|
|
- console.log(fileList, authority, flag)
|
|
|
if (!authority && !flag) { // 非会员点击转换弹出提示框
|
|
|
this.tipsModal = true;
|
|
|
this.isPwd = true;
|
|
@@ -1631,4 +1844,22 @@
|
|
|
.el-menu-item.is-active{
|
|
|
font-weight: 600;
|
|
|
}
|
|
|
+
|
|
|
+ .tips-flex{
|
|
|
+ display: flex;
|
|
|
+ flex-wrap: nowrap;
|
|
|
+ justify-content: space-around;
|
|
|
+ align-items: center;
|
|
|
+
|
|
|
+ .el-icon-s-opportunity{
|
|
|
+ font-size: 50px;
|
|
|
+ color: #f73131;
|
|
|
+ margin-right: 10px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .m-title{
|
|
|
+ flex: 1;
|
|
|
+ color: #f73131;
|
|
|
+ }
|
|
|
+ }
|
|
|
</style>
|