├── docs └── WechatIMG58.png ├── public ├── favicon.ico └── index.html ├── src ├── assets │ └── logo.png ├── main.js ├── App.vue ├── router │ └── index.js └── components │ ├── AnnoCanvas.vue │ ├── ImageList.vue │ ├── ImageFlipper.vue │ └── ImageViewer.vue ├── babel.config.js ├── dist └── static │ ├── favicon.ico │ ├── fonts │ ├── element-icons.f1a45d74.ttf │ └── element-icons.ff18efd1.woff │ ├── index.html │ ├── css │ └── app.b844481b.css │ └── js │ ├── app.1db76be7.js │ └── app.1db76be7.js.map ├── vue.config.js ├── .gitignore ├── jsconfig.json ├── utils └── build_vue.py ├── README.md ├── package.json └── backend └── file_server.py /docs/WechatIMG58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mactarvish/vue-image-viewer/HEAD/docs/WechatIMG58.png -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mactarvish/vue-image-viewer/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mactarvish/vue-image-viewer/HEAD/src/assets/logo.png -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@vue/cli-plugin-babel/preset' 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /dist/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mactarvish/vue-image-viewer/HEAD/dist/static/favicon.ico -------------------------------------------------------------------------------- /vue.config.js: -------------------------------------------------------------------------------- 1 | const { defineConfig } = require('@vue/cli-service') 2 | module.exports = defineConfig({ 3 | transpileDependencies: true 4 | }) 5 | -------------------------------------------------------------------------------- /dist/static/fonts/element-icons.f1a45d74.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mactarvish/vue-image-viewer/HEAD/dist/static/fonts/element-icons.f1a45d74.ttf -------------------------------------------------------------------------------- /dist/static/fonts/element-icons.ff18efd1.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mactarvish/vue-image-viewer/HEAD/dist/static/fonts/element-icons.ff18efd1.woff -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | # /dist 4 | 5 | 6 | # local env files 7 | .env.local 8 | .env.*.local 9 | 10 | # Log files 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | pnpm-debug.log* 15 | 16 | # Editor directories and files 17 | .idea 18 | .vscode 19 | *.suo 20 | *.ntvs* 21 | *.njsproj 22 | *.sln 23 | *.sw? 24 | 25 | pgs 26 | logs -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "module": "esnext", 5 | "baseUrl": "./", 6 | "moduleResolution": "node", 7 | "paths": { 8 | "@/*": [ 9 | "src/*" 10 | ] 11 | }, 12 | "lib": [ 13 | "esnext", 14 | "dom", 15 | "dom.iterable", 16 | "scripthost" 17 | ] 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './App.vue' 3 | import axios from 'axios'; 4 | import ElementUI from "element-ui" 5 | import "element-ui/lib/theme-chalk/index.css"; 6 | 7 | import router from "./router" 8 | 9 | Vue.config.productionTip = false 10 | Vue.prototype.$axios = axios; 11 | Vue.use(ElementUI); 12 | 13 | new Vue({ 14 | router, 15 | render: h => h(App), 16 | }).$mount('#app') 17 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | <%= htmlWebpackPlugin.options.title %> 9 | 10 | 11 | 14 |
15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 17 | 18 | 36 | -------------------------------------------------------------------------------- /dist/static/index.html: -------------------------------------------------------------------------------- 1 | vue2-image-viewer
-------------------------------------------------------------------------------- /src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import VueRouter from 'vue-router' 3 | 4 | Vue.use(VueRouter); 5 | 6 | 7 | // 定义路由关系 8 | const routes = [ 9 | { 10 | path: '/', 11 | name: "ImageViewer", 12 | component: () => import("../components/ImageViewer.vue") 13 | }, 14 | { 15 | path: "/flipper", 16 | name: "flipper", 17 | component: () => import("../components/ImageFlipper.vue") 18 | }, 19 | { 20 | path: "/list", 21 | name: "list", 22 | component: () => import("../components/ImageList.vue") 23 | }, 24 | ]; 25 | 26 | const router = new VueRouter({ 27 | mode: "history", 28 | base: process.env.BASE_URL, 29 | routes 30 | }); 31 | 32 | 33 | export default router; -------------------------------------------------------------------------------- /utils/build_vue.py: -------------------------------------------------------------------------------- 1 | import glob 2 | import os 3 | import re 4 | 5 | 6 | def change_urls_to_static(src_filepath): 7 | with open(src_filepath, "r") as f: 8 | text = f.read() 9 | def eee(p): 10 | m = '/static' + p.group(1) 11 | return m 12 | if src_filepath.endswith(".html"): 13 | text = re.sub(r'"(/.*?)"', eee, text) 14 | elif src_filepath.endswith(".css"): 15 | text = text.replace("url(/", "url(/static/") 16 | with open(src_filepath, "w") as f: 17 | f.write(text) 18 | 19 | if __name__ == '__main__': 20 | os.system("rm -r dist") 21 | os.system('npm run build') 22 | os.makedirs("dist/static", exist_ok=True) 23 | os.system('mv dist/* dist/static/') 24 | 25 | change_urls_to_static("dist/static/index.html") 26 | src_css_paths = glob.glob(os.path.join("dist/static/css", "*.css")) 27 | for src_css_path in src_css_paths: 28 | change_urls_to_static(src_css_path) 29 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vue2-image-viewer 2 | 3 | 基于vue2和flask的web看图工具,可在本地或远程服务器上部署。 4 | 5 | 特别适用于深度学习和计算机视觉从业者看图/快速分析和定位case。 6 | 7 | 8 |
9 | 10 |
11 | 12 | ## 立即使用 13 | 14 | 只要有python就能使,用不着npm也用不着node啥的,干就完了 15 | 16 | 安装依赖: 17 | ``` 18 | pip install flask 19 | pip install Flask-Cors 20 | ``` 21 | 22 | 然后运行以下命令即可: 23 | ``` 24 | python backend/file_server.py 25 | ``` 26 | 在 `http://127.0.0.1:8003` 上查看你想看的目录中的图片。 27 | 28 | 或者用 `python backend/file_server.py --port xxxx` 指定一个端口号。 29 | 30 | 31 | ## 项目安装 32 | ``` 33 | npm install 34 | ``` 35 | 36 | ### 编译并在开发过程中热加载 37 | ``` 38 | python backend/file_server.py 39 | npm run serve 40 | ``` 41 | 42 | ### 编译并压缩发布版本 43 | 44 | 这里需要使用 45 | ``` 46 | python utils/build_vue.py 47 | ``` 48 | 来构建发布版,因为直接`npm run build`出来的vue发布产物没法直接被flask加载(因为flask的资源寻址太蛋疼了,暂时没找到啥好办法,知道更好的解决方案的朋友请pr),从而被迫用python硬生生地修改构建产物里的引用路径了。 49 | 50 | ### 格式化 51 | ``` 52 | npm run lint 53 | ``` 54 | 55 | ### 自定义配置 56 | See [Configuration Reference](https://cli.vuejs.org/config/). 57 | 58 | 59 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue2-image-viewer", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "serve": "vue-cli-service serve", 7 | "build": "vue-cli-service build", 8 | "lint": "vue-cli-service lint" 9 | }, 10 | "dependencies": { 11 | "clipboard": "^2.0.11", 12 | "core-js": "^3.8.3", 13 | "element-ui": "^2.15.13", 14 | "jquery": "^3.6.3", 15 | "less-loader": "^6.2.0", 16 | "v-tooltip": "^2.1.3", 17 | "vue": "^2.6.14", 18 | "vue-router": "^3.5.1" 19 | }, 20 | "devDependencies": { 21 | "@babel/core": "^7.12.16", 22 | "@babel/eslint-parser": "^7.12.16", 23 | "@vue/cli-plugin-babel": "~5.0.0", 24 | "@vue/cli-plugin-eslint": "~5.0.0", 25 | "@vue/cli-service": "~5.0.0", 26 | "axios": "^0.27.2", 27 | "eslint": "^7.32.0", 28 | "eslint-plugin-vue": "^8.0.3", 29 | "vue-template-compiler": "^2.6.14" 30 | }, 31 | "eslintConfig": { 32 | "root": true, 33 | "env": { 34 | "node": true 35 | }, 36 | "extends": [ 37 | "plugin:vue/essential", 38 | "eslint:recommended" 39 | ], 40 | "parserOptions": { 41 | "parser": "@babel/eslint-parser" 42 | }, 43 | "rules": {} 44 | }, 45 | "browserslist": [ 46 | "> 1%", 47 | "last 2 versions", 48 | "not dead" 49 | ] 50 | } 51 | -------------------------------------------------------------------------------- /dist/static/css/app.b844481b.css: -------------------------------------------------------------------------------- 1 | .folder{border:2px solid #6495ed;padding:0 .5rem;margin:1rem}.tooltip{position:fixed;pointer-events:none;border-style:solid;font-size:small;background-color:#fff8dc}img{margin-right:5px}h3{margin:4px 0}.folder[data-v-22aa9124]{border:2px solid #6495ed;padding:0 .5rem;margin:1rem}.label-bar[data-v-22aa9124]{padding-bottom:.5rem}.tooltip[data-v-22aa9124]{position:fixed;pointer-events:none;border-style:solid;font-size:small;background-color:#fff8dc}img[data-v-22aa9124]{margin-right:5px}h3[data-v-22aa9124]{margin:4px 0}.background{position:fixed;height:100%;width:100%;background-color:#c7edcc}.input-dir{width:100%;box-sizing:border-box}.postfixes{display:grid;grid-template-columns:auto auto;border:#42b983;border-radius:5px;border-style:dotted}nav{text-align:left;display:flex;flex-direction:column;background-color:#faebd7;width:20rem;left:0;top:0;bottom:0;position:fixed;padding:1rem}nav>*{margin:.5rem 0}.change-image-button{height:5rem;width:5rem;align-items:center}main{flex:1;display:flex;position:relative;padding:0 0 0 20rem}a{color:#42b983}div#path-and-image{margin-bottom:10px}.show-single{flex-direction:row;justify-content:space-evenly}.show-single,.single-image-widget{align-items:center;margin:0 1rem}.single-image-widget>h3{overflow-wrap:break-word;width:30rem}.label-bar{display:flex;align-items:center}.label-bar .label{margin-right:5px}.label-bar .bar{flex:1}.info-for-clicked-image{margin-top:auto;word-wrap:break-word}.history-dir:hover{text-decoration:underline;cursor:pointer;color:blue}*{box-sizing:border-box}#app,body,html{margin:0}#app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#2c3e50} -------------------------------------------------------------------------------- /backend/file_server.py: -------------------------------------------------------------------------------- 1 | import os 2 | import platform 3 | import sys 4 | from collections import defaultdict 5 | import argparse 6 | 7 | from flask import Flask, request, send_from_directory, jsonify 8 | from flask import Flask, render_template,request 9 | from flask_cors import CORS 10 | 11 | 12 | if sys.gettrace(): 13 | app = Flask(__name__) 14 | else: 15 | app = Flask(__name__, 16 | template_folder="../dist/static", 17 | static_folder="../dist/static", # https://blog.csdn.net/Likianta/article/details/89363973 18 | # static_url_path= # 修改dist中index.html的引用url,每个url前头都加上/static 19 | ) 20 | CORS(app) 21 | 22 | 23 | @app.route('/') 24 | @app.route('/index') 25 | def index(): 26 | return render_template('index.html') 27 | 28 | @app.route('/') 29 | def serve_file(path): 30 | # 对于linux或者苹果系统,一般都是/开头的,而url中这个/就被吃了,所以得额外加上 31 | if platform.system() != 'Windows': 32 | path = '/' + path 33 | response = send_from_directory(*os.path.split(path)); 34 | response.headers['Cache-Control'] = 'no-cache, no-store, must-revalidate' 35 | return response 36 | 37 | @app.route('/clickImagePath') 38 | def handle_click_image_path(): 39 | # with open("logs/clicked_image_paths.txt", 'a') as f: 40 | # f.write(request.args["clickedImagePath"] + '\n') 41 | return "OK" 42 | 43 | @app.route('/getAllImagePaths', methods=['GET', 'POST']) 44 | def get_all_image_paths(): 45 | print(request) 46 | recursive = request.form["recursive"].lower() == "true" 47 | src_dir = request.form["srcDir"] 48 | postfixes = request.form["postfixes"].split(",") 49 | 50 | dir_file_path_map = defaultdict(list) 51 | if not os.path.exists(src_dir): 52 | dir_file_path_map["state"] = "not exist" 53 | return jsonify(dir_file_path_map) 54 | 55 | for cur_dir, _, filenames in os.walk(src_dir): 56 | for filename in filenames: 57 | if not os.path.splitext(filename)[-1] in postfixes: 58 | continue 59 | src_file_path = os.path.join(cur_dir, filename) 60 | dir_file_path_map[cur_dir].append(src_file_path) 61 | if not recursive: 62 | break 63 | dir_file_path_map["state"] = "ok" 64 | 65 | return jsonify(dir_file_path_map) 66 | 67 | 68 | if __name__ == '__main__': 69 | parser = argparse.ArgumentParser() 70 | parser.add_argument("--port", default=8003, type=int) 71 | args = parser.parse_args() 72 | app.run(host='0.0.0.0', port=args.port) 73 | -------------------------------------------------------------------------------- /src/components/AnnoCanvas.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 91 | 92 | 99 | 100 | -------------------------------------------------------------------------------- /src/components/ImageList.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 13 | 82 | 83 | -------------------------------------------------------------------------------- /src/components/ImageFlipper.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 20 | 99 | 100 | -------------------------------------------------------------------------------- /dist/static/js/app.1db76be7.js: -------------------------------------------------------------------------------- 1 | (function(){"use strict";var t={9339:function(t,e,i){var r=i(7195),s=function(){var t=this,e=t._self._c;return e("div",{attrs:{id:"app"}},[e("ImageViewer")],1)},o=[],a=function(){var t=this,e=t._self._c;return e("div",[e("div",{staticClass:"background"}),e("main",{staticClass:"main"},[0==t.singleBrowseMode?e("div",t._l(t.dirFilePathsMap,(function(i,r){return e("div",{key:r,attrs:{id:"path-and-image"}},[e("ImageList",{attrs:{rootUrl:t.rootUrl,srcDir:r,srcImagePaths:i,width:t.imageShowWidth,timestamp:t.timestamp.toString()}})],1)})),0):e("div",{staticClass:"show-single"},t._l(t.dirFilePathsMap,(function(i,r){return e("div",{key:r,attrs:{id:"path-and-image"}},[e("h3",[t._v(" "+t._s(t.srcImagePaths[t.curImageIndex])+" ")]),e("ImageFlipper",{attrs:{rootUrl:t.rootUrl,srcDir:r,srcImagePaths:i,width:t.imageShowWidth,timestamp:t.timestamp.toString()}})],1)})),0),e("div",[t._v(" "+t._s(t.errInfo)+" ")])]),e("nav",[e("div",[e("el-input",{attrs:{placeholder:"展示该目录的图片",clearable:""},nativeOn:{keyup:function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:t.browseDir()}},model:{value:t.srcDir,callback:function(e){t.srcDir=e},expression:"srcDir"}})],1),e("div",[t._v("参与遍历的后缀名:")]),e("div",{staticClass:"postfixes"},[e("el-checkbox-group",{model:{value:t.checkedPostfixes,callback:function(e){t.checkedPostfixes=e},expression:"checkedPostfixes"}},t._l(t.filenamePostfixes,(function(i,r){return e("el-checkbox",{key:r,attrs:{label:i}},[t._v(t._s(i))])})),1)],1),e("el-radio-group",{model:{value:t.singleBrowseMode,callback:function(e){t.singleBrowseMode=e},expression:"singleBrowseMode"}},[e("el-radio",{attrs:{label:"0"}},[t._v("列表展示全部图片")]),e("el-radio",{attrs:{label:"1"}},[t._v("单图切换浏览")])],1),e("div",{staticClass:"label-bar"},[e("div",{staticClass:"label"},[t._v("图片显示宽度")]),e("el-slider",{staticClass:"bar",attrs:{step:10,max:1e3,min:10},model:{value:t.imageShowWidth,callback:function(e){t.imageShowWidth=e},expression:"imageShowWidth"}})],1),e("el-button",{ref:"preview",on:{click:t.browseDir}},[t._v("预览")]),e("div",{staticClass:"history"},t._l(t.historyDirs,(function(i){return e("el-tag",{key:i,attrs:{closable:""},on:{close:function(e){return t.RemoveHistoryItem(i)}}},[e("span",{staticClass:"history-dir",on:{click:function(e){return t.clickHistory(e)}}},[t._v(t._s(i))])])})),1),e("div",{staticClass:"info-for-clicked-image"},[e("div",{staticStyle:{"pointer-events":"none","user-select":"none"}},[t._v("点击的图像路径 ")]),t._v(" "+t._s(this.clickedImagePath)+" "),e("div",{staticStyle:{"pointer-events":"none","user-select":"none"}},[t._v("点击的图像名称 ")]),t._v(" "+t._s(this.clickedImageName)+" ")])],1)])},n=[],l=(i(7658),function(){var t=this,e=t._self._c;return e("div",{ref:"root",staticClass:"folder"},[e("div",{directives:[{name:"show",rawName:"v-show",value:t.showTooltip,expression:"showTooltip"}],ref:"tooltip",staticClass:"tooltip"},[t._v(t._s(t.tooltipContent))]),e("h3",[t._v(t._s(t.srcDir))]),t._l(t.srcImagePaths,(function(i){return e("img",{key:i,attrs:{src:t.rootUrl+i+`?timestamp=${t.timestamp}`,width:t.width,alt:i},on:{click:t.copyImagePath,mousemove:t.updateTooltip,mouseleave:t.closeTooltip}})}))],2)}),c=[],h={name:"ImageList",props:{rootUrl:String,srcDir:String,srcImagePaths:Array,timestamp:String,width:{type:Number,default:200}},data(){return{showTooltip:!1,tooltipContent:""}},methods:{updateTooltip(t){let e=t.target.src.match("(\\d{4})(.*?)(\\?)")[2],i=t.target.naturalWidth,r=t.target.naturalHeight,s=t.target.offsetWidth,o=t.target.offsetHeight,a=t.target.getBoundingClientRect(),n=t.clientX-a.x,l=t.clientY-a.y,c=parseInt(Math.round(n/s*i).toString()),h=parseInt(Math.round(l/o*r).toString());this.tooltipContent=e+` (${c} , ${h})`,this.showTooltip=!0,this.$refs.tooltip.style.top=`${t.clientY+10}px`,this.$refs.tooltip.style.left=`${t.clientX+10}px`},closeTooltip(){this.showTooltip=!1},copyImagePath(t){const e=document.createElement("button");e.setAttribute("class","cb");let i=t.target.src.match("(\\d{4})(.*?)(\\?)")[2];e.setAttribute("data-clipboard-text",i),document.body.appendChild(e),e.click(),e.remove();let r=new FormData;r.append("clickedImagePath",t.target.src);let s=this.rootUrl+"/clickImagePath";this.$axios.get(s,{params:{clickedImagePath:t.target.src}}).then((t=>{console.log(t.data),this.dirFilePathsMap=t.data})).catch((t=>{console.log(t),this.errInfo="错误信息:"+t+"\n请检查目录是否存在"}))}}},d=h,p=i(1001),u=(0,p.Z)(d,l,c,!1,null,null,null),m=u.exports,g=function(){var t=this,e=t._self._c;return e("div",{ref:"root",staticClass:"folder"},[e("div",{directives:[{name:"show",rawName:"v-show",value:t.showTooltip,expression:"showTooltip"}],ref:"tooltip",staticClass:"tooltip"},[t._v(t._s(t.tooltipContent))]),e("h3",[t._v(t._s(t.srcDir))]),e("div",[e("h6",{staticStyle:{margin:"0"}},[t._v(" "+t._s(t.srcImagePaths[t.curImageIndex-1]))]),e("img",{attrs:{src:t.rootUrl+t.srcImagePaths[t.curImageIndex-1]+`?timestamp=${t.timestamp}`,width:t.width,alt:t.srcImagePaths[t.curImageIndex-1]},on:{click:t.copyImagePath,mousemove:t.updateTooltip,mouseleave:t.closeTooltip}})]),e("div",{staticClass:"label-bar"},[e("span",[t._v("当前是第 ")]),e("el-input-number",{attrs:{size:"mini",min:1,max:t.srcImagePaths.length},on:{change:function(e){return t.changeImage(e)}},model:{value:t.curImageIndex,callback:function(e){t.curImageIndex=e},expression:"curImageIndex"}}),e("span",[t._v(" 张,共计 "+t._s(t.srcImagePaths.length)+" 张 ")])],1)])},f=[],v={name:"ImageFlipper",props:{rootUrl:String,srcDir:String,srcImagePaths:Array,timestamp:String,width:{type:Number,default:200}},data(){return{showTooltip:!1,tooltipContent:"",curImageIndex:1}},methods:{updateTooltip(t){document.getElementsByClassName("el-input-number__decrease")[0].click();let e=t.target.src.match("(\\d{4})(.*?)(\\?)")[2],i=t.target.naturalWidth,r=t.target.naturalHeight,s=t.target.offsetWidth,o=t.target.offsetHeight,a=t.target.getBoundingClientRect(),n=t.clientX-a.x,l=t.clientY-a.y,c=parseInt(Math.round(n/s*i).toString()),h=parseInt(Math.round(l/o*r).toString());this.tooltipContent=e+` (${c} , ${h})`,this.showTooltip=!0,this.$refs.tooltip.style.top=`${t.clientY+10}px`,this.$refs.tooltip.style.left=`${t.clientX+10}px`},closeTooltip(){this.showTooltip=!1},copyImagePath(t){const e=document.createElement("button");e.setAttribute("class","cb");let i=t.target.src.match("(\\d{4})(.*?)(\\?)")[2];e.setAttribute("data-clipboard-text",i),document.body.appendChild(e),e.click(),e.remove();let r=new FormData;r.append("clickedImagePath",t.target.src);let s=this.rootUrl+"/clickImagePath";this.$axios.get(s,{params:{clickedImagePath:t.target.src}}).then((t=>{console.log(t.data),this.dirFilePathsMap=t.data})).catch((t=>{console.log(t),this.errInfo="错误信息:"+t+"\n请检查目录是否存在"}))},changeImage(t){console.log(t)}}},I=v,b=(0,p.Z)(I,g,f,!1,null,"22aa9124",null),w=b.exports,x=i(4713),y=i.n(x),_={name:"ImageViewer",components:{ImageList:m,ImageFlipper:w},props:{},data(){return{srcImagePaths:[],dirFilePathsMap:{},srcDir:"/Users/mactarvish/Desktop/vue-test",errInfo:"",rootUrl:"",filenamePostfixes:[".jpg",".png",".PNG",".gif",".JPG",".bmp",".BMP",".jpeg"],checkedPostfixes:[".jpg",".png",".PNG",".gif",".JPG",".bmp",".BMP",".jpeg"],singleBrowseMode:"0",curImageIndex:0,imageShowWidth:200,timestamp:"",historyDirs:[],clickedImagePath:"",clickedImageName:""}},watch:{singleBrowseMode:{handler(t,e){console.log(t,e)}}},mounted(){this.rootUrl=window.location.href,this.rootUrl.includes("8081")&&(this.rootUrl="http://localhost:8003"),this.clipboard=new(y())(".cb"),this.clipboard.on("success",(t=>{this.$message(`复制成功: ${t.text}`),this.clickedImagePath=t.text,this.clickedImageName=t.text.split("/").pop()})),this.clipboard.on("error",(()=>{this.$alert("草台,复制失败了")}))},methods:{browseDir(){let t=new FormData;t.append("recursive",!0),t.append("srcDir",this.srcDir),t.append("postfixes",this.checkedPostfixes);let e=this.rootUrl+"/getAllImagePaths";this.dirFilePathsMap={},this.$axios.post(e,t).then((t=>{this.dirFilePathsMap=t.data;const e=this.dirFilePathsMap.state;console.log(e),delete this.dirFilePathsMap.state,"not exist"!=e?(this.timestamp=(new Date).getTime(),this.srcImagePaths=[],this.errInfo="",this.historyDirs.includes(this.srcDir)||this.historyDirs.push(this.srcDir)):this.$message(`目录 ${this.srcDir} 不存在!`)})).catch((t=>{console.log(t)}))},RemoveHistoryItem(t){this.historyDirs.splice(this.historyDirs.indexOf(t),1)},clickHistory(t){this.srcDir=t.target.textContent,this.browseDir()}}},P=_,k=(0,p.Z)(P,a,n,!1,null,null,null),D=k.exports,C={name:"App",components:{ImageViewer:D}},S=C,M=(0,p.Z)(S,s,o,!1,null,null,null),T=M.exports,$=i(8428),O=i.n($),F=i(8213),U=i.n(F);r["default"].config.productionTip=!1,r["default"].prototype.$axios=O(),r["default"].use(U()),new r["default"]({render:t=>t(T)}).$mount("#app")}},e={};function i(r){var s=e[r];if(void 0!==s)return s.exports;var o=e[r]={id:r,loaded:!1,exports:{}};return t[r].call(o.exports,o,o.exports,i),o.loaded=!0,o.exports}i.m=t,function(){i.amdO={}}(),function(){var t=[];i.O=function(e,r,s,o){if(!r){var a=1/0;for(h=0;h=o)&&Object.keys(i.O).every((function(t){return i.O[t](r[l])}))?r.splice(l--,1):(n=!1,o0&&t[h-1][2]>o;h--)t[h]=t[h-1];t[h]=[r,s,o]}}(),function(){i.n=function(t){var e=t&&t.__esModule?function(){return t["default"]}:function(){return t};return i.d(e,{a:e}),e}}(),function(){i.d=function(t,e){for(var r in e)i.o(e,r)&&!i.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})}}(),function(){i.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"===typeof window)return window}}()}(),function(){i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)}}(),function(){i.r=function(t){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}}(),function(){i.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t}}(),function(){var t={143:0};i.O.j=function(e){return 0===t[e]};var e=function(e,r){var s,o,a=r[0],n=r[1],l=r[2],c=0;if(a.some((function(e){return 0!==t[e]}))){for(s in n)i.o(n,s)&&(i.m[s]=n[s]);if(l)var h=l(i)}for(e&&e(r);c 2 |
3 |
4 | 5 |
6 |
7 |
8 |

{{ zoomedImagePath }}

9 | 10 |
11 |
12 | 14 |
{{ zoomTooltipContent }}
15 |
16 | 20 |
21 |
22 | 23 |
24 | 25 |
26 |
27 | 29 |
30 |
31 |
32 |
33 |

34 | {{ srcImagePaths[curImageIndex] }} 35 |

36 | 38 |
39 |
40 | 41 |
42 | {{ errInfo }} 43 |
44 |
45 | 46 | 96 |
97 | 98 | 99 | 284 | 285 | 495 | -------------------------------------------------------------------------------- /dist/static/js/app.1db76be7.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"js/app.1db76be7.js","mappings":"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","sources":["webpack://vue2-image-viewer/./src/App.vue","webpack://vue2-image-viewer/./src/components/ImageViewer.vue","webpack://vue2-image-viewer/./src/components/ImageList.vue","webpack://vue2-image-viewer/src/components/ImageList.vue","webpack://vue2-image-viewer/./src/components/ImageList.vue?d41d","webpack://vue2-image-viewer/./src/components/ImageList.vue?e7cb","webpack://vue2-image-viewer/./src/components/ImageFlipper.vue","webpack://vue2-image-viewer/src/components/ImageFlipper.vue","webpack://vue2-image-viewer/./src/components/ImageFlipper.vue?58c7","webpack://vue2-image-viewer/./src/components/ImageFlipper.vue?3548","webpack://vue2-image-viewer/src/components/ImageViewer.vue","webpack://vue2-image-viewer/./src/components/ImageViewer.vue?0eae","webpack://vue2-image-viewer/./src/components/ImageViewer.vue?b4f0","webpack://vue2-image-viewer/src/App.vue","webpack://vue2-image-viewer/./src/App.vue?51dd","webpack://vue2-image-viewer/./src/App.vue?0e40","webpack://vue2-image-viewer/./src/main.js","webpack://vue2-image-viewer/webpack/bootstrap","webpack://vue2-image-viewer/webpack/runtime/amd options","webpack://vue2-image-viewer/webpack/runtime/chunk loaded","webpack://vue2-image-viewer/webpack/runtime/compat get default export","webpack://vue2-image-viewer/webpack/runtime/define property getters","webpack://vue2-image-viewer/webpack/runtime/global","webpack://vue2-image-viewer/webpack/runtime/hasOwnProperty shorthand","webpack://vue2-image-viewer/webpack/runtime/make namespace object","webpack://vue2-image-viewer/webpack/runtime/node module decorator","webpack://vue2-image-viewer/webpack/runtime/jsonp chunk loading","webpack://vue2-image-viewer/webpack/startup"],"sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{attrs:{\"id\":\"app\"}},[_c('ImageViewer')],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('div',{staticClass:\"background\"}),_c('main',{staticClass:\"main\"},[(_vm.singleBrowseMode == 0)?_c('div',_vm._l((_vm.dirFilePathsMap),function(value,key){return _c('div',{key:key,attrs:{\"id\":\"path-and-image\"}},[_c('ImageList',{attrs:{\"rootUrl\":_vm.rootUrl,\"srcDir\":key,\"srcImagePaths\":value,\"width\":_vm.imageShowWidth,\"timestamp\":_vm.timestamp.toString()}})],1)}),0):_c('div',{staticClass:\"show-single\"},_vm._l((_vm.dirFilePathsMap),function(value,key){return _c('div',{key:key,attrs:{\"id\":\"path-and-image\"}},[_c('h3',[_vm._v(\" \"+_vm._s(_vm.srcImagePaths[_vm.curImageIndex])+\" \")]),_c('ImageFlipper',{attrs:{\"rootUrl\":_vm.rootUrl,\"srcDir\":key,\"srcImagePaths\":value,\"width\":_vm.imageShowWidth,\"timestamp\":_vm.timestamp.toString()}})],1)}),0),_c('div',[_vm._v(\" \"+_vm._s(_vm.errInfo)+\" \")])]),_c('nav',[_c('div',[_c('el-input',{attrs:{\"placeholder\":\"展示该目录的图片\",\"clearable\":\"\"},nativeOn:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.browseDir()}},model:{value:(_vm.srcDir),callback:function ($$v) {_vm.srcDir=$$v},expression:\"srcDir\"}})],1),_c('div',[_vm._v(\"参与遍历的后缀名:\")]),_c('div',{staticClass:\"postfixes\"},[_c('el-checkbox-group',{model:{value:(_vm.checkedPostfixes),callback:function ($$v) {_vm.checkedPostfixes=$$v},expression:\"checkedPostfixes\"}},_vm._l((_vm.filenamePostfixes),function(item,index){return _c('el-checkbox',{key:index,attrs:{\"label\":item}},[_vm._v(_vm._s(item))])}),1)],1),_c('el-radio-group',{model:{value:(_vm.singleBrowseMode),callback:function ($$v) {_vm.singleBrowseMode=$$v},expression:\"singleBrowseMode\"}},[_c('el-radio',{attrs:{\"label\":\"0\"}},[_vm._v(\"列表展示全部图片\")]),_c('el-radio',{attrs:{\"label\":\"1\"}},[_vm._v(\"单图切换浏览\")])],1),_c('div',{staticClass:\"label-bar\"},[_c('div',{staticClass:\"label\"},[_vm._v(\"图片显示宽度\")]),_c('el-slider',{staticClass:\"bar\",attrs:{\"step\":10,\"max\":1000,\"min\":10},model:{value:(_vm.imageShowWidth),callback:function ($$v) {_vm.imageShowWidth=$$v},expression:\"imageShowWidth\"}})],1),_c('el-button',{ref:\"preview\",on:{\"click\":_vm.browseDir}},[_vm._v(\"预览\")]),_c('div',{staticClass:\"history\"},_vm._l((_vm.historyDirs),function(dir){return _c('el-tag',{key:dir,attrs:{\"closable\":\"\"},on:{\"close\":function($event){return _vm.RemoveHistoryItem(dir)}}},[_c('span',{staticClass:\"history-dir\",on:{\"click\":function($event){return _vm.clickHistory($event)}}},[_vm._v(_vm._s(dir))])])}),1),_c('div',{staticClass:\"info-for-clicked-image\"},[_c('div',{staticStyle:{\"pointer-events\":\"none\",\"user-select\":\"none\"}},[_vm._v(\"点击的图像路径 \")]),_vm._v(\" \"+_vm._s(this.clickedImagePath)+\" \"),_c('div',{staticStyle:{\"pointer-events\":\"none\",\"user-select\":\"none\"}},[_vm._v(\"点击的图像名称 \")]),_vm._v(\" \"+_vm._s(this.clickedImageName)+\" \")])],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{ref:\"root\",staticClass:\"folder\"},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showTooltip),expression:\"showTooltip\"}],ref:\"tooltip\",staticClass:\"tooltip\"},[_vm._v(_vm._s(_vm.tooltipContent))]),_c('h3',[_vm._v(_vm._s(_vm.srcDir))]),_vm._l((_vm.srcImagePaths),function(srcImagePath){return _c('img',{key:srcImagePath,attrs:{\"src\":_vm.rootUrl + srcImagePath + `?timestamp=${_vm.timestamp}`,\"width\":_vm.width,\"alt\":srcImagePath},on:{\"click\":_vm.copyImagePath,\"mousemove\":_vm.updateTooltip,\"mouseleave\":_vm.closeTooltip}})})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n \n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImageList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImageList.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ImageList.vue?vue&type=template&id=d1b57256&\"\nimport script from \"./ImageList.vue?vue&type=script&lang=js&\"\nexport * from \"./ImageList.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ImageList.vue?vue&type=style&index=0&id=d1b57256&prod&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{ref:\"root\",staticClass:\"folder\"},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showTooltip),expression:\"showTooltip\"}],ref:\"tooltip\",staticClass:\"tooltip\"},[_vm._v(_vm._s(_vm.tooltipContent))]),_c('h3',[_vm._v(_vm._s(_vm.srcDir))]),_c('div',[_c('h6',{staticStyle:{\"margin\":\"0\"}},[_vm._v(\" \"+_vm._s(_vm.srcImagePaths[_vm.curImageIndex - 1]))]),_c('img',{attrs:{\"src\":_vm.rootUrl + _vm.srcImagePaths[_vm.curImageIndex - 1] + `?timestamp=${_vm.timestamp}`,\"width\":_vm.width,\"alt\":_vm.srcImagePaths[_vm.curImageIndex - 1]},on:{\"click\":_vm.copyImagePath,\"mousemove\":_vm.updateTooltip,\"mouseleave\":_vm.closeTooltip}})]),_c('div',{staticClass:\"label-bar\"},[_c('span',[_vm._v(\"当前是第 \")]),_c('el-input-number',{attrs:{\"size\":\"mini\",\"min\":1,\"max\":_vm.srcImagePaths.length},on:{\"change\":function($event){return _vm.changeImage($event)}},model:{value:(_vm.curImageIndex),callback:function ($$v) {_vm.curImageIndex=$$v},expression:\"curImageIndex\"}}),_c('span',[_vm._v(\" 张,共计 \"+_vm._s(_vm.srcImagePaths.length)+\" 张 \")])],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n \n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImageFlipper.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImageFlipper.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ImageFlipper.vue?vue&type=template&id=22aa9124&scoped=true&\"\nimport script from \"./ImageFlipper.vue?vue&type=script&lang=js&\"\nexport * from \"./ImageFlipper.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ImageFlipper.vue?vue&type=style&index=0&id=22aa9124&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"22aa9124\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImageViewer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImageViewer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ImageViewer.vue?vue&type=template&id=9b3fd2da&\"\nimport script from \"./ImageViewer.vue?vue&type=script&lang=js&\"\nexport * from \"./ImageViewer.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ImageViewer.vue?vue&type=style&index=0&id=9b3fd2da&prod&lang=less&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=140b7473&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&id=140b7473&prod&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\nimport App from './App.vue'\nimport axios from 'axios';\n\nimport ElementUI from \"element-ui\"\nimport \"element-ui/lib/theme-chalk/index.css\";\n\nVue.config.productionTip = false\nVue.prototype.$axios = axios;\nVue.use(ElementUI);\n\nnew Vue({\n render: h => h(App),\n}).$mount('#app')\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdO = {};","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t143: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkvue2_image_viewer\"] = self[\"webpackChunkvue2_image_viewer\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [998], function() { return __webpack_require__(9339); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["render","_vm","this","_c","_self","attrs","staticRenderFns","staticClass","singleBrowseMode","_l","dirFilePathsMap","value","key","rootUrl","imageShowWidth","timestamp","toString","_v","_s","srcImagePaths","curImageIndex","errInfo","nativeOn","$event","type","indexOf","_k","keyCode","browseDir","model","srcDir","callback","$$v","expression","checkedPostfixes","filenamePostfixes","item","index","ref","on","historyDirs","dir","RemoveHistoryItem","clickHistory","staticStyle","clickedImagePath","clickedImageName","directives","name","rawName","showTooltip","tooltipContent","srcImagePath","width","copyImagePath","updateTooltip","closeTooltip","props","default","data","methods","b","document","formData","params","console","component","length","changeImage","components","ImageList","ImageFlipper","watch","handler","mounted","ImageViewer","Vue","axios","ElementUI","h","App","$mount","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","id","loaded","__webpack_modules__","call","m","amdO","deferred","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","fulfilled","j","Object","keys","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","e","window","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","forEach","bind","push","__webpack_exports__"],"sourceRoot":""} --------------------------------------------------------------------------------