├── .babelrc ├── .eslintignore ├── .eslintrc.js ├── .gitignore ├── LICENSE ├── README.md ├── app ├── dist │ └── .gitkeep ├── icons │ ├── logo.ico │ └── logo.ico.icns ├── index.ejs ├── package-lock.json ├── package.json └── src │ ├── main │ ├── application.js │ ├── index.dev.js │ └── index.js │ └── renderer │ ├── App.vue │ ├── assets │ ├── .gitkeep │ ├── disk-ssd.png │ ├── disk.png │ └── logo.png │ ├── common │ └── js │ │ ├── file.js │ │ └── icon.js │ ├── config │ └── canvas.js │ ├── extend │ ├── filters.js │ └── index.js │ ├── main.js │ ├── router │ ├── history.js │ ├── index.js │ └── routes.js │ ├── store │ ├── actions.js │ ├── getters.js │ ├── index.js │ ├── modules │ │ ├── Counter.js │ │ └── index.js │ ├── mutation-types.js │ ├── mutations.js │ └── state.js │ └── views │ ├── files │ └── folder.vue │ ├── index │ └── index.vue │ ├── login.vue │ └── siderBar │ ├── leftBar.vue │ ├── rightBar.vue │ └── rightDisk.vue ├── build ├── .gitkeep ├── Gruntfile.js └── package.json ├── config.js ├── package.json ├── tasks ├── release.js └── runner.js ├── test ├── .eslintrc ├── e2e │ ├── index.js │ ├── specs │ │ └── Launch.spec.js │ └── utils.js └── unit │ ├── index.js │ ├── karma.conf.js │ └── specs │ └── LandingPageView.spec.js ├── webpack.main.config.js └── webpack.renderer.config.js /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "comments": false, 3 | "env": { 4 | "testing-unit": { 5 | "presets": ["es2015", "stage-0"], 6 | "plugins": ["istanbul"] 7 | }, 8 | "testing-e2e": { 9 | "presets": ["es2015", "stage-0"] 10 | }, 11 | "main": { 12 | "presets": ["es2015", "stage-0"] 13 | }, 14 | "renderer": { 15 | "presets": [ 16 | ["es2015", { "modules": false }], 17 | "stage-0" 18 | ] 19 | } 20 | }, 21 | "plugins": ["transform-runtime"] 22 | } 23 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | app/node_modules/** 2 | app/dist/** 3 | test/unit/coverage/** 4 | test/unit/*.js 5 | test/e2e/*.js 6 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | parser: 'babel-eslint', 4 | parserOptions: { 5 | sourceType: 'module' 6 | }, 7 | env: { 8 | browser: true, 9 | node: true 10 | }, 11 | extends: 'standard', 12 | plugins: [ 13 | 'html' 14 | ], 15 | 'rules': { 16 | // allow paren-less arrow functions 17 | 'arrow-parens': 0, 18 | // allow async-await 19 | 'generator-star-spacing': 0, 20 | // allow debugger during development 21 | 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | app/dist/* 3 | build/node_modules/ 4 | build/installer/ 5 | build/fileSystem-* 6 | coverage 7 | node_modules/ 8 | npm-debug.log 9 | npm-debug.log.* 10 | thumbs.db 11 | !.gitkeep 12 | app/src/main/.env 13 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 RoyalOne 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## 基于vue-electron的文件管理器 2 | 3 | ### 项目由来 4 | 5 | 项目的实现是一个`WIndows平台的文件管理器`,实现了基本的文件操作功能,新建,删除,复制,粘贴,剪切,重命名。 6 | 7 | 项目地址:[https://github.com/k-water/electron-filesystem](https://github.com/k-water/electron-filesystem) 8 | 9 | ### 什么是Electron 10 | Electron 可以让你使用纯 JavaScript 调用丰富的原生 APIs 来创造桌面应用。你可以把它看作是专注于桌面应用而不是 web 服务器的,io.js 的一个变体。 11 | 12 | 这不意味着 Electron 是绑定了 GUI 库的 JavaScript。相反,Electron 使用 web 页面作为它的 GUI,所以你能把它看作成一个被 JavaScript 控制的,精简版的 Chromium 浏览器。 13 | 14 | 15 | 以下资料供参考学习: 16 | 17 | [Electron(维基百科)](https://zh.wikipedia.org/wiki/Electron_(%E8%BD%AF%E4%BB%B6%E6%A1%86%E6%9E%B6)) 18 | 19 | [中文文档](https://www.w3cschool.cn/electronmanual/) 20 | 21 | [(译)Electron的本质](https://segmentfault.com/a/1190000007503495) 22 | 23 | 24 | [入门视频教程](http://ourcodeworld.com/articles/read/106/how-to-choose-read-save-delete-or-create-a-file-with-electron-framework) 25 | 26 | ### 技术栈 27 | * [x] Vue 28 | * [x] VueRouter 29 | * [x] Vuex 30 | * [x] Vue-Electron 31 | * [x] iView 32 | * [x] Eslint 33 | * [x] Babel 34 | * [x] Webpack 35 | * [x] Less 36 | 37 | 项目采用了vue-cli脚手架搭建开发环境,在开始编码之前,在gayhub上搜了一下,发现有大神写了一个基于vue和electron的脚手架,看了文档后,发现正好适合我的需要,瞬间发现了新大陆。 38 | 39 | 项目名称:`electron-vue` 40 | 41 | 项目地址:[https://github.com/SimulatedGREG/electron-vue](https://github.com/SimulatedGREG/electron-vue) 42 | 43 | 项目文档(英文的):[https://simulatedgreg.gitbooks.io/electron-vue/content/en/](https://simulatedgreg.gitbooks.io/electron-vue/content/en/) 44 | 45 | > PS:在开始编码之前要仔细阅读文档。 46 | 47 | ### 工程目录 48 | ``` bash 49 | │ 50 | ├── README.md <= 项目介绍 51 | ├── app <= 开发目录 52 | │ ├── dist <= 编译打包 53 | │ ├── icons <= 相关图标 54 | │ ├── src <= 项目源代码 55 | │ │ ├── main <= electron主进程 56 | │ │ │ ├── application.js 57 | │ │ │ ├── index.dev.js 58 | │ │ │ ├── index.js 59 | │ │ ├── renderer <= electron渲染进程 60 | │ │ │ ├── App.vue <= Vue 根组件 61 | │ │ │ ├── main.js <= Vue 入口 62 | │ │ │ ├── assets <= 静态资源 63 | │ │ │ ├── common <= 公共配置 64 | │ │ │ ├── config <= 项目配置 65 | │ │ │ ├── extend <= Vue 扩展相关 66 | │ │ │ ├── router <= Vue 路由相关 67 | │ │ │ ├── store <= Vuex 68 | │ │ │ ├── views <= 视图层 69 | │ ├── index.ejs <= 模板文件 70 | │ ├── package.json <= 相关依赖 71 | ├── build <= 打包桌面应用相关 72 | │ ├── Gruntfile.js <= 构建脚本 73 | │ ├── package.json <= 相关依赖 74 | ├── tasks <= electron-packeger打包 75 | │ ├── release.js 76 | │ ├── runner.js 77 | ├── test <= 测试文件夹 78 | │ ├── e2e 79 | │ ├── unit 80 | │ ├── .eslintrc 81 | ├── config.js <= electron打包配置 82 | ├── webpack.main.config.js 83 | ├── webpack.renderer.config.js 84 | ├── package.js 85 | │ 86 | │ 87 | ``` 88 | 89 | ### 使用说明 90 | 91 | ``` bash 92 | # install dependencies 93 | npm install 94 | 95 | # serve with hot reload at localhost:9080 96 | npm run dev 97 | 98 | # build electron app for production 99 | npm run build 100 | 101 | # lint all JS/Vue component files in `app/src` 102 | npm run lint 103 | 104 | # run webpack in production 105 | npm run pack 106 | 107 | ### login 108 | username:water 109 | password:123456 110 | ``` 111 | --- 112 | ### 制作安装程序 113 | 打包完成后进入`build`目录,执行`grunt`命令 114 | 115 | ![](https://oc1gyfe6q.qnssl.com/17-11-2/91160373.jpg) 116 | 117 | 执行完成后会有`installer`目录,双击Setup.exe安装即可 118 | 119 | ![](https://oc1gyfe6q.qnssl.com/17-11-2/61565525.jpg) 120 | 121 | ### 效果预览 122 | 123 | ![](https://oc1gyfe6q.qnssl.com/17-8-13/94171252.jpg) 124 | 125 | ![](https://oc1gyfe6q.qnssl.com/17-8-13/63034830.jpg) 126 | 127 | ![](https://oc1gyfe6q.qnssl.com/17-8-13/51761758.jpg) 128 | 129 | ![](https://oc1gyfe6q.qnssl.com/17-8-13/20713678.jpg) 130 | -------------------------------------------------------------------------------- /app/dist/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k-water/electron-filesystem/641f4d599f766a5486f57328b8c82bb2d80a7240/app/dist/.gitkeep -------------------------------------------------------------------------------- /app/icons/logo.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k-water/electron-filesystem/641f4d599f766a5486f57328b8c82bb2d80a7240/app/icons/logo.ico -------------------------------------------------------------------------------- /app/icons/logo.ico.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k-water/electron-filesystem/641f4d599f766a5486f57328b8c82bb2d80a7240/app/icons/logo.ico.icns -------------------------------------------------------------------------------- /app/index.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 文件管理器 6 | <% if (htmlWebpackPlugin.options.appModules) { %> 7 | 8 | 11 | <% } %> 12 | 13 | 14 |
15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /app/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "electron-filesystem", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "async-validator": { 8 | "version": "1.7.1", 9 | "resolved": "http://registry.npm.taobao.org/async-validator/download/async-validator-1.7.1.tgz", 10 | "integrity": "sha1-idPXo4TKXQXg8Hv1F1TVkeLP7GE=", 11 | "requires": { 12 | "babel-runtime": "6.25.0" 13 | } 14 | }, 15 | "babel-runtime": { 16 | "version": "6.25.0", 17 | "resolved": "http://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.25.0.tgz", 18 | "integrity": "sha1-M7mOql1IK7AajRqmtDetKwGuxBw=", 19 | "requires": { 20 | "core-js": "2.5.0", 21 | "regenerator-runtime": "0.10.5" 22 | } 23 | }, 24 | "core-js": { 25 | "version": "2.5.0", 26 | "resolved": "http://registry.npm.taobao.org/core-js/download/core-js-2.5.0.tgz", 27 | "integrity": "sha1-VpwFCRi+ZIazg3VSAorgRmtxcIY=" 28 | }, 29 | "deepmerge": { 30 | "version": "1.5.0", 31 | "resolved": "http://registry.npm.taobao.org/deepmerge/download/deepmerge-1.5.0.tgz", 32 | "integrity": "sha1-ALxbiP0juBMPn1BJBxw0IOB6VGU=" 33 | }, 34 | "dotenv": { 35 | "version": "4.0.0", 36 | "resolved": "http://registry.npm.taobao.org/dotenv/download/dotenv-4.0.0.tgz", 37 | "integrity": "sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=" 38 | }, 39 | "iconv-lite": { 40 | "version": "0.4.18", 41 | "resolved": "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.18.tgz", 42 | "integrity": "sha1-I9hlaxaq5nQqwpcy6o8DNqR4nPI=" 43 | }, 44 | "iview": { 45 | "version": "2.0.0", 46 | "resolved": "http://registry.npm.taobao.org/iview/download/iview-2.0.0.tgz", 47 | "integrity": "sha1-gBkd8+H/MegPTHrtsQuW2CjbCQY=", 48 | "requires": { 49 | "async-validator": "1.7.1", 50 | "core-js": "2.5.0", 51 | "deepmerge": "1.5.0", 52 | "popper.js": "0.6.4" 53 | } 54 | }, 55 | "node-wmic": { 56 | "version": "1.1.0", 57 | "resolved": "http://registry.npm.taobao.org/node-wmic/download/node-wmic-1.1.0.tgz", 58 | "integrity": "sha1-gUoGuIFkUwt2W+W8UplavuvvkFQ=", 59 | "requires": { 60 | "iconv-lite": "0.4.18" 61 | } 62 | }, 63 | "popper.js": { 64 | "version": "0.6.4", 65 | "resolved": "http://registry.npm.taobao.org/popper.js/download/popper.js-0.6.4.tgz", 66 | "integrity": "sha1-GDfEdgr1TSuyC2b5wJuSmT2Exik=" 67 | }, 68 | "regenerator-runtime": { 69 | "version": "0.10.5", 70 | "resolved": "http://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.10.5.tgz", 71 | "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=" 72 | }, 73 | "reset-css": { 74 | "version": "2.2.1", 75 | "resolved": "http://registry.npm.taobao.org/reset-css/download/reset-css-2.2.1.tgz", 76 | "integrity": "sha1-/jIEwMSDGXn7tJZ8kKmS8BZGNe0=" 77 | }, 78 | "vue": { 79 | "version": "2.4.2", 80 | "resolved": "http://registry.npm.taobao.org/vue/download/vue-2.4.2.tgz", 81 | "integrity": "sha1-qYVSYfGRyXjMDcEVBTG40IFJtYw=" 82 | }, 83 | "vue-electron": { 84 | "version": "1.0.6", 85 | "resolved": "http://registry.npm.taobao.org/vue-electron/download/vue-electron-1.0.6.tgz", 86 | "integrity": "sha1-55jgMYC4kzU53v4x+S5TuSQrlAY=" 87 | }, 88 | "vue-router": { 89 | "version": "2.7.0", 90 | "resolved": "http://registry.npm.taobao.org/vue-router/download/vue-router-2.7.0.tgz", 91 | "integrity": "sha1-FtQkSTqlHDyMzot8chDqTDqJr/E=" 92 | }, 93 | "vuex": { 94 | "version": "2.3.1", 95 | "resolved": "http://registry.npm.taobao.org/vuex/download/vuex-2.3.1.tgz", 96 | "integrity": "sha1-zejpl8H5lXcZvH3qFU+appHZgaY=" 97 | } 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /app/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "electron-filesystem", 3 | "version": "1.0.0", 4 | "description": "Simple fileSystem created with electron-vue", 5 | "main": "./dist/main.js", 6 | "dependencies": { 7 | "babel-runtime": "^6.25.0", 8 | "dotenv": "^4.0.0", 9 | "vue": "^2.1.10", 10 | "vue-electron": "^1.0.6", 11 | "vue-router": "^2.1.2", 12 | "vuex": "^2.1.1", 13 | "iconv-lite": "^0.4.18", 14 | "iview": "^2.0.0", 15 | "node-wmic": "^1.1.0", 16 | "reset-css": "^2.2.1" 17 | }, 18 | "devDependencies": {}, 19 | "author": "k-water <625592890@qq.com>" 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/application.js: -------------------------------------------------------------------------------- 1 | import { app, BrowserWindow } from 'electron' 2 | import path from 'path' 3 | export default class Application { 4 | constructor () { 5 | this.winURL = process.env.NODE_ENV === 'development' 6 | ? `http://localhost:${require('../../../config').port}` 7 | : `file://${__dirname}/index.html` 8 | this.mainWindow = undefined 9 | } 10 | 11 | createWindow () { 12 | this.mainWindow = new BrowserWindow({ 13 | width: 1920, 14 | height: 1080 15 | }) 16 | 17 | this.mainWindow.loadURL(this.winURL) 18 | 19 | this.mainWindow.on('closed', () => { 20 | this.mainWindow = null 21 | }) 22 | } 23 | 24 | onReady () { 25 | this.createWindow() 26 | } 27 | 28 | registerApplicationCallback () { 29 | app.on('ready', this.onReady.bind(this)) 30 | 31 | app.on('window-all-closed', () => { 32 | if (process.platform !== 'darwin') { 33 | app.quit() 34 | } 35 | }) 36 | 37 | app.on('activate', () => { 38 | if (this.mainWindow === null) { 39 | this.createWindow() 40 | } 41 | }) 42 | 43 | var handleStartupEvent = function () { 44 | if (process.platform !== 'win32') { 45 | return false 46 | } 47 | 48 | var squirrelCommand = process.argv[1] 49 | 50 | switch (squirrelCommand) { 51 | case '--squirrel-install': 52 | case '--squirrel-updated': 53 | install() 54 | return true 55 | case '--squirrel-uninstall': 56 | uninstall() 57 | app.quit() 58 | return true 59 | case '--squirrel-obsolete': 60 | app.quit() 61 | return true 62 | } 63 | 64 | function install () { 65 | var cp = require('child_process') 66 | var updateDotExe = path.resolve(path.dirname(process.execPath), '..', 'update.exe') 67 | var target = path.basename(process.execPath) 68 | var child = cp.spawn(updateDotExe, [ 69 | '--createShortcut', target 70 | ], {detached: true}) 71 | child.on('close', function (code) { 72 | app.quit() 73 | }) 74 | } 75 | function uninstall () { 76 | var cp = require('child_process') 77 | var updateDotExe = path.resolve(path.dirname(process.execPath), '..', 'update.exe') 78 | var target = path.basename(process.execPath) 79 | var child = cp.spawn(updateDotExe, [ 80 | '--removeShortcut', target 81 | ], {detached: true}) 82 | child.on('close', function (code) { 83 | app.quit() 84 | }) 85 | } 86 | } 87 | 88 | if (handleStartupEvent()) { 89 | return 90 | } 91 | } 92 | 93 | run () { 94 | this.registerApplicationCallback() 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /app/src/main/index.dev.js: -------------------------------------------------------------------------------- 1 | /** 2 | * This file is used specifically and only for development. It enables the use of ES6+ 3 | * features for the main process and installs `electron-debug` & `vue-devtools`. There 4 | * shouldn't be any need to modify this file, but it can be used to extend your 5 | * development environment. 6 | */ 7 | 8 | /* eslint-disable no-console */ 9 | 10 | // Set babel `env` and install `babel-register` 11 | process.env.NODE_ENV = 'development' 12 | process.env.BABEL_ENV = 'main' 13 | 14 | require('babel-register')({ 15 | ignore: /node_modules/ 16 | }) 17 | 18 | // Install `electron-debug` with `devtron` 19 | require('electron-debug')({ showDevTools: true }) 20 | 21 | // Install `vue-devtools` 22 | require('electron').app.on('ready', () => { 23 | let installExtension = require('electron-devtools-installer') 24 | installExtension.default(installExtension.VUEJS_DEVTOOLS) 25 | .then(() => {}) 26 | .catch(err => { 27 | console.log('Unable to install `vue-devtools`: \n', err) 28 | }) 29 | }) 30 | 31 | // Require `main` process to boot app 32 | require('./index') 33 | -------------------------------------------------------------------------------- /app/src/main/index.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | import Application from './application' 3 | 4 | global.application = new Application() 5 | global.application.run() 6 | -------------------------------------------------------------------------------- /app/src/renderer/App.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | 15 | 57 | -------------------------------------------------------------------------------- /app/src/renderer/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k-water/electron-filesystem/641f4d599f766a5486f57328b8c82bb2d80a7240/app/src/renderer/assets/.gitkeep -------------------------------------------------------------------------------- /app/src/renderer/assets/disk-ssd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k-water/electron-filesystem/641f4d599f766a5486f57328b8c82bb2d80a7240/app/src/renderer/assets/disk-ssd.png -------------------------------------------------------------------------------- /app/src/renderer/assets/disk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k-water/electron-filesystem/641f4d599f766a5486f57328b8c82bb2d80a7240/app/src/renderer/assets/disk.png -------------------------------------------------------------------------------- /app/src/renderer/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k-water/electron-filesystem/641f4d599f766a5486f57328b8c82bb2d80a7240/app/src/renderer/assets/logo.png -------------------------------------------------------------------------------- /app/src/renderer/common/js/file.js: -------------------------------------------------------------------------------- 1 | import { 2 | icon 3 | } from '@/common/js/icon' 4 | import { 5 | exec 6 | } from 'child_process' 7 | import iconv from 'iconv-lite' 8 | import Vue from 'vue' 9 | const fs = require('fs') 10 | 11 | /** 12 | * @export 13 | * @param {String} path 14 | * @returns 15 | * @feature 读取文件内容 16 | */ 17 | export function readFolder (path) { 18 | return getFolder(path).then(filenames => { 19 | let result = [] 20 | let promise = filenames.map(filename => { 21 | return getFileInfo(path + filename).then(stats => { 22 | result.push(stats) 23 | }).catch(err => { 24 | console.log(err) 25 | }) 26 | }) 27 | return Promise.all(promise).then(() => { 28 | console.log(result) 29 | return result 30 | }).catch(err => { 31 | return console.log(err) 32 | }) 33 | }) 34 | } 35 | /** 36 | * @export 37 | * @param {String} path 38 | * @feature 打开文件 39 | */ 40 | export function openFile (path) { 41 | exec(`${path}`, function (error, stdout, stderr) { 42 | if (error !== null) { 43 | Vue.prototype.$Notice.error({ 44 | title: '暂不支持打开该文件', 45 | duration: 2 46 | }) 47 | } 48 | }) 49 | } 50 | 51 | /** 52 | * @export 53 | * @param {String} src 54 | * @returns 55 | * @feature 读取文件夹信息 56 | */ 57 | export function getFolder (src) { 58 | return new Promise((resolve, reject) => { 59 | fs.readdir(src, (err, files) => { 60 | if (err) { 61 | reject(err) 62 | } else { 63 | resolve(files) 64 | } 65 | }) 66 | }) 67 | } 68 | 69 | /** 70 | * @export 71 | * @param {String} src 72 | * @returns 73 | * @feature 读取文件信息 74 | */ 75 | export function getFileInfo (src) { 76 | return new Promise((resolve, reject) => { 77 | fs.stat(src, (err, stats) => { 78 | if (err) { 79 | reject(err) 80 | } else { 81 | let temp = src.split('\\\\') 82 | let type = 'unknown' 83 | let seq = temp[temp.length - 1].split('.') 84 | 85 | // 类型 86 | let mime = seq[seq.length - 1] 87 | // 文件名 88 | stats.name = temp[temp.length - 1] 89 | if (stats.isDirectory()) { 90 | type = 'folder' 91 | } else if (icon.hasOwnProperty(mime.toLowerCase())) { 92 | type = mime.toLowerCase() 93 | } 94 | 95 | stats.type = icon[type].type 96 | stats.src = icon[type].src 97 | stats.path = src 98 | stats.rename = false 99 | stats.location = stats.path.slice(0, stats.path.indexOf(stats.name)) 100 | resolve(stats) 101 | } 102 | }) 103 | }) 104 | } 105 | 106 | /** 107 | * @param {Number} start 108 | * @param {Number} count 109 | * @returns 110 | * @feature 生成可遍历的连续数字 111 | */ 112 | function range (start, count) { 113 | return Array.apply(0, Array(count)) 114 | .map((element, index) => { 115 | return index + start 116 | }) 117 | } 118 | 119 | /** 120 | * @export 121 | * @param {String} to 目的路径 122 | * @returns 123 | * @feature 生成一个目录副本路径 124 | */ 125 | export function duplicateFolder (to) { 126 | if (!fs.existsSync(to)) { 127 | return to 128 | } 129 | for (let i of range(1, 100)) { 130 | if (!fs.existsSync(to + '[' + i + ']')) { 131 | return to + '[' + i + ']' 132 | } 133 | } 134 | } 135 | 136 | /** 137 | * @export 138 | * @param {String} src 139 | * @returns 140 | * @feature 新建文件夹 141 | */ 142 | 143 | export function createNewFolder (src) { 144 | return new Promise((resolve, reject) => { 145 | let dist = duplicateFolder(src + '新建文件夹') 146 | fs.mkdir(dist, 777, err => { 147 | if (err) { 148 | console.log(err) 149 | reject(err) 150 | } else { 151 | resolve(getFileInfo(dist)) 152 | } 153 | }) 154 | }) 155 | } 156 | /** 157 | * @param {String} to 目的路径 158 | * @returns 159 | * @feature 生成一个文件副本路径 160 | */ 161 | function duplicate (to) { 162 | if (!fs.existsSync(to)) { 163 | return to 164 | } 165 | let dist = to.split('.') 166 | let origin = dist[dist.length - 2] 167 | for (let i of range(1, 100)) { 168 | dist[dist.length - 2] = origin 169 | dist[dist.length - 2] += '[' + i + ']' 170 | let checkDist = dist.join('.') 171 | if (!fs.existsSync(checkDist)) { 172 | return checkDist 173 | } 174 | } 175 | } 176 | 177 | /** 178 | * @export 179 | * @param {String} src 180 | * @returns 181 | * @feature 新建文本文档 182 | */ 183 | export function createNewTxt (src) { 184 | return new Promise((resolve, reject) => { 185 | let dist = duplicate(src + '新文档.txt') 186 | fs.appendFile(dist, '', err => { 187 | if (err) { 188 | alert(err) 189 | reject(err) 190 | } else { 191 | resolve(getFileInfo(dist)) 192 | } 193 | }) 194 | }) 195 | } 196 | /** 197 | * @export 198 | * @param {String} src 路径 199 | * @param {Objec} dialog electron 200 | * @param {Boolean} alert 201 | * @returns 202 | * @feature 删除文件 203 | */ 204 | export function deleteFile (src, dialog, alert) { 205 | let buttons = ['OK', 'Cancel'] 206 | let title = '删除文件' 207 | let infoSuccess = '删除 ' + src + ' 成功!' 208 | let message = '确认要删除吗? 此操作不可逆!' 209 | return new Promise((resolve, reject) => { 210 | if (alert !== false) { 211 | dialog.showMessageBox({ 212 | type: 'question', 213 | title: title, 214 | buttons: buttons, 215 | message: message 216 | }, index => { 217 | if (index === 0) { 218 | fs.unlink(src, err => { 219 | if (err) { 220 | reject(err) 221 | } else { 222 | dialog.showMessageBox({ 223 | title: infoSuccess, 224 | detail: infoSuccess, 225 | type: 'info', 226 | buttons: ['OK'] 227 | }) 228 | resolve() 229 | } 230 | }) 231 | } else { 232 | const err = 'cancel' 233 | reject(err) 234 | } 235 | }) 236 | } else { 237 | fs.unlink(src, err => { 238 | if (err) { 239 | reject(err) 240 | } else { 241 | resolve() 242 | } 243 | }) 244 | } 245 | }) 246 | } 247 | /** 248 | * @export 249 | * @param {String} src 250 | * @param {Object} dialog 251 | * @param {Boolean} alert 252 | * @returns 253 | * @feature 删除文件夹 254 | */ 255 | export function deleteFolder (src, dialog, alert) { 256 | let buttons = ['OK', 'Cancel'] 257 | let title = '删除文件夹' 258 | let infoSuccess = '删除 ' + src + ' 成功!' 259 | let message = '确认要删除吗? 此操作不可逆!' 260 | return new Promise((resolve, reject) => { 261 | if (alert !== false) { 262 | dialog.showMessageBox({ 263 | type: 'question', 264 | title: title, 265 | buttons: buttons, 266 | message: message 267 | }, index => { 268 | if (index === 0) { 269 | exec(`rmdir "${src}" /S /Q`, { 270 | encoding: 'GB2312' 271 | }, (err, stdout, stderr) => { 272 | if (err || iconv.decode(stderr, 'GB2312')) { 273 | dialog.showErrorBox(iconv.decode(stderr, 'GB2312'), iconv.decode(stdout, 'GB2312')) 274 | reject(iconv.decode(stderr, 'GB2312')) 275 | } else { 276 | dialog.showMessageBox({ 277 | title: infoSuccess, 278 | detail: infoSuccess, 279 | type: 'info', 280 | buttons: ['OK'] 281 | }) 282 | resolve() 283 | } 284 | }) 285 | } 286 | }) 287 | } else { 288 | exec(`rmdir "${src}" /S /Q`, { 289 | encoding: 'GB2312' 290 | }, (err, stdout, stderr) => { 291 | if (err || iconv.decode(stderr, 'GB2312')) { 292 | dialog.showErrorBox(iconv.decode(stderr, 'GB2312'), iconv.decode(stdout, 'GB2312')) 293 | reject(iconv.decode(stderr, 'GB2312')) 294 | } else { 295 | resolve() 296 | } 297 | }) 298 | } 299 | }) 300 | } 301 | /** 302 | * @export 303 | * @param {String} src 304 | * @param {String} dist 305 | * @returns 306 | * @feature 重命名 307 | */ 308 | export function rename (src, dist) { 309 | return new Promise((resolve, reject) => { 310 | fs.rename(src, dist, err => { 311 | if (err) { 312 | reject(err) 313 | } else { 314 | return getFileInfo(dist).then(stat => { 315 | resolve(stat) 316 | }) 317 | } 318 | }) 319 | }) 320 | } 321 | 322 | /** 323 | * @param {String} src 324 | * @param {String} dist 325 | * @param {Object} dialog 326 | * @returns 327 | * @feature 拷贝文件 328 | */ 329 | function copy (src, dist, dialog) { 330 | return new Promise((resolve, reject) => { 331 | exec(`copy "${src}" "${dist}" /Y`, { 332 | encoding: 'GB2312' 333 | }, (err, stdout, stderr) => { 334 | if (err || iconv.decode(stderr, 'GB2312')) { 335 | dialog.showErrorBox(iconv.decode(stderr, 'GB2312'), iconv.decode(stdout, 'GB2312')) 336 | reject(iconv.decode(stderr, 'GB2312')) 337 | } else { 338 | dialog.showMessageBox({ 339 | type: 'info', 340 | title: 'Success', 341 | message: iconv.decode(stdout, 'GB2312'), 342 | buttons: ['OK'] 343 | }) 344 | getFileInfo(dist).then(stat => { 345 | resolve(stat) 346 | }) 347 | } 348 | }) 349 | }) 350 | } 351 | /** 352 | * @export 353 | * @param {String} src 354 | * @param {String} dist 355 | * @param {Object} dialog 356 | * @returns 357 | * @feature 粘贴文件 358 | */ 359 | export function copyFile (src, dist, dialog) { 360 | return new Promise((resolve, reject) => { 361 | if (src === dist) { 362 | copy(src, duplicate(dist), dialog).then(result => { 363 | resolve(result) 364 | }, err => { 365 | reject(err) 366 | }) 367 | } else { 368 | if (fs.existsSync(dist)) { 369 | let title = '重名文件存在' 370 | let message = '重名文件存在,继续粘贴将覆盖,是否继续?' 371 | const buttons = ['OK', 'Cancel'] 372 | dialog.showMessageBox({ 373 | type: 'question', 374 | title: title, 375 | buttons: buttons, 376 | message: message 377 | }, index => { 378 | if (index === 0) { 379 | copy(src, dist, dialog).then(result => { 380 | resolve(result) 381 | }, err => { 382 | reject(err) 383 | }) 384 | } 385 | }) 386 | } else { 387 | copy(src, dist, dialog).then(result => { 388 | resolve(result) 389 | }, err => { 390 | reject(err) 391 | }) 392 | } 393 | } 394 | }) 395 | } 396 | 397 | function xcopy (src, dist, dialog) { 398 | return new Promise((resolve, reject) => { 399 | exec(`xcopy "${src}" "${dist}" /E /C /Y /H /I`, { 400 | encoding: 'GB2312' 401 | }, (err, stdout, stderr) => { 402 | if (err || iconv.decode(stderr, 'GB2312')) { 403 | dialog.showErrorBox(iconv.decode(stderr, 'GB2312'), iconv.decode(stdout, 'GB2312')) 404 | reject(iconv.decode(stderr, 'GB2312')) 405 | } else { 406 | dialog.showMessageBox({ 407 | type: 'info', 408 | title: 'Success', 409 | message: iconv.decode(stdout, 'GB2312'), 410 | buttons: ['OK'] 411 | }) 412 | getFileInfo(dist).then(stat => { 413 | resolve(stat) 414 | }) 415 | } 416 | }) 417 | }) 418 | } 419 | 420 | export function copyFolder (src, dist, dialog) { 421 | return new Promise((resolve, reject) => { 422 | if (src === dist) { 423 | xcopy(src, duplicateFolder(dist), dialog).then(result => { 424 | resolve(result) 425 | }, err => { 426 | reject(err) 427 | }) 428 | } else { 429 | if (fs.existsSync(dist)) { 430 | let title = '重名文件夹存在' 431 | let message = '重名文件夹存在,继续粘贴将覆盖,是否继续?' 432 | const buttons = ['OK', 'Cancel'] 433 | dialog.showMessageBox({ 434 | type: 'question', 435 | title: title, 436 | buttons: buttons, 437 | message: message 438 | }, index => { 439 | if (index === 0) { 440 | xcopy(src, dist, dialog).then(result => { 441 | resolve(result) 442 | }, err => { 443 | reject(err) 444 | }) 445 | } else { 446 | resolve() 447 | } 448 | }) 449 | } else { 450 | xcopy(src, dist, dialog).then(result => { 451 | resolve(result) 452 | }, err => { 453 | reject(err) 454 | }) 455 | } 456 | } 457 | }) 458 | } 459 | -------------------------------------------------------------------------------- /app/src/renderer/common/js/icon.js: -------------------------------------------------------------------------------- 1 | export const icon = { 2 | '磁盘驱动器': { 3 | 'type': '磁盘驱动器', 4 | 'src': 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCIgdmlld0JveD0iMCAwIDg3MCA4NzAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDg3MCA4NzA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8Zz4KCQk8cGF0aCBkPSJNMTgwLDg3MGg1MTBjMjcuNiwwLDUwLTIyLjQsNTAtNTBWNTBjMC0yNy42LTIyLjQtNTAtNTAtNTBIMTgwYy0yNy42LDAtNTAsMjIuNC01MCw1MHY3NzBDMTMwLDg0Ny42LDE1Mi40LDg3MCwxODAsODcweiAgICAgTTY1My45LDgwOC42Yy0xNi42MDEsMC0zMC0xMy4zOTktMzAtMzBjMC0xNi42LDEzLjM5OS0zMCwzMC0zMGMxNi42LDAsMzAsMTMuNCwzMCwzMEM2ODMuOSw3OTUuMiw2NzAuNSw4MDguNiw2NTMuOSw4MDguNnogICAgIE02NTMuOSw2OGMxNi42LDAsMzAsMTMuNCwzMCwzMHMtMTMuNCwzMC0zMCwzMGMtMTYuNjAxLDAtMzAtMTMuNC0zMC0zMFM2MzcuMyw2OCw2NTMuOSw2OHogTTQzNSw5MC40ICAgIGMxMjkuNiwwLDIzNC43LDEwNS4xLDIzNC43LDIzNC43UzU2NC42LDU1OS44LDQzNSw1NTkuOGMtMjAuNCwwLTQwLjItMi42LTU5LjEtNy41bDQ0LjEtNzQuOGMxMy4xLTIyLjItMTItNDcuNC0zNC4yLTM0LjIgICAgbC0xMDIuMyw2MC4zYy0wLjIsMC4xMDEtMC4zLDAuMi0wLjQsMC4zMDFjLTUwLjYtNDMtODIuNy0xMDcuMi04Mi43LTE3OC44QzIwMC4zLDE5NS41LDMwNS40LDkwLjQsNDM1LDkwLjR6IE0yMjIuMSw2OCAgICBjMTYuNiwwLDMwLDEzLjQsMzAsMzBzLTEzLjM5OSwzMC0zMCwzMHMtMzAtMTMuNC0zMC0zMFMyMDUuNSw2OCwyMjIuMSw2OHogTTIyMi4xLDc0OC42YzE2LjYsMCwzMCwxMy40LDMwLDMwICAgIGMwLDE2LjYwMS0xMy4zOTksMzAtMzAsMzBzLTMwLTEzLjM5OS0zMC0zMEMxOTIuMSw3NjIuMSwyMDUuNSw3NDguNiwyMjIuMSw3NDguNnoiIGZpbGw9IiMwMDAwMDAiLz4KCQk8Y2lyY2xlIGN4PSI0MzUiIGN5PSIzMjUuMSIgcj0iNjIuNyIgZmlsbD0iIzAwMDAwMCIvPgoJPC9nPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+Cjwvc3ZnPgo=' 5 | }, 6 | '光盘': { 7 | 'type': '光盘', 8 | 'src': 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCIgdmlld0JveD0iMCAwIDMyIDMyIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAzMiAzMjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8Zz4KCTxnIGlkPSJDb21wYWN0X3g1Rl9EaXNjIj4KCQk8Zz4KCQkJPHBhdGggZD0iTTE2LDBDNy4xNzgsMCwwLDcuMTc4LDAsMTZzNy4xNzgsMTYsMTYsMTZjOC44MjIsMCwxNi03LjE3OCwxNi0xNlMyNC44MjIsMCwxNiwweiBNMTYsMzBDOC4yOCwzMCwyLDIzLjcyMSwyLDE2ICAgICBDMiw4LjI4LDguMjgsMiwxNiwyYzcuNzIxLDAsMTQsNi4yOCwxNCwxNEMzMCwyMy43MjEsMjMuNzIxLDMwLDE2LDMweiBNMTYsMTNjLTEuNjU0LDAtMywxLjM0Ni0zLDNjMCwxLjY1NCwxLjM0NiwzLDMsMyAgICAgYzEuNjU0LDAsMy0xLjM0NiwzLTNDMTksMTQuMzQ2LDE3LjY1NCwxMywxNiwxM3ogTTE2LDE3Yy0wLjU1MiwwLTEtMC40NDgtMS0xczAuNDQ4LTEsMS0xczEsMC40NDgsMSwxUzE2LjU1MiwxNywxNiwxN3ogTTE2LDI2ICAgICBjLTUuNTE0LDAtMTAtNC40ODYtMTAtMTBjMC0wLjU1My0wLjQ0Ny0xLTEtMXMtMSwwLjQ0Ny0xLDFjMCw2LjYxNyw1LjM4MywxMiwxMiwxMmMwLjU1MywwLDEtMC40NDcsMS0xUzE2LjU1MywyNiwxNiwyNnogTTE2LDQgICAgIGMtMC41NTMsMC0xLDAuNDQ3LTEsMXMwLjQ0NywxLDEsMWM1LjUxNCwwLDEwLDQuNDg2LDEwLDEwYzAsMC41NTMsMC40NDcsMSwxLDFzMS0wLjQ0NywxLTFDMjgsOS4zODMsMjIuNjE3LDQsMTYsNHoiIGZpbGw9IiMwMDAwMDAiLz4KCQk8L2c+Cgk8L2c+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+Cg==' 9 | }, 10 | 'CD-ROM Disc': { 11 | 'type': '光盘', 12 | 'src': 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCIgdmlld0JveD0iMCAwIDMyIDMyIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAzMiAzMjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8Zz4KCTxnIGlkPSJDb21wYWN0X3g1Rl9EaXNjIj4KCQk8Zz4KCQkJPHBhdGggZD0iTTE2LDBDNy4xNzgsMCwwLDcuMTc4LDAsMTZzNy4xNzgsMTYsMTYsMTZjOC44MjIsMCwxNi03LjE3OCwxNi0xNlMyNC44MjIsMCwxNiwweiBNMTYsMzBDOC4yOCwzMCwyLDIzLjcyMSwyLDE2ICAgICBDMiw4LjI4LDguMjgsMiwxNiwyYzcuNzIxLDAsMTQsNi4yOCwxNCwxNEMzMCwyMy43MjEsMjMuNzIxLDMwLDE2LDMweiBNMTYsMTNjLTEuNjU0LDAtMywxLjM0Ni0zLDNjMCwxLjY1NCwxLjM0NiwzLDMsMyAgICAgYzEuNjU0LDAsMy0xLjM0NiwzLTNDMTksMTQuMzQ2LDE3LjY1NCwxMywxNiwxM3ogTTE2LDE3Yy0wLjU1MiwwLTEtMC40NDgtMS0xczAuNDQ4LTEsMS0xczEsMC40NDgsMSwxUzE2LjU1MiwxNywxNiwxN3ogTTE2LDI2ICAgICBjLTUuNTE0LDAtMTAtNC40ODYtMTAtMTBjMC0wLjU1My0wLjQ0Ny0xLTEtMXMtMSwwLjQ0Ny0xLDFjMCw2LjYxNyw1LjM4MywxMiwxMiwxMmMwLjU1MywwLDEtMC40NDcsMS0xUzE2LjU1MywyNiwxNiwyNnogTTE2LDQgICAgIGMtMC41NTMsMC0xLDAuNDQ3LTEsMXMwLjQ0NywxLDEsMWM1LjUxNCwwLDEwLDQuNDg2LDEwLDEwYzAsMC41NTMsMC40NDcsMSwxLDFzMS0wLjQ0NywxLTFDMjgsOS4zODMsMjIuNjE3LDQsMTYsNHoiIGZpbGw9IiMwMDAwMDAiLz4KCQk8L2c+Cgk8L2c+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+Cg==' 13 | }, 14 | '本地固定磁盘': { 15 | 'type': '本地磁盘', 16 | 'src': 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCIgdmlld0JveD0iMCAwIDM0LjUyIDM0LjUyIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAzNC41MiAzNC41MjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8Zz4KCTxwYXRoIGQ9Ik0zNC41MiwxOC43NmMwLTAuMzI5LTAuMTA1LTAuNjMzLTAuMjg1LTAuODhMMjguMzM3LDYuMzI4QzI4LjA4LDUuODI2LDI3LjU2Niw1LjUxLDI3LjAwMSw1LjUxaC0xOS41ICAgYy0wLjU2MiwwLTEuMDgsMC4zMTYtMS4zMzYsMC44MThsLTYsMTEuNzVjLTAuMDA2LDAuMDEyLTAuMDA4LDAuMDI0LTAuMDE0LDAuMDM5Yy0wLjA0NSwwLjA5My0wLjA4LDAuMTg5LTAuMTA1LDAuMjkzICAgYy0wLjAwMywwLjAxMy0wLjAwOCwwLjAyMy0wLjAxMiwwLjAzN0MwLjAxMywxOC41NDgsMCwxOC42NTIsMCwxOC43NnY4Ljc1YzAsMC44MjksMC42NzIsMS41LDEuNSwxLjVIMzMgICBjMC44MjgsMCwxLjUtMC42NzEsMS41LTEuNXYtOC41NTdDMzQuNTA4LDE4Ljg4OSwzNC41MiwxOC44MjYsMzQuNTIsMTguNzZ6IE04LjQxNyw4LjUxSDI2LjA4bDQuNDY5LDguNzVoLTI2LjZMOC40MTcsOC41MXogICAgTTMxLjQ5OCwyNi4wMWgtMjguNXYtNS43NWgyOC41VjI2LjAxeiBNMjQsMjMuMTc2YzAtMC44MjksMC42NzItMS41LDEuNS0xLjVoMi41ODNjMC44MjcsMCwxLjUsMC42NzEsMS41LDEuNXMtMC42NzMsMS41LTEuNSwxLjUgICBIMjUuNUMyNC42NzIsMjQuNjc2LDI0LDI0LjAwNCwyNCwyMy4xNzZ6IE0xNy45MTcsMjMuMTc2YzAtMC44MjksMC42NzItMS41LDEuNS0xLjVIMjJjMC44MjgsMCwxLjUsMC42NzEsMS41LDEuNSAgIHMtMC42NzIsMS41LTEuNSwxLjVoLTIuNTgzQzE4LjU4OSwyNC42NzYsMTcuOTE3LDI0LjAwNCwxNy45MTcsMjMuMTc2eiIgZmlsbD0iIzAwMDAwMCIvPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+Cjwvc3ZnPgo=' 17 | }, 18 | 'Local Fixed Disk': { 19 | 'type': '本地磁盘', 20 | 'src': 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCIgdmlld0JveD0iMCAwIDM0LjUyIDM0LjUyIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAzNC41MiAzNC41MjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8Zz4KCTxwYXRoIGQ9Ik0zNC41MiwxOC43NmMwLTAuMzI5LTAuMTA1LTAuNjMzLTAuMjg1LTAuODhMMjguMzM3LDYuMzI4QzI4LjA4LDUuODI2LDI3LjU2Niw1LjUxLDI3LjAwMSw1LjUxaC0xOS41ICAgYy0wLjU2MiwwLTEuMDgsMC4zMTYtMS4zMzYsMC44MThsLTYsMTEuNzVjLTAuMDA2LDAuMDEyLTAuMDA4LDAuMDI0LTAuMDE0LDAuMDM5Yy0wLjA0NSwwLjA5My0wLjA4LDAuMTg5LTAuMTA1LDAuMjkzICAgYy0wLjAwMywwLjAxMy0wLjAwOCwwLjAyMy0wLjAxMiwwLjAzN0MwLjAxMywxOC41NDgsMCwxOC42NTIsMCwxOC43NnY4Ljc1YzAsMC44MjksMC42NzIsMS41LDEuNSwxLjVIMzMgICBjMC44MjgsMCwxLjUtMC42NzEsMS41LTEuNXYtOC41NTdDMzQuNTA4LDE4Ljg4OSwzNC41MiwxOC44MjYsMzQuNTIsMTguNzZ6IE04LjQxNyw4LjUxSDI2LjA4bDQuNDY5LDguNzVoLTI2LjZMOC40MTcsOC41MXogICAgTTMxLjQ5OCwyNi4wMWgtMjguNXYtNS43NWgyOC41VjI2LjAxeiBNMjQsMjMuMTc2YzAtMC44MjksMC42NzItMS41LDEuNS0xLjVoMi41ODNjMC44MjcsMCwxLjUsMC42NzEsMS41LDEuNXMtMC42NzMsMS41LTEuNSwxLjUgICBIMjUuNUMyNC42NzIsMjQuNjc2LDI0LDI0LjAwNCwyNCwyMy4xNzZ6IE0xNy45MTcsMjMuMTc2YzAtMC44MjksMC42NzItMS41LDEuNS0xLjVIMjJjMC44MjgsMCwxLjUsMC42NzEsMS41LDEuNSAgIHMtMC42NzIsMS41LTEuNSwxLjVoLTIuNTgzQzE4LjU4OSwyNC42NzYsMTcuOTE3LDI0LjAwNCwxNy45MTcsMjMuMTc2eiIgZmlsbD0iIzAwMDAwMCIvPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+Cjwvc3ZnPgo=' 21 | }, 22 | 'Network Connection': { 23 | 'type': '网络位置', 24 | 'src': 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCIgdmlld0JveD0iMCAwIDM0LjUyIDM0LjUyIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAzNC41MiAzNC41MjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8Zz4KCTxwYXRoIGQ9Ik0zNC41MiwxOC43NmMwLTAuMzI5LTAuMTA1LTAuNjMzLTAuMjg1LTAuODhMMjguMzM3LDYuMzI4QzI4LjA4LDUuODI2LDI3LjU2Niw1LjUxLDI3LjAwMSw1LjUxaC0xOS41ICAgYy0wLjU2MiwwLTEuMDgsMC4zMTYtMS4zMzYsMC44MThsLTYsMTEuNzVjLTAuMDA2LDAuMDEyLTAuMDA4LDAuMDI0LTAuMDE0LDAuMDM5Yy0wLjA0NSwwLjA5My0wLjA4LDAuMTg5LTAuMTA1LDAuMjkzICAgYy0wLjAwMywwLjAxMy0wLjAwOCwwLjAyMy0wLjAxMiwwLjAzN0MwLjAxMywxOC41NDgsMCwxOC42NTIsMCwxOC43NnY4Ljc1YzAsMC44MjksMC42NzIsMS41LDEuNSwxLjVIMzMgICBjMC44MjgsMCwxLjUtMC42NzEsMS41LTEuNXYtOC41NTdDMzQuNTA4LDE4Ljg4OSwzNC41MiwxOC44MjYsMzQuNTIsMTguNzZ6IE04LjQxNyw4LjUxSDI2LjA4bDQuNDY5LDguNzVoLTI2LjZMOC40MTcsOC41MXogICAgTTMxLjQ5OCwyNi4wMWgtMjguNXYtNS43NWgyOC41VjI2LjAxeiBNMjQsMjMuMTc2YzAtMC44MjksMC42NzItMS41LDEuNS0xLjVoMi41ODNjMC44MjcsMCwxLjUsMC42NzEsMS41LDEuNXMtMC42NzMsMS41LTEuNSwxLjUgICBIMjUuNUMyNC42NzIsMjQuNjc2LDI0LDI0LjAwNCwyNCwyMy4xNzZ6IE0xNy45MTcsMjMuMTc2YzAtMC44MjksMC42NzItMS41LDEuNS0xLjVIMjJjMC44MjgsMCwxLjUsMC42NzEsMS41LDEuNSAgIHMtMC42NzIsMS41LTEuNSwxLjVoLTIuNTgzQzE4LjU4OSwyNC42NzYsMTcuOTE3LDI0LjAwNCwxNy45MTcsMjMuMTc2eiIgZmlsbD0iIzAwMDAwMCIvPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+Cjwvc3ZnPgo=' 25 | }, 26 | 'folder': { 27 | 'type': '文件夹', 28 | 'src': 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTkuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDU4IDU4IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1OCA1ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSI1MTJweCIgaGVpZ2h0PSI1MTJweCI+CjxwYXRoIHN0eWxlPSJmaWxsOiNFRkNFNEE7IiBkPSJNNTUuOTgxLDU0LjVIMi4wMTlDMC45MDQsNTQuNSwwLDUzLjU5NiwwLDUyLjQ4MVYyMC41aDU4djMxLjk4MUM1OCw1My41OTYsNTcuMDk2LDU0LjUsNTUuOTgxLDU0LjV6ICAiLz4KPHBhdGggc3R5bGU9ImZpbGw6I0VCQkExNjsiIGQ9Ik0yNi4wMTksMTEuNVY1LjUxOUMyNi4wMTksNC40MDQsMjUuMTE1LDMuNSwyNCwzLjVIMi4wMTlDMC45MDQsMy41LDAsNC40MDQsMCw1LjUxOVYxMC41djEwaDU4ICB2LTYuOTgxYzAtMS4xMTUtMC45MDQtMi4wMTktMi4wMTktMi4wMTlIMjYuMDE5eiIvPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K' 29 | }, 30 | 'unknown': { 31 | 'type': '文件', 32 | 'src': 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTguMS4xLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDQxLjk1MyA0MS45NTMiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQxLjk1MyA0MS45NTM7IiB4bWw6c3BhY2U9InByZXNlcnZlIiB3aWR0aD0iMTZweCIgaGVpZ2h0PSIxNnB4Ij4KPGc+Cgk8Zz4KCQk8cGF0aCBkPSJNNS4zNDQsMTQuNDg3aDcuODgzYzAuOTM1LDAsMS42OTQtMC43NjEsMS42OTQtMS42OTVWMS43OTdoMTcuMzU5VjExLjk1aDEuNzk3VjEuNjk0ICAgIEMzNC4wNzYsMC43NTksMzMuMzE1LDAsMzIuMzgyLDBIMTQuODE5QzE0LjEsMCwxMy4yNiwwLjQxNywxMi44MjUsMC45OTNMNC4yMDcsMTIuNDEyYy0wLjM4MywwLjUwOC0wLjY2LDEuMzM4LTAuNjYsMS45NzR2MjMuNTQ4ICAgIGMwLDAuOTM1LDAuNzYsMS42OTQsMS42OTQsMS42OTRoMjEuMTA0di0xLjc5Nkg1LjM0NFYxNC40ODd6IE0xMy4xMjUsMy41OHY5LjExSDYuMjQ5TDEzLjEyNSwzLjU4eiIgZmlsbD0iIzAwMDAwMCIvPgoJCTxwYXRoIGQ9Ik0zMC40MzQsMzUuMjk4Yy0xLjg1MSwwLTMuMTkxLDEuNDA2LTMuMTkxLDMuMzQ2YzAsMS44ODcsMS4zNTUsMy4zMDksMy4xNTIsMy4zMDkgICAgYzEuODcxLDAsMy4yMy0xLjM5MSwzLjIzLTMuMzA5QzMzLjYyNSwzNi43MDQsMzIuMjgzLDM1LjI5OCwzMC40MzQsMzUuMjk4eiBNMzAuMzk0LDQwLjE1NGMtMC43OTksMC0xLjM1Ni0wLjYyMS0xLjM1Ni0xLjUxMSAgICBjMC0wLjkyOCwwLjU2Mi0xLjU1MSwxLjM5Ni0xLjU1MWMwLjg3MywwLDEuMzk1LDAuNTgsMS4zOTUsMS41NTFDMzEuODI4LDM5LjU3NSwzMS4yNzcsNDAuMTU0LDMwLjM5NCw0MC4xNTR6IiBmaWxsPSIjMDAwMDAwIi8+CgkJPHBhdGggZD0iTTMxLjAxOCwxMy4wNjRjLTEuODQ1LDAtMy44MjQsMC40NjYtNS4yOTcsMS4yNDVjLTAuNzg1LDAuNDE1LTEuMTQ1LDEuNDEzLTAuODE4LDIuMjcxbDAuMzY1LDAuOTYgICAgYzAuMzIxLDAuODQ2LDEuMzc5LDEuMjMyLDIuMjEzLDAuNzk5YzAuODE0LTAuNDI2LDEuODczLTAuNjgsMi44MjItMC42OGMxLjg2MywwLjAyOSwyLjgwOSwwLjg1MiwyLjgwOSwyLjQ0MyAgICBjMCwxLjQ5OS0wLjkyLDIuODc1LTIuNTEyLDQuNzVjLTEuOTg4LDIuMzg0LTIuODkyLDQuOTM4LTIuNjE1LDcuMzY3bDAuMDM3LDAuNTA2YzAuMDYsMC43NjEsMC44MDQsMS4zMzQsMS43MywxLjMzNGgxLjQ3OSAgICBjMC41MzMsMCwxLjAxNi0wLjE5LDEuMzIyLTAuNTIyYzAuMjM5LTAuMjYxLDAuMzU3LTAuNTkyLDAuMzMtMC45MzVsLTAuMDM3LTAuNDY3Yy0wLjEwNC0xLjgwMiwwLjQ5NC0zLjMzMiwyLjAwNi01LjEyMSAgICBjMi4wMTUtMi4zOTEsMy41NTUtNC40NDgsMy41NTUtNy4zNEMzOC40MDUsMTYuMzg2LDM2LjEyMSwxMy4wNjQsMzEuMDE4LDEzLjA2NHogTTMzLjQ3OCwyNS44NTkgICAgYy0xLjgwOSwyLjEzOC0yLjU1Nyw0LjEwNi0yLjQyNCw2LjQwNWgtMS4yNjdsLTAuMDE2LTAuMjEyYy0wLjIyMy0xLjk1NywwLjUzOS00LjA0OCwyLjE5OS02LjA0MSAgICBjMS44NTgtMi4xODcsMi45MzYtMy44NTQsMi45MzYtNS45MDdjMC0yLjU3MS0xLjc1Ni00LjE5Ni00LjU4MS00LjI0aC0wLjAwOWMtMS4xNjQsMC0yLjQ0NywwLjI5My0zLjQ1OSwwLjgwN2wtMC4yOTktMC43NzMgICAgYzEuMjI4LTAuNjQ4LDIuODk1LTEuMDM2LDQuNDU3LTEuMDM2YzQuMTIzLDAsNS41OTIsMi40ODcsNS41OTIsNC44MTVDMzYuNjA3LDIxLjk2OCwzNS4zMTEsMjMuNjg0LDMzLjQ3OCwyNS44NTl6IiBmaWxsPSIjMDAwMDAwIi8+Cgk8L2c+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+Cg==' 33 | }, 34 | 'jpg': { 35 | 'type': 'JPG图片', 36 | 'src': 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTguMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDU2IDU2IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1NiA1NjsiIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSI1MTJweCIgaGVpZ2h0PSI1MTJweCI+CjxnPgoJPHBhdGggc3R5bGU9ImZpbGw6I0U5RTlFMDsiIGQ9Ik0zNi45ODUsMEg3Ljk2M0M3LjE1NSwwLDYuNSwwLjY1NSw2LjUsMS45MjZWNTVjMCwwLjM0NSwwLjY1NSwxLDEuNDYzLDFoNDAuMDc0ICAgYzAuODA4LDAsMS40NjMtMC42NTUsMS40NjMtMVYxMi45NzhjMC0wLjY5Ni0wLjA5My0wLjkyLTAuMjU3LTEuMDg1TDM3LjYwNywwLjI1N0MzNy40NDIsMC4wOTMsMzcuMjE4LDAsMzYuOTg1LDB6Ii8+Cgk8cG9seWdvbiBzdHlsZT0iZmlsbDojRDlEN0NBOyIgcG9pbnRzPSIzNy41LDAuMTUxIDM3LjUsMTIgNDkuMzQ5LDEyICAiLz4KCTxjaXJjbGUgc3R5bGU9ImZpbGw6I0YzRDU1QjsiIGN4PSIxOC45MzEiIGN5PSIxNC40MzEiIHI9IjQuNTY5Ii8+Cgk8cG9seWdvbiBzdHlsZT0iZmlsbDojMjZCOTlBOyIgcG9pbnRzPSI2LjUsMzkgMTcuNSwzOSA0OS41LDM5IDQ5LjUsMjggMzkuNSwxOC41IDI5LDMwIDIzLjUxNywyNC41MTcgICIvPgoJPHBhdGggc3R5bGU9ImZpbGw6IzE0QTA4NTsiIGQ9Ik00OC4wMzcsNTZINy45NjNDNy4xNTUsNTYsNi41LDU1LjM0NSw2LjUsNTQuNTM3VjM5aDQzdjE1LjUzN0M0OS41LDU1LjM0NSw0OC44NDUsNTYsNDguMDM3LDU2eiIvPgoJPGc+CgkJPHBhdGggc3R5bGU9ImZpbGw6I0ZGRkZGRjsiIGQ9Ik0yMS40MjYsNDIuNjV2Ny44NDhjMCwwLjQ3NC0wLjA4NywwLjg3My0wLjI2LDEuMTk2Yy0wLjE3MywwLjMyMy0wLjQwNiwwLjU4My0wLjY5NywwLjc3OSAgICBjLTAuMjkyLDAuMTk2LTAuNjI3LDAuMzMzLTEuMDA1LDAuNDFDMTkuMDg1LDUyLjk2MSwxOC42OTYsNTMsMTguMjk1LDUzYy0wLjIwMSwwLTAuNDM2LTAuMDIxLTAuNzA0LTAuMDYyICAgIGMtMC4yNjktMC4wNDEtMC41NDctMC4xMDQtMC44MzQtMC4xOTFzLTAuNTYzLTAuMTg1LTAuODI3LTAuMjk0Yy0wLjI2NS0wLjEwOS0wLjQ4OC0wLjIzMi0wLjY3LTAuMzY5bDAuNjk3LTEuMTA3ICAgIGMwLjA5MSwwLjA2MywwLjIyMSwwLjEzLDAuMzksMC4xOThjMC4xNjgsMC4wNjgsMC4zNTMsMC4xMzIsMC41NTQsMC4xOTFjMC4yLDAuMDYsMC40MSwwLjExMSwwLjYyOSwwLjE1NyAgICBzMC40MjQsMC4wNjgsMC42MTUsMC4wNjhjMC40ODMsMCwwLjg2OC0wLjA5NCwxLjE1NS0wLjI4czAuNDM5LTAuNTA0LDAuNDU4LTAuOTVWNDIuNjVIMjEuNDI2eiIvPgoJCTxwYXRoIHN0eWxlPSJmaWxsOiNGRkZGRkY7IiBkPSJNMjUuNTE0LDUyLjkzMmgtMS42NDFWNDIuODU1aDIuODk4YzAuNDI4LDAsMC44NTIsMC4wNjgsMS4yNzEsMC4yMDUgICAgYzAuNDE5LDAuMTM3LDAuNzk1LDAuMzQyLDEuMTI4LDAuNjE1YzAuMzMzLDAuMjczLDAuNjAyLDAuNjA0LDAuODA3LDAuOTkxczAuMzA4LDAuODIyLDAuMzA4LDEuMzA2ICAgIGMwLDAuNTExLTAuMDg3LDAuOTczLTAuMjYsMS4zODhjLTAuMTczLDAuNDE1LTAuNDE1LDAuNzY0LTAuNzI1LDEuMDQ2Yy0wLjMxLDAuMjgyLTAuNjg0LDAuNTAxLTEuMTIxLDAuNjU2ICAgIHMtMC45MjEsMC4yMzItMS40NDksMC4yMzJoLTEuMjE3VjUyLjkzMnogTTI1LjUxNCw0NC4xdjMuOTkyaDEuNTA0YzAuMiwwLDAuMzk4LTAuMDM0LDAuNTk1LTAuMTAzICAgIGMwLjE5Ni0wLjA2OCwwLjM3Ni0wLjE4LDAuNTQtMC4zMzVzMC4yOTYtMC4zNzEsMC4zOTYtMC42NDljMC4xLTAuMjc4LDAuMTUtMC42MjIsMC4xNS0xLjAzMmMwLTAuMTY0LTAuMDIzLTAuMzU0LTAuMDY4LTAuNTY3ICAgIGMtMC4wNDYtMC4yMTQtMC4xMzktMC40MTktMC4yOC0wLjYxNWMtMC4xNDItMC4xOTYtMC4zNC0wLjM2LTAuNTk1LTAuNDkyQzI3LjUsNDQuMTY2LDI3LjE2Myw0NC4xLDI2Ljc0NCw0NC4xSDI1LjUxNHoiLz4KCQk8cGF0aCBzdHlsZT0iZmlsbDojRkZGRkZGOyIgZD0iTTM5LjUsNDcuNzM2djMuODk2Yy0wLjIxLDAuMjY1LTAuNDQ0LDAuNDgtMC43MDQsMC42NDlzLTAuNTMzLDAuMzA4LTAuODIsMC40MTcgICAgcy0wLjU4MywwLjE4Ny0wLjg4OSwwLjIzMkMzNi43ODEsNTIuOTc4LDM2LjQ3OSw1MywzNi4xNzgsNTNjLTAuNjAyLDAtMS4xNTUtMC4xMDktMS42NjEtMC4zMjhzLTAuOTQ4LTAuNTQyLTEuMzI2LTAuOTcxICAgIGMtMC4zNzgtMC40MjktMC42NzUtMC45NjYtMC44ODktMS42MTNjLTAuMjE0LTAuNjQ3LTAuMzIxLTEuMzk1LTAuMzIxLTIuMjQyczAuMTA3LTEuNTkzLDAuMzIxLTIuMjM1ICAgIGMwLjIxNC0wLjY0MywwLjUxLTEuMTc4LDAuODg5LTEuNjA2YzAuMzc4LTAuNDI5LDAuODIyLTAuNzU0LDEuMzMzLTAuOTc4YzAuNTEtMC4yMjQsMS4wNjItMC4zMzUsMS42NTQtMC4zMzUgICAgYzAuNTQ3LDAsMS4wNTcsMC4wOTEsMS41MzEsMC4yNzNjMC40NzQsMC4xODMsMC44OTcsMC40NTYsMS4yNzEsMC44MmwtMS4xMzUsMS4wMTJjLTAuMjE5LTAuMjY1LTAuNDctMC40NTYtMC43NTItMC41NzQgICAgYy0wLjI4My0wLjExOC0wLjU3NC0wLjE3OC0wLjg3NS0wLjE3OGMtMC4zMzcsMC0wLjY1OSwwLjA2My0wLjk2NCwwLjE5MWMtMC4zMDYsMC4xMjgtMC41NzksMC4zNDQtMC44MiwwLjY0OSAgICBjLTAuMjQyLDAuMzA2LTAuNDMxLDAuNjk5LTAuNTY3LDEuMTgzcy0wLjIxLDEuMDc1LTAuMjE5LDEuNzc3YzAuMDA5LDAuNjg0LDAuMDgsMS4yNzYsMC4yMTIsMS43NzcgICAgYzAuMTMyLDAuNTAxLDAuMzE0LDAuOTExLDAuNTQ3LDEuMjNzMC40OTcsMC41NTYsMC43OTMsMC43MTFjMC4yOTYsMC4xNTUsMC42MDgsMC4yMzIsMC45MzcsMC4yMzJjMC4xLDAsMC4yMzQtMC4wMDcsMC40MDMtMC4wMjEgICAgYzAuMTY4LTAuMDE0LDAuMzM3LTAuMDM2LDAuNTA2LTAuMDY4YzAuMTY4LTAuMDMyLDAuMzMtMC4wNzUsMC40ODUtMC4xM2MwLjE1NS0wLjA1NSwwLjI2OS0wLjEzMiwwLjM0Mi0wLjIzMnYtMi40ODhoLTEuNzA5ICAgIHYtMS4xMjFIMzkuNXoiLz4KCTwvZz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K' 37 | }, 38 | 'jpeg': { 39 | 'type': 'JPG图片', 40 | 'src': 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTguMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDU2IDU2IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1NiA1NjsiIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSI1MTJweCIgaGVpZ2h0PSI1MTJweCI+CjxnPgoJPHBhdGggc3R5bGU9ImZpbGw6I0U5RTlFMDsiIGQ9Ik0zNi45ODUsMEg3Ljk2M0M3LjE1NSwwLDYuNSwwLjY1NSw2LjUsMS45MjZWNTVjMCwwLjM0NSwwLjY1NSwxLDEuNDYzLDFoNDAuMDc0ICAgYzAuODA4LDAsMS40NjMtMC42NTUsMS40NjMtMVYxMi45NzhjMC0wLjY5Ni0wLjA5My0wLjkyLTAuMjU3LTEuMDg1TDM3LjYwNywwLjI1N0MzNy40NDIsMC4wOTMsMzcuMjE4LDAsMzYuOTg1LDB6Ii8+Cgk8cG9seWdvbiBzdHlsZT0iZmlsbDojRDlEN0NBOyIgcG9pbnRzPSIzNy41LDAuMTUxIDM3LjUsMTIgNDkuMzQ5LDEyICAiLz4KCTxjaXJjbGUgc3R5bGU9ImZpbGw6I0YzRDU1QjsiIGN4PSIxOC45MzEiIGN5PSIxNC40MzEiIHI9IjQuNTY5Ii8+Cgk8cG9seWdvbiBzdHlsZT0iZmlsbDojMjZCOTlBOyIgcG9pbnRzPSI2LjUsMzkgMTcuNSwzOSA0OS41LDM5IDQ5LjUsMjggMzkuNSwxOC41IDI5LDMwIDIzLjUxNywyNC41MTcgICIvPgoJPHBhdGggc3R5bGU9ImZpbGw6IzE0QTA4NTsiIGQ9Ik00OC4wMzcsNTZINy45NjNDNy4xNTUsNTYsNi41LDU1LjM0NSw2LjUsNTQuNTM3VjM5aDQzdjE1LjUzN0M0OS41LDU1LjM0NSw0OC44NDUsNTYsNDguMDM3LDU2eiIvPgoJPGc+CgkJPHBhdGggc3R5bGU9ImZpbGw6I0ZGRkZGRjsiIGQ9Ik0yMS40MjYsNDIuNjV2Ny44NDhjMCwwLjQ3NC0wLjA4NywwLjg3My0wLjI2LDEuMTk2Yy0wLjE3MywwLjMyMy0wLjQwNiwwLjU4My0wLjY5NywwLjc3OSAgICBjLTAuMjkyLDAuMTk2LTAuNjI3LDAuMzMzLTEuMDA1LDAuNDFDMTkuMDg1LDUyLjk2MSwxOC42OTYsNTMsMTguMjk1LDUzYy0wLjIwMSwwLTAuNDM2LTAuMDIxLTAuNzA0LTAuMDYyICAgIGMtMC4yNjktMC4wNDEtMC41NDctMC4xMDQtMC44MzQtMC4xOTFzLTAuNTYzLTAuMTg1LTAuODI3LTAuMjk0Yy0wLjI2NS0wLjEwOS0wLjQ4OC0wLjIzMi0wLjY3LTAuMzY5bDAuNjk3LTEuMTA3ICAgIGMwLjA5MSwwLjA2MywwLjIyMSwwLjEzLDAuMzksMC4xOThjMC4xNjgsMC4wNjgsMC4zNTMsMC4xMzIsMC41NTQsMC4xOTFjMC4yLDAuMDYsMC40MSwwLjExMSwwLjYyOSwwLjE1NyAgICBzMC40MjQsMC4wNjgsMC42MTUsMC4wNjhjMC40ODMsMCwwLjg2OC0wLjA5NCwxLjE1NS0wLjI4czAuNDM5LTAuNTA0LDAuNDU4LTAuOTVWNDIuNjVIMjEuNDI2eiIvPgoJCTxwYXRoIHN0eWxlPSJmaWxsOiNGRkZGRkY7IiBkPSJNMjUuNTE0LDUyLjkzMmgtMS42NDFWNDIuODU1aDIuODk4YzAuNDI4LDAsMC44NTIsMC4wNjgsMS4yNzEsMC4yMDUgICAgYzAuNDE5LDAuMTM3LDAuNzk1LDAuMzQyLDEuMTI4LDAuNjE1YzAuMzMzLDAuMjczLDAuNjAyLDAuNjA0LDAuODA3LDAuOTkxczAuMzA4LDAuODIyLDAuMzA4LDEuMzA2ICAgIGMwLDAuNTExLTAuMDg3LDAuOTczLTAuMjYsMS4zODhjLTAuMTczLDAuNDE1LTAuNDE1LDAuNzY0LTAuNzI1LDEuMDQ2Yy0wLjMxLDAuMjgyLTAuNjg0LDAuNTAxLTEuMTIxLDAuNjU2ICAgIHMtMC45MjEsMC4yMzItMS40NDksMC4yMzJoLTEuMjE3VjUyLjkzMnogTTI1LjUxNCw0NC4xdjMuOTkyaDEuNTA0YzAuMiwwLDAuMzk4LTAuMDM0LDAuNTk1LTAuMTAzICAgIGMwLjE5Ni0wLjA2OCwwLjM3Ni0wLjE4LDAuNTQtMC4zMzVzMC4yOTYtMC4zNzEsMC4zOTYtMC42NDljMC4xLTAuMjc4LDAuMTUtMC42MjIsMC4xNS0xLjAzMmMwLTAuMTY0LTAuMDIzLTAuMzU0LTAuMDY4LTAuNTY3ICAgIGMtMC4wNDYtMC4yMTQtMC4xMzktMC40MTktMC4yOC0wLjYxNWMtMC4xNDItMC4xOTYtMC4zNC0wLjM2LTAuNTk1LTAuNDkyQzI3LjUsNDQuMTY2LDI3LjE2Myw0NC4xLDI2Ljc0NCw0NC4xSDI1LjUxNHoiLz4KCQk8cGF0aCBzdHlsZT0iZmlsbDojRkZGRkZGOyIgZD0iTTM5LjUsNDcuNzM2djMuODk2Yy0wLjIxLDAuMjY1LTAuNDQ0LDAuNDgtMC43MDQsMC42NDlzLTAuNTMzLDAuMzA4LTAuODIsMC40MTcgICAgcy0wLjU4MywwLjE4Ny0wLjg4OSwwLjIzMkMzNi43ODEsNTIuOTc4LDM2LjQ3OSw1MywzNi4xNzgsNTNjLTAuNjAyLDAtMS4xNTUtMC4xMDktMS42NjEtMC4zMjhzLTAuOTQ4LTAuNTQyLTEuMzI2LTAuOTcxICAgIGMtMC4zNzgtMC40MjktMC42NzUtMC45NjYtMC44ODktMS42MTNjLTAuMjE0LTAuNjQ3LTAuMzIxLTEuMzk1LTAuMzIxLTIuMjQyczAuMTA3LTEuNTkzLDAuMzIxLTIuMjM1ICAgIGMwLjIxNC0wLjY0MywwLjUxLTEuMTc4LDAuODg5LTEuNjA2YzAuMzc4LTAuNDI5LDAuODIyLTAuNzU0LDEuMzMzLTAuOTc4YzAuNTEtMC4yMjQsMS4wNjItMC4zMzUsMS42NTQtMC4zMzUgICAgYzAuNTQ3LDAsMS4wNTcsMC4wOTEsMS41MzEsMC4yNzNjMC40NzQsMC4xODMsMC44OTcsMC40NTYsMS4yNzEsMC44MmwtMS4xMzUsMS4wMTJjLTAuMjE5LTAuMjY1LTAuNDctMC40NTYtMC43NTItMC41NzQgICAgYy0wLjI4My0wLjExOC0wLjU3NC0wLjE3OC0wLjg3NS0wLjE3OGMtMC4zMzcsMC0wLjY1OSwwLjA2My0wLjk2NCwwLjE5MWMtMC4zMDYsMC4xMjgtMC41NzksMC4zNDQtMC44MiwwLjY0OSAgICBjLTAuMjQyLDAuMzA2LTAuNDMxLDAuNjk5LTAuNTY3LDEuMTgzcy0wLjIxLDEuMDc1LTAuMjE5LDEuNzc3YzAuMDA5LDAuNjg0LDAuMDgsMS4yNzYsMC4yMTIsMS43NzcgICAgYzAuMTMyLDAuNTAxLDAuMzE0LDAuOTExLDAuNTQ3LDEuMjNzMC40OTcsMC41NTYsMC43OTMsMC43MTFjMC4yOTYsMC4xNTUsMC42MDgsMC4yMzIsMC45MzcsMC4yMzJjMC4xLDAsMC4yMzQtMC4wMDcsMC40MDMtMC4wMjEgICAgYzAuMTY4LTAuMDE0LDAuMzM3LTAuMDM2LDAuNTA2LTAuMDY4YzAuMTY4LTAuMDMyLDAuMzMtMC4wNzUsMC40ODUtMC4xM2MwLjE1NS0wLjA1NSwwLjI2OS0wLjEzMiwwLjM0Mi0wLjIzMnYtMi40ODhoLTEuNzA5ICAgIHYtMS4xMjFIMzkuNXoiLz4KCTwvZz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K' 41 | }, 42 | 'png': { 43 | 'type': 'PNG图片', 44 | 'src': 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTguMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDU2IDU2IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1NiA1NjsiIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSI1MTJweCIgaGVpZ2h0PSI1MTJweCI+CjxnPgoJPHBhdGggc3R5bGU9ImZpbGw6I0U5RTlFMDsiIGQ9Ik0zNi45ODUsMEg3Ljk2M0M3LjE1NSwwLDYuNSwwLjY1NSw2LjUsMS45MjZWNTVjMCwwLjM0NSwwLjY1NSwxLDEuNDYzLDFoNDAuMDc0ICAgYzAuODA4LDAsMS40NjMtMC42NTUsMS40NjMtMVYxMi45NzhjMC0wLjY5Ni0wLjA5My0wLjkyLTAuMjU3LTEuMDg1TDM3LjYwNywwLjI1N0MzNy40NDIsMC4wOTMsMzcuMjE4LDAsMzYuOTg1LDB6Ii8+Cgk8cGF0aCBzdHlsZT0iZmlsbDojNjU5QzM1OyIgZD0iTTQ4LjAzNyw1Nkg3Ljk2M0M3LjE1NSw1Niw2LjUsNTUuMzQ1LDYuNSw1NC41MzdWMzloNDN2MTUuNTM3QzQ5LjUsNTUuMzQ1LDQ4Ljg0NSw1Niw0OC4wMzcsNTZ6Ii8+Cgk8cG9seWdvbiBzdHlsZT0iZmlsbDojRDlEN0NBOyIgcG9pbnRzPSIzNy41LDAuMTUxIDM3LjUsMTIgNDkuMzQ5LDEyICAiLz4KCTxnPgoJCTxwYXRoIHN0eWxlPSJmaWxsOiNGRkZGRkY7IiBkPSJNMTcuMzg1LDUzaC0xLjY0MVY0Mi45MjRoMi44OThjMC40MjgsMCwwLjg1MiwwLjA2OCwxLjI3MSwwLjIwNSAgICBjMC40MTksMC4xMzcsMC43OTUsMC4zNDIsMS4xMjgsMC42MTVjMC4zMzMsMC4yNzMsMC42MDIsMC42MDQsMC44MDcsMC45OTFzMC4zMDgsMC44MjIsMC4zMDgsMS4zMDYgICAgYzAsMC41MTEtMC4wODcsMC45NzMtMC4yNiwxLjM4OGMtMC4xNzMsMC40MTUtMC40MTUsMC43NjQtMC43MjUsMS4wNDZjLTAuMzEsMC4yODItMC42ODQsMC41MDEtMS4xMjEsMC42NTYgICAgcy0wLjkyMSwwLjIzMi0xLjQ0OSwwLjIzMmgtMS4yMTdWNTN6IE0xNy4zODUsNDQuMTY4djMuOTkyaDEuNTA0YzAuMiwwLDAuMzk4LTAuMDM0LDAuNTk1LTAuMTAzICAgIGMwLjE5Ni0wLjA2OCwwLjM3Ni0wLjE4LDAuNTQtMC4zMzVjMC4xNjQtMC4xNTUsMC4yOTYtMC4zNzEsMC4zOTYtMC42NDljMC4xLTAuMjc4LDAuMTUtMC42MjIsMC4xNS0xLjAzMiAgICBjMC0wLjE2NC0wLjAyMy0wLjM1NC0wLjA2OC0wLjU2N2MtMC4wNDYtMC4yMTQtMC4xMzktMC40MTktMC4yOC0wLjYxNWMtMC4xNDItMC4xOTYtMC4zNC0wLjM2LTAuNTk1LTAuNDkyICAgIGMtMC4yNTUtMC4xMzItMC41OTMtMC4xOTgtMS4wMTItMC4xOThIMTcuMzg1eiIvPgoJCTxwYXRoIHN0eWxlPSJmaWxsOiNGRkZGRkY7IiBkPSJNMzEuMzE2LDQyLjkyNFY1M2gtMS42NjhsLTMuOTUxLTYuOTQ1VjUzaC0xLjY2OFY0Mi45MjRoMS42NjhsMy45NTEsNi45NDV2LTYuOTQ1SDMxLjMxNnoiLz4KCQk8cGF0aCBzdHlsZT0iZmlsbDojRkZGRkZGOyIgZD0iTTQxLjE2LDQ3LjgwNXYzLjg5NmMtMC4yMSwwLjI2NS0wLjQ0NCwwLjQ4LTAuNzA0LDAuNjQ5cy0wLjUzMywwLjMwOC0wLjgyLDAuNDE3ICAgIFMzOS4wNTIsNTIuOTU0LDM4Ljc0Nyw1M2MtMC4zMDYsMC4wNDYtMC42MDgsMC4wNjgtMC45MDksMC4wNjhjLTAuNjAyLDAtMS4xNTUtMC4xMDktMS42NjEtMC4zMjhzLTAuOTQ4LTAuNTQyLTEuMzI2LTAuOTcxICAgIGMtMC4zNzgtMC40MjktMC42NzUtMC45NjYtMC44ODktMS42MTNjLTAuMjE0LTAuNjQ3LTAuMzIxLTEuMzk1LTAuMzIxLTIuMjQyczAuMTA3LTEuNTkzLDAuMzIxLTIuMjM1ICAgIGMwLjIxNC0wLjY0MywwLjUxLTEuMTc4LDAuODg5LTEuNjA2YzAuMzc4LTAuNDI5LDAuODIyLTAuNzU0LDEuMzMzLTAuOTc4YzAuNTEtMC4yMjQsMS4wNjItMC4zMzUsMS42NTQtMC4zMzUgICAgYzAuNTQ3LDAsMS4wNTcsMC4wOTEsMS41MzEsMC4yNzNjMC40NzQsMC4xODMsMC44OTcsMC40NTYsMS4yNzEsMC44MmwtMS4xMzUsMS4wMTJjLTAuMjE5LTAuMjY1LTAuNDctMC40NTYtMC43NTItMC41NzQgICAgYy0wLjI4My0wLjExOC0wLjU3NC0wLjE3OC0wLjg3NS0wLjE3OGMtMC4zMzcsMC0wLjY1OSwwLjA2My0wLjk2NCwwLjE5MWMtMC4zMDYsMC4xMjgtMC41NzksMC4zNDQtMC44MiwwLjY0OSAgICBjLTAuMjQyLDAuMzA2LTAuNDMxLDAuNjk5LTAuNTY3LDEuMTgzcy0wLjIxLDEuMDc1LTAuMjE5LDEuNzc3YzAuMDA5LDAuNjg0LDAuMDgsMS4yNzYsMC4yMTIsMS43NzcgICAgYzAuMTMyLDAuNTAxLDAuMzE0LDAuOTExLDAuNTQ3LDEuMjNzMC40OTcsMC41NTYsMC43OTMsMC43MTFjMC4yOTYsMC4xNTUsMC42MDgsMC4yMzIsMC45MzcsMC4yMzJjMC4xLDAsMC4yMzQtMC4wMDcsMC40MDMtMC4wMjEgICAgYzAuMTY4LTAuMDE0LDAuMzM3LTAuMDM2LDAuNTA2LTAuMDY4YzAuMTY4LTAuMDMyLDAuMzMtMC4wNzUsMC40ODUtMC4xM2MwLjE1NS0wLjA1NSwwLjI2OS0wLjEzMiwwLjM0Mi0wLjIzMnYtMi40ODhoLTEuNzA5ICAgIHYtMS4xMjFINDEuMTZ6Ii8+Cgk8L2c+Cgk8Y2lyY2xlIHN0eWxlPSJmaWxsOiNGM0Q1NUI7IiBjeD0iMTguOTMxIiBjeT0iMTQuNDMxIiByPSI0LjU2OSIvPgoJPHBvbHlnb24gc3R5bGU9ImZpbGw6Izg4QzA1NzsiIHBvaW50cz0iNi41LDM5IDE3LjUsMzkgNDkuNSwzOSA0OS41LDI4IDM5LjUsMTguNSAyOSwzMCAyMy41MTcsMjQuNTE3ICAiLz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K' 45 | }, 46 | 'ico': { 47 | 'type': 'ICO图标', 48 | 'src': 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTkuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeD0iMHB4IiB5PSIwcHgiIHZpZXdCb3g9IjAgMCAzMDMuMTg4IDMwMy4xODgiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMwMy4xODggMzAzLjE4ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSI1MTJweCIgaGVpZ2h0PSI1MTJweCI+CjxnPgoJPHBvbHlnb24gc3R5bGU9ImZpbGw6I0U4RThFODsiIHBvaW50cz0iMjE5LjgyMSwwIDMyLjg0MiwwIDMyLjg0MiwzMDMuMTg4IDI3MC4zNDYsMzAzLjE4OCAyNzAuMzQ2LDUwLjUyNSAgIi8+Cgk8Zz4KCQk8cGF0aCBzdHlsZT0iZmlsbDojMDA0QTk0OyIgZD0iTTIwNi44NDEsMTYwLjQ2N2MwLDEwLjg1My04Ljg4LDE5LjczMi0xOS43MzIsMTkuNzMyaC03MS4wM2MtMTAuODUzLDAtMTkuNzMyLTguODgtMTkuNzMyLTE5LjczMiAgICB2LTcxLjAzYzAtMTAuODUzLDguODgtMTkuNzMyLDE5LjczMi0xOS43MzJoNzEuMDNjMTAuODUzLDAsMTkuNzMyLDguODgsMTkuNzMyLDE5LjczMlYxNjAuNDY3eiIvPgoJCTxwb2x5Z29uIHN0eWxlPSJmaWxsOiNGRkZGRkY7IiBwb2ludHM9IjE2OC4wMjYsMTA1LjUyNyAxNjguMDI2LDk1LjA3MyAxMzUuMTU5LDk1LjA3MyAxMzUuMTU5LDEwNS41MjcgMTQ2LjM2NiwxMDUuNTI3ICAgICAxNDYuMzY2LDE0NC4zNzUgMTM1LjE1OSwxNDQuMzc1IDEzNS4xNTksMTU0LjgyOSAxNjguMDI2LDE1NC44MjkgMTY4LjAyNiwxNDQuMzc1IDE1Ni44MTksMTQ0LjM3NSAxNTYuODE5LDEwNS41MjcgICAiLz4KCTwvZz4KCTxnPgoJCTxwYXRoIHN0eWxlPSJmaWxsOiNBNEE5QUQ7IiBkPSJNOTUuNzQ3LDI3My44NzF2LTQ3Ljk3OWgxMy4wMjl2NDcuOTc5SDk1Ljc0N3oiLz4KCQk8cGF0aCBzdHlsZT0iZmlsbDojQTRBOUFEOyIgZD0iTTE0MC41MTEsMjM1LjgzNmMtMy4wODYsMC01LjQ5MiwxLjI2NC03LjIyMSwzLjc5Yy0xLjcyOSwyLjUyNi0yLjU5Miw2LjAxMS0yLjU5MiwxMC40NTIgICAgYzAsOS4yMzMsMy41MTIsMTMuODUsMTAuNTM0LDEzLjg1YzIuMTIyLDAsNC4xNzktMC4yOTYsNi4xNy0wLjg4N2MxLjk5LTAuNTksMy45OTItMS4zMDEsNi4wMDUtMi4xMzN2MTAuOTYxICAgIGMtNC4wMDMsMS43NzItOC41MzIsMi42NTgtMTMuNTg2LDIuNjU4Yy03LjI0MiwwLTEyLjc5NC0yLjEtMTYuNjU0LTYuMzAxYy0zLjg2Mi00LjIwMS01Ljc5My0xMC4yNzItNS43OTMtMTguMjE0ICAgIGMwLTQuOTY2LDAuOTM2LTkuMzMxLDIuODA2LTEzLjA5NWMxLjg3LTMuNzYyLDQuNTYyLTYuNjU2LDguMDczLTguNjhjMy41MTItMi4wMjMsNy42NDEtMy4wMzUsMTIuMzg5LTMuMDM1ICAgIGM1LjE4NiwwLDEwLjE0MSwxLjEyNywxNC44NjYsMy4zOGwtMy45NzEsMTAuMjA2Yy0xLjc3Mi0wLjgzMS0zLjU0NC0xLjUzMS01LjMxNi0yLjEgICAgQzE0NC40NDgsMjM2LjEyLDE0Mi41NDUsMjM1LjgzNiwxNDAuNTExLDIzNS44MzZ6Ii8+CgkJPHBhdGggc3R5bGU9ImZpbGw6I0E0QTlBRDsiIGQ9Ik0yMDcuNjU1LDI0OS44MTZjMCw4LjA3Mi0xLjk4LDE0LjIwOS01Ljk0LDE4LjQxcy05Ljc1OCw2LjMwMS0xNy4zOTQsNi4zMDEgICAgYy03LjUyNiwwLTEzLjI5Ny0yLjExMS0xNy4zMTItNi4zMzRjLTQuMDE1LTQuMjIyLTYuMDIxLTEwLjM3LTYuMDIxLTE4LjQ0M2MwLTcuOTg1LDEuOTk2LTE0LjA4NCw1Ljk4OS0xOC4yOTUgICAgYzMuOTkyLTQuMjEyLDkuNzk2LTYuMzE4LDE3LjQwOS02LjMxOGM3LjYzNiwwLDEzLjQyMywyLjA5LDE3LjM2MSw2LjI2OEMyMDUuNjg2LDIzNS41ODQsMjA3LjY1NSwyNDEuNzIxLDIwNy42NTUsMjQ5LjgxNnogICAgIE0xNzQuNjQxLDI0OS44MTZjMCw5LjI3NSwzLjIyNywxMy45MTQsOS42ODEsMTMuOTE0YzMuMjgyLDAsNS43MTYtMS4xMjcsNy4zMDItMy4zODFjMS41ODYtMi4yNTIsMi4zOC01Ljc2NCwyLjM4LTEwLjUzMyAgICBjMC00Ljc5Mi0wLjgwNS04LjMzLTIuNDEyLTEwLjYxN2MtMS42MDgtMi4yODUtNC4wMS0zLjQzLTcuMjA0LTMuNDNDMTc3Ljg5LDIzNS43NywxNzQuNjQxLDI0MC40NTIsMTc0LjY0MSwyNDkuODE2eiIvPgoJPC9nPgoJPHBvbHlnb24gc3R5bGU9ImZpbGw6IzAwNEE5NDsiIHBvaW50cz0iMjI3LjY0LDI1LjI2MyAzMi44NDIsMjUuMjYzIDMyLjg0MiwwIDIxOS44MjEsMCAgIi8+Cgk8cG9seWdvbiBzdHlsZT0iZmlsbDojRDFEM0QzOyIgcG9pbnRzPSIyMTkuODIxLDUwLjUyNSAyNzAuMzQ2LDUwLjUyNSAyMTkuODIxLDAgICIvPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+Cjwvc3ZnPgo=' 49 | }, 50 | 'gif': { 51 | 'type': 'GIF图片', 52 | 'src': 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTkuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeD0iMHB4IiB5PSIwcHgiIHZpZXdCb3g9IjAgMCAzMDMuMTg4IDMwMy4xODgiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMwMy4xODggMzAzLjE4ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSI1MTJweCIgaGVpZ2h0PSI1MTJweCI+CjxnPgoJPHBvbHlnb24gc3R5bGU9ImZpbGw6I0U4RThFODsiIHBvaW50cz0iMjE5LjgyMSwwIDMyLjg0MiwwIDMyLjg0MiwzMDMuMTg4IDI3MC4zNDYsMzAzLjE4OCAyNzAuMzQ2LDUwLjUyNSAgIi8+Cgk8Zz4KCQk8cmVjdCB4PSI5MC45MDIiIHk9IjYxLjcwNCIgc3R5bGU9ImZpbGw6IzM4QTNGRjsiIHdpZHRoPSIxMTkuODkiIGhlaWdodD0iMTE5Ljg5Ii8+CgkJPHBvbHlnb24gc3R5bGU9ImZpbGw6IzAwNzkzNDsiIHBvaW50cz0iMTg0Ljc5NSwxMjIuNjc4IDE2MC45ODMsMTYyLjg1OCAxMjIuMjQzLDk3LjQ4NCA5MC45MDIsMTUwLjM3MiA5MC45MDIsMTgxLjU5MyAgICAgMjEwLjc5MiwxODEuNTkzIDIxMC43OTIsMTY2LjU0OSAgICIvPgoJCTxnPgoJCQk8cGF0aCBzdHlsZT0iZmlsbDojRkZGRkZGOyIgZD0iTTE4Ny43OSwxMDguMDcxYy01LjQzOS0xNS42NjUtMjAuMjQtMjYuMTktMzYuODMyLTI2LjE5Yy0xNi42MDEsMC0zMC44MDMsMTAuNDM2LTM2LjQxMiwyNS4wODkgICAgIGwtMC4yNTUtMC41NDJjLTEuMDE3LTIuMTYxLTMuNTkyLTMuMDg3LTUuNzUzLTIuMDcyYy0yLjE2LDEuMDE3LTMuMDg4LDMuNTkyLTIuMDcyLDUuNzUzbDUuOTI0LDEyLjU5MSAgICAgYzAuNTg0LDEuMjQyLDEuNzIzLDIuMTMyLDMuMDY4LDIuNGMwLjI4MSwwLjA1NiwwLjU2MywwLjA4MywwLjg0NCwwLjA4M2MxLjA2NiwwLDIuMTA2LTAuMzk0LDIuOTA5LTEuMTI1bDEwLjI5NS05LjM2MiAgICAgYzEuNzY3LTEuNjA2LDEuODk2LTQuMzQxLDAuMjg5LTYuMTA3Yy0xLjYwNi0xLjc2Ny00LjM0MS0xLjg5Ni02LjEwNy0wLjI5bC0wLjU1OCwwLjUwOCAgICAgYzQuNjcxLTEwLjc0NCwxNS4zODQtMTguMjc4LDI3LjgyNy0xOC4yNzhjMTIuOTEyLDAsMjQuNDMxLDguMTg5LDI4LjY2MywyMC4zNzljMC43ODQsMi4yNTcsMy4yNDksMy40NDksNS41MDMsMi42NjcgICAgIEMxODcuMzc5LDExMi43OTEsMTg4LjU3MywxMTAuMzI3LDE4Ny43OSwxMDguMDcxeiIvPgoJCQk8cGF0aCBzdHlsZT0iZmlsbDojRkZGRkZGOyIgZD0iTTE5NS40NSwxMzEuNjExbC01LjkyNC0xMi41OTJjLTAuNTg0LTEuMjQxLTEuNzIzLTIuMTMyLTMuMDY4LTIuNCAgICAgYy0xLjM0Ny0wLjI2OS0yLjczOSwwLjExOC0zLjc1MywxLjA0MmwtMTAuMjk1LDkuMzYyYy0xLjc2NywxLjYwNi0xLjg5Niw0LjM0MS0wLjI5LDYuMTA3YzEuNjA2LDEuNzY3LDQuMzQxLDEuODk2LDYuMTA3LDAuMjkgICAgIGwwLjU1OC0wLjUwOGMtNC42NzEsMTAuNzQ0LTE1LjM4NCwxOC4yNzgtMjcuODI3LDE4LjI3OGMtMTIuOTEyLDAtMjQuNDMxLTguMTg5LTI4LjY2My0yMC4zNzkgICAgIGMtMC43ODMtMi4yNTYtMy4yNDgtMy40NDktNS41MDItMi42NjdjLTIuMjU2LDAuNzgzLTMuNDUsMy4yNDctMi42NjcsNS41MDNjNS40MzksMTUuNjY1LDIwLjI0LDI2LjE5LDM2LjgzMSwyNi4xOSAgICAgYzE2LjYwMSwwLDMwLjgwMy0xMC40MzYsMzYuNDEyLTI1LjA4OWwwLjI1NSwwLjU0MmMwLjczNywxLjU2NiwyLjI5MiwyLjQ4NCwzLjkxNiwyLjQ4NGMwLjYxNywwLDEuMjQzLTAuMTMyLDEuODM4LTAuNDEyICAgICBDMTk1LjUzOCwxMzYuMzQ4LDE5Ni40NjYsMTMzLjc3MiwxOTUuNDUsMTMxLjYxMXoiLz4KCQk8L2c+Cgk8L2c+Cgk8cG9seWdvbiBzdHlsZT0iZmlsbDojMzhBM0ZGOyIgcG9pbnRzPSIyMjcuNjQsMjUuMjYzIDMyLjg0MiwyNS4yNjMgMzIuODQyLDAgMjE5LjgyMSwwICAiLz4KCTxnPgoJCTxwYXRoIHN0eWxlPSJmaWxsOiNBNEE5QUQ7IiBkPSJNMTIwLjYwNiwyNDUuNzc5aDIwLjcwOHYyNS44NmMtNS42MjQsMS45MjUtMTEuODA0LDIuODg4LTE4LjU0MiwyLjg4OCAgICBjLTcuMzk2LDAtMTMuMTExLTIuMTQ0LTE3LjE0Ny02LjQzMmMtNC4wMzctNC4yODgtNi4wNTUtMTAuNDAzLTYuMDU1LTE4LjM0NWMwLTcuNzQ1LDIuMjEtMTMuNzcyLDYuNjI5LTE4LjA4MyAgICBjNC40MTktNC4zMDksMTAuNjExLTYuNDY1LDE4LjU3NS02LjQ2NWMzLjAyLDAsNS44NjksMC4yODUsOC41NDksMC44NTNjMi42OCwwLjU2OSw1LjAxNSwxLjI5Miw3LjAwNywyLjE2NmwtNC4xMDIsMTAuMTc0ICAgIGMtMy40NTctMS43MDctNy4yNTMtMi41Ni0xMS4zODgtMi41NmMtMy43ODUsMC02LjcxMSwxLjIzMS04Ljc3OSwzLjY5MmMtMi4wNjcsMi40NjEtMy4xMDEsNS45NzktMy4xMDEsMTAuNTUxICAgIGMwLDQuNDg1LDAuOTM1LDcuOTA0LDIuODA2LDEwLjI1NnM0LjU2NywzLjUyOCw4LjA5LDMuNTI4YzEuOTI1LDAsMy42OTctMC4xODYsNS4zMTYtMC41NTh2LTcuNTE1aC04LjU2NUwxMjAuNjA2LDI0NS43NzkgICAgTDEyMC42MDYsMjQ1Ljc3OXoiLz4KCQk8cGF0aCBzdHlsZT0iZmlsbDojQTRBOUFEOyIgZD0iTTE1MS4wOTQsMjczLjg3MXYtNDcuOTc5aDEzLjAyOHY0Ny45NzlIMTUxLjA5NHoiLz4KCQk8cGF0aCBzdHlsZT0iZmlsbDojQTRBOUFEOyIgZD0iTTE4Ny4yNTksMjczLjg3MWgtMTIuNzY2di00Ny45NzloMjguMzU1djEwLjQwM2gtMTUuNTg5djkuMTU2aDE0LjM3NHYxMC40MDNoLTE0LjM3NCAgICBMMTg3LjI1OSwyNzMuODcxTDE4Ny4yNTksMjczLjg3MXoiLz4KCTwvZz4KCTxwb2x5Z29uIHN0eWxlPSJmaWxsOiNEMUQzRDM7IiBwb2ludHM9IjIxOS44MjEsNTAuNTI1IDI3MC4zNDYsNTAuNTI1IDIxOS44MjEsMCAgIi8+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+Cg==' 53 | }, 54 | 'bmp': { 55 | 'type': 'BMP图片', 56 | 'src': 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCIgdmlld0JveD0iMCAwIDU1MC44MDEgNTUwLjgwMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTUwLjgwMSA1NTAuODAxOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxnPgoJPGc+CgkJPHBhdGggZD0iTTE1Ny4zNjIsNDYxLjUxNmgtOC43MDF2MzEuODA1YzIuNTA3LDAuMzMyLDUuNTE5LDAuMzMyLDkuODcyLDAuMzMyYzExLjU1MSwwLDIxLjc0NS00LjM1MSwyMS43NDUtMTYuMjMxICAgIEMxODAuMjc4LDQ2Ni4wMzUsMTcwLjA3OSw0NjEuNTE2LDE1Ny4zNjIsNDYxLjUxNnoiIGZpbGw9IiM5MURDNUEiLz4KCQk8cGF0aCBkPSJNNDAxLjgyNSw0MTcuMDAzYy01LjE4OCwwLTguNzA2LDAuNTA2LTEwLjU0MSwxLjAxOHYzMy4yOTdjMi4xNjcsMC41MDEsNC44NDYsMC42NjQsOC41MjYsMC42NjQgICAgYzEzLjU1OSwwLDIxLjkyOC02Ljg2LDIxLjkyOC0xOC40MDRDNDIxLjczOCw0MjMuMTkzLDQxNC41NDUsNDE3LjAwMyw0MDEuODI1LDQxNy4wMDN6IiBmaWxsPSIjOTFEQzVBIi8+CgkJPHBhdGggZD0iTTQ3NS4wOTUsMTMxLjk5MmMtMC4wMzItMi41MjYtMC44MzMtNS4wMjEtMi41NjgtNi45OTNMMzY2LjMyNCwzLjY5NGMtMC4wMjEtMC4wMzEtMC4wNTMtMC4wNDUtMC4wODQtMC4wNzYgICAgYy0wLjYzMy0wLjcwNy0xLjM2LTEuMjktMi4xNDEtMS44MDRjLTAuMjMyLTAuMTUtMC40NjUtMC4yODUtMC43MDctMC40MjJjLTAuNjg2LTAuMzY2LTEuMzkzLTAuNjctMi4xMzEtMC44OTIgICAgYy0wLjItMC4wNTgtMC4zNzktMC4xNC0wLjU4LTAuMTkyQzM1OS44NywwLjExOSwzNTkuMDQ3LDAsMzU4LjIwMywwSDk3LjJDODUuMjkyLDAsNzUuNiw5LjY5Myw3NS42LDIxLjYwMXY1MDcuNiAgICBjMCwxMS45MTMsOS42OTIsMjEuNjAxLDIxLjYsMjEuNjAxSDQ1My42YzExLjkxOCwwLDIxLjYwMS05LjY4OCwyMS42MDEtMjEuNjAxVjEzMy4yMDIgICAgQzQ3NS4yLDEzMi43OTYsNDc1LjEzNywxMzIuMzk4LDQ3NS4wOTUsMTMxLjk5MnogTTE5NS4zNDQsNTAyLjM0OGMtOC4yMDMsNi41MjktMjEuOTIxLDEwLjIxLTQ0LjM1LDEwLjIxICAgIGMtMTIuNTQzLDAtMjEuOTE5LTAuODMzLTI3LjYwNC0xLjY3N1Y0MDAuMTA2YzYuNjk0LTEuMzM5LDIwLjI0NS0yLjM0MSwzMi45NjEtMi4zNDFjMTUuNTYyLDAsMjUuMDk5LDEuNDk3LDMzLjMwMiw2LjM1NCAgICBjNy44NjMsNC4xODIsMTMuNTUzLDExLjg4MSwxMy41NTMsMjIuMDljMCwxMC4wNDEtNS44NTksMTkuNDE3LTE4LjU3LDI0LjF2MC4zMzhjMTIuODg2LDMuNTEyLDIyLjQyMiwxMy4yMTUsMjIuNDIyLDI3Ljc4ICAgIEMyMDcuMDU5LDQ4OC42MjcsMjAyLjM3MSw0OTYuNjYzLDE5NS4zNDQsNTAyLjM0OHogTTMyMS41MDYsNTExLjM4N2wtMS42NzItNDMuMTc0Yy0wLjUwNi0xMy41NTMtMS4wMDctMjkuOTUzLTEuMDA3LTQ2LjM1NCAgICBoLTAuNDk2Yy0zLjUxOCwxNC4zOTItOC4yMTEsMzAuNDU0LTEyLjU1Niw0My42NzVsLTEzLjcyMiw0NC4wMDdoLTE5LjkxbC0xMi4wNDctNDMuNjc1ICAgIGMtMy42ODQtMTMuMjE1LTcuNTMzLTI5LjI3OC0xMC4yMTItNDQuMDA3aC0wLjMzNWMtMC42NywxNS4yMjUtMS4xNzYsMzIuNjMyLTIuMDA5LDQ2LjY4NmwtMi4wMDYsNDIuODQ3SDIyMS45NGw3LjE5My0xMTIuNzkzICAgIGgzMy45NzFsMTEuMDQyLDM3LjY1N2MzLjUxNSwxMy4wNTIsNy4wMzIsMjcuMTExLDkuNTQyLDQwLjMzMWgwLjUwMWMzLjE4MS0xMy4wNTcsNy4wMy0yNy45NDksMTAuNzExLTQwLjQ5NGwxMi4wNDQtMzcuNDgzICAgIGgzMy4zMDJsNi4xODcsMTEyLjc4OGgtMjQuOTI4VjUxMS4zODd6IE00MzYuNjMsNDU5LjY4MWMtOC43MDEsOC4yLTIxLjU4OSwxMS44ODEtMzYuNjUsMTEuODgxYy0zLjM0MywwLTYuMzU5LTAuMTY5LTguNjk1LTAuNTA2ICAgIHY0MC4zMzFoLTI1LjI3NnYtMTExLjI4YzcuODY4LTEuMzM5LDE4LjkxMS0yLjM0MSwzNC40NzMtMi4zNDFjMTUuNzMsMCwyNi45NDIsMy4wMTEsMzQuNDczLDkuMDM4ICAgIGM3LjE5Myw1LjY4NSwxMi4wNDUsMTUuMDU2LDEyLjA0NSwyNi4wOTlDNDQ2Ljk5OCw0NDMuOTUsNDQzLjMyNyw0NTMuMzIxLDQzNi42Myw0NTkuNjgxeiBNOTcuMiwzNjYuNzUyVjIxLjYwMWgyNTAuMjAzdjExMC41MTUgICAgYzAsNS45NjEsNC44MzEsMTAuOCwxMC44LDEwLjhINDUzLjZsMC4wMTEsMjIzLjgzNkg5Ny4yeiIgZmlsbD0iIzkxREM1QSIvPgoJCTxwYXRoIGQ9Ik0xNzcuNjA2LDQyOS4zOTZjMC04LjUzMi02LjUyMy0xMy4wNTgtMTguMDc0LTEzLjA1OGMtNS41MTksMC04LjY5OSwwLjMzOC0xMC44NzcsMC42NjV2MjYuMjc3aDguMzY3ICAgIEMxNzAuNDE0LDQ0My4yOCwxNzcuNjA2LDQzNy43NTksMTc3LjYwNiw0MjkuMzk2eiIgZmlsbD0iIzkxREM1QSIvPgoJPC9nPgoJPGc+CgkJPHBhdGggZD0iTTMyMS4xODQsMTcxLjI5NWMtMy45NzYsMC03LjY0NiwwLjcyOC0xMC43MjYsMS45NzVjLTEuMjQ1LTEuMjA4LTIuOTQyLTEuOTc1LTQuODEtMS45NzVoLTIuNzkgICAgYy0zLjU0OSwwLTYuMzU5LDIuNy02Ljc2Niw2LjEzM2MtOC41OSwwLjkwMi0xNC45NjYsNC4wMDMtMTQuOTY2LDcuNzIzYzAsNC40MjIsOC45NjUsNy45OTgsMjAuMDI4LDcuOTk4ICAgIGMzLjIzOCwwLDYuMjU1LTAuMzQsOC45NDktMC44NjVjMy4xMjcsMS4zMzksNi45MzksMi4xNDQsMTEuMDc5LDIuMTQ0YzEwLjU5LDAsMTkuMTY0LTUuMTg5LDE5LjE2NC0xMS41NjQgICAgQzM0MC4zNTgsMTc2LjQ3OSwzMzEuNzgzLDE3MS4yOTUsMzIxLjE4NCwxNzEuMjk1eiIgZmlsbD0iIzkxREM1QSIvPgoJCTxwYXRoIGQ9Ik0yMDQuMDQ1LDE1MC44MzRjLTguODcyLDAtMTYuMDQ0LDcuMTY5LTE2LjA0NCwxNi4wMWMwLDguODU3LDcuMTcyLDE2LjAyMywxNi4wNDQsMTYuMDIzICAgIGM4Ljg0NCwwLDE2LjAxNi03LjE2NywxNi4wMTYtMTYuMDIzQzIyMC4wNjEsMTU4LjAwMywyMTIuODg5LDE1MC44MzQsMjA0LjA0NSwxNTAuODM0eiIgZmlsbD0iIzkxREM1QSIvPgoJCTxwYXRoIGQ9Ik0xNjQuNDY4LDEwMy44Njl2MjA4Ljg0NmgyMDguNzk3VjEwMy44NjlIMTY0LjQ2OHogTTM1Ni4wMjEsMjQ5LjY3NGMwLDcuOTQ0LTMuMDU5LDE1LjEzOC04LjAwNSwyMC40NCAgICBjLTcuNjg5LTE5LjY0Ni0xNy4xMTgtNDAuOTg1LTMwLjQ2LTM3LjU2OGMtMTYuOTE3LDQuMzI3LTI1Ljk3Nyw0MS4wNjItMjcuMjY0LDQ2LjY1MWgtMC4zMzcgICAgYy0xLjI4Mi02LjA4Ni0xMS4wNjQtNDkuMzA3LTM1LjAzNy03My4zMjJjLTI0LjAzMS0yNC4wMjEtNDcuMzYzLDYwLjcxOS01MC41MTIsNzIuNjc0ICAgIGMtMTIuOTU5LTIuODIxLTIyLjY4Ny0xNC42NzYtMjIuNjg3LTI4Ljg3NXYtOTQuOTU5YzAtMTYuMjkyLDEyLjgyLTI5LjUxLDI4LjY0OC0yOS41MUgzMjcuMzdjMTUuODI1LDAsMjguNjUsMTMuMjE4LDI4LjY1LDI5LjUxICAgIFYyNDkuNjc0TDM1Ni4wMjEsMjQ5LjY3NHoiIGZpbGw9IiM5MURDNUEiLz4KCTwvZz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K' 57 | }, 58 | 'yml': { 59 | 'type': 'YML文档', 60 | 'src': 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCIgdmlld0JveD0iMCAwIDU3My43NSA1NzMuNzUiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDU3My43NSA1NzMuNzU7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8Zz4KCQk8cG9seWdvbiBwb2ludHM9IjI2Ny43NSwyOTYuNDM4IDIzOS4wNjIsMzM4LjUxMyAyMTAuMzc1LDI5Ni40MzggMjEwLjM3NSwyNzcuMzEyIDE5MS4yNSwyNzcuMzEyIDE5MS4yNSwyOTYuNDM4IDIyOS41LDM1My44MTIgICAgIDIyOS41LDQxMS4xODggMjQ4LjYyNSw0MTEuMTg4IDI0OC42MjUsMzUzLjgxMiAyODYuODc1LDI5Ni40MzggMjg2Ljg3NSwyNzcuMzEyIDI2Ny43NSwyNzcuMzEyICAgIiBmaWxsPSIjMDAwMDAwIi8+CgkJPHBhdGggZD0iTTUxNi4zNzUsMjE5LjkzOGgtMTUzdi01Ny4zNzVMMjQ4LjYyNSwyOC42ODhIMzguMjVDMTcuMjEyLDI4LjY4OCwwLDQ1LjksMCw2Ni45Mzh2NDM5Ljg3NSAgICBjMCwyMS4wMzcsMTcuMjEyLDM4LjI1LDM4LjI1LDM4LjI1aDI4Ni44NzVjMjEuMDM3LDAsMzguMjUtMTcuMjEzLDM4LjI1LTM4LjI1di0zOC4yNWgxNTNjMzIuNTEzLDAsNTcuMzc1LTI0Ljg2Miw1Ny4zNzUtNTcuMzc1ICAgIFYyNzcuMzEyQzU3My43NSwyNDQuOCw1NDguODg4LDIxOS45MzgsNTE2LjM3NSwyMTkuOTM4eiBNMjQ4LjYyNSw1Ny4zNzVsODkuODg4LDEwNS4xODhIMjY3Ljc1ICAgIGMtOS41NjIsMC0xOS4xMjUtOS41NjItMTkuMTI1LTE5LjEyNVY1Ny4zNzV6IE0zNDQuMjUsNTA2LjgxMmMwLDkuNTYyLTcuNjUsMTkuMTI1LTE5LjEyNSwxOS4xMjVIMzguMjUgICAgYy05LjU2MiwwLTE5LjEyNS03LjY1LTE5LjEyNS0xOS4xMjVWNjYuOTM4YzAtOS41NjIsNy42NS0xOS4xMjUsMTkuMTI1LTE5LjEyNUgyMjkuNXY5NS42MjVjMCwyMS4wMzgsMTcuMjEyLDM4LjI1LDM4LjI1LDM4LjI1ICAgIGg3Ni41djM4LjI1aC0xNTNjLTMyLjUxMywwLTU3LjM3NSwyNC44NjItNTcuMzc1LDU3LjM3NXYxMzMuODc1YzAsMzIuNTEzLDI0Ljg2Miw1Ny4zNzUsNTcuMzc1LDU3LjM3NWgxNTNWNTA2LjgxMnogICAgIE01NTQuNjI1LDQxMS4xODhjMCwyMS4wMzctMTcuMjEzLDM4LjI1LTM4LjI1LDM4LjI1SDE5MS4yNWMtMjEuMDM4LDAtMzguMjUtMTcuMjEzLTM4LjI1LTM4LjI1VjI3Ny4zMTIgICAgYzAtMjEuMDM4LDE3LjIxMi0zOC4yNSwzOC4yNS0zOC4yNWgzMjUuMTI1YzIxLjAzNywwLDM4LjI1LDE3LjIxMiwzOC4yNSwzOC4yNVY0MTEuMTg4eiIgZmlsbD0iIzAwMDAwMCIvPgoJCTxwb2x5Z29uIHBvaW50cz0iMzgyLjUsMjc3LjMxMiAzNTMuODEyLDMzNC42ODggMzI1LjEyNSwyNzcuMzEyIDMxNS41NjIsMjc3LjMxMiAzMDYsMjc3LjMxMiAzMDYsNDExLjE4OCAzMjUuMTI1LDQxMS4xODggICAgIDMyNS4xMjUsMzE1LjU2MiAzNDQuMjUsMzUzLjgxMiAzNTMuODEyLDM1My44MTIgMzYzLjM3NSwzNTMuODEyIDM4Mi41LDMxNS41NjIgMzgyLjUsNDExLjE4OCA0MDEuNjI1LDQxMS4xODggNDAxLjYyNSwyNzcuMzEyICAgICAzOTIuMDYyLDI3Ny4zMTIgICAiIGZpbGw9IiMwMDAwMDAiLz4KCQk8cG9seWdvbiBwb2ludHM9IjQzOS44NzUsMjc3LjMxMiA0MjAuNzUsMjc3LjMxMiA0MjAuNzUsNDExLjE4OCA1MTYuMzc1LDQxMS4xODggNTE2LjM3NSwzOTIuMDYyIDQzOS44NzUsMzkyLjA2MiAgICIgZmlsbD0iIzAwMDAwMCIvPgoJPC9nPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+Cjwvc3ZnPgo=' 61 | }, 62 | 'exe': { 63 | 'type': 'EXE执行文件', 64 | 'src': 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCIgdmlld0JveD0iMCAwIDQzOS44NzUgNDM5Ljg3NSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDM5Ljg3NSA0MzkuODc1OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxnPgoJPGc+CgkJPHBvbHlnb24gcG9pbnRzPSIyNDguNjI1LDE1MyAyMTkuOTM4LDIwMi43MjUgMTkxLjI1LDE1MyAxNzIuMTI1LDE1MyAyMTAuMzc1LDIxOS45MzggMTcyLjEyNSwyODYuODc1IDE5MS4yNSwyODYuODc1ICAgICAyMTkuOTM4LDIzNy4xNSAyNDguNjI1LDI4Ni44NzUgMjY3Ljc1LDI4Ni44NzUgMjI5LjUsMjE5LjkzOCAyNjcuNzUsMTUzICAgIiBmaWxsPSIjMDAwMDAwIi8+CgkJPHBvbHlnb24gcG9pbnRzPSI1Ny4zNzUsMTUzIDU3LjM3NSwyODYuODc1IDc2LjUsMjg2Ljg3NSAxNTMsMjg2Ljg3NSAxNTMsMjY3Ljc1IDc2LjUsMjY3Ljc1IDc2LjUsMjI5LjUgMTMzLjg3NSwyMjkuNSAgICAgMTMzLjg3NSwyMTAuMzc1IDc2LjUsMjEwLjM3NSA3Ni41LDE3Mi4xMjUgMTUzLDE3Mi4xMjUgMTUzLDE1MyA3Ni41LDE1MyAgICIgZmlsbD0iIzAwMDAwMCIvPgoJCTxwb2x5Z29uIHBvaW50cz0iMjg2Ljg3NSwxNTMgMjg2Ljg3NSwyODYuODc1IDMwNiwyODYuODc1IDM4Mi41LDI4Ni44NzUgMzgyLjUsMjY3Ljc1IDMwNiwyNjcuNzUgMzA2LDIyOS41IDM2My4zNzUsMjI5LjUgICAgIDM2My4zNzUsMjEwLjM3NSAzMDYsMjEwLjM3NSAzMDYsMTcyLjEyNSAzODIuNSwxNzIuMTI1IDM4Mi41LDE1MyAzMDYsMTUzICAgIiBmaWxsPSIjMDAwMDAwIi8+CgkJPHBhdGggZD0iTTM4Mi41LDk1LjYyNUg1Ny4zNzVDMjQuODYyLDk1LjYyNSwwLDEyMC40ODcsMCwxNTN2MTMzLjg3NWMwLDMyLjUxMywyNC44NjIsNTcuMzc1LDU3LjM3NSw1Ny4zNzVIMzgyLjUgICAgYzMyLjUxMywwLDU3LjM3NS0yNC44NjIsNTcuMzc1LTU3LjM3NVYxNTNDNDM5Ljg3NSwxMjAuNDg3LDQxNS4wMTMsOTUuNjI1LDM4Mi41LDk1LjYyNXogTTQyMC43NSwyODYuODc1ICAgIGMwLDIxLjAzNy0xNy4yMTMsMzguMjUtMzguMjUsMzguMjVINTcuMzc1Yy0yMS4wMzgsMC0zOC4yNS0xNy4yMTMtMzguMjUtMzguMjVWMTUzYzAtMjEuMDM4LDE3LjIxMi0zOC4yNSwzOC4yNS0zOC4yNUgzODIuNSAgICBjMjEuMDM3LDAsMzguMjUsMTcuMjEyLDM4LjI1LDM4LjI1VjI4Ni44NzV6IiBmaWxsPSIjMDAwMDAwIi8+Cgk8L2c+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+Cg==' 65 | }, 66 | 'iso': { 67 | 'type': 'ISO镜像文件', 68 | 'src': 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTguMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDU2IDU2IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1NiA1NjsiIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSI1MTJweCIgaGVpZ2h0PSI1MTJweCI+CjxnPgoJPHBhdGggc3R5bGU9ImZpbGw6I0U5RTlFMDsiIGQ9Ik0zNi45ODUsMEg3Ljk2M0M3LjE1NSwwLDYuNSwwLjY1NSw2LjUsMS45MjZWNTVjMCwwLjM0NSwwLjY1NSwxLDEuNDYzLDFoNDAuMDc0ICAgYzAuODA4LDAsMS40NjMtMC42NTUsMS40NjMtMVYxMi45NzhjMC0wLjY5Ni0wLjA5My0wLjkyLTAuMjU3LTEuMDg1TDM3LjYwNywwLjI1N0MzNy40NDIsMC4wOTMsMzcuMjE4LDAsMzYuOTg1LDB6Ii8+Cgk8cG9seWdvbiBzdHlsZT0iZmlsbDojRDlEN0NBOyIgcG9pbnRzPSIzNy41LDAuMTUxIDM3LjUsMTIgNDkuMzQ5LDEyICAiLz4KCTxwYXRoIHN0eWxlPSJmaWxsOiM3MUMyODU7IiBkPSJNNDguMDM3LDU2SDcuOTYzQzcuMTU1LDU2LDYuNSw1NS4zNDUsNi41LDU0LjUzN1YzOWg0M3YxNS41MzdDNDkuNSw1NS4zNDUsNDguODQ1LDU2LDQ4LjAzNyw1NnoiLz4KCTxnPgoJCTxwYXRoIHN0eWxlPSJmaWxsOiNGRkZGRkY7IiBkPSJNMjAuNDUzLDUzaC0xLjY2OFY0Mi45MjRoMS42NjhWNTN6Ii8+CgkJPHBhdGggc3R5bGU9ImZpbGw6I0ZGRkZGRjsiIGQ9Ik0yOC42Nyw1MC4yMzhjMCwwLjM2NC0wLjA3NSwwLjcxOC0wLjIyNiwxLjA2cy0wLjM2MiwwLjY0My0wLjYzNiwwLjkwMnMtMC42MTEsMC40NjctMS4wMTIsMC42MjIgICAgYy0wLjQwMSwwLjE1NS0wLjg1NywwLjIzMi0xLjM2NywwLjIzMmMtMC4yMTksMC0wLjQ0NC0wLjAxMi0wLjY3Ny0wLjAzNHMtMC40NjgtMC4wNjItMC43MDQtMC4xMTYgICAgYy0wLjIzNy0wLjA1NS0wLjQ2My0wLjEzLTAuNjc3LTAuMjI2cy0wLjM5OS0wLjIxMi0wLjU1NC0wLjM0OWwwLjI4Ny0xLjE3NmMwLjEyNywwLjA3MywwLjI4OSwwLjE0NCwwLjQ4NSwwLjIxMiAgICBzMC4zOTgsMC4xMzIsMC42MDgsMC4xOTFjMC4yMDksMC4wNiwwLjQxOSwwLjEwNywwLjYyOSwwLjE0NGMwLjIwOSwwLjAzNiwwLjQwNSwwLjA1NSwwLjU4OCwwLjA1NWMwLjU1NiwwLDAuOTgyLTAuMTMsMS4yNzgtMC4zOSAgICBzMC40NDQtMC42NDUsMC40NDQtMS4xNTVjMC0wLjMxLTAuMTA1LTAuNTc0LTAuMzE0LTAuNzkzYy0wLjIxLTAuMjE5LTAuNDcyLTAuNDE3LTAuNzg2LTAuNTk1cy0wLjY1NC0wLjM1NS0xLjAxOS0wLjUzMyAgICBjLTAuMzY1LTAuMTc4LTAuNzA3LTAuMzg4LTEuMDI1LTAuNjI5Yy0wLjMxOS0wLjI0MS0wLjU4NC0wLjUyNi0wLjc5My0wLjg1NGMtMC4yMS0wLjMyOC0wLjMxNC0wLjczOC0wLjMxNC0xLjIzICAgIGMwLTAuNDQ2LDAuMDgyLTAuODQzLDAuMjQ2LTEuMTg5czAuMzg1LTAuNjQxLDAuNjYzLTAuODgyczAuNjAyLTAuNDI2LDAuOTcxLTAuNTU0czAuNzU5LTAuMTkxLDEuMTY5LTAuMTkxICAgIGMwLjQxOSwwLDAuODQzLDAuMDM5LDEuMjcxLDAuMTE2YzAuNDI4LDAuMDc3LDAuNzc0LDAuMjAzLDEuMDM5LDAuMzc2Yy0wLjA1NSwwLjExOC0wLjExOSwwLjI0OC0wLjE5MSwwLjM5ICAgIGMtMC4wNzMsMC4xNDItMC4xNDIsMC4yNzMtMC4yMDUsMC4zOTZjLTAuMDY0LDAuMTIzLTAuMTE5LDAuMjI2LTAuMTY0LDAuMzA4Yy0wLjA0NiwwLjA4Mi0wLjA3MywwLjEyOC0wLjA4MiwwLjEzNyAgICBjLTAuMDU1LTAuMDI3LTAuMTE2LTAuMDYzLTAuMTg1LTAuMTA5cy0wLjE2Ny0wLjA5MS0wLjI5NC0wLjEzN2MtMC4xMjgtMC4wNDYtMC4yOTctMC4wNzctMC41MDYtMC4wOTYgICAgYy0wLjIxLTAuMDE5LTAuNDc5LTAuMDE0LTAuODA3LDAuMDE0Yy0wLjE4MywwLjAxOS0wLjM1NSwwLjA3LTAuNTIsMC4xNTdzLTAuMzExLDAuMTkzLTAuNDM4LDAuMzIxICAgIGMtMC4xMjgsMC4xMjgtMC4yMjksMC4yNzEtMC4zMDEsMC40MzFjLTAuMDczLDAuMTU5LTAuMTA5LDAuMzEzLTAuMTA5LDAuNDU4YzAsMC4zNjQsMC4xMDQsMC42NTgsMC4zMTQsMC44ODIgICAgYzAuMjA5LDAuMjI0LDAuNDY5LDAuNDE5LDAuNzc5LDAuNTg4YzAuMzEsMC4xNjksMC42NDYsMC4zMzMsMS4wMTIsMC40OTJjMC4zNjQsMC4xNTksMC43MDQsMC4zNTQsMS4wMTksMC41ODEgICAgczAuNTc2LDAuNTEzLDAuNzg2LDAuODU0QzI4LjU2NCw0OS4yNjEsMjguNjcsNDkuNywyOC42Nyw1MC4yMzh6Ii8+CgkJPHBhdGggc3R5bGU9ImZpbGw6I0ZGRkZGRjsiIGQ9Ik0zOC41NjgsNDcuOTE0YzAsMC44NDgtMC4xMDcsMS41OTUtMC4zMjEsMi4yNDJzLTAuNTExLDEuMTg1LTAuODg5LDEuNjEzcy0wLjgyLDAuNzUyLTEuMzI2LDAuOTcxICAgIHMtMS4wNiwwLjMyOC0xLjY2MSwwLjMyOHMtMS4xNTUtMC4xMDktMS42NjEtMC4zMjhzLTAuOTQ4LTAuNTQyLTEuMzI2LTAuOTcxcy0wLjY3NS0wLjk2Ni0wLjg4OS0xLjYxM3MtMC4zMjEtMS4zOTUtMC4zMjEtMi4yNDIgICAgczAuMTA3LTEuNTkzLDAuMzIxLTIuMjM1czAuNTExLTEuMTc4LDAuODg5LTEuNjA2czAuODItMC43NTQsMS4zMjYtMC45NzhzMS4wNi0wLjMzNSwxLjY2MS0wLjMzNXMxLjE1NSwwLjExMSwxLjY2MSwwLjMzNSAgICBzMC45NDgsMC41NDksMS4zMjYsMC45NzhzMC42NzUsMC45NjQsMC44ODksMS42MDZTMzguNTY4LDQ3LjA2NiwzOC41NjgsNDcuOTE0eiBNMzQuMzMsNTEuNzI5YzAuMzM3LDAsMC42NTgtMC4wNjYsMC45NjQtMC4xOTggICAgczAuNTc5LTAuMzQ5LDAuODItMC42NDlzMC40MzEtMC42OTUsMC41NjctMS4xODNzMC4yMDktMS4wODIsMC4yMTktMS43ODRjLTAuMDEtMC42ODQtMC4wOC0xLjI2NS0wLjIxMi0xLjc0MyAgICBzLTAuMzE0LTAuODczLTAuNTQ3LTEuMTgzcy0wLjQ5Ny0wLjUzMy0wLjc5My0wLjY3cy0wLjYwOC0wLjIwNS0wLjkzNy0wLjIwNWMtMC4zMzgsMC0wLjY1OCwwLjA2My0wLjk2NCwwLjE5MSAgICBzLTAuNTc5LDAuMzQ0LTAuODIsMC42NDlzLTAuNDMxLDAuNjk5LTAuNTY3LDEuMTgzcy0wLjIxLDEuMDc1LTAuMjE5LDEuNzc3YzAuMDA5LDAuNjg0LDAuMDgsMS4yNjcsMC4yMTIsMS43NSAgICBzMC4zMTQsMC44NzcsMC41NDcsMS4xODNzMC40OTcsMC41MjgsMC43OTMsMC42N1MzNC4wMDIsNTEuNzI5LDM0LjMzLDUxLjcyOXoiLz4KCTwvZz4KCTxjaXJjbGUgc3R5bGU9ImZpbGw6I0M4QkRCODsiIGN4PSIyNy41IiBjeT0iMjEiIHI9IjEyIi8+Cgk8Y2lyY2xlIHN0eWxlPSJmaWxsOiNFOUU5RTA7IiBjeD0iMjcuNSIgY3k9IjIxIiByPSIzIi8+Cgk8cGF0aCBzdHlsZT0iZmlsbDojRDNDQ0M5OyIgZD0iTTI1LjM3OSwxOC44NzljMC4xMzItMC4xMzIsMC4yNzYtMC4yNDUsMC40MjUtMC4zNDdsLTIuMzYxLTguODEzICAgYy0xLjYxNSwwLjU3OS0zLjEzNCwxLjUwMy00LjQyNywyLjc5NmMtMS4yOTQsMS4yOTMtMi4yMTcsMi44MTItMi43OTYsNC40MjdsOC44MTMsMi4zNjEgICBDMjUuMTM0LDE5LjE1NSwyNS4yNDcsMTkuMDExLDI1LjM3OSwxOC44Nzl6Ii8+Cgk8cGF0aCBzdHlsZT0iZmlsbDojRDNDQ0M5OyIgZD0iTTMwLjA3MSwyMy40ODZsMi4yNzMsOC40ODNjMS4zMi0wLjU4MiwyLjU2LTEuNDAyLDMuNjQxLTIuNDg0YzEuMjUzLTEuMjUzLDIuMTYtMi43MTcsMi43NDMtNC4yNzUgICBsLTguMTg4LTIuMTk0QzMwLjI1NSwyMi45MzksMjkuOTk0LDIzLjIsMzAuMDcxLDIzLjQ4NnoiLz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K' 69 | }, 70 | 'txt': { 71 | 'type': 'TXT文档', 72 | 'src': 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTguMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDU2IDU2IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1NiA1NjsiIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSI1MTJweCIgaGVpZ2h0PSI1MTJweCI+CjxnPgoJPHBhdGggc3R5bGU9ImZpbGw6I0U5RTlFMDsiIGQ9Ik0zNi45ODUsMEg3Ljk2M0M3LjE1NSwwLDYuNSwwLjY1NSw2LjUsMS45MjZWNTVjMCwwLjM0NSwwLjY1NSwxLDEuNDYzLDFoNDAuMDc0ICAgYzAuODA4LDAsMS40NjMtMC42NTUsMS40NjMtMVYxMi45NzhjMC0wLjY5Ni0wLjA5My0wLjkyLTAuMjU3LTEuMDg1TDM3LjYwNywwLjI1N0MzNy40NDIsMC4wOTMsMzcuMjE4LDAsMzYuOTg1LDB6Ii8+Cgk8cG9seWdvbiBzdHlsZT0iZmlsbDojRDlEN0NBOyIgcG9pbnRzPSIzNy41LDAuMTUxIDM3LjUsMTIgNDkuMzQ5LDEyICAiLz4KCTxwYXRoIHN0eWxlPSJmaWxsOiM5NUE1QTU7IiBkPSJNNDguMDM3LDU2SDcuOTYzQzcuMTU1LDU2LDYuNSw1NS4zNDUsNi41LDU0LjUzN1YzOWg0M3YxNS41MzdDNDkuNSw1NS4zNDUsNDguODQ1LDU2LDQ4LjAzNyw1NnoiLz4KCTxnPgoJCTxwYXRoIHN0eWxlPSJmaWxsOiNGRkZGRkY7IiBkPSJNMjEuODY3LDQyLjkyNHYxLjEyMWgtMy4wMDhWNTNoLTEuNjU0di04Ljk1NWgtMy4wMDh2LTEuMTIxSDIxLjg2N3oiLz4KCQk8cGF0aCBzdHlsZT0iZmlsbDojRkZGRkZGOyIgZD0iTTI4LjQ0Myw0OC4xMDVMMzEsNTNoLTEuOWwtMS42LTMuODAxaC0wLjEzN0wyNS42NDEsNTNoLTEuOWwyLjU1Ny00Ljg5NWwtMi43MjEtNS4xODJoMS44NzMgICAgbDEuNzc3LDQuMTAyaDAuMTM3bDEuOTI4LTQuMTAyaDEuODczTDI4LjQ0Myw0OC4xMDV6Ii8+CgkJPHBhdGggc3R5bGU9ImZpbGw6I0ZGRkZGRjsiIGQ9Ik00MC41MjksNDIuOTI0djEuMTIxaC0zLjAwOFY1M2gtMS42NTR2LTguOTU1aC0zLjAwOHYtMS4xMjFINDAuNTI5eiIvPgoJPC9nPgoJPHBhdGggc3R5bGU9ImZpbGw6I0M4QkRCODsiIGQ9Ik0xOC41LDEzaC02Yy0wLjU1MywwLTEtMC40NDgtMS0xczAuNDQ3LTEsMS0xaDZjMC41NTMsMCwxLDAuNDQ4LDEsMVMxOS4wNTMsMTMsMTguNSwxM3oiLz4KCTxwYXRoIHN0eWxlPSJmaWxsOiNDOEJEQjg7IiBkPSJNMjEuNSwxOGgtOWMtMC41NTMsMC0xLTAuNDQ4LTEtMXMwLjQ0Ny0xLDEtMWg5YzAuNTUzLDAsMSwwLjQ0OCwxLDFTMjIuMDUzLDE4LDIxLjUsMTh6Ii8+Cgk8cGF0aCBzdHlsZT0iZmlsbDojQzhCREI4OyIgZD0iTTI1LjUsMThjLTAuMjYsMC0wLjUyMS0wLjExLTAuNzEtMC4yOWMtMC4xODEtMC4xOS0wLjI5LTAuNDQtMC4yOS0wLjcxczAuMTA5LTAuNTIsMC4zLTAuNzEgICBjMC4zNi0wLjM3LDEuMDQtMC4zNywxLjQxLDBjMC4xOCwwLjE5LDAuMjksMC40NSwwLjI5LDAuNzFjMCwwLjI2LTAuMTEsMC41Mi0wLjI5LDAuNzFDMjYuMDIsMTcuODksMjUuNzYsMTgsMjUuNSwxOHoiLz4KCTxwYXRoIHN0eWxlPSJmaWxsOiNDOEJEQjg7IiBkPSJNMzcuNSwxOGgtOGMtMC41NTMsMC0xLTAuNDQ4LTEtMXMwLjQ0Ny0xLDEtMWg4YzAuNTUzLDAsMSwwLjQ0OCwxLDFTMzguMDUzLDE4LDM3LjUsMTh6Ii8+Cgk8cGF0aCBzdHlsZT0iZmlsbDojQzhCREI4OyIgZD0iTTEyLjUsMzNjLTAuMjYsMC0wLjUyMS0wLjExLTAuNzEtMC4yOWMtMC4xODEtMC4xOS0wLjI5LTAuNDUtMC4yOS0wLjcxICAgYzAtMC4yNiwwLjEwOS0wLjUyLDAuMjktMC43MWMwLjM3LTAuMzcsMS4wNS0wLjM3LDEuNDIsMC4wMWMwLjE4LDAuMTgsMC4yOSwwLjQ0LDAuMjksMC43YzAsMC4yNi0wLjExLDAuNTItMC4yOSwwLjcxICAgQzEzLjAyLDMyLjg5LDEyLjc2LDMzLDEyLjUsMzN6Ii8+Cgk8cGF0aCBzdHlsZT0iZmlsbDojQzhCREI4OyIgZD0iTTI0LjUsMzNoLThjLTAuNTUzLDAtMS0wLjQ0OC0xLTFzMC40NDctMSwxLTFoOGMwLjU1MywwLDEsMC40NDgsMSwxUzI1LjA1MywzMywyNC41LDMzeiIvPgoJPHBhdGggc3R5bGU9ImZpbGw6I0M4QkRCODsiIGQ9Ik00My41LDE4aC0yYy0wLjU1MywwLTEtMC40NDgtMS0xczAuNDQ3LTEsMS0xaDJjMC41NTMsMCwxLDAuNDQ4LDEsMVM0NC4wNTMsMTgsNDMuNSwxOHoiLz4KCTxwYXRoIHN0eWxlPSJmaWxsOiNDOEJEQjg7IiBkPSJNMzQuNSwyM2gtMjJjLTAuNTUzLDAtMS0wLjQ0OC0xLTFzMC40NDctMSwxLTFoMjJjMC41NTMsMCwxLDAuNDQ4LDEsMVMzNS4wNTMsMjMsMzQuNSwyM3oiLz4KCTxwYXRoIHN0eWxlPSJmaWxsOiNDOEJEQjg7IiBkPSJNNDMuNSwyM2gtNmMtMC41NTMsMC0xLTAuNDQ4LTEtMXMwLjQ0Ny0xLDEtMWg2YzAuNTUzLDAsMSwwLjQ0OCwxLDFTNDQuMDUzLDIzLDQzLjUsMjN6Ii8+Cgk8cGF0aCBzdHlsZT0iZmlsbDojQzhCREI4OyIgZD0iTTE2LjUsMjhoLTRjLTAuNTUzLDAtMS0wLjQ0OC0xLTFzMC40NDctMSwxLTFoNGMwLjU1MywwLDEsMC40NDgsMSwxUzE3LjA1MywyOCwxNi41LDI4eiIvPgoJPHBhdGggc3R5bGU9ImZpbGw6I0M4QkRCODsiIGQ9Ik0zMC41LDI4aC0xMGMtMC41NTMsMC0xLTAuNDQ4LTEtMXMwLjQ0Ny0xLDEtMWgxMGMwLjU1MywwLDEsMC40NDgsMSwxUzMxLjA1MywyOCwzMC41LDI4eiIvPgoJPHBhdGggc3R5bGU9ImZpbGw6I0M4QkRCODsiIGQ9Ik00My41LDI4aC05Yy0wLjU1MywwLTEtMC40NDgtMS0xczAuNDQ3LTEsMS0xaDljMC41NTMsMCwxLDAuNDQ4LDEsMVM0NC4wNTMsMjgsNDMuNSwyOHoiLz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K' 73 | }, 74 | 'md': { 75 | 'type': 'MarkDown文档', 76 | 'src': 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTkuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDU4IDU4IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1OCA1ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSI1MTJweCIgaGVpZ2h0PSI1MTJweCI+Cjxwb2x5Z29uIHN0eWxlPSJmaWxsOiNFREVBREE7IiBwb2ludHM9IjUxLjUsMTQgMzcuNSwwIDYuNSwwIDYuNSw1OCA1MS41LDU4ICIvPgo8Zz4KCTxwYXRoIHN0eWxlPSJmaWxsOiNDRUM5QUU7IiBkPSJNMTYuNSwyM2gyNWMwLjU1MiwwLDEtMC40NDcsMS0xcy0wLjQ0OC0xLTEtMWgtMjVjLTAuNTUyLDAtMSwwLjQ0Ny0xLDFTMTUuOTQ4LDIzLDE2LjUsMjN6Ii8+Cgk8cGF0aCBzdHlsZT0iZmlsbDojQ0VDOUFFOyIgZD0iTTE2LjUsMTVoMTBjMC41NTIsMCwxLTAuNDQ3LDEtMXMtMC40NDgtMS0xLTFoLTEwYy0wLjU1MiwwLTEsMC40NDctMSwxUzE1Ljk0OCwxNSwxNi41LDE1eiIvPgoJPHBhdGggc3R5bGU9ImZpbGw6I0NFQzlBRTsiIGQ9Ik00MS41LDI5aC0yNWMtMC41NTIsMC0xLDAuNDQ3LTEsMXMwLjQ0OCwxLDEsMWgyNWMwLjU1MiwwLDEtMC40NDcsMS0xUzQyLjA1MiwyOSw0MS41LDI5eiIvPgoJPHBhdGggc3R5bGU9ImZpbGw6I0NFQzlBRTsiIGQ9Ik00MS41LDM3aC0yNWMtMC41NTIsMC0xLDAuNDQ3LTEsMXMwLjQ0OCwxLDEsMWgyNWMwLjU1MiwwLDEtMC40NDcsMS0xUzQyLjA1MiwzNyw0MS41LDM3eiIvPgoJPHBhdGggc3R5bGU9ImZpbGw6I0NFQzlBRTsiIGQ9Ik00MS41LDQ1aC0yNWMtMC41NTIsMC0xLDAuNDQ3LTEsMXMwLjQ0OCwxLDEsMWgyNWMwLjU1MiwwLDEtMC40NDcsMS0xUzQyLjA1Miw0NSw0MS41LDQ1eiIvPgo8L2c+Cjxwb2x5Z29uIHN0eWxlPSJmaWxsOiNDRUM5QUU7IiBwb2ludHM9IjM3LjUsMCAzNy41LDE0IDUxLjUsMTQgIi8+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+Cjwvc3ZnPgo=' 77 | }, 78 | 'js': { 79 | 'type': 'JavaScript文件', 80 | 'src': 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTkuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeD0iMHB4IiB5PSIwcHgiIHZpZXdCb3g9IjAgMCAzMDMuMTg4IDMwMy4xODgiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMwMy4xODggMzAzLjE4ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSI1MTJweCIgaGVpZ2h0PSI1MTJweCI+CjxnPgoJPHBvbHlnb24gc3R5bGU9ImZpbGw6I0U4RThFODsiIHBvaW50cz0iMjE5LjgyMSwwIDMyLjg0MiwwIDMyLjg0MiwzMDMuMTg4IDI3MC4zNDYsMzAzLjE4OCAyNzAuMzQ2LDUwLjUyNSAgIi8+Cgk8cG9seWdvbiBzdHlsZT0iZmlsbDojMDA3OTM0OyIgcG9pbnRzPSIyMjcuNjQsMjUuMjYzIDMyLjg0MiwyNS4yNjMgMzIuODQyLDAgMjE5LjgyMSwwICAiLz4KCTxnPgoJCTxwYXRoIHN0eWxlPSJmaWxsOiNBNEE5QUQ7IiBkPSJNMTIxLjAzMywyODguOTM1Yy0yLjM2MywwLTQuNjA1LTAuMjMtNi43MjgtMC42ODlWMjc4LjE3YzAuNywwLjEzMSwxLjQ0NCwwLjI3OSwyLjIzMiwwLjQ0MyAgICBzMS42NDEsMC4yNDYsMi41NiwwLjI0NmMyLjE0NCwwLDMuNjc1LTAuNjQ2LDQuNTk0LTEuOTM2YzAuOTE5LTEuMjkyLDEuMzc4LTMuNTAxLDEuMzc4LTYuNjN2LTQ0LjQwMmgxMy4wMjh2NDMuMjg2ICAgIGMwLDYuNDk4LTEuNDIyLDExLjQxNi00LjI2NiwxNC43NTJDMTMwLjk4NywyODcuMjY2LDEyNi43MjEsMjg4LjkzNSwxMjEuMDMzLDI4OC45MzV6Ii8+CgkJPHBhdGggc3R5bGU9ImZpbGw6I0E0QTlBRDsiIGQ9Ik0xNzkuODQyLDI1OS4zMDFjMCwyLjk3NS0wLjc1NSw1LjYxNy0yLjI2NSw3LjkyNWMtMS41MDksMi4zMDktMy42ODYsNC4xMDMtNi41Myw1LjM4MiAgICBjLTIuODQ1LDEuMjgtNi4xODEsMS45Mi0xMC4wMSwxLjkyYy0zLjE5NCwwLTUuODc0LTAuMjI1LTguMDQtMC42NzNzLTQuNDItMS4yMy02Ljc2MS0yLjM0N3YtMTEuNTUxICAgIGMyLjQ3MywxLjI2OCw1LjA0MywyLjI1OSw3LjcxMywyLjk2OWMyLjY2OSwwLjcxMiw1LjExOSwxLjA2Nyw3LjM1MSwxLjA2N2MxLjkyNSwwLDMuMzM2LTAuMzMzLDQuMjMzLTEuMDAxICAgIHMxLjM0Ni0xLjUyNiwxLjM0Ni0yLjU3NmMwLTAuNjU2LTAuMTgxLTEuMjMtMC41NDEtMS43MjNjLTAuMzYxLTAuNDkyLTAuOTQxLTAuOTktMS43MzktMS40OTQgICAgYy0wLjgtMC41MDItMi45MjctMS41MzEtNi4zODQtMy4wODRjLTMuMTI5LTEuNDIyLTUuNDc1LTIuODAxLTcuMDM5LTQuMTM1Yy0xLjU2NC0xLjMzNS0yLjcyNC0yLjg2Ny0zLjQ3OS00LjU5NiAgICBjLTAuNzU1LTEuNzI4LTEuMTMyLTMuNzczLTEuMTMyLTYuMTM3YzAtNC40MTgsMS42MDctNy44NjQsNC44MjMtMTAuMzM3YzMuMjE3LTIuNDcyLDcuNjM2LTMuNzA4LDEzLjI1OS0zLjcwOCAgICBjNC45NjYsMCwxMC4wMzEsMS4xNDgsMTUuMTk0LDMuNDQ1bC0zLjk3MSwxMC4wMWMtNC40ODUtMi4wNTctOC4zNTctMy4wODYtMTEuNjE3LTMuMDg2Yy0xLjY4NSwwLTIuOTEsMC4yOTYtMy42NzYsMC44ODcgICAgYy0wLjc2NywwLjU5MS0xLjE0OCwxLjMyNC0xLjE0OCwyLjE5OWMwLDAuOTQsMC40ODYsMS43ODMsMS40NiwyLjUyNmMwLjk3NCwwLjc0NCwzLjYxNSwyLjEwMSw3LjkyNiw0LjA2OSAgICBjNC4xMzUsMS44NTksNy4wMDcsMy44NTYsOC42MTQsNS45ODlDMTc5LjAzOCwyNTMuMzc3LDE3OS44NDIsMjU2LjA2MywxNzkuODQyLDI1OS4zMDF6Ii8+Cgk8L2c+Cgk8Zz4KCQk8Zz4KCQkJPHBhdGggc3R5bGU9ImZpbGw6IzAwNzkzNDsiIGQ9Ik05OC4yNjIsMTk0LjM4NWMtNC4yODEsMC04LjAxMi0wLjQ0OS0xMS4xOTItMS4zNDZWMTc3LjI2YzMuMjYzLDAuODE0LDYuMjM4LDEuMjIzLDguOTI5LDEuMjIzICAgICBjNC4xNTksMCw3LjEzNS0xLjI5NSw4LjkzLTMuODgzYzEuNzk0LTIuNTksMi42OTEtNi42MzcsMi42OTEtMTIuMTQxVjc4LjY3aDE4Ljk1OXY4My42NjZjMCwxMC40MzgtMi4zODUsMTguMzg5LTcuMTU2LDIzLjg1NCAgICAgQzExNC42NTMsMTkxLjY1MiwxMDcuNTk5LDE5NC4zODUsOTguMjYyLDE5NC4zODV6Ii8+CgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMDc5MzQ7IiBkPSJNMjAxLjg2NiwxNDMuMjU0YzAsOC4wNzQtMi45MDQsMTQuNDM0LTguNzE1LDE5LjA4MmMtNS44MTEsNC42NDgtMTMuODk0LDYuOTczLTI0LjI1LDYuOTczICAgICBjLTkuNTQxLDAtMTcuOTgxLTEuNzkzLTI1LjMyLTUuMzgydi0xNy42MTRjNi4wMzQsMi42OTEsMTEuMTQxLDQuNTg3LDE1LjMyLDUuNjg4YzQuMTgsMS4xMDIsOC4wMDIsMS42NTIsMTEuNDY5LDEuNjUyICAgICBjNC4xNTgsMCw3LjM0OC0wLjc5Niw5LjU3LTIuMzg2YzIuMjIzLTEuNTkxLDMuMzM0LTMuOTU0LDMuMzM0LTcuMDk1YzAtMS43NTItMC40ODktMy4zMTMtMS40NjktNC42NzkgICAgIGMtMC45NzktMS4zNjYtMi40MTUtMi42ODEtNC4zMTEtMy45NDRjLTEuODk2LTEuMjY0LTUuNzYtMy4yODEtMTEuNTktNi4wNTVjLTUuNDY1LTIuNTY5LTkuNTYzLTUuMDM1LTEyLjI5My03LjQgICAgIGMtMi43MzItMi4zNjUtNC45MTQtNS4xMTctNi41NDUtOC4yNTdzLTIuNDQ2LTYuODEtMi40NDYtMTEuMDA5YzAtNy45MSwyLjY4MS0xNC4xMjgsOC4wNDItMTguNjU0ICAgICBjNS4zNjEtNC41MjUsMTIuNzczLTYuNzg4LDIyLjIzMi02Ljc4OGM0LjY0OSwwLDkuMDgyLDAuNTUsMTMuMzAzLDEuNjUxYzQuMjE5LDEuMTAxLDguNjMzLDIuNjUsMTMuMjQsNC42NDhsLTYuMTE1LDE0LjczOCAgICAgYy00Ljc3MS0xLjk1Ny04LjcxNi0zLjMyMi0xMS44MzUtNC4wOThjLTMuMTE5LTAuNzczLTYuMTg4LTEuMTYyLTkuMjA0LTEuMTYyYy0zLjU4OSwwLTYuMzQxLDAuODM3LTguMjU3LDIuNTA4ICAgICBjLTEuOTE3LDEuNjczLTIuODc0LDMuODU0LTIuODc0LDYuNTQ1YzAsMS42NzIsMC4zODcsMy4xMjksMS4xNjIsNC4zNzNjMC43NzMsMS4yNDQsMi4wMDcsMi40NDUsMy42OTksMy42MDcgICAgIGMxLjY5MSwxLjE2Miw1LjY5NywzLjI1MiwxMi4wMTgsNi4yN2M4LjM1OCwzLjk5NiwxNC4wODgsOC4wMDIsMTcuMTg2LDEyLjAxOEMyMDAuMzE3LDEzMi41MDEsMjAxLjg2NiwxMzcuNDI0LDIwMS44NjYsMTQzLjI1NHogICAgICIvPgoJCTwvZz4KCTwvZz4KCTxwb2x5Z29uIHN0eWxlPSJmaWxsOiNEMUQzRDM7IiBwb2ludHM9IjIxOS44MjEsNTAuNTI1IDI3MC4zNDYsNTAuNTI1IDIxOS44MjEsMCAgIi8+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+Cg==' 81 | }, 82 | 'pdf': { 83 | 'type': 'PDF文档', 84 | 'src': 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTguMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDU2IDU2IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1NiA1NjsiIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSI1MTJweCIgaGVpZ2h0PSI1MTJweCI+CjxnPgoJPHBhdGggc3R5bGU9ImZpbGw6I0U5RTlFMDsiIGQ9Ik0zNi45ODUsMEg3Ljk2M0M3LjE1NSwwLDYuNSwwLjY1NSw2LjUsMS45MjZWNTVjMCwwLjM0NSwwLjY1NSwxLDEuNDYzLDFoNDAuMDc0ICAgYzAuODA4LDAsMS40NjMtMC42NTUsMS40NjMtMVYxMi45NzhjMC0wLjY5Ni0wLjA5My0wLjkyLTAuMjU3LTEuMDg1TDM3LjYwNywwLjI1N0MzNy40NDIsMC4wOTMsMzcuMjE4LDAsMzYuOTg1LDB6Ii8+Cgk8cG9seWdvbiBzdHlsZT0iZmlsbDojRDlEN0NBOyIgcG9pbnRzPSIzNy41LDAuMTUxIDM3LjUsMTIgNDkuMzQ5LDEyICAiLz4KCTxwYXRoIHN0eWxlPSJmaWxsOiNDQzRCNEM7IiBkPSJNMTkuNTE0LDMzLjMyNEwxOS41MTQsMzMuMzI0Yy0wLjM0OCwwLTAuNjgyLTAuMTEzLTAuOTY3LTAuMzI2ICAgYy0xLjA0MS0wLjc4MS0xLjE4MS0xLjY1LTEuMTE1LTIuMjQyYzAuMTgyLTEuNjI4LDIuMTk1LTMuMzMyLDUuOTg1LTUuMDY4YzEuNTA0LTMuMjk2LDIuOTM1LTcuMzU3LDMuNzg4LTEwLjc1ICAgYy0wLjk5OC0yLjE3Mi0xLjk2OC00Ljk5LTEuMjYxLTYuNjQzYzAuMjQ4LTAuNTc5LDAuNTU3LTEuMDIzLDEuMTM0LTEuMjE1YzAuMjI4LTAuMDc2LDAuODA0LTAuMTcyLDEuMDE2LTAuMTcyICAgYzAuNTA0LDAsMC45NDcsMC42NDksMS4yNjEsMS4wNDljMC4yOTUsMC4zNzYsMC45NjQsMS4xNzMtMC4zNzMsNi44MDJjMS4zNDgsMi43ODQsMy4yNTgsNS42Miw1LjA4OCw3LjU2MiAgIGMxLjMxMS0wLjIzNywyLjQzOS0wLjM1OCwzLjM1OC0wLjM1OGMxLjU2NiwwLDIuNTE1LDAuMzY1LDIuOTAyLDEuMTE3YzAuMzIsMC42MjIsMC4xODksMS4zNDktMC4zOSwyLjE2ICAgYy0wLjU1NywwLjc3OS0xLjMyNSwxLjE5MS0yLjIyLDEuMTkxYy0xLjIxNiwwLTIuNjMyLTAuNzY4LTQuMjExLTIuMjg1Yy0yLjgzNywwLjU5My02LjE1LDEuNjUxLTguODI4LDIuODIyICAgYy0wLjgzNiwxLjc3NC0xLjYzNywzLjIwMy0yLjM4Myw0LjI1MUMyMS4yNzMsMzIuNjU0LDIwLjM4OSwzMy4zMjQsMTkuNTE0LDMzLjMyNHogTTIyLjE3NiwyOC4xOTggICBjLTIuMTM3LDEuMjAxLTMuMDA4LDIuMTg4LTMuMDcxLDIuNzQ0Yy0wLjAxLDAuMDkyLTAuMDM3LDAuMzM0LDAuNDMxLDAuNjkyQzE5LjY4NSwzMS41ODcsMjAuNTU1LDMxLjE5LDIyLjE3NiwyOC4xOTh6ICAgIE0zNS44MTMsMjMuNzU2YzAuODE1LDAuNjI3LDEuMDE0LDAuOTQ0LDEuNTQ3LDAuOTQ0YzAuMjM0LDAsMC45MDEtMC4wMSwxLjIxLTAuNDQxYzAuMTQ5LTAuMjA5LDAuMjA3LTAuMzQzLDAuMjMtMC40MTUgICBjLTAuMTIzLTAuMDY1LTAuMjg2LTAuMTk3LTEuMTc1LTAuMTk3QzM3LjEyLDIzLjY0OCwzNi40ODUsMjMuNjcsMzUuODEzLDIzLjc1NnogTTI4LjM0MywxNy4xNzQgICBjLTAuNzE1LDIuNDc0LTEuNjU5LDUuMTQ1LTIuNjc0LDcuNTY0YzIuMDktMC44MTEsNC4zNjItMS41MTksNi40OTYtMi4wMkMzMC44MTUsMjEuMTUsMjkuNDY2LDE5LjE5MiwyOC4zNDMsMTcuMTc0eiAgICBNMjcuNzM2LDguNzEyYy0wLjA5OCwwLjAzMy0xLjMzLDEuNzU3LDAuMDk2LDMuMjE2QzI4Ljc4MSw5LjgxMywyNy43NzksOC42OTgsMjcuNzM2LDguNzEyeiIvPgoJPHBhdGggc3R5bGU9ImZpbGw6I0NDNEI0QzsiIGQ9Ik00OC4wMzcsNTZINy45NjNDNy4xNTUsNTYsNi41LDU1LjM0NSw2LjUsNTQuNTM3VjM5aDQzdjE1LjUzN0M0OS41LDU1LjM0NSw0OC44NDUsNTYsNDguMDM3LDU2eiIvPgoJPGc+CgkJPHBhdGggc3R5bGU9ImZpbGw6I0ZGRkZGRjsiIGQ9Ik0xNy4zODUsNTNoLTEuNjQxVjQyLjkyNGgyLjg5OGMwLjQyOCwwLDAuODUyLDAuMDY4LDEuMjcxLDAuMjA1ICAgIGMwLjQxOSwwLjEzNywwLjc5NSwwLjM0MiwxLjEyOCwwLjYxNWMwLjMzMywwLjI3MywwLjYwMiwwLjYwNCwwLjgwNywwLjk5MXMwLjMwOCwwLjgyMiwwLjMwOCwxLjMwNiAgICBjMCwwLjUxMS0wLjA4NywwLjk3My0wLjI2LDEuMzg4Yy0wLjE3MywwLjQxNS0wLjQxNSwwLjc2NC0wLjcyNSwxLjA0NmMtMC4zMSwwLjI4Mi0wLjY4NCwwLjUwMS0xLjEyMSwwLjY1NiAgICBzLTAuOTIxLDAuMjMyLTEuNDQ5LDAuMjMyaC0xLjIxN1Y1M3ogTTE3LjM4NSw0NC4xNjh2My45OTJoMS41MDRjMC4yLDAsMC4zOTgtMC4wMzQsMC41OTUtMC4xMDMgICAgYzAuMTk2LTAuMDY4LDAuMzc2LTAuMTgsMC41NC0wLjMzNWMwLjE2NC0wLjE1NSwwLjI5Ni0wLjM3MSwwLjM5Ni0wLjY0OWMwLjEtMC4yNzgsMC4xNS0wLjYyMiwwLjE1LTEuMDMyICAgIGMwLTAuMTY0LTAuMDIzLTAuMzU0LTAuMDY4LTAuNTY3Yy0wLjA0Ni0wLjIxNC0wLjEzOS0wLjQxOS0wLjI4LTAuNjE1Yy0wLjE0Mi0wLjE5Ni0wLjM0LTAuMzYtMC41OTUtMC40OTIgICAgYy0wLjI1NS0wLjEzMi0wLjU5My0wLjE5OC0xLjAxMi0wLjE5OEgxNy4zODV6Ii8+CgkJPHBhdGggc3R5bGU9ImZpbGw6I0ZGRkZGRjsiIGQ9Ik0zMi4yMTksNDcuNjgyYzAsMC44MjktMC4wODksMS41MzgtMC4yNjcsMi4xMjZzLTAuNDAzLDEuMDgtMC42NzcsMS40NzdzLTAuNTgxLDAuNzA5LTAuOTIzLDAuOTM3ICAgIHMtMC42NzIsMC4zOTgtMC45OTEsMC41MTNjLTAuMzE5LDAuMTE0LTAuNjExLDAuMTg3LTAuODc1LDAuMjE5QzI4LjIyMiw1Mi45ODQsMjguMDI2LDUzLDI3Ljg5OCw1M2gtMy44MTRWNDIuOTI0aDMuMDM1ICAgIGMwLjg0OCwwLDEuNTkzLDAuMTM1LDIuMjM1LDAuNDAzczEuMTc2LDAuNjI3LDEuNiwxLjA3M3MwLjc0LDAuOTU1LDAuOTUsMS41MjRDMzIuMTE0LDQ2LjQ5NCwzMi4yMTksNDcuMDgsMzIuMjE5LDQ3LjY4MnogICAgIE0yNy4zNTIsNTEuNzk3YzEuMTEyLDAsMS45MTQtMC4zNTUsMi40MDYtMS4wNjZzMC43MzgtMS43NDEsMC43MzgtMy4wOWMwLTAuNDE5LTAuMDUtMC44MzQtMC4xNS0xLjI0NCAgICBjLTAuMTAxLTAuNDEtMC4yOTQtMC43ODEtMC41ODEtMS4xMTRzLTAuNjc3LTAuNjAyLTEuMTY5LTAuODA3cy0xLjEzLTAuMzA4LTEuOTE0LTAuMzA4aC0wLjk1N3Y3LjYyOUgyNy4zNTJ6Ii8+CgkJPHBhdGggc3R5bGU9ImZpbGw6I0ZGRkZGRjsiIGQ9Ik0zNi4yNjYsNDQuMTY4djMuMTcyaDQuMjExdjEuMTIxaC00LjIxMVY1M2gtMS42NjhWNDIuOTI0SDQwLjl2MS4yNDRIMzYuMjY2eiIvPgoJPC9nPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+Cjwvc3ZnPgo=' 85 | }, 86 | 'rar': { 87 | 'type': 'RAR压缩文件', 88 | 'src': 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTkuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDQ4IDQ4IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0OCA0ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIxNnB4IiBoZWlnaHQ9IjE2cHgiPgo8Zz4KCTxnPgoJCTxwYXRoIGQ9Ik00Ny45ODcsMjEuOTM4Yy0wLjAwNi0wLjA5MS0wLjAyMy0wLjE3OC0wLjA1My0wLjI2NGMtMC4wMTEtMC4wMzItMC4wMTktMC4wNjMtMC4wMzMtMC4wOTQgICAgYy0wLjA0OC0wLjEwNC0wLjEwOS0wLjIwMi0wLjE5My0wLjI4NWMtMC4wMDEtMC4wMDEtMC4wMDEtMC4wMDEtMC4wMDEtMC4wMDFMNDIsMTUuNTg2VjEwYzAtMC4wMjItMC4wMTEtMC4wNDEtMC4wMTMtMC4wNjMgICAgYy0wLjAwNi0wLjA4OC0wLjAyMy0wLjE3My0wLjA1MS0wLjI1N2MtMC4wMTEtMC4wMzItMC4wMTktMC4wNjMtMC4wMzQtMC4wOTRjLTAuMDQ5LTAuMTA2LTAuMTEtMC4yMDctMC4xOTYtMC4yOTNsLTktOSAgICBjLTAuMDg2LTAuMDg2LTAuMTg3LTAuMTQ3LTAuMjk0LTAuMTk2Yy0wLjAzLTAuMDE0LTAuMDYtMC4wMjItMC4wOTEtMC4wMzNjLTAuMDg1LTAuMDI5LTAuMTcyLTAuMDQ3LTAuMjYyLTAuMDUyICAgIEMzMi4wMzksMC4wMSwzMi4wMjEsMCwzMiwwSDdDNi40NDgsMCw2LDAuNDQ4LDYsMXYxNC41ODZsLTUuNzA3LDUuNzA3YzAsMC0wLjAwMSwwLjAwMS0wLjAwMiwwLjAwMiAgICBjLTAuMDg0LDAuMDg0LTAuMTQ0LDAuMTgyLTAuMTkyLDAuMjg1Yy0wLjAxNCwwLjAzMS0wLjAyMiwwLjA2Mi0wLjAzMywwLjA5NGMtMC4wMywwLjA4Ni0wLjA0OCwwLjE3My0wLjA1MywwLjI2NCAgICBDMC4wMTEsMjEuOTYsMCwyMS45NzgsMCwyMnYxOWMwLDAuNTUyLDAuNDQ4LDEsMSwxaDV2NWMwLDAuNTUyLDAuNDQ4LDEsMSwxaDM0YzAuNTUyLDAsMS0wLjQ0OCwxLTF2LTVoNWMwLjU1MiwwLDEtMC40NDgsMS0xVjIyICAgIEM0OCwyMS45NzgsNDcuOTg5LDIxLjk2LDQ3Ljk4NywyMS45Mzh6IE00NC41ODYsMjFINDJ2LTIuNTg2TDQ0LjU4NiwyMXogTTM4LjU4Niw5SDMzVjMuNDE0TDM4LjU4Niw5eiBNOCwyaDIzdjggICAgYzAsMC41NTIsMC40NDgsMSwxLDFoOHY1djVIOHYtNVYyeiBNNiwxOC40MTRWMjFIMy40MTRMNiwxOC40MTR6IE00MCw0Nkg4di00aDMyVjQ2eiBNNDYsNDBIMlYyM2g1aDM0aDVWNDB6IiBmaWxsPSIjRkZEQTQ0Ii8+CgkJPHBhdGggZD0iTTM1LjE0NCwzMi4xNDNjMC4yMjEtMC4xNTMsMC40MjItMC4zNTQsMC42MDQtMC42MDNjMC4xODEtMC4yNDksMC4zMzItMC41NTIsMC40NTEtMC45MSAgICBjMC4xMTktMC4zNTcsMC4xNzktMC43NjcsMC4xNzktMS4yMzJjMC0wLjYwMS0wLjA4NS0xLjExNi0wLjI1NS0xLjU0N2MtMC4xNy0wLjQzMS0wLjQwNS0wLjc4OC0wLjcwNi0xLjA3MSAgICBjLTAuMy0wLjI4My0wLjY2LTAuNDktMS4wNzktMC42MjFjLTAuNDE5LTAuMTMtMC44NzgtMC4xOTUtMS4zNzctMC4xOTVoLTMuNDM0VjM4aDEuOTcydi01LjEzNGgxLjEzOUwzNC41MDYsMzhoMi4xNDIgICAgbC0yLjE1OS01LjU0MkMzNC43MDQsMzIuNDAxLDM0LjkyMywzMi4yOTcsMzUuMTQ0LDMyLjE0M3ogTTMzLjg4NiwzMC45MDJjLTAuMzIzLDAuMzEyLTAuNzM0LDAuNDY4LTEuMjMyLDAuNDY4aC0xLjE1NnYtMy43MDYgICAgaDEuMTU2YzAuMjA0LDAsMC40MDgsMC4wMjgsMC42MTIsMC4wODVzMC4zODgsMC4xNTMsMC41NTMsMC4yODlzMC4yOTgsMC4zMjMsMC40LDAuNTYxczAuMTUzLDAuNTM4LDAuMTUzLDAuOTAxICAgIEMzNC4zNywzMC4xMjMsMzQuMjA4LDMwLjU5MSwzMy44ODYsMzAuOTAyeiIgZmlsbD0iI0ZGREE0NCIvPgoJCTxwYXRoIGQ9Ik0yMi43MjUsMjUuOTY0TDE5LjczMywzOGgyLjA0bDAuNjEyLTIuNTVoMy4xNjJMMjYuMTQyLDM4aDIuMTI1bC0yLjk0MS0xMi4wMzZIMjIuNzI1eiBNMjIuNjQsMzMuODUybDEuMzA5LTUuOTY3aDAuMDY4ICAgIGwxLjI3NSw1Ljk2N0gyMi42NHoiIGZpbGw9IiNGRkRBNDQiLz4KCQk8cGF0aCBkPSJNMTcuODIsMzIuMTQzYzAuMjIxLTAuMTUzLDAuNDIyLTAuMzU0LDAuNjA0LTAuNjAzYzAuMTgxLTAuMjQ5LDAuMzMxLTAuNTUyLDAuNDUxLTAuOTEgICAgYzAuMTE5LTAuMzU3LDAuMTc4LTAuNzY3LDAuMTc4LTEuMjMyYzAtMC42MDEtMC4wODUtMS4xMTYtMC4yNTUtMS41NDdjLTAuMTctMC40MzEtMC40MDUtMC43ODgtMC43MDUtMS4wNzEgICAgYy0wLjMtMC4yODMtMC42Ni0wLjQ5LTEuMDgtMC42MjFjLTAuNDE5LTAuMTMtMC44NzgtMC4xOTUtMS4zNzctMC4xOTVoLTMuNDM0VjM4aDEuOTcydi01LjEzNGgxLjEzOUwxNy4xODMsMzhoMi4xNDIgICAgbC0yLjE1OS01LjU0MkMxNy4zODEsMzIuNDAxLDE3LjYsMzIuMjk3LDE3LjgyLDMyLjE0M3ogTTE2LjU2MywzMC45MDJjLTAuMzIzLDAuMzEyLTAuNzM0LDAuNDY4LTEuMjMzLDAuNDY4aC0xLjE1NnYtMy43MDZoMS4xNTYgICAgYzAuMjA0LDAsMC40MDgsMC4wMjgsMC42MTIsMC4wODVjMC4yMDQsMC4wNTcsMC4zODgsMC4xNTMsMC41NTIsMC4yODlzMC4yOTgsMC4zMjMsMC4zOTksMC41NjFzMC4xNTMsMC41MzgsMC4xNTMsMC45MDEgICAgQzE3LjA0NywzMC4xMjMsMTYuODg1LDMwLjU5MSwxNi41NjMsMzAuOTAyeiIgZmlsbD0iI0ZGREE0NCIvPgoJPC9nPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+Cjwvc3ZnPgo=' 89 | }, 90 | 'zip': { 91 | 'type': 'ZIP压缩文件', 92 | 'src': 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTguMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDU2IDU2IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1NiA1NjsiIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSI1MTJweCIgaGVpZ2h0PSI1MTJweCI+CjxnPgoJPHBhdGggc3R5bGU9ImZpbGw6I0U5RTlFMDsiIGQ9Ik0zNi45ODUsMEg3Ljk2M0M3LjE1NSwwLDYuNSwwLjY1NSw2LjUsMS45MjZWNTVjMCwwLjM0NSwwLjY1NSwxLDEuNDYzLDFoNDAuMDc0ICAgYzAuODA4LDAsMS40NjMtMC42NTUsMS40NjMtMVYxMi45NzhjMC0wLjY5Ni0wLjA5My0wLjkyLTAuMjU3LTEuMDg1TDM3LjYwNywwLjI1N0MzNy40NDIsMC4wOTMsMzcuMjE4LDAsMzYuOTg1LDB6Ii8+Cgk8cG9seWdvbiBzdHlsZT0iZmlsbDojRDlEN0NBOyIgcG9pbnRzPSIzNy41LDAuMTUxIDM3LjUsMTIgNDkuMzQ5LDEyICAiLz4KCTxwYXRoIHN0eWxlPSJmaWxsOiM1NTYwODA7IiBkPSJNNDguMDM3LDU2SDcuOTYzQzcuMTU1LDU2LDYuNSw1NS4zNDUsNi41LDU0LjUzN1YzOWg0M3YxNS41MzdDNDkuNSw1NS4zNDUsNDguODQ1LDU2LDQ4LjAzNyw1NnoiLz4KCTxnPgoJCTxwYXRoIHN0eWxlPSJmaWxsOiNGRkZGRkY7IiBkPSJNMjUuMjY2LDQyLjkyNHYxLjMyNmwtNC43OTksNy4yMDVsLTAuMjczLDAuMjE5aDUuMDcyVjUzaC02LjY5OXYtMS4zMjZsNC43OTktNy4yMDVsMC4yODctMC4yMTkgICAgaC01LjA4NnYtMS4zMjZIMjUuMjY2eiIvPgoJCTxwYXRoIHN0eWxlPSJmaWxsOiNGRkZGRkY7IiBkPSJNMjkuMjcxLDUzaC0xLjY2OFY0Mi45MjRoMS42NjhWNTN6Ii8+CgkJPHBhdGggc3R5bGU9ImZpbGw6I0ZGRkZGRjsiIGQ9Ik0zMy40MTQsNTNoLTEuNjQxVjQyLjkyNGgyLjg5OGMwLjQyOCwwLDAuODUyLDAuMDY4LDEuMjcxLDAuMjA1ICAgIGMwLjQxOSwwLjEzNywwLjc5NSwwLjM0MiwxLjEyOCwwLjYxNWMwLjMzMywwLjI3MywwLjYwMiwwLjYwNCwwLjgwNywwLjk5MXMwLjMwOCwwLjgyMiwwLjMwOCwxLjMwNiAgICBjMCwwLjUxMS0wLjA4NywwLjk3My0wLjI2LDEuMzg4Yy0wLjE3MywwLjQxNS0wLjQxNSwwLjc2NC0wLjcyNSwxLjA0NmMtMC4zMSwwLjI4Mi0wLjY4NCwwLjUwMS0xLjEyMSwwLjY1NiAgICBzLTAuOTIxLDAuMjMyLTEuNDQ5LDAuMjMyaC0xLjIxN1Y1M3ogTTMzLjQxNCw0NC4xNjh2My45OTJoMS41MDRjMC4yLDAsMC4zOTgtMC4wMzQsMC41OTUtMC4xMDMgICAgYzAuMTk2LTAuMDY4LDAuMzc2LTAuMTgsMC41NC0wLjMzNXMwLjI5Ni0wLjM3MSwwLjM5Ni0wLjY0OWMwLjEtMC4yNzgsMC4xNS0wLjYyMiwwLjE1LTEuMDMyYzAtMC4xNjQtMC4wMjMtMC4zNTQtMC4wNjgtMC41NjcgICAgYy0wLjA0Ni0wLjIxNC0wLjEzOS0wLjQxOS0wLjI4LTAuNjE1Yy0wLjE0Mi0wLjE5Ni0wLjM0LTAuMzYtMC41OTUtMC40OTJjLTAuMjU1LTAuMTMyLTAuNTkzLTAuMTk4LTEuMDEyLTAuMTk4SDMzLjQxNHoiLz4KCTwvZz4KCTxnPgoJCTxwYXRoIHN0eWxlPSJmaWxsOiNDOEJEQjg7IiBkPSJNMjguNSwyNHYtMmgydi0yaC0ydi0yaDJ2LTJoLTJ2LTJoMnYtMmgtMnYtMmgyVjhoLTJWNmgtMnYyaC0ydjJoMnYyaC0ydjJoMnYyaC0ydjJoMnYyaC0ydjJoMnYyICAgIGgtNHY1YzAsMi43NTcsMi4yNDMsNSw1LDVzNS0yLjI0Myw1LTV2LTVIMjguNXogTTMwLjUsMjljMCwxLjY1NC0xLjM0NiwzLTMsM3MtMy0xLjM0Ni0zLTN2LTNoNlYyOXoiLz4KCQk8cGF0aCBzdHlsZT0iZmlsbDojQzhCREI4OyIgZD0iTTI2LjUsMzBoMmMwLjU1MiwwLDEtMC40NDcsMS0xcy0wLjQ0OC0xLTEtMWgtMmMtMC41NTIsMC0xLDAuNDQ3LTEsMVMyNS45NDgsMzAsMjYuNSwzMHoiLz4KCTwvZz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K' 93 | }, 94 | '7z': { 95 | 'type': '7Z压缩文件', 96 | 'src': 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTkuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeD0iMHB4IiB5PSIwcHgiIHZpZXdCb3g9IjAgMCAzMDMuMTg4IDMwMy4xODgiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMwMy4xODggMzAzLjE4ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSI1MTJweCIgaGVpZ2h0PSI1MTJweCI+CjxnPgoJPHBvbHlnb24gc3R5bGU9ImZpbGw6I0U0RTRFNDsiIHBvaW50cz0iMjE5LjgyMSwwIDMyLjg0MiwwIDMyLjg0MiwzMDMuMTg4IDI3MC4zNDYsMzAzLjE4OCAyNzAuMzQ2LDUwLjUyNSAgIi8+Cgk8cG9seWdvbiBzdHlsZT0iZmlsbDojRkI5MjAwOyIgcG9pbnRzPSIyMjcuNjQsMjUuMjYzIDMyLjg0MiwyNS4yNjMgMzIuODQyLDAgMjE5LjgyMSwwICAiLz4KCTxnPgoJCTxyZWN0IHg9IjE4NS45NDgiIHk9Ijg3LjkwMiIgc3R5bGU9ImZpbGw6I0E0QTlBRDsiIHdpZHRoPSIxNC40MTkiIGhlaWdodD0iNjIuNTg3Ii8+CgkJPGc+CgkJCTxwb2x5Z29uIHN0eWxlPSJmaWxsOiNEMUQzRDM7IiBwb2ludHM9IjIwMy41ODksMTMzLjUyNSAxODIuNzI3LDEzNy4yOTggMTgyLjcyNywxNDMuNjg5IDIwMy41ODksMTM5LjkxNiAgICAiLz4KCQkJPHBvbHlnb24gc3R5bGU9ImZpbGw6I0QxRDNEMzsiIHBvaW50cz0iMjAzLjU4OSwxMjAuNTg0IDE4Mi43MjcsMTI0LjM1NyAxODIuNzI3LDEzMC43NDggMjAzLjU4OSwxMjYuOTc2ICAgICIvPgoJCQk8cG9seWdvbiBzdHlsZT0iZmlsbDojRDFEM0QzOyIgcG9pbnRzPSIyMDMuNTg5LDEwNy42NDQgMTgyLjcyNywxMTEuNDE2IDE4Mi43MjcsMTE3LjgwNyAyMDMuNTg5LDExNC4wMzUgICAgIi8+CgkJCTxwb2x5Z29uIHN0eWxlPSJmaWxsOiNEMUQzRDM7IiBwb2ludHM9IjIwMy41ODksOTQuNzAzIDE4Mi43MjcsOTguNDc1IDE4Mi43MjcsMTA0Ljg2NSAyMDMuNTg5LDEwMS4wOTQgICAgIi8+CgkJPC9nPgoJCTxyZWN0IHg9IjE4OC4zNjUiIHk9IjE1NSIgc3R5bGU9ImZpbGw6I0E0QTlBRDsiIHdpZHRoPSI5LjU4NSIgaGVpZ2h0PSIxOC4wNDMiLz4KCQk8cG9seWdvbiBzdHlsZT0iZmlsbDojQTRBOUFEOyIgcG9pbnRzPSIxODIuNzI3LDE0Ny45NTEgMTYzLjI3NCwxNTUuMjgxIDEwNC4zNjgsMTU1LjI4MSAxMTEuNDE3LDE2Ny4xMjMgMTYzLjI3NCwxNjcuMTIzICAgICAxODIuNzI3LDE1OS43OTMgMjAzLjU4OSwxNTkuNzkzIDIwMy41ODksMTQ3Ljk1MSAgICIvPgoJCTxwb2x5Z29uIHN0eWxlPSJmaWxsOiNBNEE5QUQ7IiBwb2ludHM9IjE4Mi43MjcsOTAuNDM5IDE2My4yNzQsODMuMTEgMTA0LjM2OCw4My4xMSAxMTEuNDE3LDcxLjI3IDE2My4yNzQsNzEuMjcgMTgyLjcyNyw3OC42ICAgICAyMDMuNTg5LDc4LjYgMjAzLjU4OSw5MC40MzkgICAiLz4KCQk8Zz4KCQkJPHJlY3QgeD0iODkuNjkyIiB5PSI4My4xMSIgc3R5bGU9ImZpbGw6I0ZCOTIwMDsiIHdpZHRoPSI3MS4wNTMiIGhlaWdodD0iNzIuMTcxIi8+CgkJCTxnPgoJCQkJPHJlY3QgeD0iMTAwLjE3NiIgeT0iOTIuMTg0IiBzdHlsZT0iZmlsbDojRkY2NzFCOyIgd2lkdGg9IjUwLjA4NiIgaGVpZ2h0PSIyMi44MjciLz4KCQkJCTxyZWN0IHg9IjExNy4xNDIiIHk9Ijk4LjgxOCIgc3R5bGU9ImZpbGw6I0ZGRkZGRjsiIHdpZHRoPSIxNi4xNTQiIGhlaWdodD0iMy45NTMiLz4KCQkJPC9nPgoJCQk8Zz4KCQkJCTxyZWN0IHg9IjEwMC4xNzYiIHk9IjEyMy4zOCIgc3R5bGU9ImZpbGw6I0ZGNjcxQjsiIHdpZHRoPSI1MC4wODYiIGhlaWdodD0iMjIuODI3Ii8+CgkJCQk8cmVjdCB4PSIxMTcuMTQyIiB5PSIxMzAuMDEzIiBzdHlsZT0iZmlsbDojRkZGRkZGOyIgd2lkdGg9IjE2LjE1NCIgaGVpZ2h0PSIzLjk1NCIvPgoJCQk8L2c+CgkJPC9nPgoJCTxyZWN0IHg9IjE4Mi43MjciIHk9IjE2Ny4xMjMiIHN0eWxlPSJmaWxsOiNBNEE5QUQ7IiB3aWR0aD0iMjAuODYyIiBoZWlnaHQ9IjExLjg0Ii8+Cgk8L2c+Cgk8Zz4KCQk8cGF0aCBzdHlsZT0iZmlsbDojQTRBOUFEOyIgZD0iTTEyMC45ODMsMjczLjg3MWwxNi40NzUtMzcuMTgyaC0yMC43NzN2LTEwLjczMmgzNC42MjN2Ny42NDZsLTE2LjkwMSw0MC4yNjhIMTIwLjk4M3oiLz4KCQk8cGF0aCBzdHlsZT0iZmlsbDojQTRBOUFEOyIgZD0iTTE4NS44OTYsMjczLjg3MWgtMzAuNzgydi03LjMxOGwxNS4zOTEtMjAuMDUxSDE1NnYtOS44MTNoMjkuMTc1djcuOTQxbC0xNC43MzUsMTkuNDI4aDE1LjQ1NyAgICB2OS44MTNIMTg1Ljg5NnoiLz4KCTwvZz4KCTxwb2x5Z29uIHN0eWxlPSJmaWxsOiNEMUQzRDM7IiBwb2ludHM9IjIxOS44MjEsNTAuNTI1IDI3MC4zNDYsNTAuNTI1IDIxOS44MjEsMCAgIi8+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+Cg==' 97 | }, 98 | 'doc': { 99 | 'type': 'Microsoft Office Word文档', 100 | 'src': 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTguMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDU2IDU2IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1NiA1NjsiIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSI1MTJweCIgaGVpZ2h0PSI1MTJweCI+CjxnPgoJPHBhdGggc3R5bGU9ImZpbGw6I0U5RTlFMDsiIGQ9Ik0zNi45ODUsMEg3Ljk2M0M3LjE1NSwwLDYuNSwwLjY1NSw2LjUsMS45MjZWNTVjMCwwLjM0NSwwLjY1NSwxLDEuNDYzLDFoNDAuMDc0ICAgYzAuODA4LDAsMS40NjMtMC42NTUsMS40NjMtMVYxMi45NzhjMC0wLjY5Ni0wLjA5My0wLjkyLTAuMjU3LTEuMDg1TDM3LjYwNywwLjI1N0MzNy40NDIsMC4wOTMsMzcuMjE4LDAsMzYuOTg1LDB6Ii8+Cgk8cG9seWdvbiBzdHlsZT0iZmlsbDojRDlEN0NBOyIgcG9pbnRzPSIzNy41LDAuMTUxIDM3LjUsMTIgNDkuMzQ5LDEyICAiLz4KCTxwYXRoIHN0eWxlPSJmaWxsOiM4Njk3Q0I7IiBkPSJNMTguNSwxM2gtNmMtMC41NTIsMC0xLTAuNDQ4LTEtMXMwLjQ0OC0xLDEtMWg2YzAuNTUyLDAsMSwwLjQ0OCwxLDFTMTkuMDUyLDEzLDE4LjUsMTN6Ii8+Cgk8cGF0aCBzdHlsZT0iZmlsbDojODY5N0NCOyIgZD0iTTIxLjUsMThoLTljLTAuNTUyLDAtMS0wLjQ0OC0xLTFzMC40NDgtMSwxLTFoOWMwLjU1MiwwLDEsMC40NDgsMSwxUzIyLjA1MiwxOCwyMS41LDE4eiIvPgoJPHBhdGggc3R5bGU9ImZpbGw6Izg2OTdDQjsiIGQ9Ik0yNS41LDE4Yy0wLjI2LDAtMC41Mi0wLjExLTAuNzEtMC4yOWMtMC4xOC0wLjE5LTAuMjktMC40NS0wLjI5LTAuNzFjMC0wLjI2LDAuMTEtMC41MiwwLjI5LTAuNzEgICBjMC4zNy0wLjM3LDEuMDUtMC4zNywxLjQyLDBjMC4xOCwwLjE5LDAuMjksMC40NSwwLjI5LDAuNzFjMCwwLjI2LTAuMTEsMC41Mi0wLjI5LDAuNzFDMjYuMDIsMTcuODksMjUuNzYsMTgsMjUuNSwxOHoiLz4KCTxwYXRoIHN0eWxlPSJmaWxsOiM4Njk3Q0I7IiBkPSJNMzcuNSwxOGgtOGMtMC41NTIsMC0xLTAuNDQ4LTEtMXMwLjQ0OC0xLDEtMWg4YzAuNTUyLDAsMSwwLjQ0OCwxLDFTMzguMDUyLDE4LDM3LjUsMTh6Ii8+Cgk8cGF0aCBzdHlsZT0iZmlsbDojODY5N0NCOyIgZD0iTTEyLjUsMzNjLTAuMjYsMC0wLjUyLTAuMTEtMC43MS0wLjI5Yy0wLjE4LTAuMTktMC4yOS0wLjQ1LTAuMjktMC43MWMwLTAuMjYsMC4xMS0wLjUyLDAuMjktMC43MSAgIGMwLjM3LTAuMzcsMS4wNS0wLjM3LDEuNDIsMGMwLjE4LDAuMTksMC4yOSwwLjQ0LDAuMjksMC43MWMwLDAuMjYtMC4xMSwwLjUyLTAuMjksMC43MUMxMy4wMiwzMi44OSwxMi43NiwzMywxMi41LDMzeiIvPgoJPHBhdGggc3R5bGU9ImZpbGw6Izg2OTdDQjsiIGQ9Ik0yNC41LDMzaC04Yy0wLjU1MiwwLTEtMC40NDgtMS0xczAuNDQ4LTEsMS0xaDhjMC41NTIsMCwxLDAuNDQ4LDEsMVMyNS4wNTIsMzMsMjQuNSwzM3oiLz4KCTxwYXRoIHN0eWxlPSJmaWxsOiM4Njk3Q0I7IiBkPSJNNDMuNSwxOGgtMmMtMC41NTIsMC0xLTAuNDQ4LTEtMXMwLjQ0OC0xLDEtMWgyYzAuNTUyLDAsMSwwLjQ0OCwxLDFTNDQuMDUyLDE4LDQzLjUsMTh6Ii8+Cgk8cGF0aCBzdHlsZT0iZmlsbDojODY5N0NCOyIgZD0iTTM0LjUsMjNoLTIyYy0wLjU1MiwwLTEtMC40NDgtMS0xczAuNDQ4LTEsMS0xaDIyYzAuNTUyLDAsMSwwLjQ0OCwxLDFTMzUuMDUyLDIzLDM0LjUsMjN6Ii8+Cgk8cGF0aCBzdHlsZT0iZmlsbDojODY5N0NCOyIgZD0iTTQzLjUsMjNoLTZjLTAuNTUyLDAtMS0wLjQ0OC0xLTFzMC40NDgtMSwxLTFoNmMwLjU1MiwwLDEsMC40NDgsMSwxUzQ0LjA1MiwyMyw0My41LDIzeiIvPgoJPHBhdGggc3R5bGU9ImZpbGw6Izg2OTdDQjsiIGQ9Ik0xNi41LDI4aC00Yy0wLjU1MiwwLTEtMC40NDgtMS0xczAuNDQ4LTEsMS0xaDRjMC41NTIsMCwxLDAuNDQ4LDEsMVMxNy4wNTIsMjgsMTYuNSwyOHoiLz4KCTxwYXRoIHN0eWxlPSJmaWxsOiM4Njk3Q0I7IiBkPSJNMzAuNSwyOGgtMTBjLTAuNTUyLDAtMS0wLjQ0OC0xLTFzMC40NDgtMSwxLTFoMTBjMC41NTIsMCwxLDAuNDQ4LDEsMVMzMS4wNTIsMjgsMzAuNSwyOHoiLz4KCTxwYXRoIHN0eWxlPSJmaWxsOiM4Njk3Q0I7IiBkPSJNNDMuNSwyOGgtOWMtMC41NTIsMC0xLTAuNDQ4LTEtMXMwLjQ0OC0xLDEtMWg5YzAuNTUyLDAsMSwwLjQ0OCwxLDFTNDQuMDUyLDI4LDQzLjUsMjh6Ii8+Cgk8cGF0aCBzdHlsZT0iZmlsbDojMDA5NkU2OyIgZD0iTTQ4LjAzNyw1Nkg3Ljk2M0M3LjE1NSw1Niw2LjUsNTUuMzQ1LDYuNSw1NC41MzdWMzloNDN2MTUuNTM3QzQ5LjUsNTUuMzQ1LDQ4Ljg0NSw1Niw0OC4wMzcsNTZ6Ii8+Cgk8Zz4KCQk8cGF0aCBzdHlsZT0iZmlsbDojRkZGRkZGOyIgZD0iTTIzLjUsNDcuNjgyYzAsMC44MjktMC4wODksMS41MzgtMC4yNjcsMi4xMjZzLTAuNDAzLDEuMDgtMC42NzcsMS40NzdzLTAuNTgxLDAuNzA5LTAuOTIzLDAuOTM3ICAgIHMtMC42NzIsMC4zOTgtMC45OTEsMC41MTNjLTAuMzE5LDAuMTE0LTAuNjExLDAuMTg3LTAuODc1LDAuMjE5QzE5LjUwMyw1Mi45ODQsMTkuMzA3LDUzLDE5LjE4LDUzaC0zLjgxNFY0Mi45MjRIMTguNCAgICBjMC44NDgsMCwxLjU5MywwLjEzNSwyLjIzNSwwLjQwM3MxLjE3NiwwLjYyNywxLjYsMS4wNzNzMC43NCwwLjk1NSwwLjk1LDEuNTI0QzIzLjM5NSw0Ni40OTQsMjMuNSw0Ny4wOCwyMy41LDQ3LjY4MnogICAgIE0xOC42MzMsNTEuNzk3YzEuMTEyLDAsMS45MTQtMC4zNTUsMi40MDYtMS4wNjZzMC43MzgtMS43NDEsMC43MzgtMy4wOWMwLTAuNDE5LTAuMDUtMC44MzQtMC4xNS0xLjI0NCAgICBjLTAuMTAxLTAuNDEtMC4yOTQtMC43ODEtMC41ODEtMS4xMTRzLTAuNjc3LTAuNjAyLTEuMTY5LTAuODA3cy0xLjEzLTAuMzA4LTEuOTE0LTAuMzA4aC0wLjk1N3Y3LjYyOUgxOC42MzN6Ii8+CgkJPHBhdGggc3R5bGU9ImZpbGw6I0ZGRkZGRjsiIGQ9Ik0zMy40NzUsNDcuOTE0YzAsMC44NDgtMC4xMDcsMS41OTUtMC4zMjEsMi4yNDJjLTAuMjE0LDAuNjQ3LTAuNTExLDEuMTg1LTAuODg5LDEuNjEzICAgIGMtMC4zNzgsMC40MjktMC44MiwwLjc1Mi0xLjMyNiwwLjk3MXMtMS4wNiwwLjMyOC0xLjY2MSwwLjMyOHMtMS4xNTUtMC4xMDktMS42NjEtMC4zMjhzLTAuOTQ4LTAuNTQyLTEuMzI2LTAuOTcxICAgIGMtMC4zNzgtMC40MjktMC42NzUtMC45NjYtMC44ODktMS42MTNjLTAuMjE0LTAuNjQ3LTAuMzIxLTEuMzk1LTAuMzIxLTIuMjQyczAuMTA3LTEuNTkzLDAuMzIxLTIuMjM1ICAgIGMwLjIxNC0wLjY0MywwLjUxLTEuMTc4LDAuODg5LTEuNjA2YzAuMzc4LTAuNDI5LDAuODItMC43NTQsMS4zMjYtMC45NzhzMS4wNi0wLjMzNSwxLjY2MS0wLjMzNXMxLjE1NSwwLjExMSwxLjY2MSwwLjMzNSAgICBzMC45NDgsMC41NDksMS4zMjYsMC45NzhjMC4zNzgsMC40MjksMC42NzQsMC45NjQsMC44ODksMS42MDZDMzMuMzY3LDQ2LjMyMSwzMy40NzUsNDcuMDY2LDMzLjQ3NSw0Ny45MTR6IE0yOS4yMzYsNTEuNzI5ICAgIGMwLjMzNywwLDAuNjU4LTAuMDY2LDAuOTY0LTAuMTk4YzAuMzA1LTAuMTMyLDAuNTc5LTAuMzQ5LDAuODItMC42NDljMC4yNDEtMC4zMDEsMC40MzEtMC42OTUsMC41NjctMS4xODMgICAgczAuMjA5LTEuMDgyLDAuMjE5LTEuNzg0Yy0wLjAwOS0wLjY4NC0wLjA4LTEuMjY1LTAuMjEyLTEuNzQzYy0wLjEzMi0wLjQ3OS0wLjMxNC0wLjg3My0wLjU0Ny0xLjE4M3MtMC40OTctMC41MzMtMC43OTMtMC42NyAgICBjLTAuMjk2LTAuMTM3LTAuNjA4LTAuMjA1LTAuOTM3LTAuMjA1Yy0wLjMzNywwLTAuNjU5LDAuMDYzLTAuOTY0LDAuMTkxYy0wLjMwNiwwLjEyOC0wLjU3OSwwLjM0NC0wLjgyLDAuNjQ5ICAgIGMtMC4yNDIsMC4zMDYtMC40MzEsMC42OTktMC41NjcsMS4xODNzLTAuMjEsMS4wNzUtMC4yMTksMS43NzdjMC4wMDksMC42ODQsMC4wOCwxLjI2NywwLjIxMiwxLjc1ICAgIGMwLjEzMiwwLjQ4MywwLjMxNCwwLjg3NywwLjU0NywxLjE4M3MwLjQ5NywwLjUyOCwwLjc5MywwLjY3QzI4LjU5Niw1MS42NTgsMjguOTA4LDUxLjcyOSwyOS4yMzYsNTEuNzI5eiIvPgoJCTxwYXRoIHN0eWxlPSJmaWxsOiNGRkZGRkY7IiBkPSJNNDIuNjA3LDUxLjk3NWMtMC4zNzQsMC4zNjQtMC43OTgsMC42MzgtMS4yNzEsMC44MmMtMC40NzQsMC4xODMtMC45ODQsMC4yNzMtMS41MzEsMC4yNzMgICAgYy0wLjYwMiwwLTEuMTU1LTAuMTA5LTEuNjYxLTAuMzI4cy0wLjk0OC0wLjU0Mi0xLjMyNi0wLjk3MWMtMC4zNzgtMC40MjktMC42NzUtMC45NjYtMC44ODktMS42MTMgICAgYy0wLjIxNC0wLjY0Ny0wLjMyMS0xLjM5NS0wLjMyMS0yLjI0MnMwLjEwNy0xLjU5MywwLjMyMS0yLjIzNWMwLjIxNC0wLjY0MywwLjUxLTEuMTc4LDAuODg5LTEuNjA2ICAgIGMwLjM3OC0wLjQyOSwwLjgyMi0wLjc1NCwxLjMzMy0wLjk3OGMwLjUxLTAuMjI0LDEuMDYyLTAuMzM1LDEuNjU0LTAuMzM1YzAuNTQ3LDAsMS4wNTcsMC4wOTEsMS41MzEsMC4yNzMgICAgYzAuNDc0LDAuMTgzLDAuODk3LDAuNDU2LDEuMjcxLDAuODJsLTEuMTM1LDEuMDEyYy0wLjIyOC0wLjI2NS0wLjQ4MS0wLjQ1Ni0wLjc1OS0wLjU3NGMtMC4yNzgtMC4xMTgtMC41NjctMC4xNzgtMC44NjgtMC4xNzggICAgYy0wLjMzNywwLTAuNjU5LDAuMDYzLTAuOTY0LDAuMTkxYy0wLjMwNiwwLjEyOC0wLjU3OSwwLjM0NC0wLjgyLDAuNjQ5Yy0wLjI0MiwwLjMwNi0wLjQzMSwwLjY5OS0wLjU2NywxLjE4MyAgICBzLTAuMjEsMS4wNzUtMC4yMTksMS43NzdjMC4wMDksMC42ODQsMC4wOCwxLjI2NywwLjIxMiwxLjc1YzAuMTMyLDAuNDgzLDAuMzE0LDAuODc3LDAuNTQ3LDEuMTgzczAuNDk3LDAuNTI4LDAuNzkzLDAuNjcgICAgYzAuMjk2LDAuMTQyLDAuNjA4LDAuMjEyLDAuOTM3LDAuMjEyczAuNjM2LTAuMDYsMC45MjMtMC4xNzhzMC41NDktMC4zMSwwLjc4Ni0wLjU3NEw0Mi42MDcsNTEuOTc1eiIvPgoJPC9nPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+Cjwvc3ZnPgo=' 101 | }, 102 | 'docx': { 103 | 'type': 'Microsoft Office Word文档', 104 | 'src': 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCIgdmlld0JveD0iMCAwIDU4NS45MTggNTg1LjkxOCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTg1LjkxOCA1ODUuOTE4OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxnPgoJPHBhdGggZD0iTTYyLjMwOCwyNzQuNTIxYy0zLjIyNiwwLjA1Ni01LjMyMywwLjM5OC02LjU1NCwwLjczN3Y0Ni4zMzFjMS4yMzEsMC4zMzcsMy4yMzcsMC4zNzgsNS4wNDIsMC40MDkgICBjMTMuMjYzLDAuMzQ3LDIyLjA1LTcuNjIxLDIyLjA1LTI0Ljg3QzgyLjk0MywyODIuMTMyLDc0LjkyNSwyNzQuMzI5LDYyLjMwOCwyNzQuNTIxeiIgZmlsbD0iIzAwNkRGMCIvPgoJPHBhdGggZD0iTTM1Ny4zOTYsNTM1LjMzYzAuNzc2LDAuMDQ3LDEuNTQyLDAuMTA5LDIuMzI5LDAuMTA5aDE3Ny4zOWMyMC43NSwwLDM3LjYyNy0xNi44ODMsMzcuNjI3LTM3LjYyN1Y4Ni41OTcgICBjMC0yMC43NDMtMTYuODc3LTM3LjYyOC0zNy42MjctMzcuNjI4aC0xNzcuMzljLTAuNzgxLDAtMS41NTMsMC4wNzctMi4zMjksMC4xMTNWMEwxMS4xNzYsNDYuMjA2djQ5Mi4zMTFsMzQ2LjIyLDQ3LjQwMVY1MzUuMzN6ICAgIE0zNTcuMzk2LDIzNy45NTNoMTg3LjAwOVYzNjUuMTdIMzU3LjM5NlYyMzcuOTUzeiBNNDgzLjM1LDIyNy4yMDJIMzU3LjM5NnYtNTAuMzA4SDQ4My4zNVYyMjcuMjAyeiBNNTM3LjExNSw1MTMuOTQ5aC0xNzcuMzkgICBjLTAuNzkyLDAtMS41NjMtMC4xMjctMi4zMjktMC4yNDNWMzc1LjkyMUg1NTMuMjR2MTIxLjkwMUM1NTMuMjQsNTA2LjcxNSw1NDYuMDA4LDUxMy45NDksNTM3LjExNSw1MTMuOTQ5eiBNMzU5LjcyNiw3MC40NzYgICBoMTc3LjM5YzguODkzLDAsMTYuMTI1LDcuMjM2LDE2LjEyNSwxNi4xMjZ2MTQwLjZoLTU5LjE0di02MS4wNTlIMzU3LjM5NlY3MC43MTFDMzU4LjE2Miw3MC41OTksMzU4LjkyOSw3MC40NzYsMzU5LjcyNiw3MC40NzZ6ICAgIE04Ny43ODYsMzI1Ljk0Yy03LjAwMyw2LjE2My0xNy41MTIsOC44NjEtMzAuMTI5LDguNTFjLTcuNDU1LTAuMTk5LTEyLjY4MS0wLjg2MS0xNi4yMS0xLjQ3OXYtNjguODM2ICAgYzUuMjA3LTEuMDU4LDEyLjA1LTEuNzQ2LDE5LjM0OS0xLjkxOGMxMi4yODQtMC4zMSwyMC4zNzksMS45NTMsMjYuNzgzLDcuMDc2YzYuOTYxLDUuNDg5LDExLjM2OCwxNC40MTYsMTEuMzY4LDI3LjMwNCAgIEM5OC45NDcsMzEwLjU3NSw5NC4yMzIsMzIwLjE0Miw4Ny43ODYsMzI1Ljk0eiBNMTM4Ljg1MywzMzcuMTU5Yy0yMC45NDMtMC41NzgtMzIuOTI0LTE3LjM2NS0zMi45MjQtMzguMjY5ICAgYzAtMjIsMTMuMjE3LTM4Ljc3LDM0LjExMy0zOS4yOTJjMjIuMzUyLTAuNTU5LDM0Ljg2NCwxNi44MTksMzQuODY0LDM4LjA1OUMxNzQuOTA1LDMyMi44ODEsMTYwLjA5MSwzMzcuNzYyLDEzOC44NTMsMzM3LjE1OXogICAgTTIyNi4yNzMsMzI0LjYzNGM1LjQ5OSwwLjEwNCwxMS42NjQtMC45ODEsMTUuMzEtMi4zNDdsMi44LDE0LjI2M2MtMy40MTUsMS41NzUtMTEuMDM3LDMuMTQ5LTIwLjg1MSwyLjg3NyAgIGMtMjcuMjIzLTAuNzY3LTQwLjg3OS0xNy43OTEtNDAuODc5LTM5LjgyMWMwLTI2LjM5LDE4LjcxNy00MS41NDQsNDIuNjc1LTQyLjE0MWM5LjQ3LTAuMjM2LDE2Ljc0MywxLjQ4OCwyMC4wNDQsMy4wOTIgICBsLTMuNzksMTQuNTA3Yy0zLjc1OS0xLjQ5NC04Ljk1Ni0yLjg0OC0xNS40MzMtMi43NDVjLTE0LjMxMSwwLjIyMS0yNS4yMjcsOC44NjMtMjUuMjI3LDI2LjI4OSAgIEMyMDAuOTI0LDMxNC4yODgsMjEwLjIxMywzMjQuMzI4LDIyNi4yNzMsMzI0LjYzNHogTTMwMi40NDUsMzQwLjQxM2wtNy45OC0xNS4yNjVjLTMuMjUxLTUuODM4LTUuMzIyLTEwLjE2NC03Ljc2Ni0xNC45ODFoLTAuMjY1ICAgYy0xLjgwNiw0Ljc2MS0zLjk4Niw5LjAxOS02LjY2NCwxNC43MTlsLTcuMTI5LDE0LjcwNGwtMjEuNzMzLTAuNTk0bDI0LjQtNDAuODY2bC0yMy41MzktMzkuOTk5bDIxLjg4Ny0wLjUyN2w3LjUxNCwxNC44NTggICBjMi41NjQsNC45ODIsNC40ODMsOS4wMDIsNi41NTQsMTMuNjQ4aDAuMjUyYzIuMDgyLTUuMjkzLDMuNzU4LTkuMDA1LDUuOTYxLTEzLjgzNmw3LjQ1Ny0xNS4zNDFsMjMuMTYtMC41NmwtMjUuMjYxLDQxLjI4OSAgIGwyNi42MTQsNDMuMzgyTDMwMi40NDUsMzQwLjQxM3oiIGZpbGw9IiMwMDZERjAiLz4KCTxwYXRoIGQ9Ik0xMzkuNjA1LDI3My4wOTdjLTEwLjg3NSwwLjE3MS0xNy4xNDIsMTEuMDYxLTE3LjE0MiwyNS40OTVjMCwxNC41Myw2LjQ3OCwyNC44OTcsMTcuMjUsMjUuMTAzICAgYzExLjA0NywwLjIxLDE3LjQzOC0xMC43MTUsMTcuNDM4LTI1LjQ5N0MxNTcuMTUxLDI4NC41NDcsMTUwLjg2MywyNzIuOTE5LDEzOS42MDUsMjczLjA5N3oiIGZpbGw9IiMwMDZERjAiLz4KCTxwYXRoIGQ9Ik0zODYuODU1LDI1My42MjhjMy45NTgsMCw3LjE3LDMuMjA3LDcuMTcsNy4xNjVjMCwzLjk1NS0zLjIxMiw3LjE2NS03LjE3LDcuMTY1cy03LjE2LTMuMjEtNy4xNi03LjE2NSAgIEMzNzkuNjk1LDI1Ni44MzUsMzgyLjg5NywyNTMuNjI4LDM4Ni44NTUsMjUzLjYyOHoiIGZpbGw9IiMwMDZERjAiLz4KCTxyZWN0IHg9IjQwNS4wMTkiIHk9IjI1OC4xMDUiIHdpZHRoPSIxMDkuMzA0IiBoZWlnaHQ9IjUuMzc1IiBmaWxsPSIjMDA2REYwIi8+Cgk8cGF0aCBkPSJNMzg2Ljg1NSwyNzkuNjEzYzMuOTU4LDAsNy4xNywzLjIwNyw3LjE3LDcuMTY1YzAsMy45NTUtMy4yMTIsNy4xNjgtNy4xNyw3LjE2OHMtNy4xNi0zLjIxMy03LjE2LTcuMTY4ICAgQzM3OS42OTUsMjgyLjgyLDM4Mi44OTcsMjc5LjYxMywzODYuODU1LDI3OS42MTN6IiBmaWxsPSIjMDA2REYwIi8+Cgk8cmVjdCB4PSI0MDUuMDE5IiB5PSIyODQuMDg1IiB3aWR0aD0iMTA5LjMwNCIgaGVpZ2h0PSI1LjM3NSIgZmlsbD0iIzAwNkRGMCIvPgoJPHBhdGggZD0iTTM4Ni44NTUsMzA3LjU2MmMzLjk1OCwwLDcuMTcsMy4yMTIsNy4xNyw3LjE2NWMwLDMuOTU4LTMuMjEyLDcuMTY3LTcuMTcsNy4xNjdzLTcuMTYtMy4yMDktNy4xNi03LjE2NyAgIEMzNzkuNjk1LDMxMC43NzQsMzgyLjg5NywzMDcuNTYyLDM4Ni44NTUsMzA3LjU2MnoiIGZpbGw9IiMwMDZERjAiLz4KCTxyZWN0IHg9IjQwNS4wMTkiIHk9IjMxMi4wNCIgd2lkdGg9IjEwOS4zMDQiIGhlaWdodD0iNS4zNzUiIGZpbGw9IiMwMDZERjAiLz4KCTxwYXRoIGQ9Ik0zODYuODU1LDMzMy45OTNjMy45NTgsMCw3LjE3LDMuMjA4LDcuMTcsNy4xNjVjMCwzLjk1OC0zLjIxMiw3LjE2Ni03LjE3LDcuMTY2cy03LjE2LTMuMjA4LTcuMTYtNy4xNjYgICBDMzc5LjY5NSwzMzcuMjAxLDM4Mi44OTcsMzMzLjk5MywzODYuODU1LDMzMy45OTN6IiBmaWxsPSIjMDA2REYwIi8+Cgk8cmVjdCB4PSI0MDUuMDE5IiB5PSIzMzguNDY2IiB3aWR0aD0iMTA5LjMwNCIgaGVpZ2h0PSI1LjM3NSIgZmlsbD0iIzAwNkRGMCIvPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+Cjwvc3ZnPgo=' 105 | }, 106 | 'ppt': { 107 | 'type': 'Microsoft Office PPT', 108 | 'src': 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCIgdmlld0JveD0iMCAwIDU4NS45MTggNTg1LjkxOCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTg1LjkxOCA1ODUuOTE4OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxnPgoJPHBhdGggZD0iTTM1Ny4zOTYsNTM1LjMzYzAuNzc2LDAuMDQyLDEuNTQyLDAuMTA5LDIuMzI5LDAuMTA5aDE3Ny4zOWMyMC43NSwwLDM3LjYyNy0xNi44ODMsMzcuNjI3LTM3LjYyN1Y4Ni41OTcgICBjMC0yMC43NDMtMTYuODc3LTM3LjYyOC0zNy42MjctMzcuNjI4aC0xNzcuMzljLTAuNzgxLDAtMS41NTMsMC4wNzctMi4zMjksMC4xMTNWMEwxMS4xNzYsNDYuMjA2djQ5Mi4zMTFsMzQ2LjIyLDQ3LjQwMVY1MzUuMzN6ICAgIE0zNTkuNzI2LDcwLjQ3NmgxNzcuMzljOC44OTMsMCwxNi4xMjUsNy4yMzYsMTYuMTI1LDE2LjEyNnY0MTEuMjJjMCw4Ljg4OC03LjIzMiwxNi4xMjctMTYuMTI1LDE2LjEyN2gtMTc3LjM5ICAgYy0wLjc5MiwwLTEuNTYzLTAuMTI3LTIuMzI5LTAuMjQzVjMxOS4yMTJjOS45MiwzNy43MzgsNDQuMTY4LDY1LjYwNiw4NS4wMTgsNjUuNjA2YzQ4LjYxMSwwLDg4LjAxMy0zOS40MDEsODguMDEzLTg4LjAwN2gtODguMDEzICAgdi04OC4wMTdjLTQwLjg1NCwwLTc1LjEwMywyNy44NzItODUuMDE4LDY1LjYxMlY3MC43MTFDMzU4LjE2Miw3MC41OTksMzU4LjkyOSw3MC40NzYsMzU5LjcyNiw3MC40NzZ6IE0xMTYuNDI3LDI5Ny4xMDYgICBjLTguMTcsOC4xMjYtMjAuMTQ3LDExLjcwNS0zMy45ODIsMTEuNTk2Yy0zLjA1NS0wLjAyNi01Ljc5NS0wLjIxLTcuOTE4LTAuNTUxdjM5LjQzOGwtMjIuNjU3LTAuNTcxVjIzOS4zMjggICBjNy4wMDMtMS40NjcsMTYuOTA2LTIuNzA4LDMxLjAyMS0zLjA4MWMxNC40NzUtMC4zODEsMjQuOTAzLDIuMzM4LDMxLjk1Niw4LjE2NmM2LjgwNiw1LjUzMiwxMS40MDEsMTQuODMzLDExLjQwMSwyNS44ODggICBDMTI2LjI1MywyODEuMzYzLDEyMi43NiwyOTAuNzU0LDExNi40MjcsMjk3LjEwNnogTTIxMi4wNSwyOTcuMjczYy04Ljg5LDguNDg5LTIxLjk0MiwxMi4yMTEtMzYuOTk4LDEyLjEgICBjLTMuMzE4LTAuMDIxLTYuMzAyLTAuMjE0LTguNjAxLTAuNTcydjQxLjEzNmwtMjQuNjUxLTAuNjMxVjIzNy4wNTNjNy42MjItMS41NDIsMTguMzg0LTIuODM4LDMzLjc0MS0zLjI0NSAgIGMxNS43NS0wLjQwOSwyNy4xMDgsMi40MDIsMzQuNzk2LDguNDc1YzcuNDAxLDUuNzc0LDEyLjQyMiwxNS40ODMsMTIuNDIyLDI3LjAyMUMyMjIuNzU5LDI4MC44NDgsMjE4LjkzOCwyOTAuNjU5LDIxMi4wNSwyOTcuMjczeiAgICBNMzI0Ljg5MSwyNTQuMTczbC0zNC4zMDIsMC41NnY5OC4zNjRsLTI3Ljc3OS0wLjcwOXYtOTcuMjA5bC0zMi4wNDMsMC41MjdWMjMzLjIybDk0LjEyNC0yLjQ0MVYyNTQuMTczeiIgZmlsbD0iI0Q4MDAyNyIvPgoJPHBhdGggZD0iTTg0LjEyMiwyNTUuMTIxYy00LjczOCwwLjA4Ni03LjkzLDAuNjMtOS41OTYsMS4xNTV2MzIuNTdjMS45NjMsMC40ODgsNC4zOTYsMC42NSw3Ljc1NiwwLjY0ICAgYzEyLjQzOC0wLjAyMywyMC4xOTEtNi44MzMsMjAuMTkxLTE4LjI2NkMxMDIuNDc0LDI2MC45MzgsOTUuODE3LDI1NC45MTYsODQuMTIyLDI1NS4xMjF6IiBmaWxsPSIjRDgwMDI3Ii8+Cgk8cGF0aCBkPSJNMTc2Ljg3OSwyNTMuNDkxYy01LjE0NSwwLjA4Ny04LjYyMiwwLjY2Mi0xMC40MjIsMS4yMDV2MzMuOTY2YzIuMTM5LDAuNTEyLDQuNzc5LDAuNjcyLDguNDI4LDAuNjcyICAgYzEzLjU0Ni0wLjAyMiwyMS45ODQtNy4xMjYsMjEuOTg0LTE5LjA2NkMxOTYuODY5LDI1OS41MzksMTg5LjYwNCwyNTMuMjY2LDE3Ni44NzksMjUzLjQ5MXoiIGZpbGw9IiNEODAwMjciLz4KCTxwYXRoIGQ9Ik00NTQuMzYyLDI4Mi45MjJ2MC4wMjZoODguMDE4YzAtMjQuNzUzLTEwLjI2OS00Ny4wOTItMjYuNzI1LTYzLjA4TDQ1NC4zNjIsMjgyLjkyMnoiIGZpbGw9IiNEODAwMjciLz4KCTxwYXRoIGQ9Ik00NTMuNDI4LDI2Ny40NTdsNjIuMjI4LTYyLjIzMWMtMTcuNTAxLTE3LjUxMi0zOS4zMzktMjYuMDQ3LTYyLjI5LTI1LjcybDAuMDQyLDg3LjkzTDQ1My40MjgsMjY3LjQ1N3oiIGZpbGw9IiNEODAwMjciLz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K' 109 | }, 110 | 'pptx': { 111 | 'type': 'Microsoft Office PPTX', 112 | 'src': 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCIgdmlld0JveD0iMCAwIDU4OC42MDEgNTg4LjYiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDU4OC42MDEgNTg4LjY7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNNTc3LjM3Myw4Ni45OTljMC0yMC44MzgtMTYuOTQ5LTM3LjgtMzcuOC0zNy44aC0xNzguMmMtMC43ODYsMC0xLjU2MSwwLjA3Ni0yLjM0MiwwLjEyNFYwTDExLjIyOCw0Ni40MTd2NDk0LjU2NCAgIEwzNTkuMDMxLDU4OC42di01MC44MTRjMC43ODEsMC4wNTMsMS41NTEsMC4xMTUsMi4zNDIsMC4xMTVoMTc4LjJjMjAuODUxLDAsMzcuOC0xNi45NjQsMzcuOC0zNy44Vjg2Ljk5OXogTTgzLjU3MSwzMTUuMzUyICAgYy01LjgwOSw2LjAyNy0xNC4zMSw4LjY3NC0yNC4xMjEsOC42MDVjLTIuMTQ5LTAuMDEtNC4wOTItMC4xNDctNS41OS0wLjR2MjkuMTA5bC0xNS45NTctMC40ODV2LTc5LjI3MSAgIGM0LjkyNS0xLjEzMSwxMS45MDctMi4xMDEsMjEuODc2LTIuNDU3YzEwLjI0OS0wLjM2NiwxNy42NDgsMS41ODIsMjIuNjczLDUuODU0YzQuODM4LDQuMDcxLDguMTI0LDEwLjkzOSw4LjEyNCwxOS4xNDcgICBDOTAuNTc3LDMwMy42NjYsODguMDg1LDMxMC42MjYsODMuNTcxLDMxNS4zNTJ6IE0xNTIuMzUzLDMxNS4zNTJjLTYuNDU1LDYuMzU5LTE1LjkwNSw5LjE0NC0yNi43NjgsOS4wNyAgIGMtMi40MDUtMC4wMTEtNC41NDgtMC4xNTgtNi4yMDktMC40MjJ2MzAuNjM5bC0xNy42NzctMC41Mzh2LTgzLjM5NWM1LjQ1Ni0xLjIwNSwxMy4xODQtMi4yMzYsMjQuMjQ4LTIuNjM0ICAgYzExLjM2Mi0wLjQwNiwxOS41ODUsMS42MzUsMjUuMTY1LDYuMTI4YzUuMzc2LDQuMjgyLDkuMDE4LDExLjUyNyw5LjAxOCwyMC4xNzNDMTYwLjEyMywzMDMuMDIyLDE1Ny4zNTcsMzEwLjM4NCwxNTIuMzUzLDMxNS4zNTJ6ICAgIE0yMzUuMzAxLDI4Mi41NTNsLTI1LjQyOCwwLjU4NnY3NC4yMjZsLTIwLjQ1MS0wLjYxNnYtNzMuMTQxbC0yMy40NDUsMC41NDN2LTE2Ljg1N2w2OS4zMjQtMi40NjJWMjgyLjU1M3ogTTMwMi4yMDUsMzYwLjE1NSAgIGwtOS4zNDUtMTcuODYxYy0zLjc5Ny02LjgyNC02LjIyMy0xMS44Ny05LjA5NC0xNy40ODFoLTAuMjk4Yy0yLjA5OSw1LjU1My00LjY0OCwxMC41MjYtNy43NzEsMTcuMTc2bC04LjI5LDE3LjExN2wtMjUuMTUxLTAuNzY1ICAgbDI4LjI0Mi00Ny41MjNsLTI3LjI1My00Ni4yNjdsMjUuMzMxLTAuOTAybDguNzQ0LDE3LjIyMWMyLjk5NSw1Ljc3OSw1LjI1MiwxMC40NjUsNy42NDQsMTUuODY4bDAuMzE5LTAuMDExICAgYzIuNDA1LTYuMTk2LDQuMzc5LTEwLjU0NCw2Ljk2MS0xNi4yMDhsOC43MjItMTguMDJsMjcuMjk1LTAuOTczbC0yOS43NDIsNDguNjI2bDMxLjMzNSw1MC44MjVMMzAyLjIwNSwzNjAuMTU1eiBNNTU1Ljc3Myw1MDAuMTAxICAgYzAsOC45MjgtNy4yNjgsMTYuMi0xNi4yLDE2LjJoLTE3OC4yYy0wLjc5NiwwLTEuNTcxLTAuMTE2LTIuMzQyLTAuMjMyVjI5NS41MTNjMTguMDg4LDE5LjgyOCw0NC4wOTIsMzIuMjg0LDczLjA0OCwzMi4yODQgICBjMzMuNDAyLDAsNjIuODgxLTE2LjU4Niw4MC44MTEtNDEuOTMybC04MS4yNjQtNTAuOTdsLTcyLjU5NSwzMS44Mzh2LTExLjc4OWw2Ni4yOTgtMjkuMDc1di05NS43MTMgICBjLTI2LjIyLDEuNzY5LTQ5LjYxNywxMy43NTgtNjYuMjk4LDMxLjk3OFY3MS4wNDJjMC43NzEtMC4xMTQsMS41NC0wLjI0MywyLjM0Mi0wLjI0M2gxNzguMmM4LjkzMywwLDE2LjIsNy4yNywxNi4yLDE2LjJWNTAwLjEwMXogICAiIGZpbGw9IiNEODAwMjciLz4KCTxwYXRoIGQ9Ik02MC42NDUsMjg0LjM4NmMtMy4zNDMsMC4wODQtNS42LDAuNTA2LTYuNzg0LDAuODg5djI0LjAzM2MxLjM5NSwwLjM1NCwzLjExMSwwLjQ3NSw1LjQ4NywwLjQ2NCAgIGM4LjgxNy0wLjA0MiwxNC4zMi01LjA5NCwxNC4zMi0xMy41NjJDNzMuNjY3LDI4OC41OTcsNjguOTMyLDI4NC4xNzUsNjAuNjQ1LDI4NC4zODZ6IiBmaWxsPSIjRDgwMDI3Ii8+Cgk8cGF0aCBkPSJNMTI2LjksMjgyLjczOGMtMy43MjEsMC4wOTgtNi4yMiwwLjU0MS03LjUzMSwwLjk1NXYyNS4yOTljMS41NDgsMC4zOCwzLjQ0OSwwLjQ5Niw2LjA4NSwwLjQ4NSAgIGM5Ljc4LTAuMDQyLDE1Ljg4MS01LjM2OCwxNS44ODEtMTQuMjg2QzE0MS4zNDIsMjg3LjE2NSwxMzYuMDc2LDI4Mi41MTcsMTI2LjksMjgyLjczOHoiIGZpbGw9IiNEODAwMjciLz4KCTxwYXRoIGQ9Ik00MzguMDcsMTI4LjgwNnY5NC45NTRsODIuNTM5LDUxLjc4NWM3Ljg5LTE0LjIxOCwxMi40MTQtMzAuNTQ0LDEyLjQxNC00Ny45NDYgICBDNTMzLjAyMywxNzQuMjg1LDQ5MC44NTcsMTMwLjk1LDQzOC4wNywxMjguODA2eiIgZmlsbD0iI0Q4MDAyNyIvPgoJPHJlY3QgeD0iMzc0LjM0NiIgeT0iMzY1LjU5NyIgd2lkdGg9IjEwOCIgaGVpZ2h0PSIxNi4xMTUiIGZpbGw9IiNEODAwMjciLz4KCTxyZWN0IHg9IjM3NC4zNDYiIHk9IjQwNi42MjUiIHdpZHRoPSIxMDgiIGhlaWdodD0iMTYuMTI2IiBmaWxsPSIjRDgwMDI3Ii8+Cgk8cmVjdCB4PSIzNzQuMzQ2IiB5PSI0NDcuMDE5IiB3aWR0aD0iMTA4IiBoZWlnaHQ9IjE2LjEyNiIgZmlsbD0iI0Q4MDAyNyIvPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+Cjwvc3ZnPgo=' 113 | }, 114 | 'xlsx': { 115 | 'type': 'Microsoft Office xlsx文档', 116 | 'src': 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCIgdmlld0JveD0iMCAwIDU4OC42MDEgNTg4LjYiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDU4OC42MDEgNTg4LjY7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8cGF0aCBkPSJNMzU5LjAzMSw1MzcuNzg2YzAuNzgxLDAuMDUzLDEuNTUxLDAuMTE1LDIuMzQyLDAuMTE1aDE3OC4yYzIwLjg0MSwwLDM3LjgtMTYuOTY0LDM3LjgtMzcuOFY4Ni45OTkgICBjMC0yMC44MzgtMTYuOTU5LTM3LjgtMzcuOC0zNy44aC0xNzguMmMtMC43OTEsMC0xLjU2MSwwLjA3Ni0yLjM0MiwwLjEyNFYwTDExLjIyOCw0Ni40MTd2NDk0LjU2NEwzNTkuMDMxLDU4OC42VjUzNy43ODZ6ICAgIE0zNjEuMzczLDcwLjgwNGgxNzguMmM4LjkzMywwLDE2LjIsNy4yNjksMTYuMiwxNi4ydjQxMy4wOTdjMCw4LjkzNC03LjI2OCwxNi4yLTE2LjIsMTYuMmgtMTc4LjIgICBjLTAuODAyLDAtMS41NzEtMC4xMS0yLjM0Mi0wLjIzMnYtMTE4LjgyaDE3OS43MjlWMjI5Ljg1MUgzNTkuMDMxVjcxLjA0NkMzNTkuODAyLDcwLjkyOCwzNjAuNTcxLDcwLjgwNCwzNjEuMzczLDcwLjgwNHogICAgTTQ0My44MTgsMzU2Ljc0OXYzNS4xaC04NC4xNTR2LTM1LjFINDQzLjgxOHogTTM1OS42NjQsMzEwLjg0OFYyNzUuNzVoODQuMTU0djM1LjA5OEgzNTkuNjY0eiBNNTMzLjM2MSwyNzUuNzV2MzUuMDk4aC04NC4xNDQgICBWMjc1Ljc1SDUzMy4zNjF6IE00NDkuMjE4LDI3MC4zNTFWMjM1LjI1aDg0LjE0NHYzNS4xMDFINDQ5LjIxOHogTTUzMy4zNjEsMzU2Ljc0OXYzNS4xaC04NC4xNDR2LTM1LjFINTMzLjM2MXogTTc3LjY4OCwzMzkuMTY3ICAgbC03LjE1OS0xNi4xNjhjLTIuOTA2LTYuMTgxLTQuNzctMTAuNzU4LTYuOTYxLTE1Ljg1M2wtMC4yMzItMC4wMDVjLTEuNjE2LDUuMDEtMy41Nyw5LjQ4Ni01Ljk2NywxNS40NjdsLTYuMzczLDE1LjQzNiAgIGwtMTkuMzc1LTAuODE3bDIxLjc1Ni00Mi44MzdsLTIwLjk5NC00Mi4xMjRsMTkuNTE0LTAuNTQ1bDYuNzE5LDE1LjY2YzIuMjk0LDUuMjU1LDQuMDIzLDkuNSw1Ljg3NSwxNC40MDFoMC4yMjEgICBjMS44NTktNS41NzYsMy4zNjUtOS40ODEsNS4zNDItMTQuNTczbDYuNjg0LTE2LjE3OWwyMC44NDktMC41NzdsLTIyLjczNCw0My41NjNsMjMuOTU1LDQ2LjAzMkw3Ny42ODgsMzM5LjE2N3ogTTE2My4yODQsMzQyLjc3NCAgIGwtNTQuMzg4LTIuMjg5di05MC4zMzdsMTkuMjUxLTAuNTR2NzQuMjcxbDM1LjEzNywxLjAxOVYzNDIuNzc0eiBNMTk4LjQ5MiwzNDUuNjg0Yy0xMC44MzItMC40NjQtMjEuMzQ3LTMuNzQ0LTI2LjU1Mi02LjkwOCAgIGw0LjI0LTE3LjU5OGM1LjY0NywzLjExNywxNC40MjMsNi4zNTUsMjMuNTg4LDYuNjRjMTAuMDE3LDAuMzAxLDE1LjM1Ni0zLjczOSwxNS4zNTYtMTAuMTM2YzAtNi4wODUtNC42MjgtOS42MzUtMTYuMjA2LTEzLjk3NSAgIGMtMTUuNzA5LTUuNzMyLTI1Ljc1OC0xNC41MjgtMjUuNzU4LTI4LjMyNmMwLTE2LjE3NiwxMy4yNDItMjguOTM4LDM1Ljc1NC0yOS41OTJjMTEuMDE3LTAuMzE2LDE5LjI1NiwxLjc4OCwyNS4xODcsNC4yNzEgICBsLTUuMDUsMTguMTUxYy0zLjk4Ni0xLjg0OS0xMS4wMjEtNC41MjItMjAuNTc0LTQuMzY5Yy05LjQyNCwwLjE0NS0xMy45NDgsNC41MDktMTMuOTQ4LDkuNTE0YzAsNi4xNDEsNS4zNzQsOC44NDYsMTcuODQzLDEzLjU4NyAgIGMxNy40MTgsNi40NiwyNS43NjksMTUuNjM2LDI1Ljc2OSwyOS42NDZDMjM4LjE1MSwzMzMuMjUsMjI1LjIyNCwzNDYuODM5LDE5OC40OTIsMzQ1LjY4NHogTTMxMC4zMTEsMzQ4Ljk2NGwtMTAuMDM1LTE5LjE5NSAgIGMtNC4wNjMtNy4zMy02LjY2MS0xMi43NTEtOS43My0xOC43ODloLTAuMzIyYy0yLjI1MSw1LjkxMS00Ljk4NiwxMS4xODUtOC4zNCwxOC4yNDZsLTguODY0LDE4LjE1NmwtMjYuODkyLTEuMTI4bDMwLjIwMS01MC4zNTIgICBsLTI5LjEzOC00OS41OTlsMjcuMDkyLTAuNzUybDkuMzY4LDE4LjQ1N2MzLjIwNCw2LjE5OSw1LjYwNSwxMS4yMTEsOC4xOTIsMTcuMDA0aDAuMzI0YzIuNTg3LTYuNTk3LDQuNjkzLTExLjIxOSw3LjQ2NS0xNy4yNDcgICBsOS4zNTQtMTkuMTc1bDI5LjMzMS0wLjgxN2wtMzEuOTU3LDUxLjcwNmwzMy42NzcsNTQuNzI5TDMxMC4zMTEsMzQ4Ljk2NHoiIGZpbGw9IiM5MURDNUEiLz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K' 117 | }, 118 | 'xls': { 119 | 'type': 'Microsoft Office xls文档', 120 | 'src': 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCIgdmlld0JveD0iMCAwIDU4NS45MTggNTg1LjkxOCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTg1LjkxOCA1ODUuOTE4OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxnPgoJPHBhdGggZD0iTTExLjE3Niw0Ni4yMDd2NDkyLjMxbDM0Ni4yMiw0Ny40MDF2LTUwLjU4M2MwLjc3NiwwLjA1MywxLjU0MiwwLjExNSwyLjMyOSwwLjExNWgxNzcuMzkgICBjMjAuNzQ1LDAsMzcuNjI3LTE2Ljg4OCwzNy42MjctMzcuNjI4Vjg2LjYwMmMwLTIwLjc0My0xNi44ODItMzcuNjI4LTM3LjYyNy0zNy42MjhoLTE3Ny4zOWMtMC43ODcsMC0xLjU1MywwLjA3Ni0yLjMyOSwwLjEyM1YwICAgTDExLjE3Niw0Ni4yMDd6IE0zNTcuMzk2LDM1NS4xMjJINDM1Ljl2MzQuOTM5aC03OC41MDRWMzU1LjEyMnogTTM1Ny4zOTYsMzA5LjQzMnYtMzQuOTQySDQzNS45djM0Ljk0MkgzNTcuMzk2eiBNMTAwLjYxNSwzNTAuODAyICAgbC05LjY1OS0yMS4zNDVjLTMuOTEzLTguMTUxLTYuNDA2LTE0LjE2MS05LjM1Mi0yMC44NTVsLTAuMzE3LTAuMDA2Yy0yLjE2MSw2LjU3OC00Ljc4LDEyLjQzNy03Ljk4OCwyMC4yNzlsLTguNTA0LDIwLjE2OCAgIGwtMjUuNjktMS4yNTRsMjguODY2LTU1Ljg4MWwtMjcuODU2LTU0Ljc5bDI1Ljg4Mi0xLjA2M2w4Ljk3OSwyMC40MTFjMy4wNjgsNi44NTgsNS4zODYsMTIuNDI3LDcuODYzLDE4LjgzOWgwLjMwNSAgIGMyLjQ5Ni03LjM0Nyw0LjUyMi0xMi41MDEsNy4xODQtMTkuMjJsOS4wMTQtMjEuMzk5bDI4LjMwMi0xLjE3M2wtMzAuODQ1LDU3LjgxOWwzMi41MTcsNjAuODcyTDEwMC42MTUsMzUwLjgwMnogTTIxOC44MzcsMzU2LjU4NyAgIGwtNzUuNzMzLTMuN1YyMzIuODc1bDI2LjU2NC0xLjA5OHY5OS4xNTZsNDkuMTY0LDEuNTY1djI0LjA4OUgyMTguODM3eiBNMjY5LjAzMiwzNjAuOTkxYy0xNS41MjctMC43ODctMzAuNTQxLTUuMzUtMzcuOTI3LTkuNjkxICAgbDYuMDEzLTIzLjc0N2M4LjA0Nyw0LjI0MSwyMC41ODgsOC42OTIsMzMuNzUzLDkuMTM0YzE0LjQ1NSwwLjQ4MywyMi4yMDUtNC45OTgsMjIuMjA1LTEzLjcxN2MwLTguMzI1LTYuNzA4LTEzLjE4Mi0yMy40MzEtMTkuMDgyICAgYy0yMi41MDEtNy43MzYtMzYuODEyLTE5LjYwMi0zNi44MTItMzguMjMxYzAtMjEuODUsMTguODY5LTM5LjM4Niw1MS4yNDUtNDAuNzcyYzE1Ljk4MS0wLjY4MiwyNy45OTIsMi4wMTYsMzYuNjg3LDUuMjk0ICAgbC03LjM5OCwyNC45ODVjLTUuODI1LTIuNDczLTE2LjA2Ny02LjAwOC0yOS45MTgtNS42NTRjLTEzLjU5NCwwLjM1NC0yMC4wOTgsNi4zNTUtMjAuMDk4LDEzLjE0MiAgIGMwLDguMzQ5LDcuNzMsMTEuOTcyLDI1LjczNSwxOC4zMjVjMjUuMzY4LDguNzMsMzcuNjA5LDIxLjMwNiwzNy42MDksNDAuNTVDMzI2LjY5NywzNDQuNDQsMzA3Ljc2OSwzNjIuOTQ0LDI2OS4wMzIsMzYwLjk5MXogICAgTTM1OS43MjYsNzAuNDc2aDE3Ny4zOWM4Ljg5MywwLDE2LjEyNSw3LjIzNiwxNi4xMjUsMTYuMTI2djQxMS4yMmMwLDguODkzLTcuMjMyLDE2LjEyNy0xNi4xMjUsMTYuMTI3aC0xNzcuMzkgICBjLTAuNzk3LDAtMS41NjMtMC4xMTYtMi4zMjktMC4yMzJWMzk1LjQzOGgxNzMuMDI0di0xNjYuNjRIMzU3LjM5NlY3MC43MkMzNTguMTYyLDcwLjYwNCwzNTguOTI5LDcwLjQ3NiwzNTkuNzI2LDcwLjQ3NnogICAgTTUyNS4wNDYsMjc0LjQ4OXYzNC45NDJoLTgzLjc2NXYtMzQuOTQySDUyNS4wNDZMNTI1LjA0NiwyNzQuNDg5eiBNNDQxLjI4MSwyNjkuMTEzdi0zNC45NGg4My43NjV2MzQuOTRINDQxLjI4MXogICAgTTUyNS4wNDYsMzU1LjEyMnYzNC45MzloLTgzLjc2NXYtMzQuOTM5SDUyNS4wNDZ6IiBmaWxsPSIjOTFEQzVBIi8+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+Cg==' 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /app/src/renderer/config/canvas.js: -------------------------------------------------------------------------------- 1 | export function render () { 2 | var canvas = document.querySelector('#J_loginBackground') 3 | if (!canvas) { 4 | return 5 | } 6 | var ctx = canvas.getContext('2d') 7 | 8 | canvas.width = window.innerWidth 9 | canvas.height = window.innerHeight 10 | ctx.lineWidth = 0.3 11 | ctx.strokeStyle = (new Color(150)).style 12 | 13 | var i, j, iDot, jDot 14 | 15 | var mousePosition = { 16 | x: 30 * canvas.width / 100, 17 | y: 30 * canvas.height / 100 18 | } 19 | 20 | var dots = { 21 | nb: 750, 22 | distance: 50, 23 | d_radius: 100, 24 | array: [] 25 | } 26 | 27 | function colorValue (min) { 28 | return Math.floor(Math.random() * 255 + min) 29 | } 30 | 31 | function createColorStyle (r, g, b) { 32 | return 'rgba(' + r + ',' + g + ',' + b + ', 0.8)' 33 | } 34 | 35 | function mixComponents (comp1, weight1, comp2, weight2) { 36 | return (comp1 * weight1 + comp2 * weight2) / (weight1 + weight2) 37 | } 38 | 39 | function averageColorStyles (dot1, dot2) { 40 | var color1 = dot1.color 41 | var color2 = dot2.color 42 | 43 | var r = mixComponents(color1.r, dot1.radius, color2.r, dot2.radius) 44 | var g = mixComponents(color1.g, dot1.radius, color2.g, dot2.radius) 45 | var b = mixComponents(color1.b, dot1.radius, color2.b, dot2.radius) 46 | return createColorStyle(Math.floor(r), Math.floor(g), Math.floor(b)) 47 | } 48 | 49 | function Color (min) { 50 | min = min || 0 51 | this.r = colorValue(min) 52 | this.g = colorValue(min) 53 | this.b = colorValue(min) 54 | this.style = createColorStyle(this.r, this.g, this.b) 55 | } 56 | 57 | function Dot () { 58 | this.x = Math.random() * canvas.width 59 | this.y = Math.random() * canvas.height 60 | 61 | this.vx = -0.5 + Math.random() 62 | this.vy = -0.5 + Math.random() 63 | 64 | this.radius = Math.random() * 2 65 | 66 | this.color = new Color() 67 | // console.log(this) 68 | } 69 | 70 | Dot.prototype = { 71 | draw: function () { 72 | ctx.beginPath() 73 | ctx.fillStyle = this.color.style 74 | ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2, false) 75 | ctx.fill() 76 | } 77 | } 78 | 79 | function createDots () { 80 | for (i = 0; i < dots.nb; i++) { 81 | dots.array.push(new Dot()) 82 | } 83 | } 84 | 85 | function moveDots () { 86 | for (i = 0; i < dots.nb; i++) { 87 | var dot = dots.array[i] 88 | 89 | if (dot.y < 0 || dot.y > canvas.height) { 90 | dot.vx = dot.vx 91 | dot.vy = -dot.vy 92 | } else if (dot.x < 0 || dot.x > canvas.width) { 93 | dot.vx = -dot.vx 94 | dot.vy = dot.vy 95 | } 96 | dot.x += dot.vx 97 | dot.y += dot.vy 98 | } 99 | } 100 | 101 | function connectDots () { 102 | for (i = 0; i < dots.nb; i++) { 103 | for (j = 0; j < dots.nb; j++) { 104 | iDot = dots.array[i] 105 | jDot = dots.array[j] 106 | 107 | if ((iDot.x - jDot.x) < dots.distance && (iDot.y - jDot.y) < dots.distance && (iDot.x - jDot.x) > -dots.distance && (iDot.y - jDot.y) > -dots.distance) { 108 | if ((iDot.x - mousePosition.x) < dots.d_radius && (iDot.y - mousePosition.y) < dots.d_radius && (iDot.x - mousePosition.x) > -dots.d_radius && (iDot.y - mousePosition.y) > -dots.d_radius) { 109 | ctx.beginPath() 110 | ctx.strokeStyle = averageColorStyles(iDot, jDot) 111 | ctx.moveTo(iDot.x, iDot.y) 112 | ctx.lineTo(jDot.x, jDot.y) 113 | ctx.stroke() 114 | ctx.closePath() 115 | } 116 | } 117 | } 118 | } 119 | } 120 | 121 | function drawDots () { 122 | for (i = 0; i < dots.nb; i++) { 123 | var dot = dots.array[i] 124 | dot.draw() 125 | } 126 | } 127 | 128 | function animateDots () { 129 | ctx.clearRect(0, 0, canvas.width, canvas.height) 130 | moveDots() 131 | connectDots() 132 | drawDots() 133 | 134 | requestAnimationFrame(animateDots) 135 | } 136 | 137 | canvas.onmousemove = function (e) { 138 | mousePosition.x = e.pageX 139 | mousePosition.y = e.pageY 140 | } 141 | 142 | canvas.onmouseleave = function (e) { 143 | mousePosition.x = canvas.width / 2 144 | mousePosition.y = canvas.height / 2 145 | } 146 | 147 | createDots() 148 | requestAnimationFrame(animateDots) 149 | } 150 | -------------------------------------------------------------------------------- /app/src/renderer/extend/filters.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | 3 | const filters = { 4 | toMem (mem) { 5 | var G = 0 6 | var M = 0 7 | var KB = 0 8 | mem > (1 << 30) && (G = (mem / (1 << 30)).toFixed(2)) 9 | mem > (1 << 20) && (mem < (1 << 30)) && (M = (mem / (1 << 20)).toFixed(2)) 10 | mem > (1 << 10) && (mem > (1 << 20)) && (KB = (mem / (1 << 10)).toFixed(2)) 11 | return G > 0 ? G + 'G' : M > 0 ? M + 'M' : KB > 0 ? KB + 'KB' : mem + 'B' 12 | } 13 | } 14 | export default { 15 | install () { 16 | Object.keys(filters).forEach(key => { 17 | Vue.filter(key, filters[key]) 18 | }) 19 | } 20 | } 21 | 22 | export function toMem (mem) { 23 | var G = 0 24 | var M = 0 25 | var KB = 0 26 | mem > (1 << 30) && (G = (mem / (1 << 30)).toFixed(2)) 27 | mem > (1 << 20) && (mem < (1 << 30)) && (M = (mem / (1 << 20)).toFixed(2)) 28 | mem > (1 << 10) && (mem > (1 << 20)) && (KB = (mem / (1 << 10)).toFixed(2)) 29 | return G > 0 ? G + 'G' : M > 0 ? M + 'M' : KB > 0 ? KB + 'KB' : mem + 'B' 30 | } 31 | -------------------------------------------------------------------------------- /app/src/renderer/extend/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import filters from './filters' 3 | 4 | export default { 5 | install () { 6 | Vue.use(filters) 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /app/src/renderer/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import iView from 'iview' 3 | import VCharts from 'v-charts' 4 | import 'iview/dist/styles/iview.css' 5 | 6 | import App from './App' 7 | import router from './router' 8 | import store from './store' 9 | import extend from './extend' 10 | 11 | Vue.use(extend) 12 | Vue.use(iView) 13 | Vue.use(VCharts) 14 | if (!process.env.IS_WEB) Vue.use(require('vue-electron')) 15 | Vue.config.productionTip = false 16 | 17 | router.beforeEach((to, from, next) => { 18 | iView.LoadingBar.start() 19 | next() 20 | }) 21 | 22 | router.afterEach((to, from, next) => { 23 | iView.LoadingBar.finish() 24 | }) 25 | 26 | localStorage.setItem('username', 'water') 27 | localStorage.setItem('password', '123456') 28 | 29 | /* eslint-disable no-new */ 30 | new Vue({ 31 | el: '#app', 32 | router, 33 | store, 34 | render: h => h(App) 35 | }) 36 | -------------------------------------------------------------------------------- /app/src/renderer/router/history.js: -------------------------------------------------------------------------------- 1 | /** 2 | * router hook 3 | */ 4 | 5 | export default { 6 | install (router) { 7 | router.beforeEach((to, from, next) => { 8 | if (to.meta.auth) { 9 | next({ 10 | path: '/login', 11 | query: { 12 | redirect: to.fullPath 13 | } 14 | }) 15 | } else { 16 | next() 17 | } 18 | }) 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/src/renderer/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Router from 'vue-router' 3 | 4 | import routes from './routes' 5 | // import history from './history' 6 | 7 | const router = new Router({ 8 | routes 9 | }) 10 | 11 | Vue.use(Router) 12 | // history.install(router) 13 | 14 | export default router 15 | -------------------------------------------------------------------------------- /app/src/renderer/router/routes.js: -------------------------------------------------------------------------------- 1 | const Login = resolve => { 2 | import('@/views/login').then(module => { 3 | resolve(module) 4 | }) 5 | } 6 | 7 | const Index = resolve => { 8 | import('@/views/index/index').then(module => { 9 | resolve(module) 10 | }) 11 | } 12 | 13 | const Folder = resolve => { 14 | import('@/views/files/folder').then(module => { 15 | resolve(module) 16 | }) 17 | } 18 | const routes = [ 19 | { 20 | path: '/computer', 21 | name: 'index', 22 | component: Index, 23 | children: [{ 24 | path: '/computer/:id', 25 | name: 'folder', 26 | component: Folder 27 | }] 28 | }, { 29 | path: '/', 30 | name: 'login', 31 | component: Login 32 | }, 33 | { 34 | path: '*', 35 | redirect: '/computer' 36 | } 37 | ] 38 | 39 | export default routes 40 | -------------------------------------------------------------------------------- /app/src/renderer/store/actions.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k-water/electron-filesystem/641f4d599f766a5486f57328b8c82bb2d80a7240/app/src/renderer/store/actions.js -------------------------------------------------------------------------------- /app/src/renderer/store/getters.js: -------------------------------------------------------------------------------- 1 | export const folderInfo = state => state.folderInfo 2 | -------------------------------------------------------------------------------- /app/src/renderer/store/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | import * as actions from './actions' 4 | import * as getters from './getters' 5 | import state from './state' 6 | import mutations from './mutations' 7 | import createLogger from 'vuex/dist/logger' 8 | 9 | Vue.use(Vuex) 10 | 11 | const debug = process.env.NODE_ENV !== 'production' 12 | 13 | export default new Vuex.Store({ 14 | state, 15 | getters, 16 | mutations, 17 | actions, 18 | strict: debug, 19 | plugins: debug ? [createLogger()] : [] 20 | }) 21 | 22 | // import Vue from 'vue' 23 | // import Vuex from 'vuex' 24 | 25 | // import modules from './modules' 26 | 27 | // Vue.use(Vuex) 28 | 29 | // export default new Vuex.Store({ 30 | // modules, 31 | // strict: process.env.NODE_ENV !== 'production' 32 | // }) 33 | -------------------------------------------------------------------------------- /app/src/renderer/store/modules/Counter.js: -------------------------------------------------------------------------------- 1 | const state = { 2 | main: 0 3 | } 4 | 5 | const mutations = { 6 | DECREMENT_MAIN_COUNTER (state) { 7 | state.main-- 8 | }, 9 | INCREMENT_MAIN_COUNTER (state) { 10 | state.main++ 11 | } 12 | } 13 | 14 | const actions = { 15 | someAsyncTask ({ commit }) { 16 | // do something async 17 | commit('INCREMENT_MAIN_COUNTER') 18 | } 19 | } 20 | 21 | export default { 22 | state, 23 | mutations, 24 | actions 25 | } 26 | -------------------------------------------------------------------------------- /app/src/renderer/store/modules/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * The file enables `@/store/index.js` to import all vuex modules 3 | * in a one-shot manner. There should not be any reason to edit this file. 4 | */ 5 | 6 | const files = require.context('.', false, /\.js$/) 7 | const modules = {} 8 | 9 | files.keys().forEach(key => { 10 | if (key === './index.js') return 11 | modules[key.replace(/(\.\/|\.js)/g, '')] = files(key).default 12 | }) 13 | 14 | export default modules 15 | -------------------------------------------------------------------------------- /app/src/renderer/store/mutation-types.js: -------------------------------------------------------------------------------- 1 | export const GET_FOLDER_INFO = 'GET_FOLDER_INFO' 2 | 3 | export const CHANGE_FOLDER_INFO = 'CHANGE_FOLDER_INFO' 4 | -------------------------------------------------------------------------------- /app/src/renderer/store/mutations.js: -------------------------------------------------------------------------------- 1 | import * as types from './mutation-types' 2 | 3 | const mutations = { 4 | [types.GET_FOLDER_INFO] (state, folder) { 5 | state.folderInfo = folder 6 | }, 7 | [types.CHANGE_FOLDER_INFO] (state, stat) { 8 | stat.folderInfo = stat.folderInfo.push(stat) 9 | } 10 | } 11 | 12 | export default mutations 13 | -------------------------------------------------------------------------------- /app/src/renderer/store/state.js: -------------------------------------------------------------------------------- 1 | const state = { 2 | folderInfo: [] 3 | } 4 | export default state 5 | -------------------------------------------------------------------------------- /app/src/renderer/views/files/folder.vue: -------------------------------------------------------------------------------- 1 | 163 | 522 | 591 | -------------------------------------------------------------------------------- /app/src/renderer/views/index/index.vue: -------------------------------------------------------------------------------- 1 | 41 | 140 | 176 | -------------------------------------------------------------------------------- /app/src/renderer/views/login.vue: -------------------------------------------------------------------------------- 1 | 45 | 46 | 118 | 119 | 170 | -------------------------------------------------------------------------------- /app/src/renderer/views/siderBar/leftBar.vue: -------------------------------------------------------------------------------- 1 | 60 | 127 | 160 | -------------------------------------------------------------------------------- /app/src/renderer/views/siderBar/rightBar.vue: -------------------------------------------------------------------------------- 1 | 26 | 45 | 85 | -------------------------------------------------------------------------------- /app/src/renderer/views/siderBar/rightDisk.vue: -------------------------------------------------------------------------------- 1 | 30 | 52 | 91 | -------------------------------------------------------------------------------- /build/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/k-water/electron-filesystem/641f4d599f766a5486f57328b8c82bb2d80a7240/build/.gitkeep -------------------------------------------------------------------------------- /build/Gruntfile.js: -------------------------------------------------------------------------------- 1 | var grunt = require('grunt') 2 | grunt 3 | .config 4 | .init({ 5 | pkg: grunt 6 | .file 7 | .readJSON('package.json'), 8 | 'create-windows-installer': { 9 | x64: { 10 | appDirectory: './fileSystem-win32-x64', 11 | authors: 'water', 12 | exe: 'fileSystem.exe', 13 | description: 'fileSystem' 14 | } 15 | } 16 | }) 17 | 18 | grunt.loadNpmTasks('grunt-electron-installer') 19 | grunt.registerTask('default', ['create-windows-installer']) 20 | -------------------------------------------------------------------------------- /build/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "electron-filesystem", 3 | "version": "1.0.0", 4 | "description": "Simple fileSystem created with electron-vue", 5 | "devDependencies": { 6 | "grunt": "^1.0.1", 7 | "grunt-electron-installer": "^2.1.0" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /config.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | const path = require('path') 4 | 5 | let config = { 6 | // Name of electron app 7 | // Will be used in production builds 8 | name: 'fileSystem', 9 | 10 | // Use ESLint (extends `standard`) 11 | // Further changes can be made in `.eslintrc.js` 12 | eslint: true, 13 | 14 | // webpack-dev-server port 15 | port: 9080, 16 | 17 | // electron-packager options 18 | // Docs: https://simulatedgreg.gitbooks.io/electron-vue/content/docs/building_your_app.html 19 | building: { 20 | arch: 'x64', 21 | asar: true, 22 | dir: path.join(__dirname, 'app'), 23 | icon: path.join(__dirname, 'app/icons/logo'), 24 | ignore: /\b(src|index\.ejs|icons)\b/, 25 | out: path.join(__dirname, 'build'), 26 | overwrite: true, 27 | versionStringCompanyName: 'fileSystem', 28 | versionStringProductName: 'fileSystem', 29 | platform: process.env.PLATFORM_TARGET || 'all' 30 | } 31 | } 32 | 33 | config.building.name = config.name 34 | 35 | module.exports = config 36 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "electron-filesystem", 3 | "version": "1.0.0", 4 | "description": "Simple fileSystem created with electron-vue", 5 | "scripts": { 6 | "build": "node tasks/release.js", 7 | "build:clean": "cross-env PLATFORM_TARGET=clean node tasks/release.js", 8 | "build:darwin": "cross-env PLATFORM_TARGET=darwin node tasks/release.js", 9 | "build:linux": "cross-env PLATFORM_TARGET=linux node tasks/release.js", 10 | "build:mas": "cross-env PLATFORM_TARGET=mas node tasks/release.js", 11 | "build:win32": "cross-env PLATFORM_TARGET=win32 node tasks/release.js", 12 | "dev": "node tasks/runner.js", 13 | "e2e": "npm run pack && mocha test/e2e", 14 | "lint": "eslint --ext .js,.vue -f ./node_modules/eslint-friendly-formatter app test", 15 | "lint:fix": "eslint --ext .js,.vue -f ./node_modules/eslint-friendly-formatter --fix app test", 16 | "pack": "npm run pack:main && npm run pack:renderer", 17 | "pack:main": "cross-env NODE_ENV=production webpack -p --progress --colors --config webpack.main.config.js", 18 | "pack:renderer": "cross-env NODE_ENV=production webpack -p --progress --colors --config webpack.renderer.config.js", 19 | "test": "npm run unit && npm run e2e", 20 | "unit": "cross-env BABEL_ENV=testing-unit karma start test/unit/karma.conf.js", 21 | "postinstall": "npm run lint:fix && cd app && npm install" 22 | }, 23 | "author": "k-water <625592890@qq.com>", 24 | "license": "MIT", 25 | "devDependencies": { 26 | "babel-core": "^6.26.0", 27 | "babel-eslint": "^8.2.1", 28 | "babel-loader": "^7.1.2", 29 | "babel-plugin-istanbul": "^4.1.5", 30 | "babel-plugin-transform-runtime": "^6.23.0", 31 | "babel-preset-es2015": "^6.24.1", 32 | "babel-preset-stage-0": "^6.24.1", 33 | "babel-register": "^6.26.0", 34 | "babel-runtime": "^6.26.0", 35 | "chai": "^4.1.2", 36 | "cross-env": "^5.1.3", 37 | "css-loader": "^0.28.9", 38 | "del": "^3.0.0", 39 | "devtron": "^1.4.0", 40 | "electron": "^1.7.11", 41 | "electron-debug": "^1.5.0", 42 | "electron-devtools-installer": "^2.2.3", 43 | "electron-packager": "^10.1.1", 44 | "electron-rebuild": "^1.7.3", 45 | "eslint": "^4.16.0", 46 | "eslint-config-standard": "^11.0.0-beta.0", 47 | "eslint-friendly-formatter": "^3.0.0", 48 | "eslint-loader": "^1.9.0", 49 | "eslint-plugin-html": "^4.0.1", 50 | "eslint-plugin-import": "^2.8.0", 51 | "eslint-plugin-node": "^5.2.1", 52 | "eslint-plugin-promise": "^3.6.0", 53 | "eslint-plugin-standard": "^3.0.1", 54 | "extract-text-webpack-plugin": "^3.0.2", 55 | "file-loader": "^1.1.6", 56 | "html-webpack-plugin": "^2.30.1", 57 | "inject-loader": "^3.0.1", 58 | "json-loader": "^0.5.7", 59 | "karma": "^2.0.0", 60 | "karma-chai": "^0.1.0", 61 | "karma-coverage": "^1.1.1", 62 | "karma-electron": "^5.2.2", 63 | "karma-mocha": "^1.3.0", 64 | "karma-sourcemap-loader": "^0.3.7", 65 | "karma-spec-reporter": "0.0.32", 66 | "karma-webpack": "^2.0.9", 67 | "less": "^2.7.3", 68 | "less-loader": "^4.0.5", 69 | "mocha": "^5.0.0", 70 | "require-dir": "^0.3.2", 71 | "spectron": "^3.7.2", 72 | "style-loader": "^0.19.1", 73 | "tree-kill": "^1.2.0", 74 | "url-loader": "^0.6.2", 75 | "vue-hot-reload-api": "^2.2.4", 76 | "vue-html-loader": "^1.2.4", 77 | "vue-loader": "^13.7.0", 78 | "vue-style-loader": "^3.0.3", 79 | "vue-template-compiler": "^2.5.13", 80 | "webpack": "^3.10.0", 81 | "webpack-dev-server": "^2.11.1", 82 | "webpack-merge": "^4.1.1" 83 | }, 84 | "dependencies": { 85 | "v-charts": "^1.15.1" 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /tasks/release.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | const exec = require('child_process').exec 4 | const packager = require('electron-packager') 5 | 6 | if (process.env.PLATFORM_TARGET === 'clean') { 7 | require('del').sync(['builds/*', '!.gitkeep']) 8 | console.log('\x1b[33m`builds` directory cleaned.\n\x1b[0m') 9 | } else pack() 10 | 11 | /** 12 | * Build webpack in production 13 | */ 14 | function pack () { 15 | console.log('\x1b[33mBuilding webpack in production mode...\n\x1b[0m') 16 | let pack = exec('npm run pack') 17 | 18 | pack.stdout.on('data', data => console.log(data)) 19 | pack.stderr.on('data', data => console.error(data)) 20 | pack.on('exit', code => build()) 21 | } 22 | 23 | /** 24 | * Use electron-packager to build electron app 25 | */ 26 | function build () { 27 | let options = require('../config').building 28 | 29 | console.log('\x1b[34mBuilding electron app(s)...\n\x1b[0m') 30 | packager(options, (err, appPaths) => { 31 | if (err) { 32 | console.error('\x1b[31mError from `electron-packager` when building app...\x1b[0m') 33 | console.error(err) 34 | } else { 35 | console.log('Build(s) successful!') 36 | console.log(appPaths) 37 | 38 | console.log('\n\x1b[34mDONE\n\x1b[0m') 39 | } 40 | }) 41 | } 42 | -------------------------------------------------------------------------------- /tasks/runner.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | const config = require('../config') 4 | const exec = require('child_process').exec 5 | const treeKill = require('tree-kill') 6 | 7 | let YELLOW = '\x1b[33m' 8 | let BLUE = '\x1b[34m' 9 | let END = '\x1b[0m' 10 | 11 | let isElectronOpen = false 12 | 13 | function format (command, data, color) { 14 | return color + command + END + 15 | ' ' + // Two space offset 16 | data.toString().trim().replace(/\n/g, '\n' + repeat(' ', command.length + 2)) + 17 | '\n' 18 | } 19 | 20 | function repeat (str, times) { 21 | return (new Array(times + 1)).join(str) 22 | } 23 | 24 | let children = [] 25 | 26 | function run (command, color, name) { 27 | let child = exec(command) 28 | 29 | child.stdout.on('data', data => { 30 | console.log(format(name, data, color)) 31 | 32 | /** 33 | * Start electron after successful compilation 34 | * (prevents electron from opening a blank window that requires refreshing) 35 | */ 36 | if (/Compiled/g.test(data.toString().trim().replace(/\n/g, '\n' + repeat(' ', command.length + 2))) && !isElectronOpen) { 37 | console.log(`${BLUE}Starting electron...\n${END}`) 38 | run('cross-env NODE_ENV=development electron app/src/main/index.dev.js', BLUE, 'electron') 39 | isElectronOpen = true 40 | } 41 | }) 42 | 43 | child.stderr.on('data', data => console.error(format(name, data, color))) 44 | child.on('exit', code => exit(code)) 45 | 46 | children.push(child) 47 | } 48 | 49 | function exit (code) { 50 | children.forEach(child => { 51 | treeKill(child.pid) 52 | }) 53 | } 54 | 55 | console.log(`${YELLOW}Starting webpack-dev-server...\n${END}`) 56 | run(`webpack-dev-server --hot --colors --config webpack.renderer.config.js --port ${config.port} --content-base app/dist`, YELLOW, 'webpack') 57 | -------------------------------------------------------------------------------- /test/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "mocha": true 4 | }, 5 | "globals": { 6 | "assert": true, 7 | "expect": true, 8 | "should": true 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /test/e2e/index.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | // Set BABEL_ENV to use proper preset config 4 | process.env.BABEL_ENV = 'testing-e2e' 5 | 6 | // Enable use of es2015 on required files 7 | require('babel-register')({ 8 | ignore: /node_modules/ 9 | }) 10 | 11 | // Attach Chai APIs to global scope 12 | const { expect, should, assert } = require('chai') 13 | global.expect = expect 14 | global.should = should 15 | global.assert = assert 16 | 17 | // Require all JS files in `./specs` for Mocha to consume 18 | require('require-dir')('./specs') 19 | -------------------------------------------------------------------------------- /test/e2e/specs/Launch.spec.js: -------------------------------------------------------------------------------- 1 | import utils from '../utils' 2 | 3 | describe('Launch', function () { 4 | beforeEach(utils.beforeEach) 5 | afterEach(utils.afterEach) 6 | 7 | it('shows the proper application title', function () { 8 | return this.app.client.getTitle() 9 | .then(title => { 10 | expect(title).to.equal('vue-twitter-client-app') 11 | }) 12 | }) 13 | }) 14 | -------------------------------------------------------------------------------- /test/e2e/utils.js: -------------------------------------------------------------------------------- 1 | import electron from 'electron' 2 | import { Application } from 'spectron' 3 | 4 | export default { 5 | afterEach () { 6 | this.timeout(10000) 7 | 8 | if (this.app && this.app.isRunning()) { 9 | return this.app.stop() 10 | } 11 | }, 12 | beforeEach () { 13 | this.timeout(10000) 14 | this.app = new Application({ 15 | path: electron, 16 | args: ['app'], 17 | startTimeout: 10000, 18 | waitTimeout: 10000 19 | }) 20 | 21 | return this.app.start() 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /test/unit/index.js: -------------------------------------------------------------------------------- 1 | // require all test files (files that ends with .spec.js) 2 | const testsContext = require.context('./specs', true, /\.spec$/) 3 | testsContext.keys().forEach(testsContext) 4 | 5 | // require all src files except main.js for coverage. 6 | // you can also change this to match only the subset of files that 7 | // you want coverage for. 8 | const srcContext = require.context('../../app/src/renderer', true, /^\.\/(?!main(\.js)?$)/) 9 | srcContext.keys().forEach(srcContext) 10 | -------------------------------------------------------------------------------- /test/unit/karma.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | const path = require('path') 4 | const merge = require('webpack-merge') 5 | const webpack = require('webpack') 6 | 7 | const baseConfig = require('../../webpack.renderer.config') 8 | const projectRoot = path.resolve(__dirname, '../../app') 9 | 10 | let webpackConfig = merge(baseConfig, { 11 | devtool: '#inline-source-map', 12 | plugins: [ 13 | new webpack.DefinePlugin({ 14 | 'process.env.NODE_ENV': '"testing"' 15 | }) 16 | ] 17 | }) 18 | 19 | // don't treat dependencies as externals 20 | delete webpackConfig.entry 21 | delete webpackConfig.externals 22 | delete webpackConfig.output.libraryTarget 23 | 24 | // only apply babel for test files when using isparta 25 | webpackConfig.module.rules.some(rule => { 26 | if (rule.use === 'babel-loader') { 27 | rule.include.push(path.resolve(projectRoot, '../test/unit')) 28 | return true 29 | } 30 | }) 31 | 32 | // apply vue option to apply isparta-loader on js 33 | webpackConfig.module.rules 34 | .find(rule => rule.use.loader === 'vue-loader').use.options.loaders.js = 'babel-loader' 35 | 36 | module.exports = config => { 37 | config.set({ 38 | browsers: ['visibleElectron'], 39 | client: { 40 | useIframe: false 41 | }, 42 | coverageReporter: { 43 | dir: './coverage', 44 | reporters: [ 45 | { type: 'lcov', subdir: '.' }, 46 | { type: 'text-summary' } 47 | ] 48 | }, 49 | customLaunchers: { 50 | 'visibleElectron': { 51 | base: 'Electron', 52 | flags: ['--show'] 53 | } 54 | }, 55 | frameworks: ['mocha', 'chai'], 56 | files: ['./index.js'], 57 | preprocessors: { 58 | './index.js': ['webpack', 'sourcemap'] 59 | }, 60 | reporters: ['spec', 'coverage'], 61 | singleRun: true, 62 | webpack: webpackConfig, 63 | webpackMiddleware: { 64 | noInfo: true 65 | } 66 | }) 67 | } 68 | -------------------------------------------------------------------------------- /test/unit/specs/LandingPageView.spec.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import LandingPageView from 'renderer/components/LandingPageView' 3 | 4 | describe('LandingPageView.vue', () => { 5 | it('should render correct contents', () => { 6 | const vm = new Vue({ 7 | el: document.createElement('div'), 8 | render: h => h(LandingPageView) 9 | }).$mount() 10 | 11 | expect(vm.$el.querySelector('h1').textContent).to.contain('Welcome.') 12 | }) 13 | }) 14 | -------------------------------------------------------------------------------- /webpack.main.config.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | process.env.BABEL_ENV = 'main' 4 | 5 | const path = require('path') 6 | const pkg = require('./app/package.json') 7 | const webpack = require('webpack') 8 | 9 | let mainConfig = { 10 | entry: { 11 | main: path.join(__dirname, 'app/src/main/index.js') 12 | }, 13 | externals: Object.keys(pkg.dependencies || {}), 14 | module: { 15 | rules: [ 16 | { 17 | test: /\.js$/, 18 | loader: 'babel-loader', 19 | exclude: /node_modules/ 20 | }, 21 | { 22 | test: /\.json$/, 23 | loader: 'json-loader' 24 | }, 25 | { 26 | test: /\.node$/, 27 | loader: 'node-loader' 28 | } 29 | ] 30 | }, 31 | node: { 32 | __dirname: false, 33 | __filename: false 34 | }, 35 | output: { 36 | filename: '[name].js', 37 | libraryTarget: 'commonjs2', 38 | path: path.join(__dirname, 'app/dist') 39 | }, 40 | plugins: [ 41 | new webpack.NoEmitOnErrorsPlugin(), 42 | new webpack.DefinePlugin({ 43 | 'process.env.NODE_ENV': '"production"' 44 | }), 45 | new webpack.optimize.UglifyJsPlugin({ 46 | compress: { 47 | warnings: false 48 | } 49 | }) 50 | ], 51 | resolve: { 52 | extensions: ['.js', '.json', '.node'], 53 | modules: [ 54 | path.join(__dirname, 'app/node_modules') 55 | ] 56 | }, 57 | target: 'electron-main' 58 | } 59 | 60 | module.exports = mainConfig 61 | -------------------------------------------------------------------------------- /webpack.renderer.config.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | process.env.BABEL_ENV = 'renderer' 4 | 5 | const path = require('path') 6 | const pkg = require('./app/package.json') 7 | const settings = require('./config.js') 8 | const webpack = require('webpack') 9 | 10 | const ExtractTextPlugin = require('extract-text-webpack-plugin') 11 | const HtmlWebpackPlugin = require('html-webpack-plugin') 12 | 13 | let rendererConfig = { 14 | devtool: '#eval-source-map', 15 | devServer: { overlay: true }, 16 | entry: { 17 | renderer: path.join(__dirname, 'app/src/renderer/main.js') 18 | }, 19 | externals: Object.keys(pkg.dependencies || {}), 20 | module: { 21 | rules: [ 22 | { 23 | test: /\.css$/, 24 | use: ExtractTextPlugin.extract({ 25 | fallback: 'style-loader', 26 | use: 'css-loader' 27 | }) 28 | }, 29 | { 30 | test: /\.html$/, 31 | use: 'vue-html-loader' 32 | }, 33 | { 34 | test: /\.js$/, 35 | use: 'babel-loader', 36 | include: [ path.resolve(__dirname, 'app/src/renderer') ], 37 | exclude: /node_modules/ 38 | }, 39 | { 40 | test: /\.json$/, 41 | use: 'json-loader' 42 | }, 43 | { 44 | test: /\.node$/, 45 | use: 'node-loader' 46 | }, 47 | { 48 | test: /\.vue$/, 49 | use: { 50 | loader: 'vue-loader', 51 | options: { 52 | loaders: { 53 | sass: 'vue-style-loader!css-loader!sass-loader?indentedSyntax=1', 54 | scss: 'vue-style-loader!css-loader!sass-loader' 55 | } 56 | } 57 | } 58 | }, 59 | { 60 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, 61 | use: { 62 | loader: 'url-loader', 63 | query: { 64 | limit: 10000, 65 | name: 'imgs/[name].[ext]' 66 | } 67 | } 68 | }, 69 | { 70 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, 71 | use: { 72 | loader: 'url-loader', 73 | query: { 74 | limit: 10000, 75 | name: 'fonts/[name].[ext]' 76 | } 77 | } 78 | } 79 | ] 80 | }, 81 | plugins: [ 82 | new ExtractTextPlugin('styles.css'), 83 | new HtmlWebpackPlugin({ 84 | filename: 'index.html', 85 | template: './app/index.ejs', 86 | appModules: process.env.NODE_ENV !== 'production' 87 | ? path.resolve(__dirname, 'app/node_modules') 88 | : false 89 | }), 90 | new webpack.NoEmitOnErrorsPlugin() 91 | ], 92 | output: { 93 | filename: '[name].js', 94 | libraryTarget: 'commonjs2', 95 | path: path.join(__dirname, 'app/dist') 96 | }, 97 | resolve: { 98 | alias: { 99 | 'components': path.join(__dirname, 'app/src/renderer/components'), 100 | '@': path.join(__dirname, 'app/src/renderer') 101 | }, 102 | extensions: ['.js', '.vue', '.json', '.css', '.node'], 103 | modules: [ 104 | path.join(__dirname, 'app/node_modules'), 105 | path.join(__dirname, 'node_modules') 106 | ] 107 | }, 108 | target: 'electron-renderer' 109 | } 110 | 111 | if (process.env.NODE_ENV !== 'production') { 112 | /** 113 | * Apply ESLint 114 | */ 115 | if (settings.eslint) { 116 | rendererConfig.module.rules.push( 117 | { 118 | test: /\.(js|vue)$/, 119 | enforce: 'pre', 120 | exclude: /node_modules/, 121 | use: { 122 | loader: 'eslint-loader', 123 | options: { 124 | formatter: require('eslint-friendly-formatter') 125 | } 126 | } 127 | } 128 | ) 129 | } 130 | } 131 | 132 | /** 133 | * Adjust rendererConfig for production settings 134 | */ 135 | if (process.env.NODE_ENV === 'production') { 136 | rendererConfig.devtool = '' 137 | 138 | rendererConfig.plugins.push( 139 | new webpack.DefinePlugin({ 140 | 'process.env.NODE_ENV': '"production"' 141 | }), 142 | new webpack.LoaderOptionsPlugin({ 143 | minimize: true 144 | }), 145 | new webpack.optimize.UglifyJsPlugin({ 146 | compress: { 147 | warnings: false 148 | } 149 | }) 150 | ) 151 | } 152 | 153 | module.exports = rendererConfig 154 | --------------------------------------------------------------------------------