123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305 |
- <template>
- <div>
- <div :style="{background: '#fafafa', padding: '5px 20px', lineHeight: '34px'}" class="footer-between">
- <div>
- <span style="color: #F56C6C;" @click="questionVisible = true" class="footer-menu"><i class="iconfont iconx-yiwen"></i>常见问题</span>
- <span @click="mianVisible = true" class="footer-menu"><i class="iconfont iconx-mianze-01"></i>免责声明</span>
- <a href="https://www.xingyousoft.com"><span class="footer-menu"><i class="iconfont iconx-wangzhi"></i>官网</span></a>
- </div>
-
- <div>
- <span v-if="linkList.length > 0" class="footer-menu" style="padding: 0;cursor:default;"><i class="iconfont iconx-lianjie"></i>应用推荐:</span>
- <a v-for="(item, key) in linkList" :key="key" @click="openUrl(item.url)"><span class="footer-menu">{{item.title}}</span></a>
- </div>
-
- <div style="cursor:pointer;position: relative;font-size: 13px;" >
- <el-popover placement="bottom" width="200" trigger="click" popper-class="wei-dialog">
- <a slot="reference"><span class="footer-menu"><i class="iconfont iconx-qiyeweixin"></i>客服</span></a>
- <div class="api">
- <img src="../assets/image/qrcode.png" style="width: 100%;"/>
- </div>
- </el-popover>
- <span @click="updateSoft()">
- <el-badge is-dot v-if="isUpdate">
- <i class="el-icon-refresh-right" style="font-size: 20px;"></i>
- </el-badge>
- 版本:v{{softInfo.version}}
- </span>
- </div>
- </div>
- <!-- 下载进度 -->
- <el-dialog title="软件更新" :visible.sync="isShow" width="400px" :show-close="false">
- <div style="text-align: center;">
- <div class="demo-Circle-custom" style="margin-bottom: 10px;">
- 文件大小:<i>{{$utils.handleSize(Number(softInfo.totalSize))}}</i>
- </div>
- <el-progress :text-inside="true" :stroke-width="30" :percentage="Number(softInfo.percent)"></el-progress>
- <div>
- <el-button type="primary" style="margin-top: 30px;" @click="isShow = false">后台下载</el-button>
- </div>
- </div>
- </el-dialog>
- <!-- 下载完成 -->
- <el-dialog title="下载完成,是否退出并安装" :visible.sync="isFinished" width="400px" :close-on-click-modal="false">
- <p>文件下载位置{{softdownloadDir}}</p>
- <span slot="footer" class="dialog-footer">
- <el-button @click="isFinished = false">取 消</el-button>
- <el-button type="primary" @click="execSoft()">确 定</el-button>
- </span>
- </el-dialog>
-
- <!-- 免责声明 -->
- <el-dialog title="免责声明" :visible.sync="mianVisible" width="700px" :close-on-click-modal="false" :close-on-press-escape="false" :show-close="false">
- <div style="color: #666; font-size: 14px; line-height: 1.5;">
- <p>所有使用{{softInfo.softName}}的用户(以下简称用户)在使用{{softInfo.softName}}(以下简称本软件)前必须阅读并同意本声明中的条款。否则,无权使用本软件。</p>
- <p class="mian-title">1、法律合规性:</p>
- <p>用户必须确保在使用本软件时,严格遵守国家及地方的法律法规,包括但不限于《中华人民共和国计算机信息网络国际联网管理暂行规定》等相关规定。
- 不得利用本软件非法访问或使用任何网站、系统或数据,以免触犯法律,导致法律责任。</p>
- <p class="mian-title">2、使用风险与后果:</p>
- <p>用户需自行承担因使用本软件而产生的所有风险和后果,包括但不限于下载失败、数据丢失、网站账号被封禁等。本软件不对任何因使用本软件而导致的直接或间接损失负责。<p>
- <p class="mian-title">3、合理使用与道德约束:</p>
- <p>用户从自己的网店或网址中提取图片、视频,不得用于任何违法、不道德或侵犯他人权益的目的。在使用过程中,应控制访问频率,避免对目标网站服务器造成过大负荷,影响网站正常运营,请用户自觉遵守他人的知识产权,不要使用未经授权的图片、商标等。</p>
- <p class="mian-title">4、免责条款:</p>
- <p>在任何情况下,本软件开发商均不对因使用本软件而产生的任何损失承担责任,包括但不限于直接经济损失、商誉损失、数据丢失等。</p>
- </div>
- <div slot="footer" class="dialog-footer-center">
- <el-button @click="mianVisible = false;">同意并使用</el-button>
- </div>
- </el-dialog>
-
- <!-- 常见问题 -->
- <el-dialog title="常见问题" :visible.sync="questionVisible" width="700px" :close-on-click-modal="false" :close-on-press-escape="false" :show-close="false">
- <el-collapse accordion>
- <el-collapse-item title="1、阿里巴巴下载时生成验证码拦截文件夹或文件夹内容为空" name="1">
- <div>点击软件右上角菜单按钮,选择软件设置-账号登录,点击阿里巴巴账号,浏览器打开后登录阿里巴巴账号,登录完成后关闭浏览器即可正常使用。</div>
- </el-collapse-item>
- <el-collapse-item title="2、网络图片访问异常 -1 或 -2" name="2">
- <div>网页中可能存在网络图片无法加载的情况,会过滤掉无法下载的图片</div>
- </el-collapse-item>
- <el-collapse-item title="3、账号登陆后,下载任务显示处理中没反应" name="3">
- <div>查看任务栏是否关闭该浏览器 <img style="width: 20px;" src="../assets/image/chromium.png" />,如未关闭请关闭浏览器后重新下载。</div>
- </el-collapse-item>
- <el-collapse-item title="4、关闭浏览器后,下载任务显示处理中仍没反应" name="4">
- <div>可能出现官网拦截,出现请拖动滑块还原拼图的情况,点击软件右上角菜单按钮,选择软件设置-账号登录,点击对应的淘宝/天猫账号,浏览器打开后手动拖动还原拼图拦截,完成后关闭浏览器即可正常使用。</div>
- </el-collapse-item>
- <el-collapse-item title="5、下载任务显示验证码拦截,请手动验证或者下载文件夹内容为空" name="5">
- <div>点击软件右上角菜单按钮,选择软件设置-登录淘宝/天猫账号,浏览器打开后点击首页任意商品链接,手动拖动滑块验证一下,完成后关闭浏览器即可正常使用。</div>
- </el-collapse-item>
- <el-collapse-item title="6、淘宝/天猫下载任务提示成功但下载文件夹内容为空" name="6">
- <div>长时间访问淘宝/天猫平台,可能触发了平台的人机验证,可以通过软件设置->账号登录->打开网页后跳转到首页,随机打开一个商品详情页手动解除一下验证,然后清理缓存重新下载或者换个账号登录重新下载即可</div>
- </el-collapse-item>
- <el-collapse-item title="7、下载完成后,打开文件夹如何保持图片顺序" name="7">
- <div>在下载完成后的文件夹中,鼠标右击空白位置,选择排序方式-日期-递增。</div>
- </el-collapse-item>
- <el-collapse-item title="8、下载的评论图片数量少" name="8">
- <div>默认只下载商品首屏展示的评论图片,不下载后续更多页的评论图。</div>
- </el-collapse-item>
- <el-collapse-item title="9、报错:权限受限,请以管理员权限运行软件" name="9">
- <div>软件权限受系统限制无法运行,需要退出软件,鼠标右击软件图标以管理员权限运行一下。</div>
- </el-collapse-item>
- <!-- <el-collapse-item title="10、为什么每次打开软件,需要重新登录平台账号" name="10">
- <div>为了考虑安全性,软件在退出后会清空所有的缓存和账号信息,因此每次重新打开软件需要要求用户重新登录各个平台账号。</div>
- </el-collapse-item> -->
- </el-collapse>
- <div slot="footer" class="dialog-footer-center">
- <el-button @click="questionVisible = false;">关闭</el-button>
- </div>
- </el-dialog>
- </div>
- </template>
- <script>
- import os from 'os'
- import fs from 'fs'
- import request from 'request'
- import { ipcRenderer } from 'electron'
- import pjson from '/package.json'
- export default {
- name: "updateRef",
- data(){
- return {
- mianVisible: false,
- questionVisible: false,
- softInfo: {
- softName: pjson.softInfo.softName,
- version: pjson.version,
- name: pjson.softInfo.downloadName,
- percent: 0,
- downloadedSize: 0,
- totalSize: 0
- },
- softdownloadDir: os.userInfo().homedir+"\\Downloads", // 下载路径
- isShow: this.showDowload,
- isFinished: this.dowloadFinish,
- isUpdate: false,
-
- linkList: [], // 友情链接
-
- softdownloadPath: '',
- }
- },
- props: {
- showDowload: {
- type: Boolean,
- required: true,
- default: false
- },
- dowloadFinish: {
- type: Boolean,
- required: true,
- default: false
- },
- },
- mounted() {
-
- // 友情连接
- this.$http.post(this.$api.target + '/api/api/m_position_list', { group_id: pjson.softInfo.linkId }).then((response) => {
- if (!response.data.error) {
- this.linkList = response.data.result.list;
- }
- })
- },
- methods: {
- // 打开浏览器
- openUrl(url){
- const { shell } = require('electron');
- shell.openExternal(url);
- },
- // 检查更新
- updateSoft(flag){ // flag 软件打开时检测是否更新,true则静默不弹出最新版本提示
- if(Number(this.softInfo.percent) > 0){
- this.isShow = true;
- }else{
- this.$http.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8';
- this.$http.get(pjson.softInfo.downloadPrefix + '/' + pjson.name + "/version.json?"+Math.random()).then((response) => {
- let getResult = response.data || {};
- let currentVersion = this.softInfo.version.split('.');
- let updateVersion = getResult.v.split('.');
- currentVersion.map((item, index) => {
- currentVersion[index] = Number(item);
- })
- updateVersion.map((item, index) => {
- updateVersion[index] = Number(item);
- })
- let result1 = updateVersion[0] > currentVersion[0];
- let result2 = (updateVersion[0] == currentVersion[0]) && (updateVersion[1] > currentVersion[1]);
- let result3 = (updateVersion[0] == currentVersion[0]) && (updateVersion[1] == currentVersion[1]) && (updateVersion[2] > currentVersion[2]);
- let result4 = (updateVersion[0] == currentVersion[0]) && (updateVersion[1] == currentVersion[1]) && (updateVersion[2] == currentVersion[2]) && (updateVersion[3] > currentVersion[3]);
- if(result1 || result2 || result3 || result4){
- this.isUpdate = true;
- let updateContent = getResult.c || '';
- let html = '<div>检测到有新版本v'+getResult.v+',是否更新最新版本?</div><div>'+updateContent+'</div>';
- this.$confirm(html, '应用更新', {
- dangerouslyUseHTMLString: true,
- confirmButtonText: '立即更新',
- type: 'warning'
- }).then(() => {
- this.softdownloadPath = this.softdownloadDir+'/'+ pjson.name + '_XY.exe';
- this.downloadFile(pjson.softInfo.downloadPrefix + '/' + pjson.name + '/' + pjson.name + "_XY.exe", this.softdownloadPath);
- }).catch(() => {
-
- });
- }else{
- this.isUpdate = false;
- if(!flag){
- this.$message({message: '当前已经是最新版本',type: 'success', center: true});
- }
- }
- }).catch(function(error){
- console.log(error);
- });
- }
- },
- // 下载文件
- downloadFile(file_url, targetPath){
- let _this = this;
- let received_bytes = 0;
- let total_bytes = 0;
- let isError = false;
-
- let req = request({
- method: 'GET', uri: file_url, strictSSL: false
- });
- let out = fs.createWriteStream(targetPath);
- req.pipe(out);
-
- req.on('response', function ( data ) {
- total_bytes = parseInt(data.headers['content-length']);
- const status = data.statusCode
- if (status < 200 || status >= 300) {
- _this.$message({showClose: true,message: '网络异常,请稍后重试!',type: 'warning'});
- isError = true;
- }else if(isNaN(total_bytes)){
- _this.$message({showClose: true,message: '网络异常,请稍后重试!',type: 'warning'});
- isError = true;
- }else{
- _this.isShow = true;
- isError = false;
- }
- });
-
- req.on('data', function(chunk) {
- received_bytes += chunk.length;
- _this.showProgress(received_bytes, total_bytes);
- });
-
-
- req.on('end', function() {
- if(!isError){
- _this.softInfo.percent = 100;
- setTimeout(()=>{
- _this.isFinished = true;
- _this.isShow = false;
- _this.softInfo.percent = 0;
- }, 1000)
- }else{
- _this.isFinished = false;
- _this.softInfo.percent = 0;
- if(fs.existsSync(targetPath)){
- fs.unlinkSync(targetPath);
- }
- }
- });
- },
- // 显示进度
- showProgress(received, total){
- let percentage = (received * 100) / total;
- let temp = percentage - this.softInfo.percent;
- if(Number(temp) > 1.5){
- this.softInfo.percent = Number(percentage).toFixed(2);
- }
- this.softInfo.downloadedSize = Number(received);
- this.softInfo.totalSize = Number(total);
- // console.log(percentage + "% | " + received + " bytes out of " + total + " bytes.");
- },
- // 安装
- execSoft(){
- const exec = require('child_process').exec;
- exec(this.softdownloadPath, (err, data) => {
- if (err) {
- throw err;
- } else { // 完成
- this.isFinished = false;
- }
- });
- }
- },
- }
- </script>
- <style>
- .wei-dialog{
- padding: 0 !important;
- }
- .mian-title{
- color: #333;
- font-weight: 600;
- padding: 9px 0;
- }
- .el-collapse-item__header{
- font-weight: 600 !important;
- font-size: 14px !important;
- }
- </style>
|