├── .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 | 
116 |
117 | 执行完成后会有`installer`目录,双击Setup.exe安装即可
118 |
119 | 
120 |
121 | ### 效果预览
122 |
123 | 
124 |
125 | 
126 |
127 | 
128 |
129 | 
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 |
2 |
3 |
4 |
5 |
6 |
7 |
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 |
2 |
3 |
4 |
5 |
10 |
11 |
12 |
13 |
14 |
15 |
20 |
21 |
22 |
23 |
24 |
53 |
54 |
60 |
61 |
67 |
68 |
69 |
70 | ![icon]()
71 | {{item.name}}
72 |
73 |
74 | |
75 |
76 |
77 | {{new Date(item.ctime).toLocaleString()}}
78 |
79 | |
80 |
81 |
84 | |
85 |
86 |
87 | {{ item.size === 0 ? '' : formatMem(item.size) }}
88 |
89 | |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
104 |
105 |
106 | 文件名:
107 | {{fileDetail.name}}
108 |
109 |
110 | 文件类型:
111 | {{fileDetail.type}}
112 |
113 |
114 | 文件大小:
115 | {{this.toMem(fileDetail.size) || '0Kb'}}
116 |
117 |
118 | 文件创建时间:
119 | {{new Date(fileDetail.birthtime).toLocaleString()}}
120 |
121 |
122 | 文件所在目录:
123 | {{fileDetail.path}}
124 |
125 |
126 | 文件设备ID号:
127 | {{fileDetail.dev}}
128 |
129 |
130 | 文件的权限标志:
131 | {{fileDetail.mode}}
132 |
133 |
134 | 文件硬连接数量:
135 | {{fileDetail.nlink}}
136 |
137 |
138 | 文件Indoe节点号:
139 | {{fileDetail.ino}}
140 |
141 |
142 | 文件所有者用户ID:
143 | {{fileDetail.uid}}
144 |
145 |
146 | 文件所有者用户组ID:
147 | {{fileDetail.gid}}
148 |
149 |
150 |
151 |
152 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
522 |
591 |
--------------------------------------------------------------------------------
/app/src/renderer/views/index/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
10 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
33 |
34 |
37 |
38 |
39 |
40 |
41 |
140 |
176 |
--------------------------------------------------------------------------------
/app/src/renderer/views/login.vue:
--------------------------------------------------------------------------------
1 |
2 |
44 |
45 |
46 |
118 |
119 |
170 |
--------------------------------------------------------------------------------
/app/src/renderer/views/siderBar/leftBar.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 |
9 | 操作系统:{{os}}
10 | 操作系统内核:{{kernel}}
11 | 平台:{{platform}}
12 | 用户名:{{username}}
13 |
14 |
15 |
16 |
17 |
21 |
22 | CPU型号:{{model}}
23 | 核心数:{{NumberOfCores}}
24 | 频率:{{CurrentClockSpeed}} MHZ
25 | L2缓存:{{L2CacheSize || 0}} KB
26 | L3缓存:{{L3CacheSize || 0}} KB
27 |
28 |
29 |
30 |
31 |
35 |
36 | 已用内存:{{usedmem | toMem}}
37 | 空闲内存:{{freemem | toMem}}
38 | 总内存:{{totalmem | toMem}}
39 |
40 |
41 |
42 |
43 |
47 |
57 |
58 |
59 |
60 |
127 |
160 |
--------------------------------------------------------------------------------
/app/src/renderer/views/siderBar/rightBar.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
![]()
6 |
{{data.VolumeName}}
7 |
({{data.Caption}})
8 |
9 |
10 |
11 |
{{data.FreeSpace | toMem}}
12 |
13 |
{{data.Size | toMem}}
14 |
15 |
16 |
17 |
{{data.FileSystem}}
18 |
19 |
{{data.Description}}
20 |
21 |
{{data.VolumeSerialNumber}}
22 |
23 |
24 |
25 |
26 |
45 |
85 |
--------------------------------------------------------------------------------
/app/src/renderer/views/siderBar/rightDisk.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
![]()
6 |
{{diskDetails.Caption}}
7 |
{{diskDetails.Manufacturer}}
8 |
9 |
10 |
11 |
{{diskDetails.InterfaceType}}
12 |
13 |
{{diskDetails.Partitions}}
14 |
15 |
{{diskDetails.SerialNumber}}
16 |
17 |
{{diskDetails.TotalCylinders}}
18 |
19 |
{{diskDetails.TotalHeads}}
20 |
21 |
{{diskDetails.TotalSectors}}
22 |
23 |
{{diskDetails.TotalTracks}}
24 |
25 |
{{diskDetails.TracksPerCylinder}}
26 |
27 |
28 |
29 |
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 |
--------------------------------------------------------------------------------