169 changed files with 0 additions and 59834 deletions
@ -1,14 +0,0 @@ |
|||||
# https://editorconfig.org |
|
||||
root = true |
|
||||
|
|
||||
[*] |
|
||||
charset = utf-8 |
|
||||
indent_style = space |
|
||||
indent_size = 2 |
|
||||
end_of_line = lf |
|
||||
insert_final_newline = true |
|
||||
trim_trailing_whitespace = true |
|
||||
|
|
||||
[*.md] |
|
||||
insert_final_newline = false |
|
||||
trim_trailing_whitespace = false |
|
||||
@ -1,3 +0,0 @@ |
|||||
VUE_APP_VERSION=3.0 |
|
||||
VUE_APP_NAME=Bmz Admin |
|
||||
VUE_APP_API_BASE_URL=http://api.base.ahbmz.com/api |
|
||||
@ -1 +0,0 @@ |
|||||
VUE_APP_API_BASE_URL=http://api.base.ahbmz.com/api |
|
||||
@ -1,2 +0,0 @@ |
|||||
NODE_ENV=production |
|
||||
VUE_APP_API_BASE_URL=https://v1.eleadmin.com/api |
|
||||
@ -1,4 +0,0 @@ |
|||||
public |
|
||||
src/assets |
|
||||
dist |
|
||||
node_modules |
|
||||
@ -1,16 +0,0 @@ |
|||||
module.exports = { |
|
||||
root: true, |
|
||||
env: { |
|
||||
node: true, |
|
||||
}, |
|
||||
extends: [ |
|
||||
"plugin:vue/essential", |
|
||||
'eslint:recommended' |
|
||||
], |
|
||||
parserOptions: { |
|
||||
parser: 'babel-eslint' |
|
||||
}, |
|
||||
rules: { |
|
||||
//"no-unused-vars": "off"
|
|
||||
} |
|
||||
} |
|
||||
@ -1,21 +0,0 @@ |
|||||
.DS_Store |
|
||||
node_modules |
|
||||
/dist |
|
||||
|
|
||||
# local env files |
|
||||
.env.local |
|
||||
.env.*.local |
|
||||
|
|
||||
# Log files |
|
||||
npm-debug.log* |
|
||||
yarn-debug.log* |
|
||||
yarn-error.log* |
|
||||
|
|
||||
# Editor directories and files |
|
||||
.idea |
|
||||
.vscode |
|
||||
*.suo |
|
||||
*.ntvs* |
|
||||
*.njsproj |
|
||||
*.sln |
|
||||
*.sw? |
|
||||
@ -1,5 +0,0 @@ |
|||||
module.exports = { |
|
||||
presets: [ |
|
||||
'@vue/cli-plugin-babel/preset' |
|
||||
] |
|
||||
} |
|
||||
Binary file not shown.
@ -1,14 +0,0 @@ |
|||||
{ |
|
||||
"compilerOptions": { |
|
||||
"baseUrl": "./", |
|
||||
"paths": { |
|
||||
"@/*": [ |
|
||||
"src/*" |
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
"exclude": [ |
|
||||
"node_modules", |
|
||||
"dist" |
|
||||
] |
|
||||
} |
|
||||
File diff suppressed because it is too large
@ -1,56 +0,0 @@ |
|||||
{ |
|
||||
"name": "ele-admin-template", |
|
||||
"version": "1.2.0", |
|
||||
"private": true, |
|
||||
"scripts": { |
|
||||
"serve": "vue-cli-service serve", |
|
||||
"build": "vue-cli-service build", |
|
||||
"build:preview": "vue-cli-service build --mode preview", |
|
||||
"build:report": "vue-cli-service build --report", |
|
||||
"lint": "vue-cli-service lint" |
|
||||
}, |
|
||||
"dependencies": { |
|
||||
"@amap/amap-jsapi-loader": "^0.0.7", |
|
||||
"@riophae/vue-treeselect": "^0.4.0", |
|
||||
"@tinymce/tinymce-vue": "^3.2.8", |
|
||||
"axios": "^0.21.1", |
|
||||
"core-js": "^3.8.3", |
|
||||
"countup.js": "^2.0.7", |
|
||||
"cropperjs": "^1.5.9", |
|
||||
"echarts": "^4.9.0", |
|
||||
"echarts-wordcloud": "^1.1.3", |
|
||||
"ele-admin": "^1.2.0", |
|
||||
"element-ui": "^2.15.0", |
|
||||
"nprogress": "^0.2.0", |
|
||||
"tinymce": "^5.7.0", |
|
||||
"vue": "^2.6.12", |
|
||||
"vue-axios": "^2.1.5", |
|
||||
"vue-clipboard2": "^0.3.1", |
|
||||
"vue-countup-v2": "^4.0.0", |
|
||||
"vue-qr": "^2.3.0", |
|
||||
"vue-router": "^3.5.1", |
|
||||
"vuedraggable": "^2.24.3", |
|
||||
"vuex": "^3.6.2", |
|
||||
"xgplayer-vue": "^1.1.5", |
|
||||
"xlsx": "^0.16.9" |
|
||||
}, |
|
||||
"devDependencies": { |
|
||||
"@vue/cli-plugin-babel": "^4.5.11", |
|
||||
"@vue/cli-plugin-eslint": "^4.5.11", |
|
||||
"@vue/cli-plugin-router": "^4.5.11", |
|
||||
"@vue/cli-plugin-vuex": "^4.5.11", |
|
||||
"@vue/cli-service": "^4.5.11", |
|
||||
"babel-eslint": "^10.1.0", |
|
||||
"compression-webpack-plugin": "^6.1.1", |
|
||||
"eslint": "^6.8.0", |
|
||||
"eslint-plugin-vue": "^7.6.0", |
|
||||
"sass": "^1.3.0", |
|
||||
"sass-loader": "^10.1.1", |
|
||||
"vue-template-compiler": "^2.6.12" |
|
||||
}, |
|
||||
"browserslist": [ |
|
||||
"> 1%", |
|
||||
"last 2 versions", |
|
||||
"not dead" |
|
||||
] |
|
||||
} |
|
||||
|
Before Width: | Height: | Size: 4.2 KiB |
@ -1,22 +0,0 @@ |
|||||
<!DOCTYPE html> |
|
||||
<html lang="zh-CN"> |
|
||||
<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 %>favicon.ico"> |
|
||||
<title><%= process.env.VUE_APP_NAME %></title> |
|
||||
</head> |
|
||||
<body> |
|
||||
<noscript> |
|
||||
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong> |
|
||||
</noscript> |
|
||||
<div id="app"> |
|
||||
<div class="ele-admin-loading"></div> |
|
||||
<style> |
|
||||
.ele-admin-loading{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%)}.ele-admin-loading:before{content:"";width:30px;height:30px;margin:0 auto;display:block;border-radius:50%;background:#409eff;animation:loading-bounce .3s cubic-bezier(0.05,0,0.2,1) infinite alternate}.ele-admin-loading:after{content:"";width:10px;height:2px;margin:0 auto;display:block;border-radius:50%;background:#BBB;animation:loading-shadow .3s cubic-bezier(0.05,0,0.2,1) infinite alternate}@keyframes loading-bounce{from{transform:translateY(0)}to{transform:translateY(-40px)}}@keyframes loading-shadow{from{transform:scale(1,1);opacity:1}to{transform:scale(3,2);opacity:.3}} |
|
||||
</style> |
|
||||
</div> |
|
||||
<!-- built files will be auto injected --> |
|
||||
</body> |
|
||||
</html> |
|
||||
@ -1,389 +0,0 @@ |
|||||
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 characters...": "\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", |
|
||||
"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)", |
|
||||
"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", |
|
||||
"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", |
|
||||
"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" |
|
||||
}); |
|
||||
@ -1,59 +0,0 @@ |
|||||
/** |
|
||||
* Copyright (c) Tiny Technologies, Inc. All rights reserved. |
|
||||
* Licensed under the LGPL or a commercial license. |
|
||||
* For LGPL see License.txt in the project root for license information. |
|
||||
* For commercial licenses see https://www.tiny.cloud/ |
|
||||
*/ |
|
||||
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; |
|
||||
} |
|
||||
table th, |
|
||||
table td { |
|
||||
border: 1px solid #6d737b; |
|
||||
padding: 0.4rem; |
|
||||
} |
|
||||
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; |
|
||||
} |
|
||||
/* Make text in selected cells in tables dark and readable */ |
|
||||
td[data-mce-selected], |
|
||||
th[data-mce-selected] { |
|
||||
color: #333; |
|
||||
} |
|
||||
.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; |
|
||||
} |
|
||||
@ -1,7 +0,0 @@ |
|||||
/** |
|
||||
* Copyright (c) Tiny Technologies, Inc. All rights reserved. |
|
||||
* Licensed under the LGPL or a commercial license. |
|
||||
* For LGPL see License.txt in the project root for license information. |
|
||||
* For commercial licenses see https://www.tiny.cloud/ |
|
||||
*/ |
|
||||
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}table td,table th{border:1px solid #6d737b;padding:.4rem}figure{display:table;margin:1rem auto}figure figcaption{color:#8a8f97;display:block;margin-top:.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:.1rem .2rem}td[data-mce-selected],th[data-mce-selected]{color:#333}.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} |
|
||||
@ -1,49 +0,0 @@ |
|||||
/** |
|
||||
* Copyright (c) Tiny Technologies, Inc. All rights reserved. |
|
||||
* Licensed under the LGPL or a commercial license. |
|
||||
* For LGPL see License.txt in the project root for license information. |
|
||||
* For commercial licenses see https://www.tiny.cloud/ |
|
||||
*/ |
|
||||
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; |
|
||||
} |
|
||||
table th, |
|
||||
table td { |
|
||||
border: 1px solid #ccc; |
|
||||
padding: 0.4rem; |
|
||||
} |
|
||||
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; |
|
||||
} |
|
||||
@ -1,7 +0,0 @@ |
|||||
/** |
|
||||
* Copyright (c) Tiny Technologies, Inc. All rights reserved. |
|
||||
* Licensed under the LGPL or a commercial license. |
|
||||
* For LGPL see License.txt in the project root for license information. |
|
||||
* For commercial licenses see https://www.tiny.cloud/ |
|
||||
*/ |
|
||||
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}table td,table th{border:1px solid #ccc;padding:.4rem}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.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:.1rem .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} |
|
||||
@ -1,54 +0,0 @@ |
|||||
/** |
|
||||
* Copyright (c) Tiny Technologies, Inc. All rights reserved. |
|
||||
* Licensed under the LGPL or a commercial license. |
|
||||
* For LGPL see License.txt in the project root for license information. |
|
||||
* For commercial licenses see https://www.tiny.cloud/ |
|
||||
*/ |
|
||||
@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; |
|
||||
} |
|
||||
table th, |
|
||||
table td { |
|
||||
border: 1px solid #ccc; |
|
||||
padding: 0.4rem; |
|
||||
} |
|
||||
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; |
|
||||
} |
|
||||
@ -1,7 +0,0 @@ |
|||||
/** |
|
||||
* Copyright (c) Tiny Technologies, Inc. All rights reserved. |
|
||||
* Licensed under the LGPL or a commercial license. |
|
||||
* For LGPL see License.txt in the project root for license information. |
|
||||
* For commercial licenses see https://www.tiny.cloud/ |
|
||||
*/ |
|
||||
@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,.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}table td,table th{border:1px solid #ccc;padding:.4rem}figure figcaption{color:#999;margin-top:.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} |
|
||||
@ -1,50 +0,0 @@ |
|||||
/** |
|
||||
* Copyright (c) Tiny Technologies, Inc. All rights reserved. |
|
||||
* Licensed under the LGPL or a commercial license. |
|
||||
* For LGPL see License.txt in the project root for license information. |
|
||||
* For commercial licenses see https://www.tiny.cloud/ |
|
||||
*/ |
|
||||
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; |
|
||||
} |
|
||||
table th, |
|
||||
table td { |
|
||||
border: 1px solid #ccc; |
|
||||
padding: 0.4rem; |
|
||||
} |
|
||||
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; |
|
||||
} |
|
||||
@ -1,7 +0,0 @@ |
|||||
/** |
|
||||
* Copyright (c) Tiny Technologies, Inc. All rights reserved. |
|
||||
* Licensed under the LGPL or a commercial license. |
|
||||
* For LGPL see License.txt in the project root for license information. |
|
||||
* For commercial licenses see https://www.tiny.cloud/ |
|
||||
*/ |
|
||||
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}table td,table th{border:1px solid #ccc;padding:.4rem}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.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:.1rem .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} |
|
||||
@ -1,677 +0,0 @@ |
|||||
/** |
|
||||
* Copyright (c) Tiny Technologies, Inc. All rights reserved. |
|
||||
* Licensed under the LGPL or a commercial license. |
|
||||
* For LGPL see License.txt in the project root for license information. |
|
||||
* For commercial licenses see https://www.tiny.cloud/ |
|
||||
*/ |
|
||||
.mce-content-body .mce-item-anchor { |
|
||||
background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%20fill%3D%22%23cccccc%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center; |
|
||||
cursor: default; |
|
||||
display: inline-block; |
|
||||
height: 12px !important; |
|
||||
padding: 0 2px; |
|
||||
-webkit-user-modify: read-only; |
|
||||
-moz-user-modify: read-only; |
|
||||
-webkit-user-select: all; |
|
||||
-moz-user-select: all; |
|
||||
-ms-user-select: all; |
|
||||
user-select: all; |
|
||||
width: 8px !important; |
|
||||
} |
|
||||
.mce-content-body .mce-item-anchor[data-mce-selected] { |
|
||||
outline-offset: 1px; |
|
||||
} |
|
||||
.tox-comments-visible .tox-comment { |
|
||||
background-color: #fff0b7; |
|
||||
} |
|
||||
.tox-comments-visible .tox-comment--active { |
|
||||
background-color: #ffe168; |
|
||||
} |
|
||||
.tox-checklist > li:not(.tox-checklist--hidden) { |
|
||||
list-style: none; |
|
||||
margin: 0.25em 0; |
|
||||
} |
|
||||
.tox-checklist > li:not(.tox-checklist--hidden)::before { |
|
||||
background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%236d737b%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A"); |
|
||||
background-size: 100%; |
|
||||
content: ''; |
|
||||
cursor: pointer; |
|
||||
height: 1em; |
|
||||
margin-left: -1.5em; |
|
||||
margin-top: 0.125em; |
|
||||
position: absolute; |
|
||||
width: 1em; |
|
||||
} |
|
||||
.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before { |
|
||||
background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A"); |
|
||||
} |
|
||||
[dir=rtl] .tox-checklist > li:not(.tox-checklist--hidden)::before { |
|
||||
margin-left: 0; |
|
||||
margin-right: -1.5em; |
|
||||
} |
|
||||
/* stylelint-disable */ |
|
||||
/* http://prismjs.com/ */ |
|
||||
/** |
|
||||
* Dracula Theme originally by Zeno Rocha [@zenorocha] |
|
||||
* https://draculatheme.com/ |
|
||||
* |
|
||||
* Ported for PrismJS by Albert Vallverdu [@byverdu] |
|
||||
*/ |
|
||||
code[class*="language-"], |
|
||||
pre[class*="language-"] { |
|
||||
color: #f8f8f2; |
|
||||
background: none; |
|
||||
text-shadow: 0 1px rgba(0, 0, 0, 0.3); |
|
||||
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; |
|
||||
text-align: left; |
|
||||
white-space: pre; |
|
||||
word-spacing: normal; |
|
||||
word-break: normal; |
|
||||
word-wrap: normal; |
|
||||
line-height: 1.5; |
|
||||
-moz-tab-size: 4; |
|
||||
tab-size: 4; |
|
||||
-webkit-hyphens: none; |
|
||||
-ms-hyphens: none; |
|
||||
hyphens: none; |
|
||||
} |
|
||||
/* Code blocks */ |
|
||||
pre[class*="language-"] { |
|
||||
padding: 1em; |
|
||||
margin: 0.5em 0; |
|
||||
overflow: auto; |
|
||||
border-radius: 0.3em; |
|
||||
} |
|
||||
:not(pre) > code[class*="language-"], |
|
||||
pre[class*="language-"] { |
|
||||
background: #282a36; |
|
||||
} |
|
||||
/* Inline code */ |
|
||||
:not(pre) > code[class*="language-"] { |
|
||||
padding: 0.1em; |
|
||||
border-radius: 0.3em; |
|
||||
white-space: normal; |
|
||||
} |
|
||||
.token.comment, |
|
||||
.token.prolog, |
|
||||
.token.doctype, |
|
||||
.token.cdata { |
|
||||
color: #6272a4; |
|
||||
} |
|
||||
.token.punctuation { |
|
||||
color: #f8f8f2; |
|
||||
} |
|
||||
.namespace { |
|
||||
opacity: 0.7; |
|
||||
} |
|
||||
.token.property, |
|
||||
.token.tag, |
|
||||
.token.constant, |
|
||||
.token.symbol, |
|
||||
.token.deleted { |
|
||||
color: #ff79c6; |
|
||||
} |
|
||||
.token.boolean, |
|
||||
.token.number { |
|
||||
color: #bd93f9; |
|
||||
} |
|
||||
.token.selector, |
|
||||
.token.attr-name, |
|
||||
.token.string, |
|
||||
.token.char, |
|
||||
.token.builtin, |
|
||||
.token.inserted { |
|
||||
color: #50fa7b; |
|
||||
} |
|
||||
.token.operator, |
|
||||
.token.entity, |
|
||||
.token.url, |
|
||||
.language-css .token.string, |
|
||||
.style .token.string, |
|
||||
.token.variable { |
|
||||
color: #f8f8f2; |
|
||||
} |
|
||||
.token.atrule, |
|
||||
.token.attr-value, |
|
||||
.token.function, |
|
||||
.token.class-name { |
|
||||
color: #f1fa8c; |
|
||||
} |
|
||||
.token.keyword { |
|
||||
color: #8be9fd; |
|
||||
} |
|
||||
.token.regex, |
|
||||
.token.important { |
|
||||
color: #ffb86c; |
|
||||
} |
|
||||
.token.important, |
|
||||
.token.bold { |
|
||||
font-weight: bold; |
|
||||
} |
|
||||
.token.italic { |
|
||||
font-style: italic; |
|
||||
} |
|
||||
.token.entity { |
|
||||
cursor: help; |
|
||||
} |
|
||||
/* stylelint-enable */ |
|
||||
.mce-content-body { |
|
||||
overflow-wrap: break-word; |
|
||||
word-wrap: break-word; |
|
||||
} |
|
||||
.mce-content-body .mce-visual-caret { |
|
||||
background-color: black; |
|
||||
background-color: currentColor; |
|
||||
position: absolute; |
|
||||
} |
|
||||
.mce-content-body .mce-visual-caret-hidden { |
|
||||
display: none; |
|
||||
} |
|
||||
.mce-content-body *[data-mce-caret] { |
|
||||
left: -1000px; |
|
||||
margin: 0; |
|
||||
padding: 0; |
|
||||
position: absolute; |
|
||||
right: auto; |
|
||||
top: 0; |
|
||||
} |
|
||||
.mce-content-body .mce-offscreen-selection { |
|
||||
left: -2000000px; |
|
||||
max-width: 1000000px; |
|
||||
position: absolute; |
|
||||
} |
|
||||
.mce-content-body *[contentEditable=false] { |
|
||||
cursor: default; |
|
||||
} |
|
||||
.mce-content-body *[contentEditable=true] { |
|
||||
cursor: text; |
|
||||
} |
|
||||
.tox-cursor-format-painter { |
|
||||
cursor: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"), default; |
|
||||
} |
|
||||
.mce-content-body figure.align-left { |
|
||||
float: left; |
|
||||
} |
|
||||
.mce-content-body figure.align-right { |
|
||||
float: right; |
|
||||
} |
|
||||
.mce-content-body figure.image.align-center { |
|
||||
display: table; |
|
||||
margin-left: auto; |
|
||||
margin-right: auto; |
|
||||
} |
|
||||
.mce-preview-object { |
|
||||
border: 1px solid gray; |
|
||||
display: inline-block; |
|
||||
line-height: 0; |
|
||||
margin: 0 2px 0 2px; |
|
||||
position: relative; |
|
||||
} |
|
||||
.mce-preview-object .mce-shim { |
|
||||
background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); |
|
||||
height: 100%; |
|
||||
left: 0; |
|
||||
position: absolute; |
|
||||
top: 0; |
|
||||
width: 100%; |
|
||||
} |
|
||||
.mce-preview-object[data-mce-selected="2"] .mce-shim { |
|
||||
display: none; |
|
||||
} |
|
||||
.mce-object { |
|
||||
background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%20fill%3D%22%23cccccc%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center; |
|
||||
border: 1px dashed #aaa; |
|
||||
} |
|
||||
.mce-pagebreak { |
|
||||
border: 1px dashed #aaa; |
|
||||
cursor: default; |
|
||||
display: block; |
|
||||
height: 5px; |
|
||||
margin-top: 15px; |
|
||||
page-break-before: always; |
|
||||
width: 100%; |
|
||||
} |
|
||||
@media print { |
|
||||
.mce-pagebreak { |
|
||||
border: 0; |
|
||||
} |
|
||||
} |
|
||||
.tiny-pageembed .mce-shim { |
|
||||
background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); |
|
||||
height: 100%; |
|
||||
left: 0; |
|
||||
position: absolute; |
|
||||
top: 0; |
|
||||
width: 100%; |
|
||||
} |
|
||||
.tiny-pageembed[data-mce-selected="2"] .mce-shim { |
|
||||
display: none; |
|
||||
} |
|
||||
.tiny-pageembed { |
|
||||
display: inline-block; |
|
||||
position: relative; |
|
||||
} |
|
||||
.tiny-pageembed--21by9, |
|
||||
.tiny-pageembed--16by9, |
|
||||
.tiny-pageembed--4by3, |
|
||||
.tiny-pageembed--1by1 { |
|
||||
display: block; |
|
||||
overflow: hidden; |
|
||||
padding: 0; |
|
||||
position: relative; |
|
||||
width: 100%; |
|
||||
} |
|
||||
.tiny-pageembed--21by9 { |
|
||||
padding-top: 42.857143%; |
|
||||
} |
|
||||
.tiny-pageembed--16by9 { |
|
||||
padding-top: 56.25%; |
|
||||
} |
|
||||
.tiny-pageembed--4by3 { |
|
||||
padding-top: 75%; |
|
||||
} |
|
||||
.tiny-pageembed--1by1 { |
|
||||
padding-top: 100%; |
|
||||
} |
|
||||
.tiny-pageembed--21by9 iframe, |
|
||||
.tiny-pageembed--16by9 iframe, |
|
||||
.tiny-pageembed--4by3 iframe, |
|
||||
.tiny-pageembed--1by1 iframe { |
|
||||
border: 0; |
|
||||
height: 100%; |
|
||||
left: 0; |
|
||||
position: absolute; |
|
||||
top: 0; |
|
||||
width: 100%; |
|
||||
} |
|
||||
.mce-content-body[data-mce-placeholder] { |
|
||||
position: relative; |
|
||||
} |
|
||||
.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before { |
|
||||
color: rgba(34, 47, 62, 0.7); |
|
||||
content: attr(data-mce-placeholder); |
|
||||
position: absolute; |
|
||||
} |
|
||||
.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before { |
|
||||
left: 1px; |
|
||||
} |
|
||||
.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before { |
|
||||
right: 1px; |
|
||||
} |
|
||||
.mce-content-body div.mce-resizehandle { |
|
||||
background-color: #4099ff; |
|
||||
border-color: #4099ff; |
|
||||
border-style: solid; |
|
||||
border-width: 1px; |
|
||||
box-sizing: border-box; |
|
||||
height: 10px; |
|
||||
position: absolute; |
|
||||
width: 10px; |
|
||||
z-index: 10000; |
|
||||
} |
|
||||
.mce-content-body div.mce-resizehandle:hover { |
|
||||
background-color: #4099ff; |
|
||||
} |
|
||||
.mce-content-body div.mce-resizehandle:nth-of-type(1) { |
|
||||
cursor: nwse-resize; |
|
||||
} |
|
||||
.mce-content-body div.mce-resizehandle:nth-of-type(2) { |
|
||||
cursor: nesw-resize; |
|
||||
} |
|
||||
.mce-content-body div.mce-resizehandle:nth-of-type(3) { |
|
||||
cursor: nwse-resize; |
|
||||
} |
|
||||
.mce-content-body div.mce-resizehandle:nth-of-type(4) { |
|
||||
cursor: nesw-resize; |
|
||||
} |
|
||||
.mce-content-body .mce-clonedresizable { |
|
||||
opacity: 0.5; |
|
||||
outline: 1px dashed black; |
|
||||
position: absolute; |
|
||||
z-index: 10000; |
|
||||
} |
|
||||
.mce-content-body .mce-resize-helper { |
|
||||
background: #555; |
|
||||
background: rgba(0, 0, 0, 0.75); |
|
||||
border: 1px; |
|
||||
border-radius: 3px; |
|
||||
color: white; |
|
||||
display: none; |
|
||||
font-family: sans-serif; |
|
||||
font-size: 12px; |
|
||||
line-height: 14px; |
|
||||
margin: 5px 10px; |
|
||||
padding: 5px; |
|
||||
position: absolute; |
|
||||
white-space: nowrap; |
|
||||
z-index: 10001; |
|
||||
} |
|
||||
.tox-rtc-user-selection { |
|
||||
position: relative; |
|
||||
} |
|
||||
.tox-rtc-user-cursor { |
|
||||
bottom: 0; |
|
||||
cursor: default; |
|
||||
position: absolute; |
|
||||
top: 0; |
|
||||
width: 2px; |
|
||||
} |
|
||||
.tox-rtc-user-cursor::before { |
|
||||
background-color: inherit; |
|
||||
border-radius: 50%; |
|
||||
content: ''; |
|
||||
display: block; |
|
||||
height: 8px; |
|
||||
position: absolute; |
|
||||
right: -3px; |
|
||||
top: -3px; |
|
||||
width: 8px; |
|
||||
} |
|
||||
.tox-rtc-user-cursor:hover::after { |
|
||||
background-color: inherit; |
|
||||
border-radius: 100px; |
|
||||
box-sizing: border-box; |
|
||||
color: #fff; |
|
||||
content: attr(data-user); |
|
||||
display: block; |
|
||||
font-size: 12px; |
|
||||
font-weight: bold; |
|
||||
left: -5px; |
|
||||
min-height: 8px; |
|
||||
min-width: 8px; |
|
||||
padding: 0 12px; |
|
||||
position: absolute; |
|
||||
top: -11px; |
|
||||
white-space: nowrap; |
|
||||
z-index: 1000; |
|
||||
} |
|
||||
.tox-rtc-user-selection--1 .tox-rtc-user-cursor { |
|
||||
background-color: #2dc26b; |
|
||||
} |
|
||||
.tox-rtc-user-selection--2 .tox-rtc-user-cursor { |
|
||||
background-color: #e03e2d; |
|
||||
} |
|
||||
.tox-rtc-user-selection--3 .tox-rtc-user-cursor { |
|
||||
background-color: #f1c40f; |
|
||||
} |
|
||||
.tox-rtc-user-selection--4 .tox-rtc-user-cursor { |
|
||||
background-color: #3598db; |
|
||||
} |
|
||||
.tox-rtc-user-selection--5 .tox-rtc-user-cursor { |
|
||||
background-color: #b96ad9; |
|
||||
} |
|
||||
.tox-rtc-user-selection--6 .tox-rtc-user-cursor { |
|
||||
background-color: #e67e23; |
|
||||
} |
|
||||
.tox-rtc-user-selection--7 .tox-rtc-user-cursor { |
|
||||
background-color: #aaa69d; |
|
||||
} |
|
||||
.tox-rtc-user-selection--8 .tox-rtc-user-cursor { |
|
||||
background-color: #f368e0; |
|
||||
} |
|
||||
.tox-rtc-remote-image { |
|
||||
background: #eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center; |
|
||||
border: 1px solid #ccc; |
|
||||
min-height: 240px; |
|
||||
min-width: 320px; |
|
||||
} |
|
||||
.mce-match-marker { |
|
||||
background: #aaa; |
|
||||
color: #fff; |
|
||||
} |
|
||||
.mce-match-marker-selected { |
|
||||
background: #39f; |
|
||||
color: #fff; |
|
||||
} |
|
||||
.mce-match-marker-selected::-moz-selection { |
|
||||
background: #39f; |
|
||||
color: #fff; |
|
||||
} |
|
||||
.mce-match-marker-selected::selection { |
|
||||
background: #39f; |
|
||||
color: #fff; |
|
||||
} |
|
||||
.mce-content-body img[data-mce-selected], |
|
||||
.mce-content-body table[data-mce-selected] { |
|
||||
outline: 3px solid #4099ff; |
|
||||
} |
|
||||
.mce-content-body hr[data-mce-selected] { |
|
||||
outline: 3px solid #4099ff; |
|
||||
outline-offset: 1px; |
|
||||
} |
|
||||
.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus { |
|
||||
outline: 3px solid #4099ff; |
|
||||
} |
|
||||
.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover { |
|
||||
outline: 3px solid #4099ff; |
|
||||
} |
|
||||
.mce-content-body *[contentEditable=false][data-mce-selected] { |
|
||||
cursor: not-allowed; |
|
||||
outline: 3px solid #4099ff; |
|
||||
} |
|
||||
.mce-content-body.mce-content-readonly *[contentEditable=true]:focus, |
|
||||
.mce-content-body.mce-content-readonly *[contentEditable=true]:hover { |
|
||||
outline: none; |
|
||||
} |
|
||||
.mce-content-body *[data-mce-selected="inline-boundary"] { |
|
||||
background-color: #4099ff; |
|
||||
} |
|
||||
.mce-content-body .mce-edit-focus { |
|
||||
outline: 3px solid #4099ff; |
|
||||
} |
|
||||
.mce-content-body td[data-mce-selected], |
|
||||
.mce-content-body th[data-mce-selected] { |
|
||||
background-color: #b4d7ff !important; |
|
||||
} |
|
||||
.mce-content-body td[data-mce-selected]::-moz-selection, |
|
||||
.mce-content-body th[data-mce-selected]::-moz-selection { |
|
||||
background: none; |
|
||||
} |
|
||||
.mce-content-body td[data-mce-selected]::selection, |
|
||||
.mce-content-body th[data-mce-selected]::selection { |
|
||||
background: none; |
|
||||
} |
|
||||
.mce-content-body td[data-mce-selected] *, |
|
||||
.mce-content-body th[data-mce-selected] * { |
|
||||
-webkit-touch-callout: none; |
|
||||
-webkit-user-select: none; |
|
||||
-moz-user-select: none; |
|
||||
-ms-user-select: none; |
|
||||
user-select: none; |
|
||||
} |
|
||||
.mce-content-body img::-moz-selection { |
|
||||
background: none; |
|
||||
} |
|
||||
.mce-content-body img::selection { |
|
||||
background: none; |
|
||||
} |
|
||||
.ephox-snooker-resizer-bar { |
|
||||
background-color: #4099ff; |
|
||||
opacity: 0; |
|
||||
-webkit-user-select: none; |
|
||||
-moz-user-select: none; |
|
||||
-ms-user-select: none; |
|
||||
user-select: none; |
|
||||
} |
|
||||
.ephox-snooker-resizer-cols { |
|
||||
cursor: col-resize; |
|
||||
} |
|
||||
.ephox-snooker-resizer-rows { |
|
||||
cursor: row-resize; |
|
||||
} |
|
||||
.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging { |
|
||||
opacity: 1; |
|
||||
} |
|
||||
.mce-spellchecker-word { |
|
||||
background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A"); |
|
||||
background-position: 0 calc(100% + 1px); |
|
||||
background-repeat: repeat-x; |
|
||||
background-size: auto 6px; |
|
||||
cursor: default; |
|
||||
height: 2rem; |
|
||||
} |
|
||||
.mce-spellchecker-grammar { |
|
||||
background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A"); |
|
||||
background-position: 0 calc(100% + 1px); |
|
||||
background-repeat: repeat-x; |
|
||||
background-size: auto 6px; |
|
||||
cursor: default; |
|
||||
} |
|
||||
.mce-toc { |
|
||||
border: 1px solid gray; |
|
||||
} |
|
||||
.mce-toc h2 { |
|
||||
margin: 4px; |
|
||||
} |
|
||||
.mce-toc li { |
|
||||
list-style-type: none; |
|
||||
} |
|
||||
.mce-item-table, |
|
||||
.mce-item-table td, |
|
||||
.mce-item-table th, |
|
||||
.mce-item-table caption { |
|
||||
border: 1px dashed #bbb; |
|
||||
} |
|
||||
.mce-visualblocks p, |
|
||||
.mce-visualblocks h1, |
|
||||
.mce-visualblocks h2, |
|
||||
.mce-visualblocks h3, |
|
||||
.mce-visualblocks h4, |
|
||||
.mce-visualblocks h5, |
|
||||
.mce-visualblocks h6, |
|
||||
.mce-visualblocks div:not([data-mce-bogus]), |
|
||||
.mce-visualblocks section, |
|
||||
.mce-visualblocks article, |
|
||||
.mce-visualblocks blockquote, |
|
||||
.mce-visualblocks address, |
|
||||
.mce-visualblocks pre, |
|
||||
.mce-visualblocks figure, |
|
||||
.mce-visualblocks figcaption, |
|
||||
.mce-visualblocks hgroup, |
|
||||
.mce-visualblocks aside, |
|
||||
.mce-visualblocks ul, |
|
||||
.mce-visualblocks ol, |
|
||||
.mce-visualblocks dl { |
|
||||
background-repeat: no-repeat; |
|
||||
border: 1px dashed #bbb; |
|
||||
margin-left: 3px; |
|
||||
padding-top: 10px; |
|
||||
} |
|
||||
.mce-visualblocks p { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7); |
|
||||
} |
|
||||
.mce-visualblocks h1 { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==); |
|
||||
} |
|
||||
.mce-visualblocks h2 { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==); |
|
||||
} |
|
||||
.mce-visualblocks h3 { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7); |
|
||||
} |
|
||||
.mce-visualblocks h4 { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==); |
|
||||
} |
|
||||
.mce-visualblocks h5 { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==); |
|
||||
} |
|
||||
.mce-visualblocks h6 { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==); |
|
||||
} |
|
||||
.mce-visualblocks div:not([data-mce-bogus]) { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7); |
|
||||
} |
|
||||
.mce-visualblocks section { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=); |
|
||||
} |
|
||||
.mce-visualblocks article { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7); |
|
||||
} |
|
||||
.mce-visualblocks blockquote { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7); |
|
||||
} |
|
||||
.mce-visualblocks address { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=); |
|
||||
} |
|
||||
.mce-visualblocks pre { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==); |
|
||||
} |
|
||||
.mce-visualblocks figure { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7); |
|
||||
} |
|
||||
.mce-visualblocks figcaption { |
|
||||
border: 1px dashed #bbb; |
|
||||
} |
|
||||
.mce-visualblocks hgroup { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7); |
|
||||
} |
|
||||
.mce-visualblocks aside { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=); |
|
||||
} |
|
||||
.mce-visualblocks ul { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==); |
|
||||
} |
|
||||
.mce-visualblocks ol { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==); |
|
||||
} |
|
||||
.mce-visualblocks dl { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==); |
|
||||
} |
|
||||
.mce-visualblocks:not([dir=rtl]) p, |
|
||||
.mce-visualblocks:not([dir=rtl]) h1, |
|
||||
.mce-visualblocks:not([dir=rtl]) h2, |
|
||||
.mce-visualblocks:not([dir=rtl]) h3, |
|
||||
.mce-visualblocks:not([dir=rtl]) h4, |
|
||||
.mce-visualblocks:not([dir=rtl]) h5, |
|
||||
.mce-visualblocks:not([dir=rtl]) h6, |
|
||||
.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]), |
|
||||
.mce-visualblocks:not([dir=rtl]) section, |
|
||||
.mce-visualblocks:not([dir=rtl]) article, |
|
||||
.mce-visualblocks:not([dir=rtl]) blockquote, |
|
||||
.mce-visualblocks:not([dir=rtl]) address, |
|
||||
.mce-visualblocks:not([dir=rtl]) pre, |
|
||||
.mce-visualblocks:not([dir=rtl]) figure, |
|
||||
.mce-visualblocks:not([dir=rtl]) figcaption, |
|
||||
.mce-visualblocks:not([dir=rtl]) hgroup, |
|
||||
.mce-visualblocks:not([dir=rtl]) aside, |
|
||||
.mce-visualblocks:not([dir=rtl]) ul, |
|
||||
.mce-visualblocks:not([dir=rtl]) ol, |
|
||||
.mce-visualblocks:not([dir=rtl]) dl { |
|
||||
margin-left: 3px; |
|
||||
} |
|
||||
.mce-visualblocks[dir=rtl] p, |
|
||||
.mce-visualblocks[dir=rtl] h1, |
|
||||
.mce-visualblocks[dir=rtl] h2, |
|
||||
.mce-visualblocks[dir=rtl] h3, |
|
||||
.mce-visualblocks[dir=rtl] h4, |
|
||||
.mce-visualblocks[dir=rtl] h5, |
|
||||
.mce-visualblocks[dir=rtl] h6, |
|
||||
.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]), |
|
||||
.mce-visualblocks[dir=rtl] section, |
|
||||
.mce-visualblocks[dir=rtl] article, |
|
||||
.mce-visualblocks[dir=rtl] blockquote, |
|
||||
.mce-visualblocks[dir=rtl] address, |
|
||||
.mce-visualblocks[dir=rtl] pre, |
|
||||
.mce-visualblocks[dir=rtl] figure, |
|
||||
.mce-visualblocks[dir=rtl] figcaption, |
|
||||
.mce-visualblocks[dir=rtl] hgroup, |
|
||||
.mce-visualblocks[dir=rtl] aside, |
|
||||
.mce-visualblocks[dir=rtl] ul, |
|
||||
.mce-visualblocks[dir=rtl] ol, |
|
||||
.mce-visualblocks[dir=rtl] dl { |
|
||||
background-position-x: right; |
|
||||
margin-right: 3px; |
|
||||
} |
|
||||
.mce-nbsp, |
|
||||
.mce-shy { |
|
||||
background: #aaa; |
|
||||
} |
|
||||
.mce-shy::after { |
|
||||
content: '-'; |
|
||||
} |
|
||||
body { |
|
||||
font-family: sans-serif; |
|
||||
} |
|
||||
table { |
|
||||
border-collapse: collapse; |
|
||||
} |
|
||||
@ -1,689 +0,0 @@ |
|||||
/** |
|
||||
* Copyright (c) Tiny Technologies, Inc. All rights reserved. |
|
||||
* Licensed under the LGPL or a commercial license. |
|
||||
* For LGPL see License.txt in the project root for license information. |
|
||||
* For commercial licenses see https://www.tiny.cloud/ |
|
||||
*/ |
|
||||
.mce-content-body .mce-item-anchor { |
|
||||
background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center; |
|
||||
cursor: default; |
|
||||
display: inline-block; |
|
||||
height: 12px !important; |
|
||||
padding: 0 2px; |
|
||||
-webkit-user-modify: read-only; |
|
||||
-moz-user-modify: read-only; |
|
||||
-webkit-user-select: all; |
|
||||
-moz-user-select: all; |
|
||||
-ms-user-select: all; |
|
||||
user-select: all; |
|
||||
width: 8px !important; |
|
||||
} |
|
||||
.mce-content-body .mce-item-anchor[data-mce-selected] { |
|
||||
outline-offset: 1px; |
|
||||
} |
|
||||
.tox-comments-visible .tox-comment { |
|
||||
background-color: #fff0b7; |
|
||||
} |
|
||||
.tox-comments-visible .tox-comment--active { |
|
||||
background-color: #ffe168; |
|
||||
} |
|
||||
.tox-checklist > li:not(.tox-checklist--hidden) { |
|
||||
list-style: none; |
|
||||
margin: 0.25em 0; |
|
||||
} |
|
||||
.tox-checklist > li:not(.tox-checklist--hidden)::before { |
|
||||
background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A"); |
|
||||
background-size: 100%; |
|
||||
content: ''; |
|
||||
cursor: pointer; |
|
||||
height: 1em; |
|
||||
margin-left: -1.5em; |
|
||||
margin-top: 0.125em; |
|
||||
position: absolute; |
|
||||
width: 1em; |
|
||||
} |
|
||||
.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before { |
|
||||
background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A"); |
|
||||
} |
|
||||
[dir=rtl] .tox-checklist > li:not(.tox-checklist--hidden)::before { |
|
||||
margin-left: 0; |
|
||||
margin-right: -1.5em; |
|
||||
} |
|
||||
/* stylelint-disable */ |
|
||||
/* http://prismjs.com/ */ |
|
||||
/** |
|
||||
* prism.js default theme for JavaScript, CSS and HTML |
|
||||
* Based on dabblet (http://dabblet.com) |
|
||||
* @author Lea Verou |
|
||||
*/ |
|
||||
code[class*="language-"], |
|
||||
pre[class*="language-"] { |
|
||||
color: black; |
|
||||
background: none; |
|
||||
text-shadow: 0 1px white; |
|
||||
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; |
|
||||
font-size: 1em; |
|
||||
text-align: left; |
|
||||
white-space: pre; |
|
||||
word-spacing: normal; |
|
||||
word-break: normal; |
|
||||
word-wrap: normal; |
|
||||
line-height: 1.5; |
|
||||
-moz-tab-size: 4; |
|
||||
tab-size: 4; |
|
||||
-webkit-hyphens: none; |
|
||||
-ms-hyphens: none; |
|
||||
hyphens: none; |
|
||||
} |
|
||||
pre[class*="language-"]::-moz-selection, |
|
||||
pre[class*="language-"] ::-moz-selection, |
|
||||
code[class*="language-"]::-moz-selection, |
|
||||
code[class*="language-"] ::-moz-selection { |
|
||||
text-shadow: none; |
|
||||
background: #b3d4fc; |
|
||||
} |
|
||||
pre[class*="language-"]::selection, |
|
||||
pre[class*="language-"] ::selection, |
|
||||
code[class*="language-"]::selection, |
|
||||
code[class*="language-"] ::selection { |
|
||||
text-shadow: none; |
|
||||
background: #b3d4fc; |
|
||||
} |
|
||||
@media print { |
|
||||
code[class*="language-"], |
|
||||
pre[class*="language-"] { |
|
||||
text-shadow: none; |
|
||||
} |
|
||||
} |
|
||||
/* Code blocks */ |
|
||||
pre[class*="language-"] { |
|
||||
padding: 1em; |
|
||||
margin: 0.5em 0; |
|
||||
overflow: auto; |
|
||||
} |
|
||||
:not(pre) > code[class*="language-"], |
|
||||
pre[class*="language-"] { |
|
||||
background: #f5f2f0; |
|
||||
} |
|
||||
/* Inline code */ |
|
||||
:not(pre) > code[class*="language-"] { |
|
||||
padding: 0.1em; |
|
||||
border-radius: 0.3em; |
|
||||
white-space: normal; |
|
||||
} |
|
||||
.token.comment, |
|
||||
.token.prolog, |
|
||||
.token.doctype, |
|
||||
.token.cdata { |
|
||||
color: slategray; |
|
||||
} |
|
||||
.token.punctuation { |
|
||||
color: #999; |
|
||||
} |
|
||||
.namespace { |
|
||||
opacity: 0.7; |
|
||||
} |
|
||||
.token.property, |
|
||||
.token.tag, |
|
||||
.token.boolean, |
|
||||
.token.number, |
|
||||
.token.constant, |
|
||||
.token.symbol, |
|
||||
.token.deleted { |
|
||||
color: #905; |
|
||||
} |
|
||||
.token.selector, |
|
||||
.token.attr-name, |
|
||||
.token.string, |
|
||||
.token.char, |
|
||||
.token.builtin, |
|
||||
.token.inserted { |
|
||||
color: #690; |
|
||||
} |
|
||||
.token.operator, |
|
||||
.token.entity, |
|
||||
.token.url, |
|
||||
.language-css .token.string, |
|
||||
.style .token.string { |
|
||||
color: #9a6e3a; |
|
||||
background: hsla(0, 0%, 100%, 0.5); |
|
||||
} |
|
||||
.token.atrule, |
|
||||
.token.attr-value, |
|
||||
.token.keyword { |
|
||||
color: #07a; |
|
||||
} |
|
||||
.token.function, |
|
||||
.token.class-name { |
|
||||
color: #DD4A68; |
|
||||
} |
|
||||
.token.regex, |
|
||||
.token.important, |
|
||||
.token.variable { |
|
||||
color: #e90; |
|
||||
} |
|
||||
.token.important, |
|
||||
.token.bold { |
|
||||
font-weight: bold; |
|
||||
} |
|
||||
.token.italic { |
|
||||
font-style: italic; |
|
||||
} |
|
||||
.token.entity { |
|
||||
cursor: help; |
|
||||
} |
|
||||
/* stylelint-enable */ |
|
||||
.mce-content-body { |
|
||||
overflow-wrap: break-word; |
|
||||
word-wrap: break-word; |
|
||||
} |
|
||||
.mce-content-body .mce-visual-caret { |
|
||||
background-color: black; |
|
||||
background-color: currentColor; |
|
||||
position: absolute; |
|
||||
} |
|
||||
.mce-content-body .mce-visual-caret-hidden { |
|
||||
display: none; |
|
||||
} |
|
||||
.mce-content-body *[data-mce-caret] { |
|
||||
left: -1000px; |
|
||||
margin: 0; |
|
||||
padding: 0; |
|
||||
position: absolute; |
|
||||
right: auto; |
|
||||
top: 0; |
|
||||
} |
|
||||
.mce-content-body .mce-offscreen-selection { |
|
||||
left: -2000000px; |
|
||||
max-width: 1000000px; |
|
||||
position: absolute; |
|
||||
} |
|
||||
.mce-content-body *[contentEditable=false] { |
|
||||
cursor: default; |
|
||||
} |
|
||||
.mce-content-body *[contentEditable=true] { |
|
||||
cursor: text; |
|
||||
} |
|
||||
.tox-cursor-format-painter { |
|
||||
cursor: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"), default; |
|
||||
} |
|
||||
.mce-content-body figure.align-left { |
|
||||
float: left; |
|
||||
} |
|
||||
.mce-content-body figure.align-right { |
|
||||
float: right; |
|
||||
} |
|
||||
.mce-content-body figure.image.align-center { |
|
||||
display: table; |
|
||||
margin-left: auto; |
|
||||
margin-right: auto; |
|
||||
} |
|
||||
.mce-preview-object { |
|
||||
border: 1px solid gray; |
|
||||
display: inline-block; |
|
||||
line-height: 0; |
|
||||
margin: 0 2px 0 2px; |
|
||||
position: relative; |
|
||||
} |
|
||||
.mce-preview-object .mce-shim { |
|
||||
background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); |
|
||||
height: 100%; |
|
||||
left: 0; |
|
||||
position: absolute; |
|
||||
top: 0; |
|
||||
width: 100%; |
|
||||
} |
|
||||
.mce-preview-object[data-mce-selected="2"] .mce-shim { |
|
||||
display: none; |
|
||||
} |
|
||||
.mce-object { |
|
||||
background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center; |
|
||||
border: 1px dashed #aaa; |
|
||||
} |
|
||||
.mce-pagebreak { |
|
||||
border: 1px dashed #aaa; |
|
||||
cursor: default; |
|
||||
display: block; |
|
||||
height: 5px; |
|
||||
margin-top: 15px; |
|
||||
page-break-before: always; |
|
||||
width: 100%; |
|
||||
} |
|
||||
@media print { |
|
||||
.mce-pagebreak { |
|
||||
border: 0; |
|
||||
} |
|
||||
} |
|
||||
.tiny-pageembed .mce-shim { |
|
||||
background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); |
|
||||
height: 100%; |
|
||||
left: 0; |
|
||||
position: absolute; |
|
||||
top: 0; |
|
||||
width: 100%; |
|
||||
} |
|
||||
.tiny-pageembed[data-mce-selected="2"] .mce-shim { |
|
||||
display: none; |
|
||||
} |
|
||||
.tiny-pageembed { |
|
||||
display: inline-block; |
|
||||
position: relative; |
|
||||
} |
|
||||
.tiny-pageembed--21by9, |
|
||||
.tiny-pageembed--16by9, |
|
||||
.tiny-pageembed--4by3, |
|
||||
.tiny-pageembed--1by1 { |
|
||||
display: block; |
|
||||
overflow: hidden; |
|
||||
padding: 0; |
|
||||
position: relative; |
|
||||
width: 100%; |
|
||||
} |
|
||||
.tiny-pageembed--21by9 { |
|
||||
padding-top: 42.857143%; |
|
||||
} |
|
||||
.tiny-pageembed--16by9 { |
|
||||
padding-top: 56.25%; |
|
||||
} |
|
||||
.tiny-pageembed--4by3 { |
|
||||
padding-top: 75%; |
|
||||
} |
|
||||
.tiny-pageembed--1by1 { |
|
||||
padding-top: 100%; |
|
||||
} |
|
||||
.tiny-pageembed--21by9 iframe, |
|
||||
.tiny-pageembed--16by9 iframe, |
|
||||
.tiny-pageembed--4by3 iframe, |
|
||||
.tiny-pageembed--1by1 iframe { |
|
||||
border: 0; |
|
||||
height: 100%; |
|
||||
left: 0; |
|
||||
position: absolute; |
|
||||
top: 0; |
|
||||
width: 100%; |
|
||||
} |
|
||||
.mce-content-body[data-mce-placeholder] { |
|
||||
position: relative; |
|
||||
} |
|
||||
.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before { |
|
||||
color: rgba(34, 47, 62, 0.7); |
|
||||
content: attr(data-mce-placeholder); |
|
||||
position: absolute; |
|
||||
} |
|
||||
.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before { |
|
||||
left: 1px; |
|
||||
} |
|
||||
.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before { |
|
||||
right: 1px; |
|
||||
} |
|
||||
.mce-content-body div.mce-resizehandle { |
|
||||
background-color: #4099ff; |
|
||||
border-color: #4099ff; |
|
||||
border-style: solid; |
|
||||
border-width: 1px; |
|
||||
box-sizing: border-box; |
|
||||
height: 10px; |
|
||||
position: absolute; |
|
||||
width: 10px; |
|
||||
z-index: 10000; |
|
||||
} |
|
||||
.mce-content-body div.mce-resizehandle:hover { |
|
||||
background-color: #4099ff; |
|
||||
} |
|
||||
.mce-content-body div.mce-resizehandle:nth-of-type(1) { |
|
||||
cursor: nwse-resize; |
|
||||
} |
|
||||
.mce-content-body div.mce-resizehandle:nth-of-type(2) { |
|
||||
cursor: nesw-resize; |
|
||||
} |
|
||||
.mce-content-body div.mce-resizehandle:nth-of-type(3) { |
|
||||
cursor: nwse-resize; |
|
||||
} |
|
||||
.mce-content-body div.mce-resizehandle:nth-of-type(4) { |
|
||||
cursor: nesw-resize; |
|
||||
} |
|
||||
.mce-content-body .mce-clonedresizable { |
|
||||
opacity: 0.5; |
|
||||
outline: 1px dashed black; |
|
||||
position: absolute; |
|
||||
z-index: 10000; |
|
||||
} |
|
||||
.mce-content-body .mce-resize-helper { |
|
||||
background: #555; |
|
||||
background: rgba(0, 0, 0, 0.75); |
|
||||
border: 1px; |
|
||||
border-radius: 3px; |
|
||||
color: white; |
|
||||
display: none; |
|
||||
font-family: sans-serif; |
|
||||
font-size: 12px; |
|
||||
line-height: 14px; |
|
||||
margin: 5px 10px; |
|
||||
padding: 5px; |
|
||||
position: absolute; |
|
||||
white-space: nowrap; |
|
||||
z-index: 10001; |
|
||||
} |
|
||||
.tox-rtc-user-selection { |
|
||||
position: relative; |
|
||||
} |
|
||||
.tox-rtc-user-cursor { |
|
||||
bottom: 0; |
|
||||
cursor: default; |
|
||||
position: absolute; |
|
||||
top: 0; |
|
||||
width: 2px; |
|
||||
} |
|
||||
.tox-rtc-user-cursor::before { |
|
||||
background-color: inherit; |
|
||||
border-radius: 50%; |
|
||||
content: ''; |
|
||||
display: block; |
|
||||
height: 8px; |
|
||||
position: absolute; |
|
||||
right: -3px; |
|
||||
top: -3px; |
|
||||
width: 8px; |
|
||||
} |
|
||||
.tox-rtc-user-cursor:hover::after { |
|
||||
background-color: inherit; |
|
||||
border-radius: 100px; |
|
||||
box-sizing: border-box; |
|
||||
color: #fff; |
|
||||
content: attr(data-user); |
|
||||
display: block; |
|
||||
font-size: 12px; |
|
||||
font-weight: bold; |
|
||||
left: -5px; |
|
||||
min-height: 8px; |
|
||||
min-width: 8px; |
|
||||
padding: 0 12px; |
|
||||
position: absolute; |
|
||||
top: -11px; |
|
||||
white-space: nowrap; |
|
||||
z-index: 1000; |
|
||||
} |
|
||||
.tox-rtc-user-selection--1 .tox-rtc-user-cursor { |
|
||||
background-color: #2dc26b; |
|
||||
} |
|
||||
.tox-rtc-user-selection--2 .tox-rtc-user-cursor { |
|
||||
background-color: #e03e2d; |
|
||||
} |
|
||||
.tox-rtc-user-selection--3 .tox-rtc-user-cursor { |
|
||||
background-color: #f1c40f; |
|
||||
} |
|
||||
.tox-rtc-user-selection--4 .tox-rtc-user-cursor { |
|
||||
background-color: #3598db; |
|
||||
} |
|
||||
.tox-rtc-user-selection--5 .tox-rtc-user-cursor { |
|
||||
background-color: #b96ad9; |
|
||||
} |
|
||||
.tox-rtc-user-selection--6 .tox-rtc-user-cursor { |
|
||||
background-color: #e67e23; |
|
||||
} |
|
||||
.tox-rtc-user-selection--7 .tox-rtc-user-cursor { |
|
||||
background-color: #aaa69d; |
|
||||
} |
|
||||
.tox-rtc-user-selection--8 .tox-rtc-user-cursor { |
|
||||
background-color: #f368e0; |
|
||||
} |
|
||||
.tox-rtc-remote-image { |
|
||||
background: #eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center; |
|
||||
border: 1px solid #ccc; |
|
||||
min-height: 240px; |
|
||||
min-width: 320px; |
|
||||
} |
|
||||
.mce-match-marker { |
|
||||
background: #aaa; |
|
||||
color: #fff; |
|
||||
} |
|
||||
.mce-match-marker-selected { |
|
||||
background: #39f; |
|
||||
color: #fff; |
|
||||
} |
|
||||
.mce-match-marker-selected::-moz-selection { |
|
||||
background: #39f; |
|
||||
color: #fff; |
|
||||
} |
|
||||
.mce-match-marker-selected::selection { |
|
||||
background: #39f; |
|
||||
color: #fff; |
|
||||
} |
|
||||
.mce-content-body img[data-mce-selected], |
|
||||
.mce-content-body table[data-mce-selected] { |
|
||||
outline: 3px solid #b4d7ff; |
|
||||
} |
|
||||
.mce-content-body hr[data-mce-selected] { |
|
||||
outline: 3px solid #b4d7ff; |
|
||||
outline-offset: 1px; |
|
||||
} |
|
||||
.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus { |
|
||||
outline: 3px solid #b4d7ff; |
|
||||
} |
|
||||
.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover { |
|
||||
outline: 3px solid #b4d7ff; |
|
||||
} |
|
||||
.mce-content-body *[contentEditable=false][data-mce-selected] { |
|
||||
cursor: not-allowed; |
|
||||
outline: 3px solid #b4d7ff; |
|
||||
} |
|
||||
.mce-content-body.mce-content-readonly *[contentEditable=true]:focus, |
|
||||
.mce-content-body.mce-content-readonly *[contentEditable=true]:hover { |
|
||||
outline: none; |
|
||||
} |
|
||||
.mce-content-body *[data-mce-selected="inline-boundary"] { |
|
||||
background-color: #b4d7ff; |
|
||||
} |
|
||||
.mce-content-body .mce-edit-focus { |
|
||||
outline: 3px solid #b4d7ff; |
|
||||
} |
|
||||
.mce-content-body td[data-mce-selected], |
|
||||
.mce-content-body th[data-mce-selected] { |
|
||||
background-color: #b4d7ff !important; |
|
||||
} |
|
||||
.mce-content-body td[data-mce-selected]::-moz-selection, |
|
||||
.mce-content-body th[data-mce-selected]::-moz-selection { |
|
||||
background: none; |
|
||||
} |
|
||||
.mce-content-body td[data-mce-selected]::selection, |
|
||||
.mce-content-body th[data-mce-selected]::selection { |
|
||||
background: none; |
|
||||
} |
|
||||
.mce-content-body td[data-mce-selected] *, |
|
||||
.mce-content-body th[data-mce-selected] * { |
|
||||
-webkit-touch-callout: none; |
|
||||
-webkit-user-select: none; |
|
||||
-moz-user-select: none; |
|
||||
-ms-user-select: none; |
|
||||
user-select: none; |
|
||||
} |
|
||||
.mce-content-body img::-moz-selection { |
|
||||
background: none; |
|
||||
} |
|
||||
.mce-content-body img::selection { |
|
||||
background: none; |
|
||||
} |
|
||||
.ephox-snooker-resizer-bar { |
|
||||
background-color: #b4d7ff; |
|
||||
opacity: 0; |
|
||||
-webkit-user-select: none; |
|
||||
-moz-user-select: none; |
|
||||
-ms-user-select: none; |
|
||||
user-select: none; |
|
||||
} |
|
||||
.ephox-snooker-resizer-cols { |
|
||||
cursor: col-resize; |
|
||||
} |
|
||||
.ephox-snooker-resizer-rows { |
|
||||
cursor: row-resize; |
|
||||
} |
|
||||
.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging { |
|
||||
opacity: 1; |
|
||||
} |
|
||||
.mce-spellchecker-word { |
|
||||
background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A"); |
|
||||
background-position: 0 calc(100% + 1px); |
|
||||
background-repeat: repeat-x; |
|
||||
background-size: auto 6px; |
|
||||
cursor: default; |
|
||||
height: 2rem; |
|
||||
} |
|
||||
.mce-spellchecker-grammar { |
|
||||
background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A"); |
|
||||
background-position: 0 calc(100% + 1px); |
|
||||
background-repeat: repeat-x; |
|
||||
background-size: auto 6px; |
|
||||
cursor: default; |
|
||||
} |
|
||||
.mce-toc { |
|
||||
border: 1px solid gray; |
|
||||
} |
|
||||
.mce-toc h2 { |
|
||||
margin: 4px; |
|
||||
} |
|
||||
.mce-toc li { |
|
||||
list-style-type: none; |
|
||||
} |
|
||||
.mce-item-table, |
|
||||
.mce-item-table td, |
|
||||
.mce-item-table th, |
|
||||
.mce-item-table caption { |
|
||||
border: 1px dashed #bbb; |
|
||||
} |
|
||||
.mce-visualblocks p, |
|
||||
.mce-visualblocks h1, |
|
||||
.mce-visualblocks h2, |
|
||||
.mce-visualblocks h3, |
|
||||
.mce-visualblocks h4, |
|
||||
.mce-visualblocks h5, |
|
||||
.mce-visualblocks h6, |
|
||||
.mce-visualblocks div:not([data-mce-bogus]), |
|
||||
.mce-visualblocks section, |
|
||||
.mce-visualblocks article, |
|
||||
.mce-visualblocks blockquote, |
|
||||
.mce-visualblocks address, |
|
||||
.mce-visualblocks pre, |
|
||||
.mce-visualblocks figure, |
|
||||
.mce-visualblocks figcaption, |
|
||||
.mce-visualblocks hgroup, |
|
||||
.mce-visualblocks aside, |
|
||||
.mce-visualblocks ul, |
|
||||
.mce-visualblocks ol, |
|
||||
.mce-visualblocks dl { |
|
||||
background-repeat: no-repeat; |
|
||||
border: 1px dashed #bbb; |
|
||||
margin-left: 3px; |
|
||||
padding-top: 10px; |
|
||||
} |
|
||||
.mce-visualblocks p { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7); |
|
||||
} |
|
||||
.mce-visualblocks h1 { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==); |
|
||||
} |
|
||||
.mce-visualblocks h2 { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==); |
|
||||
} |
|
||||
.mce-visualblocks h3 { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7); |
|
||||
} |
|
||||
.mce-visualblocks h4 { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==); |
|
||||
} |
|
||||
.mce-visualblocks h5 { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==); |
|
||||
} |
|
||||
.mce-visualblocks h6 { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==); |
|
||||
} |
|
||||
.mce-visualblocks div:not([data-mce-bogus]) { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7); |
|
||||
} |
|
||||
.mce-visualblocks section { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=); |
|
||||
} |
|
||||
.mce-visualblocks article { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7); |
|
||||
} |
|
||||
.mce-visualblocks blockquote { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7); |
|
||||
} |
|
||||
.mce-visualblocks address { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=); |
|
||||
} |
|
||||
.mce-visualblocks pre { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==); |
|
||||
} |
|
||||
.mce-visualblocks figure { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7); |
|
||||
} |
|
||||
.mce-visualblocks figcaption { |
|
||||
border: 1px dashed #bbb; |
|
||||
} |
|
||||
.mce-visualblocks hgroup { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7); |
|
||||
} |
|
||||
.mce-visualblocks aside { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=); |
|
||||
} |
|
||||
.mce-visualblocks ul { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==); |
|
||||
} |
|
||||
.mce-visualblocks ol { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==); |
|
||||
} |
|
||||
.mce-visualblocks dl { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==); |
|
||||
} |
|
||||
.mce-visualblocks:not([dir=rtl]) p, |
|
||||
.mce-visualblocks:not([dir=rtl]) h1, |
|
||||
.mce-visualblocks:not([dir=rtl]) h2, |
|
||||
.mce-visualblocks:not([dir=rtl]) h3, |
|
||||
.mce-visualblocks:not([dir=rtl]) h4, |
|
||||
.mce-visualblocks:not([dir=rtl]) h5, |
|
||||
.mce-visualblocks:not([dir=rtl]) h6, |
|
||||
.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]), |
|
||||
.mce-visualblocks:not([dir=rtl]) section, |
|
||||
.mce-visualblocks:not([dir=rtl]) article, |
|
||||
.mce-visualblocks:not([dir=rtl]) blockquote, |
|
||||
.mce-visualblocks:not([dir=rtl]) address, |
|
||||
.mce-visualblocks:not([dir=rtl]) pre, |
|
||||
.mce-visualblocks:not([dir=rtl]) figure, |
|
||||
.mce-visualblocks:not([dir=rtl]) figcaption, |
|
||||
.mce-visualblocks:not([dir=rtl]) hgroup, |
|
||||
.mce-visualblocks:not([dir=rtl]) aside, |
|
||||
.mce-visualblocks:not([dir=rtl]) ul, |
|
||||
.mce-visualblocks:not([dir=rtl]) ol, |
|
||||
.mce-visualblocks:not([dir=rtl]) dl { |
|
||||
margin-left: 3px; |
|
||||
} |
|
||||
.mce-visualblocks[dir=rtl] p, |
|
||||
.mce-visualblocks[dir=rtl] h1, |
|
||||
.mce-visualblocks[dir=rtl] h2, |
|
||||
.mce-visualblocks[dir=rtl] h3, |
|
||||
.mce-visualblocks[dir=rtl] h4, |
|
||||
.mce-visualblocks[dir=rtl] h5, |
|
||||
.mce-visualblocks[dir=rtl] h6, |
|
||||
.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]), |
|
||||
.mce-visualblocks[dir=rtl] section, |
|
||||
.mce-visualblocks[dir=rtl] article, |
|
||||
.mce-visualblocks[dir=rtl] blockquote, |
|
||||
.mce-visualblocks[dir=rtl] address, |
|
||||
.mce-visualblocks[dir=rtl] pre, |
|
||||
.mce-visualblocks[dir=rtl] figure, |
|
||||
.mce-visualblocks[dir=rtl] figcaption, |
|
||||
.mce-visualblocks[dir=rtl] hgroup, |
|
||||
.mce-visualblocks[dir=rtl] aside, |
|
||||
.mce-visualblocks[dir=rtl] ul, |
|
||||
.mce-visualblocks[dir=rtl] ol, |
|
||||
.mce-visualblocks[dir=rtl] dl { |
|
||||
background-position-x: right; |
|
||||
margin-right: 3px; |
|
||||
} |
|
||||
.mce-nbsp, |
|
||||
.mce-shy { |
|
||||
background: #aaa; |
|
||||
} |
|
||||
.mce-shy::after { |
|
||||
content: '-'; |
|
||||
} |
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,29 +0,0 @@ |
|||||
/** |
|
||||
* Copyright (c) Tiny Technologies, Inc. All rights reserved. |
|
||||
* Licensed under the LGPL or a commercial license. |
|
||||
* For LGPL see License.txt in the project root for license information. |
|
||||
* For commercial licenses see https://www.tiny.cloud/ |
|
||||
*/ |
|
||||
.tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection { |
|
||||
/* Note: this file is used inside the content, so isn't part of theming */ |
|
||||
background-color: green; |
|
||||
display: inline-block; |
|
||||
opacity: 0.5; |
|
||||
position: absolute; |
|
||||
} |
|
||||
body { |
|
||||
-webkit-text-size-adjust: none; |
|
||||
} |
|
||||
body img { |
|
||||
/* this is related to the content margin */ |
|
||||
max-width: 96vw; |
|
||||
} |
|
||||
body table img { |
|
||||
max-width: 95%; |
|
||||
} |
|
||||
body { |
|
||||
font-family: sans-serif; |
|
||||
} |
|
||||
table { |
|
||||
border-collapse: collapse; |
|
||||
} |
|
||||
@ -1,7 +0,0 @@ |
|||||
/** |
|
||||
* Copyright (c) Tiny Technologies, Inc. All rights reserved. |
|
||||
* Licensed under the LGPL or a commercial license. |
|
||||
* For LGPL see License.txt in the project root for license information. |
|
||||
* For commercial licenses see https://www.tiny.cloud/ |
|
||||
*/ |
|
||||
.tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection{background-color:green;display:inline-block;opacity:.5;position:absolute}body{-webkit-text-size-adjust:none}body img{max-width:96vw}body table img{max-width:95%}body{font-family:sans-serif}table{border-collapse:collapse} |
|
||||
Binary file not shown.
File diff suppressed because it is too large
File diff suppressed because one or more lines are too long
@ -1,673 +0,0 @@ |
|||||
/** |
|
||||
* Copyright (c) Tiny Technologies, Inc. All rights reserved. |
|
||||
* Licensed under the LGPL or a commercial license. |
|
||||
* For LGPL see License.txt in the project root for license information. |
|
||||
* For commercial licenses see https://www.tiny.cloud/ |
|
||||
*/ |
|
||||
/* RESET all the things! */ |
|
||||
.tinymce-mobile-outer-container { |
|
||||
all: initial; |
|
||||
display: block; |
|
||||
} |
|
||||
.tinymce-mobile-outer-container * { |
|
||||
border: 0; |
|
||||
box-sizing: initial; |
|
||||
cursor: inherit; |
|
||||
float: none; |
|
||||
line-height: 1; |
|
||||
margin: 0; |
|
||||
outline: 0; |
|
||||
padding: 0; |
|
||||
-webkit-tap-highlight-color: transparent; |
|
||||
/* TBIO-3691, stop the gray flicker on touch. */ |
|
||||
text-shadow: none; |
|
||||
white-space: nowrap; |
|
||||
} |
|
||||
.tinymce-mobile-icon-arrow-back::before { |
|
||||
content: "\e5cd"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-image::before { |
|
||||
content: "\e412"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-cancel-circle::before { |
|
||||
content: "\e5c9"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-full-dot::before { |
|
||||
content: "\e061"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-align-center::before { |
|
||||
content: "\e234"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-align-left::before { |
|
||||
content: "\e236"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-align-right::before { |
|
||||
content: "\e237"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-bold::before { |
|
||||
content: "\e238"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-italic::before { |
|
||||
content: "\e23f"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-unordered-list::before { |
|
||||
content: "\e241"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-ordered-list::before { |
|
||||
content: "\e242"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-font-size::before { |
|
||||
content: "\e245"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-underline::before { |
|
||||
content: "\e249"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-link::before { |
|
||||
content: "\e157"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-unlink::before { |
|
||||
content: "\eca2"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-color::before { |
|
||||
content: "\e891"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-previous::before { |
|
||||
content: "\e314"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-next::before { |
|
||||
content: "\e315"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-large-font::before, |
|
||||
.tinymce-mobile-icon-style-formats::before { |
|
||||
content: "\e264"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-undo::before { |
|
||||
content: "\e166"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-redo::before { |
|
||||
content: "\e15a"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-removeformat::before { |
|
||||
content: "\e239"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-small-font::before { |
|
||||
content: "\e906"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-readonly-back::before, |
|
||||
.tinymce-mobile-format-matches::after { |
|
||||
content: "\e5ca"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-small-heading::before { |
|
||||
content: "small"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-large-heading::before { |
|
||||
content: "large"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-small-heading::before, |
|
||||
.tinymce-mobile-icon-large-heading::before { |
|
||||
font-family: sans-serif; |
|
||||
font-size: 80%; |
|
||||
} |
|
||||
.tinymce-mobile-mask-edit-icon::before { |
|
||||
content: "\e254"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-back::before { |
|
||||
content: "\e5c4"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-heading::before { |
|
||||
/* TODO: Translate */ |
|
||||
content: "Headings"; |
|
||||
font-family: sans-serif; |
|
||||
font-size: 80%; |
|
||||
font-weight: bold; |
|
||||
} |
|
||||
.tinymce-mobile-icon-h1::before { |
|
||||
content: "H1"; |
|
||||
font-weight: bold; |
|
||||
} |
|
||||
.tinymce-mobile-icon-h2::before { |
|
||||
content: "H2"; |
|
||||
font-weight: bold; |
|
||||
} |
|
||||
.tinymce-mobile-icon-h3::before { |
|
||||
content: "H3"; |
|
||||
font-weight: bold; |
|
||||
} |
|
||||
.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask { |
|
||||
align-items: center; |
|
||||
display: flex; |
|
||||
justify-content: center; |
|
||||
background: rgba(51, 51, 51, 0.5); |
|
||||
height: 100%; |
|
||||
position: absolute; |
|
||||
top: 0; |
|
||||
width: 100%; |
|
||||
} |
|
||||
.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container { |
|
||||
align-items: center; |
|
||||
border-radius: 50%; |
|
||||
display: flex; |
|
||||
flex-direction: column; |
|
||||
font-family: sans-serif; |
|
||||
font-size: 1em; |
|
||||
justify-content: space-between; |
|
||||
} |
|
||||
.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .mixin-menu-item { |
|
||||
align-items: center; |
|
||||
display: flex; |
|
||||
justify-content: center; |
|
||||
border-radius: 50%; |
|
||||
height: 2.1em; |
|
||||
width: 2.1em; |
|
||||
} |
|
||||
.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section { |
|
||||
align-items: center; |
|
||||
display: flex; |
|
||||
justify-content: center; |
|
||||
flex-direction: column; |
|
||||
font-size: 1em; |
|
||||
} |
|
||||
@media only screen and (min-device-width:700px) { |
|
||||
.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section { |
|
||||
font-size: 1.2em; |
|
||||
} |
|
||||
} |
|
||||
.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon { |
|
||||
align-items: center; |
|
||||
display: flex; |
|
||||
justify-content: center; |
|
||||
border-radius: 50%; |
|
||||
height: 2.1em; |
|
||||
width: 2.1em; |
|
||||
background-color: white; |
|
||||
color: #207ab7; |
|
||||
} |
|
||||
.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon::before { |
|
||||
content: "\e900"; |
|
||||
font-family: 'tinymce-mobile', sans-serif; |
|
||||
} |
|
||||
.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section:not(.tinymce-mobile-mask-tap-icon-selected) .tinymce-mobile-mask-tap-icon { |
|
||||
z-index: 2; |
|
||||
} |
|
||||
.tinymce-mobile-android-container.tinymce-mobile-android-maximized { |
|
||||
background: #ffffff; |
|
||||
border: none; |
|
||||
bottom: 0; |
|
||||
display: flex; |
|
||||
flex-direction: column; |
|
||||
left: 0; |
|
||||
position: fixed; |
|
||||
right: 0; |
|
||||
top: 0; |
|
||||
} |
|
||||
.tinymce-mobile-android-container:not(.tinymce-mobile-android-maximized) { |
|
||||
position: relative; |
|
||||
} |
|
||||
.tinymce-mobile-android-container .tinymce-mobile-editor-socket { |
|
||||
display: flex; |
|
||||
flex-grow: 1; |
|
||||
} |
|
||||
.tinymce-mobile-android-container .tinymce-mobile-editor-socket iframe { |
|
||||
display: flex !important; |
|
||||
flex-grow: 1; |
|
||||
height: auto !important; |
|
||||
} |
|
||||
.tinymce-mobile-android-scroll-reload { |
|
||||
overflow: hidden; |
|
||||
} |
|
||||
:not(.tinymce-mobile-readonly-mode) > .tinymce-mobile-android-selection-context-toolbar { |
|
||||
margin-top: 23px; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip { |
|
||||
background: #fff; |
|
||||
display: flex; |
|
||||
flex: 0 0 auto; |
|
||||
z-index: 1; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar { |
|
||||
align-items: center; |
|
||||
background-color: #fff; |
|
||||
border-bottom: 1px solid #cccccc; |
|
||||
display: flex; |
|
||||
flex: 1; |
|
||||
height: 2.5em; |
|
||||
width: 100%; |
|
||||
/* Make it no larger than the toolstrip, so that it needs to scroll */ |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group { |
|
||||
align-items: center; |
|
||||
display: flex; |
|
||||
height: 100%; |
|
||||
flex-shrink: 1; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group > div { |
|
||||
align-items: center; |
|
||||
display: flex; |
|
||||
height: 100%; |
|
||||
flex: 1; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-exit-container { |
|
||||
background: #f44336; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-toolbar-scrollable-group { |
|
||||
flex-grow: 1; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item { |
|
||||
padding-left: 0.5em; |
|
||||
padding-right: 0.5em; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button { |
|
||||
align-items: center; |
|
||||
display: flex; |
|
||||
height: 80%; |
|
||||
margin-left: 2px; |
|
||||
margin-right: 2px; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button.tinymce-mobile-toolbar-button-selected { |
|
||||
background: #c8cbcf; |
|
||||
color: #cccccc; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:first-of-type, |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:last-of-type { |
|
||||
background: #207ab7; |
|
||||
color: #eceff1; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar { |
|
||||
/* Note, this file is imported inside .tinymce-mobile-context-toolbar, so that prefix is on everything here. */ |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group { |
|
||||
align-items: center; |
|
||||
display: flex; |
|
||||
height: 100%; |
|
||||
flex: 1; |
|
||||
padding-bottom: 0.4em; |
|
||||
padding-top: 0.4em; |
|
||||
/* Make any buttons appearing on the left and right display in the centre (e.g. color edges) */ |
|
||||
/* For widgets like the colour picker, use the whole height */ |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog { |
|
||||
display: flex; |
|
||||
min-height: 1.5em; |
|
||||
overflow: hidden; |
|
||||
padding-left: 0; |
|
||||
padding-right: 0; |
|
||||
position: relative; |
|
||||
width: 100%; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain { |
|
||||
display: flex; |
|
||||
height: 100%; |
|
||||
transition: left cubic-bezier(0.4, 0, 1, 1) 0.15s; |
|
||||
width: 100%; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen { |
|
||||
display: flex; |
|
||||
flex: 0 0 auto; |
|
||||
justify-content: space-between; |
|
||||
width: 100%; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen input { |
|
||||
font-family: Sans-serif; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container { |
|
||||
display: flex; |
|
||||
flex-grow: 1; |
|
||||
position: relative; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container .tinymce-mobile-input-container-x { |
|
||||
-ms-grid-row-align: center; |
|
||||
align-self: center; |
|
||||
background: inherit; |
|
||||
border: none; |
|
||||
border-radius: 50%; |
|
||||
color: #888; |
|
||||
font-size: 0.6em; |
|
||||
font-weight: bold; |
|
||||
height: 100%; |
|
||||
padding-right: 2px; |
|
||||
position: absolute; |
|
||||
right: 0; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container.tinymce-mobile-input-container-empty .tinymce-mobile-input-container-x { |
|
||||
display: none; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous, |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next { |
|
||||
align-items: center; |
|
||||
display: flex; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous::before, |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next::before { |
|
||||
align-items: center; |
|
||||
display: flex; |
|
||||
font-weight: bold; |
|
||||
height: 100%; |
|
||||
padding-left: 0.5em; |
|
||||
padding-right: 0.5em; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous.tinymce-mobile-toolbar-navigation-disabled::before, |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next.tinymce-mobile-toolbar-navigation-disabled::before { |
|
||||
visibility: hidden; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item { |
|
||||
color: #cccccc; |
|
||||
font-size: 10px; |
|
||||
line-height: 10px; |
|
||||
margin: 0 2px; |
|
||||
padding-top: 3px; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item.tinymce-mobile-dot-active { |
|
||||
color: #c8cbcf; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-font::before, |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-heading::before { |
|
||||
margin-left: 0.5em; |
|
||||
margin-right: 0.9em; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-font::before, |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-heading::before { |
|
||||
margin-left: 0.9em; |
|
||||
margin-right: 0.5em; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider { |
|
||||
display: flex; |
|
||||
flex: 1; |
|
||||
margin-left: 0; |
|
||||
margin-right: 0; |
|
||||
padding: 0.28em 0; |
|
||||
position: relative; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container { |
|
||||
align-items: center; |
|
||||
display: flex; |
|
||||
flex-grow: 1; |
|
||||
height: 100%; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container .tinymce-mobile-slider-size-line { |
|
||||
background: #cccccc; |
|
||||
display: flex; |
|
||||
flex: 1; |
|
||||
height: 0.2em; |
|
||||
margin-bottom: 0.3em; |
|
||||
margin-top: 0.3em; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container { |
|
||||
padding-left: 2em; |
|
||||
padding-right: 2em; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container { |
|
||||
align-items: center; |
|
||||
display: flex; |
|
||||
flex-grow: 1; |
|
||||
height: 100%; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container .tinymce-mobile-slider-gradient { |
|
||||
background: linear-gradient(to right, hsl(0, 100%, 50%) 0%, hsl(60, 100%, 50%) 17%, hsl(120, 100%, 50%) 33%, hsl(180, 100%, 50%) 50%, hsl(240, 100%, 50%) 67%, hsl(300, 100%, 50%) 83%, hsl(0, 100%, 50%) 100%); |
|
||||
display: flex; |
|
||||
flex: 1; |
|
||||
height: 0.2em; |
|
||||
margin-bottom: 0.3em; |
|
||||
margin-top: 0.3em; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-black { |
|
||||
/* Not part of theming */ |
|
||||
background: black; |
|
||||
height: 0.2em; |
|
||||
margin-bottom: 0.3em; |
|
||||
margin-top: 0.3em; |
|
||||
width: 1.2em; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-white { |
|
||||
/* Not part of theming */ |
|
||||
background: white; |
|
||||
height: 0.2em; |
|
||||
margin-bottom: 0.3em; |
|
||||
margin-top: 0.3em; |
|
||||
width: 1.2em; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb { |
|
||||
/* vertically centering trick (margin: auto, top: 0, bottom: 0). On iOS and Safari, if you leave |
|
||||
* out these values, then it shows the thumb at the top of the spectrum. This is probably because it is |
|
||||
* absolutely positioned with only a left value, and not a top. Note, on Chrome it seems to be fine without |
|
||||
* this approach. |
|
||||
*/ |
|
||||
align-items: center; |
|
||||
background-clip: padding-box; |
|
||||
background-color: #455a64; |
|
||||
border: 0.5em solid rgba(136, 136, 136, 0); |
|
||||
border-radius: 3em; |
|
||||
bottom: 0; |
|
||||
color: #fff; |
|
||||
display: flex; |
|
||||
height: 0.5em; |
|
||||
justify-content: center; |
|
||||
left: -10px; |
|
||||
margin: auto; |
|
||||
position: absolute; |
|
||||
top: 0; |
|
||||
transition: border 120ms cubic-bezier(0.39, 0.58, 0.57, 1); |
|
||||
width: 0.5em; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb.tinymce-mobile-thumb-active { |
|
||||
border: 0.5em solid rgba(136, 136, 136, 0.39); |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper, |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group > div { |
|
||||
align-items: center; |
|
||||
display: flex; |
|
||||
height: 100%; |
|
||||
flex: 1; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper { |
|
||||
flex-direction: column; |
|
||||
justify-content: center; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item { |
|
||||
align-items: center; |
|
||||
display: flex; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item:not(.tinymce-mobile-serialised-dialog) { |
|
||||
height: 100%; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-container { |
|
||||
display: flex; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input { |
|
||||
background: #ffffff; |
|
||||
border: none; |
|
||||
border-radius: 0; |
|
||||
color: #455a64; |
|
||||
flex-grow: 1; |
|
||||
font-size: 0.85em; |
|
||||
padding-bottom: 0.1em; |
|
||||
padding-left: 5px; |
|
||||
padding-top: 0.1em; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::-webkit-input-placeholder { |
|
||||
/* WebKit, Blink, Edge */ |
|
||||
color: #888; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::placeholder { |
|
||||
/* WebKit, Blink, Edge */ |
|
||||
color: #888; |
|
||||
} |
|
||||
/* dropup */ |
|
||||
.tinymce-mobile-dropup { |
|
||||
background: white; |
|
||||
display: flex; |
|
||||
overflow: hidden; |
|
||||
width: 100%; |
|
||||
} |
|
||||
.tinymce-mobile-dropup.tinymce-mobile-dropup-shrinking { |
|
||||
transition: height 0.3s ease-out; |
|
||||
} |
|
||||
.tinymce-mobile-dropup.tinymce-mobile-dropup-growing { |
|
||||
transition: height 0.3s ease-in; |
|
||||
} |
|
||||
.tinymce-mobile-dropup.tinymce-mobile-dropup-closed { |
|
||||
flex-grow: 0; |
|
||||
} |
|
||||
.tinymce-mobile-dropup.tinymce-mobile-dropup-open:not(.tinymce-mobile-dropup-growing) { |
|
||||
flex-grow: 1; |
|
||||
} |
|
||||
/* TODO min-height for device size and orientation */ |
|
||||
.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed) { |
|
||||
min-height: 200px; |
|
||||
} |
|
||||
@media only screen and (orientation: landscape) { |
|
||||
.tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed) { |
|
||||
min-height: 200px; |
|
||||
} |
|
||||
} |
|
||||
@media only screen and (min-device-width : 320px) and (max-device-width : 568px) and (orientation : landscape) { |
|
||||
.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed) { |
|
||||
min-height: 150px; |
|
||||
} |
|
||||
} |
|
||||
/* styles menu */ |
|
||||
.tinymce-mobile-styles-menu { |
|
||||
font-family: sans-serif; |
|
||||
outline: 4px solid black; |
|
||||
overflow: hidden; |
|
||||
position: relative; |
|
||||
width: 100%; |
|
||||
} |
|
||||
.tinymce-mobile-styles-menu [role="menu"] { |
|
||||
display: flex; |
|
||||
flex-direction: column; |
|
||||
height: 100%; |
|
||||
position: absolute; |
|
||||
width: 100%; |
|
||||
} |
|
||||
.tinymce-mobile-styles-menu [role="menu"].transitioning { |
|
||||
transition: transform 0.5s ease-in-out; |
|
||||
} |
|
||||
.tinymce-mobile-styles-menu .tinymce-mobile-styles-item { |
|
||||
border-bottom: 1px solid #ddd; |
|
||||
color: #455a64; |
|
||||
cursor: pointer; |
|
||||
display: flex; |
|
||||
padding: 1em 1em; |
|
||||
position: relative; |
|
||||
} |
|
||||
.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser .tinymce-mobile-styles-collapse-icon::before { |
|
||||
color: #455a64; |
|
||||
content: "\e314"; |
|
||||
font-family: 'tinymce-mobile', sans-serif; |
|
||||
} |
|
||||
.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-styles-item-is-menu::after { |
|
||||
color: #455a64; |
|
||||
content: "\e315"; |
|
||||
font-family: 'tinymce-mobile', sans-serif; |
|
||||
padding-left: 1em; |
|
||||
padding-right: 1em; |
|
||||
position: absolute; |
|
||||
right: 0; |
|
||||
} |
|
||||
.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-format-matches::after { |
|
||||
font-family: 'tinymce-mobile', sans-serif; |
|
||||
padding-left: 1em; |
|
||||
padding-right: 1em; |
|
||||
position: absolute; |
|
||||
right: 0; |
|
||||
} |
|
||||
.tinymce-mobile-styles-menu .tinymce-mobile-styles-separator, |
|
||||
.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser { |
|
||||
align-items: center; |
|
||||
background: #fff; |
|
||||
border-top: #455a64; |
|
||||
color: #455a64; |
|
||||
display: flex; |
|
||||
min-height: 2.5em; |
|
||||
padding-left: 1em; |
|
||||
padding-right: 1em; |
|
||||
} |
|
||||
.tinymce-mobile-styles-menu [data-transitioning-destination="before"][data-transitioning-state], |
|
||||
.tinymce-mobile-styles-menu [data-transitioning-state="before"] { |
|
||||
transform: translate(-100%); |
|
||||
} |
|
||||
.tinymce-mobile-styles-menu [data-transitioning-destination="current"][data-transitioning-state], |
|
||||
.tinymce-mobile-styles-menu [data-transitioning-state="current"] { |
|
||||
transform: translate(0%); |
|
||||
} |
|
||||
.tinymce-mobile-styles-menu [data-transitioning-destination="after"][data-transitioning-state], |
|
||||
.tinymce-mobile-styles-menu [data-transitioning-state="after"] { |
|
||||
transform: translate(100%); |
|
||||
} |
|
||||
@font-face { |
|
||||
font-family: 'tinymce-mobile'; |
|
||||
font-style: normal; |
|
||||
font-weight: normal; |
|
||||
src: url('fonts/tinymce-mobile.woff?8x92w3') format('woff'); |
|
||||
} |
|
||||
@media (min-device-width: 700px) { |
|
||||
.tinymce-mobile-outer-container, |
|
||||
.tinymce-mobile-outer-container input { |
|
||||
font-size: 25px; |
|
||||
} |
|
||||
} |
|
||||
@media (max-device-width: 700px) { |
|
||||
.tinymce-mobile-outer-container, |
|
||||
.tinymce-mobile-outer-container input { |
|
||||
font-size: 18px; |
|
||||
} |
|
||||
} |
|
||||
.tinymce-mobile-icon { |
|
||||
font-family: 'tinymce-mobile', sans-serif; |
|
||||
} |
|
||||
.mixin-flex-and-centre { |
|
||||
align-items: center; |
|
||||
display: flex; |
|
||||
justify-content: center; |
|
||||
} |
|
||||
.mixin-flex-bar { |
|
||||
align-items: center; |
|
||||
display: flex; |
|
||||
height: 100%; |
|
||||
} |
|
||||
.tinymce-mobile-outer-container .tinymce-mobile-editor-socket iframe { |
|
||||
background-color: #fff; |
|
||||
width: 100%; |
|
||||
} |
|
||||
.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon { |
|
||||
/* Note, on the iPod touch in landscape, this isn't visible when the navbar appears */ |
|
||||
background-color: #207ab7; |
|
||||
border-radius: 50%; |
|
||||
bottom: 1em; |
|
||||
color: white; |
|
||||
font-size: 1em; |
|
||||
height: 2.1em; |
|
||||
position: fixed; |
|
||||
right: 2em; |
|
||||
width: 2.1em; |
|
||||
align-items: center; |
|
||||
display: flex; |
|
||||
justify-content: center; |
|
||||
} |
|
||||
@media only screen and (min-device-width:700px) { |
|
||||
.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon { |
|
||||
font-size: 1.2em; |
|
||||
} |
|
||||
} |
|
||||
.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket { |
|
||||
height: 300px; |
|
||||
overflow: hidden; |
|
||||
} |
|
||||
.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket iframe { |
|
||||
height: 100%; |
|
||||
} |
|
||||
.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-toolstrip { |
|
||||
display: none; |
|
||||
} |
|
||||
/* |
|
||||
Note, that if you don't include this (::-webkit-file-upload-button), the toolbar width gets |
|
||||
increased and the whole body becomes scrollable. It's important! |
|
||||
*/ |
|
||||
input[type="file"]::-webkit-file-upload-button { |
|
||||
display: none; |
|
||||
} |
|
||||
@media only screen and (min-device-width : 320px) and (max-device-width : 568px) and (orientation : landscape) { |
|
||||
.tinymce-mobile-ios-container .tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon { |
|
||||
bottom: 50%; |
|
||||
} |
|
||||
} |
|
||||
File diff suppressed because one or more lines are too long
@ -1,695 +0,0 @@ |
|||||
/** |
|
||||
* Copyright (c) Tiny Technologies, Inc. All rights reserved. |
|
||||
* Licensed under the LGPL or a commercial license. |
|
||||
* For LGPL see License.txt in the project root for license information. |
|
||||
* For commercial licenses see https://www.tiny.cloud/ |
|
||||
*/ |
|
||||
.mce-content-body .mce-item-anchor { |
|
||||
background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center; |
|
||||
cursor: default; |
|
||||
display: inline-block; |
|
||||
height: 12px !important; |
|
||||
padding: 0 2px; |
|
||||
-webkit-user-modify: read-only; |
|
||||
-moz-user-modify: read-only; |
|
||||
-webkit-user-select: all; |
|
||||
-moz-user-select: all; |
|
||||
-ms-user-select: all; |
|
||||
user-select: all; |
|
||||
width: 8px !important; |
|
||||
} |
|
||||
.mce-content-body .mce-item-anchor[data-mce-selected] { |
|
||||
outline-offset: 1px; |
|
||||
} |
|
||||
.tox-comments-visible .tox-comment { |
|
||||
background-color: #fff0b7; |
|
||||
} |
|
||||
.tox-comments-visible .tox-comment--active { |
|
||||
background-color: #ffe168; |
|
||||
} |
|
||||
.tox-checklist > li:not(.tox-checklist--hidden) { |
|
||||
list-style: none; |
|
||||
margin: 0.25em 0; |
|
||||
} |
|
||||
.tox-checklist > li:not(.tox-checklist--hidden)::before { |
|
||||
background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A"); |
|
||||
background-size: 100%; |
|
||||
content: ''; |
|
||||
cursor: pointer; |
|
||||
height: 1em; |
|
||||
margin-left: -1.5em; |
|
||||
margin-top: 0.125em; |
|
||||
position: absolute; |
|
||||
width: 1em; |
|
||||
} |
|
||||
.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before { |
|
||||
background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A"); |
|
||||
} |
|
||||
[dir=rtl] .tox-checklist > li:not(.tox-checklist--hidden)::before { |
|
||||
margin-left: 0; |
|
||||
margin-right: -1.5em; |
|
||||
} |
|
||||
/* stylelint-disable */ |
|
||||
/* http://prismjs.com/ */ |
|
||||
/** |
|
||||
* prism.js default theme for JavaScript, CSS and HTML |
|
||||
* Based on dabblet (http://dabblet.com) |
|
||||
* @author Lea Verou |
|
||||
*/ |
|
||||
code[class*="language-"], |
|
||||
pre[class*="language-"] { |
|
||||
color: black; |
|
||||
background: none; |
|
||||
text-shadow: 0 1px white; |
|
||||
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; |
|
||||
font-size: 1em; |
|
||||
text-align: left; |
|
||||
white-space: pre; |
|
||||
word-spacing: normal; |
|
||||
word-break: normal; |
|
||||
word-wrap: normal; |
|
||||
line-height: 1.5; |
|
||||
-moz-tab-size: 4; |
|
||||
tab-size: 4; |
|
||||
-webkit-hyphens: none; |
|
||||
-ms-hyphens: none; |
|
||||
hyphens: none; |
|
||||
} |
|
||||
pre[class*="language-"]::-moz-selection, |
|
||||
pre[class*="language-"] ::-moz-selection, |
|
||||
code[class*="language-"]::-moz-selection, |
|
||||
code[class*="language-"] ::-moz-selection { |
|
||||
text-shadow: none; |
|
||||
background: #b3d4fc; |
|
||||
} |
|
||||
pre[class*="language-"]::selection, |
|
||||
pre[class*="language-"] ::selection, |
|
||||
code[class*="language-"]::selection, |
|
||||
code[class*="language-"] ::selection { |
|
||||
text-shadow: none; |
|
||||
background: #b3d4fc; |
|
||||
} |
|
||||
@media print { |
|
||||
code[class*="language-"], |
|
||||
pre[class*="language-"] { |
|
||||
text-shadow: none; |
|
||||
} |
|
||||
} |
|
||||
/* Code blocks */ |
|
||||
pre[class*="language-"] { |
|
||||
padding: 1em; |
|
||||
margin: 0.5em 0; |
|
||||
overflow: auto; |
|
||||
} |
|
||||
:not(pre) > code[class*="language-"], |
|
||||
pre[class*="language-"] { |
|
||||
background: #f5f2f0; |
|
||||
} |
|
||||
/* Inline code */ |
|
||||
:not(pre) > code[class*="language-"] { |
|
||||
padding: 0.1em; |
|
||||
border-radius: 0.3em; |
|
||||
white-space: normal; |
|
||||
} |
|
||||
.token.comment, |
|
||||
.token.prolog, |
|
||||
.token.doctype, |
|
||||
.token.cdata { |
|
||||
color: slategray; |
|
||||
} |
|
||||
.token.punctuation { |
|
||||
color: #999; |
|
||||
} |
|
||||
.namespace { |
|
||||
opacity: 0.7; |
|
||||
} |
|
||||
.token.property, |
|
||||
.token.tag, |
|
||||
.token.boolean, |
|
||||
.token.number, |
|
||||
.token.constant, |
|
||||
.token.symbol, |
|
||||
.token.deleted { |
|
||||
color: #905; |
|
||||
} |
|
||||
.token.selector, |
|
||||
.token.attr-name, |
|
||||
.token.string, |
|
||||
.token.char, |
|
||||
.token.builtin, |
|
||||
.token.inserted { |
|
||||
color: #690; |
|
||||
} |
|
||||
.token.operator, |
|
||||
.token.entity, |
|
||||
.token.url, |
|
||||
.language-css .token.string, |
|
||||
.style .token.string { |
|
||||
color: #9a6e3a; |
|
||||
background: hsla(0, 0%, 100%, 0.5); |
|
||||
} |
|
||||
.token.atrule, |
|
||||
.token.attr-value, |
|
||||
.token.keyword { |
|
||||
color: #07a; |
|
||||
} |
|
||||
.token.function, |
|
||||
.token.class-name { |
|
||||
color: #DD4A68; |
|
||||
} |
|
||||
.token.regex, |
|
||||
.token.important, |
|
||||
.token.variable { |
|
||||
color: #e90; |
|
||||
} |
|
||||
.token.important, |
|
||||
.token.bold { |
|
||||
font-weight: bold; |
|
||||
} |
|
||||
.token.italic { |
|
||||
font-style: italic; |
|
||||
} |
|
||||
.token.entity { |
|
||||
cursor: help; |
|
||||
} |
|
||||
/* stylelint-enable */ |
|
||||
.mce-content-body { |
|
||||
overflow-wrap: break-word; |
|
||||
word-wrap: break-word; |
|
||||
} |
|
||||
.mce-content-body .mce-visual-caret { |
|
||||
background-color: black; |
|
||||
background-color: currentColor; |
|
||||
position: absolute; |
|
||||
} |
|
||||
.mce-content-body .mce-visual-caret-hidden { |
|
||||
display: none; |
|
||||
} |
|
||||
.mce-content-body *[data-mce-caret] { |
|
||||
left: -1000px; |
|
||||
margin: 0; |
|
||||
padding: 0; |
|
||||
position: absolute; |
|
||||
right: auto; |
|
||||
top: 0; |
|
||||
} |
|
||||
.mce-content-body .mce-offscreen-selection { |
|
||||
left: -2000000px; |
|
||||
max-width: 1000000px; |
|
||||
position: absolute; |
|
||||
} |
|
||||
.mce-content-body *[contentEditable=false] { |
|
||||
cursor: default; |
|
||||
} |
|
||||
.mce-content-body *[contentEditable=true] { |
|
||||
cursor: text; |
|
||||
} |
|
||||
.tox-cursor-format-painter { |
|
||||
cursor: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"), default; |
|
||||
} |
|
||||
.mce-content-body figure.align-left { |
|
||||
float: left; |
|
||||
} |
|
||||
.mce-content-body figure.align-right { |
|
||||
float: right; |
|
||||
} |
|
||||
.mce-content-body figure.image.align-center { |
|
||||
display: table; |
|
||||
margin-left: auto; |
|
||||
margin-right: auto; |
|
||||
} |
|
||||
.mce-preview-object { |
|
||||
border: 1px solid gray; |
|
||||
display: inline-block; |
|
||||
line-height: 0; |
|
||||
margin: 0 2px 0 2px; |
|
||||
position: relative; |
|
||||
} |
|
||||
.mce-preview-object .mce-shim { |
|
||||
background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); |
|
||||
height: 100%; |
|
||||
left: 0; |
|
||||
position: absolute; |
|
||||
top: 0; |
|
||||
width: 100%; |
|
||||
} |
|
||||
.mce-preview-object[data-mce-selected="2"] .mce-shim { |
|
||||
display: none; |
|
||||
} |
|
||||
.mce-object { |
|
||||
background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center; |
|
||||
border: 1px dashed #aaa; |
|
||||
} |
|
||||
.mce-pagebreak { |
|
||||
border: 1px dashed #aaa; |
|
||||
cursor: default; |
|
||||
display: block; |
|
||||
height: 5px; |
|
||||
margin-top: 15px; |
|
||||
page-break-before: always; |
|
||||
width: 100%; |
|
||||
} |
|
||||
@media print { |
|
||||
.mce-pagebreak { |
|
||||
border: 0; |
|
||||
} |
|
||||
} |
|
||||
.tiny-pageembed .mce-shim { |
|
||||
background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); |
|
||||
height: 100%; |
|
||||
left: 0; |
|
||||
position: absolute; |
|
||||
top: 0; |
|
||||
width: 100%; |
|
||||
} |
|
||||
.tiny-pageembed[data-mce-selected="2"] .mce-shim { |
|
||||
display: none; |
|
||||
} |
|
||||
.tiny-pageembed { |
|
||||
display: inline-block; |
|
||||
position: relative; |
|
||||
} |
|
||||
.tiny-pageembed--21by9, |
|
||||
.tiny-pageembed--16by9, |
|
||||
.tiny-pageembed--4by3, |
|
||||
.tiny-pageembed--1by1 { |
|
||||
display: block; |
|
||||
overflow: hidden; |
|
||||
padding: 0; |
|
||||
position: relative; |
|
||||
width: 100%; |
|
||||
} |
|
||||
.tiny-pageembed--21by9 { |
|
||||
padding-top: 42.857143%; |
|
||||
} |
|
||||
.tiny-pageembed--16by9 { |
|
||||
padding-top: 56.25%; |
|
||||
} |
|
||||
.tiny-pageembed--4by3 { |
|
||||
padding-top: 75%; |
|
||||
} |
|
||||
.tiny-pageembed--1by1 { |
|
||||
padding-top: 100%; |
|
||||
} |
|
||||
.tiny-pageembed--21by9 iframe, |
|
||||
.tiny-pageembed--16by9 iframe, |
|
||||
.tiny-pageembed--4by3 iframe, |
|
||||
.tiny-pageembed--1by1 iframe { |
|
||||
border: 0; |
|
||||
height: 100%; |
|
||||
left: 0; |
|
||||
position: absolute; |
|
||||
top: 0; |
|
||||
width: 100%; |
|
||||
} |
|
||||
.mce-content-body[data-mce-placeholder] { |
|
||||
position: relative; |
|
||||
} |
|
||||
.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before { |
|
||||
color: rgba(34, 47, 62, 0.7); |
|
||||
content: attr(data-mce-placeholder); |
|
||||
position: absolute; |
|
||||
} |
|
||||
.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before { |
|
||||
left: 1px; |
|
||||
} |
|
||||
.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before { |
|
||||
right: 1px; |
|
||||
} |
|
||||
.mce-content-body div.mce-resizehandle { |
|
||||
background-color: #4099ff; |
|
||||
border-color: #4099ff; |
|
||||
border-style: solid; |
|
||||
border-width: 1px; |
|
||||
box-sizing: border-box; |
|
||||
height: 10px; |
|
||||
position: absolute; |
|
||||
width: 10px; |
|
||||
z-index: 10000; |
|
||||
} |
|
||||
.mce-content-body div.mce-resizehandle:hover { |
|
||||
background-color: #4099ff; |
|
||||
} |
|
||||
.mce-content-body div.mce-resizehandle:nth-of-type(1) { |
|
||||
cursor: nwse-resize; |
|
||||
} |
|
||||
.mce-content-body div.mce-resizehandle:nth-of-type(2) { |
|
||||
cursor: nesw-resize; |
|
||||
} |
|
||||
.mce-content-body div.mce-resizehandle:nth-of-type(3) { |
|
||||
cursor: nwse-resize; |
|
||||
} |
|
||||
.mce-content-body div.mce-resizehandle:nth-of-type(4) { |
|
||||
cursor: nesw-resize; |
|
||||
} |
|
||||
.mce-content-body .mce-clonedresizable { |
|
||||
opacity: 0.5; |
|
||||
outline: 1px dashed black; |
|
||||
position: absolute; |
|
||||
z-index: 10000; |
|
||||
} |
|
||||
.mce-content-body .mce-resize-helper { |
|
||||
background: #555; |
|
||||
background: rgba(0, 0, 0, 0.75); |
|
||||
border: 1px; |
|
||||
border-radius: 3px; |
|
||||
color: white; |
|
||||
display: none; |
|
||||
font-family: sans-serif; |
|
||||
font-size: 12px; |
|
||||
line-height: 14px; |
|
||||
margin: 5px 10px; |
|
||||
padding: 5px; |
|
||||
position: absolute; |
|
||||
white-space: nowrap; |
|
||||
z-index: 10001; |
|
||||
} |
|
||||
.tox-rtc-user-selection { |
|
||||
position: relative; |
|
||||
} |
|
||||
.tox-rtc-user-cursor { |
|
||||
bottom: 0; |
|
||||
cursor: default; |
|
||||
position: absolute; |
|
||||
top: 0; |
|
||||
width: 2px; |
|
||||
} |
|
||||
.tox-rtc-user-cursor::before { |
|
||||
background-color: inherit; |
|
||||
border-radius: 50%; |
|
||||
content: ''; |
|
||||
display: block; |
|
||||
height: 8px; |
|
||||
position: absolute; |
|
||||
right: -3px; |
|
||||
top: -3px; |
|
||||
width: 8px; |
|
||||
} |
|
||||
.tox-rtc-user-cursor:hover::after { |
|
||||
background-color: inherit; |
|
||||
border-radius: 100px; |
|
||||
box-sizing: border-box; |
|
||||
color: #fff; |
|
||||
content: attr(data-user); |
|
||||
display: block; |
|
||||
font-size: 12px; |
|
||||
font-weight: bold; |
|
||||
left: -5px; |
|
||||
min-height: 8px; |
|
||||
min-width: 8px; |
|
||||
padding: 0 12px; |
|
||||
position: absolute; |
|
||||
top: -11px; |
|
||||
white-space: nowrap; |
|
||||
z-index: 1000; |
|
||||
} |
|
||||
.tox-rtc-user-selection--1 .tox-rtc-user-cursor { |
|
||||
background-color: #2dc26b; |
|
||||
} |
|
||||
.tox-rtc-user-selection--2 .tox-rtc-user-cursor { |
|
||||
background-color: #e03e2d; |
|
||||
} |
|
||||
.tox-rtc-user-selection--3 .tox-rtc-user-cursor { |
|
||||
background-color: #f1c40f; |
|
||||
} |
|
||||
.tox-rtc-user-selection--4 .tox-rtc-user-cursor { |
|
||||
background-color: #3598db; |
|
||||
} |
|
||||
.tox-rtc-user-selection--5 .tox-rtc-user-cursor { |
|
||||
background-color: #b96ad9; |
|
||||
} |
|
||||
.tox-rtc-user-selection--6 .tox-rtc-user-cursor { |
|
||||
background-color: #e67e23; |
|
||||
} |
|
||||
.tox-rtc-user-selection--7 .tox-rtc-user-cursor { |
|
||||
background-color: #aaa69d; |
|
||||
} |
|
||||
.tox-rtc-user-selection--8 .tox-rtc-user-cursor { |
|
||||
background-color: #f368e0; |
|
||||
} |
|
||||
.tox-rtc-remote-image { |
|
||||
background: #eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center; |
|
||||
border: 1px solid #ccc; |
|
||||
min-height: 240px; |
|
||||
min-width: 320px; |
|
||||
} |
|
||||
.mce-match-marker { |
|
||||
background: #aaa; |
|
||||
color: #fff; |
|
||||
} |
|
||||
.mce-match-marker-selected { |
|
||||
background: #39f; |
|
||||
color: #fff; |
|
||||
} |
|
||||
.mce-match-marker-selected::-moz-selection { |
|
||||
background: #39f; |
|
||||
color: #fff; |
|
||||
} |
|
||||
.mce-match-marker-selected::selection { |
|
||||
background: #39f; |
|
||||
color: #fff; |
|
||||
} |
|
||||
.mce-content-body img[data-mce-selected], |
|
||||
.mce-content-body table[data-mce-selected] { |
|
||||
outline: 3px solid #b4d7ff; |
|
||||
} |
|
||||
.mce-content-body hr[data-mce-selected] { |
|
||||
outline: 3px solid #b4d7ff; |
|
||||
outline-offset: 1px; |
|
||||
} |
|
||||
.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus { |
|
||||
outline: 3px solid #b4d7ff; |
|
||||
} |
|
||||
.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover { |
|
||||
outline: 3px solid #b4d7ff; |
|
||||
} |
|
||||
.mce-content-body *[contentEditable=false][data-mce-selected] { |
|
||||
cursor: not-allowed; |
|
||||
outline: 3px solid #b4d7ff; |
|
||||
} |
|
||||
.mce-content-body.mce-content-readonly *[contentEditable=true]:focus, |
|
||||
.mce-content-body.mce-content-readonly *[contentEditable=true]:hover { |
|
||||
outline: none; |
|
||||
} |
|
||||
.mce-content-body *[data-mce-selected="inline-boundary"] { |
|
||||
background-color: #b4d7ff; |
|
||||
} |
|
||||
.mce-content-body .mce-edit-focus { |
|
||||
outline: 3px solid #b4d7ff; |
|
||||
} |
|
||||
.mce-content-body td[data-mce-selected], |
|
||||
.mce-content-body th[data-mce-selected] { |
|
||||
background-color: #b4d7ff !important; |
|
||||
} |
|
||||
.mce-content-body td[data-mce-selected]::-moz-selection, |
|
||||
.mce-content-body th[data-mce-selected]::-moz-selection { |
|
||||
background: none; |
|
||||
} |
|
||||
.mce-content-body td[data-mce-selected]::selection, |
|
||||
.mce-content-body th[data-mce-selected]::selection { |
|
||||
background: none; |
|
||||
} |
|
||||
.mce-content-body td[data-mce-selected] *, |
|
||||
.mce-content-body th[data-mce-selected] * { |
|
||||
-webkit-touch-callout: none; |
|
||||
-webkit-user-select: none; |
|
||||
-moz-user-select: none; |
|
||||
-ms-user-select: none; |
|
||||
user-select: none; |
|
||||
} |
|
||||
.mce-content-body img::-moz-selection { |
|
||||
background: none; |
|
||||
} |
|
||||
.mce-content-body img::selection { |
|
||||
background: none; |
|
||||
} |
|
||||
.ephox-snooker-resizer-bar { |
|
||||
background-color: #b4d7ff; |
|
||||
opacity: 0; |
|
||||
-webkit-user-select: none; |
|
||||
-moz-user-select: none; |
|
||||
-ms-user-select: none; |
|
||||
user-select: none; |
|
||||
} |
|
||||
.ephox-snooker-resizer-cols { |
|
||||
cursor: col-resize; |
|
||||
} |
|
||||
.ephox-snooker-resizer-rows { |
|
||||
cursor: row-resize; |
|
||||
} |
|
||||
.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging { |
|
||||
opacity: 1; |
|
||||
} |
|
||||
.mce-spellchecker-word { |
|
||||
background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A"); |
|
||||
background-position: 0 calc(100% + 1px); |
|
||||
background-repeat: repeat-x; |
|
||||
background-size: auto 6px; |
|
||||
cursor: default; |
|
||||
height: 2rem; |
|
||||
} |
|
||||
.mce-spellchecker-grammar { |
|
||||
background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A"); |
|
||||
background-position: 0 calc(100% + 1px); |
|
||||
background-repeat: repeat-x; |
|
||||
background-size: auto 6px; |
|
||||
cursor: default; |
|
||||
} |
|
||||
.mce-toc { |
|
||||
border: 1px solid gray; |
|
||||
} |
|
||||
.mce-toc h2 { |
|
||||
margin: 4px; |
|
||||
} |
|
||||
.mce-toc li { |
|
||||
list-style-type: none; |
|
||||
} |
|
||||
.mce-item-table, |
|
||||
.mce-item-table td, |
|
||||
.mce-item-table th, |
|
||||
.mce-item-table caption { |
|
||||
border: 1px dashed #bbb; |
|
||||
} |
|
||||
.mce-visualblocks p, |
|
||||
.mce-visualblocks h1, |
|
||||
.mce-visualblocks h2, |
|
||||
.mce-visualblocks h3, |
|
||||
.mce-visualblocks h4, |
|
||||
.mce-visualblocks h5, |
|
||||
.mce-visualblocks h6, |
|
||||
.mce-visualblocks div:not([data-mce-bogus]), |
|
||||
.mce-visualblocks section, |
|
||||
.mce-visualblocks article, |
|
||||
.mce-visualblocks blockquote, |
|
||||
.mce-visualblocks address, |
|
||||
.mce-visualblocks pre, |
|
||||
.mce-visualblocks figure, |
|
||||
.mce-visualblocks figcaption, |
|
||||
.mce-visualblocks hgroup, |
|
||||
.mce-visualblocks aside, |
|
||||
.mce-visualblocks ul, |
|
||||
.mce-visualblocks ol, |
|
||||
.mce-visualblocks dl { |
|
||||
background-repeat: no-repeat; |
|
||||
border: 1px dashed #bbb; |
|
||||
margin-left: 3px; |
|
||||
padding-top: 10px; |
|
||||
} |
|
||||
.mce-visualblocks p { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7); |
|
||||
} |
|
||||
.mce-visualblocks h1 { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==); |
|
||||
} |
|
||||
.mce-visualblocks h2 { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==); |
|
||||
} |
|
||||
.mce-visualblocks h3 { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7); |
|
||||
} |
|
||||
.mce-visualblocks h4 { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==); |
|
||||
} |
|
||||
.mce-visualblocks h5 { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==); |
|
||||
} |
|
||||
.mce-visualblocks h6 { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==); |
|
||||
} |
|
||||
.mce-visualblocks div:not([data-mce-bogus]) { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7); |
|
||||
} |
|
||||
.mce-visualblocks section { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=); |
|
||||
} |
|
||||
.mce-visualblocks article { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7); |
|
||||
} |
|
||||
.mce-visualblocks blockquote { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7); |
|
||||
} |
|
||||
.mce-visualblocks address { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=); |
|
||||
} |
|
||||
.mce-visualblocks pre { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==); |
|
||||
} |
|
||||
.mce-visualblocks figure { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7); |
|
||||
} |
|
||||
.mce-visualblocks figcaption { |
|
||||
border: 1px dashed #bbb; |
|
||||
} |
|
||||
.mce-visualblocks hgroup { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7); |
|
||||
} |
|
||||
.mce-visualblocks aside { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=); |
|
||||
} |
|
||||
.mce-visualblocks ul { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==); |
|
||||
} |
|
||||
.mce-visualblocks ol { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==); |
|
||||
} |
|
||||
.mce-visualblocks dl { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==); |
|
||||
} |
|
||||
.mce-visualblocks:not([dir=rtl]) p, |
|
||||
.mce-visualblocks:not([dir=rtl]) h1, |
|
||||
.mce-visualblocks:not([dir=rtl]) h2, |
|
||||
.mce-visualblocks:not([dir=rtl]) h3, |
|
||||
.mce-visualblocks:not([dir=rtl]) h4, |
|
||||
.mce-visualblocks:not([dir=rtl]) h5, |
|
||||
.mce-visualblocks:not([dir=rtl]) h6, |
|
||||
.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]), |
|
||||
.mce-visualblocks:not([dir=rtl]) section, |
|
||||
.mce-visualblocks:not([dir=rtl]) article, |
|
||||
.mce-visualblocks:not([dir=rtl]) blockquote, |
|
||||
.mce-visualblocks:not([dir=rtl]) address, |
|
||||
.mce-visualblocks:not([dir=rtl]) pre, |
|
||||
.mce-visualblocks:not([dir=rtl]) figure, |
|
||||
.mce-visualblocks:not([dir=rtl]) figcaption, |
|
||||
.mce-visualblocks:not([dir=rtl]) hgroup, |
|
||||
.mce-visualblocks:not([dir=rtl]) aside, |
|
||||
.mce-visualblocks:not([dir=rtl]) ul, |
|
||||
.mce-visualblocks:not([dir=rtl]) ol, |
|
||||
.mce-visualblocks:not([dir=rtl]) dl { |
|
||||
margin-left: 3px; |
|
||||
} |
|
||||
.mce-visualblocks[dir=rtl] p, |
|
||||
.mce-visualblocks[dir=rtl] h1, |
|
||||
.mce-visualblocks[dir=rtl] h2, |
|
||||
.mce-visualblocks[dir=rtl] h3, |
|
||||
.mce-visualblocks[dir=rtl] h4, |
|
||||
.mce-visualblocks[dir=rtl] h5, |
|
||||
.mce-visualblocks[dir=rtl] h6, |
|
||||
.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]), |
|
||||
.mce-visualblocks[dir=rtl] section, |
|
||||
.mce-visualblocks[dir=rtl] article, |
|
||||
.mce-visualblocks[dir=rtl] blockquote, |
|
||||
.mce-visualblocks[dir=rtl] address, |
|
||||
.mce-visualblocks[dir=rtl] pre, |
|
||||
.mce-visualblocks[dir=rtl] figure, |
|
||||
.mce-visualblocks[dir=rtl] figcaption, |
|
||||
.mce-visualblocks[dir=rtl] hgroup, |
|
||||
.mce-visualblocks[dir=rtl] aside, |
|
||||
.mce-visualblocks[dir=rtl] ul, |
|
||||
.mce-visualblocks[dir=rtl] ol, |
|
||||
.mce-visualblocks[dir=rtl] dl { |
|
||||
background-position-x: right; |
|
||||
margin-right: 3px; |
|
||||
} |
|
||||
.mce-nbsp, |
|
||||
.mce-shy { |
|
||||
background: #aaa; |
|
||||
} |
|
||||
.mce-shy::after { |
|
||||
content: '-'; |
|
||||
} |
|
||||
body { |
|
||||
font-family: sans-serif; |
|
||||
} |
|
||||
table { |
|
||||
border-collapse: collapse; |
|
||||
} |
|
||||
@ -1,689 +0,0 @@ |
|||||
/** |
|
||||
* Copyright (c) Tiny Technologies, Inc. All rights reserved. |
|
||||
* Licensed under the LGPL or a commercial license. |
|
||||
* For LGPL see License.txt in the project root for license information. |
|
||||
* For commercial licenses see https://www.tiny.cloud/ |
|
||||
*/ |
|
||||
.mce-content-body .mce-item-anchor { |
|
||||
background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center; |
|
||||
cursor: default; |
|
||||
display: inline-block; |
|
||||
height: 12px !important; |
|
||||
padding: 0 2px; |
|
||||
-webkit-user-modify: read-only; |
|
||||
-moz-user-modify: read-only; |
|
||||
-webkit-user-select: all; |
|
||||
-moz-user-select: all; |
|
||||
-ms-user-select: all; |
|
||||
user-select: all; |
|
||||
width: 8px !important; |
|
||||
} |
|
||||
.mce-content-body .mce-item-anchor[data-mce-selected] { |
|
||||
outline-offset: 1px; |
|
||||
} |
|
||||
.tox-comments-visible .tox-comment { |
|
||||
background-color: #fff0b7; |
|
||||
} |
|
||||
.tox-comments-visible .tox-comment--active { |
|
||||
background-color: #ffe168; |
|
||||
} |
|
||||
.tox-checklist > li:not(.tox-checklist--hidden) { |
|
||||
list-style: none; |
|
||||
margin: 0.25em 0; |
|
||||
} |
|
||||
.tox-checklist > li:not(.tox-checklist--hidden)::before { |
|
||||
background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A"); |
|
||||
background-size: 100%; |
|
||||
content: ''; |
|
||||
cursor: pointer; |
|
||||
height: 1em; |
|
||||
margin-left: -1.5em; |
|
||||
margin-top: 0.125em; |
|
||||
position: absolute; |
|
||||
width: 1em; |
|
||||
} |
|
||||
.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before { |
|
||||
background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A"); |
|
||||
} |
|
||||
[dir=rtl] .tox-checklist > li:not(.tox-checklist--hidden)::before { |
|
||||
margin-left: 0; |
|
||||
margin-right: -1.5em; |
|
||||
} |
|
||||
/* stylelint-disable */ |
|
||||
/* http://prismjs.com/ */ |
|
||||
/** |
|
||||
* prism.js default theme for JavaScript, CSS and HTML |
|
||||
* Based on dabblet (http://dabblet.com) |
|
||||
* @author Lea Verou |
|
||||
*/ |
|
||||
code[class*="language-"], |
|
||||
pre[class*="language-"] { |
|
||||
color: black; |
|
||||
background: none; |
|
||||
text-shadow: 0 1px white; |
|
||||
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; |
|
||||
font-size: 1em; |
|
||||
text-align: left; |
|
||||
white-space: pre; |
|
||||
word-spacing: normal; |
|
||||
word-break: normal; |
|
||||
word-wrap: normal; |
|
||||
line-height: 1.5; |
|
||||
-moz-tab-size: 4; |
|
||||
tab-size: 4; |
|
||||
-webkit-hyphens: none; |
|
||||
-ms-hyphens: none; |
|
||||
hyphens: none; |
|
||||
} |
|
||||
pre[class*="language-"]::-moz-selection, |
|
||||
pre[class*="language-"] ::-moz-selection, |
|
||||
code[class*="language-"]::-moz-selection, |
|
||||
code[class*="language-"] ::-moz-selection { |
|
||||
text-shadow: none; |
|
||||
background: #b3d4fc; |
|
||||
} |
|
||||
pre[class*="language-"]::selection, |
|
||||
pre[class*="language-"] ::selection, |
|
||||
code[class*="language-"]::selection, |
|
||||
code[class*="language-"] ::selection { |
|
||||
text-shadow: none; |
|
||||
background: #b3d4fc; |
|
||||
} |
|
||||
@media print { |
|
||||
code[class*="language-"], |
|
||||
pre[class*="language-"] { |
|
||||
text-shadow: none; |
|
||||
} |
|
||||
} |
|
||||
/* Code blocks */ |
|
||||
pre[class*="language-"] { |
|
||||
padding: 1em; |
|
||||
margin: 0.5em 0; |
|
||||
overflow: auto; |
|
||||
} |
|
||||
:not(pre) > code[class*="language-"], |
|
||||
pre[class*="language-"] { |
|
||||
background: #f5f2f0; |
|
||||
} |
|
||||
/* Inline code */ |
|
||||
:not(pre) > code[class*="language-"] { |
|
||||
padding: 0.1em; |
|
||||
border-radius: 0.3em; |
|
||||
white-space: normal; |
|
||||
} |
|
||||
.token.comment, |
|
||||
.token.prolog, |
|
||||
.token.doctype, |
|
||||
.token.cdata { |
|
||||
color: slategray; |
|
||||
} |
|
||||
.token.punctuation { |
|
||||
color: #999; |
|
||||
} |
|
||||
.namespace { |
|
||||
opacity: 0.7; |
|
||||
} |
|
||||
.token.property, |
|
||||
.token.tag, |
|
||||
.token.boolean, |
|
||||
.token.number, |
|
||||
.token.constant, |
|
||||
.token.symbol, |
|
||||
.token.deleted { |
|
||||
color: #905; |
|
||||
} |
|
||||
.token.selector, |
|
||||
.token.attr-name, |
|
||||
.token.string, |
|
||||
.token.char, |
|
||||
.token.builtin, |
|
||||
.token.inserted { |
|
||||
color: #690; |
|
||||
} |
|
||||
.token.operator, |
|
||||
.token.entity, |
|
||||
.token.url, |
|
||||
.language-css .token.string, |
|
||||
.style .token.string { |
|
||||
color: #9a6e3a; |
|
||||
background: hsla(0, 0%, 100%, 0.5); |
|
||||
} |
|
||||
.token.atrule, |
|
||||
.token.attr-value, |
|
||||
.token.keyword { |
|
||||
color: #07a; |
|
||||
} |
|
||||
.token.function, |
|
||||
.token.class-name { |
|
||||
color: #DD4A68; |
|
||||
} |
|
||||
.token.regex, |
|
||||
.token.important, |
|
||||
.token.variable { |
|
||||
color: #e90; |
|
||||
} |
|
||||
.token.important, |
|
||||
.token.bold { |
|
||||
font-weight: bold; |
|
||||
} |
|
||||
.token.italic { |
|
||||
font-style: italic; |
|
||||
} |
|
||||
.token.entity { |
|
||||
cursor: help; |
|
||||
} |
|
||||
/* stylelint-enable */ |
|
||||
.mce-content-body { |
|
||||
overflow-wrap: break-word; |
|
||||
word-wrap: break-word; |
|
||||
} |
|
||||
.mce-content-body .mce-visual-caret { |
|
||||
background-color: black; |
|
||||
background-color: currentColor; |
|
||||
position: absolute; |
|
||||
} |
|
||||
.mce-content-body .mce-visual-caret-hidden { |
|
||||
display: none; |
|
||||
} |
|
||||
.mce-content-body *[data-mce-caret] { |
|
||||
left: -1000px; |
|
||||
margin: 0; |
|
||||
padding: 0; |
|
||||
position: absolute; |
|
||||
right: auto; |
|
||||
top: 0; |
|
||||
} |
|
||||
.mce-content-body .mce-offscreen-selection { |
|
||||
left: -2000000px; |
|
||||
max-width: 1000000px; |
|
||||
position: absolute; |
|
||||
} |
|
||||
.mce-content-body *[contentEditable=false] { |
|
||||
cursor: default; |
|
||||
} |
|
||||
.mce-content-body *[contentEditable=true] { |
|
||||
cursor: text; |
|
||||
} |
|
||||
.tox-cursor-format-painter { |
|
||||
cursor: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"), default; |
|
||||
} |
|
||||
.mce-content-body figure.align-left { |
|
||||
float: left; |
|
||||
} |
|
||||
.mce-content-body figure.align-right { |
|
||||
float: right; |
|
||||
} |
|
||||
.mce-content-body figure.image.align-center { |
|
||||
display: table; |
|
||||
margin-left: auto; |
|
||||
margin-right: auto; |
|
||||
} |
|
||||
.mce-preview-object { |
|
||||
border: 1px solid gray; |
|
||||
display: inline-block; |
|
||||
line-height: 0; |
|
||||
margin: 0 2px 0 2px; |
|
||||
position: relative; |
|
||||
} |
|
||||
.mce-preview-object .mce-shim { |
|
||||
background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); |
|
||||
height: 100%; |
|
||||
left: 0; |
|
||||
position: absolute; |
|
||||
top: 0; |
|
||||
width: 100%; |
|
||||
} |
|
||||
.mce-preview-object[data-mce-selected="2"] .mce-shim { |
|
||||
display: none; |
|
||||
} |
|
||||
.mce-object { |
|
||||
background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center; |
|
||||
border: 1px dashed #aaa; |
|
||||
} |
|
||||
.mce-pagebreak { |
|
||||
border: 1px dashed #aaa; |
|
||||
cursor: default; |
|
||||
display: block; |
|
||||
height: 5px; |
|
||||
margin-top: 15px; |
|
||||
page-break-before: always; |
|
||||
width: 100%; |
|
||||
} |
|
||||
@media print { |
|
||||
.mce-pagebreak { |
|
||||
border: 0; |
|
||||
} |
|
||||
} |
|
||||
.tiny-pageembed .mce-shim { |
|
||||
background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); |
|
||||
height: 100%; |
|
||||
left: 0; |
|
||||
position: absolute; |
|
||||
top: 0; |
|
||||
width: 100%; |
|
||||
} |
|
||||
.tiny-pageembed[data-mce-selected="2"] .mce-shim { |
|
||||
display: none; |
|
||||
} |
|
||||
.tiny-pageembed { |
|
||||
display: inline-block; |
|
||||
position: relative; |
|
||||
} |
|
||||
.tiny-pageembed--21by9, |
|
||||
.tiny-pageembed--16by9, |
|
||||
.tiny-pageembed--4by3, |
|
||||
.tiny-pageembed--1by1 { |
|
||||
display: block; |
|
||||
overflow: hidden; |
|
||||
padding: 0; |
|
||||
position: relative; |
|
||||
width: 100%; |
|
||||
} |
|
||||
.tiny-pageembed--21by9 { |
|
||||
padding-top: 42.857143%; |
|
||||
} |
|
||||
.tiny-pageembed--16by9 { |
|
||||
padding-top: 56.25%; |
|
||||
} |
|
||||
.tiny-pageembed--4by3 { |
|
||||
padding-top: 75%; |
|
||||
} |
|
||||
.tiny-pageembed--1by1 { |
|
||||
padding-top: 100%; |
|
||||
} |
|
||||
.tiny-pageembed--21by9 iframe, |
|
||||
.tiny-pageembed--16by9 iframe, |
|
||||
.tiny-pageembed--4by3 iframe, |
|
||||
.tiny-pageembed--1by1 iframe { |
|
||||
border: 0; |
|
||||
height: 100%; |
|
||||
left: 0; |
|
||||
position: absolute; |
|
||||
top: 0; |
|
||||
width: 100%; |
|
||||
} |
|
||||
.mce-content-body[data-mce-placeholder] { |
|
||||
position: relative; |
|
||||
} |
|
||||
.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before { |
|
||||
color: rgba(34, 47, 62, 0.7); |
|
||||
content: attr(data-mce-placeholder); |
|
||||
position: absolute; |
|
||||
} |
|
||||
.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before { |
|
||||
left: 1px; |
|
||||
} |
|
||||
.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before { |
|
||||
right: 1px; |
|
||||
} |
|
||||
.mce-content-body div.mce-resizehandle { |
|
||||
background-color: #4099ff; |
|
||||
border-color: #4099ff; |
|
||||
border-style: solid; |
|
||||
border-width: 1px; |
|
||||
box-sizing: border-box; |
|
||||
height: 10px; |
|
||||
position: absolute; |
|
||||
width: 10px; |
|
||||
z-index: 10000; |
|
||||
} |
|
||||
.mce-content-body div.mce-resizehandle:hover { |
|
||||
background-color: #4099ff; |
|
||||
} |
|
||||
.mce-content-body div.mce-resizehandle:nth-of-type(1) { |
|
||||
cursor: nwse-resize; |
|
||||
} |
|
||||
.mce-content-body div.mce-resizehandle:nth-of-type(2) { |
|
||||
cursor: nesw-resize; |
|
||||
} |
|
||||
.mce-content-body div.mce-resizehandle:nth-of-type(3) { |
|
||||
cursor: nwse-resize; |
|
||||
} |
|
||||
.mce-content-body div.mce-resizehandle:nth-of-type(4) { |
|
||||
cursor: nesw-resize; |
|
||||
} |
|
||||
.mce-content-body .mce-clonedresizable { |
|
||||
opacity: 0.5; |
|
||||
outline: 1px dashed black; |
|
||||
position: absolute; |
|
||||
z-index: 10000; |
|
||||
} |
|
||||
.mce-content-body .mce-resize-helper { |
|
||||
background: #555; |
|
||||
background: rgba(0, 0, 0, 0.75); |
|
||||
border: 1px; |
|
||||
border-radius: 3px; |
|
||||
color: white; |
|
||||
display: none; |
|
||||
font-family: sans-serif; |
|
||||
font-size: 12px; |
|
||||
line-height: 14px; |
|
||||
margin: 5px 10px; |
|
||||
padding: 5px; |
|
||||
position: absolute; |
|
||||
white-space: nowrap; |
|
||||
z-index: 10001; |
|
||||
} |
|
||||
.tox-rtc-user-selection { |
|
||||
position: relative; |
|
||||
} |
|
||||
.tox-rtc-user-cursor { |
|
||||
bottom: 0; |
|
||||
cursor: default; |
|
||||
position: absolute; |
|
||||
top: 0; |
|
||||
width: 2px; |
|
||||
} |
|
||||
.tox-rtc-user-cursor::before { |
|
||||
background-color: inherit; |
|
||||
border-radius: 50%; |
|
||||
content: ''; |
|
||||
display: block; |
|
||||
height: 8px; |
|
||||
position: absolute; |
|
||||
right: -3px; |
|
||||
top: -3px; |
|
||||
width: 8px; |
|
||||
} |
|
||||
.tox-rtc-user-cursor:hover::after { |
|
||||
background-color: inherit; |
|
||||
border-radius: 100px; |
|
||||
box-sizing: border-box; |
|
||||
color: #fff; |
|
||||
content: attr(data-user); |
|
||||
display: block; |
|
||||
font-size: 12px; |
|
||||
font-weight: bold; |
|
||||
left: -5px; |
|
||||
min-height: 8px; |
|
||||
min-width: 8px; |
|
||||
padding: 0 12px; |
|
||||
position: absolute; |
|
||||
top: -11px; |
|
||||
white-space: nowrap; |
|
||||
z-index: 1000; |
|
||||
} |
|
||||
.tox-rtc-user-selection--1 .tox-rtc-user-cursor { |
|
||||
background-color: #2dc26b; |
|
||||
} |
|
||||
.tox-rtc-user-selection--2 .tox-rtc-user-cursor { |
|
||||
background-color: #e03e2d; |
|
||||
} |
|
||||
.tox-rtc-user-selection--3 .tox-rtc-user-cursor { |
|
||||
background-color: #f1c40f; |
|
||||
} |
|
||||
.tox-rtc-user-selection--4 .tox-rtc-user-cursor { |
|
||||
background-color: #3598db; |
|
||||
} |
|
||||
.tox-rtc-user-selection--5 .tox-rtc-user-cursor { |
|
||||
background-color: #b96ad9; |
|
||||
} |
|
||||
.tox-rtc-user-selection--6 .tox-rtc-user-cursor { |
|
||||
background-color: #e67e23; |
|
||||
} |
|
||||
.tox-rtc-user-selection--7 .tox-rtc-user-cursor { |
|
||||
background-color: #aaa69d; |
|
||||
} |
|
||||
.tox-rtc-user-selection--8 .tox-rtc-user-cursor { |
|
||||
background-color: #f368e0; |
|
||||
} |
|
||||
.tox-rtc-remote-image { |
|
||||
background: #eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center; |
|
||||
border: 1px solid #ccc; |
|
||||
min-height: 240px; |
|
||||
min-width: 320px; |
|
||||
} |
|
||||
.mce-match-marker { |
|
||||
background: #aaa; |
|
||||
color: #fff; |
|
||||
} |
|
||||
.mce-match-marker-selected { |
|
||||
background: #39f; |
|
||||
color: #fff; |
|
||||
} |
|
||||
.mce-match-marker-selected::-moz-selection { |
|
||||
background: #39f; |
|
||||
color: #fff; |
|
||||
} |
|
||||
.mce-match-marker-selected::selection { |
|
||||
background: #39f; |
|
||||
color: #fff; |
|
||||
} |
|
||||
.mce-content-body img[data-mce-selected], |
|
||||
.mce-content-body table[data-mce-selected] { |
|
||||
outline: 3px solid #b4d7ff; |
|
||||
} |
|
||||
.mce-content-body hr[data-mce-selected] { |
|
||||
outline: 3px solid #b4d7ff; |
|
||||
outline-offset: 1px; |
|
||||
} |
|
||||
.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus { |
|
||||
outline: 3px solid #b4d7ff; |
|
||||
} |
|
||||
.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover { |
|
||||
outline: 3px solid #b4d7ff; |
|
||||
} |
|
||||
.mce-content-body *[contentEditable=false][data-mce-selected] { |
|
||||
cursor: not-allowed; |
|
||||
outline: 3px solid #b4d7ff; |
|
||||
} |
|
||||
.mce-content-body.mce-content-readonly *[contentEditable=true]:focus, |
|
||||
.mce-content-body.mce-content-readonly *[contentEditable=true]:hover { |
|
||||
outline: none; |
|
||||
} |
|
||||
.mce-content-body *[data-mce-selected="inline-boundary"] { |
|
||||
background-color: #b4d7ff; |
|
||||
} |
|
||||
.mce-content-body .mce-edit-focus { |
|
||||
outline: 3px solid #b4d7ff; |
|
||||
} |
|
||||
.mce-content-body td[data-mce-selected], |
|
||||
.mce-content-body th[data-mce-selected] { |
|
||||
background-color: #b4d7ff !important; |
|
||||
} |
|
||||
.mce-content-body td[data-mce-selected]::-moz-selection, |
|
||||
.mce-content-body th[data-mce-selected]::-moz-selection { |
|
||||
background: none; |
|
||||
} |
|
||||
.mce-content-body td[data-mce-selected]::selection, |
|
||||
.mce-content-body th[data-mce-selected]::selection { |
|
||||
background: none; |
|
||||
} |
|
||||
.mce-content-body td[data-mce-selected] *, |
|
||||
.mce-content-body th[data-mce-selected] * { |
|
||||
-webkit-touch-callout: none; |
|
||||
-webkit-user-select: none; |
|
||||
-moz-user-select: none; |
|
||||
-ms-user-select: none; |
|
||||
user-select: none; |
|
||||
} |
|
||||
.mce-content-body img::-moz-selection { |
|
||||
background: none; |
|
||||
} |
|
||||
.mce-content-body img::selection { |
|
||||
background: none; |
|
||||
} |
|
||||
.ephox-snooker-resizer-bar { |
|
||||
background-color: #b4d7ff; |
|
||||
opacity: 0; |
|
||||
-webkit-user-select: none; |
|
||||
-moz-user-select: none; |
|
||||
-ms-user-select: none; |
|
||||
user-select: none; |
|
||||
} |
|
||||
.ephox-snooker-resizer-cols { |
|
||||
cursor: col-resize; |
|
||||
} |
|
||||
.ephox-snooker-resizer-rows { |
|
||||
cursor: row-resize; |
|
||||
} |
|
||||
.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging { |
|
||||
opacity: 1; |
|
||||
} |
|
||||
.mce-spellchecker-word { |
|
||||
background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A"); |
|
||||
background-position: 0 calc(100% + 1px); |
|
||||
background-repeat: repeat-x; |
|
||||
background-size: auto 6px; |
|
||||
cursor: default; |
|
||||
height: 2rem; |
|
||||
} |
|
||||
.mce-spellchecker-grammar { |
|
||||
background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A"); |
|
||||
background-position: 0 calc(100% + 1px); |
|
||||
background-repeat: repeat-x; |
|
||||
background-size: auto 6px; |
|
||||
cursor: default; |
|
||||
} |
|
||||
.mce-toc { |
|
||||
border: 1px solid gray; |
|
||||
} |
|
||||
.mce-toc h2 { |
|
||||
margin: 4px; |
|
||||
} |
|
||||
.mce-toc li { |
|
||||
list-style-type: none; |
|
||||
} |
|
||||
.mce-item-table, |
|
||||
.mce-item-table td, |
|
||||
.mce-item-table th, |
|
||||
.mce-item-table caption { |
|
||||
border: 1px dashed #bbb; |
|
||||
} |
|
||||
.mce-visualblocks p, |
|
||||
.mce-visualblocks h1, |
|
||||
.mce-visualblocks h2, |
|
||||
.mce-visualblocks h3, |
|
||||
.mce-visualblocks h4, |
|
||||
.mce-visualblocks h5, |
|
||||
.mce-visualblocks h6, |
|
||||
.mce-visualblocks div:not([data-mce-bogus]), |
|
||||
.mce-visualblocks section, |
|
||||
.mce-visualblocks article, |
|
||||
.mce-visualblocks blockquote, |
|
||||
.mce-visualblocks address, |
|
||||
.mce-visualblocks pre, |
|
||||
.mce-visualblocks figure, |
|
||||
.mce-visualblocks figcaption, |
|
||||
.mce-visualblocks hgroup, |
|
||||
.mce-visualblocks aside, |
|
||||
.mce-visualblocks ul, |
|
||||
.mce-visualblocks ol, |
|
||||
.mce-visualblocks dl { |
|
||||
background-repeat: no-repeat; |
|
||||
border: 1px dashed #bbb; |
|
||||
margin-left: 3px; |
|
||||
padding-top: 10px; |
|
||||
} |
|
||||
.mce-visualblocks p { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7); |
|
||||
} |
|
||||
.mce-visualblocks h1 { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==); |
|
||||
} |
|
||||
.mce-visualblocks h2 { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==); |
|
||||
} |
|
||||
.mce-visualblocks h3 { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7); |
|
||||
} |
|
||||
.mce-visualblocks h4 { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==); |
|
||||
} |
|
||||
.mce-visualblocks h5 { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==); |
|
||||
} |
|
||||
.mce-visualblocks h6 { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==); |
|
||||
} |
|
||||
.mce-visualblocks div:not([data-mce-bogus]) { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7); |
|
||||
} |
|
||||
.mce-visualblocks section { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=); |
|
||||
} |
|
||||
.mce-visualblocks article { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7); |
|
||||
} |
|
||||
.mce-visualblocks blockquote { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7); |
|
||||
} |
|
||||
.mce-visualblocks address { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=); |
|
||||
} |
|
||||
.mce-visualblocks pre { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==); |
|
||||
} |
|
||||
.mce-visualblocks figure { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7); |
|
||||
} |
|
||||
.mce-visualblocks figcaption { |
|
||||
border: 1px dashed #bbb; |
|
||||
} |
|
||||
.mce-visualblocks hgroup { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7); |
|
||||
} |
|
||||
.mce-visualblocks aside { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=); |
|
||||
} |
|
||||
.mce-visualblocks ul { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==); |
|
||||
} |
|
||||
.mce-visualblocks ol { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==); |
|
||||
} |
|
||||
.mce-visualblocks dl { |
|
||||
background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==); |
|
||||
} |
|
||||
.mce-visualblocks:not([dir=rtl]) p, |
|
||||
.mce-visualblocks:not([dir=rtl]) h1, |
|
||||
.mce-visualblocks:not([dir=rtl]) h2, |
|
||||
.mce-visualblocks:not([dir=rtl]) h3, |
|
||||
.mce-visualblocks:not([dir=rtl]) h4, |
|
||||
.mce-visualblocks:not([dir=rtl]) h5, |
|
||||
.mce-visualblocks:not([dir=rtl]) h6, |
|
||||
.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]), |
|
||||
.mce-visualblocks:not([dir=rtl]) section, |
|
||||
.mce-visualblocks:not([dir=rtl]) article, |
|
||||
.mce-visualblocks:not([dir=rtl]) blockquote, |
|
||||
.mce-visualblocks:not([dir=rtl]) address, |
|
||||
.mce-visualblocks:not([dir=rtl]) pre, |
|
||||
.mce-visualblocks:not([dir=rtl]) figure, |
|
||||
.mce-visualblocks:not([dir=rtl]) figcaption, |
|
||||
.mce-visualblocks:not([dir=rtl]) hgroup, |
|
||||
.mce-visualblocks:not([dir=rtl]) aside, |
|
||||
.mce-visualblocks:not([dir=rtl]) ul, |
|
||||
.mce-visualblocks:not([dir=rtl]) ol, |
|
||||
.mce-visualblocks:not([dir=rtl]) dl { |
|
||||
margin-left: 3px; |
|
||||
} |
|
||||
.mce-visualblocks[dir=rtl] p, |
|
||||
.mce-visualblocks[dir=rtl] h1, |
|
||||
.mce-visualblocks[dir=rtl] h2, |
|
||||
.mce-visualblocks[dir=rtl] h3, |
|
||||
.mce-visualblocks[dir=rtl] h4, |
|
||||
.mce-visualblocks[dir=rtl] h5, |
|
||||
.mce-visualblocks[dir=rtl] h6, |
|
||||
.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]), |
|
||||
.mce-visualblocks[dir=rtl] section, |
|
||||
.mce-visualblocks[dir=rtl] article, |
|
||||
.mce-visualblocks[dir=rtl] blockquote, |
|
||||
.mce-visualblocks[dir=rtl] address, |
|
||||
.mce-visualblocks[dir=rtl] pre, |
|
||||
.mce-visualblocks[dir=rtl] figure, |
|
||||
.mce-visualblocks[dir=rtl] figcaption, |
|
||||
.mce-visualblocks[dir=rtl] hgroup, |
|
||||
.mce-visualblocks[dir=rtl] aside, |
|
||||
.mce-visualblocks[dir=rtl] ul, |
|
||||
.mce-visualblocks[dir=rtl] ol, |
|
||||
.mce-visualblocks[dir=rtl] dl { |
|
||||
background-position-x: right; |
|
||||
margin-right: 3px; |
|
||||
} |
|
||||
.mce-nbsp, |
|
||||
.mce-shy { |
|
||||
background: #aaa; |
|
||||
} |
|
||||
.mce-shy::after { |
|
||||
content: '-'; |
|
||||
} |
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,29 +0,0 @@ |
|||||
/** |
|
||||
* Copyright (c) Tiny Technologies, Inc. All rights reserved. |
|
||||
* Licensed under the LGPL or a commercial license. |
|
||||
* For LGPL see License.txt in the project root for license information. |
|
||||
* For commercial licenses see https://www.tiny.cloud/ |
|
||||
*/ |
|
||||
.tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection { |
|
||||
/* Note: this file is used inside the content, so isn't part of theming */ |
|
||||
background-color: green; |
|
||||
display: inline-block; |
|
||||
opacity: 0.5; |
|
||||
position: absolute; |
|
||||
} |
|
||||
body { |
|
||||
-webkit-text-size-adjust: none; |
|
||||
} |
|
||||
body img { |
|
||||
/* this is related to the content margin */ |
|
||||
max-width: 96vw; |
|
||||
} |
|
||||
body table img { |
|
||||
max-width: 95%; |
|
||||
} |
|
||||
body { |
|
||||
font-family: sans-serif; |
|
||||
} |
|
||||
table { |
|
||||
border-collapse: collapse; |
|
||||
} |
|
||||
@ -1,7 +0,0 @@ |
|||||
/** |
|
||||
* Copyright (c) Tiny Technologies, Inc. All rights reserved. |
|
||||
* Licensed under the LGPL or a commercial license. |
|
||||
* For LGPL see License.txt in the project root for license information. |
|
||||
* For commercial licenses see https://www.tiny.cloud/ |
|
||||
*/ |
|
||||
.tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection{background-color:green;display:inline-block;opacity:.5;position:absolute}body{-webkit-text-size-adjust:none}body img{max-width:96vw}body table img{max-width:95%}body{font-family:sans-serif}table{border-collapse:collapse} |
|
||||
Binary file not shown.
File diff suppressed because it is too large
File diff suppressed because one or more lines are too long
@ -1,673 +0,0 @@ |
|||||
/** |
|
||||
* Copyright (c) Tiny Technologies, Inc. All rights reserved. |
|
||||
* Licensed under the LGPL or a commercial license. |
|
||||
* For LGPL see License.txt in the project root for license information. |
|
||||
* For commercial licenses see https://www.tiny.cloud/ |
|
||||
*/ |
|
||||
/* RESET all the things! */ |
|
||||
.tinymce-mobile-outer-container { |
|
||||
all: initial; |
|
||||
display: block; |
|
||||
} |
|
||||
.tinymce-mobile-outer-container * { |
|
||||
border: 0; |
|
||||
box-sizing: initial; |
|
||||
cursor: inherit; |
|
||||
float: none; |
|
||||
line-height: 1; |
|
||||
margin: 0; |
|
||||
outline: 0; |
|
||||
padding: 0; |
|
||||
-webkit-tap-highlight-color: transparent; |
|
||||
/* TBIO-3691, stop the gray flicker on touch. */ |
|
||||
text-shadow: none; |
|
||||
white-space: nowrap; |
|
||||
} |
|
||||
.tinymce-mobile-icon-arrow-back::before { |
|
||||
content: "\e5cd"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-image::before { |
|
||||
content: "\e412"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-cancel-circle::before { |
|
||||
content: "\e5c9"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-full-dot::before { |
|
||||
content: "\e061"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-align-center::before { |
|
||||
content: "\e234"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-align-left::before { |
|
||||
content: "\e236"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-align-right::before { |
|
||||
content: "\e237"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-bold::before { |
|
||||
content: "\e238"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-italic::before { |
|
||||
content: "\e23f"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-unordered-list::before { |
|
||||
content: "\e241"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-ordered-list::before { |
|
||||
content: "\e242"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-font-size::before { |
|
||||
content: "\e245"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-underline::before { |
|
||||
content: "\e249"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-link::before { |
|
||||
content: "\e157"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-unlink::before { |
|
||||
content: "\eca2"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-color::before { |
|
||||
content: "\e891"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-previous::before { |
|
||||
content: "\e314"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-next::before { |
|
||||
content: "\e315"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-large-font::before, |
|
||||
.tinymce-mobile-icon-style-formats::before { |
|
||||
content: "\e264"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-undo::before { |
|
||||
content: "\e166"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-redo::before { |
|
||||
content: "\e15a"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-removeformat::before { |
|
||||
content: "\e239"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-small-font::before { |
|
||||
content: "\e906"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-readonly-back::before, |
|
||||
.tinymce-mobile-format-matches::after { |
|
||||
content: "\e5ca"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-small-heading::before { |
|
||||
content: "small"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-large-heading::before { |
|
||||
content: "large"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-small-heading::before, |
|
||||
.tinymce-mobile-icon-large-heading::before { |
|
||||
font-family: sans-serif; |
|
||||
font-size: 80%; |
|
||||
} |
|
||||
.tinymce-mobile-mask-edit-icon::before { |
|
||||
content: "\e254"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-back::before { |
|
||||
content: "\e5c4"; |
|
||||
} |
|
||||
.tinymce-mobile-icon-heading::before { |
|
||||
/* TODO: Translate */ |
|
||||
content: "Headings"; |
|
||||
font-family: sans-serif; |
|
||||
font-size: 80%; |
|
||||
font-weight: bold; |
|
||||
} |
|
||||
.tinymce-mobile-icon-h1::before { |
|
||||
content: "H1"; |
|
||||
font-weight: bold; |
|
||||
} |
|
||||
.tinymce-mobile-icon-h2::before { |
|
||||
content: "H2"; |
|
||||
font-weight: bold; |
|
||||
} |
|
||||
.tinymce-mobile-icon-h3::before { |
|
||||
content: "H3"; |
|
||||
font-weight: bold; |
|
||||
} |
|
||||
.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask { |
|
||||
align-items: center; |
|
||||
display: flex; |
|
||||
justify-content: center; |
|
||||
background: rgba(51, 51, 51, 0.5); |
|
||||
height: 100%; |
|
||||
position: absolute; |
|
||||
top: 0; |
|
||||
width: 100%; |
|
||||
} |
|
||||
.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container { |
|
||||
align-items: center; |
|
||||
border-radius: 50%; |
|
||||
display: flex; |
|
||||
flex-direction: column; |
|
||||
font-family: sans-serif; |
|
||||
font-size: 1em; |
|
||||
justify-content: space-between; |
|
||||
} |
|
||||
.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .mixin-menu-item { |
|
||||
align-items: center; |
|
||||
display: flex; |
|
||||
justify-content: center; |
|
||||
border-radius: 50%; |
|
||||
height: 2.1em; |
|
||||
width: 2.1em; |
|
||||
} |
|
||||
.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section { |
|
||||
align-items: center; |
|
||||
display: flex; |
|
||||
justify-content: center; |
|
||||
flex-direction: column; |
|
||||
font-size: 1em; |
|
||||
} |
|
||||
@media only screen and (min-device-width:700px) { |
|
||||
.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section { |
|
||||
font-size: 1.2em; |
|
||||
} |
|
||||
} |
|
||||
.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon { |
|
||||
align-items: center; |
|
||||
display: flex; |
|
||||
justify-content: center; |
|
||||
border-radius: 50%; |
|
||||
height: 2.1em; |
|
||||
width: 2.1em; |
|
||||
background-color: white; |
|
||||
color: #207ab7; |
|
||||
} |
|
||||
.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon::before { |
|
||||
content: "\e900"; |
|
||||
font-family: 'tinymce-mobile', sans-serif; |
|
||||
} |
|
||||
.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section:not(.tinymce-mobile-mask-tap-icon-selected) .tinymce-mobile-mask-tap-icon { |
|
||||
z-index: 2; |
|
||||
} |
|
||||
.tinymce-mobile-android-container.tinymce-mobile-android-maximized { |
|
||||
background: #ffffff; |
|
||||
border: none; |
|
||||
bottom: 0; |
|
||||
display: flex; |
|
||||
flex-direction: column; |
|
||||
left: 0; |
|
||||
position: fixed; |
|
||||
right: 0; |
|
||||
top: 0; |
|
||||
} |
|
||||
.tinymce-mobile-android-container:not(.tinymce-mobile-android-maximized) { |
|
||||
position: relative; |
|
||||
} |
|
||||
.tinymce-mobile-android-container .tinymce-mobile-editor-socket { |
|
||||
display: flex; |
|
||||
flex-grow: 1; |
|
||||
} |
|
||||
.tinymce-mobile-android-container .tinymce-mobile-editor-socket iframe { |
|
||||
display: flex !important; |
|
||||
flex-grow: 1; |
|
||||
height: auto !important; |
|
||||
} |
|
||||
.tinymce-mobile-android-scroll-reload { |
|
||||
overflow: hidden; |
|
||||
} |
|
||||
:not(.tinymce-mobile-readonly-mode) > .tinymce-mobile-android-selection-context-toolbar { |
|
||||
margin-top: 23px; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip { |
|
||||
background: #fff; |
|
||||
display: flex; |
|
||||
flex: 0 0 auto; |
|
||||
z-index: 1; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar { |
|
||||
align-items: center; |
|
||||
background-color: #fff; |
|
||||
border-bottom: 1px solid #cccccc; |
|
||||
display: flex; |
|
||||
flex: 1; |
|
||||
height: 2.5em; |
|
||||
width: 100%; |
|
||||
/* Make it no larger than the toolstrip, so that it needs to scroll */ |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group { |
|
||||
align-items: center; |
|
||||
display: flex; |
|
||||
height: 100%; |
|
||||
flex-shrink: 1; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group > div { |
|
||||
align-items: center; |
|
||||
display: flex; |
|
||||
height: 100%; |
|
||||
flex: 1; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-exit-container { |
|
||||
background: #f44336; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-toolbar-scrollable-group { |
|
||||
flex-grow: 1; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item { |
|
||||
padding-left: 0.5em; |
|
||||
padding-right: 0.5em; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button { |
|
||||
align-items: center; |
|
||||
display: flex; |
|
||||
height: 80%; |
|
||||
margin-left: 2px; |
|
||||
margin-right: 2px; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button.tinymce-mobile-toolbar-button-selected { |
|
||||
background: #c8cbcf; |
|
||||
color: #cccccc; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:first-of-type, |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:last-of-type { |
|
||||
background: #207ab7; |
|
||||
color: #eceff1; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar { |
|
||||
/* Note, this file is imported inside .tinymce-mobile-context-toolbar, so that prefix is on everything here. */ |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group { |
|
||||
align-items: center; |
|
||||
display: flex; |
|
||||
height: 100%; |
|
||||
flex: 1; |
|
||||
padding-bottom: 0.4em; |
|
||||
padding-top: 0.4em; |
|
||||
/* Make any buttons appearing on the left and right display in the centre (e.g. color edges) */ |
|
||||
/* For widgets like the colour picker, use the whole height */ |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog { |
|
||||
display: flex; |
|
||||
min-height: 1.5em; |
|
||||
overflow: hidden; |
|
||||
padding-left: 0; |
|
||||
padding-right: 0; |
|
||||
position: relative; |
|
||||
width: 100%; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain { |
|
||||
display: flex; |
|
||||
height: 100%; |
|
||||
transition: left cubic-bezier(0.4, 0, 1, 1) 0.15s; |
|
||||
width: 100%; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen { |
|
||||
display: flex; |
|
||||
flex: 0 0 auto; |
|
||||
justify-content: space-between; |
|
||||
width: 100%; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen input { |
|
||||
font-family: Sans-serif; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container { |
|
||||
display: flex; |
|
||||
flex-grow: 1; |
|
||||
position: relative; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container .tinymce-mobile-input-container-x { |
|
||||
-ms-grid-row-align: center; |
|
||||
align-self: center; |
|
||||
background: inherit; |
|
||||
border: none; |
|
||||
border-radius: 50%; |
|
||||
color: #888; |
|
||||
font-size: 0.6em; |
|
||||
font-weight: bold; |
|
||||
height: 100%; |
|
||||
padding-right: 2px; |
|
||||
position: absolute; |
|
||||
right: 0; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container.tinymce-mobile-input-container-empty .tinymce-mobile-input-container-x { |
|
||||
display: none; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous, |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next { |
|
||||
align-items: center; |
|
||||
display: flex; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous::before, |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next::before { |
|
||||
align-items: center; |
|
||||
display: flex; |
|
||||
font-weight: bold; |
|
||||
height: 100%; |
|
||||
padding-left: 0.5em; |
|
||||
padding-right: 0.5em; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous.tinymce-mobile-toolbar-navigation-disabled::before, |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next.tinymce-mobile-toolbar-navigation-disabled::before { |
|
||||
visibility: hidden; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item { |
|
||||
color: #cccccc; |
|
||||
font-size: 10px; |
|
||||
line-height: 10px; |
|
||||
margin: 0 2px; |
|
||||
padding-top: 3px; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item.tinymce-mobile-dot-active { |
|
||||
color: #c8cbcf; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-font::before, |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-heading::before { |
|
||||
margin-left: 0.5em; |
|
||||
margin-right: 0.9em; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-font::before, |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-heading::before { |
|
||||
margin-left: 0.9em; |
|
||||
margin-right: 0.5em; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider { |
|
||||
display: flex; |
|
||||
flex: 1; |
|
||||
margin-left: 0; |
|
||||
margin-right: 0; |
|
||||
padding: 0.28em 0; |
|
||||
position: relative; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container { |
|
||||
align-items: center; |
|
||||
display: flex; |
|
||||
flex-grow: 1; |
|
||||
height: 100%; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container .tinymce-mobile-slider-size-line { |
|
||||
background: #cccccc; |
|
||||
display: flex; |
|
||||
flex: 1; |
|
||||
height: 0.2em; |
|
||||
margin-bottom: 0.3em; |
|
||||
margin-top: 0.3em; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container { |
|
||||
padding-left: 2em; |
|
||||
padding-right: 2em; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container { |
|
||||
align-items: center; |
|
||||
display: flex; |
|
||||
flex-grow: 1; |
|
||||
height: 100%; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container .tinymce-mobile-slider-gradient { |
|
||||
background: linear-gradient(to right, hsl(0, 100%, 50%) 0%, hsl(60, 100%, 50%) 17%, hsl(120, 100%, 50%) 33%, hsl(180, 100%, 50%) 50%, hsl(240, 100%, 50%) 67%, hsl(300, 100%, 50%) 83%, hsl(0, 100%, 50%) 100%); |
|
||||
display: flex; |
|
||||
flex: 1; |
|
||||
height: 0.2em; |
|
||||
margin-bottom: 0.3em; |
|
||||
margin-top: 0.3em; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-black { |
|
||||
/* Not part of theming */ |
|
||||
background: black; |
|
||||
height: 0.2em; |
|
||||
margin-bottom: 0.3em; |
|
||||
margin-top: 0.3em; |
|
||||
width: 1.2em; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-white { |
|
||||
/* Not part of theming */ |
|
||||
background: white; |
|
||||
height: 0.2em; |
|
||||
margin-bottom: 0.3em; |
|
||||
margin-top: 0.3em; |
|
||||
width: 1.2em; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb { |
|
||||
/* vertically centering trick (margin: auto, top: 0, bottom: 0). On iOS and Safari, if you leave |
|
||||
* out these values, then it shows the thumb at the top of the spectrum. This is probably because it is |
|
||||
* absolutely positioned with only a left value, and not a top. Note, on Chrome it seems to be fine without |
|
||||
* this approach. |
|
||||
*/ |
|
||||
align-items: center; |
|
||||
background-clip: padding-box; |
|
||||
background-color: #455a64; |
|
||||
border: 0.5em solid rgba(136, 136, 136, 0); |
|
||||
border-radius: 3em; |
|
||||
bottom: 0; |
|
||||
color: #fff; |
|
||||
display: flex; |
|
||||
height: 0.5em; |
|
||||
justify-content: center; |
|
||||
left: -10px; |
|
||||
margin: auto; |
|
||||
position: absolute; |
|
||||
top: 0; |
|
||||
transition: border 120ms cubic-bezier(0.39, 0.58, 0.57, 1); |
|
||||
width: 0.5em; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb.tinymce-mobile-thumb-active { |
|
||||
border: 0.5em solid rgba(136, 136, 136, 0.39); |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper, |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group > div { |
|
||||
align-items: center; |
|
||||
display: flex; |
|
||||
height: 100%; |
|
||||
flex: 1; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper { |
|
||||
flex-direction: column; |
|
||||
justify-content: center; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item { |
|
||||
align-items: center; |
|
||||
display: flex; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item:not(.tinymce-mobile-serialised-dialog) { |
|
||||
height: 100%; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-container { |
|
||||
display: flex; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input { |
|
||||
background: #ffffff; |
|
||||
border: none; |
|
||||
border-radius: 0; |
|
||||
color: #455a64; |
|
||||
flex-grow: 1; |
|
||||
font-size: 0.85em; |
|
||||
padding-bottom: 0.1em; |
|
||||
padding-left: 5px; |
|
||||
padding-top: 0.1em; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::-webkit-input-placeholder { |
|
||||
/* WebKit, Blink, Edge */ |
|
||||
color: #888; |
|
||||
} |
|
||||
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::placeholder { |
|
||||
/* WebKit, Blink, Edge */ |
|
||||
color: #888; |
|
||||
} |
|
||||
/* dropup */ |
|
||||
.tinymce-mobile-dropup { |
|
||||
background: white; |
|
||||
display: flex; |
|
||||
overflow: hidden; |
|
||||
width: 100%; |
|
||||
} |
|
||||
.tinymce-mobile-dropup.tinymce-mobile-dropup-shrinking { |
|
||||
transition: height 0.3s ease-out; |
|
||||
} |
|
||||
.tinymce-mobile-dropup.tinymce-mobile-dropup-growing { |
|
||||
transition: height 0.3s ease-in; |
|
||||
} |
|
||||
.tinymce-mobile-dropup.tinymce-mobile-dropup-closed { |
|
||||
flex-grow: 0; |
|
||||
} |
|
||||
.tinymce-mobile-dropup.tinymce-mobile-dropup-open:not(.tinymce-mobile-dropup-growing) { |
|
||||
flex-grow: 1; |
|
||||
} |
|
||||
/* TODO min-height for device size and orientation */ |
|
||||
.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed) { |
|
||||
min-height: 200px; |
|
||||
} |
|
||||
@media only screen and (orientation: landscape) { |
|
||||
.tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed) { |
|
||||
min-height: 200px; |
|
||||
} |
|
||||
} |
|
||||
@media only screen and (min-device-width : 320px) and (max-device-width : 568px) and (orientation : landscape) { |
|
||||
.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed) { |
|
||||
min-height: 150px; |
|
||||
} |
|
||||
} |
|
||||
/* styles menu */ |
|
||||
.tinymce-mobile-styles-menu { |
|
||||
font-family: sans-serif; |
|
||||
outline: 4px solid black; |
|
||||
overflow: hidden; |
|
||||
position: relative; |
|
||||
width: 100%; |
|
||||
} |
|
||||
.tinymce-mobile-styles-menu [role="menu"] { |
|
||||
display: flex; |
|
||||
flex-direction: column; |
|
||||
height: 100%; |
|
||||
position: absolute; |
|
||||
width: 100%; |
|
||||
} |
|
||||
.tinymce-mobile-styles-menu [role="menu"].transitioning { |
|
||||
transition: transform 0.5s ease-in-out; |
|
||||
} |
|
||||
.tinymce-mobile-styles-menu .tinymce-mobile-styles-item { |
|
||||
border-bottom: 1px solid #ddd; |
|
||||
color: #455a64; |
|
||||
cursor: pointer; |
|
||||
display: flex; |
|
||||
padding: 1em 1em; |
|
||||
position: relative; |
|
||||
} |
|
||||
.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser .tinymce-mobile-styles-collapse-icon::before { |
|
||||
color: #455a64; |
|
||||
content: "\e314"; |
|
||||
font-family: 'tinymce-mobile', sans-serif; |
|
||||
} |
|
||||
.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-styles-item-is-menu::after { |
|
||||
color: #455a64; |
|
||||
content: "\e315"; |
|
||||
font-family: 'tinymce-mobile', sans-serif; |
|
||||
padding-left: 1em; |
|
||||
padding-right: 1em; |
|
||||
position: absolute; |
|
||||
right: 0; |
|
||||
} |
|
||||
.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-format-matches::after { |
|
||||
font-family: 'tinymce-mobile', sans-serif; |
|
||||
padding-left: 1em; |
|
||||
padding-right: 1em; |
|
||||
position: absolute; |
|
||||
right: 0; |
|
||||
} |
|
||||
.tinymce-mobile-styles-menu .tinymce-mobile-styles-separator, |
|
||||
.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser { |
|
||||
align-items: center; |
|
||||
background: #fff; |
|
||||
border-top: #455a64; |
|
||||
color: #455a64; |
|
||||
display: flex; |
|
||||
min-height: 2.5em; |
|
||||
padding-left: 1em; |
|
||||
padding-right: 1em; |
|
||||
} |
|
||||
.tinymce-mobile-styles-menu [data-transitioning-destination="before"][data-transitioning-state], |
|
||||
.tinymce-mobile-styles-menu [data-transitioning-state="before"] { |
|
||||
transform: translate(-100%); |
|
||||
} |
|
||||
.tinymce-mobile-styles-menu [data-transitioning-destination="current"][data-transitioning-state], |
|
||||
.tinymce-mobile-styles-menu [data-transitioning-state="current"] { |
|
||||
transform: translate(0%); |
|
||||
} |
|
||||
.tinymce-mobile-styles-menu [data-transitioning-destination="after"][data-transitioning-state], |
|
||||
.tinymce-mobile-styles-menu [data-transitioning-state="after"] { |
|
||||
transform: translate(100%); |
|
||||
} |
|
||||
@font-face { |
|
||||
font-family: 'tinymce-mobile'; |
|
||||
font-style: normal; |
|
||||
font-weight: normal; |
|
||||
src: url('fonts/tinymce-mobile.woff?8x92w3') format('woff'); |
|
||||
} |
|
||||
@media (min-device-width: 700px) { |
|
||||
.tinymce-mobile-outer-container, |
|
||||
.tinymce-mobile-outer-container input { |
|
||||
font-size: 25px; |
|
||||
} |
|
||||
} |
|
||||
@media (max-device-width: 700px) { |
|
||||
.tinymce-mobile-outer-container, |
|
||||
.tinymce-mobile-outer-container input { |
|
||||
font-size: 18px; |
|
||||
} |
|
||||
} |
|
||||
.tinymce-mobile-icon { |
|
||||
font-family: 'tinymce-mobile', sans-serif; |
|
||||
} |
|
||||
.mixin-flex-and-centre { |
|
||||
align-items: center; |
|
||||
display: flex; |
|
||||
justify-content: center; |
|
||||
} |
|
||||
.mixin-flex-bar { |
|
||||
align-items: center; |
|
||||
display: flex; |
|
||||
height: 100%; |
|
||||
} |
|
||||
.tinymce-mobile-outer-container .tinymce-mobile-editor-socket iframe { |
|
||||
background-color: #fff; |
|
||||
width: 100%; |
|
||||
} |
|
||||
.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon { |
|
||||
/* Note, on the iPod touch in landscape, this isn't visible when the navbar appears */ |
|
||||
background-color: #207ab7; |
|
||||
border-radius: 50%; |
|
||||
bottom: 1em; |
|
||||
color: white; |
|
||||
font-size: 1em; |
|
||||
height: 2.1em; |
|
||||
position: fixed; |
|
||||
right: 2em; |
|
||||
width: 2.1em; |
|
||||
align-items: center; |
|
||||
display: flex; |
|
||||
justify-content: center; |
|
||||
} |
|
||||
@media only screen and (min-device-width:700px) { |
|
||||
.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon { |
|
||||
font-size: 1.2em; |
|
||||
} |
|
||||
} |
|
||||
.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket { |
|
||||
height: 300px; |
|
||||
overflow: hidden; |
|
||||
} |
|
||||
.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket iframe { |
|
||||
height: 100%; |
|
||||
} |
|
||||
.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-toolstrip { |
|
||||
display: none; |
|
||||
} |
|
||||
/* |
|
||||
Note, that if you don't include this (::-webkit-file-upload-button), the toolbar width gets |
|
||||
increased and the whole body becomes scrollable. It's important! |
|
||||
*/ |
|
||||
input[type="file"]::-webkit-file-upload-button { |
|
||||
display: none; |
|
||||
} |
|
||||
@media only screen and (min-device-width : 320px) and (max-device-width : 568px) and (orientation : landscape) { |
|
||||
.tinymce-mobile-ios-container .tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon { |
|
||||
bottom: 50%; |
|
||||
} |
|
||||
} |
|
||||
File diff suppressed because one or more lines are too long
@ -1,5 +0,0 @@ |
|||||
<template> |
|
||||
<div id="app"> |
|
||||
<router-view/> |
|
||||
</div> |
|
||||
</template> |
|
||||
|
Before Width: | Height: | Size: 383 KiB |
|
Before Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 1.5 KiB |
@ -1,259 +0,0 @@ |
|||||
<!-- tinymce富文本编辑器组件 license by http://eleadmin.com --> |
|
||||
<template> |
|
||||
<editor |
|
||||
:init="config" |
|
||||
:disabled="disabled" |
|
||||
:value="value" |
|
||||
@input="updateValue"/> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
import tinymce from 'tinymce/tinymce'; |
|
||||
import 'tinymce/icons/default'; |
|
||||
import 'tinymce/themes/silver'; |
|
||||
import 'tinymce/plugins/code'; |
|
||||
import 'tinymce/plugins/print'; |
|
||||
import 'tinymce/plugins/preview'; |
|
||||
import 'tinymce/plugins/fullscreen'; |
|
||||
import 'tinymce/plugins/paste'; |
|
||||
import 'tinymce/plugins/searchreplace'; |
|
||||
import 'tinymce/plugins/save'; |
|
||||
import 'tinymce/plugins/autosave'; |
|
||||
import 'tinymce/plugins/link'; |
|
||||
import 'tinymce/plugins/autolink'; |
|
||||
import 'tinymce/plugins/image'; |
|
||||
import 'tinymce/plugins/imagetools'; |
|
||||
import 'tinymce/plugins/media'; |
|
||||
import 'tinymce/plugins/table'; |
|
||||
import 'tinymce/plugins/codesample'; |
|
||||
import 'tinymce/plugins/lists'; |
|
||||
import 'tinymce/plugins/advlist'; |
|
||||
import 'tinymce/plugins/hr'; |
|
||||
import 'tinymce/plugins/charmap'; |
|
||||
import 'tinymce/plugins/emoticons'; |
|
||||
import 'tinymce/plugins/anchor'; |
|
||||
import 'tinymce/plugins/directionality'; |
|
||||
import 'tinymce/plugins/pagebreak'; |
|
||||
import 'tinymce/plugins/quickbars'; |
|
||||
import 'tinymce/plugins/nonbreaking'; |
|
||||
import 'tinymce/plugins/visualblocks'; |
|
||||
import 'tinymce/plugins/visualchars'; |
|
||||
import 'tinymce/plugins/wordcount'; |
|
||||
import 'tinymce/plugins/emoticons/js/emojis'; |
|
||||
import Editor from '@tinymce/tinymce-vue'; |
|
||||
// 默认配置 |
|
||||
const defaultConfig = { |
|
||||
height: 300, |
|
||||
branding: false, |
|
||||
skin_url: '/tinymce/skins/ui/oxide', |
|
||||
content_css: '/tinymce/skins/content/default/content.min.css', |
|
||||
language_url: '/tinymce/langs/zh_CN.js', |
|
||||
language: 'zh_CN', |
|
||||
plugins: [ |
|
||||
'code', |
|
||||
'print', |
|
||||
'preview', |
|
||||
'fullscreen', |
|
||||
'paste', |
|
||||
'searchreplace', |
|
||||
'save', |
|
||||
'autosave', |
|
||||
'link', |
|
||||
'autolink', |
|
||||
'image', |
|
||||
'imagetools', |
|
||||
'media', |
|
||||
'table', |
|
||||
'codesample', |
|
||||
'lists', |
|
||||
'advlist', |
|
||||
'hr', |
|
||||
'charmap', |
|
||||
'emoticons', |
|
||||
'anchor', |
|
||||
'directionality', |
|
||||
'pagebreak', |
|
||||
'quickbars', |
|
||||
'nonbreaking', |
|
||||
'visualblocks', |
|
||||
'visualchars', |
|
||||
'wordcount' |
|
||||
].join(' '), |
|
||||
toolbar: [ |
|
||||
'fullscreen', |
|
||||
'preview', |
|
||||
'code', |
|
||||
'|', |
|
||||
'undo', |
|
||||
'redo', |
|
||||
'|', |
|
||||
'forecolor', |
|
||||
'backcolor', |
|
||||
'|', |
|
||||
'bold', |
|
||||
'italic', |
|
||||
'underline', |
|
||||
'strikethrough', |
|
||||
'|', |
|
||||
'alignleft', |
|
||||
'aligncenter', |
|
||||
'alignright', |
|
||||
'alignjustify', |
|
||||
'|', |
|
||||
'outdent', |
|
||||
'indent', |
|
||||
'|', |
|
||||
'numlist', |
|
||||
'bullist', |
|
||||
'|', |
|
||||
'formatselect', |
|
||||
'fontselect', |
|
||||
'fontsizeselect', |
|
||||
'|', |
|
||||
'link', |
|
||||
'image', |
|
||||
'media', |
|
||||
'emoticons', |
|
||||
'charmap', |
|
||||
'anchor', |
|
||||
'pagebreak', |
|
||||
'codesample', |
|
||||
'|', |
|
||||
'ltr', |
|
||||
'rtl' |
|
||||
].join(' '), |
|
||||
toolbar_drawer: 'sliding', |
|
||||
images_upload_handler: (blobInfo, success) => { |
|
||||
success('data:image/jpeg;base64,' + blobInfo.base64()); |
|
||||
}, |
|
||||
file_picker_types: 'media', |
|
||||
file_picker_callback: () => { |
|
||||
} |
|
||||
}; |
|
||||
|
|
||||
export default { |
|
||||
name: 'TinymceEditor', |
|
||||
components: {Editor}, |
|
||||
model: { |
|
||||
prop: 'value', |
|
||||
event: 'change' |
|
||||
}, |
|
||||
props: { |
|
||||
// 值 |
|
||||
value: String, |
|
||||
// 编辑器配置 |
|
||||
init: Object, |
|
||||
// 是否禁用 |
|
||||
disabled: Boolean, |
|
||||
// 自动跟随框架暗黑主题 |
|
||||
autoTheme: { |
|
||||
type: Boolean, |
|
||||
default: true |
|
||||
} |
|
||||
}, |
|
||||
data() { |
|
||||
let theme; |
|
||||
if (this.autoTheme) { |
|
||||
const darkMode = this.$store.state.theme.darkMode; |
|
||||
theme = { |
|
||||
skin_url: darkMode ? '/tinymce/skins/ui/oxide-dark' : '/tinymce/skins/ui/oxide', |
|
||||
content_css: darkMode ? '/tinymce/skins/content/dark/content.min.css' : '/tinymce/skins/content/default/content.min.css' |
|
||||
} |
|
||||
} |
|
||||
let config = Object.assign({}, defaultConfig, this.init, theme); |
|
||||
return { |
|
||||
// 编辑器配置 |
|
||||
config: config |
|
||||
}; |
|
||||
}, |
|
||||
computed: { |
|
||||
// 是否是暗黑模式 |
|
||||
darkMode() { |
|
||||
try { |
|
||||
return this.$store.state.theme.darkMode; |
|
||||
} catch (e) { |
|
||||
return null; |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
mounted() { |
|
||||
tinymce.init({}); |
|
||||
}, |
|
||||
methods: { |
|
||||
/* 更新value */ |
|
||||
updateValue(value) { |
|
||||
this.$emit('change', value); |
|
||||
}, |
|
||||
/* 切换编辑器主题 */ |
|
||||
changeTheme(darkMode) { |
|
||||
document.head.querySelectorAll('[id^="mce-"]').forEach(elem => { |
|
||||
let href = elem.getAttribute('href'); |
|
||||
if (href.indexOf('/oxide-dark/') !== -1) { |
|
||||
if (!darkMode) { |
|
||||
href = href.replace('/oxide-dark/', '/oxide/'); |
|
||||
elem.setAttribute('href', href); |
|
||||
} |
|
||||
} else { |
|
||||
if (darkMode) { |
|
||||
href = href.replace('/oxide/', '/oxide-dark/'); |
|
||||
elem.setAttribute('href', href); |
|
||||
} |
|
||||
} |
|
||||
}); |
|
||||
this.changeContentTheme(darkMode); |
|
||||
}, |
|
||||
/* 切换编辑器内容区的主题 */ |
|
||||
changeContentTheme(darkMode) { |
|
||||
document.body.querySelectorAll('iframe[id^="tiny-vue_"]').forEach(frame => { |
|
||||
const win = frame.contentWindow; |
|
||||
if (win) { |
|
||||
const doc = win.document; |
|
||||
if (doc) { |
|
||||
doc.head.querySelectorAll('[id^="mce-"]').forEach(elem => { |
|
||||
let href = elem.getAttribute('href'); |
|
||||
if (href.indexOf('/skins/ui/') !== -1) { |
|
||||
if (href.indexOf('/oxide-dark/') !== -1) { |
|
||||
if (!darkMode) { |
|
||||
href = href.replace('/oxide-dark/', '/oxide/'); |
|
||||
elem.setAttribute('href', href); |
|
||||
} |
|
||||
} else { |
|
||||
if (darkMode) { |
|
||||
href = href.replace('/oxide/', '/oxide-dark/'); |
|
||||
elem.setAttribute('href', href); |
|
||||
} |
|
||||
} |
|
||||
} else if (href.indexOf('/skins/content/') !== -1) { |
|
||||
if (href.indexOf('/dark/') !== -1) { |
|
||||
if (!darkMode) { |
|
||||
href = href.replace('/dark/', '/default/'); |
|
||||
elem.setAttribute('href', href); |
|
||||
} |
|
||||
} else { |
|
||||
if (darkMode) { |
|
||||
href = href.replace('/default/', '/dark/'); |
|
||||
elem.setAttribute('href', href); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
}); |
|
||||
} |
|
||||
} |
|
||||
}); |
|
||||
} |
|
||||
}, |
|
||||
watch: { |
|
||||
darkMode() { |
|
||||
if (this.autoTheme) { |
|
||||
this.changeTheme(this.darkMode); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style> |
|
||||
body .tox-tinymce-aux { |
|
||||
z-index: 19892000; |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,79 +0,0 @@ |
|||||
/** |
|
||||
* axios配置 |
|
||||
*/ |
|
||||
import Vue from 'vue'; |
|
||||
import VueAxios from 'vue-axios'; |
|
||||
import axios from 'axios'; |
|
||||
import store from '../store'; |
|
||||
import router from '../router'; |
|
||||
import setting from './setting'; |
|
||||
import {MessageBox} from 'element-ui'; |
|
||||
|
|
||||
Vue.use(VueAxios, axios); |
|
||||
|
|
||||
// 设置统一的url
|
|
||||
axios.defaults.baseURL = process.env.VUE_APP_API_BASE_URL; |
|
||||
|
|
||||
/* 请求拦截器 */ |
|
||||
axios.interceptors.request.use((config) => { |
|
||||
// 添加token到header
|
|
||||
let token = setting.takeToken(); |
|
||||
if (token) { |
|
||||
config.headers[setting.tokenHeaderName] = token; |
|
||||
} |
|
||||
return config; |
|
||||
}, function (error) { |
|
||||
return Promise.reject(error); |
|
||||
}); |
|
||||
|
|
||||
/* 响应拦截器 */ |
|
||||
axios.interceptors.response.use((res) => { |
|
||||
// 登录过期处理
|
|
||||
if (res.data.code === 40512) { |
|
||||
if (res.config.url === setting.menuUrl) { |
|
||||
goLogin(); |
|
||||
} else { |
|
||||
MessageBox.alert('登录状态已过期, 请退出重新登录!', '系统提示', { |
|
||||
confirmButtonText: '重新登录', |
|
||||
callback: (action) => { |
|
||||
if (action === 'confirm') { |
|
||||
goLogin(); |
|
||||
} |
|
||||
}, |
|
||||
beforeClose: () => { |
|
||||
MessageBox.close(); |
|
||||
} |
|
||||
}); |
|
||||
} |
|
||||
return Promise.reject(new Error(res.data.msg)); |
|
||||
} |
|
||||
// token自动续期
|
|
||||
let access_token = res.headers[setting.tokenHeaderName]; |
|
||||
if (access_token) { |
|
||||
setting.cacheToken(access_token); |
|
||||
} |
|
||||
return res; |
|
||||
}, (error) => { |
|
||||
return Promise.reject(error); |
|
||||
}); |
|
||||
|
|
||||
/** |
|
||||
* 跳转到登录页面 |
|
||||
*/ |
|
||||
function goLogin() { |
|
||||
store.dispatch('user/removeToken').then(() => { |
|
||||
const current = router.currentRoute; |
|
||||
if (current && current.path && current.path !== '/') { |
|
||||
router.push({ |
|
||||
path: '/login', |
|
||||
query: { |
|
||||
form: current.path |
|
||||
} |
|
||||
}).then(() => { |
|
||||
}); |
|
||||
} else { |
|
||||
router.push('/login').then(() => { |
|
||||
}); |
|
||||
} |
|
||||
}); |
|
||||
} |
|
||||
@ -1,134 +0,0 @@ |
|||||
/** |
|
||||
* 项目统一配置 |
|
||||
*/ |
|
||||
export default { |
|
||||
// 路由白名单(不需要登录的)
|
|
||||
whiteList: ['/login', '/forget'], |
|
||||
// 不显示全局页脚的路由地址
|
|
||||
hideFooters: ['/system/dictionary', '/system/organization'], |
|
||||
// 需要缓存的组件名称
|
|
||||
keepAliveList: [], |
|
||||
// 菜单数据接口
|
|
||||
menuUrl: '/manager/permissMenu', |
|
||||
// 自定义解析接口菜单数据
|
|
||||
parseMenu: null, |
|
||||
// 自定义解析接口菜单每一个数据格式
|
|
||||
parseMenuItem: (item) => { |
|
||||
if (!item) { |
|
||||
return; |
|
||||
} |
|
||||
item.menuId = item.id; |
|
||||
item.title = item.name; |
|
||||
item.parentId = item.parent_id; |
|
||||
item.menuType = item.menu_type; |
|
||||
return item; |
|
||||
}, |
|
||||
// 直接指定菜单数据
|
|
||||
menus: null, |
|
||||
// 用户信息接口
|
|
||||
userUrl: '/manager/readPersional', |
|
||||
uploadImageUrl:'http://api.static.ahbmz.com/api/upload', |
|
||||
// 自定义解析接口用户信息
|
|
||||
parseUser(res) { |
|
||||
// 这里code和msg字段如果不一样可在这里修改
|
|
||||
let result = {code: res.code, msg: res.msg}; |
|
||||
if (res.data) { |
|
||||
// 这里只需要姓名和头像两个字段,如需缓存其它字段可在这里添加
|
|
||||
result.data = { |
|
||||
nickname: res.data.truename, |
|
||||
avatar: res.data.avatar |
|
||||
}; |
|
||||
// 下面是获取角色和权限列表,需要string数组类型
|
|
||||
if (res.data.roles) { |
|
||||
result.data.roles = res.data.roles.map(d => d.role_code); |
|
||||
} |
|
||||
if (res.data.authorities) { |
|
||||
result.data.authorities = res.data.authorities.map(d => d.authority); |
|
||||
} |
|
||||
} |
|
||||
return result; |
|
||||
}, |
|
||||
// token传递的header名称
|
|
||||
tokenHeaderName: 'Token', |
|
||||
// token存储的名称
|
|
||||
tokenStoreName: 'access_token', |
|
||||
// 获取缓存的token
|
|
||||
takeToken() { |
|
||||
let token = localStorage.getItem(this.tokenStoreName); |
|
||||
if (!token) { |
|
||||
token = sessionStorage.getItem(this.tokenStoreName); |
|
||||
} |
|
||||
return token; |
|
||||
}, |
|
||||
// 缓存token
|
|
||||
cacheToken(token, remember) { |
|
||||
localStorage.removeItem(this.tokenStoreName); |
|
||||
sessionStorage.removeItem(this.tokenStoreName); |
|
||||
if (token) { |
|
||||
if (remember) { |
|
||||
localStorage.setItem(this.tokenStoreName, token); |
|
||||
} else { |
|
||||
sessionStorage.setItem(this.tokenStoreName, token); |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
// 用户信息存储的名称
|
|
||||
userStoreName: 'user', |
|
||||
// 获取缓存的用户信息
|
|
||||
takeUser() { |
|
||||
try { |
|
||||
return JSON.parse(localStorage.getItem(this.userStoreName)) || {}; |
|
||||
} catch (e) { |
|
||||
console.error(e); |
|
||||
} |
|
||||
return {}; |
|
||||
}, |
|
||||
// 缓存用户信息
|
|
||||
cacheUser(user) { |
|
||||
if (user) { |
|
||||
localStorage.setItem(this.userStoreName, JSON.stringify(user)); |
|
||||
} else { |
|
||||
localStorage.removeItem(this.userStoreName); |
|
||||
} |
|
||||
}, |
|
||||
// 主题配置存储的名称
|
|
||||
themeStoreName: 'theme', |
|
||||
// 首页tab显示标题, null会根据菜单自动获取
|
|
||||
homeTitle: '主页', |
|
||||
// 首页路径, null会自动获取
|
|
||||
homePath: null, |
|
||||
// 顶栏是否显示主题设置按钮
|
|
||||
showSetting: true, |
|
||||
// 侧边栏风格: 0亮色, 1暗色
|
|
||||
sideStyle: 0, |
|
||||
// 顶栏风格: 0亮色, 1暗色, 2主色
|
|
||||
headStyle: 2, |
|
||||
// 标签页风格: 0默认, 1圆点, 2卡片
|
|
||||
tabStyle: 0, |
|
||||
// 布局风格: 0默认, 1顶部菜单风格, 2混合菜单风格
|
|
||||
layoutStyle: 0, |
|
||||
// 是否固定侧栏
|
|
||||
fixedSidebar: true, |
|
||||
// 是否固定顶栏
|
|
||||
fixedHeader: false, |
|
||||
// 是否固定主体
|
|
||||
fixedBody: true, |
|
||||
// logo是否自适应宽度
|
|
||||
logoAutoSize: true, |
|
||||
// 内容区域宽度是否铺满
|
|
||||
bodyFull: true, |
|
||||
// 是否开启多标签
|
|
||||
showTabs: true, |
|
||||
// 侧栏是否多彩图标
|
|
||||
colorfulIcon: true, |
|
||||
// 侧边栏是否只保持一个子菜单展开
|
|
||||
sideUniqueOpen: true, |
|
||||
// 是否开启页脚
|
|
||||
showFooter: true, |
|
||||
// 是否是色弱模式
|
|
||||
weakMode: false, |
|
||||
// 是否是暗黑模式
|
|
||||
darkMode: false, |
|
||||
// 默认主题色
|
|
||||
color: null |
|
||||
} |
|
||||
@ -1,33 +0,0 @@ |
|||||
<!-- 页脚 --> |
|
||||
<template> |
|
||||
<div class="ele-text-center" style="padding: 16px 0;"> |
|
||||
<div> |
|
||||
<a |
|
||||
class="ele-text-secondary" |
|
||||
href="https://eleadmin.com" |
|
||||
target="_blank">官网 |
|
||||
</a> |
|
||||
<em/> |
|
||||
<a |
|
||||
class="ele-text-secondary" |
|
||||
href="https://eleadmin.com/doc/eleadmin/" |
|
||||
target="_blank">文档 |
|
||||
</a> |
|
||||
<em/> |
|
||||
<a |
|
||||
class="ele-text-secondary" |
|
||||
href="https://eleadmin.com/goods/8" |
|
||||
target="_blank">授权 |
|
||||
</a> |
|
||||
</div> |
|
||||
<div class="ele-text-secondary" style="margin-top: 8px;"> |
|
||||
Copyright © 2021 武汉易云智科技有限公司 |
|
||||
</div> |
|
||||
</div> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
export default { |
|
||||
name: 'EleFooter' |
|
||||
} |
|
||||
</script> |
|
||||
@ -1,111 +0,0 @@ |
|||||
<!-- 顶栏右侧区域按钮 --> |
|
||||
<template> |
|
||||
<div class="ele-admin-header-tool"> |
|
||||
<div |
|
||||
class="ele-admin-header-tool-item" |
|
||||
@click="toggleFullscreen"> |
|
||||
<i :class="isFullscreen?'el-icon-_screen-restore':'el-icon-_screen-full'"></i> |
|
||||
</div> |
|
||||
<!-- 消息通知 --> |
|
||||
<div class="ele-admin-header-tool-item"> |
|
||||
<ele-notice/> |
|
||||
</div> |
|
||||
<!-- 用户信息 --> |
|
||||
<div class="ele-admin-header-tool-item"> |
|
||||
<el-dropdown @command="onUserDropClick"> |
|
||||
<div class="ele-admin-header-avatar"> |
|
||||
<el-avatar :src="loginUser.avatar"/> |
|
||||
<span>{{ loginUser.nickname }}</span> |
|
||||
<i class="el-icon-arrow-down"></i> |
|
||||
</div> |
|
||||
<el-dropdown-menu slot="dropdown"> |
|
||||
<el-dropdown-item |
|
||||
command="user" |
|
||||
icon="el-icon-user">个人中心 |
|
||||
</el-dropdown-item> |
|
||||
<el-dropdown-item |
|
||||
command="password" |
|
||||
icon="el-icon-key">修改密码 |
|
||||
</el-dropdown-item> |
|
||||
<el-dropdown-item |
|
||||
command="logout" |
|
||||
icon="el-icon-switch-button" |
|
||||
divided>退出登录 |
|
||||
</el-dropdown-item> |
|
||||
</el-dropdown-menu> |
|
||||
</el-dropdown> |
|
||||
</div> |
|
||||
<!-- 主题设置 --> |
|
||||
<div |
|
||||
class="ele-admin-header-tool-item" |
|
||||
v-if="showSetting" |
|
||||
@click="openSetting"> |
|
||||
<i class="el-icon-_more"></i> |
|
||||
</div> |
|
||||
</div> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
import EleNotice from './notice'; |
|
||||
|
|
||||
export default { |
|
||||
name: 'EleHeaderRight', |
|
||||
components: {EleNotice}, |
|
||||
props: { |
|
||||
// 是否显示打开设置抽屉按钮 |
|
||||
showSetting: { |
|
||||
type: Boolean, |
|
||||
default: true |
|
||||
} |
|
||||
}, |
|
||||
computed: { |
|
||||
// 当前登录用户信息 |
|
||||
loginUser() { |
|
||||
return this.$store.state.user.user; |
|
||||
} |
|
||||
}, |
|
||||
data() { |
|
||||
return { |
|
||||
// 是否全屏状态 |
|
||||
isFullscreen: false |
|
||||
}; |
|
||||
}, |
|
||||
methods: { |
|
||||
/* 个人信息下拉菜单点击 */ |
|
||||
onUserDropClick(command) { |
|
||||
if (command === 'user') { |
|
||||
if (this.$route.fullPath !== '/user/info') { |
|
||||
this.$router.push('/user/info'); |
|
||||
} |
|
||||
} else if (command === 'password') { |
|
||||
this.$emit('item-click', 'password'); |
|
||||
} else if (command === 'logout') { |
|
||||
// 退出登录 |
|
||||
this.$confirm( |
|
||||
'确定要退出登录吗?', |
|
||||
'提示', |
|
||||
{type: 'warning'} |
|
||||
).then(() => { |
|
||||
// 清除缓存的token |
|
||||
this.$store.dispatch('user/setToken').then(() => { |
|
||||
location.replace('/'); |
|
||||
}); |
|
||||
}).catch(() => { |
|
||||
}); |
|
||||
} |
|
||||
}, |
|
||||
/* 打开设置抽屉 */ |
|
||||
openSetting() { |
|
||||
this.$emit('item-click', 'setting'); |
|
||||
}, |
|
||||
/* 全屏切换 */ |
|
||||
toggleFullscreen() { |
|
||||
try { |
|
||||
this.isFullscreen = this.$util.toggleFullscreen(); |
|
||||
} catch (e) { |
|
||||
this.$message.error('您的浏览器不支持全屏模式'); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
@ -1,189 +0,0 @@ |
|||||
<template> |
|
||||
<ele-pro-layout |
|
||||
:collapse="theme.collapse" |
|
||||
:fixed-header="theme.fixedHeader" |
|
||||
:fixed-sidebar="theme.fixedSidebar" |
|
||||
:fixed-body="theme.fixedBody" |
|
||||
:layout-style="theme.layoutStyle" |
|
||||
:head-style="theme.headStyle" |
|
||||
:side-style="theme.sideStyle" |
|
||||
:logo-auto-size="theme.logoAutoSize" |
|
||||
:colorful-icon="theme.colorfulIcon" |
|
||||
:side-unique-open="theme.sideUniqueOpen" |
|
||||
:show-tabs="theme.showTabs" |
|
||||
:tab-style="theme.tabStyle" |
|
||||
:body-full="theme.bodyFull" |
|
||||
:keep-alive-list="keepAliveList" |
|
||||
:home-title="homeTitle" |
|
||||
:project-name="projectName" |
|
||||
:tabs="user.tabs" |
|
||||
:menus="user.menus" |
|
||||
:need-setting="needSetting" |
|
||||
:show-setting.sync="showSetting" |
|
||||
:color="theme.color" |
|
||||
:dark-mode="theme.darkMode" |
|
||||
:weak-mode="theme.weakMode" |
|
||||
:show-content="showContent" |
|
||||
@update-collapse="updateCollapse" |
|
||||
@update-screen="updateScreen" |
|
||||
@tab-add="tabAdd" |
|
||||
@tab-remove="tabRemove" |
|
||||
@tab-remove-left="tabRemoveLeft" |
|
||||
@tab-remove-right="tabRemoveRight" |
|
||||
@tab-remove-other="tabRemoveOther" |
|
||||
@tab-remove-all="tabRemoveAll" |
|
||||
@change-color="changeColor" |
|
||||
@change-style="changeStyle"> |
|
||||
<!-- logo图标 --> |
|
||||
<template slot="logo"> |
|
||||
<img src="@/assets/logo.svg" alt="logo"/> |
|
||||
</template> |
|
||||
<!-- 顶栏右侧区域 --> |
|
||||
<template slot="right"> |
|
||||
<ele-header-right |
|
||||
:show-setting="needSetting" |
|
||||
@item-click="onItemClick"/> |
|
||||
</template> |
|
||||
<!-- 修改密码弹窗 --> |
|
||||
<ele-password :visible.sync="showPassword"/> |
|
||||
</ele-pro-layout> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
import {mapGetters} from 'vuex'; |
|
||||
import setting from '@/config/setting'; |
|
||||
import EleHeaderRight from './header-right'; |
|
||||
import ElePassword from './password'; |
|
||||
|
|
||||
export default { |
|
||||
name: 'EleLayout', |
|
||||
components: { |
|
||||
EleHeaderRight, |
|
||||
ElePassword |
|
||||
}, |
|
||||
computed: { |
|
||||
// 主页标题 |
|
||||
homeTitle() { |
|
||||
return setting.homeTitle; |
|
||||
}, |
|
||||
// 需要缓存的组件 |
|
||||
keepAliveList() { |
|
||||
return setting.keepAliveList; |
|
||||
}, |
|
||||
// 是否需要主题设置按钮 |
|
||||
needSetting() { |
|
||||
return setting.showSetting; |
|
||||
}, |
|
||||
...mapGetters(['theme', 'user']) |
|
||||
}, |
|
||||
data() { |
|
||||
return { |
|
||||
// 项目名 |
|
||||
projectName: process.env.VUE_APP_NAME, |
|
||||
// 是否显示修改密码弹窗 |
|
||||
showPassword: false, |
|
||||
// 是否显示主题设置抽屉 |
|
||||
showSetting: false, |
|
||||
// 是否显示主体部分, 如果你的首页用到了权限控制指令, 把这个改成false, 避免权限控制指令可能不生效 |
|
||||
showContent: true |
|
||||
}; |
|
||||
}, |
|
||||
mounted() { |
|
||||
// 获取用户信息 |
|
||||
this.getUserInfo(); |
|
||||
}, |
|
||||
methods: { |
|
||||
/* 获取当前用户信息 */ |
|
||||
getUserInfo() { |
|
||||
if (setting.userUrl) { |
|
||||
this.$http.get(setting.userUrl).then(res => { |
|
||||
let result; |
|
||||
if (setting.parseUser) { |
|
||||
result = setting.parseUser(res.data); |
|
||||
} else { |
|
||||
result = res.data; |
|
||||
} |
|
||||
if (res.data.code === 0) { |
|
||||
const user = result.data; |
|
||||
this.$store.dispatch('user/setUser', user); |
|
||||
this.$store.dispatch('user/setRoles', user ? user.roles : null); |
|
||||
this.$store.dispatch('user/setAuthorities', user ? user.authorities : null); |
|
||||
} else { |
|
||||
this.$message.error(res.data.msg); |
|
||||
} |
|
||||
// 在用户权限信息请求完成后再渲染主体部分, 以免权限控制指令不生效 |
|
||||
this.showContent = true; |
|
||||
}).catch(e => { |
|
||||
this.showContent = true; |
|
||||
this.$message.error(e.message); |
|
||||
}); |
|
||||
} |
|
||||
}, |
|
||||
/* 顶栏右侧点击 */ |
|
||||
onItemClick(key) { |
|
||||
if (key === 'password') { |
|
||||
this.showPassword = true; |
|
||||
} else if (key === 'setting') { |
|
||||
this.showSetting = true; |
|
||||
} |
|
||||
}, |
|
||||
/* 更新collapse */ |
|
||||
updateCollapse(value) { |
|
||||
this.$store.dispatch('theme/set', { |
|
||||
key: 'collapse', |
|
||||
value: value |
|
||||
}); |
|
||||
}, |
|
||||
/* 更新屏幕尺寸 */ |
|
||||
updateScreen() { |
|
||||
this.$store.dispatch('theme/updateScreen'); |
|
||||
}, |
|
||||
/* 切换主题色 */ |
|
||||
changeColor(value) { |
|
||||
const loading = this.$loading({ |
|
||||
lock: true, |
|
||||
background: 'transparent' |
|
||||
}); |
|
||||
this.$store.dispatch('theme/setColor', value).then(() => { |
|
||||
loading.close(); |
|
||||
}).catch(e => { |
|
||||
loading.close(); |
|
||||
console.error(e); |
|
||||
this.$message.error('主题加载失败'); |
|
||||
}); |
|
||||
}, |
|
||||
/* 切换主题风格 */ |
|
||||
changeStyle(value) { |
|
||||
this.$store.dispatch('theme/set', value); |
|
||||
}, |
|
||||
/* 添加tab */ |
|
||||
tabAdd(value) { |
|
||||
this.$store.dispatch('user/tabAdd', value); |
|
||||
}, |
|
||||
/* 移除tab */ |
|
||||
tabRemove(obj) { |
|
||||
this.$store.dispatch('user/tabRemove', obj.name).then(last => { |
|
||||
if (obj.active === obj.name) { |
|
||||
this.$router.push(last === -1 ? '/' : this.user.tabs[last].path); |
|
||||
} |
|
||||
}); |
|
||||
}, |
|
||||
/* 移除左边tab */ |
|
||||
tabRemoveLeft(value) { |
|
||||
this.$store.dispatch('user/tabRemoveLeft', value); |
|
||||
}, |
|
||||
/* 移除右边tab */ |
|
||||
tabRemoveRight(value) { |
|
||||
this.$store.dispatch('user/tabRemoveRight', value); |
|
||||
}, |
|
||||
/* 移除其它tab */ |
|
||||
tabRemoveOther(value) { |
|
||||
this.$store.dispatch('user/tabRemoveOther', value); |
|
||||
}, |
|
||||
/* 移除全部tab */ |
|
||||
tabRemoveAll() { |
|
||||
this.$store.dispatch('user/tabRemoveAll'); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
@ -1,300 +0,0 @@ |
|||||
<!-- 顶栏消息图标 --> |
|
||||
<template> |
|
||||
<el-popover |
|
||||
width="300" |
|
||||
v-model="visible" |
|
||||
trigger="click" |
|
||||
popper-class="ele-notice-pop" |
|
||||
transition="el-zoom-in-top" |
|
||||
class="ele-notice-group"> |
|
||||
<div |
|
||||
class="ele-notice-group" |
|
||||
slot="reference"> |
|
||||
<el-badge |
|
||||
:value="allNum" |
|
||||
:hidden="!allNum"> |
|
||||
<i class="el-icon-bell"></i> |
|
||||
</el-badge> |
|
||||
</div> |
|
||||
<el-tabs |
|
||||
v-model="active" |
|
||||
class="user-info-tabs"> |
|
||||
<el-tab-pane |
|
||||
:label="noticeLabel" |
|
||||
name="notice"> |
|
||||
<div class="ele-notice-list ele-scrollbar-mini"> |
|
||||
<div |
|
||||
v-for="(item,index) in notice" |
|
||||
:key="index" |
|
||||
class="ele-notice-item"> |
|
||||
<div class="ele-cell ele-notice-item-wrapper"> |
|
||||
<i :class="[item.icon,'ele-notice-item-icon']"></i> |
|
||||
<div class="ele-cell-content"> |
|
||||
<div class="ele-elip">{{ item.title }}</div> |
|
||||
<div class="ele-text-secondary ele-elip">{{ item.pub_time }}</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
<el-divider/> |
|
||||
</div> |
|
||||
</div> |
|
||||
<div |
|
||||
v-if="notice.length" |
|
||||
class="ele-cell ele-notice-actions"> |
|
||||
<!-- <div--> |
|
||||
<!-- @click="clear(1)"--> |
|
||||
<!-- class="ele-cell-content">清空通知--> |
|
||||
<!-- </div>--> |
|
||||
<el-divider |
|
||||
direction="vertical" |
|
||||
class="line-color-light"/> |
|
||||
<div |
|
||||
@click="more(1)" |
|
||||
class="ele-cell-content">查看更多 |
|
||||
</div> |
|
||||
</div> |
|
||||
<ele-empty |
|
||||
v-if="!notice.length" |
|
||||
text="你已查看所有通知"/> |
|
||||
</el-tab-pane> |
|
||||
<el-tab-pane |
|
||||
:label="messageLabel" |
|
||||
name="message"> |
|
||||
<div class="ele-notice-list ele-scrollbar-mini"> |
|
||||
<div |
|
||||
v-for="(item,index) in message" |
|
||||
:key="index" |
|
||||
class="ele-notice-item"> |
|
||||
<div class="ele-cell ele-notice-item-wrapper ele-cell-align-top"> |
|
||||
<el-avatar |
|
||||
:src="item.avatar_str" |
|
||||
size="medium"/> |
|
||||
<div class="ele-cell-content"> |
|
||||
<div class="ele-elip">{{ item.title }}</div> |
|
||||
<div class="ele-text-secondary ele-elip">{{ item.content }}</div> |
|
||||
<div class="ele-cell-desc ele-elip">{{ item.pub_time }}</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
<el-divider/> |
|
||||
</div> |
|
||||
</div> |
|
||||
<div |
|
||||
v-if="message.length" |
|
||||
class="ele-cell ele-notice-actions"> |
|
||||
<!-- <div--> |
|
||||
<!-- @click="clear(2)"--> |
|
||||
<!-- class="ele-cell-content">清空消息--> |
|
||||
<!-- </div>--> |
|
||||
<el-divider |
|
||||
direction="vertical" |
|
||||
class="line-color-light"/> |
|
||||
<div |
|
||||
@click="more(2)" |
|
||||
class="ele-cell-content">查看更多 |
|
||||
</div> |
|
||||
</div> |
|
||||
<ele-empty |
|
||||
v-if="!message.length" |
|
||||
text="你已读完所有私信"/> |
|
||||
</el-tab-pane> |
|
||||
</el-tabs> |
|
||||
</el-popover> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
export default { |
|
||||
name: 'EleNotice', |
|
||||
data() { |
|
||||
return { |
|
||||
visible: false, |
|
||||
active: 'notice', |
|
||||
notice: [ |
|
||||
|
|
||||
], |
|
||||
notice_count:0, |
|
||||
message: [ |
|
||||
|
|
||||
], |
|
||||
message_count:0, |
|
||||
}; |
|
||||
}, |
|
||||
|
|
||||
computed: { |
|
||||
|
|
||||
|
|
||||
// 通知标题 |
|
||||
noticeLabel() { |
|
||||
if (this.notice_count) { |
|
||||
return `通知(${this.notice_count})`; |
|
||||
} |
|
||||
return '通知'; |
|
||||
}, |
|
||||
// 私信标题 |
|
||||
messageLabel() { |
|
||||
if (this.message_count) { |
|
||||
return `私信(${this.message_count})`; |
|
||||
} |
|
||||
return '私信'; |
|
||||
}, |
|
||||
|
|
||||
// 所有消息数量 |
|
||||
allNum() { |
|
||||
return this.notice_count + this.message_count ; |
|
||||
} |
|
||||
}, |
|
||||
|
|
||||
mounted() { |
|
||||
// 获取用户信息 |
|
||||
this.getMessage(); |
|
||||
|
|
||||
setInterval(this.setM,60000) |
|
||||
}, |
|
||||
|
|
||||
methods: { |
|
||||
setM(){ |
|
||||
this.setMessage(); |
|
||||
this.getMessage(); |
|
||||
}, |
|
||||
getMessage(){ |
|
||||
this.$http.get('/manager/getMessage?type=99').then(res => { |
|
||||
if (res.data.code === 0) { |
|
||||
this.message = res.data.data.sx.list; |
|
||||
this.notice = res.data.data.gg.list; |
|
||||
this.message_count = res.data.data.sx.count; |
|
||||
this.notice_count = res.data.data.gg.count; |
|
||||
} |
|
||||
}) |
|
||||
}, |
|
||||
setMessage(){ |
|
||||
this.$http.get('/manager/setMessage?type=99').then(res => { |
|
||||
if (res.data.code === 0) { |
|
||||
this.message = res.data.data.sx.list; |
|
||||
this.notice = res.data.data.gg.list; |
|
||||
this.message_count = res.data.data.sx.count; |
|
||||
this.notice_count = res.data.data.gg.count; |
|
||||
} |
|
||||
}) |
|
||||
}, |
|
||||
|
|
||||
/* 清空消息 */ |
|
||||
clear(type) { |
|
||||
if (type === 1) { |
|
||||
this.notice = []; |
|
||||
} else if (type === 2) { |
|
||||
this.message = []; |
|
||||
} |
|
||||
}, |
|
||||
/* 查看更多 */ |
|
||||
more(type) { |
|
||||
console.log(type); |
|
||||
if (this.$route.path !== '/user/message') { |
|
||||
this.$router.push('/user/message'); |
|
||||
} |
|
||||
this.show = false; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style lang="scss"> |
|
||||
.ele-notice-group { |
|
||||
vertical-align: top !important; |
|
||||
display: inline-block; |
|
||||
|
|
||||
.el-badge { |
|
||||
line-height: normal; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
/* 消息通知pop */ |
|
||||
.ele-notice-pop { |
|
||||
margin: 0 !important; |
|
||||
padding: 0 !important; |
|
||||
|
|
||||
/* tab */ |
|
||||
.el-tabs__nav-scroll { |
|
||||
text-align: center; |
|
||||
} |
|
||||
|
|
||||
.el-tabs__nav { |
|
||||
float: none; |
|
||||
display: inline-block; |
|
||||
} |
|
||||
|
|
||||
.el-tabs__item { |
|
||||
padding: 0 20px; |
|
||||
} |
|
||||
|
|
||||
/* 空视图 */ |
|
||||
.ele-empty { |
|
||||
padding: 100px 0; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
/* 列表 */ |
|
||||
.ele-notice-list { |
|
||||
padding-top: 8px; |
|
||||
max-height: 360px; |
|
||||
overflow: auto; |
|
||||
} |
|
||||
|
|
||||
.ele-notice-item { |
|
||||
.ele-notice-item-wrapper { |
|
||||
padding: 12px 15px; |
|
||||
transition: background-color .2s; |
|
||||
cursor: pointer; |
|
||||
|
|
||||
&:hover { |
|
||||
background-color: hsla(0, 0%, 60%, .05); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.ele-text-secondary { |
|
||||
margin-top: 5px; |
|
||||
font-size: 13px; |
|
||||
} |
|
||||
|
|
||||
.ele-cell-desc { |
|
||||
margin-top: 3px !important; |
|
||||
font-size: 12px !important; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.ele-notice-item-icon { |
|
||||
width: 32px; |
|
||||
height: 32px; |
|
||||
line-height: 32px !important; |
|
||||
color: #FFF; |
|
||||
font-size: 16px; |
|
||||
background-color: #60B2FC; |
|
||||
border-radius: 50%; |
|
||||
text-align: center; |
|
||||
|
|
||||
|
|
||||
&.el-icon-s-check { |
|
||||
background-color: #F5686F; |
|
||||
} |
|
||||
|
|
||||
&.el-icon-video-camera { |
|
||||
background-color: #7CD734; |
|
||||
} |
|
||||
|
|
||||
&.el-icon-s-claim { |
|
||||
background-color: #FAAD14; |
|
||||
} |
|
||||
|
|
||||
&.el-icon-message-solid { |
|
||||
background-color: #2BCACD; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
/* 操作按钮 */ |
|
||||
.ele-notice-actions > .ele-cell-content { |
|
||||
line-height: 42px; |
|
||||
text-align: center; |
|
||||
cursor: pointer; |
|
||||
|
|
||||
&:hover { |
|
||||
background-color: hsla(0, 0%, 60%, .05); |
|
||||
} |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,136 +0,0 @@ |
|||||
<!-- 修改密码弹窗 --> |
|
||||
<template> |
|
||||
<el-dialog |
|
||||
:visible="visible" |
|
||||
title="修改密码" |
|
||||
width="400px" |
|
||||
@closed="onClose" |
|
||||
@update:visible="updateVisible" |
|
||||
:append-to-body="true" |
|
||||
:lock-scroll="false"> |
|
||||
<el-form |
|
||||
ref="form" |
|
||||
:model="form" |
|
||||
:rules="rules" |
|
||||
label-width="82px" |
|
||||
@keyup.enter.native="save"> |
|
||||
<el-form-item |
|
||||
label="旧密码:" |
|
||||
prop="old"> |
|
||||
<el-input |
|
||||
v-model="form.old" |
|
||||
placeholder="请输入旧密码" |
|
||||
show-password/> |
|
||||
</el-form-item> |
|
||||
<el-form-item |
|
||||
label="新密码:" |
|
||||
prop="password"> |
|
||||
<el-input |
|
||||
v-model="form.password" |
|
||||
placeholder="请输入新密码" |
|
||||
show-password/> |
|
||||
</el-form-item> |
|
||||
<el-form-item |
|
||||
label="确认密码:" |
|
||||
prop="password2"> |
|
||||
<el-input |
|
||||
v-model="form.password2" |
|
||||
placeholder="请再次输入新密码" |
|
||||
show-password/> |
|
||||
</el-form-item> |
|
||||
</el-form> |
|
||||
<div slot="footer"> |
|
||||
<el-button |
|
||||
@click="cancel">取消 |
|
||||
</el-button> |
|
||||
<el-button |
|
||||
type="primary" |
|
||||
@click="save">确定 |
|
||||
</el-button> |
|
||||
</div> |
|
||||
</el-dialog> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
export default { |
|
||||
name: 'ElePassword', |
|
||||
props: { |
|
||||
visible: Boolean |
|
||||
}, |
|
||||
data() { |
|
||||
let rePswRule = (rule, value, callback) => { |
|
||||
if (!value) { |
|
||||
callback(new Error('请再次输入新密码')); |
|
||||
} else if (value !== this.form.password) { |
|
||||
callback(new Error('两次输入密码不一致')); |
|
||||
} else { |
|
||||
callback(); |
|
||||
} |
|
||||
}; |
|
||||
return { |
|
||||
// 表单数据 |
|
||||
form: { |
|
||||
old: '', |
|
||||
password: '', |
|
||||
password2: '' |
|
||||
}, |
|
||||
// 表单验证 |
|
||||
rules: { |
|
||||
old: [ |
|
||||
{required: true, message: '请输入旧密码', trigger: 'blur'} |
|
||||
], |
|
||||
password: [ |
|
||||
{required: true, message: '请输入新密码', trigger: 'blur'} |
|
||||
], |
|
||||
password2: [ |
|
||||
{validator: rePswRule, trigger: 'blur'} |
|
||||
] |
|
||||
}, |
|
||||
// 按钮loading |
|
||||
loading: false |
|
||||
}; |
|
||||
}, |
|
||||
methods: { |
|
||||
/* 保存修改 */ |
|
||||
save() { |
|
||||
this.$refs['form'].validate((valid) => { |
|
||||
if (valid) { |
|
||||
this.loading = true; |
|
||||
let formData = new FormData(); |
|
||||
formData.append('old_password', this.form.old); |
|
||||
formData.append('password', this.form.password); |
|
||||
formData.append('password2', this.form.password2); |
|
||||
this.$http.post('/manager/passwordEdit', formData).then(res => { |
|
||||
this.loading = false; |
|
||||
if (res.data.code === 0) { |
|
||||
this.$message({type: 'success', message: res.data.msg}); |
|
||||
this.cancel(); |
|
||||
} else { |
|
||||
this.$message.error(res.data.msg); |
|
||||
} |
|
||||
}).catch(e => { |
|
||||
this.loading = false; |
|
||||
this.$message.error(e.message); |
|
||||
}); |
|
||||
} else { |
|
||||
return false; |
|
||||
} |
|
||||
}); |
|
||||
}, |
|
||||
/* 取消 */ |
|
||||
cancel() { |
|
||||
this.updateVisible(false); |
|
||||
}, |
|
||||
/* 关闭回调 */ |
|
||||
onClose() { |
|
||||
this.form = {}; |
|
||||
this.$refs['form'].resetFields(); |
|
||||
this.loading = false; |
|
||||
}, |
|
||||
/* 修改visible */ |
|
||||
updateVisible(value) { |
|
||||
this.$emit('update:visible', value); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
@ -1,23 +0,0 @@ |
|||||
/** 主入口js */ |
|
||||
import Vue from 'vue'; |
|
||||
import App from './App.vue'; |
|
||||
import router from './router'; |
|
||||
import store from './store'; |
|
||||
import setting from './config/setting'; |
|
||||
import permission from '@/utils/permission'; |
|
||||
import VueClipboard from 'vue-clipboard2'; |
|
||||
import './config/axios-config'; |
|
||||
import EleAdmin from 'ele-admin'; |
|
||||
import './styles/index.scss'; |
|
||||
|
|
||||
Vue.config.productionTip = false; |
|
||||
Vue.prototype.$setting = setting; |
|
||||
Vue.use(EleAdmin, {size: 'medium'}); |
|
||||
Vue.use(permission); |
|
||||
Vue.use(VueClipboard); |
|
||||
|
|
||||
new Vue({ |
|
||||
router, |
|
||||
store, |
|
||||
render: h => h(App) |
|
||||
}).$mount('#app'); |
|
||||
@ -1,145 +0,0 @@ |
|||||
/** |
|
||||
* 路由配置 |
|
||||
*/ |
|
||||
import Vue from 'vue'; |
|
||||
import VueRouter from 'vue-router'; |
|
||||
import store from '@/store'; |
|
||||
import setting from '@/config/setting'; |
|
||||
import EleLayout from '@/layout'; |
|
||||
import {EleEmptyLayout, EleIframeLayout} from 'ele-admin'; |
|
||||
import NProgress from 'nprogress'; |
|
||||
|
|
||||
Vue.use(VueRouter); |
|
||||
|
|
||||
// 静态路由
|
|
||||
const routes = [ |
|
||||
{ |
|
||||
path: '/login', |
|
||||
component: () => import('@/views/login/login'), |
|
||||
meta: {title: '登录'} |
|
||||
}, |
|
||||
{ |
|
||||
path: '/forget', |
|
||||
component: () => import('@/views/login/forget'), |
|
||||
meta: {title: '忘记密码'} |
|
||||
}, |
|
||||
{ |
|
||||
path: '*', |
|
||||
component: () => import('@/views/exception/404'), |
|
||||
meta: {title: ''} |
|
||||
} |
|
||||
]; |
|
||||
|
|
||||
const router = new VueRouter({ |
|
||||
routes, |
|
||||
mode: 'history' // 把这个删掉就是hash模式
|
|
||||
}); |
|
||||
|
|
||||
// 路由守卫
|
|
||||
router.beforeEach((to, from, next) => { |
|
||||
NProgress.start(); |
|
||||
updateTitle(to); |
|
||||
// 判断是否登录
|
|
||||
if (setting.takeToken()) { |
|
||||
// 判断是否已经注册动态路由
|
|
||||
if (!store.state.user.menus) { |
|
||||
// 获取动态路由
|
|
||||
store.dispatch('user/getMenus').then(({menus, home}) => { |
|
||||
if (menus) { |
|
||||
router.addRoute({ |
|
||||
name: '/', |
|
||||
path: '/', |
|
||||
component: EleLayout, |
|
||||
redirect: setting.homePath || home, |
|
||||
children: menuToRoutes(menus) |
|
||||
}); |
|
||||
} |
|
||||
next({...to, replace: true}); |
|
||||
}).catch(() => { |
|
||||
next(); |
|
||||
}); |
|
||||
} else { |
|
||||
next(); |
|
||||
} |
|
||||
} else if (setting.whiteList.indexOf(to.path) !== -1) { |
|
||||
next(); // 在无需登录的白名单内
|
|
||||
} else { |
|
||||
// 未登录跳转登录页面
|
|
||||
next({path: '/login', query: to.path === '/' ? {} : {from: to.path}}); |
|
||||
} |
|
||||
}); |
|
||||
|
|
||||
router.afterEach(() => { |
|
||||
setTimeout(() => { |
|
||||
NProgress.done(true); |
|
||||
}, 300); |
|
||||
}); |
|
||||
|
|
||||
export default router; |
|
||||
|
|
||||
/** |
|
||||
* 菜单生成路由 |
|
||||
* @param menus |
|
||||
* @returns {[]} |
|
||||
*/ |
|
||||
function menuToRoutes(menus) { |
|
||||
if (!menus) { |
|
||||
return null; |
|
||||
} |
|
||||
let routes = []; |
|
||||
menus.forEach(item => { |
|
||||
const path = item.path; |
|
||||
if (path && !isUrl(path)) { |
|
||||
let meta = Object.assign({}, item.meta); |
|
||||
let component; |
|
||||
if (item.component) { |
|
||||
if (isUrl(item.component)) { |
|
||||
component = EleIframeLayout; |
|
||||
meta.iframe = item.component; |
|
||||
meta.hideFooter = true; |
|
||||
} else { |
|
||||
component = () => import('@/views' + item.component); |
|
||||
} |
|
||||
} else { |
|
||||
component = EleEmptyLayout; |
|
||||
} |
|
||||
routes.push({ |
|
||||
meta: meta, |
|
||||
name: item.path, |
|
||||
path: item.path, |
|
||||
component: component, |
|
||||
redirect: item.redirect, |
|
||||
children: menuToRoutes(item.children) |
|
||||
}); |
|
||||
} |
|
||||
}); |
|
||||
return routes; |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 判断是否是网址 |
|
||||
* @param url |
|
||||
*/ |
|
||||
function isUrl(url) { |
|
||||
return url && ( |
|
||||
url.startsWith('http://') || |
|
||||
url.startsWith('https://') || |
|
||||
url.startsWith('//') |
|
||||
); |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 更新浏览器标题 |
|
||||
* @param route |
|
||||
*/ |
|
||||
function updateTitle(route) { |
|
||||
let names = []; |
|
||||
if (route && route.meta && route.meta.title) { |
|
||||
names.push(route.meta.title); |
|
||||
} |
|
||||
const appName = process.env.VUE_APP_NAME; |
|
||||
if (appName) { |
|
||||
names.push(appName); |
|
||||
} |
|
||||
document.title = names.join(' - '); |
|
||||
} |
|
||||
@ -1,4 +0,0 @@ |
|||||
export default { |
|
||||
theme: state => state.theme, |
|
||||
user: state => state.user |
|
||||
} |
|
||||
@ -1,21 +0,0 @@ |
|||||
/** |
|
||||
* vuex状态管理 |
|
||||
*/ |
|
||||
import Vue from 'vue'; |
|
||||
import Vuex from 'vuex'; |
|
||||
import getters from './getters'; |
|
||||
import theme from './modules/theme'; |
|
||||
import user from './modules/user'; |
|
||||
|
|
||||
Vue.use(Vuex); |
|
||||
|
|
||||
export default new Vuex.Store({ |
|
||||
state: {}, |
|
||||
mutations: {}, |
|
||||
actions: {}, |
|
||||
modules: { |
|
||||
theme, |
|
||||
user |
|
||||
}, |
|
||||
getters |
|
||||
}); |
|
||||
@ -1,302 +0,0 @@ |
|||||
/** |
|
||||
* 主题状态管理 license by http://eleadmin.com
|
|
||||
*/ |
|
||||
import setting from '@/config/setting'; |
|
||||
|
|
||||
// 获取本地缓存配置
|
|
||||
let cache = {}; |
|
||||
try { |
|
||||
cache = JSON.parse(localStorage.getItem(setting.themeStoreName)) || {}; |
|
||||
} catch (e) { |
|
||||
console.error(e); |
|
||||
} |
|
||||
|
|
||||
// 获取缓存的主题配置和缓存的主题css
|
|
||||
const cacheTheme = getCache(cache, [ |
|
||||
'color', 'sideStyle', 'headStyle', |
|
||||
'tabStyle', 'layoutStyle', 'bodyFull', |
|
||||
'fixedHeader', 'fixedSidebar', 'fixedBody', |
|
||||
'showTabs', 'logoAutoSize', 'colorfulIcon', |
|
||||
'sideUniqueOpen', 'showFooter', 'weakMode', 'darkMode' |
|
||||
], setting); |
|
||||
|
|
||||
// 恢复色弱模式
|
|
||||
if (cacheTheme.weakMode) { |
|
||||
document.body.classList.add('ele-admin-weak'); |
|
||||
} |
|
||||
|
|
||||
// 恢复主题色
|
|
||||
window.onload = function () { |
|
||||
changeTheme(cacheTheme.color, cacheTheme.darkMode).catch(e => { |
|
||||
console.error(e); |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
// 获取屏幕宽度
|
|
||||
const screenWidth = document.documentElement.clientWidth || document.body.clientWidth, |
|
||||
screenHeight = document.documentElement.clientHeight || document.body.clientHeight; |
|
||||
|
|
||||
export default { |
|
||||
namespaced: true, |
|
||||
state: { |
|
||||
// 侧边栏风格: 0亮色, 1暗色
|
|
||||
sideStyle: cacheTheme.sideStyle, |
|
||||
// 顶栏风格: 0亮色, 1暗色, 2主色
|
|
||||
headStyle: cacheTheme.headStyle, |
|
||||
// 标签页风格: 0默认, 1圆点, 2卡片
|
|
||||
tabStyle: cacheTheme.tabStyle, |
|
||||
// 布局风格: 0默认, 1顶部菜单风格, 2混合菜单风格
|
|
||||
layoutStyle: cacheTheme.layoutStyle, |
|
||||
// 是否固定侧栏
|
|
||||
fixedSidebar: cacheTheme.fixedSidebar, |
|
||||
// 是否固定顶栏
|
|
||||
fixedHeader: cacheTheme.fixedHeader, |
|
||||
// 是否固定主体
|
|
||||
fixedBody: cacheTheme.fixedBody, |
|
||||
// 内容区域宽度铺满
|
|
||||
bodyFull: cacheTheme.bodyFull, |
|
||||
// 是否开启多标签
|
|
||||
showTabs: cacheTheme.showTabs, |
|
||||
// logo是否自适应宽度
|
|
||||
logoAutoSize: cacheTheme.logoAutoSize, |
|
||||
// 侧栏是否多彩图标
|
|
||||
colorfulIcon: cacheTheme.colorfulIcon, |
|
||||
// 侧边栏是否只保持一个子菜单展开
|
|
||||
sideUniqueOpen: cacheTheme.sideUniqueOpen, |
|
||||
// 是否开启页脚
|
|
||||
showFooter: cacheTheme.showFooter, |
|
||||
// 是否是色弱模式
|
|
||||
weakMode: cacheTheme.weakMode, |
|
||||
// 是否是暗黑模式
|
|
||||
darkMode: cacheTheme.darkMode, |
|
||||
// 主题色
|
|
||||
color: cacheTheme.color, |
|
||||
// 是否折叠侧边栏
|
|
||||
collapse: screenWidth < 992, |
|
||||
// 当前屏幕宽度
|
|
||||
screenWidth: screenWidth, |
|
||||
// 当前屏幕高度
|
|
||||
screenHeight: screenHeight |
|
||||
}, |
|
||||
mutations: { |
|
||||
SET: (state, obj) => { |
|
||||
state[obj.key] = obj.value; |
|
||||
// 开关色弱模式
|
|
||||
if ('weakMode' === obj.key) { |
|
||||
if (obj.value) { |
|
||||
document.body.classList.add('ele-admin-weak'); |
|
||||
} else { |
|
||||
document.body.classList.remove('ele-admin-weak'); |
|
||||
} |
|
||||
} |
|
||||
// 缓存修改的配置
|
|
||||
if (['collapse', 'screenWidth', 'screenHeight'].indexOf(obj.key) === -1) { |
|
||||
let temp = JSON.parse(localStorage.getItem(setting.themeStoreName) || '{}'); |
|
||||
temp[obj.key] = obj.value; |
|
||||
localStorage.setItem(setting.themeStoreName, JSON.stringify(temp)); |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
actions: { |
|
||||
/** |
|
||||
* 修改配置 |
|
||||
* @param commit |
|
||||
* @param obj |
|
||||
*/ |
|
||||
set({commit}, obj) { |
|
||||
commit('SET', obj); |
|
||||
}, |
|
||||
/** |
|
||||
* 切换配置(boolean类型的配置) |
|
||||
* @param commit |
|
||||
* @param state |
|
||||
* @param key |
|
||||
*/ |
|
||||
toggle({commit, state}, key) { |
|
||||
commit('SET', {key: key, value: !state[key]}); |
|
||||
}, |
|
||||
/** |
|
||||
* 更新屏幕尺寸 |
|
||||
* @param commit |
|
||||
* @param state |
|
||||
*/ |
|
||||
updateScreen({commit, state}) { |
|
||||
const w = document.documentElement.clientWidth || document.body.clientWidth, |
|
||||
h = document.documentElement.clientHeight || document.body.clientHeight; |
|
||||
if (w !== state.screenWidth) { |
|
||||
commit('SET', {key: 'screenWidth', value: w}); |
|
||||
} |
|
||||
if (h !== state.screenHeight) { |
|
||||
commit('SET', {key: 'screenHeight', value: h}); |
|
||||
} |
|
||||
}, |
|
||||
/** |
|
||||
* 切换主题色 |
|
||||
* @param commit |
|
||||
* @param state |
|
||||
* @param color |
|
||||
* @returns {Promise<>} |
|
||||
*/ |
|
||||
setColor({commit, state}, color) { |
|
||||
return new Promise((resolve, reject) => { |
|
||||
changeTheme(color, state.darkMode).then(() => { |
|
||||
commit('SET', {key: 'color', value: color}); |
|
||||
return resolve(); |
|
||||
}).catch(e => { |
|
||||
reject(e); |
|
||||
}); |
|
||||
}); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 获取缓存配置项 |
|
||||
* @param cache 缓存数据 |
|
||||
* @param k 配置项 |
|
||||
* @param v 默认值 |
|
||||
*/ |
|
||||
function getCache(cache, k, v) { |
|
||||
if (Array.isArray(k)) { |
|
||||
let obj = {}; |
|
||||
k.forEach(t => { |
|
||||
obj[t] = (cache[t] === null || cache[t] === undefined) ? v[t] : cache[t]; |
|
||||
}); |
|
||||
return obj; |
|
||||
} else { |
|
||||
if (cache[k] === null || cache[k] === undefined) { |
|
||||
return v; |
|
||||
} |
|
||||
return cache[k]; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 切换主题 |
|
||||
* @param color 主题色 |
|
||||
* @param darkMode 是否是暗黑模式 |
|
||||
* @returns {Promise<>} |
|
||||
*/ |
|
||||
function changeTheme(color, darkMode) { |
|
||||
const version = process.env.VUE_APP_VERSION; |
|
||||
// 对应的css文件名
|
|
||||
let colorCss; |
|
||||
if (darkMode) { |
|
||||
if (color) { |
|
||||
colorCss = color + '-dark'; |
|
||||
} else { |
|
||||
colorCss = 'dark'; |
|
||||
} |
|
||||
} else { |
|
||||
colorCss = color; |
|
||||
} |
|
||||
// 获取缓存的主题css
|
|
||||
let themeCache = {}, |
|
||||
cacheStoreName = setting.themeStoreName + '-cache'; |
|
||||
if (window.eleThemeCache) { |
|
||||
themeCache = window.eleThemeCache; |
|
||||
} else { |
|
||||
try { |
|
||||
const localCache = JSON.parse(localStorage.getItem(cacheStoreName) || '{}'); |
|
||||
if (localCache && version === localCache.version && localCache.cache) { |
|
||||
themeCache = localCache.cache; |
|
||||
window.eleThemeCache = themeCache; |
|
||||
} |
|
||||
} catch (e) { |
|
||||
console.error(e); |
|
||||
} |
|
||||
} |
|
||||
// 加载主题css
|
|
||||
return new Promise((resolve, reject) => { |
|
||||
// 恢复默认主题
|
|
||||
if (!colorCss) { |
|
||||
removeTheme(); |
|
||||
return resolve(); |
|
||||
} |
|
||||
// 主题css已经缓存过
|
|
||||
if (themeCache[colorCss]) { |
|
||||
removeTheme(); // 移除上次的主题
|
|
||||
let elem = document.createElement('style'); |
|
||||
elem.id = `ele-theme-${colorCss}`; |
|
||||
elem.setAttribute('type', 'text/css'); |
|
||||
elem.innerHTML = themeCache[colorCss]; |
|
||||
document.head.appendChild(elem); |
|
||||
return resolve(); |
|
||||
} |
|
||||
// 主题css的js模块已被加载过
|
|
||||
const oldElem = document.head.querySelector(`#ele-theme-${colorCss}-js`); |
|
||||
if (oldElem) { |
|
||||
removeTheme(); // 移除上次的主题
|
|
||||
let elem = document.createElement('link'); |
|
||||
elem.id = `ele-theme-${colorCss}`; |
|
||||
elem.setAttribute('type', 'text/css'); |
|
||||
elem.setAttribute('rel', 'stylesheet'); |
|
||||
elem.setAttribute('href', oldElem.getAttribute('ele-css')); |
|
||||
document.head.appendChild(elem); |
|
||||
return resolve(); |
|
||||
} |
|
||||
// 把head下面相关元素标记为非主题元素
|
|
||||
const nid = ':not([id^="ele-theme-"])', sel = `style${nid},link${nid},script${nid}`; |
|
||||
document.head.querySelectorAll(sel).forEach(elem => { |
|
||||
if (!elem.getAttribute('ele-theme')) { |
|
||||
elem.setAttribute('ele-theme', 'no'); |
|
||||
} |
|
||||
}); |
|
||||
// 加载主题css模块
|
|
||||
import(`@/styles/theme/${colorCss}.scss`).then(() => { |
|
||||
removeTheme(); // 移除上次的主题
|
|
||||
// 获取import之后的主题标签
|
|
||||
let elem = document.head.querySelectorAll('style:not([ele-theme="no"])'); |
|
||||
elem = elem.length ? elem[elem.length - 1] : null; |
|
||||
if (!elem) { |
|
||||
// 可能是style标签也可能是link标签
|
|
||||
elem = document.head.querySelectorAll('link:not([ele-theme="no"])'); |
|
||||
elem = elem.length ? elem[elem.length - 1] : null; |
|
||||
if (!elem) { |
|
||||
return reject(new Error('theme element not found.')); |
|
||||
} |
|
||||
// 再找到对应的主题js模块的标签
|
|
||||
const href = elem.getAttribute('href'), |
|
||||
uuid = href.substring(href.indexOf('chunk-'), href.indexOf('.')), |
|
||||
qs = `script[src^="/js/${uuid}"]:not([ele-theme="no"])`; |
|
||||
let node = document.head.querySelectorAll(qs); |
|
||||
if (node.length) { |
|
||||
node[node.length - 1].id = `ele-theme-${colorCss}-js`; |
|
||||
// 记录css地址
|
|
||||
node[node.length - 1].setAttribute('ele-css', href); |
|
||||
} |
|
||||
} |
|
||||
elem.id = `ele-theme-${colorCss}`; |
|
||||
// 缓存主题css
|
|
||||
if (elem.innerHTML) { |
|
||||
let cache = {}; |
|
||||
cache[colorCss] = elem.innerHTML; |
|
||||
try { |
|
||||
localStorage.setItem(cacheStoreName, JSON.stringify({ |
|
||||
version: version, |
|
||||
cache: cache |
|
||||
})); |
|
||||
} catch (e) { |
|
||||
console.error(e); |
|
||||
} |
|
||||
if (!window.eleThemeCache) { |
|
||||
window.eleThemeCache = {}; |
|
||||
} |
|
||||
window.eleThemeCache[colorCss] = cache[colorCss]; |
|
||||
} |
|
||||
return resolve(); |
|
||||
}).catch(e => { |
|
||||
reject(e); |
|
||||
}); |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 移除主题 |
|
||||
*/ |
|
||||
function removeTheme() { |
|
||||
const sel = 'style[id^="ele-theme-"],link[id^="ele-theme-"]'; |
|
||||
document.head.querySelectorAll(sel).forEach(elem => { |
|
||||
elem.parentNode.removeChild(elem); |
|
||||
}); |
|
||||
} |
|
||||
@ -1,259 +0,0 @@ |
|||||
/** |
|
||||
* 登录状态管理 |
|
||||
*/ |
|
||||
import axios from 'axios'; |
|
||||
import {util} from 'ele-admin'; |
|
||||
import setting from '@/config/setting'; |
|
||||
|
|
||||
export default { |
|
||||
namespaced: true, |
|
||||
state: { |
|
||||
// 当前用户信息
|
|
||||
user: setting.takeUser(), |
|
||||
// 当前用户权限
|
|
||||
authorities: [], |
|
||||
// 当前用户角色
|
|
||||
roles: [], |
|
||||
// 当前用户的菜单
|
|
||||
menus: null, |
|
||||
// 当前打开的选项卡
|
|
||||
tabs: [] |
|
||||
}, |
|
||||
mutations: { |
|
||||
SET: (state, obj) => { |
|
||||
state[obj.key] = obj.value; |
|
||||
}, |
|
||||
SET_TOKEN: (state, obj) => { |
|
||||
setting.cacheToken(obj.token, obj.remember); |
|
||||
state.token = obj.token; |
|
||||
if (!obj.token) { |
|
||||
state.user = {}; |
|
||||
state.menus = null; |
|
||||
state.tabs = []; |
|
||||
setting.cacheUser(); |
|
||||
} |
|
||||
}, |
|
||||
TAB_PUSH(state, obj) { |
|
||||
if (!state.tabs.some(r => r.path === obj.path)) { |
|
||||
state.tabs.push(obj); |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
actions: { |
|
||||
/** |
|
||||
* 缓存token |
|
||||
* @param commit |
|
||||
* @param token {String, {token: String, remember: String}} |
|
||||
*/ |
|
||||
setToken({commit}, token) { |
|
||||
let remember = true; |
|
||||
if (typeof token === 'object') { |
|
||||
remember = token.remember; |
|
||||
token = token.token; |
|
||||
} |
|
||||
commit('SET_TOKEN', {token: token, remember: remember}); |
|
||||
}, |
|
||||
/** |
|
||||
* 移除token |
|
||||
* @param commit |
|
||||
*/ |
|
||||
removeToken({commit}) { |
|
||||
commit('SET_TOKEN', {}); |
|
||||
}, |
|
||||
/** |
|
||||
* 缓存用户信息 |
|
||||
* @param commit |
|
||||
* @param user {Object} 用户信息 |
|
||||
*/ |
|
||||
setUser({commit}, user) { |
|
||||
setting.cacheUser(user); |
|
||||
commit('SET', {key: 'user', value: user}); |
|
||||
}, |
|
||||
/** |
|
||||
* 设置用户权限 |
|
||||
* @param commit |
|
||||
* @param authorities {Array<String>} 权限 |
|
||||
*/ |
|
||||
setAuthorities({commit}, authorities) { |
|
||||
commit('SET', {key: 'authorities', value: authorities}); |
|
||||
}, |
|
||||
/** |
|
||||
* 设置用户角色 |
|
||||
* @param commit |
|
||||
* @param roles {Array<String>} 角色 |
|
||||
*/ |
|
||||
setRoles({commit}, roles) { |
|
||||
commit('SET', {key: 'roles', value: roles}); |
|
||||
}, |
|
||||
/** |
|
||||
* 设置用户菜单 |
|
||||
* @param commit |
|
||||
* @param menus {Array<Object>} 菜单 |
|
||||
*/ |
|
||||
setMenus({commit}, menus) { |
|
||||
commit('SET', {key: 'menus', value: menus}); |
|
||||
}, |
|
||||
/** |
|
||||
* 获取用户菜单路由 |
|
||||
* @param commit |
|
||||
* @returns {Promise<Object>} {menus: Array, home: String} |
|
||||
*/ |
|
||||
getMenus({commit}) { |
|
||||
return new Promise((resolve, reject) => { |
|
||||
if (!setting.menuUrl) { |
|
||||
let menus = setting.menus || []; |
|
||||
commit('SET', {key: 'menus', value: menus}); |
|
||||
return resolve({menus: menus}); |
|
||||
} |
|
||||
axios.get(setting.menuUrl).then(res => { |
|
||||
let result = setting.parseMenu ? setting.parseMenu(res.data) : res.data; |
|
||||
let menus = result.data, home = null; |
|
||||
if (!menus) { |
|
||||
return reject(new Error(result.msg)); |
|
||||
} |
|
||||
util.eachTreeData(menus, item => { |
|
||||
if (setting.parseMenuItem) { |
|
||||
item = setting.parseMenuItem(item); |
|
||||
} |
|
||||
item.meta = Object.assign({ |
|
||||
title: item.title, |
|
||||
icon: item.icon, |
|
||||
hide: item.hide, |
|
||||
active: item.active || item.uid, |
|
||||
hideFooter: item.hideFooter |
|
||||
}, item.meta); |
|
||||
if (!item.children || !item.children.length) { |
|
||||
if (!home && item.path && !( |
|
||||
item.path.startsWith('http://') || |
|
||||
item.path.startsWith('https://') || |
|
||||
item.path.startsWith('//') |
|
||||
)) { |
|
||||
home = item.path; |
|
||||
if (!setting.homeTitle) { |
|
||||
setting.homeTitle = item.title; |
|
||||
} |
|
||||
} |
|
||||
} else if (item.children[0].path) { |
|
||||
if (!item.redirect) { |
|
||||
item.redirect = item.children[0].path; |
|
||||
} |
|
||||
if (!item.path) { |
|
||||
const cp = item.children[0].path; |
|
||||
item.path = cp.substring(0, cp.lastIndexOf('/')); |
|
||||
} |
|
||||
} |
|
||||
}); |
|
||||
commit('SET', {key: 'menus', value: menus}); |
|
||||
resolve({menus: menus, home: home}); |
|
||||
}).catch(e => { |
|
||||
reject(e); |
|
||||
}); |
|
||||
}); |
|
||||
}, |
|
||||
/** |
|
||||
* 添加新tab |
|
||||
* @param commit |
|
||||
* @param obj {{path: String, title: String}} tab信息 |
|
||||
*/ |
|
||||
tabAdd({commit}, obj) { |
|
||||
commit('TAB_PUSH', obj); |
|
||||
}, |
|
||||
/** |
|
||||
* 关闭指定tab |
|
||||
* @param commit |
|
||||
* @param state |
|
||||
* @param path {String} tab路由 |
|
||||
* @returns {Promise<Number>} 前一个tab位置 |
|
||||
*/ |
|
||||
tabRemove({commit, state}, path) { |
|
||||
return new Promise((resolve) => { |
|
||||
let lastIndex = -1, lastPath, last; |
|
||||
for (let i = 0; i < state.tabs.length; i++) { |
|
||||
if (state.tabs[i].path === path) { |
|
||||
break; |
|
||||
} |
|
||||
lastIndex = i; |
|
||||
last = state.tabs[i]; |
|
||||
lastPath = last.path; |
|
||||
} |
|
||||
commit('SET', { |
|
||||
key: 'tabs', |
|
||||
value: state.tabs.filter(d => d.path !== path) |
|
||||
}); |
|
||||
resolve({ |
|
||||
lastIndex: lastIndex, |
|
||||
lastPath: lastPath, |
|
||||
last: last |
|
||||
}); |
|
||||
}); |
|
||||
}, |
|
||||
/** |
|
||||
* 关闭所有tab |
|
||||
* @param commit |
|
||||
*/ |
|
||||
tabRemoveAll({commit}) { |
|
||||
commit('SET', {key: 'tabs', value: []}); |
|
||||
}, |
|
||||
/** |
|
||||
* 关闭左侧tab |
|
||||
* @param commit |
|
||||
* @param state |
|
||||
* @param path {String} tab路由 |
|
||||
*/ |
|
||||
tabRemoveLeft({commit, state}, path) { |
|
||||
for (let i = 0; i < state.tabs.length; i++) { |
|
||||
if (state.tabs[i].path === path) { |
|
||||
commit('SET', { |
|
||||
key: 'tabs', |
|
||||
value: state.tabs.slice(i) |
|
||||
}); |
|
||||
break; |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
/** |
|
||||
* 关闭右侧tab |
|
||||
* @param commit |
|
||||
* @param state |
|
||||
* @param path {String} tab路由 |
|
||||
*/ |
|
||||
tabRemoveRight({commit, state}, path) { |
|
||||
for (let i = 0; i < state.tabs.length; i++) { |
|
||||
if (state.tabs[i].path === path) { |
|
||||
commit('SET', { |
|
||||
key: 'tabs', |
|
||||
value: state.tabs.slice(0, i + 1) |
|
||||
}); |
|
||||
break; |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
/** |
|
||||
* 关闭其他tab |
|
||||
* @param commit |
|
||||
* @param state |
|
||||
* @param path {String} tab路由 |
|
||||
*/ |
|
||||
tabRemoveOther({commit, state}, path) { |
|
||||
commit('SET', { |
|
||||
key: 'tabs', |
|
||||
value: state.tabs.filter(d => d.path === path) |
|
||||
}); |
|
||||
}, |
|
||||
/** |
|
||||
* 修改指定tab标题 |
|
||||
* @param commit |
|
||||
* @param state |
|
||||
* @param obj {{path: String, title: String}} |
|
||||
*/ |
|
||||
tabSetTitle({commit, state}, obj) { |
|
||||
let i = state.tabs.findIndex(d => d.path === obj.path); |
|
||||
let tabs = state.tabs.slice(0, i).concat([ |
|
||||
Object.assign({}, state.tabs[i], { |
|
||||
title: obj.title |
|
||||
}) |
|
||||
]).concat(state.tabs.slice(i + 1)); |
|
||||
commit('SET', {key: 'tabs', value: tabs}); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -1,63 +0,0 @@ |
|||||
/** 如果需要自己定义一些全局样式写在这里 */ |
|
||||
|
|
||||
$--ele-font-path: "~ele-admin/packages/style/fonts"; |
|
||||
|
|
||||
@import "./var.scss"; |
|
||||
@import "~ele-admin/packages/style/index.scss"; |
|
||||
|
|
||||
/* 异常页面 */ |
|
||||
.ele-exception { |
|
||||
margin: 145px 0; |
|
||||
|
|
||||
.ele-exception-img, |
|
||||
.ele-exception-content { |
|
||||
margin: 15px 30px; |
|
||||
display: inline-block; |
|
||||
vertical-align: middle; |
|
||||
} |
|
||||
|
|
||||
.ele-exception-content > h1 { |
|
||||
font-size: 72px; |
|
||||
font-weight: 600; |
|
||||
margin: 0 0 20px 0; |
|
||||
} |
|
||||
|
|
||||
&:not(.ele-exception-dark) .ele-exception-content > h1 { |
|
||||
color: #515A6E; |
|
||||
} |
|
||||
|
|
||||
.ele-exception-content > p { |
|
||||
font-size: 20px; |
|
||||
margin: 0 0 25px 0; |
|
||||
} |
|
||||
|
|
||||
&:not(.ele-exception-dark) .ele-exception-content > p { |
|
||||
color: #808695; |
|
||||
} |
|
||||
|
|
||||
&.ele-exception-dark .ele-exception-img { |
|
||||
opacity: .7; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
@media screen and (max-width: 768px) { |
|
||||
.ele-exception { |
|
||||
margin: 40px 0; |
|
||||
|
|
||||
.ele-exception-img { |
|
||||
margin: 0; |
|
||||
|
|
||||
img { |
|
||||
max-height: 200px; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.ele-exception-content { |
|
||||
text-align: center; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
//表格不对齐bug |
|
||||
.el-table th.gutter { |
|
||||
display: table-cell !important; |
|
||||
} |
|
||||
@ -1,5 +0,0 @@ |
|||||
/** 明青主题暗黑 */ |
|
||||
|
|
||||
$--color-primary: #2BCCCE; |
|
||||
|
|
||||
@import "./dark.scss"; |
|
||||
@ -1,6 +0,0 @@ |
|||||
/** 明青主题 */ |
|
||||
|
|
||||
$--color-primary: #2BCCCE; |
|
||||
|
|
||||
@import "../var.scss"; |
|
||||
@import "~ele-admin/packages/style/themes/default.scss"; |
|
||||
@ -1,4 +0,0 @@ |
|||||
/** 暗黑主题 */ |
|
||||
|
|
||||
@import "../var.scss"; |
|
||||
@import "~ele-admin/packages/style/themes/dark.scss"; |
|
||||
@ -1,5 +0,0 @@ |
|||||
/** 薄暮主题暗黑 */ |
|
||||
|
|
||||
$--color-primary: #5F80C7; |
|
||||
|
|
||||
@import "./dark.scss"; |
|
||||
@ -1,6 +0,0 @@ |
|||||
/** 薄暮主题 */ |
|
||||
|
|
||||
$--color-primary: #5F80C7; |
|
||||
|
|
||||
@import "../var.scss"; |
|
||||
@import "~ele-admin/packages/style/themes/default.scss"; |
|
||||
@ -1,5 +0,0 @@ |
|||||
/** 极客蓝主题暗黑 */ |
|
||||
|
|
||||
$--color-primary: #32A2D4; |
|
||||
|
|
||||
@import "./dark.scss"; |
|
||||
@ -1,6 +0,0 @@ |
|||||
/** 极客蓝主题 */ |
|
||||
|
|
||||
$--color-primary: #32A2D4; |
|
||||
|
|
||||
@import "../var.scss"; |
|
||||
@import "~ele-admin/packages/style/themes/default.scss"; |
|
||||
@ -1,5 +0,0 @@ |
|||||
/** 极光绿主题暗黑 */ |
|
||||
|
|
||||
$--color-primary: #33CC99; |
|
||||
|
|
||||
@import "./dark.scss"; |
|
||||
@ -1,6 +0,0 @@ |
|||||
/** 极光绿主题 */ |
|
||||
|
|
||||
$--color-primary: #33CC99; |
|
||||
|
|
||||
@import "../var.scss"; |
|
||||
@import "~ele-admin/packages/style/themes/default.scss"; |
|
||||
@ -1,5 +0,0 @@ |
|||||
/** 酱紫主题暗黑 */ |
|
||||
|
|
||||
$--color-primary: #9266F9; |
|
||||
|
|
||||
@import "./dark.scss"; |
|
||||
@ -1,6 +0,0 @@ |
|||||
/** 酱紫主题 */ |
|
||||
|
|
||||
$--color-primary: #9266F9; |
|
||||
|
|
||||
@import "../var.scss"; |
|
||||
@import "~ele-admin/packages/style/themes/default.scss"; |
|
||||
@ -1,5 +0,0 @@ |
|||||
/** 日暮主题暗黑 */ |
|
||||
|
|
||||
$--color-primary: #FAAD14; |
|
||||
|
|
||||
@import "./dark.scss"; |
|
||||
@ -1,6 +0,0 @@ |
|||||
/** 日暮主题 */ |
|
||||
|
|
||||
$--color-primary: #FAAD14; |
|
||||
|
|
||||
@import "../var.scss"; |
|
||||
@import "~ele-admin/packages/style/themes/default.scss"; |
|
||||
@ -1,5 +0,0 @@ |
|||||
/** 火山主题暗黑 */ |
|
||||
|
|
||||
$--color-primary: #F5686F; |
|
||||
|
|
||||
@import "./dark.scss"; |
|
||||
@ -1,6 +0,0 @@ |
|||||
/** 火山主题 */ |
|
||||
|
|
||||
$--color-primary: #F5686F; |
|
||||
|
|
||||
@import "../var.scss"; |
|
||||
@import "~ele-admin/packages/style/themes/default.scss"; |
|
||||
@ -1,2 +0,0 @@ |
|||||
/** 如果需要覆盖框架样式变量写在这里 */ |
|
||||
$--sidebar-width: 220px; // 侧边栏宽度 |
|
||||
@ -1,128 +0,0 @@ |
|||||
/** |
|
||||
* 权限、角色控制组件 |
|
||||
*/ |
|
||||
import store from '@/store'; |
|
||||
|
|
||||
export default { |
|
||||
install(Vue) { |
|
||||
// 添加全局方法
|
|
||||
Vue.prototype.$hasRole = this.hasRole; |
|
||||
Vue.prototype.$hasAnyRole = this.hasAnyRole; |
|
||||
Vue.prototype.$hasPermission = this.hasPermission; |
|
||||
Vue.prototype.$hasAnyPermission = this.hasAnyPermission; |
|
||||
|
|
||||
// 添加自定义指令
|
|
||||
Vue.directive('role', { |
|
||||
inserted: (el, binding) => { |
|
||||
if (!this.hasRole(binding.value)) { |
|
||||
el.parentNode && el.parentNode.removeChild(el); |
|
||||
} |
|
||||
} |
|
||||
}); |
|
||||
Vue.directive('any-role', { |
|
||||
inserted: (el, binding) => { |
|
||||
if (!this.hasAnyRole(binding.value)) { |
|
||||
el.parentNode && el.parentNode.removeChild(el); |
|
||||
} |
|
||||
} |
|
||||
}); |
|
||||
Vue.directive('permission', { |
|
||||
inserted: (el, binding) => { |
|
||||
if (!this.hasPermission(binding.value)) { |
|
||||
el.parentNode && el.parentNode.removeChild(el); |
|
||||
} |
|
||||
} |
|
||||
}); |
|
||||
Vue.directive('any-permission', { |
|
||||
inserted: (el, binding) => { |
|
||||
if (!this.hasAnyPermission(binding.value)) { |
|
||||
el.parentNode && el.parentNode.removeChild(el); |
|
||||
} |
|
||||
} |
|
||||
}); |
|
||||
}, |
|
||||
/** |
|
||||
* 是否有某些角色 |
|
||||
* @param role {String, Array<String>} 角色字符或字符数组 |
|
||||
* @returns {boolean} |
|
||||
*/ |
|
||||
hasRole(role) { |
|
||||
const data = store.state.user ? store.state.user.roles : null; |
|
||||
return arrayHas(data, role); |
|
||||
}, |
|
||||
/** |
|
||||
* 是否有任意角色 |
|
||||
* @param role {String, Array<String>} 角色字符或字符数组 |
|
||||
* @returns {boolean} |
|
||||
*/ |
|
||||
hasAnyRole(role) { |
|
||||
const data = store.state.user ? store.state.user.roles : null; |
|
||||
return arrayHasAny(data, role); |
|
||||
}, |
|
||||
/** |
|
||||
* 是否有某些权限 |
|
||||
* @param auth {String, Array<String>} 权限字符或字符数组 |
|
||||
* @returns {boolean} |
|
||||
*/ |
|
||||
hasPermission(auth) { |
|
||||
const data = store.state.user ? store.state.user.authorities : null; |
|
||||
return arrayHas(data, auth); |
|
||||
}, |
|
||||
/** |
|
||||
* 是否有任意权限 |
|
||||
* @param auth {String, Array<String>} 权限字符或字符数组 |
|
||||
* @returns {boolean} |
|
||||
*/ |
|
||||
hasAnyPermission(auth) { |
|
||||
const data = store.state.user ? store.state.user.authorities : null; |
|
||||
return arrayHasAny(data, auth); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 数组是否有某些值 |
|
||||
* @param array {Array<String>} 数组 |
|
||||
* @param obj {String, Array<String>} 值 |
|
||||
* @returns {boolean} |
|
||||
*/ |
|
||||
function arrayHas(array, obj) { |
|
||||
if (!obj) { |
|
||||
return true; |
|
||||
} |
|
||||
if (!array) { |
|
||||
return false; |
|
||||
} |
|
||||
if (Array.isArray(obj)) { |
|
||||
for (let i = 0; i < obj.length; i++) { |
|
||||
if (array.indexOf(obj[i]) === -1) { |
|
||||
return false; |
|
||||
} |
|
||||
} |
|
||||
return true; |
|
||||
} |
|
||||
return array.indexOf(obj) !== -1; |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 数组是否有任意值 |
|
||||
* @param array {Array<String>} 数组 |
|
||||
* @param obj {String, Array<String>} 值 |
|
||||
* @returns {boolean} |
|
||||
*/ |
|
||||
function arrayHasAny(array, obj) { |
|
||||
if (!obj) { |
|
||||
return true; |
|
||||
} |
|
||||
if (!array) { |
|
||||
return false; |
|
||||
} |
|
||||
if (Array.isArray(obj)) { |
|
||||
for (let i = 0; i < obj.length; i++) { |
|
||||
if (array.indexOf(obj[i]) !== -1) { |
|
||||
return true; |
|
||||
} |
|
||||
} |
|
||||
return false; |
|
||||
} |
|
||||
return array.indexOf(obj) !== -1; |
|
||||
} |
|
||||
@ -1,404 +0,0 @@ |
|||||
<template> |
|
||||
<div class="ele-body" id="table" v-show="loaded"> |
|
||||
<el-row :gutter="15"> |
|
||||
<el-col> |
|
||||
<el-card shadow="never" body-style="padding-top: 5px;"> |
|
||||
<el-tabs v-model="active" class="user-info-tabs"> |
|
||||
<el-tab-pane label="基础设置" name="base"> |
|
||||
<el-form |
|
||||
ref="configForm" |
|
||||
:model="form" |
|
||||
:rules="rules" |
|
||||
label-width="110px" |
|
||||
style="max-width: 450px;padding-top: 40px;" |
|
||||
@keyup.enter.native="save" |
|
||||
@submit.native.prevent> |
|
||||
<el-form-item label="网站名称:" prop="name"> |
|
||||
<el-input |
|
||||
v-model="form.name" |
|
||||
placeholder="请输入网站名称" |
|
||||
auto-complete="on" |
|
||||
clearable/> |
|
||||
</el-form-item> |
|
||||
|
|
||||
<el-form-item label="网站域名:" prop="host"> |
|
||||
<el-input |
|
||||
v-model="form.host" |
|
||||
placeholder="请输入网站域名" |
|
||||
clearable/> |
|
||||
</el-form-item> |
|
||||
|
|
||||
<el-form-item label="电脑端Logo"> |
|
||||
<el-row> |
|
||||
<el-col> |
|
||||
<el-input |
|
||||
v-model="form.logo" |
|
||||
placeholder="请上传电脑端Logo" |
|
||||
clearable/> |
|
||||
<el-upload |
|
||||
class="upload-demo" |
|
||||
:show-file-list="false" |
|
||||
:action="this.uploadImage+'?upload_type=img'" |
|
||||
:on-success="afterUploadLogo"> |
|
||||
<img v-if="form.logo" :src="form.logo" width="150" height="150" class="avatar"> |
|
||||
<i v-else class="el-icon-plus avatar-uploader-icon"></i> |
|
||||
</el-upload> |
|
||||
</el-col> |
|
||||
</el-row> |
|
||||
</el-form-item> |
|
||||
|
|
||||
<el-form-item label="手机端Logo:" prop="logo_phone"> |
|
||||
<el-input |
|
||||
v-model="form.logo_phone" |
|
||||
placeholder="请上传手机端Logo" |
|
||||
clearable/> |
|
||||
</el-form-item> |
|
||||
|
|
||||
<el-form-item label="电脑端Icon:" prop="icon"> |
|
||||
<el-input |
|
||||
v-model="form.icon" |
|
||||
placeholder="请上传电脑端电脑端Icon" |
|
||||
clearable/> |
|
||||
</el-form-item> |
|
||||
|
|
||||
<el-form-item label="手机端Icon:" prop="icon_phone"> |
|
||||
<el-input |
|
||||
v-model="form.icon_phone" |
|
||||
placeholder="请上传手机端Icon" |
|
||||
clearable/> |
|
||||
</el-form-item> |
|
||||
|
|
||||
<el-form-item label="网站备案号:" prop="record"> |
|
||||
<el-input |
|
||||
v-model="form.record" |
|
||||
placeholder="请输入网站备案号" |
|
||||
clearable/> |
|
||||
</el-form-item> |
|
||||
|
|
||||
<el-form-item label="公安备案号:" prop="public_security_record"> |
|
||||
<el-input |
|
||||
v-model="form.public_security_record" |
|
||||
placeholder="请输入网站公安备案号" |
|
||||
clearable/> |
|
||||
</el-form-item> |
|
||||
|
|
||||
<el-form-item label="版权信息:" prop="copyright"> |
|
||||
<el-input |
|
||||
v-model="form.copyright" |
|
||||
placeholder="请输入版权信息" |
|
||||
:rows="4" |
|
||||
type="textarea" |
|
||||
clearable/> |
|
||||
</el-form-item> |
|
||||
|
|
||||
<el-form-item> |
|
||||
<el-button |
|
||||
type="primary" |
|
||||
@click="save" |
|
||||
:loading="loading">保存更改 |
|
||||
</el-button> |
|
||||
</el-form-item> |
|
||||
</el-form> |
|
||||
</el-tab-pane> |
|
||||
<el-tab-pane label="SEO配置" name="seo"> |
|
||||
<el-form |
|
||||
ref="configSeoForm" |
|
||||
:model="form" |
|
||||
:rules="rules" |
|
||||
label-width="110px" |
|
||||
style="max-width: 450px;padding-top: 40px;" |
|
||||
@keyup.enter.native="save" |
|
||||
@submit.native.prevent> |
|
||||
<el-form-item label="SEO标题:" prop="seo_title"> |
|
||||
<el-input |
|
||||
v-model="form.seo_title" |
|
||||
placeholder="请输入SEO标题" |
|
||||
clearable/> |
|
||||
</el-form-item> |
|
||||
|
|
||||
<el-form-item label="SEO关键词:" prop="seo_keyword"> |
|
||||
<el-input |
|
||||
v-model="form.seo_keyword" |
|
||||
placeholder="请输入SEO关键词" |
|
||||
clearable/> |
|
||||
</el-form-item> |
|
||||
|
|
||||
<el-form-item label="SEO描述:" prop="seo_description"> |
|
||||
<el-input |
|
||||
v-model="form.seo_description" |
|
||||
placeholder="请输入SEO描述" |
|
||||
:rows="4" |
|
||||
type="textarea"/> |
|
||||
</el-form-item> |
|
||||
|
|
||||
<el-form-item> |
|
||||
<el-button |
|
||||
type="primary" |
|
||||
@click="saveSeo" |
|
||||
:loading="loading">保存更改 |
|
||||
</el-button> |
|
||||
</el-form-item> |
|
||||
</el-form> |
|
||||
</el-tab-pane> |
|
||||
<el-tab-pane label="联系方式" name="contact"> |
|
||||
<el-form |
|
||||
ref="configContactForm" |
|
||||
:model="form" |
|
||||
:rules="rules" |
|
||||
label-width="110px" |
|
||||
style="max-width: 450px;padding-top: 40px;" |
|
||||
@keyup.enter.native="save" |
|
||||
@submit.native.prevent> |
|
||||
|
|
||||
<el-form-item label="联系人:" prop="contact_person"> |
|
||||
<el-input |
|
||||
v-model="form.contact_person" |
|
||||
placeholder="请输入联系人姓名" |
|
||||
clearable/> |
|
||||
</el-form-item> |
|
||||
|
|
||||
<el-form-item label="公司地址:" prop="address"> |
|
||||
<el-input |
|
||||
v-model="form.address" |
|
||||
placeholder="请输入公司地址" |
|
||||
clearable/> |
|
||||
</el-form-item> |
|
||||
|
|
||||
<el-form-item label="QQ客服:" prop="qq"> |
|
||||
<el-input |
|
||||
v-model="form.qq" |
|
||||
placeholder="请输入QQ客服" |
|
||||
clearable/> |
|
||||
</el-form-item> |
|
||||
|
|
||||
<el-form-item label="联系电话:" prop="tel"> |
|
||||
<el-input |
|
||||
v-model="form.tel" |
|
||||
placeholder="请输入联系电话" |
|
||||
clearable/> |
|
||||
</el-form-item> |
|
||||
|
|
||||
<el-form-item label="400电话:" prop="tel_400"> |
|
||||
<el-input |
|
||||
v-model="form.tel_400" |
|
||||
placeholder="请输入400电话" |
|
||||
clearable/> |
|
||||
</el-form-item> |
|
||||
|
|
||||
<el-form-item label="手机号码:" prop="phone"> |
|
||||
<el-input |
|
||||
v-model="form.phone" |
|
||||
placeholder="请输入手机号码" |
|
||||
clearable/> |
|
||||
</el-form-item> |
|
||||
|
|
||||
<el-form-item label="传真号码:" prop="fax"> |
|
||||
<el-input |
|
||||
v-model="form.fax" |
|
||||
placeholder="请输入传真号码" |
|
||||
clearable/> |
|
||||
</el-form-item> |
|
||||
|
|
||||
<el-form-item label="邮箱:" prop="email"> |
|
||||
<el-input |
|
||||
v-model="form.email" |
|
||||
placeholder="请输入邮箱" |
|
||||
clearable/> |
|
||||
</el-form-item> |
|
||||
|
|
||||
<el-form-item label="公众号二维码:" prop="qrcode_wechat"> |
|
||||
<el-input |
|
||||
v-model="form.qrcode_wechat" |
|
||||
placeholder="请上传公众号二维码" |
|
||||
clearable/> |
|
||||
</el-form-item> |
|
||||
|
|
||||
<el-form-item> |
|
||||
<el-button |
|
||||
type="primary" |
|
||||
@click="saveContact" |
|
||||
:loading="loading">保存更改 |
|
||||
</el-button> |
|
||||
</el-form-item> |
|
||||
</el-form> |
|
||||
</el-tab-pane> |
|
||||
<el-tab-pane label="统计代码" name="jscode"> |
|
||||
<el-form |
|
||||
ref="configJscodeForm" |
|
||||
:model="form" |
|
||||
:rules="rules" |
|
||||
label-width="110px" |
|
||||
style="max-width: 450px;padding-top: 40px;" |
|
||||
@keyup.enter.native="save" |
|
||||
@submit.native.prevent> |
|
||||
<el-form-item label="统计代码:" prop="js_code"> |
|
||||
<el-input |
|
||||
v-model="form.js_code" |
|
||||
placeholder="请输入统计代码" |
|
||||
:rows="4" |
|
||||
type="textarea" |
|
||||
clearable/> |
|
||||
</el-form-item> |
|
||||
|
|
||||
<el-form-item label="客服代码:" prop="js_code_service"> |
|
||||
<el-input |
|
||||
v-model="form.js_code_service" |
|
||||
placeholder="请输入客服代码" |
|
||||
:rows="4" |
|
||||
type="textarea" |
|
||||
clearable/> |
|
||||
</el-form-item> |
|
||||
|
|
||||
<el-form-item> |
|
||||
<el-button |
|
||||
type="primary" |
|
||||
@click="saveJscode" |
|
||||
:loading="loading">保存更改 |
|
||||
</el-button> |
|
||||
</el-form-item> |
|
||||
</el-form> |
|
||||
</el-tab-pane> |
|
||||
</el-tabs> |
|
||||
</el-card> |
|
||||
</el-col> |
|
||||
</el-row> |
|
||||
|
|
||||
</div> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
import setting from "@/config/setting"; |
|
||||
|
|
||||
export default { |
|
||||
|
|
||||
name: 'ConfigIndex', |
|
||||
data() { |
|
||||
return { |
|
||||
uploadImage: setting.uploadImageUrl, |
|
||||
// tab页选中 |
|
||||
active: 'base', |
|
||||
labelPosition: 'left', |
|
||||
// 表单数据 |
|
||||
form: {}, |
|
||||
// 表单验证规则 |
|
||||
rules: { |
|
||||
name: [ |
|
||||
{required: true, message: '请输入网站名称', trigger: 'blur'} |
|
||||
], |
|
||||
host: [ |
|
||||
{required: true, message: '请输入网站域名', trigger: 'blur'} |
|
||||
], |
|
||||
}, |
|
||||
// 保存按钮loading |
|
||||
loading: false, |
|
||||
// 是否显示裁剪弹窗 |
|
||||
showCropper: false, |
|
||||
// 加载完成 |
|
||||
loaded: false, |
|
||||
} |
|
||||
}, |
|
||||
created() { |
|
||||
this.loading = true; |
|
||||
this.$http.get('/config/index').then(res => { |
|
||||
this.loading = false; |
|
||||
if (res.data.code === 0) { |
|
||||
this.form = res.data.data; |
|
||||
} else { |
|
||||
this.$message.error(res.data.msg); |
|
||||
} |
|
||||
this.loaded = true; |
|
||||
}).catch(e => { |
|
||||
this.$message.error(e.message); |
|
||||
}); |
|
||||
}, |
|
||||
methods: { |
|
||||
afterUploadLogo(response) { |
|
||||
if (response.code != 0 || response.url == '') { |
|
||||
this.$message.error(response.msg) |
|
||||
} else { |
|
||||
this.form.logo = response.url |
|
||||
} |
|
||||
}, |
|
||||
|
|
||||
/* 保存更改 */ |
|
||||
save() { |
|
||||
this.$refs['configForm'].validate((valid) => { |
|
||||
return this.postSave(valid); |
|
||||
}); |
|
||||
}, |
|
||||
saveSeo() { |
|
||||
this.$refs['configSeoForm'].validate((valid) => { |
|
||||
return this.postSave(valid); |
|
||||
}); |
|
||||
}, |
|
||||
saveContact() { |
|
||||
|
|
||||
this.$refs['configContactForm'].validate((valid) => { |
|
||||
return this.postSave(valid); |
|
||||
}); |
|
||||
}, |
|
||||
saveJscode() { |
|
||||
this.$refs['configJscodeForm'].validate((valid) => { |
|
||||
return this.postSave(valid); |
|
||||
}); |
|
||||
}, |
|
||||
postSave(valid) { |
|
||||
if (!valid) { |
|
||||
return false; |
|
||||
} |
|
||||
this.loading = true; |
|
||||
this.$http.post('/config/save', this.form).then(res => { |
|
||||
this.loading = false; |
|
||||
if (res.data.code === 0) { |
|
||||
this.$message({type: 'success', message: res.data.msg}); |
|
||||
} else { |
|
||||
this.$message.error(res.data.msg); |
|
||||
} |
|
||||
}).catch(e => { |
|
||||
this.loading = false; |
|
||||
this.$message.error(e.message); |
|
||||
}); |
|
||||
}, |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style scoped> |
|
||||
.ele-body { |
|
||||
padding-bottom: 0; |
|
||||
} |
|
||||
|
|
||||
.el-card { |
|
||||
margin-bottom: 15px; |
|
||||
} |
|
||||
|
|
||||
/* tab页签 */ |
|
||||
.user-info-tabs ::v-deep .el-tabs__nav-wrap { |
|
||||
padding-left: 20px; |
|
||||
} |
|
||||
|
|
||||
/* 电脑端头像 */ |
|
||||
.upload-demo{ |
|
||||
padding-top: 15px; |
|
||||
} |
|
||||
|
|
||||
.avatar-uploader-icon { |
|
||||
border: 1px solid #D9D9D9; |
|
||||
font-size: 28px; |
|
||||
color: #409EFF; |
|
||||
width: 148px; |
|
||||
height: 148px; |
|
||||
line-height: 148px; |
|
||||
text-align: center; |
|
||||
border-radius: 6px; |
|
||||
} |
|
||||
.avatar-uploader-icon:hover { |
|
||||
border-color: #409EFF; |
|
||||
} |
|
||||
.avatar { |
|
||||
display: block; |
|
||||
width: 150px; |
|
||||
height: 150px; |
|
||||
border-radius: 6px; |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,470 +0,0 @@ |
|||||
<template> |
|
||||
<div class="ele-body"> |
|
||||
<el-card shadow="never" body-style="padding:0;"> |
|
||||
<div class="ele-cell ele-cell-align-top ele-user-message"> |
|
||||
<el-menu |
|
||||
:default-active="active" |
|
||||
:mode="mode" |
|
||||
@select="query"> |
|
||||
<el-menu-item index="0"> |
|
||||
<span>全部消息</span> |
|
||||
<el-badge |
|
||||
v-if="allUnReadNum" |
|
||||
:value="allUnReadNum" |
|
||||
class="ele-badge-static"/> |
|
||||
</el-menu-item> |
|
||||
<el-menu-item index="1"> |
|
||||
<span>系统通知</span> |
|
||||
<el-badge |
|
||||
v-if="unReadNum1" |
|
||||
:value="unReadNum1" |
|
||||
class="ele-badge-static"/> |
|
||||
</el-menu-item> |
|
||||
<el-menu-item index="2"> |
|
||||
<span>用户私信</span> |
|
||||
<el-badge |
|
||||
v-if="unReadNum2" |
|
||||
:value="unReadNum2" |
|
||||
class="ele-badge-static"/> |
|
||||
</el-menu-item> |
|
||||
<el-menu-item index="3"> |
|
||||
<span>代办事项</span> |
|
||||
<el-badge |
|
||||
v-if="unReadNum3" |
|
||||
:value="unReadNum3" |
|
||||
class="ele-badge-static"/> |
|
||||
</el-menu-item> |
|
||||
</el-menu> |
|
||||
<div class="ele-cell-content"> |
|
||||
<!-- 数据表格 --> |
|
||||
<ele-pro-table |
|
||||
ref="table" |
|
||||
:datasource="data" |
|
||||
:columns="columns" |
|
||||
:selection.sync="choose"> |
|
||||
<template slot="toolbar"> |
|
||||
<el-button |
|
||||
size="small" |
|
||||
@click="read" |
|
||||
type="primary" |
|
||||
plain>标记已读 |
|
||||
</el-button> |
|
||||
<el-button |
|
||||
size="small" |
|
||||
@click="readAll" |
|
||||
type="primary" |
|
||||
plain>全部已读 |
|
||||
</el-button> |
|
||||
<el-button |
|
||||
size="small" |
|
||||
@click="remove()" |
|
||||
type="danger" |
|
||||
plain>删除消息 |
|
||||
</el-button> |
|
||||
</template> |
|
||||
<template slot="state" slot-scope="{row}"> |
|
||||
<span :class="['ele-text-danger','ele-text-info'][row.state]"> |
|
||||
{{ ['未读', '已读'][row.state] }} |
|
||||
</span> |
|
||||
</template> |
|
||||
<template slot="action" slot-scope="{row}"> |
|
||||
<el-link |
|
||||
@click="view(row)" |
|
||||
icon="el-icon-view" |
|
||||
type="primary" |
|
||||
:underline="false">查看 |
|
||||
</el-link> |
|
||||
<el-popconfirm |
|
||||
title="确定要删除此消息吗?" |
|
||||
@confirm="remove(row)" |
|
||||
class="ele-action"> |
|
||||
<el-link |
|
||||
slot="reference" |
|
||||
icon="el-icon-delete" |
|
||||
type="danger" |
|
||||
:underline="false">删除 |
|
||||
</el-link> |
|
||||
</el-popconfirm> |
|
||||
</template> |
|
||||
</ele-pro-table> |
|
||||
</div> |
|
||||
</div> |
|
||||
</el-card> |
|
||||
</div> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
export default { |
|
||||
name: 'UserMessage', |
|
||||
data() { |
|
||||
return { |
|
||||
// 导航选中 |
|
||||
active: '0', |
|
||||
// 列表显示数据 |
|
||||
data: [], |
|
||||
columns: [ |
|
||||
{ |
|
||||
columnKey: 'selection', |
|
||||
type: 'selection', |
|
||||
width: 45, |
|
||||
align: 'center', |
|
||||
fixed: 'left' |
|
||||
}, |
|
||||
{ |
|
||||
columnKey: 'index', |
|
||||
type: 'index', |
|
||||
width: 45, |
|
||||
align: 'center', |
|
||||
fixed: 'left', |
|
||||
showOverflowTooltip: true |
|
||||
}, |
|
||||
{ |
|
||||
prop: 'title', |
|
||||
label: '标题内容', |
|
||||
showOverflowTooltip: true, |
|
||||
minWidth: 110 |
|
||||
}, |
|
||||
{ |
|
||||
prop: 'time', |
|
||||
label: '时间', |
|
||||
align: 'center', |
|
||||
showOverflowTooltip: true, |
|
||||
width: 140 |
|
||||
}, |
|
||||
{ |
|
||||
prop: 'state', |
|
||||
label: '状态', |
|
||||
align: 'center', |
|
||||
showOverflowTooltip: true, |
|
||||
width: 80, |
|
||||
slot: 'state' |
|
||||
}, |
|
||||
{ |
|
||||
columnKey: 'action', |
|
||||
label: '操作', |
|
||||
align: 'center', |
|
||||
showOverflowTooltip: true, |
|
||||
width: 140, |
|
||||
fixed: 'right', |
|
||||
resizable: false, |
|
||||
slot: 'action' |
|
||||
} |
|
||||
], |
|
||||
// 列表选中数据 |
|
||||
choose: [], |
|
||||
// 全部数据 |
|
||||
allData: [ |
|
||||
{ |
|
||||
title: '你有两条任务待完成,不要忘了哦~', |
|
||||
type: 3, |
|
||||
time: '2020-07-24 11:35', |
|
||||
state: 0 |
|
||||
}, |
|
||||
{ |
|
||||
title: '你有两条任务待完成,不要忘了哦~', |
|
||||
type: 3, |
|
||||
time: '2020-07-24 11:35', |
|
||||
state: 0 |
|
||||
}, |
|
||||
{ |
|
||||
title: '你有两条任务待完成,不要忘了哦~', |
|
||||
type: 3, |
|
||||
time: '2020-07-24 11:35', |
|
||||
state: 0 |
|
||||
}, |
|
||||
{ |
|
||||
title: '你有两条任务待完成,不要忘了哦~', |
|
||||
type: 3, |
|
||||
time: '2020-07-24 11:35', |
|
||||
state: 0 |
|
||||
}, |
|
||||
{ |
|
||||
title: '你有两条任务待完成,不要忘了哦~', |
|
||||
type: 3, |
|
||||
time: '2020-07-24 11:35', |
|
||||
state: 1 |
|
||||
}, |
|
||||
{ |
|
||||
title: '你有两条任务待完成,不要忘了哦~', |
|
||||
type: 3, |
|
||||
time: '2020-07-24 11:35', |
|
||||
state: 1 |
|
||||
}, |
|
||||
{ |
|
||||
title: '你有两条任务待完成,不要忘了哦~', |
|
||||
type: 3, |
|
||||
time: '2020-07-24 11:35', |
|
||||
state: 1 |
|
||||
}, |
|
||||
{ |
|
||||
title: '你有两条任务待完成,不要忘了哦~', |
|
||||
type: 3, |
|
||||
time: '2020-07-24 11:35', |
|
||||
state: 1 |
|
||||
}, |
|
||||
{ |
|
||||
title: '你有两条任务待完成,不要忘了哦~', |
|
||||
type: 3, |
|
||||
time: '2020-07-24 11:35', |
|
||||
state: 1 |
|
||||
}, |
|
||||
{ |
|
||||
title: '你有两条任务待完成,不要忘了哦~', |
|
||||
type: 3, |
|
||||
time: '2020-07-24 11:35', |
|
||||
state: 1 |
|
||||
}, |
|
||||
{ |
|
||||
title: 'Jasmine给你发来了一条私信', |
|
||||
type: 2, |
|
||||
time: '2020-07-24 11:35', |
|
||||
state: 0 |
|
||||
}, |
|
||||
{ |
|
||||
title: 'Jasmine给你发来了一条私信', |
|
||||
type: 2, |
|
||||
time: '2020-07-24 11:35', |
|
||||
state: 0 |
|
||||
}, |
|
||||
{ |
|
||||
title: 'Jasmine给你发来了一条私信', |
|
||||
type: 2, |
|
||||
time: '2020-07-24 11:35', |
|
||||
state: 0 |
|
||||
}, |
|
||||
{ |
|
||||
title: 'Jasmine给你发来了一条私信', |
|
||||
type: 2, |
|
||||
time: '2020-07-24 11:35', |
|
||||
state: 1 |
|
||||
}, |
|
||||
{ |
|
||||
title: 'Jasmine给你发来了一条私信', |
|
||||
type: 2, |
|
||||
time: '2020-07-24 11:35', |
|
||||
state: 1 |
|
||||
}, |
|
||||
{ |
|
||||
title: 'Jasmine给你发来了一条私信', |
|
||||
type: 2, |
|
||||
time: '2020-07-24 11:35', |
|
||||
state: 1 |
|
||||
}, |
|
||||
{ |
|
||||
title: 'Jasmine给你发来了一条私信', |
|
||||
type: 2, |
|
||||
time: '2020-07-24 11:35', |
|
||||
state: 1 |
|
||||
}, |
|
||||
{ |
|
||||
title: 'Jasmine给你发来了一条私信', |
|
||||
type: 2, |
|
||||
time: '2020-07-24 11:35', |
|
||||
state: 1 |
|
||||
}, |
|
||||
{ |
|
||||
title: 'Jasmine给你发来了一条私信', |
|
||||
type: 2, |
|
||||
time: '2020-07-24 11:35', |
|
||||
state: 1 |
|
||||
}, |
|
||||
{ |
|
||||
title: 'Jasmine给你发来了一条私信', |
|
||||
type: 2, |
|
||||
time: '2020-07-24 11:35', |
|
||||
state: 1 |
|
||||
}, |
|
||||
{ |
|
||||
title: 'EleAdmin新版本发布,欢迎体验', |
|
||||
type: 1, |
|
||||
time: '2020-07-24 11:35', |
|
||||
state: 0 |
|
||||
}, |
|
||||
{ |
|
||||
title: 'EleAdmin新版本发布,欢迎体验', |
|
||||
type: 1, |
|
||||
time: '2020-07-24 11:35', |
|
||||
state: 0 |
|
||||
}, |
|
||||
{ |
|
||||
title: 'EleAdmin新版本发布,欢迎体验', |
|
||||
type: 1, |
|
||||
time: '2020-07-24 11:35', |
|
||||
state: 1 |
|
||||
}, |
|
||||
{ |
|
||||
title: 'EleAdmin新版本发布,欢迎体验', |
|
||||
type: 1, |
|
||||
time: '2020-07-24 11:35', |
|
||||
state: 1 |
|
||||
}, |
|
||||
{ |
|
||||
title: 'EleAdmin新版本发布,欢迎体验', |
|
||||
type: 1, |
|
||||
time: '2020-07-24 11:35', |
|
||||
state: 1 |
|
||||
}, |
|
||||
{ |
|
||||
title: 'EleAdmin新版本发布,欢迎体验', |
|
||||
type: 1, |
|
||||
time: '2020-07-24 11:35', |
|
||||
state: 1 |
|
||||
}, |
|
||||
{ |
|
||||
title: 'EleAdmin新版本发布,欢迎体验', |
|
||||
type: 1, time: '2020-07-24 11:35', |
|
||||
state: 1 |
|
||||
}, |
|
||||
{ |
|
||||
title: 'EleAdmin新版本发布,欢迎体验', |
|
||||
type: 1, |
|
||||
time: '2020-07-24 11:35', |
|
||||
state: 1 |
|
||||
}, |
|
||||
{ |
|
||||
title: 'EleAdmin新版本发布,欢迎体验', |
|
||||
type: 1, |
|
||||
time: '2020-07-24 11:35', |
|
||||
state: 1 |
|
||||
}, |
|
||||
{ |
|
||||
title: 'EleAdmin新版本发布,欢迎体验', |
|
||||
type: 1, |
|
||||
time: '2020-07-24 11:35', |
|
||||
state: 1 |
|
||||
} |
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
computed: { |
|
||||
// 小屏幕水平导航 |
|
||||
mode() { |
|
||||
return this.$store.state.theme.screenWidth < 768 ? 'horizontal' : 'vertical'; |
|
||||
}, |
|
||||
// 全部未读数量 |
|
||||
allUnReadNum() { |
|
||||
return this.allData.filter(d => d.state === 0).length; |
|
||||
}, |
|
||||
// 通知未读数量 |
|
||||
unReadNum1() { |
|
||||
return this.allData.filter(d => d.state === 0 && d.type === 1).length; |
|
||||
}, |
|
||||
// 私信未读数量 |
|
||||
unReadNum2() { |
|
||||
return this.allData.filter(d => d.state === 0 && d.type === 2).length; |
|
||||
}, |
|
||||
// 代办未读数量 |
|
||||
unReadNum3() { |
|
||||
return this.allData.filter(d => d.state === 0 && d.type === 3).length; |
|
||||
} |
|
||||
}, |
|
||||
mounted() { |
|
||||
this.query(); |
|
||||
}, |
|
||||
methods: { |
|
||||
/* 查询数据 */ |
|
||||
query(index) { |
|
||||
this.active = index || '0'; |
|
||||
if (this.active === '0') { |
|
||||
this.data = this.allData; |
|
||||
} else { |
|
||||
this.data = this.allData.filter(d => String(d.type) === this.active); |
|
||||
} |
|
||||
}, |
|
||||
/* 查看 */ |
|
||||
view(row) { |
|
||||
console.log(row); |
|
||||
this.$message('点击了查看'); |
|
||||
}, |
|
||||
/* 删除 */ |
|
||||
remove(row) { |
|
||||
if (row) { |
|
||||
// 单个删除 |
|
||||
this.data.splice(this.data.indexOf(row), 1); |
|
||||
this.$message({type: 'success', message: '删除成功'}); |
|
||||
} else { |
|
||||
// 批量删除 |
|
||||
if (this.choose.length === 0) { |
|
||||
return this.$message.error('请至少选择一条数据'); |
|
||||
} |
|
||||
this.$confirm('确定要删除选中的消息吗?', '提示', { |
|
||||
type: 'warning' |
|
||||
}).then(() => { |
|
||||
this.choose.forEach(d => { |
|
||||
this.data.splice(this.data.indexOf(d), 1); |
|
||||
}); |
|
||||
this.$message({type: 'success', message: '删除成功'}); |
|
||||
}).catch(() => { |
|
||||
}); |
|
||||
} |
|
||||
}, |
|
||||
/* 标记已读 */ |
|
||||
read() { |
|
||||
if (this.choose.length === 0) { |
|
||||
return this.$message.error('请至少选择一条数据'); |
|
||||
} |
|
||||
this.choose.forEach(d => { |
|
||||
this.data[this.data.indexOf(d)].state = 1; |
|
||||
}); |
|
||||
}, |
|
||||
/* 全部标记已读 */ |
|
||||
readAll() { |
|
||||
this.data.forEach(d => { |
|
||||
d.state = 1; |
|
||||
}); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style scoped> |
|
||||
.ele-user-message ::v-deep .el-menu { |
|
||||
flex-shrink: 0; |
|
||||
} |
|
||||
|
|
||||
.ele-user-message .ele-cell-content { |
|
||||
padding: 15px; |
|
||||
box-sizing: border-box; |
|
||||
overflow: auto; |
|
||||
} |
|
||||
|
|
||||
.ele-user-message .ele-badge-static { |
|
||||
margin-left: 10px; |
|
||||
} |
|
||||
|
|
||||
@media screen and (min-width: 768px) { |
|
||||
.ele-user-message ::v-deep .el-menu-item { |
|
||||
min-width: 150px; |
|
||||
text-align: right; |
|
||||
border-right: 2px solid transparent; |
|
||||
} |
|
||||
|
|
||||
.ele-user-message ::v-deep .el-menu-item:first-child { |
|
||||
margin-top: 15px; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
@media screen and (max-width: 768px) { |
|
||||
.ele-user-message { |
|
||||
display: block; |
|
||||
} |
|
||||
|
|
||||
.ele-user-message ::v-deep .el-menu-item { |
|
||||
height: 45px; |
|
||||
line-height: 45px; |
|
||||
padding: 0 5px; |
|
||||
display: inline-block; |
|
||||
float: none; |
|
||||
} |
|
||||
|
|
||||
.ele-user-message ::v-deep .el-menu { |
|
||||
text-align: center; |
|
||||
white-space: nowrap; |
|
||||
overflow: auto; |
|
||||
} |
|
||||
|
|
||||
.ele-user-message .ele-badge-static { |
|
||||
margin-left: 3px; |
|
||||
} |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,559 +0,0 @@ |
|||||
<template> |
|
||||
<div class="ele-body ele-body-card"> |
|
||||
<!-- 顶部统计卡片 --> |
|
||||
<el-row :gutter="15"> |
|
||||
<el-col :md="6" :sm="12"> |
|
||||
<el-card class="analysis-chart-card" shadow="never"> |
|
||||
<div slot="header"> |
|
||||
<span>总销售额</span> |
|
||||
<el-tooltip content="指标说明" placement="top"> |
|
||||
<i |
|
||||
class="el-icon-_question ele-pull-right ele-text-placeholder" |
|
||||
style="cursor: pointer;"> |
|
||||
</i> |
|
||||
</el-tooltip> |
|
||||
</div> |
|
||||
<div class="analysis-chart-card-num">¥ 126,560</div> |
|
||||
<div class="analysis-chart-card-content" style="padding-top: 18px;"> |
|
||||
<span class="ele-action"> |
|
||||
<span>周同比12%</span> |
|
||||
<i class="el-icon-caret-top ele-text-danger"></i> |
|
||||
</span> |
|
||||
<span class="ele-action"> |
|
||||
<span>日同比11%</span> |
|
||||
<i class="el-icon-caret-bottom ele-text-success"></i> |
|
||||
</span> |
|
||||
</div> |
|
||||
<el-divider/> |
|
||||
<div class="analysis-chart-card-text">日销售额 ¥12,423</div> |
|
||||
</el-card> |
|
||||
</el-col> |
|
||||
<el-col :md="6" :sm="12"> |
|
||||
<el-card class="analysis-chart-card" shadow="never"> |
|
||||
<div slot="header"> |
|
||||
<span>访问量</span> |
|
||||
<el-tag |
|
||||
type="danger" |
|
||||
size="mini" |
|
||||
class="ele-pull-right">日 |
|
||||
</el-tag> |
|
||||
</div> |
|
||||
<div class="analysis-chart-card-num">8,846</div> |
|
||||
<div class="analysis-chart-card-content"> |
|
||||
<ele-chart :option="visitChartOption" style="height: 40px;"/> |
|
||||
</div> |
|
||||
<el-divider/> |
|
||||
<div class="analysis-chart-card-text">日访问量 1,234</div> |
|
||||
</el-card> |
|
||||
</el-col> |
|
||||
<el-col :md="6" :sm="12"> |
|
||||
<el-card class="analysis-chart-card" shadow="never"> |
|
||||
<div slot="header"> |
|
||||
<span>支付笔数</span> |
|
||||
<el-tag |
|
||||
size="mini" |
|
||||
class="ele-pull-right">月 |
|
||||
</el-tag> |
|
||||
</div> |
|
||||
<div class="analysis-chart-card-num">6,560</div> |
|
||||
<div class="analysis-chart-card-content"> |
|
||||
<ele-chart |
|
||||
:option="payNumChartOption" |
|
||||
style="height: 40px;"/> |
|
||||
</div> |
|
||||
<el-divider/> |
|
||||
<div class="analysis-chart-card-text">转化率 60%</div> |
|
||||
</el-card> |
|
||||
</el-col> |
|
||||
<el-col :md="6" :sm="12"> |
|
||||
<el-card class="analysis-chart-card" shadow="never"> |
|
||||
<div slot="header"> |
|
||||
<span>运营活动效果</span> |
|
||||
<el-tag |
|
||||
type="success" |
|
||||
size="mini" |
|
||||
class="ele-pull-right">周 |
|
||||
</el-tag> |
|
||||
</div> |
|
||||
<div class="analysis-chart-card-num">78%</div> |
|
||||
<div class="analysis-chart-card-content" style="padding-top: 25px;"> |
|
||||
<el-progress |
|
||||
:percentage="78" |
|
||||
:show-text="false" |
|
||||
:stroke-width="10" |
|
||||
color="#13c2c2"/> |
|
||||
</div> |
|
||||
<el-divider/> |
|
||||
<div class="analysis-chart-card-text"> |
|
||||
<span class="ele-action"> |
|
||||
<span>周同比12%</span> |
|
||||
<i class="el-icon-caret-top ele-text-danger"/> |
|
||||
</span> |
|
||||
<span class="ele-action"> |
|
||||
<span>日同比11%</span> |
|
||||
<i class="el-icon-caret-bottom ele-text-success"/> |
|
||||
</span> |
|
||||
</div> |
|
||||
</el-card> |
|
||||
</el-col> |
|
||||
</el-row> |
|
||||
<!-- 销售额、访问量 --> |
|
||||
<el-card shadow="never" body-style="padding: 0;"> |
|
||||
<div class="ele-cell demo-monitor-tool"> |
|
||||
<div class="ele-cell-content"> |
|
||||
<el-tabs |
|
||||
v-model="saleSearch.type" |
|
||||
class="demo-monitor-tabs" |
|
||||
@tab-click="onSaleTypeChange"> |
|
||||
<el-tab-pane label="销售额" name="saleroom"/> |
|
||||
<el-tab-pane label="访问量" name="visits"/> |
|
||||
</el-tabs> |
|
||||
</div> |
|
||||
<div class="ele-inline-block hidden-xs-only"> |
|
||||
<el-radio-group v-model="saleSearch.dateType" size="small"> |
|
||||
<el-radio-button :label="0">今天</el-radio-button> |
|
||||
<el-radio-button :label="1">本周</el-radio-button> |
|
||||
<el-radio-button :label="2">本月</el-radio-button> |
|
||||
<el-radio-button :label="3">本年</el-radio-button> |
|
||||
</el-radio-group> |
|
||||
</div> |
|
||||
<div class="ele-inline-block hidden-xs-only"> |
|
||||
<el-date-picker |
|
||||
v-model="saleSearch.datetime" |
|
||||
type="daterange" |
|
||||
range-separator="至" size="small" |
|
||||
start-placeholder="开始日期" |
|
||||
end-placeholder="结束日期" unlink-panels/> |
|
||||
</div> |
|
||||
</div> |
|
||||
<el-divider/> |
|
||||
<el-row> |
|
||||
<el-col :md="18" :sm="16"> |
|
||||
<div class="demo-monitor-title"> |
|
||||
{{ {saleroom: '销售', visits: '访问量'}[saleSearch.type] }}趋势 |
|
||||
</div> |
|
||||
<ele-chart |
|
||||
:option="saleChartOption" |
|
||||
style="height:285px;"/> |
|
||||
</el-col> |
|
||||
<el-col :md="6" :sm="8"> |
|
||||
<div class="demo-monitor-title"> |
|
||||
门店{{ {saleroom: '销售额', visits: '访问量'}[saleSearch.type] }}排名 |
|
||||
</div> |
|
||||
<div |
|
||||
v-for="(item,index) in saleroomRankData" |
|
||||
:key="index" |
|
||||
class="demo-monitor-rank-item ele-cell"> |
|
||||
<el-tag |
|
||||
:type="index<3?'':'info'" |
|
||||
size="mini" |
|
||||
class="ele-tag-round"> |
|
||||
{{ index + 1 }} |
|
||||
</el-tag> |
|
||||
<div class="ele-cell-content">{{ item.name }}</div> |
|
||||
<div class="ele-text-secondary">{{ item.value }}</div> |
|
||||
</div> |
|
||||
</el-col> |
|
||||
</el-row> |
|
||||
</el-card> |
|
||||
<!-- 最近1小时访问情况 --> |
|
||||
<el-row :gutter="15"> |
|
||||
<el-col :md="18" :sm="16"> |
|
||||
<el-card |
|
||||
shadow="never" |
|
||||
header="最近1小时访问情况" |
|
||||
body-style="padding: 10px 5px 0 0;"> |
|
||||
<ele-chart |
|
||||
:option="visitHourChartOption" |
|
||||
style="height: 323px;"/> |
|
||||
</el-card> |
|
||||
</el-col> |
|
||||
<el-col :md="6" :sm="8"> |
|
||||
<el-card shadow="never" header="热门搜索"> |
|
||||
<ele-word-cloud |
|
||||
:data="hotSearchData" |
|
||||
style="height: 303px;"/> |
|
||||
</el-card> |
|
||||
</el-col> |
|
||||
</el-row> |
|
||||
</div> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
import EleChart from 'ele-admin/packages/ele-chart'; |
|
||||
import EleWordCloud from 'ele-admin/packages/ele-word-cloud'; |
|
||||
|
|
||||
export default { |
|
||||
name: 'DashboardAnalysis', |
|
||||
components: {EleChart, EleWordCloud}, |
|
||||
data() { |
|
||||
return { |
|
||||
// 支付笔数 |
|
||||
payNumData: [], |
|
||||
// 销售量搜索参数 |
|
||||
saleSearch: { |
|
||||
type: 'saleroom', |
|
||||
dateType: 0, |
|
||||
datetime: '' |
|
||||
}, |
|
||||
// 销售量数据 |
|
||||
saleroomData: [], |
|
||||
// 销售量排名数据 |
|
||||
saleroomRankData: [], |
|
||||
// 最近1小时访问情况数据 |
|
||||
visitHourData: [], |
|
||||
// 词云数据 |
|
||||
hotSearchData: [] |
|
||||
} |
|
||||
}, |
|
||||
computed: { |
|
||||
// 访问量折线图配置 |
|
||||
visitChartOption() { |
|
||||
if (!this.payNumData.length) return {}; |
|
||||
return { |
|
||||
color: '#975fe5', |
|
||||
tooltip: { |
|
||||
trigger: 'axis', |
|
||||
formatter: '<i class="ele-chart-dot" style="background: #975fe5;"></i>{b0}: {c0}' |
|
||||
}, |
|
||||
grid: { |
|
||||
top: 10, |
|
||||
bottom: 0, |
|
||||
left: 0, |
|
||||
right: 0 |
|
||||
}, |
|
||||
xAxis: [ |
|
||||
{ |
|
||||
show: false, |
|
||||
type: 'category', |
|
||||
boundaryGap: false, |
|
||||
data: this.payNumData.map(d => d.date) |
|
||||
} |
|
||||
], |
|
||||
yAxis: [ |
|
||||
{ |
|
||||
show: false, |
|
||||
type: 'value', |
|
||||
splitLine: { |
|
||||
show: false |
|
||||
} |
|
||||
} |
|
||||
], |
|
||||
series: [ |
|
||||
{ |
|
||||
type: 'line', |
|
||||
smooth: true, |
|
||||
symbol: 'none', |
|
||||
areaStyle: { |
|
||||
opacity: 0.5 |
|
||||
}, |
|
||||
data: this.payNumData.map(d => d.value) |
|
||||
} |
|
||||
] |
|
||||
}; |
|
||||
}, |
|
||||
// 支付笔数柱状图配置 |
|
||||
payNumChartOption() { |
|
||||
return { |
|
||||
tooltip: { |
|
||||
trigger: 'axis', |
|
||||
formatter: '<i class="ele-chart-dot" style="background: #3aa1ff;"></i>{b0}: {c0}' |
|
||||
}, |
|
||||
grid: { |
|
||||
top: 10, |
|
||||
bottom: 0, |
|
||||
left: 0, |
|
||||
right: 0 |
|
||||
}, |
|
||||
xAxis: [ |
|
||||
{ |
|
||||
show: false, |
|
||||
type: 'category', |
|
||||
data: this.payNumData.map(d => d.date) |
|
||||
} |
|
||||
], |
|
||||
yAxis: [ |
|
||||
{ |
|
||||
show: false, |
|
||||
type: 'value', |
|
||||
splitLine: { |
|
||||
show: false |
|
||||
} |
|
||||
} |
|
||||
], |
|
||||
series: [ |
|
||||
{ |
|
||||
type: 'bar', |
|
||||
data: this.payNumData.map(d => d.value) |
|
||||
} |
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
// 销售额柱状图配置 |
|
||||
saleChartOption() { |
|
||||
return { |
|
||||
tooltip: { |
|
||||
trigger: 'axis' |
|
||||
}, |
|
||||
xAxis: [ |
|
||||
{ |
|
||||
type: 'category', |
|
||||
data: this.saleroomData.map(d => d.month) |
|
||||
} |
|
||||
], |
|
||||
yAxis: [ |
|
||||
{ |
|
||||
type: 'value' |
|
||||
} |
|
||||
], |
|
||||
series: [ |
|
||||
{ |
|
||||
type: 'bar', |
|
||||
data: this.saleroomData.map(d => d.value) |
|
||||
} |
|
||||
] |
|
||||
}; |
|
||||
}, |
|
||||
// 最近1小时访问情况折线图配置 |
|
||||
visitHourChartOption() { |
|
||||
if (!this.visitHourData.length) return {}; |
|
||||
return { |
|
||||
tooltip: { |
|
||||
trigger: 'axis' |
|
||||
}, |
|
||||
legend: { |
|
||||
data: ['浏览量', '访问量'], |
|
||||
right: 20 |
|
||||
}, |
|
||||
xAxis: [ |
|
||||
{ |
|
||||
type: 'category', |
|
||||
boundaryGap: false, |
|
||||
data: this.visitHourData.map(d => d.time) |
|
||||
} |
|
||||
], |
|
||||
yAxis: [ |
|
||||
{ |
|
||||
type: 'value' |
|
||||
} |
|
||||
], |
|
||||
series: [ |
|
||||
{ |
|
||||
name: '浏览量', |
|
||||
type: 'line', |
|
||||
smooth: true, |
|
||||
symbol: 'none', |
|
||||
areaStyle: { |
|
||||
opacity: 0.5 |
|
||||
}, |
|
||||
data: this.visitHourData.map(d => d.views) |
|
||||
}, |
|
||||
{ |
|
||||
name: '访问量', |
|
||||
type: 'line', |
|
||||
smooth: true, |
|
||||
symbol: 'none', |
|
||||
areaStyle: { |
|
||||
opacity: 0.5 |
|
||||
}, |
|
||||
data: this.visitHourData.map(d => d.visits) |
|
||||
} |
|
||||
] |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
mounted() { |
|
||||
this.getPayNumData(); |
|
||||
this.getSaleroomData(); |
|
||||
this.getVisitHourData(); |
|
||||
this.getWordCloudData(); |
|
||||
}, |
|
||||
methods: { |
|
||||
/* 获取支付笔数数据 */ |
|
||||
getPayNumData() { |
|
||||
this.payNumData = [ |
|
||||
{date: '2020-06-12', value: 7}, |
|
||||
{date: '2020-06-13', value: 5}, |
|
||||
{date: '2020-06-14', value: 4}, |
|
||||
{date: '2020-06-15', value: 2}, |
|
||||
{date: '2020-06-16', value: 4}, |
|
||||
{date: '2020-06-17', value: 7}, |
|
||||
{date: '2020-06-18', value: 5}, |
|
||||
{date: '2020-06-19', value: 6}, |
|
||||
{date: '2020-06-20', value: 5}, |
|
||||
{date: '2020-06-21', value: 9}, |
|
||||
{date: '2020-06-22', value: 6}, |
|
||||
{date: '2020-06-23', value: 3}, |
|
||||
{date: '2020-06-24', value: 1}, |
|
||||
{date: '2020-06-25', value: 5}, |
|
||||
{date: '2020-06-26', value: 3}, |
|
||||
{date: '2020-06-27', value: 6}, |
|
||||
{date: '2020-06-18', value: 5} |
|
||||
]; |
|
||||
}, |
|
||||
/* 获取销售量数据 */ |
|
||||
getSaleroomData() { |
|
||||
if (this.saleSearch.type === 'saleroom') { |
|
||||
this.saleroomData = [ |
|
||||
{month: '1月', value: 816}, |
|
||||
{month: '2月', value: 542}, |
|
||||
{month: '3月', value: 914}, |
|
||||
{month: '4月', value: 781}, |
|
||||
{month: '5月', value: 355}, |
|
||||
{month: '6月', value: 796}, |
|
||||
{month: '7月', value: 714}, |
|
||||
{month: '8月', value: 1195}, |
|
||||
{month: '9月', value: 1055}, |
|
||||
{month: '10月', value: 271}, |
|
||||
{month: '11月', value: 384}, |
|
||||
{month: '12月', value: 1098} |
|
||||
]; |
|
||||
} else { |
|
||||
this.saleroomData = [ |
|
||||
{month: '1月', value: 1098}, |
|
||||
{month: '2月', value: 384}, |
|
||||
{month: '3月', value: 271}, |
|
||||
{month: '4月', value: 1055}, |
|
||||
{month: '5月', value: 1195}, |
|
||||
{month: '6月', value: 714}, |
|
||||
{month: '7月', value: 796}, |
|
||||
{month: '8月', value: 355}, |
|
||||
{month: '9月', value: 781}, |
|
||||
{month: '10月', value: 914}, |
|
||||
{month: '11月', value: 542}, |
|
||||
{month: '12月', value: 816} |
|
||||
]; |
|
||||
} |
|
||||
this.saleroomRankData = [ |
|
||||
{name: '工专路 1 号店', value: '323,234'}, |
|
||||
{name: '工专路 2 号店', value: '323,234'}, |
|
||||
{name: '工专路 3 号店', value: '323,234'}, |
|
||||
{name: '工专路 4 号店', value: '323,234'}, |
|
||||
{name: '工专路 5 号店', value: '323,234'}, |
|
||||
{name: '工专路 6 号店', value: '323,234'}, |
|
||||
{name: '工专路 7 号店', value: '323,234'} |
|
||||
]; |
|
||||
}, |
|
||||
/* 获取最近1小时访问情况数据 */ |
|
||||
getVisitHourData() { |
|
||||
this.visitHourData = [ |
|
||||
{time: '16:00', visits: 15, views: 45}, |
|
||||
{time: '16:05', visits: 39, views: 169}, |
|
||||
{time: '16:10', visits: 152, views: 400}, |
|
||||
{time: '16:15', visits: 94, views: 285}, |
|
||||
{time: '16:20', visits: 102, views: 316}, |
|
||||
{time: '16:25', visits: 86, views: 148}, |
|
||||
{time: '16:30', visits: 39, views: 150}, |
|
||||
{time: '16:35', visits: 38, views: 234}, |
|
||||
{time: '16:40', visits: 95, views: 158}, |
|
||||
{time: '16:45', visits: 30, views: 100}, |
|
||||
{time: '16:50', visits: 86, views: 266} |
|
||||
]; |
|
||||
}, |
|
||||
/* 获取词云数据 */ |
|
||||
getWordCloudData() { |
|
||||
this.hotSearchData = [ |
|
||||
{name: "软妹子", value: 23}, |
|
||||
{name: "汪星人", value: 23}, |
|
||||
{name: "长腿欧巴", value: 23}, |
|
||||
{name: "萝莉", value: 22}, |
|
||||
{name: "辣~", value: 22}, |
|
||||
{name: "K歌", value: 22}, |
|
||||
{name: "大长腿", value: 21}, |
|
||||
{name: "川妹子", value: 21}, |
|
||||
{name: "女神", value: 21}, |
|
||||
{name: "米粉", value: 20}, |
|
||||
{name: "专注设计", value: 20}, |
|
||||
{name: "逛街", value: 20}, |
|
||||
{name: "黑长直", value: 20}, |
|
||||
{name: "海纳百川", value: 19}, |
|
||||
{name: "萌萌哒", value: 19}, |
|
||||
{name: "坚持", value: 19}, |
|
||||
{name: "话唠", value: 19}, |
|
||||
{name: "果粉", value: 18}, |
|
||||
{name: "喵星人", value: 18}, |
|
||||
{name: "花粉", value: 18}, |
|
||||
{name: "衬衫控", value: 18}, |
|
||||
{name: "宅男", value: 17}, |
|
||||
{name: "小清新", value: 17}, |
|
||||
{name: "眼镜男", value: 17}, |
|
||||
{name: "琼瑶", value: 17}, |
|
||||
{name: "穷游党", value: 16}, |
|
||||
{name: "铲屎官", value: 16}, |
|
||||
{name: "正太", value: 16}, |
|
||||
{name: "中二病", value: 16}, |
|
||||
{name: "夜猫子", value: 15}, |
|
||||
{name: "逗比", value: 15}, |
|
||||
{name: "腹黑", value: 15}, |
|
||||
{name: "吃鸡", value: 15}, |
|
||||
{name: "为了联盟", value: 14}, |
|
||||
{name: "背包客", value: 14}, |
|
||||
{name: "民谣", value: 14}, |
|
||||
{name: "为了部落", value: 14}, |
|
||||
{name: "懒癌患者", value: 13}, |
|
||||
{name: "追剧", value: 13}, |
|
||||
{name: "IT民工", value: 13}, |
|
||||
{name: "CNB成员", value: 13}, |
|
||||
{name: "选择困难", value: 12}, |
|
||||
{name: "锤粉", value: 12}, |
|
||||
{name: "欧皇", value: 12}, |
|
||||
{name: "仙气十足", value: 12} |
|
||||
]; |
|
||||
}, |
|
||||
/* 销售量tab选择改变事件 */ |
|
||||
onSaleTypeChange() { |
|
||||
this.getSaleroomData(); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style scoped> |
|
||||
/* 统计卡片 */ |
|
||||
.analysis-chart-card-num { |
|
||||
font-size: 30px; |
|
||||
} |
|
||||
|
|
||||
.analysis-chart-card-content { |
|
||||
height: 40px; |
|
||||
box-sizing: border-box; |
|
||||
margin-bottom: 12px; |
|
||||
} |
|
||||
|
|
||||
.analysis-chart-card-text { |
|
||||
padding-top: 12px; |
|
||||
} |
|
||||
|
|
||||
/* 销售额、访问量工具栏 */ |
|
||||
.demo-monitor-tool { |
|
||||
padding: 0 20px; |
|
||||
} |
|
||||
|
|
||||
.demo-monitor-tool ::v-deep .el-tabs__nav-wrap:after { |
|
||||
display: none; |
|
||||
} |
|
||||
|
|
||||
.demo-monitor-tool ::v-deep .el-tabs__item { |
|
||||
height: 50px; |
|
||||
line-height: 50px; |
|
||||
font-size: 15px; |
|
||||
} |
|
||||
|
|
||||
.demo-monitor-tool .el-date-editor { |
|
||||
width: 256px; |
|
||||
margin-left: 10px; |
|
||||
} |
|
||||
|
|
||||
/* 小标题 */ |
|
||||
.demo-monitor-title { |
|
||||
padding: 0 20px; |
|
||||
margin: 15px 0 5px 0; |
|
||||
} |
|
||||
|
|
||||
/* 排名item */ |
|
||||
.demo-monitor-rank-item { |
|
||||
padding: 0 20px; |
|
||||
line-height: 20px; |
|
||||
margin-top: 18px; |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,613 +0,0 @@ |
|||||
<template> |
|
||||
<div class="ele-body ele-body-card"> |
|
||||
<!-- 顶部统计卡片 --> |
|
||||
<el-row :gutter="15"> |
|
||||
<el-col :sm="6" :xs="12"> |
|
||||
<el-card shadow="never" class="monitor-count-card"> |
|
||||
<el-tag size="large" class="ele-tag-round"> |
|
||||
<i class="el-icon-s-custom"></i> |
|
||||
</el-tag> |
|
||||
<div class="monitor-count-card-num">21.2 k</div> |
|
||||
<div class="monitor-count-card-text ele-text-secondary">总访问人数</div> |
|
||||
<ele-avatar-list :data="visitUsers" :size="22" :max="4"/> |
|
||||
</el-card> |
|
||||
</el-col> |
|
||||
<el-col :sm="6" :xs="12"> |
|
||||
<el-card shadow="never" class="monitor-count-card"> |
|
||||
<el-tag size="large" type="warning" class="ele-tag-round"> |
|
||||
<i class="el-icon-_sent"></i> |
|
||||
</el-tag> |
|
||||
<div class="monitor-count-card-num">1.6 k</div> |
|
||||
<div class="monitor-count-card-text ele-text-secondary">点击量(近30天)</div> |
|
||||
<div class="monitor-count-card-trend ele-text-success"> |
|
||||
<i class="el-icon-arrow-up"></i> |
|
||||
<span>110.5%</span> |
|
||||
</div> |
|
||||
<el-tooltip content="指标说明" placement="top"> |
|
||||
<i class="el-icon-_question ele-text-placeholder monitor-count-card-tips"></i> |
|
||||
</el-tooltip> |
|
||||
</el-card> |
|
||||
</el-col> |
|
||||
<el-col :sm="6" :xs="12"> |
|
||||
<el-card shadow="never" class="monitor-count-card"> |
|
||||
<el-tag size="large" type="danger" class="ele-tag-round"> |
|
||||
<i class="el-icon-s-flag"></i> |
|
||||
</el-tag> |
|
||||
<div class="monitor-count-card-num">826.0</div> |
|
||||
<div class="monitor-count-card-text ele-text-secondary">到达量(近30天)</div> |
|
||||
<div class="monitor-count-card-trend ele-text-danger"> |
|
||||
<i class="el-icon-arrow-down"></i> |
|
||||
<span>15.5%</span> |
|
||||
</div> |
|
||||
</el-card> |
|
||||
</el-col> |
|
||||
<el-col :sm="6" :xs="12"> |
|
||||
<el-card shadow="never" class="monitor-count-card"> |
|
||||
<el-tag size="large" type="success" class="ele-tag-round"> |
|
||||
<i class="el-icon-_flash-solid"></i> |
|
||||
</el-tag> |
|
||||
<div class="monitor-count-card-num">28.8 %</div> |
|
||||
<div class="monitor-count-card-text">转化率(近30天)</div> |
|
||||
<div class="monitor-count-card-trend ele-text-success"> |
|
||||
<i class="el-icon-arrow-up"></i> |
|
||||
<span>65.8%</span> |
|
||||
</div> |
|
||||
<el-tooltip content="指标说明" placement="top"> |
|
||||
<i class="el-icon-_question ele-text-placeholder monitor-count-card-tips"></i> |
|
||||
</el-tooltip> |
|
||||
</el-card> |
|
||||
</el-col> |
|
||||
</el-row> |
|
||||
<!-- 用户分布、浏览器分布 --> |
|
||||
<el-row :gutter="15"> |
|
||||
<el-col :md="18"> |
|
||||
<el-card shadow="never" header="用户分布"> |
|
||||
<el-row> |
|
||||
<el-col :sm="18"> |
|
||||
<ele-chart |
|
||||
:option="userCountMapOption" |
|
||||
style="height: 438px;"/> |
|
||||
</el-col> |
|
||||
<el-col :sm="6"> |
|
||||
<ele-chart |
|
||||
:option="userCountChartOption" |
|
||||
style="height: 438px;"/> |
|
||||
</el-col> |
|
||||
</el-row> |
|
||||
</el-card> |
|
||||
</el-col> |
|
||||
<el-col :md="6"> |
|
||||
<el-row :gutter="15"> |
|
||||
<el-col :md="24" :sm="12"> |
|
||||
<el-card shadow="never" header="在线人数"> |
|
||||
<div class="monitor-online-num-card"> |
|
||||
<div class="monitor-online-num-text">{{ currentTime }}</div> |
|
||||
<div class="monitor-online-num-title"> |
|
||||
<vue-count-up |
|
||||
:end-val="228" |
|
||||
@ready="(ins) => { onlineNumAnimIns = ins; }"/> |
|
||||
</div> |
|
||||
<div class="monitor-online-num-text">在线总人数</div> |
|
||||
<ele-dot :text="updateTimeText"/> |
|
||||
</div> |
|
||||
</el-card> |
|
||||
</el-col> |
|
||||
<el-col :md="24" :sm="12"> |
|
||||
<el-card |
|
||||
shadow="never" |
|
||||
header="浏览器分布" |
|
||||
body-style="padding: 0 10px;"> |
|
||||
<ele-chart |
|
||||
:option="browserChartOption" |
|
||||
style="height: 240px;"/> |
|
||||
</el-card> |
|
||||
</el-col> |
|
||||
</el-row> |
|
||||
</el-col> |
|
||||
<el-col :md="12"> |
|
||||
<el-card shadow="never" header="用户评价"> |
|
||||
<div class="ele-cell ele-cell-align-bottom"> |
|
||||
<div style="font-size: 48px;">4.5</div> |
|
||||
<div class="ele-cell-content" style="padding-bottom: 8px;"> |
|
||||
<el-rate |
|
||||
v-model="userRate" |
|
||||
disabled |
|
||||
show-score |
|
||||
text-color="#F7BA2A" |
|
||||
score-template="很棒"/> |
|
||||
</div> |
|
||||
</div> |
|
||||
<div class="ele-cell" style="margin: 15px 0;"> |
|
||||
<div style="font-size: 28px;" class="ele-text-placeholder">-0%</div> |
|
||||
<div class="ele-cell-content ele-text-small ele-text-secondary">当前没有评价波动</div> |
|
||||
</div> |
|
||||
<div class="ele-cell"> |
|
||||
<div class="ele-cell-content"> |
|
||||
<el-progress :percentage="60" :show-text="false" status="success"/> |
|
||||
</div> |
|
||||
<div style="width: 80px;white-space: nowrap;" class="ele-text-secondary"> |
|
||||
<span><s/><i class="el-icon-star-on"></i></span> |
|
||||
<span> 5 : 368人</span> |
|
||||
</div> |
|
||||
</div> |
|
||||
<div class="ele-cell"> |
|
||||
<div class="ele-cell-content"> |
|
||||
<el-progress :percentage="40" :show-text="false"/> |
|
||||
</div> |
|
||||
<div style="width: 80px;white-space: nowrap;" class="ele-text-secondary"> |
|
||||
<span><s/><i class="el-icon-star-on"></i></span> |
|
||||
<span> 4 : 256人</span> |
|
||||
</div> |
|
||||
</div> |
|
||||
<div class="ele-cell"> |
|
||||
<div class="ele-cell-content"> |
|
||||
<el-progress :percentage="20" :show-text="false" status="warning"/> |
|
||||
</div> |
|
||||
<div style="width: 80px;white-space: nowrap;" class="ele-text-secondary"> |
|
||||
<span><s/><i class="el-icon-star-on"></i></span> |
|
||||
<span> 3 : 49人</span> |
|
||||
</div> |
|
||||
</div> |
|
||||
<div class="ele-cell"> |
|
||||
<div class="ele-cell-content"> |
|
||||
<el-progress :percentage="10" :show-text="false" status="exception"/> |
|
||||
</div> |
|
||||
<div style="width: 80px;white-space: nowrap;" class="ele-text-secondary"> |
|
||||
<span><s/><i class="el-icon-star-on"></i></span> |
|
||||
<span> 2 : 14人</span> |
|
||||
</div> |
|
||||
</div> |
|
||||
<div class="ele-cell"> |
|
||||
<div class="ele-cell-content"> |
|
||||
<el-progress :percentage="0" :show-text="false"/> |
|
||||
</div> |
|
||||
<div style="width: 80px;white-space: nowrap;" class="ele-text-secondary"> |
|
||||
<span><s/><i class="el-icon-star-on"></i></span> |
|
||||
<span> 1 : 0人</span> |
|
||||
</div> |
|
||||
</div> |
|
||||
</el-card> |
|
||||
</el-col> |
|
||||
<el-col :md="6" :sm="12"> |
|
||||
<el-card shadow="never" header="用户满意度"> |
|
||||
<div class="ele-cell" style="margin: 15px 0;"> |
|
||||
<div class="ele-cell-content ele-text-center" style="font-size: 24px;">856</div> |
|
||||
<div class="ele-cell-content ele-text-center"> |
|
||||
<div class="monitor-face-smile"> |
|
||||
<span></span> |
|
||||
</div> |
|
||||
<div class="ele-text-secondary" style="margin-top:5px;">正面评论</div> |
|
||||
</div> |
|
||||
<h2 class="ele-cell-content ele-text-success ele-text-center">82%</h2> |
|
||||
</div> |
|
||||
<el-divider/> |
|
||||
<div class="ele-cell" style="margin: 15px 0 12px 0;"> |
|
||||
<div class="ele-cell-content ele-text-center" style="font-size: 24px;">60</div> |
|
||||
<div class="ele-cell-content ele-text-center"> |
|
||||
<div class="monitor-face-cry"> |
|
||||
<span></span> |
|
||||
</div> |
|
||||
<div class="ele-text-secondary" style="margin-top: 5px;">负面评论</div> |
|
||||
</div> |
|
||||
<h2 class="ele-cell-content ele-text-danger ele-text-center">9%</h2> |
|
||||
</div> |
|
||||
</el-card> |
|
||||
</el-col> |
|
||||
<el-col :md="6" :sm="12"> |
|
||||
<el-card shadow="never" header="用户活跃度"> |
|
||||
<div class="ele-cell" style="padding: 34px 0;"> |
|
||||
<div class="ele-cell-content ele-text-center"> |
|
||||
<div class="monitor-progress-group"> |
|
||||
<el-progress |
|
||||
type="circle" |
|
||||
:percentage="70" |
|
||||
status="success" |
|
||||
:show-text="false" |
|
||||
:width="140"/> |
|
||||
<el-progress |
|
||||
type="circle" |
|
||||
:percentage="60" |
|
||||
:show-text="false" |
|
||||
:width="115" |
|
||||
:stroke-width="5"/> |
|
||||
<el-progress |
|
||||
type="circle" |
|
||||
:percentage="35" |
|
||||
status="exception" |
|
||||
:show-text="false" |
|
||||
:width="90" |
|
||||
:stroke-width="4"/> |
|
||||
</div> |
|
||||
</div> |
|
||||
<div class="monitor-progress-legends"> |
|
||||
<div class="ele-text-small"> |
|
||||
<ele-dot :ripple="false" text="活跃率: 70%"/> |
|
||||
</div> |
|
||||
<div class="ele-text-small"> |
|
||||
<ele-dot type="success" :ripple="false" text="留存率: 60%"/> |
|
||||
</div> |
|
||||
<div class="ele-text-small"> |
|
||||
<ele-dot type="danger" :ripple="false" text="跳出率: 35%"/> |
|
||||
</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
</el-card> |
|
||||
</el-col> |
|
||||
</el-row> |
|
||||
</div> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
import VueCountUp from 'vue-countup-v2'; |
|
||||
import EleChart from 'ele-admin/packages/ele-chart'; |
|
||||
|
|
||||
export default { |
|
||||
name: 'DashboardMonitor', |
|
||||
components: {VueCountUp, EleChart}, |
|
||||
data() { |
|
||||
return { |
|
||||
// 访问人数 |
|
||||
visitUsers: [ |
|
||||
{ |
|
||||
name: 'SunSmile', |
|
||||
avatar: 'https://cdn.eleadmin.com/20200609/c184eef391ae48dba87e3057e70238fb.jpg' |
|
||||
}, |
|
||||
{ |
|
||||
name: '你的名字很好听', |
|
||||
avatar: 'https://cdn.eleadmin.com/20200609/b6a811873e704db49db994053a5019b2.jpg' |
|
||||
}, |
|
||||
{ |
|
||||
name: '全村人的希望', |
|
||||
avatar: 'https://cdn.eleadmin.com/20200609/948344a2a77c47a7a7b332fe12ff749a.jpg' |
|
||||
}, |
|
||||
{ |
|
||||
name: 'Jasmine', |
|
||||
avatar: 'https://cdn.eleadmin.com/20200609/f6bc05af944a4f738b54128717952107.jpg' |
|
||||
}, |
|
||||
{ |
|
||||
name: '酷酷的大叔', |
|
||||
avatar: 'https://cdn.eleadmin.com/20200609/2d98970a51b34b6b859339c96b240dcd.jpg' |
|
||||
} |
|
||||
], |
|
||||
// 在线总人数倒计时 |
|
||||
updateTime: 5, |
|
||||
// 中国地图轮廓数据 |
|
||||
chinaMapData: null, |
|
||||
// 用户分布数据 |
|
||||
userCountData: [], |
|
||||
// 当前时间 |
|
||||
currentTime: '20:58:22', |
|
||||
// 在线人数动画数字组件实例 |
|
||||
onlineNumAnimIns: null, |
|
||||
// 在线人数更新定时器 |
|
||||
onlineNumTimer: null, |
|
||||
// 浏览器分布环形图数据 |
|
||||
browserCountData: [], |
|
||||
// 用户评分 |
|
||||
userRate: 4.5 |
|
||||
} |
|
||||
}, |
|
||||
computed: { |
|
||||
// 在线人数倒计时文字 |
|
||||
updateTimeText() { |
|
||||
return this.updateTime + ' 秒后更新'; |
|
||||
}, |
|
||||
// 用户分布地图配置 |
|
||||
userCountMapOption() { |
|
||||
if (!this.chinaMapData) { |
|
||||
return {}; |
|
||||
} |
|
||||
let data = this.userCountData.map(d => d.value).sort((a, b) => (a - b)); |
|
||||
return { |
|
||||
tooltip: { |
|
||||
trigger: 'item' |
|
||||
}, |
|
||||
visualMap: { |
|
||||
min: data[data.length - 1] || 0, |
|
||||
max: data[0] || 0, |
|
||||
text: ['高', '低'], |
|
||||
calculable: true, |
|
||||
color: ['rgba(24,144,255,1)', 'rgba(24,144,255,.1)'] |
|
||||
}, |
|
||||
series: [ |
|
||||
{ |
|
||||
name: '用户数', |
|
||||
type: 'map', |
|
||||
mapType: 'china', |
|
||||
label: { |
|
||||
show: true |
|
||||
}, |
|
||||
data: this.userCountData |
|
||||
} |
|
||||
] |
|
||||
}; |
|
||||
}, |
|
||||
// 用户分布柱状图配置 |
|
||||
userCountChartOption() { |
|
||||
let data = this.userCountData |
|
||||
.filter(d => d.value > 0) |
|
||||
.sort((a, b) => { |
|
||||
return a.value - b.value; |
|
||||
}); |
|
||||
return { |
|
||||
tooltip: { |
|
||||
trigger: 'axis', |
|
||||
formatter: '<i class="ele-chart-dot" style="background: #3aa1ff;"></i>{b0}: {c0}' |
|
||||
}, |
|
||||
grid: { |
|
||||
top: 0, |
|
||||
bottom: 0, |
|
||||
left: 50, |
|
||||
right: 0 |
|
||||
}, |
|
||||
yAxis: [ |
|
||||
{ |
|
||||
type: 'category', |
|
||||
axisLine: { |
|
||||
show: false |
|
||||
}, |
|
||||
axisTick: { |
|
||||
show: false |
|
||||
}, |
|
||||
data: data.map(d => d.name) |
|
||||
} |
|
||||
], |
|
||||
xAxis: [ |
|
||||
{ |
|
||||
show: false, |
|
||||
type: 'value', |
|
||||
splitLine: { |
|
||||
show: false |
|
||||
} |
|
||||
} |
|
||||
], |
|
||||
series: [ |
|
||||
{ |
|
||||
type: 'bar', |
|
||||
data: data.map(d => d.value) |
|
||||
} |
|
||||
] |
|
||||
}; |
|
||||
}, |
|
||||
// 浏览器分布饼图配置 |
|
||||
browserChartOption() { |
|
||||
return { |
|
||||
tooltip: { |
|
||||
trigger: 'item' |
|
||||
}, |
|
||||
legend: { |
|
||||
data: this.browserCountData.map(d => d.name), |
|
||||
bottom: 5, |
|
||||
itemWidth: 10, |
|
||||
itemHeight: 10, |
|
||||
icon: 'circle' |
|
||||
}, |
|
||||
series: [ |
|
||||
{ |
|
||||
type: 'pie', |
|
||||
radius: ['45%', '70%'], |
|
||||
center: ['50%', '43%'], |
|
||||
label: { |
|
||||
show: false |
|
||||
}, |
|
||||
data: this.browserCountData |
|
||||
} |
|
||||
] |
|
||||
}; |
|
||||
} |
|
||||
}, |
|
||||
mounted() { |
|
||||
this.doUpdateOnlineNum(); |
|
||||
this.getChinaMapData(); |
|
||||
this.getUserCountData(); |
|
||||
this.getBrowserCountData(); |
|
||||
}, |
|
||||
methods: { |
|
||||
/* 在线人数更新倒计时 */ |
|
||||
doUpdateOnlineNum() { |
|
||||
this.currentTime = this.$util.toDateString(new Date(), 'HH:mm:ss'); |
|
||||
this.onlineNumTimer = setInterval(() => { |
|
||||
this.currentTime = this.$util.toDateString(new Date(), 'HH:mm:ss'); |
|
||||
if (this.updateTime === 1) { |
|
||||
this.updateTime = 5; |
|
||||
if (this.onlineNumAnimIns) { |
|
||||
this.onlineNumAnimIns.update(100 + Math.round(Math.random() * 900)); |
|
||||
} |
|
||||
} else { |
|
||||
this.updateTime--; |
|
||||
} |
|
||||
}, 1000); |
|
||||
}, |
|
||||
/* 获取中国地图数据并注册地图 */ |
|
||||
getChinaMapData() { |
|
||||
this.$http.get('https://cdn.eleadmin.com/20200610/china-provinces.geo.json').then(res => { |
|
||||
EleChart.registerMap('china', res.data); |
|
||||
this.chinaMapData = res.data; |
|
||||
}).catch(e => { |
|
||||
this.$message.error(e.message); |
|
||||
}); |
|
||||
}, |
|
||||
/* 获取用户分布数据 */ |
|
||||
getUserCountData() { |
|
||||
this.userCountData = [ |
|
||||
{name: "贵州", value: 570}, |
|
||||
{name: "云南", value: 8890}, |
|
||||
{name: "重庆", value: 10010}, |
|
||||
{name: "吉林", value: 5056}, |
|
||||
{name: "山西", value: 2123}, |
|
||||
{name: "天津", value: 9130}, |
|
||||
{name: "江西", value: 10170}, |
|
||||
{name: "广西", value: 6172}, |
|
||||
{name: "陕西", value: 9251}, |
|
||||
{name: "黑龙江", value: 5125}, |
|
||||
{name: "安徽", value: 9530}, |
|
||||
{name: "北京", value: 51919}, |
|
||||
{name: "福建", value: 3756}, |
|
||||
{name: "上海", value: 59190}, |
|
||||
{name: "湖北", value: 37109}, |
|
||||
{name: "湖南", value: 8966}, |
|
||||
{name: "四川", value: 31020}, |
|
||||
{name: "辽宁", value: 7222}, |
|
||||
{name: "河北", value: 3451}, |
|
||||
{name: "河南", value: 9693}, |
|
||||
{name: "浙江", value: 62310}, |
|
||||
{name: "山东", value: 39231}, |
|
||||
{name: "江苏", value: 35911}, |
|
||||
{name: "广东", value: 55891} |
|
||||
]; |
|
||||
}, |
|
||||
/* 获取用户浏览器分布数据 */ |
|
||||
getBrowserCountData() { |
|
||||
this.browserCountData = [ |
|
||||
{name: 'Chrome', value: 9052}, |
|
||||
{name: 'Safari', value: 535}, |
|
||||
{name: 'Firefox', value: 1610}, |
|
||||
{name: 'Edge', value: 2800}, |
|
||||
{name: 'IE', value: 3200}, |
|
||||
{name: 'Other', value: 1700} |
|
||||
]; |
|
||||
} |
|
||||
}, |
|
||||
beforeDestroy() { |
|
||||
// 销毁定时器 |
|
||||
if (this.onlineNumTimer) { |
|
||||
clearInterval(this.onlineNumTimer); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style scoped> |
|
||||
/* 统计卡片 */ |
|
||||
.monitor-count-card ::v-deep .el-card__body { |
|
||||
padding-top: 18px; |
|
||||
text-align: center; |
|
||||
position: relative; |
|
||||
} |
|
||||
|
|
||||
.monitor-count-card ::v-deep .el-tag { |
|
||||
border-color: transparent; |
|
||||
font-size: 15px; |
|
||||
} |
|
||||
|
|
||||
.monitor-count-card .monitor-count-card-num { |
|
||||
font-weight: 500; |
|
||||
font-size: 32px; |
|
||||
margin-top: 12px; |
|
||||
} |
|
||||
|
|
||||
.monitor-count-card .monitor-count-card-text { |
|
||||
font-size: 12px; |
|
||||
margin: 10px 0; |
|
||||
} |
|
||||
|
|
||||
.monitor-count-card .monitor-count-card-trend { |
|
||||
font-weight: 600; |
|
||||
padding: 6px 0; |
|
||||
} |
|
||||
|
|
||||
.monitor-count-card .monitor-count-card-trend > i { |
|
||||
font-size: 12px; |
|
||||
font-weight: 600; |
|
||||
margin-right: 5px; |
|
||||
} |
|
||||
|
|
||||
.monitor-count-card .monitor-count-card-tips { |
|
||||
position: absolute; |
|
||||
top: 15px; |
|
||||
right: 15px; |
|
||||
cursor: pointer; |
|
||||
} |
|
||||
|
|
||||
/* 当前在线人数卡片 */ |
|
||||
.monitor-online-num-card { |
|
||||
text-align: center; |
|
||||
padding: 5px 0; |
|
||||
} |
|
||||
|
|
||||
.monitor-online-num-text { |
|
||||
margin-bottom: 5px; |
|
||||
} |
|
||||
|
|
||||
.monitor-online-num-title { |
|
||||
font-size: 48px; |
|
||||
margin-bottom: 10px; |
|
||||
} |
|
||||
|
|
||||
@media screen and (max-width: 992px) { |
|
||||
.monitor-online-num-card { |
|
||||
padding: 38px 0; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
/* 笑脸、哭脸 */ |
|
||||
.monitor-face-smile, |
|
||||
.monitor-face-cry { |
|
||||
width: 50px; |
|
||||
height: 50px; |
|
||||
display: inline-block; |
|
||||
background-color: #FBD971; |
|
||||
border-radius: 50%; |
|
||||
position: relative; |
|
||||
} |
|
||||
|
|
||||
.monitor-face-smile > span, |
|
||||
.monitor-face-smile:before, |
|
||||
.monitor-face-smile:after, |
|
||||
.monitor-face-cry > span, |
|
||||
.monitor-face-cry:before, |
|
||||
.monitor-face-cry:after { |
|
||||
width: 22px; |
|
||||
height: 22px; |
|
||||
border-radius: 50%; |
|
||||
transform: rotate(225deg); |
|
||||
border: 3px solid #F0C419; |
|
||||
border-right-color: transparent !important; |
|
||||
border-bottom-color: transparent !important; |
|
||||
position: absolute; |
|
||||
bottom: 8px; |
|
||||
left: 11px; |
|
||||
} |
|
||||
|
|
||||
.monitor-face-smile:before, |
|
||||
.monitor-face-smile:after, |
|
||||
.monitor-face-cry:before, |
|
||||
.monitor-face-cry:after { |
|
||||
content: ""; |
|
||||
width: 6px; |
|
||||
height: 6px; |
|
||||
left: 8px; |
|
||||
top: 14px; |
|
||||
border-color: #F29C1F; |
|
||||
transform: rotate(45deg); |
|
||||
} |
|
||||
|
|
||||
.monitor-face-smile:after, |
|
||||
.monitor-face-cry:after { |
|
||||
left: auto; |
|
||||
right: 8px; |
|
||||
} |
|
||||
|
|
||||
.monitor-face-cry > span { |
|
||||
transform: rotate(45deg); |
|
||||
bottom: -6px; |
|
||||
} |
|
||||
|
|
||||
/* 圆形进度条组合 */ |
|
||||
.monitor-progress-group { |
|
||||
position: relative; |
|
||||
display: inline-block; |
|
||||
} |
|
||||
|
|
||||
.monitor-progress-group .el-progress:not(:first-child) { |
|
||||
position: absolute; |
|
||||
top: 50%; |
|
||||
left: 50%; |
|
||||
transform: translate(-50%, -50%); |
|
||||
margin-top: -1px; |
|
||||
} |
|
||||
|
|
||||
.monitor-progress-legends > div + div { |
|
||||
margin-top: 8px; |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,622 +0,0 @@ |
|||||
<template> |
|
||||
<div class="ele-body ele-body-card"> |
|
||||
<!-- 顶部卡片 --> |
|
||||
<el-card shadow="never" body-style="padding: 20px;"> |
|
||||
<div class="ele-cell workplace-user-card"> |
|
||||
<div class="ele-cell-content ele-cell"> |
|
||||
<el-avatar :size="68" :src="loginUser.avatar"/> |
|
||||
<div class="ele-cell-content"> |
|
||||
<h4 class="ele-elip">早安,{{ loginUser.nickname }},开始您一天的工作吧!</h4> |
|
||||
<div class="ele-text-secondary ele-elip" style="margin-top: 8px;"> |
|
||||
<i class="el-icon-heavy-rain"></i> |
|
||||
<span><s/><s/>今日阴转小雨,22℃ - 32℃,出门记得带伞哦。</span> |
|
||||
</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
<div class="workplace-count-group"> |
|
||||
<div class="workplace-count-item"> |
|
||||
<div class="workplace-count-header"> |
|
||||
<el-tag size="small" class="ele-tag-round"> |
|
||||
<i class="el-icon-menu"></i> |
|
||||
</el-tag> |
|
||||
<span class="workplace-count-name">项目数</span> |
|
||||
</div> |
|
||||
<div class="workplace-count-num">3</div> |
|
||||
</div> |
|
||||
<div class="workplace-count-item"> |
|
||||
<div class="workplace-count-header"> |
|
||||
<el-tag type="warning" size="small" class="ele-tag-round"> |
|
||||
<i class="el-icon-finished"></i> |
|
||||
</el-tag> |
|
||||
<span class="workplace-count-name">待办项</span> |
|
||||
</div> |
|
||||
<div class="workplace-count-num">6 / 24</div> |
|
||||
</div> |
|
||||
<div class="workplace-count-item"> |
|
||||
<div class="workplace-count-header"> |
|
||||
<el-tag type="success" size="small" class="ele-tag-round"> |
|
||||
<i class="el-icon-bell"></i> |
|
||||
</el-tag> |
|
||||
<span class="workplace-count-name">消息</span> |
|
||||
</div> |
|
||||
<div class="workplace-count-num">1,689</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
</el-card> |
|
||||
<!-- 快捷方式 --> |
|
||||
<el-row :gutter="15"> |
|
||||
<el-col :md="3" :sm="6" :xs="12"> |
|
||||
<el-card shadow="hover" body-style="padding: 0;"> |
|
||||
<router-link to="/system/user" class="app-link-block"> |
|
||||
<i class="app-link-icon el-icon-user"></i> |
|
||||
<div class="app-link-title">用户</div> |
|
||||
</router-link> |
|
||||
</el-card> |
|
||||
</el-col> |
|
||||
<el-col :md="3" :sm="6" :xs="12"> |
|
||||
<el-card shadow="hover" body-style="padding: 0;"> |
|
||||
<router-link to="/dashboard/analysis" class="app-link-block"> |
|
||||
<i class="app-link-icon el-icon-data-line" style="color: #95de64;"></i> |
|
||||
<div class="app-link-title">分析</div> |
|
||||
</router-link> |
|
||||
</el-card> |
|
||||
</el-col> |
|
||||
<el-col :md="3" :sm="6" :xs="12"> |
|
||||
<el-card shadow="hover" body-style="padding: 0;"> |
|
||||
<router-link to="/list/card/project" class="app-link-block"> |
|
||||
<i class="app-link-icon el-icon-shopping-cart-2" style="color: #ff9c6e;"></i> |
|
||||
<div class="app-link-title">商品</div> |
|
||||
</router-link> |
|
||||
</el-card> |
|
||||
</el-col> |
|
||||
<el-col :md="3" :sm="6" :xs="12"> |
|
||||
<el-card shadow="hover" body-style="padding: 0;"> |
|
||||
<router-link to="/list/basic" class="app-link-block"> |
|
||||
<i class="app-link-icon el-icon-tickets" style="color: #b37feb;"></i> |
|
||||
<div class="app-link-title">订单</div> |
|
||||
</router-link> |
|
||||
</el-card> |
|
||||
</el-col> |
|
||||
<el-col :md="3" :sm="6" :xs="12"> |
|
||||
<el-card shadow="hover" body-style="padding: 0;"> |
|
||||
<router-link to="/list/advanced" class="app-link-block"> |
|
||||
<i class="app-link-icon el-icon-bank-card" style="color: #ffd666;"></i> |
|
||||
<div class="app-link-title">票据</div> |
|
||||
</router-link> |
|
||||
</el-card> |
|
||||
</el-col> |
|
||||
<el-col :md="3" :sm="6" :xs="12"> |
|
||||
<el-card shadow="hover" body-style="padding: 0;"> |
|
||||
<router-link to="/user/message" class="app-link-block"> |
|
||||
<i class="app-link-icon el-icon-message" style="color: #5cdbd3;"></i> |
|
||||
<div class="app-link-title">消息</div> |
|
||||
</router-link> |
|
||||
</el-card> |
|
||||
</el-col> |
|
||||
<el-col :md="3" :sm="6" :xs="12"> |
|
||||
<el-card shadow="hover" body-style="padding: 0;"> |
|
||||
<router-link to="/extension/more" class="app-link-block"> |
|
||||
<i class="app-link-icon el-icon-discount" style="color: #ff85c0;"></i> |
|
||||
<div class="app-link-title">标签</div> |
|
||||
</router-link> |
|
||||
</el-card> |
|
||||
</el-col> |
|
||||
<el-col :md="3" :sm="6" :xs="12"> |
|
||||
<el-card shadow="hover" body-style="padding: 0;"> |
|
||||
<router-link to="/user/info" class="app-link-block"> |
|
||||
<i class="app-link-icon el-icon-s-operation" style="color: #ffc069;"></i> |
|
||||
<div class="app-link-title">配置</div> |
|
||||
</router-link> |
|
||||
</el-card> |
|
||||
</el-col> |
|
||||
</el-row> |
|
||||
<!-- 最新动态、我的任务、本月目标 --> |
|
||||
<el-row :gutter="15"> |
|
||||
<el-col :sm="8"> |
|
||||
<el-card |
|
||||
shadow="never" |
|
||||
header="最新动态" |
|
||||
body-style="padding: 0;"> |
|
||||
<el-scrollbar |
|
||||
style="height: 318px;" |
|
||||
wrapStyle="overflow-x: hidden;" |
|
||||
viewStyle="padding: 20px 10px;"> |
|
||||
<el-timeline |
|
||||
:reverse="false" |
|
||||
class="ele-timeline ele-timeline-act"> |
|
||||
<el-timeline-item |
|
||||
v-for="(act, index) in activities" |
|
||||
:key="index" |
|
||||
:timestamp="act.timestamp" |
|
||||
:type="act.primary ? 'primary' : ''"> |
|
||||
{{ act.title }} |
|
||||
</el-timeline-item> |
|
||||
</el-timeline> |
|
||||
</el-scrollbar> |
|
||||
</el-card> |
|
||||
</el-col> |
|
||||
<el-col :sm="8"> |
|
||||
<el-card |
|
||||
class="workplace-table-card" |
|
||||
shadow="never" |
|
||||
header="我的任务" |
|
||||
body-style="padding: 0;"> |
|
||||
<el-table-draggable handle=".sort-handle" :animate="300"> |
|
||||
<el-table :data="taskList" :height="318" class="ele-table-default-head"> |
|
||||
<el-table-column width="38" align="center"> |
|
||||
<i class="sort-handle el-icon-_nav ele-text-placeholder"></i> |
|
||||
</el-table-column> |
|
||||
<el-table-column label="优先级" width="65"> |
|
||||
<template slot-scope="{row}"> |
|
||||
<el-tag |
|
||||
size="mini" |
|
||||
:type="['danger','warning','primary'][row.priority-1]" |
|
||||
class="ele-tag-round"> |
|
||||
{{ row.priority }} |
|
||||
</el-tag> |
|
||||
</template> |
|
||||
</el-table-column> |
|
||||
<el-table-column label="任务名称"> |
|
||||
<template slot-scope="{row}"> |
|
||||
<el-link |
|
||||
type="primary" |
|
||||
:underline="false"> |
|
||||
{{ row.taskName }} |
|
||||
</el-link> |
|
||||
</template> |
|
||||
</el-table-column> |
|
||||
<el-table-column label="状态" width="70" align="center"> |
|
||||
<template slot-scope="{row}"> |
|
||||
<span |
|
||||
:class="['ele-text-warning','ele-text-success','ele-text-info'][row.state]"> |
|
||||
{{ ['未开始', '进行中', '已完成'][row.state] }} |
|
||||
</span> |
|
||||
</template> |
|
||||
</el-table-column> |
|
||||
</el-table> |
|
||||
</el-table-draggable> |
|
||||
</el-card> |
|
||||
</el-col> |
|
||||
<el-col :sm="8"> |
|
||||
<el-card shadow="never" header="本月目标"> |
|
||||
<div class="workplace-goal-group"> |
|
||||
<el-progress |
|
||||
type="dashboard" |
|
||||
:percentage="80" |
|
||||
:width="170" |
|
||||
:format="()=>{return ''}"/> |
|
||||
<div class="workplace-goal-content"> |
|
||||
<el-tag |
|
||||
size="large" |
|
||||
class="ele-tag-round"> |
|
||||
<i class="el-icon-s-data"></i> |
|
||||
</el-tag> |
|
||||
<div class="workplace-goal-num">285</div> |
|
||||
</div> |
|
||||
<div class="workplace-goal-text">恭喜,本月目标已达标!</div> |
|
||||
</div> |
|
||||
</el-card> |
|
||||
</el-col> |
|
||||
<el-col :sm="16"> |
|
||||
<el-card |
|
||||
class="workplace-table-card" |
|
||||
shadow="never" |
|
||||
header="项目进度" |
|
||||
body-style="padding: 12px;"> |
|
||||
<el-table :data="projectList" height="358"> |
|
||||
<el-table-column |
|
||||
type="index" |
|
||||
width="35" |
|
||||
min-width="35" |
|
||||
align="right"/> |
|
||||
<el-table-column |
|
||||
label="项目名称" |
|
||||
min-width="110"> |
|
||||
<template slot-scope="{row}"> |
|
||||
<el-link |
|
||||
type="primary" |
|
||||
:underline="false"> |
|
||||
{{ row.projectName }} |
|
||||
</el-link> |
|
||||
</template> |
|
||||
</el-table-column> |
|
||||
<el-table-column |
|
||||
prop="startDate" |
|
||||
label="开始时间" |
|
||||
width="95" |
|
||||
min-width="80" |
|
||||
align="center"/> |
|
||||
<el-table-column |
|
||||
prop="endDate" |
|
||||
label="结束时间" |
|
||||
width="95" |
|
||||
min-width="80" |
|
||||
align="center"/> |
|
||||
<el-table-column |
|
||||
label="状态" |
|
||||
width="70" |
|
||||
min-width="60" |
|
||||
align="center"> |
|
||||
<template slot-scope="{row}"> |
|
||||
<span |
|
||||
:class="['ele-text-success','ele-text-danger','ele-text-warning','ele-text-info ele-text-delete'][row.state]"> |
|
||||
{{ ['进行中', '已延期', '未开始', '已结束'][row.state] }} |
|
||||
</span> |
|
||||
</template> |
|
||||
</el-table-column> |
|
||||
<el-table-column label="进度" width="160" min-width="100" align="center"> |
|
||||
<template slot-scope="{row}"> |
|
||||
<el-progress :percentage="row.progress" class="ele-text-small"/> |
|
||||
</template> |
|
||||
</el-table-column> |
|
||||
</el-table> |
|
||||
</el-card> |
|
||||
</el-col> |
|
||||
<el-col :sm="8"> |
|
||||
<el-card |
|
||||
shadow="never" |
|
||||
header="小组成员" |
|
||||
body-style="padding: 19px 0;"> |
|
||||
<div |
|
||||
v-for="(item,index) in userList" |
|
||||
:key="index" |
|
||||
class="ele-cell user-list-item"> |
|
||||
<el-avatar :size="42" :src="item.avatar"/> |
|
||||
<div class="ele-cell-content"> |
|
||||
<div class="ele-cell-title">{{ item.name }}</div> |
|
||||
<div class="ele-cell-desc">{{ item.desc }}</div> |
|
||||
</div> |
|
||||
<el-tag |
|
||||
size="mini" |
|
||||
:type="['success','danger'][item.state]"> |
|
||||
{{ ['在线', '离线'][item.state] }} |
|
||||
</el-tag> |
|
||||
</div> |
|
||||
</el-card> |
|
||||
</el-col> |
|
||||
</el-row> |
|
||||
</div> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
export default { |
|
||||
name: 'DashboardWorkplace', |
|
||||
data() { |
|
||||
return { |
|
||||
// 最新动态数据 |
|
||||
activities: [ |
|
||||
{ |
|
||||
title: 'SunSmile 解决了bug 登录提示操作失败', |
|
||||
timestamp: '20:30', |
|
||||
primary: false |
|
||||
}, |
|
||||
{ |
|
||||
title: 'Jasmine 解决了bug 按钮颜色与设计不符', |
|
||||
timestamp: '19:30', |
|
||||
primary: false |
|
||||
}, |
|
||||
{ |
|
||||
title: '项目经理 指派了任务 解决项目一的bug', |
|
||||
timestamp: '18:30', |
|
||||
primary: true |
|
||||
}, |
|
||||
{ |
|
||||
title: '项目经理 指派了任务 解决项目二的bug', |
|
||||
timestamp: '17:30', |
|
||||
primary: true |
|
||||
}, |
|
||||
{ |
|
||||
title: '项目经理 指派了任务 解决项目三的bug', |
|
||||
timestamp: '16:30', |
|
||||
primary: true |
|
||||
}, |
|
||||
{ |
|
||||
title: '项目经理 指派了任务 解决项目四的bug', |
|
||||
timestamp: '15:30', |
|
||||
primary: false |
|
||||
}, |
|
||||
{ |
|
||||
title: '项目经理 指派了任务 解决项目五的bug', |
|
||||
timestamp: '14:30', |
|
||||
primary: false |
|
||||
}, |
|
||||
{ |
|
||||
title: '项目经理 指派了任务 解决项目六的bug', |
|
||||
timestamp: '12:30', |
|
||||
primary: false |
|
||||
}, |
|
||||
{ |
|
||||
title: '项目经理 指派了任务 解决项目七的bug', |
|
||||
timestamp: '11:30', |
|
||||
primary: true |
|
||||
}, |
|
||||
{ |
|
||||
title: '项目经理 指派了任务 解决项目八的bug', |
|
||||
timestamp: '10:30', |
|
||||
primary: false |
|
||||
}, |
|
||||
{ |
|
||||
title: '项目经理 指派了任务 解决项目九的bug', |
|
||||
timestamp: '09:30', |
|
||||
primary: false |
|
||||
}, |
|
||||
{ |
|
||||
title: '项目经理 指派了任务 解决项目十的bug', |
|
||||
timestamp: '08:30', |
|
||||
primary: false |
|
||||
} |
|
||||
], |
|
||||
// 我的任务数据 |
|
||||
taskList: [ |
|
||||
{ |
|
||||
id: 1, |
|
||||
priority: 1, |
|
||||
taskName: '解决项目一的bug', |
|
||||
state: 0 |
|
||||
}, |
|
||||
{ |
|
||||
id: 2, |
|
||||
priority: 2, |
|
||||
taskName: '解决项目二的bug', |
|
||||
state: 0 |
|
||||
}, |
|
||||
{ |
|
||||
id: 3, |
|
||||
priority: 2, |
|
||||
taskName: '解决项目三的bug', |
|
||||
state: 1 |
|
||||
}, |
|
||||
{ |
|
||||
id: 4, |
|
||||
priority: 3, |
|
||||
taskName: '解决项目四的bug', |
|
||||
state: 1 |
|
||||
}, |
|
||||
{ |
|
||||
id: 5, |
|
||||
priority: 3, |
|
||||
taskName: '解决项目五的bug', |
|
||||
state: 2 |
|
||||
}, |
|
||||
{ |
|
||||
id: 6, |
|
||||
priority: 3, |
|
||||
taskName: '解决项目六的bug', |
|
||||
state: 2 |
|
||||
} |
|
||||
], |
|
||||
// 项目进度数据 |
|
||||
projectList: [ |
|
||||
{ |
|
||||
projectName: '项目0000001', |
|
||||
state: 0, |
|
||||
startDate: '2020-03-01', |
|
||||
endDate: '2020-06-01', |
|
||||
progress: 30 |
|
||||
}, |
|
||||
{ |
|
||||
projectName: '项目0000002', |
|
||||
state: 0, |
|
||||
startDate: '2020-03-01', |
|
||||
endDate: '2020-08-01', |
|
||||
progress: 10 |
|
||||
}, |
|
||||
{ |
|
||||
projectName: '项目0000003', |
|
||||
state: 1, |
|
||||
startDate: '2020-01-01', |
|
||||
endDate: '2020-05-01', |
|
||||
progress: 60 |
|
||||
}, |
|
||||
{ |
|
||||
projectName: '项目0000004', |
|
||||
state: 1, |
|
||||
startDate: '2020-06-01', |
|
||||
endDate: '2020-10-01', |
|
||||
progress: 0 |
|
||||
}, |
|
||||
{ |
|
||||
projectName: '项目0000005', |
|
||||
state: 2, startDate: '2020-01-01', |
|
||||
endDate: '2020-03-01', |
|
||||
progress: 100 |
|
||||
}, |
|
||||
{ |
|
||||
projectName: '项目0000006', |
|
||||
state: 3, |
|
||||
startDate: '2020-01-01', |
|
||||
endDate: '2020-03-01', |
|
||||
progress: 100 |
|
||||
}, |
|
||||
{ |
|
||||
projectName: '项目0000007', |
|
||||
state: 3, |
|
||||
startDate: '2020-01-01', |
|
||||
endDate: '2020-03-01', |
|
||||
progress: 100 |
|
||||
} |
|
||||
], |
|
||||
// 小组成员数据 |
|
||||
userList: [ |
|
||||
{ |
|
||||
name: 'SunSmile', |
|
||||
desc: 'UI设计师、交互专家', |
|
||||
state: 0, |
|
||||
avatar: 'https://cdn.eleadmin.com/20200609/c184eef391ae48dba87e3057e70238fb.jpg' |
|
||||
}, |
|
||||
{ |
|
||||
name: '你的名字很好听', |
|
||||
desc: '前端工程师', |
|
||||
state: 0, |
|
||||
avatar: 'https://cdn.eleadmin.com/20200609/b6a811873e704db49db994053a5019b2.jpg' |
|
||||
}, |
|
||||
{ |
|
||||
name: '全村人的希望', |
|
||||
desc: '前端工程师', |
|
||||
state: 0, |
|
||||
avatar: 'https://cdn.eleadmin.com/20200609/948344a2a77c47a7a7b332fe12ff749a.jpg' |
|
||||
}, |
|
||||
{ |
|
||||
name: 'Jasmine', |
|
||||
desc: '产品经理、项目经理', |
|
||||
state: 1, |
|
||||
avatar: 'https://cdn.eleadmin.com/20200609/f6bc05af944a4f738b54128717952107.jpg' |
|
||||
}, |
|
||||
{ |
|
||||
name: '酷酷的大叔', |
|
||||
desc: '组长、后端工程师', |
|
||||
state: 1, |
|
||||
avatar: 'https://cdn.eleadmin.com/20200609/2d98970a51b34b6b859339c96b240dcd.jpg' |
|
||||
} |
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
computed: { |
|
||||
// 当前登录用户信息 |
|
||||
loginUser() { |
|
||||
return this.$store.state.user.user; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style scoped> |
|
||||
/* 顶部用户信息卡片 */ |
|
||||
.workplace-user-card .ele-cell-content { |
|
||||
overflow: hidden; |
|
||||
} |
|
||||
|
|
||||
.workplace-count-group { |
|
||||
white-space: nowrap; |
|
||||
} |
|
||||
|
|
||||
.workplace-count-item { |
|
||||
padding: 0 5px 0 25px; |
|
||||
box-sizing: border-box; |
|
||||
display: inline-block; |
|
||||
text-align: right; |
|
||||
} |
|
||||
|
|
||||
.workplace-count-name { |
|
||||
padding-left: 8px; |
|
||||
} |
|
||||
|
|
||||
.workplace-count-num { |
|
||||
font-size: 24px; |
|
||||
margin-top: 6px; |
|
||||
} |
|
||||
|
|
||||
@media screen and (max-width: 992px) { |
|
||||
.workplace-count-item { |
|
||||
padding: 0 5px 0 10px; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
@media screen and (max-width: 768px) { |
|
||||
.workplace-user-card, |
|
||||
.workplace-count-group { |
|
||||
display: block; |
|
||||
} |
|
||||
|
|
||||
.workplace-count-group { |
|
||||
margin-top: 15px; |
|
||||
text-align: right; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
/* 快捷方式 */ |
|
||||
.app-link-block { |
|
||||
display: block; |
|
||||
color: inherit; |
|
||||
padding: 15px 0; |
|
||||
text-align: center; |
|
||||
text-decoration: none; |
|
||||
cursor: pointer; |
|
||||
} |
|
||||
|
|
||||
.app-link-block .app-link-icon { |
|
||||
color: #69c0ff; |
|
||||
font-size: 30px; |
|
||||
margin-top: 5px; |
|
||||
} |
|
||||
|
|
||||
.app-link-block .app-link-title { |
|
||||
margin-top: 8px; |
|
||||
} |
|
||||
|
|
||||
/* 最新动态时间轴 */ |
|
||||
.ele-timeline-act { |
|
||||
padding-left: 50px; |
|
||||
} |
|
||||
|
|
||||
.ele-timeline-act ::v-deep .el-timeline-item__timestamp { |
|
||||
margin: 0; |
|
||||
position: absolute; |
|
||||
top: 3px; |
|
||||
left: -45px; |
|
||||
} |
|
||||
|
|
||||
.ele-timeline-act ::v-deep .el-timeline-item { |
|
||||
padding-bottom: 19px; |
|
||||
} |
|
||||
|
|
||||
.ele-timeline-act ::v-deep .el-timeline-item:last-child { |
|
||||
padding-bottom: 0; |
|
||||
} |
|
||||
|
|
||||
/* 表格 */ |
|
||||
.workplace-table-card ::v-deep .el-table tbody > .el-table__row:last-child td { |
|
||||
border-bottom: none; |
|
||||
} |
|
||||
|
|
||||
.workplace-table-card ::v-deep .el-table:before { |
|
||||
display: none; |
|
||||
} |
|
||||
|
|
||||
.workplace-table-card .sort-handle { |
|
||||
cursor: move; |
|
||||
font-size: 18px; |
|
||||
vertical-align: middle; |
|
||||
} |
|
||||
|
|
||||
.workplace-table-card ::v-deep .el-table__row.sortable-chosen { |
|
||||
background-color: hsla(0, 0%, 60%, .1); |
|
||||
} |
|
||||
|
|
||||
.workplace-table-card ::v-deep .el-table__row.sortable-chosen td { |
|
||||
background-color: transparent; |
|
||||
} |
|
||||
|
|
||||
/* 本月目标 */ |
|
||||
.workplace-goal-group { |
|
||||
text-align: center; |
|
||||
position: relative; |
|
||||
padding: 48px 0; |
|
||||
} |
|
||||
|
|
||||
.workplace-goal-group .workplace-goal-content { |
|
||||
position: absolute; |
|
||||
top: 90px; |
|
||||
left: 0; |
|
||||
width: 100%; |
|
||||
} |
|
||||
|
|
||||
.workplace-goal-group .workplace-goal-num { |
|
||||
font-size: 40px; |
|
||||
margin-top: 15px; |
|
||||
} |
|
||||
|
|
||||
/* 小组成员 */ |
|
||||
.user-list-item { |
|
||||
padding: 13px 18px; |
|
||||
} |
|
||||
|
|
||||
.user-list-item + .user-list-item { |
|
||||
border-top: 1px solid hsla(0, 0%, 60%, .15); |
|
||||
} |
|
||||
|
|
||||
.user-list-item .ele-cell-desc { |
|
||||
margin-top: 5px; |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,247 +0,0 @@ |
|||||
<template> |
|
||||
<div class="ele-body" style="padding-bottom: 71px;"> |
|
||||
<el-form |
|
||||
ref="trainingForm" |
|
||||
:model="form" |
|
||||
:rules="rules" |
|
||||
label-width="90px"> |
|
||||
<el-card |
|
||||
shadow="never" |
|
||||
header="发布实训活动" |
|
||||
body-style="padding: 22px 22px 3px 22px;"> |
|
||||
<el-row :gutter="15"> |
|
||||
<el-col :sm="8"> |
|
||||
<el-form-item label="实训名称:" prop="title"> |
|
||||
<el-input |
|
||||
v-model="form.title" |
|
||||
placeholder="请输入实训名称" |
|
||||
clearable/> |
|
||||
</el-form-item> |
|
||||
</el-col> |
|
||||
<el-col :sm="8"> |
|
||||
<el-form-item label="起止日期:" prop="datetime"> |
|
||||
<el-date-picker |
|
||||
v-model="form.datetime" |
|
||||
type="daterange" |
|
||||
unlink-panels |
|
||||
range-separator="至" |
|
||||
start-placeholder="开始日期" |
|
||||
end-placeholder="结束日期" |
|
||||
class="ele-fluid"/> |
|
||||
</el-form-item> |
|
||||
</el-col> |
|
||||
<el-col :sm="8"> |
|
||||
<el-form-item label="实训地点:" prop="address"> |
|
||||
<el-select |
|
||||
v-model="form.address" |
|
||||
placeholder="请选择地点" |
|
||||
class="ele-fluid" |
|
||||
clearable> |
|
||||
<el-option label="地点一" :value="1"/> |
|
||||
<el-option label="地点二" :value="2"/> |
|
||||
<el-option label="地点三" :value="3"/> |
|
||||
</el-select> |
|
||||
</el-form-item> |
|
||||
</el-col> |
|
||||
<el-col :sm="24"> |
|
||||
<el-form-item label="实训内容:" prop="content"> |
|
||||
<el-input |
|
||||
v-model="form.content" |
|
||||
placeholder="请输入实训内容" |
|
||||
:rows="4" |
|
||||
type="textarea"/> |
|
||||
</el-form-item> |
|
||||
</el-col> |
|
||||
</el-row> |
|
||||
</el-card> |
|
||||
<el-card shadow="never" header="选择实训班级:"> |
|
||||
<el-row :gutter="15"> |
|
||||
<el-col :sm="12"> |
|
||||
<!-- 未选择的班级数据表格 --> |
|
||||
<ele-pro-table |
|
||||
:datasource="unChooseClass" |
|
||||
:columns="columns" |
|
||||
sub-title="未选班级:" |
|
||||
height="535px" |
|
||||
emptyText="已全部选择" |
|
||||
:toolkit="[]" |
|
||||
layout="total, prev, pager, next, jumper"> |
|
||||
<template slot="toolkit"> |
|
||||
<el-button |
|
||||
@click="addAll" |
|
||||
size="mini" |
|
||||
class="ele-btn-icon">全部添加 |
|
||||
</el-button> |
|
||||
</template> |
|
||||
<template slot="action" slot-scope="{row}"> |
|
||||
<el-button |
|
||||
@click="add(row)" |
|
||||
size="mini">添加 |
|
||||
</el-button> |
|
||||
</template> |
|
||||
</ele-pro-table> |
|
||||
</el-col> |
|
||||
<el-col :sm="12"> |
|
||||
<!-- 已选择的班级数据表格 --> |
|
||||
<ele-pro-table |
|
||||
:datasource="chooseClasses" |
|
||||
:columns="columns" |
|
||||
sub-title="已选班级:" |
|
||||
height="535px" |
|
||||
emptyText="未选择班级" |
|
||||
:toolkit="[]" |
|
||||
layout="total, prev, pager, next, jumper"> |
|
||||
<template slot="toolkit"> |
|
||||
<el-button |
|
||||
@click="removeAll" |
|
||||
size="mini" |
|
||||
type="danger" |
|
||||
plain |
|
||||
class="ele-btn-icon">全部移除 |
|
||||
</el-button> |
|
||||
</template> |
|
||||
<template slot="action" slot-scope="{row}"> |
|
||||
<el-button |
|
||||
@click="remove(row)" |
|
||||
type="danger" |
|
||||
plain |
|
||||
size="mini">移除 |
|
||||
</el-button> |
|
||||
</template> |
|
||||
</ele-pro-table> |
|
||||
</el-col> |
|
||||
</el-row> |
|
||||
</el-card> |
|
||||
<!-- 底部工具栏 --> |
|
||||
<div class="ele-bottom-tool"> |
|
||||
<div class="ele-bottom-tool-actions"> |
|
||||
<el-button type="primary" @click="submit" :loading="loading">发布</el-button> |
|
||||
</div> |
|
||||
</div> |
|
||||
</el-form> |
|
||||
</div> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
export default { |
|
||||
name: 'ExampleChoose', |
|
||||
data() { |
|
||||
return { |
|
||||
// 加载状态 |
|
||||
loading: false, |
|
||||
// 表单数据 |
|
||||
form: {}, |
|
||||
// 表单验证规则 |
|
||||
rules: { |
|
||||
title: [ |
|
||||
{required: true, message: '请输入实训名称', trigger: 'blur'} |
|
||||
], |
|
||||
datetime: [ |
|
||||
{required: true, message: '请选择起止日期', trigger: 'blur'} |
|
||||
], |
|
||||
content: [ |
|
||||
{required: true, message: '请输入实训内容', trigger: 'blur'} |
|
||||
], |
|
||||
address: [ |
|
||||
{required: true, message: '请选择实训地点', trigger: 'blur'} |
|
||||
] |
|
||||
}, |
|
||||
// 全部实训班级 |
|
||||
classes: [], |
|
||||
// 已选择的班级数据 |
|
||||
chooseClasses: [], |
|
||||
columns: [ |
|
||||
{ |
|
||||
columnKey: 'action', |
|
||||
label: '操作', |
|
||||
width: 100, |
|
||||
align: 'center', |
|
||||
slot: 'action' |
|
||||
}, |
|
||||
{ |
|
||||
prop: 'classesName', |
|
||||
label: '班级名称', |
|
||||
showOverflowTooltip: true, |
|
||||
minWidth: 110, |
|
||||
sortable: 'custom' |
|
||||
}, |
|
||||
{ |
|
||||
prop: 'major', |
|
||||
label: '专业', |
|
||||
showOverflowTooltip: true, |
|
||||
minWidth: 110, |
|
||||
sortable: 'custom' |
|
||||
}, |
|
||||
{ |
|
||||
prop: 'college', |
|
||||
label: '学院', |
|
||||
showOverflowTooltip: true, |
|
||||
minWidth: 110, |
|
||||
sortable: 'custom' |
|
||||
} |
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
computed: { |
|
||||
/* 未选择的班级数据 */ |
|
||||
unChooseClass() { |
|
||||
return this.classes.filter(d => this.chooseClasses.indexOf(d) === -1); |
|
||||
} |
|
||||
}, |
|
||||
mounted() { |
|
||||
this.query(); |
|
||||
}, |
|
||||
methods: { |
|
||||
/* 获取全部实训班级 */ |
|
||||
query() { |
|
||||
this.$http.get('https://cdn.eleadmin.com/20200610/classes.json').then(res => { |
|
||||
if (res.data.code === 0) { |
|
||||
this.classes = res.data.data; |
|
||||
} else { |
|
||||
this.$message.error(res.data.msg); |
|
||||
} |
|
||||
}).catch(e => { |
|
||||
this.$message.error(e.message); |
|
||||
}); |
|
||||
}, |
|
||||
/* 提交 */ |
|
||||
submit() { |
|
||||
this.$refs['trainingForm'].validate((valid) => { |
|
||||
if (valid) { |
|
||||
if (!this.chooseClasses.length) { |
|
||||
return this.$message.error('请选择实训班级'); |
|
||||
} |
|
||||
this.loading = true; |
|
||||
setTimeout(() => { |
|
||||
this.loading = false; |
|
||||
this.$message({type: 'success', message: '发布成功'}); |
|
||||
}, 1500); |
|
||||
} else { |
|
||||
return false; |
|
||||
} |
|
||||
}); |
|
||||
}, |
|
||||
/* 添加 */ |
|
||||
add(row) { |
|
||||
this.chooseClasses.push(row); |
|
||||
}, |
|
||||
/* 移除 */ |
|
||||
remove(row) { |
|
||||
this.chooseClasses.splice(this.chooseClasses.indexOf(row), 1); |
|
||||
}, |
|
||||
/* 添加全部 */ |
|
||||
addAll() { |
|
||||
this.unChooseClass.forEach(d => { |
|
||||
this.chooseClasses.push(d); |
|
||||
}) |
|
||||
}, |
|
||||
/* 移除所有 */ |
|
||||
removeAll() { |
|
||||
this.chooseClasses.splice(0, this.chooseClasses.length); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style scoped> |
|
||||
</style> |
|
||||
@ -1,310 +0,0 @@ |
|||||
<template> |
|
||||
<el-dialog |
|
||||
title="卷内文件调整" |
|
||||
width="980px" |
|
||||
top="5vh" |
|
||||
@opened="onOpened" |
|
||||
@closed="onClosed" |
|
||||
:visible="visible" |
|
||||
@update:visible="updateVisible" |
|
||||
custom-class="demo-file-sort-dialog" |
|
||||
:lock-scroll="false"> |
|
||||
<el-row :gutter="15"> |
|
||||
<el-col :md="8"> |
|
||||
<ele-pro-table |
|
||||
ref="docTable" |
|
||||
sub-title="案卷列表" |
|
||||
:datasource="documents" |
|
||||
:columns="columns1" |
|
||||
highlight-current-row |
|
||||
height="400px" |
|
||||
:toolkit="[]" |
|
||||
:need-page="false" |
|
||||
:current.sync="current" |
|
||||
class="demo-file-sort-table"> |
|
||||
</ele-pro-table> |
|
||||
</el-col> |
|
||||
<el-col :md="8"> |
|
||||
<ele-pro-table |
|
||||
ref="fileTable" |
|
||||
:loading="loading" |
|
||||
sub-title="卷内列表" |
|
||||
:datasource="data1" |
|
||||
:columns="columns2" |
|
||||
height="400px" |
|
||||
:selection.sync="selection1" |
|
||||
:need-page="false" |
|
||||
:toolkit="[]"> |
|
||||
<template slot="toolkit"> |
|
||||
<el-button |
|
||||
@click="moveUp" |
|
||||
type="primary" |
|
||||
icon="el-icon-top" |
|
||||
class="ele-btn-icon" |
|
||||
size="mini">上移 |
|
||||
</el-button> |
|
||||
<el-button |
|
||||
@click="moveDown" |
|
||||
type="primary" |
|
||||
icon="el-icon-bottom" |
|
||||
class="ele-btn-icon" |
|
||||
size="mini">下移 |
|
||||
</el-button> |
|
||||
<el-button |
|
||||
@click="moveOut" |
|
||||
type="primary" |
|
||||
icon="el-icon-top-right" |
|
||||
class="ele-btn-icon" |
|
||||
size="mini">调出 |
|
||||
</el-button> |
|
||||
</template> |
|
||||
</ele-pro-table> |
|
||||
</el-col> |
|
||||
<el-col :md="8"> |
|
||||
<ele-pro-table |
|
||||
:loading="loading" |
|
||||
sub-title="未归档列表" |
|
||||
:datasource="data2" |
|
||||
:columns="columns2" |
|
||||
height="400px" |
|
||||
:selection.sync="selection2" |
|
||||
:need-page="false" |
|
||||
:toolkit="[]"> |
|
||||
<template slot="toolkit"> |
|
||||
<el-button |
|
||||
@click="moveIn" |
|
||||
type="primary" |
|
||||
icon="el-icon-top-left" |
|
||||
class="ele-btn-icon" |
|
||||
size="mini">调入 |
|
||||
</el-button> |
|
||||
</template> |
|
||||
</ele-pro-table> |
|
||||
</el-col> |
|
||||
</el-row> |
|
||||
<div slot="footer"> |
|
||||
<el-button @click="close">取消</el-button> |
|
||||
<el-button type="primary" @click="save">保存</el-button> |
|
||||
</div> |
|
||||
</el-dialog> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
export default { |
|
||||
name: 'FileSort', |
|
||||
props: { |
|
||||
// 弹窗是否打开 |
|
||||
visible: Boolean, |
|
||||
// 案卷列表 |
|
||||
documents: { |
|
||||
type: Array, |
|
||||
required: true |
|
||||
} |
|
||||
}, |
|
||||
data() { |
|
||||
return { |
|
||||
// 案卷表格列配置 |
|
||||
columns1: [ |
|
||||
{ |
|
||||
prop: 'title', |
|
||||
label: '案卷题名', |
|
||||
showOverflowTooltip: true |
|
||||
}, |
|
||||
{ |
|
||||
prop: 'piece_no', |
|
||||
label: '案卷档号', |
|
||||
showOverflowTooltip: true |
|
||||
} |
|
||||
], |
|
||||
// 卷内表格列配置 |
|
||||
columns2: [ |
|
||||
{ |
|
||||
columnKey: 'selection', |
|
||||
type: 'selection', |
|
||||
width: 45, |
|
||||
align: 'center' |
|
||||
}, |
|
||||
{ |
|
||||
prop: 'title', |
|
||||
label: '文件题名', |
|
||||
showOverflowTooltip: true |
|
||||
}, |
|
||||
{ |
|
||||
prop: 'archive_no', |
|
||||
label: '文件档号', |
|
||||
showOverflowTooltip: true |
|
||||
} |
|
||||
], |
|
||||
// 案卷下的全部文件列表 |
|
||||
data: [], |
|
||||
// 选中案卷 |
|
||||
current: null, |
|
||||
// 加载loading |
|
||||
loading: true, |
|
||||
// 卷内列表选中数据 |
|
||||
selection1: [], |
|
||||
// 未归档列表选中数据 |
|
||||
selection2: [] |
|
||||
} |
|
||||
}, |
|
||||
computed: { |
|
||||
// 选中案卷的卷内文件 |
|
||||
data1() { |
|
||||
if (!this.current) { |
|
||||
return []; |
|
||||
} |
|
||||
return this.data.filter(d => d.piece_no === this.current.piece_no); |
|
||||
}, |
|
||||
// 未归档的卷内文件 |
|
||||
data2() { |
|
||||
return this.data.filter(d => !d.piece_no); |
|
||||
} |
|
||||
}, |
|
||||
methods: { |
|
||||
/* 弹窗被打开 */ |
|
||||
onOpened() { |
|
||||
this.query(); |
|
||||
if (this.documents.length) { |
|
||||
this.$refs.docTable.setCurrentRow(this.documents[0]); |
|
||||
} |
|
||||
}, |
|
||||
/* 弹窗被关闭 */ |
|
||||
onClosed() { |
|
||||
this.data = []; |
|
||||
}, |
|
||||
/* 查询所选案卷的卷内文件 */ |
|
||||
query() { |
|
||||
this.loading = true; |
|
||||
this.$http.get('https://cdn.eleadmin.com/20200610/archive.json').then(res => { |
|
||||
this.loading = false; |
|
||||
if (res.data.code === 0) { |
|
||||
this.data = res.data.data; |
|
||||
} else { |
|
||||
this.$message.error(res.data.msg); |
|
||||
} |
|
||||
}).catch(e => { |
|
||||
this.loading = false; |
|
||||
this.$message.error(e.message); |
|
||||
}); |
|
||||
}, |
|
||||
/* 上移 */ |
|
||||
moveUp() { |
|
||||
if (!this.selection1.length) { |
|
||||
return this.$message.error('请选择一条数据'); |
|
||||
} |
|
||||
if (this.selection1.length > 1) { |
|
||||
return this.$message.error('只能选择一条数据'); |
|
||||
} |
|
||||
if (this.data1.indexOf(this.selection1[0]) === 0) { |
|
||||
return; |
|
||||
} |
|
||||
let index = this.data.indexOf(this.selection1[0]); |
|
||||
let old = this.data[index - 1]; |
|
||||
this.$set(this.data, index - 1, this.selection1[0]); |
|
||||
this.$set(this.data, index, old); |
|
||||
this.$nextTick(() => { |
|
||||
this.$refs.fileTable.toggleRowSelection(this.data[index - 1]); |
|
||||
}); |
|
||||
}, |
|
||||
/* 下移 */ |
|
||||
moveDown() { |
|
||||
if (!this.selection1.length) { |
|
||||
return this.$message.error('请选择一条数据'); |
|
||||
} |
|
||||
if (this.selection1.length > 1) { |
|
||||
return this.$message.error('只能选择一条数据'); |
|
||||
} |
|
||||
if (this.data1.indexOf(this.selection1[0]) === this.data1.length - 1) { |
|
||||
return; |
|
||||
} |
|
||||
let index = this.data.indexOf(this.selection1[0]); |
|
||||
let old = this.data[index + 1]; |
|
||||
this.$set(this.data, index + 1, this.selection1[0]); |
|
||||
this.$set(this.data, index, old); |
|
||||
this.$nextTick(() => { |
|
||||
this.$refs.fileTable.toggleRowSelection(this.data[index + 1]); |
|
||||
}); |
|
||||
}, |
|
||||
/* 调出 */ |
|
||||
moveOut() { |
|
||||
if (!this.selection1.length) { |
|
||||
return this.$message.error('请至少选择一条数据'); |
|
||||
} |
|
||||
this.selection1.forEach(d => { |
|
||||
d.piece_no = ''; |
|
||||
}); |
|
||||
}, |
|
||||
/* 调入 */ |
|
||||
moveIn() { |
|
||||
if (!this.current) return; |
|
||||
if (!this.selection2.length) { |
|
||||
return this.$message.error('请至少选择一条数据'); |
|
||||
} |
|
||||
this.selection2.forEach(d => { |
|
||||
d.piece_no = this.current.piece_no; |
|
||||
}); |
|
||||
}, |
|
||||
/* 保存 */ |
|
||||
save() { |
|
||||
let result = this.data.map(d => { |
|
||||
return { |
|
||||
archive_no: d.archive_no, |
|
||||
piece_no: d.piece_no |
|
||||
}; |
|
||||
}); |
|
||||
console.log(result); |
|
||||
this.updateVisible(false); |
|
||||
}, |
|
||||
/* 关闭弹窗 */ |
|
||||
close() { |
|
||||
this.updateVisible(false); |
|
||||
}, |
|
||||
/* 更新visible */ |
|
||||
updateVisible(value) { |
|
||||
this.$emit('update:visible', value); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style> |
|
||||
.demo-file-sort-dialog { |
|
||||
margin-bottom: 5vh; |
|
||||
} |
|
||||
|
|
||||
.demo-file-sort-dialog .el-dialog__body { |
|
||||
padding-top: 15px; |
|
||||
padding-bottom: 0; |
|
||||
} |
|
||||
|
|
||||
.demo-file-sort-dialog .el-dialog__body > .el-row > .el-col { |
|
||||
margin-bottom: 15px; |
|
||||
} |
|
||||
|
|
||||
.demo-file-sort-table .el-table__row { |
|
||||
cursor: pointer; |
|
||||
} |
|
||||
|
|
||||
.demo-file-sort-table .el-table__row > td:last-child:after { |
|
||||
content: "\e6e0"; |
|
||||
font-family: element-icons !important; |
|
||||
font-style: normal; |
|
||||
font-variant: normal; |
|
||||
text-transform: none; |
|
||||
-webkit-font-smoothing: antialiased; |
|
||||
-moz-osx-font-smoothing: grayscale; |
|
||||
line-height: 1; |
|
||||
position: absolute; |
|
||||
right: 10px; |
|
||||
top: 50%; |
|
||||
margin-top: -7px; |
|
||||
} |
|
||||
|
|
||||
.demo-file-sort-table .el-table__row > td:last-child .cell { |
|
||||
padding-right: 20px; |
|
||||
} |
|
||||
|
|
||||
.demo-file-sort-table .ele-table-tool-title { |
|
||||
line-height: 28px; |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,125 +0,0 @@ |
|||||
<template> |
|
||||
<div class="ele-body"> |
|
||||
<el-card shadow="never"> |
|
||||
<ele-pro-table |
|
||||
ref="table" |
|
||||
:datasource="url" |
|
||||
:columns="columns" |
|
||||
:selection.sync="selection" |
|
||||
title="案卷列表"> |
|
||||
<template slot="toolkit"> |
|
||||
<el-button |
|
||||
@click="openFileSortDialog" |
|
||||
size="small" |
|
||||
type="primary" |
|
||||
icon="el-icon-sort" |
|
||||
class="ele-btn-icon">卷内文件调整 |
|
||||
</el-button> |
|
||||
</template> |
|
||||
</ele-pro-table> |
|
||||
</el-card> |
|
||||
<!-- 卷内文件调整弹窗 --> |
|
||||
<file-sort |
|
||||
:visible.sync="showFileSort" |
|
||||
:documents="fileSortChoose"/> |
|
||||
</div> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
import FileSort from './file-sort' |
|
||||
|
|
||||
export default { |
|
||||
name: 'ExampleDocument', |
|
||||
components: {FileSort}, |
|
||||
data() { |
|
||||
return { |
|
||||
// 列表接口地址 |
|
||||
url: 'https://cdn.eleadmin.com/20200610/document.json', |
|
||||
// 表格列配置 |
|
||||
columns: [ |
|
||||
{ |
|
||||
columnKey: 'selection', |
|
||||
type: 'selection', |
|
||||
width: 45, |
|
||||
align: 'center', |
|
||||
fixed: 'left' |
|
||||
}, |
|
||||
{ |
|
||||
columnKey: 'index', |
|
||||
type: 'index', |
|
||||
width: 45, |
|
||||
align: 'center', |
|
||||
fixed: 'left' |
|
||||
}, |
|
||||
{ |
|
||||
prop: 'piece_no', |
|
||||
label: '案卷档号', |
|
||||
width: 215, |
|
||||
minWidth: 110, |
|
||||
showOverflowTooltip: true |
|
||||
}, |
|
||||
{ |
|
||||
prop: 'title', |
|
||||
label: '案卷题名', |
|
||||
minWidth: 110, |
|
||||
showOverflowTooltip: true |
|
||||
}, |
|
||||
{ |
|
||||
prop: 'year', |
|
||||
label: '年度', |
|
||||
minWidth: 110, |
|
||||
showOverflowTooltip: true |
|
||||
}, |
|
||||
{ |
|
||||
prop: 'retention', |
|
||||
label: '保管期限', |
|
||||
minWidth: 110, |
|
||||
showOverflowTooltip: true |
|
||||
}, |
|
||||
{ |
|
||||
prop: 'secret', |
|
||||
label: '密级', |
|
||||
minWidth: 110, |
|
||||
showOverflowTooltip: true |
|
||||
}, |
|
||||
{ |
|
||||
prop: 'type', |
|
||||
label: '档案类别', |
|
||||
minWidth: 110, |
|
||||
showOverflowTooltip: true |
|
||||
}, |
|
||||
{ |
|
||||
prop: 'carrier', |
|
||||
label: '载体规格', |
|
||||
minWidth: 110, |
|
||||
showOverflowTooltip: true |
|
||||
} |
|
||||
], |
|
||||
// 是否显示卷内文件调整弹窗 |
|
||||
showFileSort: false, |
|
||||
// 列表选中数据 |
|
||||
selection: [], |
|
||||
// 选中的案卷 |
|
||||
fileSortChoose: [] |
|
||||
} |
|
||||
}, |
|
||||
methods: { |
|
||||
/* 打开卷内文件调整弹窗 */ |
|
||||
openFileSortDialog() { |
|
||||
if (this.selection.length < 2) { |
|
||||
return this.$message.error('请至少选择两条数据'); |
|
||||
} |
|
||||
// 实际项目用这一行 |
|
||||
/*this.fileSortChoose = this.selection.map(d => { |
|
||||
return Object.assign({}, d); |
|
||||
});*/ |
|
||||
// 演示强制选前三个演示 |
|
||||
this.fileSortChoose = this.$refs.table.data.slice(0, 3); |
|
||||
this.showFileSort = true; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style scoped> |
|
||||
</style> |
|
||||
@ -1,31 +0,0 @@ |
|||||
<template> |
|
||||
<div :class="classes"> |
|
||||
<div class="ele-exception-img"> |
|
||||
<img src="@/assets/ic-403.svg" alt=""> |
|
||||
</div> |
|
||||
<div class="ele-exception-content ele-text-left"> |
|
||||
<h1 class="ele-text">403</h1> |
|
||||
<p class="ele-text-secondary">抱歉,你无权访问该页面</p> |
|
||||
<div> |
|
||||
<el-button |
|
||||
type="primary" |
|
||||
@click="$router.push('/')">返回首页 |
|
||||
</el-button> |
|
||||
</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
export default { |
|
||||
name: 'Exception403', |
|
||||
computed: { |
|
||||
classes() { |
|
||||
return [ |
|
||||
'ele-exception ele-text-center', |
|
||||
{'ele-exception-dark': this.$store.state.theme.darkMode} |
|
||||
]; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
@ -1,31 +0,0 @@ |
|||||
<template> |
|
||||
<div :class="classes"> |
|
||||
<div class="ele-exception-img"> |
|
||||
<img src="@/assets/ic-404.svg" alt="" style="max-width: 320px;"> |
|
||||
</div> |
|
||||
<div class="ele-exception-content ele-text-left"> |
|
||||
<h1 class="ele-text">404</h1> |
|
||||
<p class="ele-text-secondary">抱歉,你访问的页面不存在</p> |
|
||||
<div> |
|
||||
<el-button |
|
||||
type="primary" |
|
||||
@click="$router.push('/')">返回首页 |
|
||||
</el-button> |
|
||||
</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
export default { |
|
||||
name: 'Exception404', |
|
||||
computed: { |
|
||||
classes() { |
|
||||
return [ |
|
||||
'ele-exception ele-text-center', |
|
||||
{'ele-exception-dark': this.$store.state.theme.darkMode} |
|
||||
]; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
@ -1,31 +0,0 @@ |
|||||
<template> |
|
||||
<div :class="classes"> |
|
||||
<div class="ele-exception-img"> |
|
||||
<img src="@/assets/ic-500.svg" alt=""> |
|
||||
</div> |
|
||||
<div class="ele-exception-content ele-text-left"> |
|
||||
<h1 class="ele-text">500</h1> |
|
||||
<p class="ele-text-secondary">抱歉,服务器出错了</p> |
|
||||
<div> |
|
||||
<el-button |
|
||||
type="primary" |
|
||||
@click="$router.push('/')">返回首页 |
|
||||
</el-button> |
|
||||
</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
export default { |
|
||||
name: 'Exception500', |
|
||||
computed: { |
|
||||
classes() { |
|
||||
return [ |
|
||||
'ele-exception ele-text-center', |
|
||||
{'ele-exception-dark': this.$store.state.theme.darkMode} |
|
||||
]; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
@ -1,212 +0,0 @@ |
|||||
<template> |
|
||||
<div class="ele-body ele-body-card"> |
|
||||
<el-row :gutter="15"> |
|
||||
<el-col :md="8"> |
|
||||
<el-card shadow="never" header="列表拖拽排序"> |
|
||||
<div class="demo-drag-list"> |
|
||||
<draggable |
|
||||
v-model="list" |
|
||||
handle=".sort-handle" |
|
||||
animation="300"> |
|
||||
<div class="demo-drag-list-item ele-cell" |
|
||||
v-for="item in list" |
|
||||
:key="item.id"> |
|
||||
<div class="ele-cell-content">{{ item.name }}</div> |
|
||||
<i class="sort-handle el-icon-_nav ele-text-secondary"></i> |
|
||||
</div> |
|
||||
</draggable> |
|
||||
</div> |
|
||||
</el-card> |
|
||||
</el-col> |
|
||||
<el-col :md="16"> |
|
||||
<el-card shadow="never" header="列表相互拖拽"> |
|
||||
<el-row :gutter="15"> |
|
||||
<el-col :span="12"> |
|
||||
<div class="demo-drag-list"> |
|
||||
<draggable |
|
||||
v-model="list1" |
|
||||
handle=".sort-handle" |
|
||||
group="project1" |
|
||||
animation="300"> |
|
||||
<div class="demo-drag-list-item ele-cell" |
|
||||
v-for="item in list1" |
|
||||
:key="item.id"> |
|
||||
<div class="ele-cell-content">{{ item.name }}</div> |
|
||||
<i class="sort-handle el-icon-_nav ele-text-secondary"></i> |
|
||||
</div> |
|
||||
</draggable> |
|
||||
</div> |
|
||||
</el-col> |
|
||||
<el-col :span="12"> |
|
||||
<div class="demo-drag-list"> |
|
||||
<draggable |
|
||||
v-model="list2" |
|
||||
handle=".sort-handle" |
|
||||
group="project1" |
|
||||
animation="300"> |
|
||||
<div class="demo-drag-list-item ele-cell" |
|
||||
v-for="item in list2" |
|
||||
:key="item.id"> |
|
||||
<div class="ele-cell-content">{{ item.name }}</div> |
|
||||
<i class="sort-handle el-icon-_nav ele-text-secondary"></i> |
|
||||
</div> |
|
||||
</draggable> |
|
||||
</div> |
|
||||
</el-col> |
|
||||
</el-row> |
|
||||
</el-card> |
|
||||
</el-col> |
|
||||
</el-row> |
|
||||
<el-row :gutter="15"> |
|
||||
<el-col :md="8"> |
|
||||
<el-card shadow="never" header="宫格拖拽排序"> |
|
||||
<div class="demo-drag-grid"> |
|
||||
<draggable |
|
||||
v-model="grid" |
|
||||
animation="300"> |
|
||||
<div |
|
||||
class="demo-drag-grid-item" |
|
||||
v-for="item in grid" |
|
||||
:key="item.id"> |
|
||||
{{ item.name }} |
|
||||
</div> |
|
||||
</draggable> |
|
||||
</div> |
|
||||
</el-card> |
|
||||
</el-col> |
|
||||
<el-col :md="16"> |
|
||||
<el-card shadow="never" header="宫格相互拖拽"> |
|
||||
<el-row :gutter="15"> |
|
||||
<el-col :span="12"> |
|
||||
<div class="demo-drag-grid"> |
|
||||
<draggable |
|
||||
v-model="grid1" |
|
||||
group="project2" |
|
||||
animation="300"> |
|
||||
<div |
|
||||
class="demo-drag-grid-item" |
|
||||
v-for="item in grid1" |
|
||||
:key="item.id"> |
|
||||
{{ item.name }} |
|
||||
</div> |
|
||||
</draggable> |
|
||||
</div> |
|
||||
</el-col> |
|
||||
<el-col :span="12"> |
|
||||
<div class="demo-drag-grid"> |
|
||||
<draggable |
|
||||
v-model="grid2" |
|
||||
group="project2" |
|
||||
animation="300"> |
|
||||
<div |
|
||||
class="demo-drag-grid-item" |
|
||||
v-for="item in grid2" |
|
||||
:key="item.id"> |
|
||||
{{ item.name }} |
|
||||
</div> |
|
||||
</draggable> |
|
||||
</div> |
|
||||
</el-col> |
|
||||
</el-row> |
|
||||
</el-card> |
|
||||
</el-col> |
|
||||
</el-row> |
|
||||
</div> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
import draggable from 'vuedraggable'; |
|
||||
|
|
||||
export default { |
|
||||
name: 'ExtensionDragSort', |
|
||||
components: {draggable}, |
|
||||
data() { |
|
||||
return { |
|
||||
list: [ |
|
||||
{id: 1, name: '项目0000001'}, |
|
||||
{id: 2, name: '项目0000002'}, |
|
||||
{id: 3, name: '项目0000003'}, |
|
||||
{id: 4, name: '项目0000004'}, |
|
||||
{id: 5, name: '项目0000005'} |
|
||||
], |
|
||||
list1: [ |
|
||||
{id: 1, name: '项目0000001'}, |
|
||||
{id: 2, name: '项目0000002'}, |
|
||||
{id: 3, name: '项目0000003'}, |
|
||||
{id: 4, name: '项目0000004'}, |
|
||||
{id: 5, name: '项目0000005'} |
|
||||
], |
|
||||
list2: [ |
|
||||
{id: 6, name: '项目0000006'}, |
|
||||
{id: 7, name: '项目0000007'}, |
|
||||
{id: 8, name: '项目0000008'}, |
|
||||
{id: 9, name: '项目0000009'}, |
|
||||
{id: 10, name: '项目0000010'} |
|
||||
], |
|
||||
grid: [ |
|
||||
{id: 1, name: '项目0000001'}, |
|
||||
{id: 2, name: '项目0000002'}, |
|
||||
{id: 3, name: '项目0000003'}, |
|
||||
{id: 4, name: '项目0000004'}, |
|
||||
{id: 5, name: '项目0000005'} |
|
||||
], |
|
||||
grid1: [ |
|
||||
{id: 1, name: '项目0000001'}, |
|
||||
{id: 2, name: '项目0000002'}, |
|
||||
{id: 3, name: '项目0000003'}, |
|
||||
{id: 4, name: '项目0000004'}, |
|
||||
{id: 5, name: '项目0000005'} |
|
||||
], |
|
||||
grid2: [ |
|
||||
{id: 6, name: '项目0000006'}, |
|
||||
{id: 7, name: '项目0000007'}, |
|
||||
{id: 8, name: '项目0000008'}, |
|
||||
{id: 9, name: '项目0000009'}, |
|
||||
{id: 10, name: '项目0000010'} |
|
||||
] |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style scoped> |
|
||||
/* 列表样式 */ |
|
||||
.demo-drag-list { |
|
||||
border: 1px solid hsla(0, 0%, 60%, .2); |
|
||||
} |
|
||||
|
|
||||
.demo-drag-list-item { |
|
||||
padding: 10px 15px; |
|
||||
} |
|
||||
|
|
||||
.demo-drag-list-item + .demo-drag-list-item { |
|
||||
border-top: 1px solid hsla(0, 0%, 60%, .2); |
|
||||
} |
|
||||
|
|
||||
.demo-drag-list-item.sortable-chosen { |
|
||||
background-color: hsla(0, 0%, 60%, .1); |
|
||||
} |
|
||||
|
|
||||
.demo-drag-list-item .sort-handle { |
|
||||
cursor: move; |
|
||||
font-size: 16px; |
|
||||
} |
|
||||
|
|
||||
/* 宫格样式 */ |
|
||||
.demo-drag-grid { |
|
||||
border: 1px solid hsla(0, 0%, 60%, .2); |
|
||||
padding: 15px 0 0 15px; |
|
||||
} |
|
||||
|
|
||||
.demo-drag-grid-item { |
|
||||
padding: 15px; |
|
||||
margin: 0 15px 15px 0; |
|
||||
display: inline-block; |
|
||||
border: 1px solid hsla(0, 0%, 60%, .2); |
|
||||
cursor: move; |
|
||||
} |
|
||||
|
|
||||
.demo-drag-grid-item.sortable-chosen { |
|
||||
background-color: hsla(0, 0%, 60%, .1); |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,115 +0,0 @@ |
|||||
<template> |
|
||||
<div class="ele-body"> |
|
||||
<el-card shadow="never"> |
|
||||
<!-- 操作按钮 --> |
|
||||
<div class="ele-table-tool"> |
|
||||
<el-button |
|
||||
@click="showViewContent=true" |
|
||||
size="small">获取html |
|
||||
</el-button> |
|
||||
<el-button |
|
||||
@click="showViewText=true" |
|
||||
size="small">获取文本 |
|
||||
</el-button> |
|
||||
<el-button |
|
||||
@click="editContent" |
|
||||
size="small">修改内容 |
|
||||
</el-button> |
|
||||
<el-button |
|
||||
@click="showDialog=true" |
|
||||
size="small">弹窗打开 |
|
||||
</el-button> |
|
||||
</div> |
|
||||
<!-- 编辑器 --> |
|
||||
<tinymce-editor |
|
||||
v-model="value1" |
|
||||
:init="option1"/> |
|
||||
</el-card> |
|
||||
<!-- 内容弹窗 --> |
|
||||
<el-dialog |
|
||||
title="编辑器内容" |
|
||||
:visible.sync="showViewContent" |
|
||||
width="400px"> |
|
||||
<div>{{ value1 }}</div> |
|
||||
</el-dialog> |
|
||||
<!-- 纯文本弹窗 --> |
|
||||
<el-dialog |
|
||||
title="编辑器纯文本" |
|
||||
:visible.sync="showViewText" |
|
||||
width="400px"> |
|
||||
<div>{{ value1 | htmlToText }}</div> |
|
||||
</el-dialog> |
|
||||
<!-- 编辑器弹窗 --> |
|
||||
<el-dialog |
|
||||
title="弹窗中使用" |
|
||||
:visible.sync="showDialog" |
|
||||
width="671px"> |
|
||||
<tinymce-editor |
|
||||
v-model="value2" |
|
||||
:init="option2"/> |
|
||||
</el-dialog> |
|
||||
</div> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
import TinymceEditor from '@/components/TinymceEditor'; |
|
||||
|
|
||||
export default { |
|
||||
name: 'ExtensionEditor', |
|
||||
components: {TinymceEditor}, |
|
||||
data() { |
|
||||
// 自定义文件上传(这里使用把选择的文件转成blob演示) |
|
||||
let file_picker_callback = (callback, value, meta) => { |
|
||||
let input = document.createElement('input'); |
|
||||
input.setAttribute('type', 'file'); |
|
||||
// 设定文件可选类型 |
|
||||
if (meta.filetype === 'image') { |
|
||||
input.setAttribute('accept', 'image/*'); |
|
||||
} else if (meta.filetype === 'media') { |
|
||||
input.setAttribute('accept', 'video/*'); |
|
||||
} |
|
||||
input.onchange = () => { |
|
||||
let file = input.files[0]; |
|
||||
let reader = new FileReader(); |
|
||||
reader.onload = (e) => { |
|
||||
let blob = new Blob([e.target.result], {type: file.type}); |
|
||||
callback(URL.createObjectURL(blob)); |
|
||||
}; |
|
||||
reader.readAsArrayBuffer(file); |
|
||||
} |
|
||||
input.click(); |
|
||||
}; |
|
||||
return { |
|
||||
option1: { |
|
||||
height: 520, |
|
||||
file_picker_callback: file_picker_callback |
|
||||
}, |
|
||||
option2: { |
|
||||
height: 380, |
|
||||
menubar: false, |
|
||||
file_picker_callback: file_picker_callback |
|
||||
}, |
|
||||
value1: '', |
|
||||
value2: '', |
|
||||
showViewContent: false, |
|
||||
showViewText: false, |
|
||||
showDialog: false |
|
||||
|
|
||||
} |
|
||||
}, |
|
||||
methods: { |
|
||||
/* 修改编辑器内容 */ |
|
||||
editContent() { |
|
||||
this.value1 = [ |
|
||||
'<div style="text-align: center;color: #fff;background-image: linear-gradient(to right,#009688,#5fb878);padding: 20px;">', |
|
||||
' <div style="font-size: 28px;margin-bottom: 10px;">EASY WEB 后台管理模板</div>', |
|
||||
' <div style="font-size: 18px">基于Layui的一套通用型后台管理模板,拥有众多原创组件及模板页面</div>', |
|
||||
'</div><br/>' |
|
||||
].join(''); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style scoped> |
|
||||
</style> |
|
||||
@ -1,422 +0,0 @@ |
|||||
<template> |
|
||||
<div class="ele-body"> |
|
||||
<el-card shadow="never" header="导出excel"> |
|
||||
<ele-pro-table |
|
||||
:datasource="users" |
|
||||
:columns="columns" |
|
||||
:selection.sync="select" |
|
||||
:need-page="false" |
|
||||
size="mini" |
|
||||
:toolkit="['size', 'columns', 'fullscreen']"> |
|
||||
<template slot="toolbar"> |
|
||||
<el-button |
|
||||
@click="exportBas" |
|
||||
size="small">导出excel |
|
||||
</el-button> |
|
||||
<el-button |
|
||||
@click="exportAdv" |
|
||||
size="small">导出带单元格合并 |
|
||||
</el-button> |
|
||||
<el-button |
|
||||
@click="exportSel" |
|
||||
size="small">导出选中 |
|
||||
</el-button> |
|
||||
</template> |
|
||||
</ele-pro-table> |
|
||||
</el-card> |
|
||||
<el-card shadow="never" header="导入excel"> |
|
||||
<!-- 操作按钮 --> |
|
||||
<div class="ele-table-tool"> |
|
||||
<el-upload |
|
||||
action="" |
|
||||
:before-upload="importFile" |
|
||||
:show-file-list="false" |
|
||||
class="ele-action" |
|
||||
accept=".xls,.xlsx,.csv"> |
|
||||
<el-button |
|
||||
size="small">导入excel |
|
||||
</el-button> |
|
||||
</el-upload> |
|
||||
<el-upload |
|
||||
action="" |
|
||||
:before-upload="importFile2" |
|
||||
:show-file-list="false" |
|
||||
class="ele-action" |
|
||||
accept=".xls,.xlsx,.csv"> |
|
||||
<el-button |
|
||||
size="small">导入自动拆分合并 |
|
||||
</el-button> |
|
||||
</el-upload> |
|
||||
<el-upload |
|
||||
action="" |
|
||||
:before-upload="importFile3" |
|
||||
:show-file-list="false" |
|
||||
class="ele-action" |
|
||||
accept=".xls,.xlsx,.csv"> |
|
||||
<el-button |
|
||||
size="small">导入保持合并样式 |
|
||||
</el-button> |
|
||||
</el-upload> |
|
||||
</div> |
|
||||
<!-- 数据表格 --> |
|
||||
<el-table |
|
||||
:data="importData" |
|
||||
:span-method="spanMethod" |
|
||||
size="mini" |
|
||||
border |
|
||||
style="width: 100%;"> |
|
||||
<el-table-column |
|
||||
type="index" |
|
||||
width="45" |
|
||||
align="center"/> |
|
||||
<el-table-column |
|
||||
v-for="(key,index) in importTitle" |
|
||||
:key="index" |
|
||||
:prop="key" |
|
||||
:label="key" |
|
||||
align="center" |
|
||||
show-overflow-tooltip/> |
|
||||
</el-table> |
|
||||
<el-row :gutter="30"> |
|
||||
<el-col :md="12"> |
|
||||
<div style="padding: 15px 0;">二维数组格式数据:</div> |
|
||||
<pre style="max-height: 300px;overflow: auto;">{{ JSON.stringify(importDataAoa, null, 4) }}</pre> |
|
||||
</el-col> |
|
||||
<el-col :md="12"> |
|
||||
<div style="padding: 15px 0;">JSON格式数据:</div> |
|
||||
<pre style="max-height: 300px;overflow: auto;">{{ JSON.stringify(importData, null, 4) }}</pre> |
|
||||
</el-col> |
|
||||
</el-row> |
|
||||
</el-card> |
|
||||
</div> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
import XLSX from 'xlsx'; |
|
||||
|
|
||||
export default { |
|
||||
name: 'ExtensionExcel', |
|
||||
data() { |
|
||||
return { |
|
||||
// 表格列配置 |
|
||||
columns: [ |
|
||||
{ |
|
||||
columnKey: 'selection', |
|
||||
type: 'selection', |
|
||||
width: 45, |
|
||||
align: 'center' |
|
||||
}, |
|
||||
{ |
|
||||
columnKey: 'index', |
|
||||
type: 'index', |
|
||||
width: 45, |
|
||||
align: 'center' |
|
||||
}, |
|
||||
{ |
|
||||
prop: 'username', |
|
||||
label: '用户名', |
|
||||
align: 'center', |
|
||||
showOverflowTooltip: true |
|
||||
}, |
|
||||
{ |
|
||||
prop: 'addressGroup', |
|
||||
label: '地址', |
|
||||
align: 'center', |
|
||||
showOverflowTooltip: true, |
|
||||
children: [ |
|
||||
{ |
|
||||
prop: 'province', |
|
||||
label: '省', |
|
||||
align: 'center', |
|
||||
showOverflowTooltip: true |
|
||||
}, |
|
||||
{ |
|
||||
prop: 'city', |
|
||||
label: '市', |
|
||||
align: 'center', |
|
||||
showOverflowTooltip: true |
|
||||
}, |
|
||||
{ |
|
||||
prop: 'zone', |
|
||||
label: '区', |
|
||||
align: 'center', |
|
||||
showOverflowTooltip: true |
|
||||
}, |
|
||||
{ |
|
||||
prop: 'street', |
|
||||
label: '街道', |
|
||||
align: 'center', |
|
||||
showOverflowTooltip: true |
|
||||
}, |
|
||||
{ |
|
||||
prop: 'address', |
|
||||
label: '详细地址', |
|
||||
align: 'center', |
|
||||
showOverflowTooltip: true |
|
||||
} |
|
||||
] |
|
||||
}, |
|
||||
{ |
|
||||
prop: 'amount', |
|
||||
label: '金额', |
|
||||
align: 'center', |
|
||||
showOverflowTooltip: true |
|
||||
} |
|
||||
], |
|
||||
// 表格数据 |
|
||||
users: [ |
|
||||
{ |
|
||||
key: 1, |
|
||||
username: '张小三', |
|
||||
amount: 18, |
|
||||
province: '浙江', |
|
||||
city: '杭州', |
|
||||
zone: '西湖区', |
|
||||
street: '西溪街道', |
|
||||
address: '西溪花园30栋1单元', |
|
||||
}, |
|
||||
{ |
|
||||
key: 2, |
|
||||
username: '李小四', |
|
||||
amount: 39, |
|
||||
province: '江苏', |
|
||||
city: '苏州', |
|
||||
zone: '姑苏区', |
|
||||
street: '丝绸路', |
|
||||
address: '天墅之城9幢2单元', |
|
||||
}, |
|
||||
{ |
|
||||
key: 3, |
|
||||
username: '王小五', |
|
||||
amount: 8, |
|
||||
province: '江西', |
|
||||
city: '南昌', |
|
||||
zone: '青山湖区', |
|
||||
street: '艾溪湖办事处', |
|
||||
address: '中兴和园1幢3单元', |
|
||||
}, |
|
||||
{ |
|
||||
key: 4, |
|
||||
username: '赵小六', |
|
||||
amount: 16, |
|
||||
province: '福建', |
|
||||
city: '泉州', |
|
||||
zone: '丰泽区', |
|
||||
street: '南洋街道', |
|
||||
address: '南洋村6幢1单元', |
|
||||
}, |
|
||||
{ |
|
||||
key: 5, |
|
||||
username: '孙小七', |
|
||||
amount: 12, |
|
||||
province: '湖北', |
|
||||
city: '武汉', |
|
||||
zone: '武昌区', |
|
||||
street: '武昌大道', |
|
||||
address: '两湖花园16幢2单元', |
|
||||
}, |
|
||||
{ |
|
||||
key: 6, |
|
||||
username: '周小八', |
|
||||
amount: 11, |
|
||||
province: '安徽', |
|
||||
city: '黄山', |
|
||||
zone: '黄山区', |
|
||||
street: '汤口镇', |
|
||||
address: '温泉村21号', |
|
||||
} |
|
||||
], |
|
||||
// 选中数据 |
|
||||
select: [], |
|
||||
// 导入数据 |
|
||||
importData: [], |
|
||||
// 导入数据的列 |
|
||||
importTitle: ['A', 'B', 'C', 'D', 'E', 'F', 'G'], |
|
||||
// 导入数据二维数组形式 |
|
||||
importDataAoa: [] |
|
||||
} |
|
||||
}, |
|
||||
methods: { |
|
||||
/* 导出excel */ |
|
||||
exportBas() { |
|
||||
let array = [['用户名', '省', '市', '区', '街道', '详细地址', '金额']]; |
|
||||
this.users.forEach(d => { |
|
||||
array.push([d.username, d.province, d.city, d.zone, d.street, d.address, d.amount]); |
|
||||
}); |
|
||||
this.$util.exportSheet(XLSX, array, '用户数据'); |
|
||||
}, |
|
||||
/* 导出带单元格合并 */ |
|
||||
exportAdv() { |
|
||||
let array = [ |
|
||||
['用户名', '地址', null, null, null, null, '金额'], |
|
||||
[null, '省', '市', '区', '街道', '详细地址', null] |
|
||||
]; |
|
||||
this.users.forEach(d => { |
|
||||
array.push([d.username, d.province, d.city, d.zone, d.street, d.address, d.amount]); |
|
||||
}); |
|
||||
let sheet = XLSX.utils.aoa_to_sheet(array); |
|
||||
sheet['!merges'] = [ |
|
||||
{s: {r: 0, c: 1}, e: {r: 0, c: 5}}, // 合并第0行第1列到第0行第5列 |
|
||||
{s: {r: 0, c: 0}, e: {r: 1, c: 0}}, // 合并第0行第0列到第1行第0列 |
|
||||
{s: {r: 0, c: 6}, e: {r: 1, c: 6}} // 合并第0行第6列到第1行第6列 |
|
||||
]; |
|
||||
this.$util.exportSheet(XLSX, sheet, '用户数据'); |
|
||||
}, |
|
||||
/* 导出选中数据 */ |
|
||||
exportSel() { |
|
||||
if (this.select.length === 0) { |
|
||||
return this.$message.error('请至少选择一条数据'); |
|
||||
} |
|
||||
let array = [['用户名', '省', '市', '区', '街道', '详细地址', '金额']]; |
|
||||
this.select.forEach(d => { |
|
||||
array.push([d.username, d.province, d.city, d.zone, d.street, d.address, d.amount]); |
|
||||
}); |
|
||||
this.$util.exportSheet(XLSX, array, '用户数据'); |
|
||||
}, |
|
||||
/* 导入本地excel文件 */ |
|
||||
importFile(file) { |
|
||||
let reader = new FileReader(); |
|
||||
reader.onload = (e) => { |
|
||||
let data = new Uint8Array(e.target.result); |
|
||||
let workbook = XLSX.read(data, {type: 'array'}); |
|
||||
let sheetNames = workbook.SheetNames; |
|
||||
let worksheet = workbook.Sheets[sheetNames[0]]; |
|
||||
// 解析成二维数组 |
|
||||
let aoa = XLSX.utils.sheet_to_json(worksheet, {header: 1}); |
|
||||
// 生成表格需要的数据 |
|
||||
let list = [], maxCols = 0, title = []; |
|
||||
aoa.forEach(d => { |
|
||||
if (d.length > maxCols) { |
|
||||
maxCols = d.length; |
|
||||
} |
|
||||
let row = {}; |
|
||||
for (let i = 0; i < d.length; i++) { |
|
||||
row[this.getCharByIndex(i)] = d[i]; |
|
||||
} |
|
||||
list.push(row); |
|
||||
}); |
|
||||
for (let i = 0; i < maxCols; i++) { |
|
||||
title.push(this.getCharByIndex(i)); |
|
||||
} |
|
||||
this.importTitle = title; |
|
||||
this.importData = list; |
|
||||
this.importDataAoa = aoa; |
|
||||
}; |
|
||||
reader.readAsArrayBuffer(file); |
|
||||
return false; |
|
||||
}, |
|
||||
/* 导入本地excel文件 */ |
|
||||
importFile2(file) { |
|
||||
let reader = new FileReader(); |
|
||||
reader.onload = (e) => { |
|
||||
let data = new Uint8Array(e.target.result); |
|
||||
let workbook = XLSX.read(data, {type: 'array'}); |
|
||||
let sheetNames = workbook.SheetNames; |
|
||||
let worksheet = workbook.Sheets[sheetNames[0]]; |
|
||||
// 解析成二维数组 |
|
||||
let aoa = XLSX.utils.sheet_to_json(worksheet, {header: 1}); |
|
||||
// 拆分合并单元格 |
|
||||
if (worksheet['!merges']) { |
|
||||
worksheet['!merges'].forEach(m => { |
|
||||
for (let r = m.s.r; r <= m.e.r; r++) { |
|
||||
for (let c = m.s.c; c <= m.e.c; c++) { |
|
||||
aoa[r][c] = aoa[m.s.r][m.s.c]; |
|
||||
} |
|
||||
} |
|
||||
}); |
|
||||
} |
|
||||
// 生成表格需要的数据 |
|
||||
let list = [], maxCols = 0, title = []; |
|
||||
aoa.forEach(d => { |
|
||||
if (d.length > maxCols) { |
|
||||
maxCols = d.length; |
|
||||
} |
|
||||
let row = {}; |
|
||||
for (let i = 0; i < d.length; i++) { |
|
||||
row[this.getCharByIndex(i)] = d[i]; |
|
||||
} |
|
||||
list.push(row); |
|
||||
}); |
|
||||
for (let i = 0; i < maxCols; i++) { |
|
||||
title.push(this.getCharByIndex(i)); |
|
||||
} |
|
||||
this.importTitle = title; |
|
||||
this.importData = list; |
|
||||
this.importDataAoa = aoa; |
|
||||
}; |
|
||||
reader.readAsArrayBuffer(file); |
|
||||
return false; |
|
||||
}, |
|
||||
/* 导入本地excel文件 */ |
|
||||
importFile3(file) { |
|
||||
let reader = new FileReader(); |
|
||||
reader.onload = (e) => { |
|
||||
let data = new Uint8Array(e.target.result); |
|
||||
let workbook = XLSX.read(data, {type: 'array'}); |
|
||||
let sheetNames = workbook.SheetNames; |
|
||||
let worksheet = workbook.Sheets[sheetNames[0]]; |
|
||||
// 解析成二维数组 |
|
||||
let aoa = XLSX.utils.sheet_to_json(worksheet, {header: 1}); |
|
||||
// 生成表格需要的数据 |
|
||||
let list = [], maxCols = 0, title = []; |
|
||||
aoa.forEach(d => { |
|
||||
if (d.length > maxCols) { |
|
||||
maxCols = d.length; |
|
||||
} |
|
||||
let row = {}; |
|
||||
for (let i = 0; i < d.length; i++) { |
|
||||
row[this.getCharByIndex(i)] = d[i]; |
|
||||
} |
|
||||
list.push(row); |
|
||||
}); |
|
||||
for (let i = 0; i < maxCols; i++) { |
|
||||
title.push(this.getCharByIndex(i)); |
|
||||
} |
|
||||
// 记录合并单元格 |
|
||||
if (worksheet['!merges']) { |
|
||||
worksheet['!merges'].forEach(m => { |
|
||||
for (let r = m.s.r; r <= m.e.r; r++) { |
|
||||
for (let c = m.s.c; c <= m.e.c; c++) { |
|
||||
let cc = this.getCharByIndex(c); |
|
||||
list[r]['__colspan__' + cc] = 0; |
|
||||
list[r]['__rowspan__' + cc] = 0; |
|
||||
} |
|
||||
} |
|
||||
let char = this.getCharByIndex(m.s.c); |
|
||||
list[m.s.r]['__colspan__' + char] = m.e.c - m.s.c + 1; |
|
||||
list[m.s.r]['__rowspan__' + char] = m.e.r - m.s.r + 1; |
|
||||
}); |
|
||||
} |
|
||||
this.importTitle = title; |
|
||||
this.importData = list; |
|
||||
this.importDataAoa = aoa; |
|
||||
}; |
|
||||
reader.readAsArrayBuffer(file); |
|
||||
return false; |
|
||||
}, |
|
||||
/* 生成Excel列字母序号 */ |
|
||||
getCharByIndex(index) { |
|
||||
let chars = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', |
|
||||
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']; |
|
||||
if (index < chars.length) { |
|
||||
return chars[index]; |
|
||||
} |
|
||||
let n = parseInt(index / chars.length), |
|
||||
m = index % chars.length; |
|
||||
return chars[n] + chars[m]; |
|
||||
}, |
|
||||
/* 合并表格单元格 */ |
|
||||
spanMethod({row, column}) { |
|
||||
if (!column.label) { |
|
||||
return [1, 1]; |
|
||||
} |
|
||||
let r = row['__rowspan__' + column.label], |
|
||||
c = row['__colspan__' + column.label]; |
|
||||
return [r === undefined ? 1 : r, c === undefined ? 1 : c]; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style scoped> |
|
||||
</style> |
|
||||
@ -1,482 +0,0 @@ |
|||||
<template> |
|
||||
<div class="ele-body"> |
|
||||
<el-card |
|
||||
shadow="never" |
|
||||
body-style="padding: 0;" |
|
||||
style="overflow: visible;"> |
|
||||
<div style="padding: 15px 15px 0 15px;"> |
|
||||
<!-- 工具栏 --> |
|
||||
<div class="ele-table-tool"> |
|
||||
<div class="ele-table-tool-title"> |
|
||||
<el-upload |
|
||||
:action="this.uploadImage+'/?upload_type=file'" |
|
||||
:headers="$http.defaults.headers.common" |
|
||||
:on-success="uploadSuccess" |
|
||||
:show-file-list="false" |
|
||||
class="ele-inline-block ele-action"> |
|
||||
<el-button |
|
||||
type="primary" |
|
||||
icon="el-icon-upload2" |
|
||||
class="ele-btn-icon" |
|
||||
size="small">上传 |
|
||||
</el-button> |
|
||||
</el-upload> |
|
||||
<!-- <el-button--> |
|
||||
<!-- icon="el-icon-folder-add"--> |
|
||||
<!-- class="ele-btn-icon"--> |
|
||||
<!-- size="small">新建文件夹--> |
|
||||
<!-- </el-button>--> |
|
||||
<template v-if="checked.length"> |
|
||||
<el-button |
|
||||
:disabled="checked.length>1" |
|
||||
@click="view(checked[0])" |
|
||||
icon="el-icon-view" |
|
||||
class="ele-btn-icon" |
|
||||
size="small">预览 |
|
||||
</el-button> |
|
||||
<el-button |
|
||||
:disabled="checked.length>1" |
|
||||
@click="remove(checked[0])" |
|
||||
type="danger" |
|
||||
icon="el-icon-delete" |
|
||||
class="ele-btn-icon hidden-xs-only" |
|
||||
size="small">删除 |
|
||||
</el-button> |
|
||||
</template> |
|
||||
</div> |
|
||||
<div class="ele-table-tool-right"> |
|
||||
<!-- 搜索框 --> |
|
||||
<!-- <div class="ele-file-tool-search hidden-xs-only">--> |
|
||||
<!-- <el-input--> |
|
||||
<!-- placeholder="搜索您的文件"--> |
|
||||
<!-- v-model="search"--> |
|
||||
<!-- size="small">--> |
|
||||
<!-- <el-button slot="append" icon="el-icon-search"/>--> |
|
||||
<!-- </el-input>--> |
|
||||
<!-- </div>--> |
|
||||
<!-- 排序方式切换 --> |
|
||||
<el-dropdown @command="onSortClick"> |
|
||||
<i class="el-icon-_filter ele-file-tool-btn" title="排序方式"></i> |
|
||||
<el-dropdown-menu slot="dropdown"> |
|
||||
<el-dropdown-item command="name"> |
|
||||
<span :class="['ele-file-sort-item ele-text-primary',{'active':sort==='name'}]"> |
|
||||
<i |
|
||||
:class="['ele-file-sort-item-icon',{'el-icon-top':order==='asc'},{'el-icon-bottom':order==='desc'}]"></i> |
|
||||
<span>文件名</span> |
|
||||
</span> |
|
||||
</el-dropdown-item> |
|
||||
<el-dropdown-item command="size"> |
|
||||
<span :class="['ele-file-sort-item ele-text-primary',{'active':sort==='size'}]"> |
|
||||
<i |
|
||||
:class="['ele-file-sort-item-icon',{'el-icon-top':order==='asc'},{'el-icon-bottom':order==='desc'}]"></i> |
|
||||
<span>大小</span> |
|
||||
</span> |
|
||||
</el-dropdown-item> |
|
||||
<el-dropdown-item command="update_time"> |
|
||||
<span :class="['ele-file-sort-item ele-text-primary',{'active':sort==='update_time'}]"> |
|
||||
<i |
|
||||
:class="['ele-file-sort-item-icon',{'el-icon-top':order==='asc'},{'el-icon-bottom':order==='desc'}]"></i> |
|
||||
<span>修改日期</span> |
|
||||
</span> |
|
||||
</el-dropdown-item> |
|
||||
</el-dropdown-menu> |
|
||||
</el-dropdown> |
|
||||
<!-- 显示方式切换 --> |
|
||||
<i |
|
||||
@click="grid=!grid" |
|
||||
:class="['ele-file-tool-btn',{'el-icon-_menu':!grid},{'el-icon-_nav':grid}]" |
|
||||
title="显示方式"></i> |
|
||||
</div> |
|
||||
</div> |
|
||||
<!-- 文件目录面包屑 --> |
|
||||
<div class="ele-file-breadcrumb-group ele-cell"> |
|
||||
<div class="ele-cell-content ele-cell"> |
|
||||
<div |
|
||||
v-if="directory.length>1" |
|
||||
@click="back" |
|
||||
class="ele-file-breadcrumb-back ele-text-primary">返回上一级 |
|
||||
</div> |
|
||||
<div class="ele-file-breadcrumb-list ele-cell-content ele-cell"> |
|
||||
<div |
|
||||
@click="listAll" |
|
||||
:class="['ele-file-breadcrumb-item ele-cell',{'ele-text-primary':directory.length}]"> |
|
||||
<div class="ele-file-breadcrumb-item-title">全部文件 |
|
||||
</div> |
|
||||
<i v-if="directory.length" class="el-icon-arrow-right"></i> |
|
||||
</div> |
|
||||
<div |
|
||||
v-for="(item,index) in directory" |
|
||||
:key="index" |
|
||||
@click="listDir(index)" |
|
||||
:class="['ele-file-breadcrumb-item ele-cell',{'ele-text-primary':index!==directory.length-1}]"> |
|
||||
<div class="ele-file-breadcrumb-item-title">{{ item }} |
|
||||
</div> |
|
||||
<i v-if="index!==directory.length-1" class="el-icon-arrow-right"></i> |
|
||||
</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
<div class="hidden-xs-only">已全部加载,共{{ total_count }}个</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
<!-- 文件列表 --> |
|
||||
<div v-loading="loading" style="min-height: 400px;"> |
|
||||
<ele-file-list |
|
||||
:data="data" |
|
||||
:checked.sync="checked" |
|
||||
:grid="grid" |
|
||||
@item-click="onItemClick" |
|
||||
:sort="sort" |
|
||||
:order="order" |
|
||||
@sort-change="onSortChange"> |
|
||||
<template slot="tool" slot-scope="{item}"> |
|
||||
<i |
|
||||
class="el-icon-view ele-file-list-item-tool ele-text-primary" |
|
||||
@click.stop="view(item)" title="查看"></i> |
|
||||
<i |
|
||||
class="el-icon-delete ele-file-list-item-tool ele-text-primary" |
|
||||
title="删除" @click="remove(item)" ></i> |
|
||||
<!-- <el-dropdown class="ele-file-list-item-tool">--> |
|
||||
<!-- <i class="el-icon-more ele-text-primary"></i>--> |
|
||||
<!-- <el-dropdown-menu slot="dropdown">--> |
|
||||
<!-- <el-dropdown-item>移动到</el-dropdown-item>--> |
|
||||
<!-- <el-dropdown-item>复制到</el-dropdown-item>--> |
|
||||
<!-- <el-dropdown-item>删除</el-dropdown-item>--> |
|
||||
<!-- </el-dropdown-menu>--> |
|
||||
<!-- </el-dropdown>--> |
|
||||
</template> |
|
||||
</ele-file-list> |
|
||||
|
|
||||
</div> |
|
||||
<div style="padding-bottom:20px"> |
|
||||
<template> |
|
||||
<div class = " flex all-center"> |
|
||||
<template v-if="total_count>0"> |
|
||||
<el-pagination |
|
||||
:total="total_count" |
|
||||
background |
|
||||
layout="prev, pager, next, jumper, total" |
|
||||
class="my-pagination" |
|
||||
@current-change="handleCurrentChange" |
|
||||
:current-page="cur_page" |
|
||||
:page-size="pageNum" |
|
||||
|
|
||||
/> |
|
||||
</template> |
|
||||
</div> |
|
||||
</template> |
|
||||
</div> |
|
||||
<!-- 用于图片预览 --> |
|
||||
<el-image |
|
||||
ref="previewImage" |
|
||||
v-if="currentImage" |
|
||||
class="ele-file-image-preview" |
|
||||
:src="currentImage" |
|
||||
:preview-src-list="previewList"> |
|
||||
</el-image> |
|
||||
</el-card> |
|
||||
</div> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
import EleFileList from 'ele-admin/packages/ele-file-list'; |
|
||||
import setting from "@/config/setting"; |
|
||||
|
|
||||
export default { |
|
||||
name: 'ExtensionFile', |
|
||||
components: {EleFileList}, |
|
||||
data() { |
|
||||
return { |
|
||||
uploadImage:setting.uploadImageUrl, |
|
||||
cur_page:1, |
|
||||
pageNum:10, |
|
||||
total_count:0, |
|
||||
// 加载状态 |
|
||||
loading: true, |
|
||||
// 是否网格展示 |
|
||||
grid: true, |
|
||||
// 文件列表数据 |
|
||||
data: [], |
|
||||
// 选中数据 |
|
||||
checked: [], |
|
||||
// 文件目录面包屑数据 |
|
||||
directory: [''], |
|
||||
// 图片预览文件 |
|
||||
currentImage: '', |
|
||||
// 搜索 |
|
||||
search: '', |
|
||||
// 排序字段 |
|
||||
sort: '', |
|
||||
// 排序方式 |
|
||||
order: '', |
|
||||
current : '/', |
|
||||
|
|
||||
} |
|
||||
}, |
|
||||
computed: { |
|
||||
// 图片预览列表 |
|
||||
previewList() { |
|
||||
return this.data.filter(d => d.thumbnail).map(d => d.thumbnail); |
|
||||
} |
|
||||
}, |
|
||||
|
|
||||
mounted() { |
|
||||
this.query(); |
|
||||
}, |
|
||||
methods: { |
|
||||
handleCurrentChange(val) { |
|
||||
this.cur_page = val; |
|
||||
this.query();//获取用户点击的当前页后刷新页面数据 |
|
||||
}, |
|
||||
|
|
||||
/* 查询文件列表 */ |
|
||||
query() { |
|
||||
this.checked = []; |
|
||||
this.data = []; |
|
||||
this.loading = true; |
|
||||
|
|
||||
this.$http.get('/uploadLog/index', { |
|
||||
params: { |
|
||||
current: this.directory.join('/'), |
|
||||
sort: this.sort, |
|
||||
order: this.order, |
|
||||
page:this.cur_page, |
|
||||
limit:this.pageNum |
|
||||
} |
|
||||
}).then(res => { |
|
||||
this.loading = false; |
|
||||
if (res.data.code === 0) { |
|
||||
res.data.data.forEach(d => { |
|
||||
// 文件地址加baseURL |
|
||||
// if (d.thumbnail) { |
|
||||
// d.url = thumbnail; |
|
||||
// } |
|
||||
// if (d.thumbnail) { |
|
||||
// d.thumbnail = process.env.VUE_APP_API_BASE_URL + '/' + d.thumbnail; |
|
||||
// } |
|
||||
// 文件大小格式化 |
|
||||
if (d.isDirectory) { |
|
||||
d.length = '-'; |
|
||||
} else { |
|
||||
d.length = this.getFileSize(d.size); |
|
||||
} |
|
||||
if(d.type == 'jpg' || d.type == 'png' || d.type == 'jpeg'){ |
|
||||
d.thumbnail = d.url |
|
||||
} |
|
||||
|
|
||||
// 修改时间格式化 |
|
||||
if (!d.isDirectoryd && d.update_time) { |
|
||||
d.updateTime = this.$util.toDateString(d.update_time); |
|
||||
} |
|
||||
}); |
|
||||
this.data = res.data.data; |
|
||||
this.total_count = res.data.count; |
|
||||
} else { |
|
||||
this.$message.error(res.data.msg); |
|
||||
} |
|
||||
}).catch(e => { |
|
||||
this.loading = false; |
|
||||
this.$message.error(e.message); |
|
||||
}) |
|
||||
}, |
|
||||
/* item点击事件 */ |
|
||||
onItemClick(item) { |
|
||||
if (item.isDirectory) { // 文件夹 |
|
||||
this.directory.push(item.name); |
|
||||
this.query(); |
|
||||
} else if(item.type == 'jpg' || item.type == 'png' || item.type == 'jpeg') { |
|
||||
this.currentImage = item.thumbnail; |
|
||||
this.$nextTick(() => { |
|
||||
if (this.$refs.previewImage) { |
|
||||
this.$refs.previewImage.showViewer = true; |
|
||||
} |
|
||||
}); |
|
||||
} else if (this.checked.indexOf(item) !== -1) { |
|
||||
this.checked.splice(this.checked.indexOf(item), 1); |
|
||||
} else { |
|
||||
this.checked.push(item); |
|
||||
} |
|
||||
}, |
|
||||
/* 返回上级 */ |
|
||||
back() { |
|
||||
this.directory.splice(this.directory.length - 1, 1); |
|
||||
this.query(); |
|
||||
}, |
|
||||
/* 全部文件 */ |
|
||||
listAll() { |
|
||||
if (!this.directory.length) { |
|
||||
return; |
|
||||
} |
|
||||
this.directory = ['']; |
|
||||
this.query(); |
|
||||
}, |
|
||||
/* 回到指定目录 */ |
|
||||
listDir(index) { |
|
||||
if (index === this.directory.length - 1) { |
|
||||
return; |
|
||||
} |
|
||||
this.directory.splice(index+1, this.directory.length - index); |
|
||||
this.query(); |
|
||||
}, |
|
||||
/* 文件大小格式化 */ |
|
||||
getFileSize(value) { |
|
||||
if (value < 1024) { |
|
||||
return value + 'B'; |
|
||||
} else if (value < 1024 * 1024) { |
|
||||
return (value / 1024).toFixed(1) + 'KB'; |
|
||||
} else if (value < 1024 * 1024 * 1024) { |
|
||||
return (value / 1024 / 1024).toFixed(1) + 'M'; |
|
||||
} else { |
|
||||
return (value / 1024 / 1024 / 1024).toFixed(1) + 'G'; |
|
||||
} |
|
||||
}, |
|
||||
/* 排序方式切换 */ |
|
||||
onSortClick(command) { |
|
||||
if (this.sort === command) { |
|
||||
this.order = {'asc': 'desc', 'desc': 'asc'}[this.order]; |
|
||||
} else { |
|
||||
this.order = 'asc'; |
|
||||
this.sort = command; |
|
||||
} |
|
||||
this.query(); |
|
||||
}, |
|
||||
/* 文件列表排序方式改变 */ |
|
||||
onSortChange(obj) { |
|
||||
this.order = obj.order; |
|
||||
this.sort = obj.sort; |
|
||||
this.query(); |
|
||||
}, |
|
||||
/* 查看文件 */ |
|
||||
view(item) { |
|
||||
if (item.isDirectory) { |
|
||||
this.onItemClick(item); |
|
||||
return; |
|
||||
} |
|
||||
if (item.url) { |
|
||||
window.open(item.url); |
|
||||
} |
|
||||
}, |
|
||||
/* 删除 */ |
|
||||
remove(item) { |
|
||||
if (item.isDirectory) { |
|
||||
return; |
|
||||
} |
|
||||
if (item.url) { |
|
||||
this.$confirm('确定要删除选中的文件么?', '提示', { |
|
||||
type: 'warning' |
|
||||
}).then(() => { |
|
||||
const loading = this.$loading({lock: true}); |
|
||||
this.$http.delete('/uploadLog/delete?id=' + item.id).then(res => { |
|
||||
loading.close(); |
|
||||
if (res.data.code === 0) { |
|
||||
this.$message({type: 'success', message: res.data.msg}); |
|
||||
this.query(); |
|
||||
} else { |
|
||||
this.$message.error(res.data.msg); |
|
||||
} |
|
||||
}).catch(e => { |
|
||||
loading.close(); |
|
||||
this.$message.error(e.message); |
|
||||
}); |
|
||||
}).catch(() => { |
|
||||
}); |
|
||||
} |
|
||||
}, |
|
||||
/* 文件上传成功 */ |
|
||||
uploadSuccess(res) { |
|
||||
if (res.code === 0) { |
|
||||
this.$message({type: 'success', message: res.msg}); |
|
||||
this.directory = [res.dir.replace(/\//, '')]; |
|
||||
this.query(); |
|
||||
} else { |
|
||||
this.$message.error(res.msg); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style scoped> |
|
||||
/** 文件目录面包屑 */ |
|
||||
.ele-file-breadcrumb-group { |
|
||||
font-size: 13px; |
|
||||
padding: 2px 0 6px 0; |
|
||||
line-height: 1; |
|
||||
} |
|
||||
|
|
||||
.ele-file-breadcrumb-back { |
|
||||
padding-right: 10px; |
|
||||
border-right: 2px solid hsla(0, 0%, 60%, .2); |
|
||||
} |
|
||||
|
|
||||
.ele-file-breadcrumb-back:hover, |
|
||||
.ele-file-breadcrumb-item.ele-text-primary:hover > .ele-file-breadcrumb-item-title { |
|
||||
text-decoration: underline; |
|
||||
cursor: pointer; |
|
||||
} |
|
||||
|
|
||||
/* 图片预览组件 */ |
|
||||
.ele-file-image-preview ::v-deep img.el-image__inner { |
|
||||
display: none; |
|
||||
} |
|
||||
|
|
||||
.ele-file-image-preview ::v-deep .el-image__error { |
|
||||
display: none; |
|
||||
} |
|
||||
|
|
||||
/* 图标按钮 */ |
|
||||
.ele-file-tool-btn { |
|
||||
cursor: pointer; |
|
||||
font-size: 22px; |
|
||||
display: inline-block; |
|
||||
vertical-align: middle; |
|
||||
margin-left: 10px; |
|
||||
} |
|
||||
|
|
||||
/* 搜索框 */ |
|
||||
.ele-file-tool-search { |
|
||||
display: inline-block; |
|
||||
vertical-align: middle; |
|
||||
background-color: hsla(0, 0%, 60%, .15); |
|
||||
border-radius: 32px; |
|
||||
} |
|
||||
|
|
||||
.ele-file-tool-search ::v-deep .el-input-group__append, |
|
||||
.ele-file-tool-search ::v-deep .el-input__inner { |
|
||||
background-color: transparent; |
|
||||
border: none; |
|
||||
} |
|
||||
|
|
||||
.ele-file-tool-search ::v-deep .el-input-group__append { |
|
||||
padding: 0; |
|
||||
} |
|
||||
|
|
||||
.ele-file-tool-search ::v-deep .el-input-group__append .el-button { |
|
||||
margin: 0; |
|
||||
padding: 7px 16px 7px 10px; |
|
||||
border: none; |
|
||||
} |
|
||||
|
|
||||
.ele-file-tool-search ::v-deep .el-input-group__append .el-button > i { |
|
||||
font-size: 16px; |
|
||||
font-weight: 600; |
|
||||
} |
|
||||
|
|
||||
.ele-file-tool-search ::v-deep .el-input__inner { |
|
||||
width: 200px; |
|
||||
padding-right: 0; |
|
||||
box-sizing: border-box; |
|
||||
} |
|
||||
|
|
||||
/* 排序下拉 */ |
|
||||
.ele-file-sort-item:not(.active) .ele-file-sort-item-icon { |
|
||||
visibility: hidden; |
|
||||
} |
|
||||
|
|
||||
.ele-file-sort-item .ele-file-sort-item-icon { |
|
||||
font-weight: 600; |
|
||||
} |
|
||||
|
|
||||
.ele-file-sort-item:not(.active) { |
|
||||
color: inherit; |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,241 +0,0 @@ |
|||||
<template> |
|
||||
<div class="ele-body"> |
|
||||
<el-alert |
|
||||
:title="tipTitle" |
|
||||
type="info" |
|
||||
show-icon |
|
||||
class="ele-alert-border" |
|
||||
:closable="false"/> |
|
||||
<el-card |
|
||||
shadow="never" |
|
||||
body-style="position: relative;padding: 0;" |
|
||||
style="margin-top: 15px;"> |
|
||||
<div class="demo-icon-search"> |
|
||||
<el-input |
|
||||
v-model="keywords" |
|
||||
placeholder="输入关键词搜索..." |
|
||||
size="small"/> |
|
||||
</div> |
|
||||
<el-tabs v-model="active" class="demo-icon-tabs"> |
|
||||
<el-tab-pane |
|
||||
v-for="(item,index) in result" |
|
||||
:key="index" |
|
||||
:label="item.title" |
|
||||
:name="item.title"> |
|
||||
<el-row class="demo-icon"> |
|
||||
<el-col |
|
||||
:md="4" |
|
||||
:sm="6" |
|
||||
:xs="8" |
|
||||
v-for="(d,i) in item.icons" |
|
||||
:key="i" |
|
||||
class="demo-icon-item" |
|
||||
v-clipboard:copy="d" |
|
||||
v-clipboard:success="onCopy" |
|
||||
v-clipboard:error="onError"> |
|
||||
<div class="demo-icon-content"> |
|
||||
<i :class="d"></i> |
|
||||
</div> |
|
||||
<div class="demo-icon-text ele-text-secondary">{{ d }}</div> |
|
||||
</el-col> |
|
||||
</el-row> |
|
||||
</el-tab-pane> |
|
||||
<el-tab-pane label="图标选择器" name="icon-picker"> |
|
||||
<div |
|
||||
class="ele-cell demo-icon-picker-item" |
|
||||
style="margin-top: 20px;"> |
|
||||
<div>默认样式一:</div> |
|
||||
<div class="ele-cell-content"> |
|
||||
<ele-icon-picker |
|
||||
v-model="menuIcon" |
|
||||
placeholder="请选择菜单图标"/> |
|
||||
</div> |
|
||||
</div> |
|
||||
<div class="ele-cell demo-icon-picker-item"> |
|
||||
<div>默认样式二:</div> |
|
||||
<div class="ele-cell-content"> |
|
||||
<ele-icon-picker |
|
||||
v-model="menuIcon" |
|
||||
theme="style2" |
|
||||
:readonly="false"/> |
|
||||
</div> |
|
||||
</div> |
|
||||
<div class="ele-cell demo-icon-picker-item"> |
|
||||
<div>默认样式三:</div> |
|
||||
<div class="ele-cell-content"> |
|
||||
<ele-icon-picker |
|
||||
v-model="menuIcon" |
|
||||
theme="style3"/> |
|
||||
</div> |
|
||||
</div> |
|
||||
<div class="ele-cell demo-icon-picker-item">除了默认的三种样式,你还可以通过插槽自定义样式</div> |
|
||||
</el-tab-pane> |
|
||||
</el-tabs> |
|
||||
</el-card> |
|
||||
</div> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
import EleIconPicker from 'ele-admin/packages/ele-icon-picker'; |
|
||||
|
|
||||
export default { |
|
||||
name: 'ExtensionIcon', |
|
||||
components: {EleIconPicker}, |
|
||||
data() { |
|
||||
return { |
|
||||
// 图标数据 |
|
||||
data: EleIconPicker.defaultIcons, |
|
||||
// 搜索关键字 |
|
||||
keywords: '', |
|
||||
// 图标选择器选择图标 |
|
||||
menuIcon: 'el-icon-_heart-solid' |
|
||||
} |
|
||||
}, |
|
||||
computed: { |
|
||||
// 搜索后的结果 |
|
||||
result() { |
|
||||
if (!this.keywords) { |
|
||||
return this.data; |
|
||||
} |
|
||||
let result = []; |
|
||||
this.data.forEach(item => { |
|
||||
result.push({ |
|
||||
title: item.title, |
|
||||
icons: item.icons.filter(d => d.indexOf(this.keywords) !== -1) |
|
||||
}); |
|
||||
}); |
|
||||
return result; |
|
||||
}, |
|
||||
// 标签页选中位置 |
|
||||
active: { |
|
||||
get() { |
|
||||
if (!this.result || this.result.length === 0) { |
|
||||
return null; |
|
||||
} |
|
||||
for (let i = 0; i < this.result.length; i++) { |
|
||||
if (this.result[i].icons.length !== 0) { |
|
||||
return this.result[i].title; |
|
||||
} |
|
||||
} |
|
||||
return null; |
|
||||
}, |
|
||||
set() { |
|
||||
} |
|
||||
}, |
|
||||
// 计算总个数 |
|
||||
total() { |
|
||||
let num = {el: 0, ele: 0}; |
|
||||
this.data.forEach(item => { |
|
||||
item.icons.forEach(d => { |
|
||||
if (d.indexOf('el-icon-_') === 0) { |
|
||||
num.ele++; |
|
||||
} else { |
|
||||
num.el++; |
|
||||
} |
|
||||
}); |
|
||||
}); |
|
||||
num.all = num.el + num.ele; |
|
||||
return num; |
|
||||
}, |
|
||||
// 提示文本 |
|
||||
tipTitle() { |
|
||||
return `新增 ${this.total.ele} 个图标 + Element UI ${this.total.el} 个图标, 共计 ${this.total.all} 个图标`; |
|
||||
} |
|
||||
}, |
|
||||
methods: { |
|
||||
/* 复制图标 */ |
|
||||
onCopy() { |
|
||||
this.$message({type: 'success', message: '复制成功'}); |
|
||||
}, |
|
||||
onError() { |
|
||||
this.$message.error('复制失败'); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style scoped> |
|
||||
/* 搜索框 */ |
|
||||
.demo-icon-search { |
|
||||
width: 180px; |
|
||||
position: absolute; |
|
||||
right: 10px; |
|
||||
top: 7px; |
|
||||
z-index: 1; |
|
||||
} |
|
||||
|
|
||||
/* 选项卡 */ |
|
||||
.demo-icon-tabs ::v-deep .el-tabs__nav-scroll { |
|
||||
padding: 0 20px; |
|
||||
} |
|
||||
|
|
||||
.demo-icon-tabs ::v-deep .el-tabs__item { |
|
||||
height: 45px; |
|
||||
line-height: 45px; |
|
||||
} |
|
||||
|
|
||||
/* 图标 */ |
|
||||
.demo-icon { |
|
||||
margin: 15px; |
|
||||
border-top: 1px solid hsla(0, 0%, 60%, .15); |
|
||||
border-left: 1px solid hsla(0, 0%, 60%, .15); |
|
||||
} |
|
||||
|
|
||||
.demo-icon-item { |
|
||||
text-align: center; |
|
||||
padding: 25px 0 25px 0; |
|
||||
border-right: 1px solid hsla(0, 0%, 60%, .15); |
|
||||
border-bottom: 1px solid hsla(0, 0%, 60%, .15); |
|
||||
transition: color .2s, background-color .2s; |
|
||||
position: relative; |
|
||||
overflow: hidden; |
|
||||
cursor: pointer; |
|
||||
} |
|
||||
|
|
||||
.demo-icon-content { |
|
||||
font-size: 38px; |
|
||||
} |
|
||||
|
|
||||
.demo-icon-text { |
|
||||
font-size: 13px; |
|
||||
margin-top: 8px; |
|
||||
padding: 0 5px; |
|
||||
transition: color .2s; |
|
||||
overflow: hidden; |
|
||||
text-overflow: ellipsis; |
|
||||
white-space: nowrap; |
|
||||
word-break: break-all; |
|
||||
} |
|
||||
|
|
||||
.demo-icon-item:after { |
|
||||
content: "点击复制"; |
|
||||
position: absolute; |
|
||||
bottom: -30px; |
|
||||
left: 0; |
|
||||
width: 100%; |
|
||||
color: #FFF; |
|
||||
padding: 4px 0; |
|
||||
font-size: 12px; |
|
||||
background-color: #409EFF; |
|
||||
transition: bottom .2s; |
|
||||
} |
|
||||
|
|
||||
.demo-icon-item:hover:after { |
|
||||
bottom: 0; |
|
||||
} |
|
||||
|
|
||||
/* 图标选择器演示 */ |
|
||||
.demo-icon-picker-item { |
|
||||
max-width: 400px; |
|
||||
padding: 0 20px 20px; |
|
||||
} |
|
||||
|
|
||||
/* 自适应 */ |
|
||||
@media screen and (max-width: 660px) { |
|
||||
.demo-icon-search { |
|
||||
width: auto; |
|
||||
margin: 10px 10px 0; |
|
||||
position: static; |
|
||||
} |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,250 +0,0 @@ |
|||||
<template> |
|
||||
<div class="ele-body"> |
|
||||
<!-- 地图位置选择弹窗 --> |
|
||||
<ele-map-picker |
|
||||
:show.sync="showMapPicker" |
|
||||
:need-city="true" |
|
||||
@done="onChoose" |
|
||||
:lock-scroll="false"/> |
|
||||
<ele-map-picker |
|
||||
:show.sync="showMapPicker2" |
|
||||
:need-city="true" |
|
||||
@done="onChoose" |
|
||||
:search-type="1" |
|
||||
:lock-scroll="false"/> |
|
||||
<el-card |
|
||||
shadow="never" |
|
||||
header="弹窗选择位置"> |
|
||||
<el-tooltip |
|
||||
content="POI检索模式" |
|
||||
placement="top"> |
|
||||
<el-button |
|
||||
@click="showMapPicker=true" |
|
||||
size="small" |
|
||||
class="ele-btn-icon" |
|
||||
icon="el-icon-location-information"> |
|
||||
<span>地图选择位置 </span> |
|
||||
<i class="el-icon-right"/> |
|
||||
</el-button> |
|
||||
</el-tooltip> |
|
||||
<el-button |
|
||||
@click="showMapPicker2=true" |
|
||||
size="small" |
|
||||
class="ele-btn-icon" |
|
||||
icon="el-icon-location-information"> |
|
||||
<span>关键字检索模式 </span> |
|
||||
<i class="el-icon-right"/> |
|
||||
</el-button> |
|
||||
<div style="margin-top: 10px;">收货地址: {{ form.location }}</div> |
|
||||
<div style="margin-top: 10px;">详细地址: {{ form.address }}</div> |
|
||||
<div style="margin-top: 10px;">经 纬 度 : {{ form.jinweidu }}</div> |
|
||||
</el-card> |
|
||||
<el-card |
|
||||
shadow="never" |
|
||||
header="官网底部地图"> |
|
||||
<div |
|
||||
ref="locationMap" |
|
||||
style="max-width: 800px;height: 300px;"> |
|
||||
</div> |
|
||||
</el-card> |
|
||||
<el-card |
|
||||
shadow="never" |
|
||||
header="轨迹展示及轨迹回放"> |
|
||||
<div |
|
||||
ref="trackMap" |
|
||||
style="max-width: 800px;height: 300px;"> |
|
||||
</div> |
|
||||
<div style="margin-top: 15px;"> |
|
||||
<el-button |
|
||||
@click="startTrackAnim" |
|
||||
size="small">开始动画 |
|
||||
</el-button> |
|
||||
<el-button |
|
||||
@click="pauseTrackAnim" |
|
||||
size="small">暂停动画 |
|
||||
</el-button> |
|
||||
<el-button |
|
||||
@click="resumeTrackAnim" |
|
||||
size="small">继续动画 |
|
||||
</el-button> |
|
||||
</div> |
|
||||
</el-card> |
|
||||
</div> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
import AMapLoader from '@amap/amap-jsapi-loader'; |
|
||||
import EleMapPicker from 'ele-admin/packages/ele-map-picker'; |
|
||||
|
|
||||
export default { |
|
||||
name: 'ExtensionMap', |
|
||||
components: {EleMapPicker}, |
|
||||
data() { |
|
||||
return { |
|
||||
// 表单数据 |
|
||||
form: {}, |
|
||||
// 是否显示地图选择弹窗 |
|
||||
showMapPicker: false, |
|
||||
showMapPicker2: false, |
|
||||
// 小车的marker |
|
||||
carMarker: null, |
|
||||
// 轨迹路线 |
|
||||
lineData: [ |
|
||||
[116.478935, 39.997761], |
|
||||
[116.478939, 39.997825], |
|
||||
[116.478912, 39.998549], |
|
||||
[116.478912, 39.998549], |
|
||||
[116.478998, 39.998555], |
|
||||
[116.478998, 39.998555], |
|
||||
[116.479282, 39.99856], |
|
||||
[116.479658, 39.998528], |
|
||||
[116.480151, 39.998453], |
|
||||
[116.480784, 39.998302], |
|
||||
[116.480784, 39.998302], |
|
||||
[116.481149, 39.998184], |
|
||||
[116.481573, 39.997997], |
|
||||
[116.481863, 39.997846], |
|
||||
[116.482072, 39.997718], |
|
||||
[116.482362, 39.997718], |
|
||||
[116.483633, 39.998935], |
|
||||
[116.48367, 39.998968], |
|
||||
[116.484648, 39.999861] |
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
mounted() { |
|
||||
this.renderLocationMap(); |
|
||||
this.renderTrackMap(); |
|
||||
}, |
|
||||
methods: { |
|
||||
/* 地图选择后回调 */ |
|
||||
onChoose(location) { |
|
||||
this.showMapPicker = false; |
|
||||
this.showMapPicker2 = false; |
|
||||
this.form.address = location.name + ' ' + location.address; |
|
||||
this.form.jinweidu = [location.lng, location.lat].join(','); |
|
||||
this.form.location = location.city.province + '/' + location.city.city + '/' + location.city.district; |
|
||||
console.log(location); |
|
||||
}, |
|
||||
/* 渲染官网底部地图 */ |
|
||||
renderLocationMap() { |
|
||||
AMapLoader.load({ |
|
||||
'key': '006d995d433058322319fa797f2876f5', |
|
||||
'version': '2.0', |
|
||||
'plugins': ['AMap.InfoWindow', 'AMap.Marker'] |
|
||||
}).then((AMap) => { |
|
||||
// 渲染地图 |
|
||||
let map = new AMap.Map(this.$refs.locationMap, { |
|
||||
// 初缩放级别 |
|
||||
zoom: 13, |
|
||||
// 初始中心点 |
|
||||
center: [114.346084, 30.511215 + 0.005] |
|
||||
}); |
|
||||
// 创建信息窗体 |
|
||||
let infoWindow = new AMap.InfoWindow({ |
|
||||
content: ` |
|
||||
<div style="color: #333;"> |
|
||||
<div style="padding: 5px;font-size: 16px;">武汉易云智科技有限公司</div> |
|
||||
<div style="padding: 0 5px;">地址:湖北省武汉市洪山区雄楚大道222号</div> |
|
||||
<div style="padding: 0 5px;">电话:020-123456789</div> |
|
||||
<a style="padding: 8px 5px 0;text-decoration: none;display: inline-block;" |
|
||||
class="ele-text-primary" |
|
||||
href="//uri.amap.com/marker?position=114.346084,30.511215&name=武汉易云智科技有限公司" |
|
||||
target="_blank">到这里去<i class="el-icon-right"></i> |
|
||||
</a> |
|
||||
</div> |
|
||||
` |
|
||||
}); |
|
||||
infoWindow.open(map, [114.346084, 30.511215]); |
|
||||
let icon = new AMap.Icon({ |
|
||||
size: new AMap.Size(25, 34), |
|
||||
image: '//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-red.png', |
|
||||
imageSize: new AMap.Size(25, 34) |
|
||||
}); |
|
||||
let marker = new AMap.Marker({ |
|
||||
icon: icon, |
|
||||
position: [114.346084, 30.511215], |
|
||||
offset: new AMap.Pixel(-12, -28) |
|
||||
}); |
|
||||
marker.setMap(map); |
|
||||
marker.on('click', () => { |
|
||||
infoWindow.open(map); |
|
||||
}); |
|
||||
}).catch(e => { |
|
||||
console.error(e); |
|
||||
}); |
|
||||
}, |
|
||||
/* 渲染轨迹回放地图 */ |
|
||||
renderTrackMap() { |
|
||||
AMapLoader.load({ |
|
||||
'key': '006d995d433058322319fa797f2876f5', |
|
||||
'version': '2.0', |
|
||||
'plugins': ['AMap.MoveAnimation', 'AMap.Marker', 'AMap.Polyline'] |
|
||||
}).then((AMap) => { |
|
||||
// 渲染地图 |
|
||||
let map = new AMap.Map(this.$refs.trackMap, { |
|
||||
zoom: 17, |
|
||||
center: [116.478935, 39.997761], |
|
||||
}); |
|
||||
|
|
||||
// 创建小车marker |
|
||||
this.carMarker = new AMap.Marker({ |
|
||||
map: map, |
|
||||
position: [116.478935, 39.997761], |
|
||||
icon: 'https://a.amap.com/jsapi_demos/static/demo-center-v2/car.png', |
|
||||
offset: new AMap.Pixel(-13, -26), |
|
||||
}); |
|
||||
|
|
||||
// 绘制轨迹 |
|
||||
new AMap.Polyline({ |
|
||||
map: map, |
|
||||
path: this.lineData, |
|
||||
showDir: true, |
|
||||
strokeColor: '#28F', // 线颜色 |
|
||||
strokeOpacity: 1, // 线透明度 |
|
||||
strokeWeight: 6, // 线宽 |
|
||||
// strokeStyle: 'solid' // 线样式 |
|
||||
}); |
|
||||
|
|
||||
// 通过的轨迹 |
|
||||
let passedPolyline = new AMap.Polyline({ |
|
||||
map: map, |
|
||||
showDir: true, |
|
||||
strokeColor: '#4B5', // 线颜色 |
|
||||
strokeOpacity: 1, // 线透明度 |
|
||||
strokeWeight: 6, // 线宽 |
|
||||
}); |
|
||||
|
|
||||
// 小车移动回调 |
|
||||
this.carMarker.on('moving', function (e) { |
|
||||
passedPolyline.setPath(e.passedPath); |
|
||||
}); |
|
||||
|
|
||||
// 地图自适应 |
|
||||
map.setFitView(); |
|
||||
}).catch(e => { |
|
||||
console.error(e); |
|
||||
}); |
|
||||
}, |
|
||||
/* 开始轨迹回放动画 */ |
|
||||
startTrackAnim() { |
|
||||
this.carMarker.stopMove(); |
|
||||
this.carMarker.moveAlong(this.lineData, { |
|
||||
duration: 200, |
|
||||
autoRotation: true, |
|
||||
}); |
|
||||
}, |
|
||||
/* 暂停轨迹回放动画 */ |
|
||||
pauseTrackAnim() { |
|
||||
this.carMarker.pauseMove(); |
|
||||
}, |
|
||||
/* 继续开始轨迹回放动画 */ |
|
||||
resumeTrackAnim() { |
|
||||
this.carMarker.resumeMove(); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style scoped> |
|
||||
</style> |
|
||||
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue