wanghongzhi 1 éve
szülő
commit
227133f00e
100 módosított fájl, 20112 hozzáadás és 0 törlés
  1. 12 0
      .editorconfig
  2. 18 0
      .env.development
  3. 8 0
      .env.production
  4. 1 0
      .eslintignore
  5. 57 0
      .gitignore
  6. 21 0
      LICENSE
  7. 5 0
      babel.config.js
  8. 17 0
      jsconfig.json
  9. 75 0
      package.json
  10. 11 0
      public/config.js
  11. BIN
      public/img/404.png
  12. BIN
      public/img/avatar.jpg
  13. BIN
      public/img/background.png
  14. BIN
      public/img/header_bg.png
  15. BIN
      public/img/login_header.png
  16. BIN
      public/img/login_logo.png
  17. BIN
      public/img/menu_logo.png
  18. 118 0
      public/index.html
  19. 419 0
      public/tinymce/langs/zh_CN.js
  20. 66 0
      public/tinymce/skins/content/dark/content.css
  21. 1 0
      public/tinymce/skins/content/dark/content.min.css
  22. 61 0
      public/tinymce/skins/content/default/content.css
  23. 1 0
      public/tinymce/skins/content/default/content.min.css
  24. 66 0
      public/tinymce/skins/content/document/content.css
  25. 1 0
      public/tinymce/skins/content/document/content.min.css
  26. 66 0
      public/tinymce/skins/content/tinymce-5-dark/content.css
  27. 1 0
      public/tinymce/skins/content/tinymce-5-dark/content.min.css
  28. 61 0
      public/tinymce/skins/content/tinymce-5/content.css
  29. 1 0
      public/tinymce/skins/content/tinymce-5/content.min.css
  30. 62 0
      public/tinymce/skins/content/writer/content.css
  31. 1 0
      public/tinymce/skins/content/writer/content.min.css
  32. 711 0
      public/tinymce/skins/ui/oxide-dark/content.css
  33. 724 0
      public/tinymce/skins/ui/oxide-dark/content.inline.css
  34. 1 0
      public/tinymce/skins/ui/oxide-dark/content.inline.min.css
  35. 1 0
      public/tinymce/skins/ui/oxide-dark/content.min.css
  36. 3041 0
      public/tinymce/skins/ui/oxide-dark/skin.css
  37. 1 0
      public/tinymce/skins/ui/oxide-dark/skin.min.css
  38. 30 0
      public/tinymce/skins/ui/oxide-dark/skin.shadowdom.css
  39. 1 0
      public/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css
  40. 730 0
      public/tinymce/skins/ui/oxide/content.css
  41. 724 0
      public/tinymce/skins/ui/oxide/content.inline.css
  42. 1 0
      public/tinymce/skins/ui/oxide/content.inline.min.css
  43. 1 0
      public/tinymce/skins/ui/oxide/content.min.css
  44. 3038 0
      public/tinymce/skins/ui/oxide/skin.css
  45. 1 0
      public/tinymce/skins/ui/oxide/skin.min.css
  46. 30 0
      public/tinymce/skins/ui/oxide/skin.shadowdom.css
  47. 1 0
      public/tinymce/skins/ui/oxide/skin.shadowdom.min.css
  48. 711 0
      public/tinymce/skins/ui/tinymce-5-dark/content.css
  49. 724 0
      public/tinymce/skins/ui/tinymce-5-dark/content.inline.css
  50. 1 0
      public/tinymce/skins/ui/tinymce-5-dark/content.inline.min.css
  51. 1 0
      public/tinymce/skins/ui/tinymce-5-dark/content.min.css
  52. 3119 0
      public/tinymce/skins/ui/tinymce-5-dark/skin.css
  53. 1 0
      public/tinymce/skins/ui/tinymce-5-dark/skin.min.css
  54. 30 0
      public/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.css
  55. 1 0
      public/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.min.css
  56. 730 0
      public/tinymce/skins/ui/tinymce-5/content.css
  57. 724 0
      public/tinymce/skins/ui/tinymce-5/content.inline.css
  58. 1 0
      public/tinymce/skins/ui/tinymce-5/content.inline.min.css
  59. 1 0
      public/tinymce/skins/ui/tinymce-5/content.min.css
  60. 3119 0
      public/tinymce/skins/ui/tinymce-5/skin.css
  61. 1 0
      public/tinymce/skins/ui/tinymce-5/skin.min.css
  62. 30 0
      public/tinymce/skins/ui/tinymce-5/skin.shadowdom.css
  63. 1 0
      public/tinymce/skins/ui/tinymce-5/skin.shadowdom.min.css
  64. 62 0
      src/App.vue
  65. 11 0
      src/api/index.js
  66. 61 0
      src/api/model/auth.js
  67. 20 0
      src/api/model/common.js
  68. 16 0
      src/api/model/costServer.js
  69. 12 0
      src/api/model/message.js
  70. 168 0
      src/api/model/procurement.js
  71. 99 0
      src/api/model/supplier.js
  72. 201 0
      src/api/model/system.js
  73. 3 0
      src/assets/icons/Add.vue
  74. 3 0
      src/assets/icons/Amount.vue
  75. 3 0
      src/assets/icons/Bar.vue
  76. 3 0
      src/assets/icons/BarCircle.vue
  77. 3 0
      src/assets/icons/BarSquare.vue
  78. 3 0
      src/assets/icons/BidAmount.vue
  79. 3 0
      src/assets/icons/BudgetAmount.vue
  80. 3 0
      src/assets/icons/BugFill.vue
  81. 3 0
      src/assets/icons/BugLine.vue
  82. 3 0
      src/assets/icons/Code.vue
  83. 3 0
      src/assets/icons/ContractAmount.vue
  84. 3 0
      src/assets/icons/Dictionary.vue
  85. 3 0
      src/assets/icons/Download.vue
  86. 3 0
      src/assets/icons/FileExcel.vue
  87. 3 0
      src/assets/icons/FilePdf.vue
  88. 3 0
      src/assets/icons/FilePpt.vue
  89. 3 0
      src/assets/icons/FileWord.vue
  90. 3 0
      src/assets/icons/Folder.vue
  91. 3 0
      src/assets/icons/Home.vue
  92. 3 0
      src/assets/icons/LargeScreen.vue
  93. 3 0
      src/assets/icons/Ledger.vue
  94. 3 0
      src/assets/icons/Logout.vue
  95. 3 0
      src/assets/icons/Organization.vue
  96. 3 0
      src/assets/icons/Password.vue
  97. 3 0
      src/assets/icons/Pie.vue
  98. 3 0
      src/assets/icons/PieCircle.vue
  99. 3 0
      src/assets/icons/PieList.vue
  100. 0 0
      src/assets/icons/PieMonitor.vue

+ 12 - 0
.editorconfig

@@ -0,0 +1,12 @@
+root = true
+
+[*]
+charset = utf-8
+end_of_line = lf
+indent_size = 4
+indent_style = tab
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.md]
+trim_trailing_whitespace = false

+ 18 - 0
.env.development

@@ -0,0 +1,18 @@
+# 本地环境
+NODE_ENV = development
+
+# 标题
+VUE_APP_TITLE = 城发集团招采管理平台
+
+# 接口地址
+# VUE_APP_API_BASEURL = http://www.qdeasydo.com
+# VUE_APP_API_BASEURL = http://192.168.101.93:8810
+
+VUE_APP_API_BASEURL = http://172.16.1.150:8810
+# VUE_APP_API_BASEURL = http://172.16.1.132:8800
+
+# 本地端口
+VUE_APP_PORT = 7800
+
+# 是否开启代理
+VUE_APP_PROXY = true

+ 8 - 0
.env.production

@@ -0,0 +1,8 @@
+# 生产环境
+NODE_ENV = production
+
+# 标题
+VUE_APP_TITLE = 城发集团招采管理平台
+
+# 接口地址
+VUE_APP_API_BASEURL =

+ 1 - 0
.eslintignore

@@ -0,0 +1 @@
+src/assets/js

+ 57 - 0
.gitignore

@@ -0,0 +1,57 @@
+
+######################################################################
+# custom 
+crm-admin.jar
+
+######################################################################
+# Build Tools
+
+.gradle
+/build/
+!gradle/wrapper/gradle-wrapper.jar
+
+target/
+!.mvn/wrapper/maven-wrapper.jar
+
+######################################################################
+# IDE
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+nbproject/private/
+build/*
+nbbuild/
+dist/
+nbdist/
+.nb-gradle/
+
+######################################################################
+# Others
+*.log
+*.xml.versionsBackup
+*.zip
+
+!*/build/*.java
+!*/build/*.html
+!*/build/*.xml
+
+node_modules
+.DS_Store
+.java-version
+package-lock.json
+logs
+
+.vscode/

+ 21 - 0
LICENSE

@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2021 sakuya
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

+ 5 - 0
babel.config.js

@@ -0,0 +1,5 @@
+module.exports = {
+  presets: [
+    "@vue/cli-plugin-babel/preset"
+  ]
+}

+ 17 - 0
jsconfig.json

@@ -0,0 +1,17 @@
+{
+	"compilerOptions": {
+		"target": "es5",
+		"module": "esnext",
+		"baseUrl": "./",
+		"moduleResolution": "node",
+		"paths": {
+			"@/*": ["src/*"]
+		},
+		"lib": [
+			"esnext",
+			"dom",
+			"dom.iterable",
+			"scripthost"
+		]
+	}
+}

+ 75 - 0
package.json

@@ -0,0 +1,75 @@
+{
+	"name": "zcxt",
+	"version": "1.6.9",
+	"private": true,
+	"scripts": {
+		"dev": "vue-cli-service serve",
+		"build": "vue-cli-service build --report",
+		"lint": "vue-cli-service lint"
+	},
+	"dependencies": {
+		"@element-plus/icons-vue": "2.0.10",
+		"@tinymce/tinymce-vue": "5.0.0",
+		"axios": "1.3.4",
+		"codemirror": "5.65.5",
+		"core-js": "3.29.0",
+		"cropperjs": "1.5.13",
+		"crypto-js": "4.1.1",
+		"echarts": "5.4.1",
+		"element-plus": "^2.6.0",
+		"jsencrypt": "^3.0.0-rc.1",
+		"moment": "^2.29.4",
+		"nprogress": "0.2.0",
+		"qrcodejs2": "0.0.2",
+		"sortablejs": "1.15.0",
+		"tinymce": "6.3.2",
+		"vue": "3.2.47",
+		"vue-i18n": "9.2.2",
+		"vue-router": "4.1.6",
+		"vuedraggable": "4.0.3",
+		"vuex": "4.1.0",
+		"xgplayer": "2.32.2",
+		"xgplayer-hls": "2.5.2",
+		"xlsx-js-style": "^1.2.0"
+	},
+	"devDependencies": {
+		"@babel/core": "^7.24.4",
+		"@babel/eslint-parser": "7.19.1",
+		"@vue/cli-plugin-babel": "5.0.8",
+		"@vue/cli-plugin-eslint": "5.0.8",
+		"@vue/cli-service": "5.0.8",
+		"eslint": "8.35.0",
+		"eslint-plugin-vue": "9.9.0",
+		"sass": "1.58.3",
+		"sass-loader": "10.1.1"
+	},
+	"eslintConfig": {
+		"root": true,
+		"env": {
+			"node": true
+		},
+		"globals": {
+			"APP_CONFIG": true
+		},
+		"extends": [
+			"plugin:vue/vue3-essential",
+			"eslint:recommended"
+		],
+		"parserOptions": {
+			"parser": "@babel/eslint-parser"
+		},
+		"rules": {
+			"indent": 0,
+			"no-tabs": 0,
+			"no-mixed-spaces-and-tabs": 0,
+			"vue/no-unused-components": 0,
+			"vue/multi-word-component-names": 0
+		}
+	},
+	"browserslist": [
+		"> 1%",
+		"last 2 versions",
+		"not dead",
+		"not ie 11"
+	]
+}

+ 11 - 0
public/config.js

@@ -0,0 +1,11 @@
+
+// 此文件非必要,在生产环境下此文件配置可覆盖运行配置,开发环境下不起效
+// 详情见 src/config/index.js
+
+const APP_CONFIG = {
+	//标题
+	//APP_NAME: "SCUI",
+
+	//接口地址,如遇跨域需使用nginx代理
+	//API_URL: "https://www.fastmock.site/mock/5039c4361c39a7e3252c5b55971f1bd3/api"
+}

BIN
public/img/404.png


BIN
public/img/avatar.jpg


BIN
public/img/background.png


BIN
public/img/header_bg.png


BIN
public/img/login_header.png


BIN
public/img/login_logo.png


BIN
public/img/menu_logo.png


+ 118 - 0
public/index.html

@@ -0,0 +1,118 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8">
+		<meta http-equiv="X-UA-Compatible" content="IE=edge">
+		<meta name="viewport" content="width=device-width,initial-scale=1.0">
+		<link rel="icon" href="<%= BASE_URL %>img/login_logo.png">
+		<title><%= VUE_APP_TITLE %></title>
+		<script type="text/javascript">
+			document.write("<script src='config.js?"+new Date().getTime()+"'><\/script>");
+		</script>
+	</head>
+	<body>
+		<noscript>
+			<strong>We're sorry but <%= VUE_APP_TITLE %> doesn't work properly without JavaScript
+				enabled. Please enable it to continue.</strong>
+		</noscript>
+		<script type="text/javascript">
+			var dark = window.localStorage.getItem("APP_DARK");
+			if(dark){
+				document.documentElement.classList.add("dark")
+			}
+		</script>
+		<div id="app" class="aminui">
+			<div class="app-loading">
+				<div class="app-loading__logo">
+					<img src="img/menu_logo.png"/>
+				</div>
+				<div class="app-loading__loader"></div>
+				<div class="app-loading__title"><%= VUE_APP_TITLE %></div>
+			</div>
+			<style>
+				.app-loading {position: absolute;top:0px;left:0px;right:0px;bottom:0px;display: flex;justify-content: center;align-items: center;flex-direction: column;background: #fff;}
+				.app-loading__logo {margin-bottom: 30px;}
+				.app-loading__logo img {width: 90px;vertical-align: bottom;}
+				.app-loading__loader {box-sizing: border-box;width: 35px;height: 35px;border: 5px solid transparent;border-top-color: #000;border-radius: 50%;animation: .5s loader linear infinite;position: relative;}
+				.app-loading__loader:before {box-sizing: border-box;content: "";display: block;width: inherit;height: inherit;position: absolute;top: -5px;left: -5px;border: 5px solid #ccc;border-radius: 50%;opacity: .5;}
+				.app-loading__title {font-size: 24px;color: #333;margin-top: 30px;}
+				.dark .app-loading {background: #222225;}
+				.dark .app-loading__loader {border-top-color: #fff;}
+				.dark .app-loading__title {color: #d0d0d0;}
+				@keyframes loader {
+				    0% {
+				        transform: rotate(0deg);
+				    }
+				    100% {
+				        transform: rotate(360deg);
+				    }
+				}
+			</style>
+		</div>
+		<!-- built files will be auto injected -->
+	</body>
+	<div id="versionCheck" style="display: none;position: absolute;z-index: 99;top:0;left:0;right:0;bottom:0;padding:40px;background:rgba(255,255,255,0.9);color: #333;">
+		<h2 style="line-height: 1;margin: 0;font-size: 24px;">当前使用的浏览器内核版本过低 :(</h2>
+		<p style="line-height: 1;margin: 0;font-size: 14px;margin-top: 20px;opacity: 0.8;">当前版本:<span id="versionCheck-type">--</span> <span id="versionCheck-version">--</span></p>
+		<p style="line-height: 1;margin: 0;font-size: 14px;margin-top: 10px;opacity: 0.8;">最低版本要求:Chrome 71+、Firefox 65+、Safari 12+、Edge 97+。</p>
+		<p style="line-height: 1;margin: 0;font-size: 14px;margin-top: 10px;opacity: 0.8;">请升级浏览器版本,或更换现代浏览器,如果你使用的是双核浏览器,请切换到极速/高速模式。</p>
+	</div>
+	<script type="text/javascript">
+	function getBrowerInfo(){
+		var userAgent = window.navigator.userAgent;
+		var browerInfo = {
+			type: "unknown",
+			version: "unknown",
+			userAgent: userAgent
+		};
+		if(document.documentMode){
+			browerInfo.type = "IE"
+			browerInfo.version = document.documentMode + ""
+		}else if(indexOf(userAgent, "Firefox")){
+			browerInfo.type = "Firefox"
+			browerInfo.version = userAgent.match(/Firefox\/([\d.]+)/)[1]
+		}else if(indexOf(userAgent, "Opera")){
+			browerInfo.type = "Opera"
+			browerInfo.version = userAgent.match(/Opera\/([\d.]+)/)[1]
+		}else if(indexOf(userAgent, "Edg")){
+			browerInfo.type = "Edg"
+			browerInfo.version = userAgent.match(/Edg\/([\d.]+)/)[1]
+		}else if(indexOf(userAgent, "Chrome")){
+			browerInfo.type = "Chrome"
+			browerInfo.version = userAgent.match(/Chrome\/([\d.]+)/)[1]
+		}else if(indexOf(userAgent, "Safari")){
+			browerInfo.type = "Safari"
+			browerInfo.version = userAgent.match(/Safari\/([\d.]+)/)[1]
+		}
+		return browerInfo
+	}
+    function indexOf(userAgent, brower) {
+        return userAgent.indexOf(brower) > -1
+    }
+	function isSatisfyBrower(){
+		var minVer = {
+			"Chrome": 71,
+			"Firefox": 65,
+			"Safari": 12,
+			"Edg": 97,
+			"IE": 999
+		}
+		var browerInfo = getBrowerInfo()
+		var materVer = browerInfo.version.split(".")[0]
+        return materVer >= minVer[browerInfo.type]
+	}
+	if(!isSatisfyBrower()){
+		document.getElementById("versionCheck").style.display = "block";
+		document.getElementById("versionCheck-type").innerHTML = getBrowerInfo().type;
+		document.getElementById("versionCheck-version").innerHTML = getBrowerInfo().version;
+	}
+
+	// 组件iframe 不显示NProgress
+	if (window.location.href.includes("process-form-view")) {
+		document.getElementsByClassName("app-loading__logo")[0].style.display = "none";
+		document.getElementsByClassName("app-loading__title")[0].style.display = "none";
+		document.getElementsByClassName("app-loading__title")[0].style.display = "none";
+		document.getElementById("app").style.backgroundColor = "#fff"
+	}
+	</script>
+</html>

+ 419 - 0
public/tinymce/langs/zh_CN.js

@@ -0,0 +1,419 @@
+tinymce.addI18n('zh_CN',{
+"Redo": "\u91cd\u505a",
+"Undo": "\u64a4\u9500",
+"Cut": "\u526a\u5207",
+"Copy": "\u590d\u5236",
+"Paste": "\u7c98\u8d34",
+"Select all": "\u5168\u9009",
+"New document": "\u65b0\u6587\u4ef6",
+"Ok": "\u786e\u5b9a",
+"Cancel": "\u53d6\u6d88",
+"Visual aids": "\u7f51\u683c\u7ebf",
+"Bold": "\u7c97\u4f53",
+"Italic": "\u659c\u4f53",
+"Underline": "\u4e0b\u5212\u7ebf",
+"Strikethrough": "\u5220\u9664\u7ebf",
+"Superscript": "\u4e0a\u6807",
+"Subscript": "\u4e0b\u6807",
+"Clear formatting": "\u6e05\u9664\u683c\u5f0f",
+"Align left": "\u5de6\u8fb9\u5bf9\u9f50",
+"Align center": "\u4e2d\u95f4\u5bf9\u9f50",
+"Align right": "\u53f3\u8fb9\u5bf9\u9f50",
+"Justify": "\u4e24\u7aef\u5bf9\u9f50",
+"Bullet list": "\u9879\u76ee\u7b26\u53f7",
+"Numbered list": "\u7f16\u53f7\u5217\u8868",
+"Decrease indent": "\u51cf\u5c11\u7f29\u8fdb",
+"Increase indent": "\u589e\u52a0\u7f29\u8fdb",
+"Close": "\u5173\u95ed",
+"Formats": "\u683c\u5f0f",
+"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u4f60\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u6253\u5f00\u526a\u8d34\u677f\uff0c\u8bf7\u4f7f\u7528Ctrl+X\/C\/V\u7b49\u5feb\u6377\u952e\u3002",
+"Headers": "\u6807\u9898",
+"Header 1": "\u6807\u98981",
+"Header 2": "\u6807\u98982",
+"Header 3": "\u6807\u98983",
+"Header 4": "\u6807\u98984",
+"Header 5": "\u6807\u98985",
+"Header 6": "\u6807\u98986",
+"Headings": "\u6807\u9898",
+"Heading 1": "\u6807\u98981",
+"Heading 2": "\u6807\u98982",
+"Heading 3": "\u6807\u98983",
+"Heading 4": "\u6807\u98984",
+"Heading 5": "\u6807\u98985",
+"Heading 6": "\u6807\u98986",
+"Preformatted": "\u9884\u5148\u683c\u5f0f\u5316\u7684",
+"Div": "Div",
+"Pre": "Pre",
+"Code": "\u4ee3\u7801",
+"Paragraph": "\u6bb5\u843d",
+"Blockquote": "\u5f15\u6587\u533a\u5757",
+"Inline": "\u6587\u672c",
+"Blocks": "\u57fa\u5757",
+"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u5f53\u524d\u4e3a\u7eaf\u6587\u672c\u7c98\u8d34\u6a21\u5f0f\uff0c\u518d\u6b21\u70b9\u51fb\u53ef\u4ee5\u56de\u5230\u666e\u901a\u7c98\u8d34\u6a21\u5f0f\u3002",
+"Fonts": "\u5b57\u4f53",
+"Font Sizes": "\u5b57\u53f7",
+"Class": "\u7c7b\u578b",
+"Browse for an image": "\u6d4f\u89c8\u56fe\u50cf",
+"OR": "\u6216",
+"Drop an image here": "\u62d6\u653e\u4e00\u5f20\u56fe\u50cf\u81f3\u6b64",
+"Upload": "\u4e0a\u4f20",
+"Block": "\u5757",
+"Align": "\u5bf9\u9f50",
+"Default": "\u9ed8\u8ba4",
+"Circle": "\u7a7a\u5fc3\u5706",
+"Disc": "\u5b9e\u5fc3\u5706",
+"Square": "\u65b9\u5757",
+"Lower Alpha": "\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd",
+"Lower Greek": "\u5c0f\u5199\u5e0c\u814a\u5b57\u6bcd",
+"Lower Roman": "\u5c0f\u5199\u7f57\u9a6c\u5b57\u6bcd",
+"Upper Alpha": "\u5927\u5199\u82f1\u6587\u5b57\u6bcd",
+"Upper Roman": "\u5927\u5199\u7f57\u9a6c\u5b57\u6bcd",
+"Anchor...": "\u951a\u70b9...",
+"Name": "\u540d\u79f0",
+"Id": "\u6807\u8bc6\u7b26",
+"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u6807\u8bc6\u7b26\u5e94\u8be5\u4ee5\u5b57\u6bcd\u5f00\u5934\uff0c\u540e\u8ddf\u5b57\u6bcd\u3001\u6570\u5b57\u3001\u7834\u6298\u53f7\u3001\u70b9\u3001\u5192\u53f7\u6216\u4e0b\u5212\u7ebf\u3002",
+"You have unsaved changes are you sure you want to navigate away?": "\u4f60\u8fd8\u6709\u6587\u6863\u5c1a\u672a\u4fdd\u5b58\uff0c\u786e\u5b9a\u8981\u79bb\u5f00\uff1f",
+"Restore last draft": "\u6062\u590d\u4e0a\u6b21\u7684\u8349\u7a3f",
+"Special character...": "\u7279\u6b8a\u5b57\u7b26...",
+"Source code": "\u6e90\u4ee3\u7801",
+"Insert\/Edit code sample": "\u63d2\u5165\/\u7f16\u8f91\u4ee3\u7801\u793a\u4f8b",
+"Language": "\u8bed\u8a00",
+"Code sample...": "\u793a\u4f8b\u4ee3\u7801...",
+"Color Picker": "\u9009\u8272\u5668",
+"R": "R",
+"G": "G",
+"B": "B",
+"Left to right": "\u4ece\u5de6\u5230\u53f3",
+"Right to left": "\u4ece\u53f3\u5230\u5de6",
+"Emoticons...": "\u8868\u60c5\u7b26\u53f7...",
+"Metadata and Document Properties": "\u5143\u6570\u636e\u548c\u6587\u6863\u5c5e\u6027",
+"Title": "\u6807\u9898",
+"Keywords": "\u5173\u952e\u8bcd",
+"Description": "\u63cf\u8ff0",
+"Robots": "\u673a\u5668\u4eba",
+"Author": "\u4f5c\u8005",
+"Encoding": "\u7f16\u7801",
+"Fullscreen": "\u5168\u5c4f",
+"Action": "\u64cd\u4f5c",
+"Shortcut": "\u5feb\u6377\u952e",
+"Help": "\u5e2e\u52a9",
+"Address": "\u5730\u5740",
+"Focus to menubar": "\u79fb\u52a8\u7126\u70b9\u5230\u83dc\u5355\u680f",
+"Focus to toolbar": "\u79fb\u52a8\u7126\u70b9\u5230\u5de5\u5177\u680f",
+"Focus to element path": "\u79fb\u52a8\u7126\u70b9\u5230\u5143\u7d20\u8def\u5f84",
+"Focus to contextual toolbar": "\u79fb\u52a8\u7126\u70b9\u5230\u4e0a\u4e0b\u6587\u83dc\u5355",
+"Insert link (if link plugin activated)": "\u63d2\u5165\u94fe\u63a5 (\u5982\u679c\u94fe\u63a5\u63d2\u4ef6\u5df2\u6fc0\u6d3b)",
+"Save (if save plugin activated)": "\u4fdd\u5b58(\u5982\u679c\u4fdd\u5b58\u63d2\u4ef6\u5df2\u6fc0\u6d3b)",
+"Find (if searchreplace plugin activated)": "\u67e5\u627e(\u5982\u679c\u67e5\u627e\u66ff\u6362\u63d2\u4ef6\u5df2\u6fc0\u6d3b)",
+"Plugins installed ({0}):": "\u5df2\u5b89\u88c5\u63d2\u4ef6 ({0}):",
+"Premium plugins:": "\u4f18\u79c0\u63d2\u4ef6\uff1a",
+"Learn more...": "\u4e86\u89e3\u66f4\u591a...",
+"You are using {0}": "\u4f60\u6b63\u5728\u4f7f\u7528 {0}",
+"Plugins": "\u63d2\u4ef6",
+"Handy Shortcuts": "\u5feb\u6377\u952e",
+"Horizontal line": "\u6c34\u5e73\u5206\u5272\u7ebf",
+"Insert\/edit image": "\u63d2\u5165\/\u7f16\u8f91\u56fe\u7247",
+"Image description": "\u56fe\u7247\u63cf\u8ff0",
+"Source": "\u5730\u5740",
+"Dimensions": "\u5927\u5c0f",
+"Constrain proportions": "\u4fdd\u6301\u7eb5\u6a2a\u6bd4",
+"General": "\u666e\u901a",
+"Advanced": "\u9ad8\u7ea7",
+"Style": "\u6837\u5f0f",
+"Vertical space": "\u5782\u76f4\u8fb9\u8ddd",
+"Horizontal space": "\u6c34\u5e73\u8fb9\u8ddd",
+"Border": "\u8fb9\u6846",
+"Insert image": "\u63d2\u5165\u56fe\u7247",
+"Image...": "\u56fe\u7247...",
+"Image list": "\u56fe\u7247\u5217\u8868",
+"Rotate counterclockwise": "\u9006\u65f6\u9488\u65cb\u8f6c",
+"Rotate clockwise": "\u987a\u65f6\u9488\u65cb\u8f6c",
+"Flip vertically": "\u5782\u76f4\u7ffb\u8f6c",
+"Flip horizontally": "\u6c34\u5e73\u7ffb\u8f6c",
+"Edit image": "\u7f16\u8f91\u56fe\u7247",
+"Image options": "\u56fe\u7247\u9009\u9879",
+"Zoom in": "\u653e\u5927",
+"Zoom out": "\u7f29\u5c0f",
+"Crop": "\u88c1\u526a",
+"Resize": "\u8c03\u6574\u5927\u5c0f",
+"Orientation": "\u65b9\u5411",
+"Brightness": "\u4eae\u5ea6",
+"Sharpen": "\u9510\u5316",
+"Contrast": "\u5bf9\u6bd4\u5ea6",
+"Color levels": "\u989c\u8272\u5c42\u6b21",
+"Gamma": "\u4f3d\u9a6c\u503c",
+"Invert": "\u53cd\u8f6c",
+"Apply": "\u5e94\u7528",
+"Back": "\u540e\u9000",
+"Insert date\/time": "\u63d2\u5165\u65e5\u671f\/\u65f6\u95f4",
+"Date\/time": "\u65e5\u671f\/\u65f6\u95f4",
+"Insert\/Edit Link": "\u63d2\u5165\/\u7f16\u8f91\u94fe\u63a5",
+"Insert\/edit link": "\u63d2\u5165\/\u7f16\u8f91\u94fe\u63a5",
+"Text to display": "\u663e\u793a\u6587\u5b57",
+"Url": "\u5730\u5740",
+"Open link in...": "\u94fe\u63a5\u6253\u5f00\u4f4d\u7f6e...",
+"Current window": "\u5f53\u524d\u7a97\u53e3",
+"None": "\u65e0",
+"New window": "\u5728\u65b0\u7a97\u53e3\u6253\u5f00",
+"Remove link": "\u5220\u9664\u94fe\u63a5",
+"Anchors": "\u951a\u70b9",
+"Link...": "\u94fe\u63a5...",
+"Paste or type a link": "\u7c98\u8d34\u6216\u8f93\u5165\u94fe\u63a5",
+"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u4e3a\u90ae\u4ef6\u5730\u5740\uff0c\u9700\u8981\u52a0\u4e0amailto:\u524d\u7f00\u5417\uff1f",
+"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u5c5e\u4e8e\u5916\u90e8\u94fe\u63a5\uff0c\u9700\u8981\u52a0\u4e0ahttp:\/\/:\u524d\u7f00\u5417\uff1f",
+"Link list": "\u94fe\u63a5\u5217\u8868",
+"Insert video": "\u63d2\u5165\u89c6\u9891",
+"Insert\/edit video": "\u63d2\u5165\/\u7f16\u8f91\u89c6\u9891",
+"Insert\/edit media": "\u63d2\u5165\/\u7f16\u8f91\u5a92\u4f53",
+"Alternative source": "\u955c\u50cf",
+"Alternative source URL": "\u66ff\u4ee3\u6765\u6e90\u7f51\u5740",
+"Media poster (Image URL)": "\u5c01\u9762(\u56fe\u7247\u5730\u5740)",
+"Paste your embed code below:": "\u5c06\u5185\u5d4c\u4ee3\u7801\u7c98\u8d34\u5728\u4e0b\u9762:",
+"Embed": "\u5185\u5d4c",
+"Media...": "\u591a\u5a92\u4f53...",
+"Nonbreaking space": "\u4e0d\u95f4\u65ad\u7a7a\u683c",
+"Page break": "\u5206\u9875\u7b26",
+"Paste as text": "\u7c98\u8d34\u4e3a\u6587\u672c",
+"Preview": "\u9884\u89c8",
+"Print...": "\u6253\u5370...",
+"Save": "\u4fdd\u5b58",
+"Find": "\u67e5\u627e",
+"Replace with": "\u66ff\u6362\u4e3a",
+"Replace": "\u66ff\u6362",
+"Replace all": "\u5168\u90e8\u66ff\u6362",
+"Previous": "\u4e0a\u4e00\u4e2a",
+"Next": "\u4e0b\u4e00\u4e2a",
+"Find and replace...": "\u67e5\u627e\u5e76\u66ff\u6362...",
+"Could not find the specified string.": "\u672a\u627e\u5230\u641c\u7d22\u5185\u5bb9.",
+"Match case": "\u533a\u5206\u5927\u5c0f\u5199",
+"Find whole words only": "\u5168\u5b57\u5339\u914d",
+"Spell check": "\u62fc\u5199\u68c0\u67e5",
+"Ignore": "\u5ffd\u7565",
+"Ignore all": "\u5168\u90e8\u5ffd\u7565",
+"Finish": "\u5b8c\u6210",
+"Add to Dictionary": "\u6dfb\u52a0\u5230\u5b57\u5178",
+"Insert table": "\u63d2\u5165\u8868\u683c",
+"Table properties": "\u8868\u683c\u5c5e\u6027",
+"Delete table": "\u5220\u9664\u8868\u683c",
+"Cell": "\u5355\u5143\u683c",
+"Row": "\u884c",
+"Column": "\u5217",
+"Cell properties": "\u5355\u5143\u683c\u5c5e\u6027",
+"Merge cells": "\u5408\u5e76\u5355\u5143\u683c",
+"Split cell": "\u62c6\u5206\u5355\u5143\u683c",
+"Insert row before": "\u5728\u4e0a\u65b9\u63d2\u5165",
+"Insert row after": "\u5728\u4e0b\u65b9\u63d2\u5165",
+"Delete row": "\u5220\u9664\u884c",
+"Row properties": "\u884c\u5c5e\u6027",
+"Cut row": "\u526a\u5207\u884c",
+"Copy row": "\u590d\u5236\u884c",
+"Paste row before": "\u7c98\u8d34\u5230\u4e0a\u65b9",
+"Paste row after": "\u7c98\u8d34\u5230\u4e0b\u65b9",
+"Insert column before": "\u5728\u5de6\u4fa7\u63d2\u5165",
+"Insert column after": "\u5728\u53f3\u4fa7\u63d2\u5165",
+"Delete column": "\u5220\u9664\u5217",
+"Cols": "\u5217",
+"Rows": "\u884c",
+"Width": "\u5bbd",
+"Height": "\u9ad8",
+"Cell spacing": "\u5355\u5143\u683c\u5916\u95f4\u8ddd",
+"Cell padding": "\u5355\u5143\u683c\u5185\u8fb9\u8ddd",
+"Show caption": "\u663e\u793a\u6807\u9898",
+"Left": "\u5de6\u5bf9\u9f50",
+"Center": "\u5c45\u4e2d",
+"Right": "\u53f3\u5bf9\u9f50",
+"Cell type": "\u5355\u5143\u683c\u7c7b\u578b",
+"Scope": "\u8303\u56f4",
+"Alignment": "\u5bf9\u9f50\u65b9\u5f0f",
+"H Align": "\u6c34\u5e73\u5bf9\u9f50",
+"V Align": "\u5782\u76f4\u5bf9\u9f50",
+"Top": "\u9876\u90e8\u5bf9\u9f50",
+"Middle": "\u5782\u76f4\u5c45\u4e2d",
+"Bottom": "\u5e95\u90e8\u5bf9\u9f50",
+"Header cell": "\u8868\u5934\u5355\u5143\u683c",
+"Row group": "\u884c\u7ec4",
+"Column group": "\u5217\u7ec4",
+"Row type": "\u884c\u7c7b\u578b",
+"Header": "\u8868\u5934",
+"Body": "\u8868\u4f53",
+"Footer": "\u8868\u5c3e",
+"Border color": "\u8fb9\u6846\u989c\u8272",
+"Insert template...": "\u63d2\u5165\u6a21\u677f...",
+"Templates": "\u6a21\u677f",
+"Template": "\u6a21\u677f",
+"Text color": "\u6587\u5b57\u989c\u8272",
+"Background color": "\u80cc\u666f\u8272",
+"Custom...": "\u81ea\u5b9a\u4e49...",
+"Custom color": "\u81ea\u5b9a\u4e49\u989c\u8272",
+"No color": "\u65e0",
+"Remove color": "\u79fb\u9664\u989c\u8272",
+"Table of Contents": "\u5185\u5bb9\u5217\u8868",
+"Show blocks": "\u663e\u793a\u533a\u5757\u8fb9\u6846",
+"Show invisible characters": "\u663e\u793a\u4e0d\u53ef\u89c1\u5b57\u7b26",
+"Word count": "\u5b57\u6570",
+"Count": "\u8ba1\u6570",
+"Document": "\u6587\u6863",
+"Selection": "\u9009\u62e9",
+"Words": "\u5355\u8bcd",
+"Words: {0}": "\u5b57\u6570\uff1a{0}",
+"{0} words": "{0} \u5b57",
+"File": "\u6587\u4ef6",
+"Edit": "\u7f16\u8f91",
+"Insert": "\u63d2\u5165",
+"View": "\u89c6\u56fe",
+"Format": "\u683c\u5f0f",
+"Table": "\u8868\u683c",
+"Tools": "\u5de5\u5177",
+"Powered by {0}": "\u7531{0}\u9a71\u52a8",
+"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u5728\u7f16\u8f91\u533a\u6309ALT-F9\u6253\u5f00\u83dc\u5355\uff0c\u6309ALT-F10\u6253\u5f00\u5de5\u5177\u680f\uff0c\u6309ALT-0\u67e5\u770b\u5e2e\u52a9",
+"Image title": "\u56fe\u7247\u6807\u9898",
+"Border width": "\u8fb9\u6846\u5bbd\u5ea6",
+"Border style": "\u8fb9\u6846\u6837\u5f0f",
+"Error": "\u9519\u8bef",
+"Warn": "\u8b66\u544a",
+"Valid": "\u6709\u6548",
+"To open the popup, press Shift+Enter": "\u6309Shitf+Enter\u952e\u6253\u5f00\u5bf9\u8bdd\u6846",
+"Rich Text Area. Press ALT-0 for help.": "\u7f16\u8f91\u533a\u3002\u6309Alt+0\u952e\u6253\u5f00\u5e2e\u52a9\u3002",
+"System Font": "\u7cfb\u7edf\u5b57\u4f53",
+"Failed to upload image: {0}": "\u56fe\u7247\u4e0a\u4f20\u5931\u8d25: {0}",
+"Failed to load plugin: {0} from url {1}": "\u63d2\u4ef6\u52a0\u8f7d\u5931\u8d25: {0} \u6765\u81ea\u94fe\u63a5 {1}",
+"Failed to load plugin url: {0}": "\u63d2\u4ef6\u52a0\u8f7d\u5931\u8d25 \u94fe\u63a5: {0}",
+"Failed to initialize plugin: {0}": "\u63d2\u4ef6\u521d\u59cb\u5316\u5931\u8d25: {0}",
+"example": "\u793a\u4f8b",
+"Search": "\u641c\u7d22",
+"All": "\u5168\u90e8",
+"Currency": "\u8d27\u5e01",
+"Text": "\u6587\u5b57",
+"Quotations": "\u5f15\u7528",
+"Mathematical": "\u6570\u5b66",
+"Extended Latin": "\u62c9\u4e01\u8bed\u6269\u5145",
+"Symbols": "\u7b26\u53f7",
+"Arrows": "\u7bad\u5934",
+"User Defined": "\u81ea\u5b9a\u4e49",
+"dollar sign": "\u7f8e\u5143\u7b26\u53f7",
+"currency sign": "\u8d27\u5e01\u7b26\u53f7",
+"euro-currency sign": "\u6b27\u5143\u7b26\u53f7",
+"colon sign": "\u5192\u53f7",
+"cruzeiro sign": "\u514b\u9c81\u8d5b\u7f57\u5e01\u7b26\u53f7",
+"french franc sign": "\u6cd5\u90ce\u7b26\u53f7",
+"lira sign": "\u91cc\u62c9\u7b26\u53f7",
+"mill sign": "\u5bc6\u5c14\u7b26\u53f7",
+"naira sign": "\u5948\u62c9\u7b26\u53f7",
+"peseta sign": "\u6bd4\u585e\u5854\u7b26\u53f7",
+"rupee sign": "\u5362\u6bd4\u7b26\u53f7",
+"won sign": "\u97e9\u5143\u7b26\u53f7",
+"new sheqel sign": "\u65b0\u8c22\u514b\u5c14\u7b26\u53f7",
+"dong sign": "\u8d8a\u5357\u76fe\u7b26\u53f7",
+"kip sign": "\u8001\u631d\u57fa\u666e\u7b26\u53f7",
+"tugrik sign": "\u56fe\u683c\u91cc\u514b\u7b26\u53f7",
+"drachma sign": "\u5fb7\u62c9\u514b\u9a6c\u7b26\u53f7",
+"german penny symbol": "\u5fb7\u56fd\u4fbf\u58eb\u7b26\u53f7",
+"peso sign": "\u6bd4\u7d22\u7b26\u53f7",
+"guarani sign": "\u74dc\u62c9\u5c3c\u7b26\u53f7",
+"austral sign": "\u6fb3\u5143\u7b26\u53f7",
+"hryvnia sign": "\u683c\u91cc\u592b\u5c3c\u4e9a\u7b26\u53f7",
+"cedi sign": "\u585e\u5730\u7b26\u53f7",
+"livre tournois sign": "\u91cc\u5f17\u5f17\u5c14\u7b26\u53f7",
+"spesmilo sign": "spesmilo\u7b26\u53f7",
+"tenge sign": "\u575a\u6208\u7b26\u53f7",
+"indian rupee sign": "\u5370\u5ea6\u5362\u6bd4",
+"turkish lira sign": "\u571f\u8033\u5176\u91cc\u62c9",
+"nordic mark sign": "\u5317\u6b27\u9a6c\u514b",
+"manat sign": "\u9a6c\u7eb3\u7279\u7b26\u53f7",
+"ruble sign": "\u5362\u5e03\u7b26\u53f7",
+"yen character": "\u65e5\u5143\u5b57\u6837",
+"yuan character": "\u4eba\u6c11\u5e01\u5143\u5b57\u6837",
+"yuan character, in hong kong and taiwan": "\u5143\u5b57\u6837\uff08\u6e2f\u53f0\u5730\u533a\uff09",
+"yen\/yuan character variant one": "\u5143\u5b57\u6837\uff08\u5927\u5199\uff09",
+"Loading emoticons...": "\u52a0\u8f7d\u8868\u60c5\u7b26\u53f7...",
+"Could not load emoticons": "\u4e0d\u80fd\u52a0\u8f7d\u8868\u60c5\u7b26\u53f7",
+"People": "\u4eba\u7c7b",
+"Animals and Nature": "\u52a8\u7269\u548c\u81ea\u7136",
+"Food and Drink": "\u98df\u7269\u548c\u996e\u54c1",
+"Activity": "\u6d3b\u52a8",
+"Travel and Places": "\u65c5\u6e38\u548c\u5730\u70b9",
+"Objects": "\u7269\u4ef6",
+"Flags": "\u65d7\u5e1c",
+"Characters": "\u5b57\u7b26",
+"Characters (no spaces)": "\u5b57\u7b26(\u65e0\u7a7a\u683c)",
+"{0} characters": "{0} \u4e2a\u5b57\u7b26",
+"Error: Form submit field collision.": "\u9519\u8bef: \u8868\u5355\u63d0\u4ea4\u5b57\u6bb5\u51b2\u7a81\u3002",
+"Error: No form element found.": "\u9519\u8bef: \u6ca1\u6709\u8868\u5355\u63a7\u4ef6\u3002",
+"Update": "\u66f4\u65b0",
+"Color swatch": "\u989c\u8272\u6837\u672c",
+"Turquoise": "\u9752\u7eff\u8272",
+"Green": "\u7eff\u8272",
+"Blue": "\u84dd\u8272",
+"Purple": "\u7d2b\u8272",
+"Navy Blue": "\u6d77\u519b\u84dd",
+"Dark Turquoise": "\u6df1\u84dd\u7eff\u8272",
+"Dark Green": "\u6df1\u7eff\u8272",
+"Medium Blue": "\u4e2d\u84dd\u8272",
+"Medium Purple": "\u4e2d\u7d2b\u8272",
+"Midnight Blue": "\u6df1\u84dd\u8272",
+"Yellow": "\u9ec4\u8272",
+"Orange": "\u6a59\u8272",
+"Red": "\u7ea2\u8272",
+"Light Gray": "\u6d45\u7070\u8272",
+"Gray": "\u7070\u8272",
+"Dark Yellow": "\u6697\u9ec4\u8272",
+"Dark Orange": "\u6df1\u6a59\u8272",
+"Dark Red": "\u6df1\u7ea2\u8272",
+"Medium Gray": "\u4e2d\u7070\u8272",
+"Dark Gray": "\u6df1\u7070\u8272",
+"Light Green": "\u6d45\u7eff\u8272",
+"Light Yellow": "\u6d45\u9ec4\u8272",
+"Light Red": "\u6d45\u7ea2\u8272",
+"Light Purple": "\u6d45\u7d2b\u8272",
+"Light Blue": "\u6d45\u84dd\u8272",
+"Dark Purple": "\u6df1\u7d2b\u8272",
+"Dark Blue": "\u6df1\u84dd\u8272",
+"Black": "\u9ed1\u8272",
+"White": "\u767d\u8272",
+"Switch to or from fullscreen mode": "\u5207\u6362\u5168\u5c4f\u6a21\u5f0f",
+"Open help dialog": "\u6253\u5f00\u5e2e\u52a9\u5bf9\u8bdd\u6846",
+"history": "\u5386\u53f2",
+"styles": "\u6837\u5f0f",
+"formatting": "\u683c\u5f0f\u5316",
+"alignment": "\u5bf9\u9f50",
+"indentation": "\u7f29\u8fdb",
+"permanent pen": "\u8bb0\u53f7\u7b14",
+"comments": "\u5907\u6ce8",
+"Format Painter": "\u683c\u5f0f\u5237",
+"Insert\/edit iframe": "\u63d2\u5165\/\u7f16\u8f91\u6846\u67b6",
+"Capitalization": "\u5927\u5199",
+"lowercase": "\u5c0f\u5199",
+"UPPERCASE": "\u5927\u5199",
+"Title Case": "\u9996\u5b57\u6bcd\u5927\u5199",
+"Permanent Pen Properties": "\u6c38\u4e45\u7b14\u5c5e\u6027",
+"Permanent pen properties...": "\u6c38\u4e45\u7b14\u5c5e\u6027...",
+"Font": "\u5b57\u4f53",
+"Size": "\u5b57\u53f7",
+"More...": "\u66f4\u591a...",
+"Spellcheck Language": "\u62fc\u5199\u68c0\u67e5\u8bed\u8a00",
+"Select...": "\u9009\u62e9...",
+"Preferences": "\u9996\u9009\u9879",
+"Yes": "\u662f",
+"No": "\u5426",
+"Keyboard Navigation": "\u952e\u76d8\u6307\u5f15",
+"Version": "\u7248\u672c",
+"Anchor": "\u951a\u70b9",
+"Special character": "\u7279\u6b8a\u7b26\u53f7",
+"Code sample": "\u4ee3\u7801\u793a\u4f8b",
+"Color": "\u989c\u8272",
+"Emoticons": "\u8868\u60c5",
+"Document properties": "\u6587\u6863\u5c5e\u6027",
+"Image": "\u56fe\u7247",
+"Insert link": "\u63d2\u5165\u94fe\u63a5",
+"Target": "\u6253\u5f00\u65b9\u5f0f",
+"Link": "\u94fe\u63a5",
+"Poster": "\u5c01\u9762",
+"Media": "\u5a92\u4f53",
+"Print": "\u6253\u5370",
+"Prev": "\u4e0a\u4e00\u4e2a",
+"Find and replace": "\u67e5\u627e\u548c\u66ff\u6362",
+"Whole words": "\u5168\u5b57\u5339\u914d",
+"Spellcheck": "\u62fc\u5199\u68c0\u67e5",
+"Caption": "\u6807\u9898",
+"Insert template": "\u63d2\u5165\u6a21\u677f"
+});

+ 66 - 0
public/tinymce/skins/content/dark/content.css

@@ -0,0 +1,66 @@
+body {
+  background-color: #222f3e;
+  color: #fff;
+  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
+  line-height: 1.4;
+  margin: 1rem;
+}
+a {
+  color: #4099ff;
+}
+table {
+  border-collapse: collapse;
+}
+/* Apply a default padding if legacy cellpadding attribute is missing */
+table:not([cellpadding]) th,
+table:not([cellpadding]) td {
+  padding: 0.4rem;
+}
+/* Set default table styles if a table has a positive border attribute
+   and no inline css */
+table[border]:not([border="0"]):not([style*="border-width"]) th,
+table[border]:not([border="0"]):not([style*="border-width"]) td {
+  border-width: 1px;
+}
+/* Set default table styles if a table has a positive border attribute
+   and no inline css */
+table[border]:not([border="0"]):not([style*="border-style"]) th,
+table[border]:not([border="0"]):not([style*="border-style"]) td {
+  border-style: solid;
+}
+/* Set default table styles if a table has a positive border attribute
+   and no inline css */
+table[border]:not([border="0"]):not([style*="border-color"]) th,
+table[border]:not([border="0"]):not([style*="border-color"]) td {
+  border-color: #6d737b;
+}
+figure {
+  display: table;
+  margin: 1rem auto;
+}
+figure figcaption {
+  color: #8a8f97;
+  display: block;
+  margin-top: 0.25rem;
+  text-align: center;
+}
+hr {
+  border-color: #6d737b;
+  border-style: solid;
+  border-width: 1px 0 0 0;
+}
+code {
+  background-color: #6d737b;
+  border-radius: 3px;
+  padding: 0.1rem 0.2rem;
+}
+.mce-content-body:not([dir=rtl]) blockquote {
+  border-left: 2px solid #6d737b;
+  margin-left: 1.5rem;
+  padding-left: 1rem;
+}
+.mce-content-body[dir=rtl] blockquote {
+  border-right: 2px solid #6d737b;
+  margin-right: 1.5rem;
+  padding-right: 1rem;
+}

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1 - 0
public/tinymce/skins/content/dark/content.min.css


+ 61 - 0
public/tinymce/skins/content/default/content.css

@@ -0,0 +1,61 @@
+body {
+  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
+  line-height: 1.4;
+  margin: 1rem;
+}
+table {
+  border-collapse: collapse;
+}
+/* Apply a default padding if legacy cellpadding attribute is missing */
+table:not([cellpadding]) th,
+table:not([cellpadding]) td {
+  padding: 0.4rem;
+}
+/* Set default table styles if a table has a positive border attribute
+   and no inline css */
+table[border]:not([border="0"]):not([style*="border-width"]) th,
+table[border]:not([border="0"]):not([style*="border-width"]) td {
+  border-width: 1px;
+}
+/* Set default table styles if a table has a positive border attribute
+   and no inline css */
+table[border]:not([border="0"]):not([style*="border-style"]) th,
+table[border]:not([border="0"]):not([style*="border-style"]) td {
+  border-style: solid;
+}
+/* Set default table styles if a table has a positive border attribute
+   and no inline css */
+table[border]:not([border="0"]):not([style*="border-color"]) th,
+table[border]:not([border="0"]):not([style*="border-color"]) td {
+  border-color: #ccc;
+}
+figure {
+  display: table;
+  margin: 1rem auto;
+}
+figure figcaption {
+  color: #999;
+  display: block;
+  margin-top: 0.25rem;
+  text-align: center;
+}
+hr {
+  border-color: #ccc;
+  border-style: solid;
+  border-width: 1px 0 0 0;
+}
+code {
+  background-color: #e8e8e8;
+  border-radius: 3px;
+  padding: 0.1rem 0.2rem;
+}
+.mce-content-body:not([dir=rtl]) blockquote {
+  border-left: 2px solid #ccc;
+  margin-left: 1.5rem;
+  padding-left: 1rem;
+}
+.mce-content-body[dir=rtl] blockquote {
+  border-right: 2px solid #ccc;
+  margin-right: 1.5rem;
+  padding-right: 1rem;
+}

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1 - 0
public/tinymce/skins/content/default/content.min.css


+ 66 - 0
public/tinymce/skins/content/document/content.css

@@ -0,0 +1,66 @@
+@media screen {
+  html {
+    background: #f4f4f4;
+    min-height: 100%;
+  }
+}
+body {
+  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
+}
+@media screen {
+  body {
+    background-color: #fff;
+    box-shadow: 0 0 4px rgba(0, 0, 0, 0.15);
+    box-sizing: border-box;
+    margin: 1rem auto 0;
+    max-width: 820px;
+    min-height: calc(100vh - 1rem);
+    padding: 4rem 6rem 6rem 6rem;
+  }
+}
+table {
+  border-collapse: collapse;
+}
+/* Apply a default padding if legacy cellpadding attribute is missing */
+table:not([cellpadding]) th,
+table:not([cellpadding]) td {
+  padding: 0.4rem;
+}
+/* Set default table styles if a table has a positive border attribute
+   and no inline css */
+table[border]:not([border="0"]):not([style*="border-width"]) th,
+table[border]:not([border="0"]):not([style*="border-width"]) td {
+  border-width: 1px;
+}
+/* Set default table styles if a table has a positive border attribute
+   and no inline css */
+table[border]:not([border="0"]):not([style*="border-style"]) th,
+table[border]:not([border="0"]):not([style*="border-style"]) td {
+  border-style: solid;
+}
+/* Set default table styles if a table has a positive border attribute
+   and no inline css */
+table[border]:not([border="0"]):not([style*="border-color"]) th,
+table[border]:not([border="0"]):not([style*="border-color"]) td {
+  border-color: #ccc;
+}
+figure figcaption {
+  color: #999;
+  margin-top: 0.25rem;
+  text-align: center;
+}
+hr {
+  border-color: #ccc;
+  border-style: solid;
+  border-width: 1px 0 0 0;
+}
+.mce-content-body:not([dir=rtl]) blockquote {
+  border-left: 2px solid #ccc;
+  margin-left: 1.5rem;
+  padding-left: 1rem;
+}
+.mce-content-body[dir=rtl] blockquote {
+  border-right: 2px solid #ccc;
+  margin-right: 1.5rem;
+  padding-right: 1rem;
+}

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1 - 0
public/tinymce/skins/content/document/content.min.css


+ 66 - 0
public/tinymce/skins/content/tinymce-5-dark/content.css

@@ -0,0 +1,66 @@
+body {
+  background-color: #2f3742;
+  color: #dfe0e4;
+  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
+  line-height: 1.4;
+  margin: 1rem;
+}
+a {
+  color: #4099ff;
+}
+table {
+  border-collapse: collapse;
+}
+/* Apply a default padding if legacy cellpadding attribute is missing */
+table:not([cellpadding]) th,
+table:not([cellpadding]) td {
+  padding: 0.4rem;
+}
+/* Set default table styles if a table has a positive border attribute
+   and no inline css */
+table[border]:not([border="0"]):not([style*="border-width"]) th,
+table[border]:not([border="0"]):not([style*="border-width"]) td {
+  border-width: 1px;
+}
+/* Set default table styles if a table has a positive border attribute
+   and no inline css */
+table[border]:not([border="0"]):not([style*="border-style"]) th,
+table[border]:not([border="0"]):not([style*="border-style"]) td {
+  border-style: solid;
+}
+/* Set default table styles if a table has a positive border attribute
+   and no inline css */
+table[border]:not([border="0"]):not([style*="border-color"]) th,
+table[border]:not([border="0"]):not([style*="border-color"]) td {
+  border-color: #6d737b;
+}
+figure {
+  display: table;
+  margin: 1rem auto;
+}
+figure figcaption {
+  color: #8a8f97;
+  display: block;
+  margin-top: 0.25rem;
+  text-align: center;
+}
+hr {
+  border-color: #6d737b;
+  border-style: solid;
+  border-width: 1px 0 0 0;
+}
+code {
+  background-color: #6d737b;
+  border-radius: 3px;
+  padding: 0.1rem 0.2rem;
+}
+.mce-content-body:not([dir=rtl]) blockquote {
+  border-left: 2px solid #6d737b;
+  margin-left: 1.5rem;
+  padding-left: 1rem;
+}
+.mce-content-body[dir=rtl] blockquote {
+  border-right: 2px solid #6d737b;
+  margin-right: 1.5rem;
+  padding-right: 1rem;
+}

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1 - 0
public/tinymce/skins/content/tinymce-5-dark/content.min.css


+ 61 - 0
public/tinymce/skins/content/tinymce-5/content.css

@@ -0,0 +1,61 @@
+body {
+  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
+  line-height: 1.4;
+  margin: 1rem;
+}
+table {
+  border-collapse: collapse;
+}
+/* Apply a default padding if legacy cellpadding attribute is missing */
+table:not([cellpadding]) th,
+table:not([cellpadding]) td {
+  padding: 0.4rem;
+}
+/* Set default table styles if a table has a positive border attribute
+   and no inline css */
+table[border]:not([border="0"]):not([style*="border-width"]) th,
+table[border]:not([border="0"]):not([style*="border-width"]) td {
+  border-width: 1px;
+}
+/* Set default table styles if a table has a positive border attribute
+   and no inline css */
+table[border]:not([border="0"]):not([style*="border-style"]) th,
+table[border]:not([border="0"]):not([style*="border-style"]) td {
+  border-style: solid;
+}
+/* Set default table styles if a table has a positive border attribute
+   and no inline css */
+table[border]:not([border="0"]):not([style*="border-color"]) th,
+table[border]:not([border="0"]):not([style*="border-color"]) td {
+  border-color: #ccc;
+}
+figure {
+  display: table;
+  margin: 1rem auto;
+}
+figure figcaption {
+  color: #999;
+  display: block;
+  margin-top: 0.25rem;
+  text-align: center;
+}
+hr {
+  border-color: #ccc;
+  border-style: solid;
+  border-width: 1px 0 0 0;
+}
+code {
+  background-color: #e8e8e8;
+  border-radius: 3px;
+  padding: 0.1rem 0.2rem;
+}
+.mce-content-body:not([dir=rtl]) blockquote {
+  border-left: 2px solid #ccc;
+  margin-left: 1.5rem;
+  padding-left: 1rem;
+}
+.mce-content-body[dir=rtl] blockquote {
+  border-right: 2px solid #ccc;
+  margin-right: 1.5rem;
+  padding-right: 1rem;
+}

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1 - 0
public/tinymce/skins/content/tinymce-5/content.min.css


+ 62 - 0
public/tinymce/skins/content/writer/content.css

@@ -0,0 +1,62 @@
+body {
+  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
+  line-height: 1.4;
+  margin: 1rem auto;
+  max-width: 900px;
+}
+table {
+  border-collapse: collapse;
+}
+/* Apply a default padding if legacy cellpadding attribute is missing */
+table:not([cellpadding]) th,
+table:not([cellpadding]) td {
+  padding: 0.4rem;
+}
+/* Set default table styles if a table has a positive border attribute
+   and no inline css */
+table[border]:not([border="0"]):not([style*="border-width"]) th,
+table[border]:not([border="0"]):not([style*="border-width"]) td {
+  border-width: 1px;
+}
+/* Set default table styles if a table has a positive border attribute
+   and no inline css */
+table[border]:not([border="0"]):not([style*="border-style"]) th,
+table[border]:not([border="0"]):not([style*="border-style"]) td {
+  border-style: solid;
+}
+/* Set default table styles if a table has a positive border attribute
+   and no inline css */
+table[border]:not([border="0"]):not([style*="border-color"]) th,
+table[border]:not([border="0"]):not([style*="border-color"]) td {
+  border-color: #ccc;
+}
+figure {
+  display: table;
+  margin: 1rem auto;
+}
+figure figcaption {
+  color: #999;
+  display: block;
+  margin-top: 0.25rem;
+  text-align: center;
+}
+hr {
+  border-color: #ccc;
+  border-style: solid;
+  border-width: 1px 0 0 0;
+}
+code {
+  background-color: #e8e8e8;
+  border-radius: 3px;
+  padding: 0.1rem 0.2rem;
+}
+.mce-content-body:not([dir=rtl]) blockquote {
+  border-left: 2px solid #ccc;
+  margin-left: 1.5rem;
+  padding-left: 1rem;
+}
+.mce-content-body[dir=rtl] blockquote {
+  border-right: 2px solid #ccc;
+  margin-right: 1.5rem;
+  padding-right: 1rem;
+}

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1 - 0
public/tinymce/skins/content/writer/content.min.css


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 711 - 0
public/tinymce/skins/ui/oxide-dark/content.css


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 724 - 0
public/tinymce/skins/ui/oxide-dark/content.inline.css


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1 - 0
public/tinymce/skins/ui/oxide-dark/content.inline.min.css


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1 - 0
public/tinymce/skins/ui/oxide-dark/content.min.css


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 3041 - 0
public/tinymce/skins/ui/oxide-dark/skin.css


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1 - 0
public/tinymce/skins/ui/oxide-dark/skin.min.css


+ 30 - 0
public/tinymce/skins/ui/oxide-dark/skin.shadowdom.css

@@ -0,0 +1,30 @@
+body.tox-dialog__disable-scroll {
+  overflow: hidden;
+}
+.tox-fullscreen {
+  border: 0;
+  height: 100%;
+  margin: 0;
+  overflow: hidden;
+  overscroll-behavior: none;
+  padding: 0;
+  touch-action: pinch-zoom;
+  width: 100%;
+}
+.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle {
+  display: none;
+}
+.tox.tox-tinymce.tox-fullscreen,
+.tox-shadowhost.tox-fullscreen {
+  left: 0;
+  position: fixed;
+  top: 0;
+  z-index: 1200;
+}
+.tox.tox-tinymce.tox-fullscreen {
+  background-color: transparent;
+}
+.tox-fullscreen .tox.tox-tinymce-aux,
+.tox-fullscreen ~ .tox.tox-tinymce-aux {
+  z-index: 1201;
+}

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1 - 0
public/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 730 - 0
public/tinymce/skins/ui/oxide/content.css


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 724 - 0
public/tinymce/skins/ui/oxide/content.inline.css


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1 - 0
public/tinymce/skins/ui/oxide/content.inline.min.css


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1 - 0
public/tinymce/skins/ui/oxide/content.min.css


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 3038 - 0
public/tinymce/skins/ui/oxide/skin.css


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1 - 0
public/tinymce/skins/ui/oxide/skin.min.css


+ 30 - 0
public/tinymce/skins/ui/oxide/skin.shadowdom.css

@@ -0,0 +1,30 @@
+body.tox-dialog__disable-scroll {
+  overflow: hidden;
+}
+.tox-fullscreen {
+  border: 0;
+  height: 100%;
+  margin: 0;
+  overflow: hidden;
+  overscroll-behavior: none;
+  padding: 0;
+  touch-action: pinch-zoom;
+  width: 100%;
+}
+.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle {
+  display: none;
+}
+.tox.tox-tinymce.tox-fullscreen,
+.tox-shadowhost.tox-fullscreen {
+  left: 0;
+  position: fixed;
+  top: 0;
+  z-index: 1200;
+}
+.tox.tox-tinymce.tox-fullscreen {
+  background-color: transparent;
+}
+.tox-fullscreen .tox.tox-tinymce-aux,
+.tox-fullscreen ~ .tox.tox-tinymce-aux {
+  z-index: 1201;
+}

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1 - 0
public/tinymce/skins/ui/oxide/skin.shadowdom.min.css


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 711 - 0
public/tinymce/skins/ui/tinymce-5-dark/content.css


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 724 - 0
public/tinymce/skins/ui/tinymce-5-dark/content.inline.css


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1 - 0
public/tinymce/skins/ui/tinymce-5-dark/content.inline.min.css


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1 - 0
public/tinymce/skins/ui/tinymce-5-dark/content.min.css


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 3119 - 0
public/tinymce/skins/ui/tinymce-5-dark/skin.css


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1 - 0
public/tinymce/skins/ui/tinymce-5-dark/skin.min.css


+ 30 - 0
public/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.css

@@ -0,0 +1,30 @@
+body.tox-dialog__disable-scroll {
+  overflow: hidden;
+}
+.tox-fullscreen {
+  border: 0;
+  height: 100%;
+  margin: 0;
+  overflow: hidden;
+  overscroll-behavior: none;
+  padding: 0;
+  touch-action: pinch-zoom;
+  width: 100%;
+}
+.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle {
+  display: none;
+}
+.tox.tox-tinymce.tox-fullscreen,
+.tox-shadowhost.tox-fullscreen {
+  left: 0;
+  position: fixed;
+  top: 0;
+  z-index: 1200;
+}
+.tox.tox-tinymce.tox-fullscreen {
+  background-color: transparent;
+}
+.tox-fullscreen .tox.tox-tinymce-aux,
+.tox-fullscreen ~ .tox.tox-tinymce-aux {
+  z-index: 1201;
+}

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1 - 0
public/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.min.css


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 730 - 0
public/tinymce/skins/ui/tinymce-5/content.css


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 724 - 0
public/tinymce/skins/ui/tinymce-5/content.inline.css


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1 - 0
public/tinymce/skins/ui/tinymce-5/content.inline.min.css


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1 - 0
public/tinymce/skins/ui/tinymce-5/content.min.css


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 3119 - 0
public/tinymce/skins/ui/tinymce-5/skin.css


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1 - 0
public/tinymce/skins/ui/tinymce-5/skin.min.css


+ 30 - 0
public/tinymce/skins/ui/tinymce-5/skin.shadowdom.css

@@ -0,0 +1,30 @@
+body.tox-dialog__disable-scroll {
+  overflow: hidden;
+}
+.tox-fullscreen {
+  border: 0;
+  height: 100%;
+  margin: 0;
+  overflow: hidden;
+  overscroll-behavior: none;
+  padding: 0;
+  touch-action: pinch-zoom;
+  width: 100%;
+}
+.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle {
+  display: none;
+}
+.tox.tox-tinymce.tox-fullscreen,
+.tox-shadowhost.tox-fullscreen {
+  left: 0;
+  position: fixed;
+  top: 0;
+  z-index: 1200;
+}
+.tox.tox-tinymce.tox-fullscreen {
+  background-color: transparent;
+}
+.tox-fullscreen .tox.tox-tinymce-aux,
+.tox-fullscreen ~ .tox.tox-tinymce-aux {
+  z-index: 1201;
+}

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1 - 0
public/tinymce/skins/ui/tinymce-5/skin.shadowdom.min.css


+ 62 - 0
src/App.vue

@@ -0,0 +1,62 @@
+<template>
+	<el-config-provider :locale="locale" :size="config.size" :zIndex="config.zIndex" :button="config.button">
+		<router-view></router-view>
+	</el-config-provider>
+</template>
+
+<script>
+	const debounce = (fn, delay) => {
+		let timer = null;
+		return function () {
+			let context = this;
+			let args = arguments;
+			clearTimeout(timer);
+			timer = setTimeout(function () {
+				fn.apply(context, args);
+			}, delay);
+		}
+	}
+
+	const _ResizeObserver = window.ResizeObserver;
+	window.ResizeObserver = class ResizeObserver extends _ResizeObserver {
+		constructor(callback) {
+			callback = debounce(callback, 16);
+			super(callback);
+		}
+	}
+	import colorTool from "@/utils/color";
+
+	export default {
+		name: "App",
+		data() {
+			return {
+				config: {
+					size: "default",
+					zIndex: 2000,
+					button: {
+						autoInsertSpace: false
+					}
+				}
+			}
+		},
+		computed: {
+			locale(){
+				return this.$i18n.messages[this.$i18n.locale].el
+			},
+		},
+		created() {
+			// 设置主题颜色
+			document.documentElement.style.setProperty("--el-color-primary", this.$CONFIG.COLOR);
+			for (let i = 1; i <= 9; i++) {
+				document.documentElement.style.setProperty(`--el-color-primary-light-${i}`, colorTool.lighten(this.$CONFIG.COLOR, i / 10));
+			}
+			for (let i = 1; i <= 9; i++) {
+				document.documentElement.style.setProperty(`--el-color-primary-dark-${i}`, colorTool.darken(this.$CONFIG.COLOR, i / 10));
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+@import "@/style/style.scss";
+</style>

+ 11 - 0
src/api/index.js

@@ -0,0 +1,11 @@
+/**
+ * @description 自动import导入所有 api 模块
+ */
+
+const files = require.context('./model', false, /\.js$/)
+const modules = {}
+files.keys().forEach((key) => {
+	modules[key.replace(/(\.\/|\.js)/g, '')] = files(key).default
+})
+
+export default modules

+ 61 - 0
src/api/model/auth.js

@@ -0,0 +1,61 @@
+import config from "@/config"
+import http from "@/utils/request"
+import tool from '@/utils/tool'
+
+export default {
+	token: {
+		url: `${config.API_URL}/zcxt/auth/login`,
+		name: "登录获取TOKEN",
+		post: async function (data = {}) {
+			const query = {
+				username: data.user,
+				password: tool.crypto.encrypt(data.password),
+				code: data.code,
+				uuid: data.uuid
+			}
+			return await http.post(this.url, query);
+		}
+	},
+
+	codeImg: {
+		url: `${config.API_URL}/zcxt/auth/code`,
+		name: "获取登录验证码",
+		get: async function () {
+			return await http.get(this.url);
+		}
+	},
+
+	updatePassword: {
+		url: `${config.API_URL}/zcxt/users/updatePass`,
+		name: "修改密码",
+		post: async function (data = {}) {
+			const query = {
+				oldPass: tool.crypto.encrypt(data.userPassword),
+				newPass: tool.crypto.encrypt(data.newPassword)
+			}
+			return await http.post(this.url, query);
+		}
+	},
+
+	oa: {
+		url: `${config.API_URL}/zcxt/oa`,
+		name: "oa跳转 单点登录 -> 获取token user",
+
+		getUserToken: async function (data = {}) {
+			return await http.post(`${this.url}/getUserToken`, data);
+		},
+
+		updateStatus: async function (data = {}) {
+			return await http.post(`${this.url}/updateStatus`, data);
+		}
+	},
+
+	gldMaster: {
+		url: `${config.API_URL}/zcxt/gldMaster`,
+		name: "审批流参数",
+
+		getToken: async function (data = {}) { // 获取审批流 参数
+			return await http.post(`${this.url}/getToken`, data);
+		}
+	}
+}

+ 20 - 0
src/api/model/common.js

@@ -0,0 +1,20 @@
+import config from "@/config"
+import http from "@/utils/request"
+
+export default {
+	folder: {
+		url: `${config.API_URL}/zcxt`,
+		name: "文件上传",
+		up: async function (data, config = {}) {
+			return await http.post(`${this.url}/file/upload`, data, config);
+		},
+
+		rm: async function (entityID) {
+			return await http.post(`${this.url}/folder/rm`, { querys: [], expands: { entityID } });
+		},
+
+		get: async function (entityID) {
+			return await http.get(`${this.url}/folder/${entityID}`, {}, { responseType: "blob" });
+		}
+	}
+}

+ 16 - 0
src/api/model/costServer.js

@@ -0,0 +1,16 @@
+import config from "@/config"
+import http from "@/utils/request"
+
+export default {
+	contractPlan: {
+		url: `${config.API_URL}/zcxt/costServer/getHYGHList`,
+		name: "合约规划",
+		contract: async function (data = {}) {
+			return await http.post(`${this.url}/getHY`, data, { timeout: 60000 });
+		},
+
+		subject: async function (data = {}) {
+			return await http.post(`${this.url}/getKM`, data, { timeout: 60000 });
+		}
+	}
+}

+ 12 - 0
src/api/model/message.js

@@ -0,0 +1,12 @@
+import config from "@/config"
+import http from "@/utils/request"
+
+export default {
+    message: {
+        url: `${config.API_URL}/zcxt/message`,
+        name: "消息管理",
+        get: async function (data = {}) {
+            return await http.post(`${this.url}/getPage`, data);
+        }
+    }
+}

+ 168 - 0
src/api/model/procurement.js

@@ -0,0 +1,168 @@
+import config from "@/config"
+import http from "@/utils/request"
+
+export default {
+	contract: {
+		url: `${config.API_URL}/zcxt/supplierContract`,
+		name: "采购合同",
+
+		all: async function (data = {}) {
+			return await http.post(`${this.url}/getList`, data);
+		},
+
+		download: async function (params = {}) {
+			return await http.get(`${this.url}/download`, params, { responseType: "blob" });
+		}
+	},
+
+	plan: {
+		url: `${config.API_URL}/zcxt/purchasePlan`,
+		name: "招采计划",
+
+		getTongji: async function (data = {}) {
+			return await http.post(`${this.url}/getTongji`, data);
+		},
+
+		getSelectPage: async function (data = {}) {
+			return await http.post(`${this.url}/getSelectPage`, data);
+		},
+
+		get: async function (data = {}) {
+			return await http.post(`${this.url}/getPage`, data);
+		},
+
+		add: async function (data = {}) {
+			return await http.post(`${this.url}/save`, data);
+		},
+
+		edit: async function (data = {}) {
+			return await http.post(`${this.url}/update`, data);
+		},
+
+		del: async function (data = {}) {
+			return await http.post(`${this.url}/remove`, data);
+		},
+
+		detail: async function (data = {}) {
+			return await http.post(`${this.url}/getById`, data);
+		},
+
+		saveApprove: async function (data = {}) { // 审核
+			return await http.post(`${this.url}/saveApprove`, data);
+		}
+	},
+
+	apply: {
+		url: `${config.API_URL}/zcxt/purchaseApply`,
+		name: "采购申请",
+
+		add: async function (data = {}) {
+			return await http.post(`${this.url}/save`, data);
+		},
+
+		edit: async function (data = {}) {
+			return await http.post(`${this.url}/update`, data);
+		},
+
+		del: async function (data = {}) {
+			return await http.post(`${this.url}/remove`, data);
+		},
+
+		detail: async function (data = {}) {
+			return await http.post(`${this.url}/getById`, data);
+		},
+
+		saveApprove: async function (data = {}) { // 审核
+			return await http.post(`${this.url}/saveApprove`, data);
+		}
+	},
+
+	matter: {
+		url: `${config.API_URL}/zcxt/purchaseMatter`,
+		name: "采购申请-事项审批",
+
+		add: async function (data = {}) {
+			return await http.post(`${this.url}/save`, data);
+		},
+
+		detail: async function (data = {}) {
+			return await http.post(`${this.url}/getById`, data);
+		},
+
+		saveApprove: async function (data = {}) { // 审核
+			return await http.post(`${this.url}/saveApprove`, data);
+		}
+	},
+
+	bidSign: {
+		url: `${config.API_URL}/zcxt/purchaseBidSign`,
+		name: "采购申请-招标文件会签",
+
+		add: async function (data = {}) {
+			return await http.post(`${this.url}/save`, data);
+		},
+
+		detail: async function (data = {}) {
+			return await http.post(`${this.url}/getById`, data);
+		},
+
+		saveApprove: async function (data = {}) { // 审核
+			return await http.post(`${this.url}/saveApprove`, data);
+		}
+	},
+
+	answerSign: {
+		url: `${config.API_URL}/zcxt/purchaseAnswerSign`,
+		name: "采购申请-招标答疑会签",
+
+		add: async function (data = {}) {
+			return await http.post(`${this.url}/save`, data);
+		},
+
+		detail: async function (data = {}) {
+			return await http.post(`${this.url}/getById`, data);
+		},
+
+		saveApprove: async function (data = {}) { // 审核
+			return await http.post(`${this.url}/saveApprove`, data);
+		}
+	},
+
+	bidNotice: {
+		url: `${config.API_URL}/zcxt/purchaseBidNotice`,
+		name: "采购申请-招标情况通知",
+
+		add: async function (data = {}) {
+			return await http.post(`${this.url}/save`, data);
+		},
+
+		detail: async function (data = {}) {
+			return await http.post(`${this.url}/getById`, data);
+		},
+
+		saveApprove: async function (data = {}) { // 审核
+			return await http.post(`${this.url}/saveApprove`, data);
+		}
+	},
+
+	ledger: {
+		url: `${config.API_URL}/zcxt/purchase`,
+		name: "招采台账",
+
+		getTongji: async function (data = {}) {
+			return await http.post(`${this.url}/getTongji`, data);
+		},
+
+		get: async function (data = {}) {
+			return await http.post(`${this.url}/getPage`, data);
+		},
+
+		edit: async function (data = {}) {
+			return await http.post(`${this.url}/update`, data);
+		},
+
+		getBusinessId: async function (data = {}) {
+			return await http.post(`${this.url}/getBusinessId`, data);
+		}
+	}
+}

+ 99 - 0
src/api/model/supplier.js

@@ -0,0 +1,99 @@
+import config from "@/config"
+import http from "@/utils/request"
+
+export default {
+	type: {
+		url: `${config.API_URL}/zcxt/supplierType`,
+		name: "供应商类别",
+
+		get: async function (data = {}) {
+			return await http.post(`${this.url}/getList`, data);
+		},
+
+		add: async function (data = {}) {
+			return await http.post(`${this.url}/save`, data);
+		},
+
+		edit: async function (data = {}) {
+			return await http.post(`${this.url}/update`, data);
+		},
+
+		del: async function (data = {}) {
+			return await http.post(`${this.url}/remove`, data);
+		}
+	},
+
+	list: {
+		url: `${config.API_URL}/zcxt/supplier`,
+		name: "已签约供应商",
+
+		get: async function (data = {}) {
+			return await http.post(`${this.url}/getPage`, data);
+		},
+
+		all: async function (data = {}) {
+			return await http.post(`${this.url}/getList`, data);
+		},
+
+		detail: async function (data = {}) {
+			return await http.post(`${this.url}/getById`, data);
+		},
+
+		add: async function (data = {}) {
+			return await http.post(`${this.url}/save`, data);
+		},
+
+		edit: async function (data = {}) {
+			return await http.post(`${this.url}/update`, data);
+		},
+
+		del: async function (data = {}) {
+			return await http.post(`${this.url}/remove`, data);
+		}
+	},
+
+	evaluate: {
+		url: `${config.API_URL}/zcxt/supplierEvaluate`,
+		name: "供应商评价",
+
+		getTongJi: async function (data = {}) {
+			return await http.post(`${this.url}/getTongJi`, data);
+		},
+
+		get: async function (data = {}) {
+			return await http.post(`${this.url}/getPage`, data);
+		},
+
+		detail: async function (data = {}) {
+			return await http.post(`${this.url}/getById`, data);
+		},
+
+		add: async function (data = {}) {
+			return await http.post(`${this.url}/save`, data);
+		},
+
+		edit: async function (data = {}) {
+			return await http.post(`${this.url}/update`, data);
+		},
+
+		del: async function (data = {}) {
+			return await http.post(`${this.url}/remove`, data);
+		},
+
+		active: async function (data = {}) { // 发起
+			return await http.post(`${this.url}/active`, data);
+		},
+
+		evaluate: async function (data = {}) { // 评价人评价
+			return await http.post(`${this.url}/evaluate`, data);
+		},
+
+		revert: async function (data = {}) { // 退回
+			return await http.post(`${this.url}/revert`, data);
+		},
+
+		calc: async function (data = {}) { // 计算
+			return await http.post(`${this.url}/calculate`, data);
+		}
+	},
+}

+ 201 - 0
src/api/model/system.js

@@ -0,0 +1,201 @@
+import config from "@/config"
+import http from "@/utils/request"
+
+export default {
+	menu: {
+		url: `${config.API_URL}/zcxt/menus`,
+		name: "获取我的菜单",
+		build: async function (params) {
+			return await http.get(`${this.url}/build`, params);
+		},
+
+		get: async function (params) {
+			return await http.get(this.url, params);
+		},
+
+		add: async function (data = {}) {
+			return await http.post(this.url, data);
+		},
+
+		edit: async function (data = {}) {
+			return await http.put(this.url, data);
+		},
+
+		del: async function (data = {}) {
+			return await http.delete(this.url, data);
+		}
+	},
+
+	role: {
+		url: `${config.API_URL}/zcxt/roles`,
+		name: "角色列表",
+		all: async function () {
+			return await http.get(`${this.url}/all`);
+		},
+
+		get: async function (params) {
+			return await http.get(this.url, params);
+		},
+
+		add: async function (data = {}) {
+			return await http.post(this.url, data);
+		},
+
+		edit: async function (data = {}) {
+			return await http.put(this.url, data);
+		},
+
+		del: async function (data = {}) {
+			return await http.delete(this.url, data);
+		},
+
+		menu: async function (data = {}) {
+			return await http.put(`${this.url}/menu`, data);
+		}
+	},
+
+	job: {
+		url: `${config.API_URL}/zcxt/job`,
+		name: "岗位列表",
+		all: async function (data = {}) {
+			return await http.post(`${this.url}/getList`, data);
+		},
+
+		get: async function (data = {}) {
+			return await http.post(`${this.url}/getPage`, data);
+		},
+
+		add: async function (data = {}) {
+			return await http.post(`${this.url}/save`, data);
+		},
+
+		edit: async function (data = {}) {
+			return await http.post(`${this.url}/update`, data);
+		},
+
+		del: async function (data = {}) {
+			return await http.post(`${this.url}/remove`, data);
+		}
+	},
+
+	dept: {
+		url: `${config.API_URL}/zcxt/dept`,
+		name: "组织列表",
+		get: async function (data = {}) {
+			return await http.post(`${this.url}/getList`, data);
+		},
+
+		add: async function (data = {}) {
+			return await http.post(`${this.url}/save`, data);
+		},
+
+		edit: async function (data = {}) {
+			return await http.post(`${this.url}/update`, data);
+		},
+
+		del: async function (data = {}) {
+			return await http.post(`${this.url}/remove`, data);
+		}
+	},
+
+	user: {
+		url: `${config.API_URL}/zcxt/users`,
+		name: "用户列表",
+		get: async function (params) {
+			return await http.get(this.url, params);
+		},
+
+		add: async function (data = {}) {
+			return await http.post(this.url, data);
+		},
+
+		edit: async function (data = {}) {
+			return await http.put(this.url, data);
+		},
+
+		del: async function (data = {}) {
+			return await http.delete(this.url, data);
+		}
+	},
+
+	dict: {
+		url: `${config.API_URL}/zcxt/dict`,
+		name: "字典列表",
+		all: async function () {
+			return await http.get(`${this.url}/all`);
+		},
+
+		get: async function (params) {
+			return await http.get(this.url, params);
+		},
+
+		add: async function (data = {}) {
+			return await http.post(this.url, data);
+		},
+
+		edit: async function (data = {}) {
+			return await http.put(this.url, data);
+		},
+
+		del: async function (data = {}) {
+			return await http.delete(this.url, data);
+		}
+	},
+
+	dictDetail: {
+		url: `${config.API_URL}/zcxt/dictDetail`,
+		name: "字典列表",
+		get: async function (params) {
+			return await http.get(this.url, params);
+		},
+
+		add: async function (data = {}) {
+			return await http.post(this.url, data);
+		},
+
+		edit: async function (data = {}) {
+			return await http.put(this.url, data);
+		},
+
+		del: async function (id) {
+			return await http.delete(this.url + "/" + id);
+		},
+
+		batchUpdate: async function (data) {
+			return await http.post(`${this.url}/batchUpdate`, data);
+		}
+	},
+
+	bank: {
+		url: `${config.API_URL}/zcxt/finance`,
+		name: "银行列表",
+		get: async function (data = {}) {
+			return await http.post(`${this.url}/getPage`, data);
+		}
+	},
+
+	project: {
+		url: `${config.API_URL}/zcxt/projectInfo`,
+		name: "项目列表",
+
+		get: async function (data = {}) {
+			return await http.post(`${this.url}/getPage`, data);
+		},
+
+		all: async function (data = {}) {
+			return await http.post(`${this.url}/getList`, data);
+		},
+
+		add: async function (data = {}) {
+			return await http.post(`${this.url}/save`, data);
+		},
+
+		edit: async function (data = {}) {
+			return await http.post(`${this.url}/update`, data);
+		},
+
+		del: async function (data = {}) {
+			return await http.post(`${this.url}/remove`, data);
+		}
+	}
+}

+ 3 - 0
src/assets/icons/Add.vue

@@ -0,0 +1,3 @@
+<template>
+    <svg t="1722822639926" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6385" id="mx_n_1722822639929" width="64" height="64"><path d="M896 704h-192V512H640v192H448v64h192v192h64v-192h192v-64z" p-id="6386"></path><path d="M448 960H64V64h832v448h-64V128H128v768h320v64z" p-id="6387"></path></svg>
+</template>

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 3 - 0
src/assets/icons/Amount.vue


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 3 - 0
src/assets/icons/Bar.vue


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 3 - 0
src/assets/icons/BarCircle.vue


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 3 - 0
src/assets/icons/BarSquare.vue


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 3 - 0
src/assets/icons/BidAmount.vue


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 3 - 0
src/assets/icons/BudgetAmount.vue


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 3 - 0
src/assets/icons/BugFill.vue


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 3 - 0
src/assets/icons/BugLine.vue


+ 3 - 0
src/assets/icons/Code.vue

@@ -0,0 +1,3 @@
+<template>
+	<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg"><path d="M981.333333 512l-301.696 301.696-60.330666-60.330667L860.672 512l-241.365333-241.365333 60.330666-60.330667L981.333333 512zM163.328 512l241.365333 241.365333-60.330666 60.330667L42.666667 512l301.696-301.696 60.330666 60.330667L163.328 512z" p-id="4503"></path></svg>
+</template>

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 3 - 0
src/assets/icons/ContractAmount.vue


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 3 - 0
src/assets/icons/Dictionary.vue


+ 3 - 0
src/assets/icons/Download.vue

@@ -0,0 +1,3 @@
+<template>
+	<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg"><path d="M554.666667 426.666667h213.333333l-256 256-256-256h213.333333V128h85.333334v298.666667z m-384 384h682.666666v-298.666667h85.333334v341.333333a42.666667 42.666667 0 0 1-42.666667 42.666667H128a42.666667 42.666667 0 0 1-42.666667-42.666667v-341.333333h85.333334v298.666667z" p-id="26056"></path></svg>
+</template>

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 3 - 0
src/assets/icons/FileExcel.vue


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 3 - 0
src/assets/icons/FilePdf.vue


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 3 - 0
src/assets/icons/FilePpt.vue


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 3 - 0
src/assets/icons/FileWord.vue


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 3 - 0
src/assets/icons/Folder.vue


+ 3 - 0
src/assets/icons/Home.vue

@@ -0,0 +1,3 @@
+<template>
+	<svg viewBox="0 0 1024 1024" focusable="false" fill="currentColor" aria-hidden="true"><path d="M946.5 505L560.1 118.8l-25.9-25.9a31.5 31.5 0 00-44.4 0L77.5 505a63.9 63.9 0 00-18.8 46c.4 35.2 29.7 63.3 64.9 63.3h42.5V940h691.8V614.3h43.4c17.1 0 33.2-6.7 45.3-18.8a63.6 63.6 0 0018.7-45.3c0-17-6.7-33.1-18.8-45.2zM568 868H456V664h112v204zm217.9-325.7V868H632V640c0-22.1-17.9-40-40-40H432c-22.1 0-40 17.9-40 40v228H238.1V542.3h-96l370-369.7 23.1 23.1L882 542.3h-96.1z"></path></svg>
+</template>

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 3 - 0
src/assets/icons/LargeScreen.vue


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 3 - 0
src/assets/icons/Ledger.vue


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 3 - 0
src/assets/icons/Logout.vue


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 3 - 0
src/assets/icons/Organization.vue


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 3 - 0
src/assets/icons/Password.vue


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 3 - 0
src/assets/icons/Pie.vue


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 3 - 0
src/assets/icons/PieCircle.vue


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 3 - 0
src/assets/icons/PieList.vue


+ 0 - 0
src/assets/icons/PieMonitor.vue


Nem az összes módosított fájl került megjelenítésre, mert túl sok fájl változott