From b43674f7af8206cd868131193eb7f3677c8a80a3 Mon Sep 17 00:00:00 2001 From: "DESKTOP-7NNHK5O\\Administrator" <1601745371@qq.com> Date: Sun, 31 Dec 2023 11:51:22 +0800 Subject: [PATCH 1/4] fix: update apis url --- .../mall-cook-platform/public/favicon.ico | Bin 4286 -> 270398 bytes .../mall-cook-platform/src/config/global.js | 4 ++-- packages/mall-cook-platform/vue.config.js | 14 ++++++++++++++ .../mall-cook-template/src/utils/request.js | 2 +- 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/packages/mall-cook-platform/public/favicon.ico b/packages/mall-cook-platform/public/favicon.ico index df36fcfb72584e00488330b560ebcf34a41c64c2..b0d73a9a526278535de562a0326ee19e2f1aca86 100644 GIT binary patch literal 270398 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 diff --git a/packages/mall-cook-platform/src/config/global.js b/packages/mall-cook-platform/src/config/global.js index 0fbc5a7..55e6d54 100644 --- a/packages/mall-cook-platform/src/config/global.js +++ b/packages/mall-cook-platform/src/config/global.js @@ -6,6 +6,6 @@ * @LastEditTime: 2022-11-02 09:10:53 */ export default { - baseApi: 'http://110.41.150.71:3000/', // 后端接口地址 - viewUrl: 'http://110.41.150.71:9000/#/' // iframe嵌套的H5地址,本地开发可改为本地启动的H5地址 + baseApi: '/mall-cook/api/', // 后端接口地址 + viewUrl: 'http://139.196.223.93:4001/#/' // iframe嵌套的H5地址,本地开发可改为本地启动的H5地址 } diff --git a/packages/mall-cook-platform/vue.config.js b/packages/mall-cook-platform/vue.config.js index a65d8cc..fecb62e 100644 --- a/packages/mall-cook-platform/vue.config.js +++ b/packages/mall-cook-platform/vue.config.js @@ -78,5 +78,19 @@ module.exports = { .before('postcss-loader') // this makes it work. .options({ remUnit: 37.5, remPrecision: 8 }) .end() + }, + + devServer: { + port: '8081', // 设置端口号 + proxy: { + '/api': { + target: 'http://139.196.223.93', //API服务器的地址 + ws: true, //代理websockets + changeOrigin: true, // 是否跨域,虚拟的站点需要更管origin + pathRewrite: { + '^/api': '', + } + } + }, } } diff --git a/packages/mall-cook-template/src/utils/request.js b/packages/mall-cook-template/src/utils/request.js index 0cc741c..23e7a71 100644 --- a/packages/mall-cook-template/src/utils/request.js +++ b/packages/mall-cook-template/src/utils/request.js @@ -5,7 +5,7 @@ * @LastEditors: WangYuan * @LastEditTime: 2022-11-01 18:35:35 */ -const baseUrl = 'http://110.41.150.71:3000' +const baseUrl = 'http://139.196.223.93/mall-cook/api' // const baseUrl = 'https://www.lanshan-h5.cn' const request = (url, data, method = 'POST') => { From 19afbb0cc4dd42446bfdde11e55112de9f1d0f92 Mon Sep 17 00:00:00 2001 From: Cloyd Lau <31238760+cloydlau@users.noreply.github.com> Date: Sat, 30 Dec 2023 12:38:42 +0800 Subject: [PATCH 2/4] fix(electron): build error: 'defineComponent' is not exported by vue-demi/lib/index.mjs --- .../mall-cook-platform-electron/package.json | 1 - .../vite.config.ts | 20 ++++++++++++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/packages/mall-cook-platform-electron/package.json b/packages/mall-cook-platform-electron/package.json index 8d235c7..4db9383 100644 --- a/packages/mall-cook-platform-electron/package.json +++ b/packages/mall-cook-platform-electron/package.json @@ -87,7 +87,6 @@ "sass-loader": "^13.2.0", "typescript": "^4.6.4", "vite": "^3.2.3", - "vite-plugin-externals": "^0.6.2", "vite-plugin-vue2": "^2.0.3", "vue-tsc": "^1.0.9" } diff --git a/packages/mall-cook-platform-electron/vite.config.ts b/packages/mall-cook-platform-electron/vite.config.ts index 79848ab..1372139 100644 --- a/packages/mall-cook-platform-electron/vite.config.ts +++ b/packages/mall-cook-platform-electron/vite.config.ts @@ -9,7 +9,7 @@ import { defineConfig } from 'vite' import type { UserConfig, ConfigEnv } from 'vite' import { createVuePlugin } from 'vite-plugin-vue2' -import { viteExternalsPlugin } from 'vite-plugin-externals' +// import { viteExternalsPlugin } from 'vite-plugin-externals' import { resolve } from 'path' export default defineConfig(({ command, mode }: ConfigEnv): UserConfig=>{ @@ -18,10 +18,10 @@ export default defineConfig(({ command, mode }: ConfigEnv): UserConfig=>{ publicDir: resolve(__dirname, './dist'), plugins: [ createVuePlugin(), - viteExternalsPlugin({ + /* viteExternalsPlugin({ 'element-ui': 'ELEMENT', vue: 'Vue', - }) + }) */ ], css: { preprocessorOptions: { @@ -37,5 +37,19 @@ export default defineConfig(({ command, mode }: ConfigEnv): UserConfig=>{ '@': resolve(__dirname, 'src/render') }, }, + build: { + rollupOptions: { + external: [ + 'vue', + 'element-ui', + ], + output: { + globals: { + 'vue': 'Vue', + 'element-ui': 'ELEMENT', + }, + }, + }, + }, } }) From 417f8a40d58c99ead5e9c483ec16c21094e2d0b0 Mon Sep 17 00:00:00 2001 From: Cloyd Lau <31238760+cloydlau@users.noreply.github.com> Date: Sat, 30 Dec 2023 12:16:46 +0800 Subject: [PATCH 3/4] =?UTF-8?q?feat(electron):=20=E5=B0=86=E5=B7=B2?= =?UTF-8?q?=E5=BA=9F=E5=BC=83=E7=9A=84=20imgpond=E3=80=81pic-viewer=20?= =?UTF-8?q?=E5=92=8C=20minimce=20=E5=8D=87=E7=BA=A7=E4=B8=BA=20faim?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mall-cook-platform-electron/package.json | 8 +- .../mall-cook-platform-electron/src/main.js | 40 ++--- .../src/render/components/MiniMCE/index.js | 117 -------------- .../src/render/components/MiniMCE/index.scss | 3 - .../MiniMCE/plugins/InsertImage/index.js | 22 --- .../MiniMCE/plugins/InsertImage/index.vue | 77 --------- .../MiniMCE/plugins/InsertWord/index.js | 22 --- .../MiniMCE/plugins/InsertWord/index.vue | 149 ------------------ .../MiniMCE/zh-Hans/langs/zh-Hans.js | 1 - .../src/render/config/global.js | 2 + .../config-template/SchemaUploadConfig.vue | 4 +- .../components/SchemaUpload/index.vue | 6 +- .../render/faim/FormDialog/globalConfig.js | 5 + .../render/faim/ImageUpload/globalConfig.js | 13 ++ .../src/render/faim/ImageUpload/index.scss | 46 ++++++ .../src/render/faim/RichText/globalConfig.js | 127 +++++++++++++++ .../src/render/faim/RichText/index.scss | 30 ++++ .../src/render/faim/RichText/langs/zh-Hans.js | 1 + .../faim/RichText/plugins/InsertFile.vue | 126 +++++++++++++++ .../faim/RichText/plugins/InsertWord.js | 68 ++++++++ .../src/render/faim/upload.js | 15 ++ .../pages/mall/goods/goods-manager/edit.vue | 6 +- .../pages/mall/goods/group-manager/edit.vue | 6 +- .../src/render/scss/imgpond.scss | 30 ---- .../src/render/scss/index.scss | 3 +- .../vite.config.ts | 3 + 26 files changed, 466 insertions(+), 464 deletions(-) delete mode 100644 packages/mall-cook-platform-electron/src/render/components/MiniMCE/index.js delete mode 100644 packages/mall-cook-platform-electron/src/render/components/MiniMCE/index.scss delete mode 100644 packages/mall-cook-platform-electron/src/render/components/MiniMCE/plugins/InsertImage/index.js delete mode 100644 packages/mall-cook-platform-electron/src/render/components/MiniMCE/plugins/InsertImage/index.vue delete mode 100644 packages/mall-cook-platform-electron/src/render/components/MiniMCE/plugins/InsertWord/index.js delete mode 100644 packages/mall-cook-platform-electron/src/render/components/MiniMCE/plugins/InsertWord/index.vue delete mode 100644 packages/mall-cook-platform-electron/src/render/components/MiniMCE/zh-Hans/langs/zh-Hans.js create mode 100644 packages/mall-cook-platform-electron/src/render/faim/FormDialog/globalConfig.js create mode 100644 packages/mall-cook-platform-electron/src/render/faim/ImageUpload/globalConfig.js create mode 100644 packages/mall-cook-platform-electron/src/render/faim/ImageUpload/index.scss create mode 100644 packages/mall-cook-platform-electron/src/render/faim/RichText/globalConfig.js create mode 100644 packages/mall-cook-platform-electron/src/render/faim/RichText/index.scss create mode 100644 packages/mall-cook-platform-electron/src/render/faim/RichText/langs/zh-Hans.js create mode 100644 packages/mall-cook-platform-electron/src/render/faim/RichText/plugins/InsertFile.vue create mode 100644 packages/mall-cook-platform-electron/src/render/faim/RichText/plugins/InsertWord.js create mode 100644 packages/mall-cook-platform-electron/src/render/faim/upload.js delete mode 100644 packages/mall-cook-platform-electron/src/render/scss/imgpond.scss diff --git a/packages/mall-cook-platform-electron/package.json b/packages/mall-cook-platform-electron/package.json index 4db9383..247d145 100644 --- a/packages/mall-cook-platform-electron/package.json +++ b/packages/mall-cook-platform-electron/package.json @@ -49,7 +49,7 @@ }, "dependencies": { "axios": "^0.21.1", - "axios-shortcut": "~0.0.1", + "axios-shortcut": "^0.1.3", "compression-webpack-plugin": "5.0.1", "core-js": "^3.6.5", "cross-env": "^7.0.3", @@ -58,17 +58,15 @@ "electron-window-state": "^5.0.3", "element-ui": "^2.15.13", "element-verify": "^0.2.3", - "imgpond": "~0.6.0", + "faim": "^0.6.2", "jr-qrcode": "^1.1.4", "js-cookie": "^3.0.0", "lodash": "^4.17.21", "lru-cache": "^6.0.0", "mammoth": "^1.4.21", - "minimce": "^0.8.3", "moment": "^2.29.4", - "pic-viewer": "~0.5.0", "postcss-plugin-px2rem": "^0.8.1", - "tinymce": "^6.3.2", + "tinymce": "^6.8.2", "vue": "^2.7.8", "vue-json-viewer": "^2.2.19", "vue-router": "^3.5.2", diff --git a/packages/mall-cook-platform-electron/src/main.js b/packages/mall-cook-platform-electron/src/main.js index ed87309..35e811d 100644 --- a/packages/mall-cook-platform-electron/src/main.js +++ b/packages/mall-cook-platform-electron/src/main.js @@ -39,7 +39,6 @@ import '@/scss/element/index.css' import draggable from 'vuedraggable' import ElementVerify from 'element-verify' import _ from 'lodash' -import global from '@/config/global' import '@/utils/schemaRegister.js' @@ -68,39 +67,30 @@ for (let k in axiosShortcut) { } /** - * 图片预览 + * String.prototype.replaceAll polyfill */ -import 'pic-viewer/dist/style.css' -import PicViewer from 'pic-viewer' -Vue.use(PicViewer) +import 'core-js/es/string/replace-all' + +/** + * 表单对话框(目前仅用于富文本的插件) + */ +import FaFormDialog from 'faim/dist/components/FormDialog/index.vue' +import globalConfigForFaFormDialog from '@/faim/FormDialog/globalConfig' +Vue.use(FaFormDialog, globalConfigForFaFormDialog) /** * 图片上传 */ -import 'imgpond/dist/style.css' -import Imgpond from 'imgpond' - -Vue.use(Imgpond, { - upload: (file, context) => new Promise((resolve, reject) => { - Vue.prototype.$POST.upload(global.baseApi + 'upload', ({ - file, - ...context.$attrs.requestParam, - }), { - baseURL: '', - timeout: 20000, - }).then(res => { - resolve(res.data) - }).catch(e => { - reject(e) - }) - }), -}) +import FaImageUpload from 'faim/dist/components/ImageUpload/index.vue' +import globalConfigForFaImageUpload from '@/faim/ImageUpload/globalConfig' +Vue.use(FaImageUpload, globalConfigForFaImageUpload) /** * 富文本 */ -import useMiniMCE from '@/components/MiniMCE' -useMiniMCE() +import FaRichText from 'faim/dist/components/RichText/index' +import globalConfigForFaRichText from '@/faim/RichText/globalConfig' +Vue.use(FaRichText, globalConfigForFaRichText) Vue.prototype.$jump = jump Vue.prototype.$getWrapStyle = getWrapStyle diff --git a/packages/mall-cook-platform-electron/src/render/components/MiniMCE/index.js b/packages/mall-cook-platform-electron/src/render/components/MiniMCE/index.js deleted file mode 100644 index 64af6d5..0000000 --- a/packages/mall-cook-platform-electron/src/render/components/MiniMCE/index.js +++ /dev/null @@ -1,117 +0,0 @@ -import Vue from 'vue' - -import './index.scss' -import MiniMCE from 'minimce' - -/** - * 浅色模式 - */ -import 'tinymce/skins/ui/oxide/skin.min.css' // 皮肤 -import 'tinymce/themes/silver/theme' // 主题 -import 'tinymce/icons/default/icons' // 图标 -import './zh-Hans/langs/zh-Hans' // 语言(非必须,默认英文,下载地址: https://www.tiny.cloud/get-tiny/language-packages) - -// VITE 不支持raw-loader -// import contentCSS from '!!raw-loader!tinymce/skins/content/default/content.min.css' -// import contentUICSS from '!!raw-loader!tinymce/skins/ui/oxide/content.min.css' - -/** - * 深色模式 - */ -// import 'tinymce/skins/ui/oxide-dark/skin.min.css' // 皮肤 -// import contentCSS from '!!raw-loader!tinymce/skins/content/dark/content.min.css' -// import contentUICSS from '!!raw-loader!tinymce/skins/ui/oxide-dark/content.min.css' - -/** - * 主题(可更换) - */ -import 'tinymce/themes/silver' - -/** - * 图标(可更换) - */ -import 'tinymce/icons/default' - -/** - * 自定义内容样式(非必须) - * 该样式仅在生产侧有效,不包含在生成的 HTML 文本中 - * 可拷贝至展示侧使用 - */ -const contentCustomCSS = ` - .mce-content-body { - line-height: 1.8; - overflow: auto; - } - p { - margin-block-end: 0; - margin-block-start: 0; - } - img { - max-width: 100%; - height: auto !important; - vertical-align: middle; - } -` - -/** - * 自定义插件(非必须) - */ -import InsertWord from './plugins/InsertWord/index' -import InsertImage from './plugins/InsertImage/index' -import global from '@render/config/global' - -export default function () { - Vue.use(MiniMCE, { - options: { - language: 'zh-Hans', - content_style: [contentCustomCSS].join('\n'), - // content_style: [contentCSS, contentUICSS, contentCustomCSS].join('\n'), - menu: { - insert: { - title: 'Insert', - items: 'localimage docx | image link media template codesample inserttable | charmap emoticons hr | pagebreak nonbreaking anchor toc | insertdatetime' - }, - }, - setup(editor) { - const insertImage = InsertImage({ editor }) - editor.ui.registry.addMenuItem('localimage', { - text: '本地图片', - icon: 'image', - onAction: () => { - insertImage.$children[0].open() - } - }) - - const insertWord = InsertWord({ editor }) - editor.ui.registry.addMenuItem('docx', { - text: 'Word 文档', - icon: 'new-document', - onAction: () => { - insertWord.$children[0].open() - } - }) - }, - // 用于复制粘贴的图片和 TinyMCE 自带的图片上传 - images_upload_handler: (blobInfo, progress) => - new Promise((resolve, reject) => { - const loading = Vue.prototype.$loading() - const blob = blobInfo.blob() - const file = new File([blob], blobInfo.filename(), { type: blob.type }) - - Vue.prototype.$POST.upload(global.baseApi + 'upload', { - file, - }).then(res => { - if (typeof res.data === 'string') { - resolve(res.data) - } else { - reject(res.message) - } - }).catch(err => { - reject(String(err)) - }).finally(() => { - loading.close() - }) - }), - } - }) -} diff --git a/packages/mall-cook-platform-electron/src/render/components/MiniMCE/index.scss b/packages/mall-cook-platform-electron/src/render/components/MiniMCE/index.scss deleted file mode 100644 index fd9368c..0000000 --- a/packages/mall-cook-platform-electron/src/render/components/MiniMCE/index.scss +++ /dev/null @@ -1,3 +0,0 @@ -.tox-tinymce { - border-radius: 4px !important; // 与 Element 保持一致 -} diff --git a/packages/mall-cook-platform-electron/src/render/components/MiniMCE/plugins/InsertImage/index.js b/packages/mall-cook-platform-electron/src/render/components/MiniMCE/plugins/InsertImage/index.js deleted file mode 100644 index 7bd2c6a..0000000 --- a/packages/mall-cook-platform-electron/src/render/components/MiniMCE/plugins/InsertImage/index.js +++ /dev/null @@ -1,22 +0,0 @@ -import Component from './index.vue' -import Vue from 'vue' -//import store from '@/store' - -function mount (props) { - const el = document.createElement('div') - - const Constructor = Vue.extend({ - render: h => h(Component, { props }), - //store, - }) - - const vm = new Constructor({ - el, - }) - - vm.$mount(document.body) - - return vm -} - -export default mount diff --git a/packages/mall-cook-platform-electron/src/render/components/MiniMCE/plugins/InsertImage/index.vue b/packages/mall-cook-platform-electron/src/render/components/MiniMCE/plugins/InsertImage/index.vue deleted file mode 100644 index 8fab58a..0000000 --- a/packages/mall-cook-platform-electron/src/render/components/MiniMCE/plugins/InsertImage/index.vue +++ /dev/null @@ -1,77 +0,0 @@ - - - - - diff --git a/packages/mall-cook-platform-electron/src/render/components/MiniMCE/plugins/InsertWord/index.js b/packages/mall-cook-platform-electron/src/render/components/MiniMCE/plugins/InsertWord/index.js deleted file mode 100644 index 7bd2c6a..0000000 --- a/packages/mall-cook-platform-electron/src/render/components/MiniMCE/plugins/InsertWord/index.js +++ /dev/null @@ -1,22 +0,0 @@ -import Component from './index.vue' -import Vue from 'vue' -//import store from '@/store' - -function mount (props) { - const el = document.createElement('div') - - const Constructor = Vue.extend({ - render: h => h(Component, { props }), - //store, - }) - - const vm = new Constructor({ - el, - }) - - vm.$mount(document.body) - - return vm -} - -export default mount diff --git a/packages/mall-cook-platform-electron/src/render/components/MiniMCE/plugins/InsertWord/index.vue b/packages/mall-cook-platform-electron/src/render/components/MiniMCE/plugins/InsertWord/index.vue deleted file mode 100644 index 960a1d1..0000000 --- a/packages/mall-cook-platform-electron/src/render/components/MiniMCE/plugins/InsertWord/index.vue +++ /dev/null @@ -1,149 +0,0 @@ - - - - - diff --git a/packages/mall-cook-platform-electron/src/render/components/MiniMCE/zh-Hans/langs/zh-Hans.js b/packages/mall-cook-platform-electron/src/render/components/MiniMCE/zh-Hans/langs/zh-Hans.js deleted file mode 100644 index 7aaf8a6..0000000 --- a/packages/mall-cook-platform-electron/src/render/components/MiniMCE/zh-Hans/langs/zh-Hans.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.addI18n("zh-Hans",{"Redo":"\u91cd\u505a","Undo":"\u64a4\u9500","Cut":"\u526a\u5207","Copy":"\u590d\u5236","Paste":"\u7c98\u8d34","Select all":"\u5168\u9009","New document":"\u65b0\u5efa\u6587\u6863","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","Remove":"\u79fb\u9664","Align left":"\u5de6\u5bf9\u9f50","Align center":"\u5c45\u4e2d\u5bf9\u9f50","Align right":"\u53f3\u5bf9\u9f50","No alignment":"\u672a\u5bf9\u9f50","Justify":"\u4e24\u7aef\u5bf9\u9f50","Bullet list":"\u65e0\u5e8f\u5217\u8868","Numbered list":"\u6709\u5e8f\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","Headings":"\u6807\u9898","Heading 1":"\u4e00\u7ea7\u6807\u9898","Heading 2":"\u4e8c\u7ea7\u6807\u9898","Heading 3":"\u4e09\u7ea7\u6807\u9898","Heading 4":"\u56db\u7ea7\u6807\u9898","Heading 5":"\u4e94\u7ea7\u6807\u9898","Heading 6":"\u516d\u7ea7\u6807\u9898","Preformatted":"\u9884\u5148\u683c\u5f0f\u5316\u7684","Div":"Div","Pre":"\u524d\u8a00","Code":"\u4ee3\u7801","Paragraph":"\u6bb5\u843d","Blockquote":"\u5f15\u6587\u533a\u5757","Inline":"\u6587\u672c","Blocks":"\u6837\u5f0f","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\u4f53\u5927\u5c0f","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","Uploading image":"\u4e0a\u4f20\u56fe\u7247","Block":"\u5757","Align":"\u5bf9\u9f50","Default":"\u9884\u8bbe","Circle":"\u7a7a\u5fc3\u5706","Disc":"\u5b9e\u5fc3\u5706","Square":"\u5b9e\u5fc3\u65b9\u5757","Lower Alpha":"\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd","Lower Greek":"\u5c0f\u5199\u5e0c\u814a\u5b57\u6bcd","Lower Roman":"\u5c0f\u5199\u7f57\u9a6c\u6570\u5b57","Upper Alpha":"\u5927\u5199\u82f1\u6587\u5b57\u6bcd","Upper Roman":"\u5927\u5199\u7f57\u9a6c\u6570\u5b57","Anchor...":"\u951a\u70b9...","Anchor":"\u951a\u70b9","Name":"\u540d\u79f0","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID\u5e94\u8be5\u4ee5\u82f1\u6587\u5b57\u6bcd\u5f00\u5934\uff0c\u540e\u9762\u53ea\u80fd\u6709\u82f1\u6587\u5b57\u6bcd\u3001\u6570\u5b57\u3001\u7834\u6298\u53f7\u3001\u70b9\u3001\u5192\u53f7\u6216\u4e0b\u5212\u7ebf\u3002","You have unsaved changes are you sure you want to navigate away?":"\u4f60\u8fd8\u6709\u6587\u6863\u5c1a\u672a\u4fdd\u5b58\uff0c\u786e\u5b9a\u8981\u79bb\u5f00\uff1f","Restore last draft":"\u6062\u590d\u4e0a\u6b21\u7684\u8349\u7a3f","Special character...":"\u7279\u6b8a\u5b57\u7b26...","Special Character":"\u7279\u6b8a\u5b57\u7b26","Source code":"\u6e90\u4ee3\u7801","Insert/Edit code sample":"\u63d2\u5165/\u7f16\u8f91\u4ee3\u7801\u793a\u4f8b","Language":"\u8bed\u8a00","Code sample...":"\u793a\u4f8b\u4ee3\u7801...","Left to right":"\u7531\u5de6\u5230\u53f3","Right to left":"\u7531\u53f3\u5230\u5de6","Title":"\u6807\u9898","Fullscreen":"\u5168\u5c4f","Action":"\u52a8\u4f5c","Shortcut":"\u5feb\u6377\u65b9\u5f0f","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","Alternative description":"\u66ff\u4ee3\u63cf\u8ff0","Accessibility":"\u8f85\u52a9\u529f\u80fd","Image is decorative":"\u56fe\u50cf\u662f\u88c5\u9970\u6027\u7684","Source":"\u6e90","Dimensions":"\u5c3a\u5bf8","Constrain proportions":"\u4fdd\u6301\u6bd4\u4f8b","General":"\u4e00\u822c","Advanced":"\u9ad8\u7ea7","Style":"\u6837\u5f0f","Vertical space":"\u5782\u76f4\u95f4\u8ddd","Horizontal space":"\u6c34\u5e73\u95f4\u8ddd","Border":"\u6846\u7ebf","Insert image":"\u63d2\u5165\u56fe\u7247","Image...":"\u56fe\u7247...","Image list":"\u56fe\u7247\u6e05\u5355","Resize":"\u8c03\u6574\u5927\u5c0f","Insert date/time":"\u63d2\u5165\u65e5\u671f/\u65f6\u95f4","Date/time":"\u65e5\u671f/\u65f6\u95f4","Insert/edit link":"\u63d2\u5165/\u7f16\u8f91\u94fe\u63a5","Text to display":"\u8981\u663e\u793a\u7684\u6587\u672c","Url":"\u5730\u5740","Open link in...":"\u94fe\u63a5\u6253\u5f00\u4f4d\u7f6e...","Current window":"\u5f53\u524d\u7a97\u53e3","None":"\u65e0","New window":"\u65b0\u7a97\u53e3","Open link":"\u6253\u5f00\u94fe\u63a5","Remove link":"\u79fb\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","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"\u60a8\u8f93\u5165\u7684 URL \u4f3c\u4e4e\u662f\u4e00\u4e2a\u5916\u90e8\u94fe\u63a5\u3002\u60a8\u60f3\u6dfb\u52a0\u6240\u9700\u7684 https:// \u524d\u7f00\u5417\uff1f","Link list":"\u94fe\u63a5\u6e05\u5355","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","Print...":"\u6253\u5370...","Save":"\u4fdd\u5b58","Find":"\u5bfb\u627e","Replace with":"\u66ff\u6362\u4e3a","Replace":"\u66ff\u6362","Replace all":"\u66ff\u6362\u5168\u90e8","Previous":"\u4e0a\u4e00\u4e2a","Next":"\u4e0b\u4e00\u4e2a","Find and Replace":"\u67e5\u627e\u548c\u66ff\u6362","Find and replace...":"\u67e5\u627e\u5e76\u66ff\u6362...","Could not find the specified string.":"\u672a\u627e\u5230\u641c\u7d22\u5185\u5bb9\u3002","Match case":"\u5927\u5c0f\u5199\u5339\u914d","Find whole words only":"\u5168\u5b57\u5339\u914d","Find in selection":"\u5728\u9009\u533a\u4e2d\u67e5\u627e","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":"\u680f\u76ee","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\u884c","Insert row after":"\u5728\u4e0b\u65b9\u63d2\u5165\u884c","Delete row":"\u5220\u9664\u884c","Row properties":"\u884c\u5c5e\u6027","Cut row":"\u526a\u5207\u884c","Cut column":"\u526a\u5207\u5217","Copy row":"\u590d\u5236\u884c","Copy column":"\u590d\u5236\u5217","Paste row before":"\u7c98\u8d34\u884c\u5230\u4e0a\u65b9","Paste column before":"\u7c98\u8d34\u6b64\u5217\u524d","Paste row after":"\u7c98\u8d34\u884c\u5230\u4e0b\u65b9","Paste column after":"\u7c98\u8d34\u540e\u9762\u7684\u5217","Insert column before":"\u5728\u5de6\u4fa7\u63d2\u5165\u5217","Insert column after":"\u5728\u53f3\u4fa7\u63d2\u5165\u5217","Delete column":"\u5220\u9664\u5217","Cols":"\u5217","Rows":"\u884c\u6570","Width":"\u5bbd\u5ea6","Height":"\u9ad8\u5ea6","Cell spacing":"\u5355\u5143\u683c\u5916\u95f4\u8ddd","Cell padding":"\u5355\u5143\u683c\u5185\u8fb9\u8ddd","Row clipboard actions":"\u884c\u526a\u8d34\u677f\u64cd\u4f5c","Column clipboard actions":"\u5217\u526a\u8d34\u677f\u64cd\u4f5c","Table styles":"\u8868\u683c\u6837\u5f0f","Cell styles":"\u5355\u5143\u683c\u6837\u5f0f","Column header":"\u5217\u6807\u9898","Row header":"\u884c\u5934","Table caption":"\u8868\u683c\u6807\u9898","Caption":"\u6807\u9898","Show caption":"\u663e\u793a\u6807\u9898","Left":"\u5de6","Center":"\u5c45\u4e2d","Right":"\u53f3","Cell type":"\u50a8\u5b58\u683c\u522b","Scope":"\u8303\u56f4","Alignment":"\u5bf9\u9f50","Horizontal align":"\u6c34\u5e73\u5bf9\u9f50","Vertical align":"\u5782\u76f4\u5bf9\u9f50","Top":"\u4e0a\u65b9\u5bf9\u9f50","Middle":"\u5c45\u4e2d\u5bf9\u9f50","Bottom":"\u4e0b\u65b9\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":"\u6846\u7ebf\u989c\u8272","Solid":"\u5b9e\u7ebf","Dotted":"\u865a\u7ebf","Dashed":"\u865a\u7ebf","Double":"\u53cc\u7cbe\u5ea6","Groove":"\u51f9\u69fd","Ridge":"\u6d77\u810a\u5ea7","Inset":"\u5d4c\u5165","Outset":"\u5916\u7f6e","Hidden":"\u9690\u85cf","Insert template...":"\u63d2\u5165\u6a21\u677f...","Templates":"\u6a21\u677f","Template":"\u6a21\u677f","Insert Template":"\u63d2\u5165\u6a21\u677f","Text color":"\u6587\u672c\u989c\u8272","Background color":"\u80cc\u666f\u989c\u8272","Custom...":"\u81ea\u5b9a\u4e49......","Custom color":"\u81ea\u5b9a\u4e49\u989c\u8272","No color":"\u65e0","Remove color":"\u79fb\u9664\u989c\u8272","Show blocks":"\u663e\u793a\u533a\u5757\u8fb9\u6846","Show invisible characters":"\u663e\u793a\u4e0d\u53ef\u89c1\u5b57\u7b26","Word count":"\u5b57\u6570","Count":"\u8ba1\u6570","Document":"\u6587\u6863","Selection":"\u9009\u62e9","Words":"\u5355\u8bcd","Words: {0}":"\u5b57\u6570\uff1a{0}","{0} words":"{0} \u5b57","File":"\u6587\u4ef6","Edit":"\u7f16\u8f91","Insert":"\u63d2\u5165","View":"\u67e5\u770b","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":"\u7f16\u8f91\u533a\u3002\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":"\u5bcc\u6587\u672c\u533a\u57df","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","Emojis":"Emojis","Emojis...":"Emojis...","Loading emojis...":"\u6b63\u5728\u52a0\u8f7dEmojis...","Could not load emojis":"\u65e0\u6cd5\u52a0\u8f7dEmojis","People":"\u4eba\u7c7b","Animals and Nature":"\u52a8\u7269\u548c\u81ea\u7136","Food and Drink":"\u98df\u7269\u548c\u996e\u54c1","Activity":"\u6d3b\u52a8","Travel and Places":"\u65c5\u6e38\u548c\u5730\u70b9","Objects":"\u7269\u4ef6","Flags":"\u65d7\u5e1c","Characters":"\u5b57\u7b26","Characters (no spaces)":"\u5b57\u7b26(\u65e0\u7a7a\u683c)","{0} characters":"{0} \u4e2a\u5b57\u7b26","Error: Form submit field collision.":"\u9519\u8bef: \u8868\u5355\u63d0\u4ea4\u5b57\u6bb5\u51b2\u7a81\u3002","Error: No form element found.":"\u9519\u8bef: \u6ca1\u6709\u8868\u5355\u63a7\u4ef6\u3002","Color swatch":"\u989c\u8272\u6837\u672c","Color Picker":"\u9009\u8272\u5668","Invalid hex color code: {0}":"\u5341\u516d\u8fdb\u5236\u989c\u8272\u4ee3\u7801\u65e0\u6548\uff1a {0}","Invalid input":"\u65e0\u6548\u8f93\u5165","R":"R","Red component":"\u7ea2\u8272\u90e8\u5206","G":"G","Green component":"\u7eff\u8272\u90e8\u5206","B":"B","Blue component":"\u767d\u8272\u90e8\u5206","#":"#","Hex color code":"\u5341\u516d\u8fdb\u5236\u989c\u8272\u4ee3\u7801","Range 0 to 255":"\u8303\u56f40\u81f3255","Turquoise":"\u9752\u7eff\u8272","Green":"\u7eff\u8272","Blue":"\u84dd\u8272","Purple":"\u7d2b\u8272","Navy Blue":"\u6d77\u519b\u84dd","Dark Turquoise":"\u6df1\u84dd\u7eff\u8272","Dark Green":"\u6df1\u7eff\u8272","Medium Blue":"\u4e2d\u84dd\u8272","Medium Purple":"\u4e2d\u7d2b\u8272","Midnight Blue":"\u6df1\u84dd\u8272","Yellow":"\u9ec4\u8272","Orange":"\u6a59\u8272","Red":"\u7ea2\u8272","Light Gray":"\u6d45\u7070\u8272","Gray":"\u7070\u8272","Dark Yellow":"\u6697\u9ec4\u8272","Dark Orange":"\u6df1\u6a59\u8272","Dark Red":"\u6df1\u7ea2\u8272","Medium Gray":"\u4e2d\u7070\u8272","Dark Gray":"\u6df1\u7070\u8272","Light Green":"\u6d45\u7eff\u8272","Light Yellow":"\u6d45\u9ec4\u8272","Light Red":"\u6d45\u7ea2\u8272","Light Purple":"\u6d45\u7d2b\u8272","Light Blue":"\u6d45\u84dd\u8272","Dark Purple":"\u6df1\u7d2b\u8272","Dark Blue":"\u6df1\u84dd\u8272","Black":"\u9ed1\u8272","White":"\u767d\u8272","Switch to or from fullscreen mode":"\u5207\u6362\u5168\u5c4f\u6a21\u5f0f","Open help dialog":"\u6253\u5f00\u5e2e\u52a9\u5bf9\u8bdd\u6846","history":"\u5386\u53f2","styles":"\u6837\u5f0f","formatting":"\u683c\u5f0f\u5316","alignment":"\u5bf9\u9f50","indentation":"\u7f29\u8fdb","Font":"\u5b57\u4f53","Size":"\u5b57\u53f7","More...":"\u66f4\u591a...","Select...":"\u9009\u62e9...","Preferences":"\u9996\u9009\u9879","Yes":"\u662f","No":"\u5426","Keyboard Navigation":"\u952e\u76d8\u6307\u5f15","Version":"\u7248\u672c","Code view":"\u4ee3\u7801\u89c6\u56fe","Open popup menu for split buttons":"\u6253\u5f00\u5f39\u51fa\u5f0f\u83dc\u5355\uff0c\u7528\u4e8e\u62c6\u5206\u6309\u94ae","List Properties":"\u5217\u8868\u5c5e\u6027","List properties...":"\u6807\u9898\u5b57\u4f53\u5c5e\u6027","Start list at number":"\u4ee5\u6570\u5b57\u5f00\u59cb\u5217\u8868","Line height":"\u884c\u9ad8","Dropped file type is not supported":"\u6b64\u6587\u4ef6\u7c7b\u578b\u4e0d\u652f\u6301\u62d6\u653e","Loading...":"\u52a0\u8f7d\u4e2d...","ImageProxy HTTP error: Rejected request":"\u56fe\u7247\u4ee3\u7406\u8bf7\u6c42\u9519\u8bef\uff1a\u8bf7\u6c42\u88ab\u62d2\u7edd","ImageProxy HTTP error: Could not find Image Proxy":"\u56fe\u7247\u4ee3\u7406\u8bf7\u6c42\u9519\u8bef\uff1a\u65e0\u6cd5\u627e\u5230\u56fe\u7247\u4ee3\u7406","ImageProxy HTTP error: Incorrect Image Proxy URL":"\u56fe\u7247\u4ee3\u7406\u8bf7\u6c42\u9519\u8bef\uff1a\u56fe\u7247\u4ee3\u7406\u5730\u5740\u9519\u8bef","ImageProxy HTTP error: Unknown ImageProxy error":"\u56fe\u7247\u4ee3\u7406\u8bf7\u6c42\u9519\u8bef\uff1a\u672a\u77e5\u7684\u56fe\u7247\u4ee3\u7406\u9519\u8bef"}); \ No newline at end of file diff --git a/packages/mall-cook-platform-electron/src/render/config/global.js b/packages/mall-cook-platform-electron/src/render/config/global.js index 0fbc5a7..b120ee5 100644 --- a/packages/mall-cook-platform-electron/src/render/config/global.js +++ b/packages/mall-cook-platform-electron/src/render/config/global.js @@ -8,4 +8,6 @@ export default { baseApi: 'http://110.41.150.71:3000/', // 后端接口地址 viewUrl: 'http://110.41.150.71:9000/#/' // iframe嵌套的H5地址,本地开发可改为本地启动的H5地址 + // baseApi: 'http://www.sunmao-design.top/mall-cook/api/', // 后端接口地址 + // viewUrl: 'http://139.196.223.93:4001/#/', } diff --git a/packages/mall-cook-platform-electron/src/render/custom-schema-template-set/config-template/SchemaUploadConfig.vue b/packages/mall-cook-platform-electron/src/render/custom-schema-template-set/config-template/SchemaUploadConfig.vue index 9e2f5c2..4e7bd5e 100644 --- a/packages/mall-cook-platform-electron/src/render/custom-schema-template-set/config-template/SchemaUploadConfig.vue +++ b/packages/mall-cook-platform-electron/src/render/custom-schema-template-set/config-template/SchemaUploadConfig.vue @@ -25,9 +25,9 @@ > - diff --git a/packages/mall-cook-platform-electron/src/render/custom-schema-template/components/SchemaUpload/index.vue b/packages/mall-cook-platform-electron/src/render/custom-schema-template/components/SchemaUpload/index.vue index ebaa4d3..77b0cef 100644 --- a/packages/mall-cook-platform-electron/src/render/custom-schema-template/components/SchemaUpload/index.vue +++ b/packages/mall-cook-platform-electron/src/render/custom-schema-template/components/SchemaUpload/index.vue @@ -7,10 +7,10 @@ --> @@ -23,4 +23,4 @@ export default { mixins: [schemaMixin], }; - \ No newline at end of file + diff --git a/packages/mall-cook-platform-electron/src/render/faim/FormDialog/globalConfig.js b/packages/mall-cook-platform-electron/src/render/faim/FormDialog/globalConfig.js new file mode 100644 index 0000000..d034688 --- /dev/null +++ b/packages/mall-cook-platform-electron/src/render/faim/FormDialog/globalConfig.js @@ -0,0 +1,5 @@ +import FaimLocale from "faim/dist/locale/zh-cn.mjs"; + +export default { + locale: FaimLocale.FaFormDialog, +} diff --git a/packages/mall-cook-platform-electron/src/render/faim/ImageUpload/globalConfig.js b/packages/mall-cook-platform-electron/src/render/faim/ImageUpload/globalConfig.js new file mode 100644 index 0000000..568378b --- /dev/null +++ b/packages/mall-cook-platform-electron/src/render/faim/ImageUpload/globalConfig.js @@ -0,0 +1,13 @@ +import FaimLocale from "faim/dist/locale/zh-cn.mjs"; +import upload from '../upload' +import './index.scss' + +export default { + // 图片上传组件全局配置 + locale: FaimLocale.FaImageUpload, + // accept: '.jpg,.jpeg,.png', // 允许上传的图片格式 + // maxCount: 1, // 全局默认图片数量不超过1张,具体使用时如有不同可用局部配置覆盖掉 + // maxSize: 512 * 1024, // 单位为字节 + // 上传到服务器 + upload, +} diff --git a/packages/mall-cook-platform-electron/src/render/faim/ImageUpload/index.scss b/packages/mall-cook-platform-electron/src/render/faim/ImageUpload/index.scss new file mode 100644 index 0000000..880628c --- /dev/null +++ b/packages/mall-cook-platform-electron/src/render/faim/ImageUpload/index.scss @@ -0,0 +1,46 @@ +// 自定义图片上传组件样式 + +.el-upload-list { + &>.el-upload-list__item { + width: 50px !important; + height: 50px !important; + + .el-upload-list__item-status-label { + width: 34px; + height: 18px; + + &>i { + margin-top: 0; + } + } + + .el-upload-list__item-actions { + line-height: 50px; + font-size: 16px; + + &>span+span { + margin-left: 4px; + } + } + } +} + +.el-upload { + width: 50px !important; + height: 50px !important; + line-height: 50px; + + &>.el-upload-dragger { + width: 50px !important; + height: 50px !important; + } + + .el-icon, + .el-icon-plus { + font-size: initial !important; + } + + .el-upload__text { + display: none; + } +} diff --git a/packages/mall-cook-platform-electron/src/render/faim/RichText/globalConfig.js b/packages/mall-cook-platform-electron/src/render/faim/RichText/globalConfig.js new file mode 100644 index 0000000..26cb909 --- /dev/null +++ b/packages/mall-cook-platform-electron/src/render/faim/RichText/globalConfig.js @@ -0,0 +1,127 @@ +import Vue from 'vue' + +// 浅色模式 +import 'tinymce/skins/ui/oxide/skin.min.css' // 皮肤 +import contentCSS from 'tinymce/skins/content/default/content.min.css?raw' +import contentUICSS from 'tinymce/skins/ui/oxide/content.min.css?raw' + +// 深色模式 +/* import 'tinymce/skins/ui/oxide-dark/skin.min.css' // 皮肤 +import contentCSS from 'tinymce/skins/content/dark/content.min.css?raw' +import contentUICSS from 'tinymce/skins/ui/oxide-dark/content.min.css?raw' */ + +// 图标 +import 'tinymce/icons/default/icons' + +// 主题 +import 'tinymce/themes/silver/theme' + +// 语言(非必须,默认英文,下载地址:https://www.tiny.cloud/get-tiny/language-packages) +import './langs/zh-Hans' + +// 自定义样式 +import './index.scss' + +// 自定义插件(非必须) +import InsertFile from './plugins/InsertFile.vue' +import InsertWord from './plugins/InsertWord' + +// 官方插件(非必须) +/* if (import.meta.env.MODE === 'development') { + await import('tinymce/plugins/code') + await import('tinymce/plugins/codesample') +} */ +import 'tinymce/plugins/code' +import 'tinymce/plugins/codesample' + +import global from '@/config/global' + +/** + * 自定义内容样式(非必须) + * 该样式仅在生产侧有效,不包含在生成的 HTML 文本中 + * 可拷贝至展示侧使用 + */ +const contentCustomCSS = ` + .mce-content-body { + line-height: 1.8; + overflow: auto; + } + p { + margin-block-end: 0; + margin-block-start: 0; + } + img { + max-width: 100%; + height: auto !important; + vertical-align: middle; + } +` + +export default { + language: 'zh-Hans', + content_style: [contentCSS, contentUICSS, contentCustomCSS].join('\n'), + plugins: `preview importcss searchreplace autolink autosave save directionality visualblocks visualchars fullscreen image link media table charmap pagebreak nonbreaking anchor insertdatetime advlist lists wordcount help charmap quickbars emoticons accordion + ${process.env.NODE_ENV === 'development' ? ' code codesample' : ''}`, + // https://www.tiny.cloud/docs/tinymce/6/menus-configuration-options/#example-the-tinymce-default-menu-items + menu: { + insert: { + title: 'Insert', + items: 'localimage localvideo localaudio docx | image link media addcomment pageembed template codesample inserttable | charmap emoticons hr | pagebreak nonbreaking anchor tableofcontents | insertdatetime', + }, + }, + async setup(editor) { + await InsertFile.init({ editor }) + editor.ui.registry.addMenuItem('localimage', { + text: '本地图片', + icon: 'image', + onAction: () => { + InsertFile.open({ type: '图片' }) + }, + }) + /* editor.ui.registry.addMenuItem('localvideo', { + text: '本地视频', + icon: 'embed', + onAction: () => { + InsertFile.open({ type: '视频' }) + }, + }) + editor.ui.registry.addMenuItem('localaudio', { + text: '本地音频', + icon: 'arrow-right', + onAction: () => { + InsertFile.open({ type: '音频' }) + }, + }) */ + + editor.ui.registry.addMenuItem('docx', { + text: 'Word 文档', + icon: 'new-document', + onAction: () => { + InsertWord.open(editor) + }, + }) + }, + // 用于复制粘贴的图片和 TinyMCE 自带的图片上传 + // img 的 src 为 object URL 或 Base64 时触发 + images_upload_handler(blobInfo, progress) { + // console.log('images_upload_handler: ', blobInfo) + const blob = blobInfo.blob() + const file = new File([blob], blobInfo.filename(), { + type: blob.type, + }) + + return Vue.prototype.$POST.upload(global.baseApi + 'upload', { + file, + }, { + onUploadProgress(e) { + progress(e.loaded / e.total * 100) + }, + }).then((res) => { + if (typeof res.data?.data === 'string') { + return res.data.data + } else { + Promise.reject(res) + } + }) + }, +} diff --git a/packages/mall-cook-platform-electron/src/render/faim/RichText/index.scss b/packages/mall-cook-platform-electron/src/render/faim/RichText/index.scss new file mode 100644 index 0000000..3ef5b0b --- /dev/null +++ b/packages/mall-cook-platform-electron/src/render/faim/RichText/index.scss @@ -0,0 +1,30 @@ +// 与 Element 保持一致 +.tox-tinymce { + border-radius: 4px !important; +} + +// 超越 el-dialog 层级,但菜单的隐藏触发方式不是失焦而是外部点击,所以在菜单没有隐藏时打开的嵌套 el-dialog 会被菜单遮挡 +.tox-tinymce-aux.tox-silver-sink { + z-index: 3000; +} + +// 富文本内容样式 +.mce-content-body { + line-height: 1.8; + overflow: auto; + + p { + margin-block-end: 0; + margin-block-start: 0; + } + + img { + max-width: 100%; + height: auto !important; + vertical-align: middle; + } +} + +div:where(.swal2-container) div:where(.swal2-popup) { + font-size: 16px; +} diff --git a/packages/mall-cook-platform-electron/src/render/faim/RichText/langs/zh-Hans.js b/packages/mall-cook-platform-electron/src/render/faim/RichText/langs/zh-Hans.js new file mode 100644 index 0000000..16440c0 --- /dev/null +++ b/packages/mall-cook-platform-electron/src/render/faim/RichText/langs/zh-Hans.js @@ -0,0 +1 @@ +tinymce.addI18n("zh-Hans",{"Redo":"\u91cd\u505a","Undo":"\u64a4\u9500","Cut":"\u526a\u5207","Copy":"\u590d\u5236","Paste":"\u7c98\u8d34","Select all":"\u5168\u9009","New document":"\u65b0\u5efa\u6587\u6863","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","Remove":"\u79fb\u9664","Align left":"\u5de6\u5bf9\u9f50","Align center":"\u5c45\u4e2d\u5bf9\u9f50","Align right":"\u53f3\u5bf9\u9f50","No alignment":"\u672a\u5bf9\u9f50","Justify":"\u4e24\u7aef\u5bf9\u9f50","Bullet list":"\u65e0\u5e8f\u5217\u8868","Numbered list":"\u6709\u5e8f\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","Headings":"\u6807\u9898","Heading 1":"\u4e00\u7ea7\u6807\u9898","Heading 2":"\u4e8c\u7ea7\u6807\u9898","Heading 3":"\u4e09\u7ea7\u6807\u9898","Heading 4":"\u56db\u7ea7\u6807\u9898","Heading 5":"\u4e94\u7ea7\u6807\u9898","Heading 6":"\u516d\u7ea7\u6807\u9898","Preformatted":"\u9884\u5148\u683c\u5f0f\u5316\u7684","Div":"Div","Pre":"\u524d\u8a00","Code":"\u4ee3\u7801","Paragraph":"\u6bb5\u843d","Blockquote":"\u5f15\u6587\u533a\u5757","Inline":"\u6587\u672c","Blocks":"\u6837\u5f0f","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\u4f53\u5927\u5c0f","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","Uploading image":"\u4e0a\u4f20\u56fe\u7247","Block":"\u5757","Align":"\u5bf9\u9f50","Default":"\u9884\u8bbe","Circle":"\u7a7a\u5fc3\u5706","Disc":"\u5b9e\u5fc3\u5706","Square":"\u5b9e\u5fc3\u65b9\u5757","Lower Alpha":"\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd","Lower Greek":"\u5c0f\u5199\u5e0c\u814a\u5b57\u6bcd","Lower Roman":"\u5c0f\u5199\u7f57\u9a6c\u6570\u5b57","Upper Alpha":"\u5927\u5199\u82f1\u6587\u5b57\u6bcd","Upper Roman":"\u5927\u5199\u7f57\u9a6c\u6570\u5b57","Anchor...":"\u951a\u70b9...","Anchor":"\u951a\u70b9","Name":"\u540d\u79f0","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID\u5e94\u8be5\u4ee5\u82f1\u6587\u5b57\u6bcd\u5f00\u5934\uff0c\u540e\u9762\u53ea\u80fd\u6709\u82f1\u6587\u5b57\u6bcd\u3001\u6570\u5b57\u3001\u7834\u6298\u53f7\u3001\u70b9\u3001\u5192\u53f7\u6216\u4e0b\u5212\u7ebf\u3002","You have unsaved changes are you sure you want to navigate away?":"\u4f60\u8fd8\u6709\u6587\u6863\u5c1a\u672a\u4fdd\u5b58\uff0c\u786e\u5b9a\u8981\u79bb\u5f00\uff1f","Restore last draft":"\u6062\u590d\u4e0a\u6b21\u7684\u8349\u7a3f","Special character...":"\u7279\u6b8a\u5b57\u7b26...","Special Character":"\u7279\u6b8a\u5b57\u7b26","Source code":"\u6e90\u4ee3\u7801","Insert/Edit code sample":"\u63d2\u5165/\u7f16\u8f91\u4ee3\u7801\u793a\u4f8b","Language":"\u8bed\u8a00","Code sample...":"\u793a\u4f8b\u4ee3\u7801...","Left to right":"\u7531\u5de6\u5230\u53f3","Right to left":"\u7531\u53f3\u5230\u5de6","Title":"\u6807\u9898","Fullscreen":"\u5168\u5c4f","Action":"\u52a8\u4f5c","Shortcut":"\u5feb\u6377\u65b9\u5f0f","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","Alternative description":"\u66ff\u4ee3\u63cf\u8ff0","Accessibility":"\u8f85\u52a9\u529f\u80fd","Image is decorative":"\u56fe\u50cf\u662f\u88c5\u9970\u6027\u7684","Source":"\u6e90","Dimensions":"\u5c3a\u5bf8","Constrain proportions":"\u4fdd\u6301\u6bd4\u4f8b","General":"\u4e00\u822c","Advanced":"\u9ad8\u7ea7","Style":"\u6837\u5f0f","Vertical space":"\u5782\u76f4\u95f4\u8ddd","Horizontal space":"\u6c34\u5e73\u95f4\u8ddd","Border":"\u6846\u7ebf","Insert image":"\u63d2\u5165\u56fe\u7247","Image...":"\u56fe\u7247...","Image list":"\u56fe\u7247\u6e05\u5355","Resize":"\u8c03\u6574\u5927\u5c0f","Insert date/time":"\u63d2\u5165\u65e5\u671f/\u65f6\u95f4","Date/time":"\u65e5\u671f/\u65f6\u95f4","Insert/edit link":"\u63d2\u5165/\u7f16\u8f91\u94fe\u63a5","Text to display":"\u8981\u663e\u793a\u7684\u6587\u672c","Url":"\u5730\u5740","Open link in...":"\u94fe\u63a5\u6253\u5f00\u4f4d\u7f6e...","Current window":"\u5f53\u524d\u7a97\u53e3","None":"\u65e0","New window":"\u65b0\u7a97\u53e3","Open link":"\u6253\u5f00\u94fe\u63a5","Remove link":"\u79fb\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","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"\u60a8\u8f93\u5165\u7684 URL \u4f3c\u4e4e\u662f\u4e00\u4e2a\u5916\u90e8\u94fe\u63a5\u3002\u60a8\u60f3\u6dfb\u52a0\u6240\u9700\u7684 https:// \u524d\u7f00\u5417\uff1f","Link list":"\u94fe\u63a5\u6e05\u5355","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","Print...":"\u6253\u5370...","Save":"\u4fdd\u5b58","Find":"\u5bfb\u627e","Replace with":"\u66ff\u6362\u4e3a","Replace":"\u66ff\u6362","Replace all":"\u66ff\u6362\u5168\u90e8","Previous":"\u4e0a\u4e00\u4e2a","Next":"\u4e0b\u4e00\u4e2a","Find and Replace":"\u67e5\u627e\u548c\u66ff\u6362","Find and replace...":"\u67e5\u627e\u5e76\u66ff\u6362...","Could not find the specified string.":"\u672a\u627e\u5230\u641c\u7d22\u5185\u5bb9\u3002","Match case":"\u5927\u5c0f\u5199\u5339\u914d","Find whole words only":"\u5168\u5b57\u5339\u914d","Find in selection":"\u5728\u9009\u533a\u4e2d\u67e5\u627e","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\u884c","Insert row after":"\u5728\u4e0b\u65b9\u63d2\u5165\u884c","Delete row":"\u5220\u9664\u884c","Row properties":"\u884c\u5c5e\u6027","Cut row":"\u526a\u5207\u884c","Cut column":"\u526a\u5207\u5217","Copy row":"\u590d\u5236\u884c","Copy column":"\u590d\u5236\u5217","Paste row before":"\u7c98\u8d34\u884c\u5230\u4e0a\u65b9","Paste column before":"\u7c98\u8d34\u6b64\u5217\u524d","Paste row after":"\u7c98\u8d34\u884c\u5230\u4e0b\u65b9","Paste column after":"\u7c98\u8d34\u540e\u9762\u7684\u5217","Insert column before":"\u5728\u5de6\u4fa7\u63d2\u5165\u5217","Insert column after":"\u5728\u53f3\u4fa7\u63d2\u5165\u5217","Delete column":"\u5220\u9664\u5217","Cols":"\u5217","Rows":"\u884c\u6570","Width":"\u5bbd\u5ea6","Height":"\u9ad8\u5ea6","Cell spacing":"\u5355\u5143\u683c\u5916\u95f4\u8ddd","Cell padding":"\u5355\u5143\u683c\u5185\u8fb9\u8ddd","Row clipboard actions":"\u884c\u526a\u8d34\u677f\u64cd\u4f5c","Column clipboard actions":"\u5217\u526a\u8d34\u677f\u64cd\u4f5c","Table styles":"\u8868\u683c\u6837\u5f0f","Cell styles":"\u5355\u5143\u683c\u6837\u5f0f","Column header":"\u5217\u6807\u9898","Row header":"\u884c\u5934","Table caption":"\u8868\u683c\u6807\u9898","Caption":"\u6807\u9898","Show caption":"\u663e\u793a\u6807\u9898","Left":"\u5de6","Center":"\u5c45\u4e2d","Right":"\u53f3","Cell type":"\u50a8\u5b58\u683c\u522b","Scope":"\u8303\u56f4","Alignment":"\u5bf9\u9f50","Horizontal align":"\u6c34\u5e73\u5bf9\u9f50","Vertical align":"\u5782\u76f4\u5bf9\u9f50","Top":"\u4e0a\u65b9\u5bf9\u9f50","Middle":"\u5c45\u4e2d\u5bf9\u9f50","Bottom":"\u4e0b\u65b9\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":"\u6846\u7ebf\u989c\u8272","Solid":"\u5b9e\u7ebf","Dotted":"\u865a\u7ebf","Dashed":"\u865a\u7ebf","Double":"\u53cc\u7cbe\u5ea6","Groove":"\u51f9\u69fd","Ridge":"\u6d77\u810a\u5ea7","Inset":"\u5d4c\u5165","Outset":"\u5916\u7f6e","Hidden":"\u9690\u85cf","Insert template...":"\u63d2\u5165\u6a21\u677f...","Templates":"\u6a21\u677f","Template":"\u6a21\u677f","Insert Template":"\u63d2\u5165\u6a21\u677f","Text color":"\u6587\u672c\u989c\u8272","Background color":"\u80cc\u666f\u989c\u8272","Custom...":"\u81ea\u5b9a\u4e49......","Custom color":"\u81ea\u5b9a\u4e49\u989c\u8272","No color":"\u65e0","Remove color":"\u79fb\u9664\u989c\u8272","Show blocks":"\u663e\u793a\u533a\u5757\u8fb9\u6846","Show invisible characters":"\u663e\u793a\u4e0d\u53ef\u89c1\u5b57\u7b26","Word count":"\u5b57\u6570","Count":"\u8ba1\u6570","Document":"\u6587\u6863","Selection":"\u9009\u62e9","Words":"\u5355\u8bcd","Words: {0}":"\u5b57\u6570\uff1a{0}","{0} words":"{0} \u5b57","File":"\u6587\u4ef6","Edit":"\u7f16\u8f91","Insert":"\u63d2\u5165","View":"\u67e5\u770b","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":"\u7f16\u8f91\u533a\u3002\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":"\u5bcc\u6587\u672c\u533a\u57df","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","Emojis":"Emojis","Emojis...":"Emojis...","Loading emojis...":"\u6b63\u5728\u52a0\u8f7dEmojis...","Could not load emojis":"\u65e0\u6cd5\u52a0\u8f7dEmojis","People":"\u4eba\u7c7b","Animals and Nature":"\u52a8\u7269\u548c\u81ea\u7136","Food and Drink":"\u98df\u7269\u548c\u996e\u54c1","Activity":"\u6d3b\u52a8","Travel and Places":"\u65c5\u6e38\u548c\u5730\u70b9","Objects":"\u7269\u4ef6","Flags":"\u65d7\u5e1c","Characters":"\u5b57\u7b26","Characters (no spaces)":"\u5b57\u7b26(\u65e0\u7a7a\u683c)","{0} characters":"{0} \u4e2a\u5b57\u7b26","Error: Form submit field collision.":"\u9519\u8bef: \u8868\u5355\u63d0\u4ea4\u5b57\u6bb5\u51b2\u7a81\u3002","Error: No form element found.":"\u9519\u8bef: \u6ca1\u6709\u8868\u5355\u63a7\u4ef6\u3002","Color swatch":"\u989c\u8272\u6837\u672c","Color Picker":"\u9009\u8272\u5668","Invalid hex color code: {0}":"\u5341\u516d\u8fdb\u5236\u989c\u8272\u4ee3\u7801\u65e0\u6548\uff1a {0}","Invalid input":"\u65e0\u6548\u8f93\u5165","R":"R","Red component":"\u7ea2\u8272\u90e8\u5206","G":"G","Green component":"\u7eff\u8272\u90e8\u5206","B":"B","Blue component":"\u767d\u8272\u90e8\u5206","#":"#","Hex color code":"\u5341\u516d\u8fdb\u5236\u989c\u8272\u4ee3\u7801","Range 0 to 255":"\u8303\u56f40\u81f3255","Turquoise":"\u9752\u7eff\u8272","Green":"\u7eff\u8272","Blue":"\u84dd\u8272","Purple":"\u7d2b\u8272","Navy Blue":"\u6d77\u519b\u84dd","Dark Turquoise":"\u6df1\u84dd\u7eff\u8272","Dark Green":"\u6df1\u7eff\u8272","Medium Blue":"\u4e2d\u84dd\u8272","Medium Purple":"\u4e2d\u7d2b\u8272","Midnight Blue":"\u6df1\u84dd\u8272","Yellow":"\u9ec4\u8272","Orange":"\u6a59\u8272","Red":"\u7ea2\u8272","Light Gray":"\u6d45\u7070\u8272","Gray":"\u7070\u8272","Dark Yellow":"\u6697\u9ec4\u8272","Dark Orange":"\u6df1\u6a59\u8272","Dark Red":"\u6df1\u7ea2\u8272","Medium Gray":"\u4e2d\u7070\u8272","Dark Gray":"\u6df1\u7070\u8272","Light Green":"\u6d45\u7eff\u8272","Light Yellow":"\u6d45\u9ec4\u8272","Light Red":"\u6d45\u7ea2\u8272","Light Purple":"\u6d45\u7d2b\u8272","Light Blue":"\u6d45\u84dd\u8272","Dark Purple":"\u6df1\u7d2b\u8272","Dark Blue":"\u6df1\u84dd\u8272","Black":"\u9ed1\u8272","White":"\u767d\u8272","Switch to or from fullscreen mode":"\u5207\u6362\u5168\u5c4f\u6a21\u5f0f","Open help dialog":"\u6253\u5f00\u5e2e\u52a9\u5bf9\u8bdd\u6846","history":"\u5386\u53f2","styles":"\u6837\u5f0f","formatting":"\u683c\u5f0f\u5316","alignment":"\u5bf9\u9f50","indentation":"\u7f29\u8fdb","Font":"\u5b57\u4f53","Size":"\u5b57\u53f7","More...":"\u66f4\u591a...","Select...":"\u9009\u62e9...","Preferences":"\u9996\u9009\u9879","Yes":"\u662f","No":"\u5426","Keyboard Navigation":"\u952e\u76d8\u6307\u5f15","Version":"\u7248\u672c","Code view":"\u4ee3\u7801\u89c6\u56fe","Open popup menu for split buttons":"\u6253\u5f00\u5f39\u51fa\u5f0f\u83dc\u5355\uff0c\u7528\u4e8e\u62c6\u5206\u6309\u94ae","List Properties":"\u5217\u8868\u5c5e\u6027","List properties...":"\u6807\u9898\u5b57\u4f53\u5c5e\u6027","Start list at number":"\u4ee5\u6570\u5b57\u5f00\u59cb\u5217\u8868","Line height":"\u884c\u9ad8","Dropped file type is not supported":"\u6b64\u6587\u4ef6\u7c7b\u578b\u4e0d\u652f\u6301\u62d6\u653e","Loading...":"\u52a0\u8f7d\u4e2d...","ImageProxy HTTP error: Rejected request":"\u56fe\u7247\u4ee3\u7406\u8bf7\u6c42\u9519\u8bef\uff1a\u8bf7\u6c42\u88ab\u62d2\u7edd","ImageProxy HTTP error: Could not find Image Proxy":"\u56fe\u7247\u4ee3\u7406\u8bf7\u6c42\u9519\u8bef\uff1a\u65e0\u6cd5\u627e\u5230\u56fe\u7247\u4ee3\u7406","ImageProxy HTTP error: Incorrect Image Proxy URL":"\u56fe\u7247\u4ee3\u7406\u8bf7\u6c42\u9519\u8bef\uff1a\u56fe\u7247\u4ee3\u7406\u5730\u5740\u9519\u8bef","ImageProxy HTTP error: Unknown ImageProxy error":"\u56fe\u7247\u4ee3\u7406\u8bf7\u6c42\u9519\u8bef\uff1a\u672a\u77e5\u7684\u56fe\u7247\u4ee3\u7406\u9519\u8bef"}); \ No newline at end of file diff --git a/packages/mall-cook-platform-electron/src/render/faim/RichText/plugins/InsertFile.vue b/packages/mall-cook-platform-electron/src/render/faim/RichText/plugins/InsertFile.vue new file mode 100644 index 0000000..f00bff9 --- /dev/null +++ b/packages/mall-cook-platform-electron/src/render/faim/RichText/plugins/InsertFile.vue @@ -0,0 +1,126 @@ + + + + diff --git a/packages/mall-cook-platform-electron/src/render/faim/RichText/plugins/InsertWord.js b/packages/mall-cook-platform-electron/src/render/faim/RichText/plugins/InsertWord.js new file mode 100644 index 0000000..9c1929b --- /dev/null +++ b/packages/mall-cook-platform-electron/src/render/faim/RichText/plugins/InsertWord.js @@ -0,0 +1,68 @@ +import mammoth from 'mammoth/mammoth.browser.min.js' +import FaMessageBox from 'faim/dist/components/MessageBox/index' + +export default { + open: editor => FaMessageBox.confirm({ + icon: null, + input: 'file', + inputAttributes: { + placeholder: '将 .docx 文件拖到此处,或点击上传', + multiple: true, + }, + titleText: '插入 Word 文档', + confirmButtonText: '确定', + cancelButtonText: '取消', + showLoaderOnConfirm: true, + preConfirm: (fileList) => { + if (fileList) { + return Promise.allSettled([...fileList].map(file => + new Promise((resolve, reject) => { + if (!file.name.endsWith('.docx')) { + reject(new Error('仅支持 docx 格式')) + } + + const reader = new FileReader() + reader.onload = async (e) => { + const arrayBuffer = e.target.result + if (arrayBuffer.byteLength) { + mammoth.convertToHtml({ arrayBuffer }).then((res) => { + const { value } = res + console.log(`${file.name} 解析结果:`, res) + if (value) { + resolve(value) + } else { + reject(new Error(`${file.name} 内容为空`)) + } + }).catch((err) => { + reject(err) + }) + } else { + reject(new Error(`${file.name} 内容为空`)) + } + } + reader.readAsArrayBuffer(file) + }), + )).then((results) => { + results.forEach((result) => { + const { status, value, reason } = result + if (status === 'fulfilled') { + editor.insertContent(value) + } else { + if (reason) { + if (typeof reason === 'string') { + FaMessageBox.showValidationMessage(reason) + } else { + console.error(reason) + FaMessageBox.showValidationMessage('解析失败') + } + } + } + }) + }) + } else { + FaMessageBox.showValidationMessage('未选择任何文件') + } + }, + }), + +} diff --git a/packages/mall-cook-platform-electron/src/render/faim/upload.js b/packages/mall-cook-platform-electron/src/render/faim/upload.js new file mode 100644 index 0000000..a229ec4 --- /dev/null +++ b/packages/mall-cook-platform-electron/src/render/faim/upload.js @@ -0,0 +1,15 @@ +import Vue from 'vue' +import global from '@/config/global' + +export default async (file) => new Promise((resolve, reject) => { + Vue.prototype.$POST.upload(global.baseApi + 'upload', ({ + file, + }), { + baseURL: '', + timeout: 20000, + }).then(res => { + resolve(res.data) + }).catch(e => { + reject(e) + }) +}) diff --git a/packages/mall-cook-platform-electron/src/render/pages/mall/goods/goods-manager/edit.vue b/packages/mall-cook-platform-electron/src/render/pages/mall/goods/goods-manager/edit.vue index e983065..1d3e2ec 100644 --- a/packages/mall-cook-platform-electron/src/render/pages/mall/goods/goods-manager/edit.vue +++ b/packages/mall-cook-platform-electron/src/render/pages/mall/goods/goods-manager/edit.vue @@ -26,11 +26,11 @@ - +
建议尺寸:800*800像素
- +
建议尺寸:800*800像素,你可以拖拽图片调整顺序,最多上传10张
@@ -60,7 +60,7 @@ >
--> - + diff --git a/packages/mall-cook-platform-electron/src/render/pages/mall/goods/group-manager/edit.vue b/packages/mall-cook-platform-electron/src/render/pages/mall/goods/group-manager/edit.vue index dc470a8..69906db 100644 --- a/packages/mall-cook-platform-electron/src/render/pages/mall/goods/group-manager/edit.vue +++ b/packages/mall-cook-platform-electron/src/render/pages/mall/goods/group-manager/edit.vue @@ -93,8 +93,8 @@ prop="image" verify > - @@ -220,4 +220,4 @@ export default { display: inline-block; margin: 0 auto; } - \ No newline at end of file + diff --git a/packages/mall-cook-platform-electron/src/render/scss/imgpond.scss b/packages/mall-cook-platform-electron/src/render/scss/imgpond.scss deleted file mode 100644 index 9f7865c..0000000 --- a/packages/mall-cook-platform-electron/src/render/scss/imgpond.scss +++ /dev/null @@ -1,30 +0,0 @@ -// 上传组件样式重置 -.el-upload--picture-card { - width: 60px !important; - height: 60px !important; - - .el-icon-plus { - position: absolute; - top: 20px; - left: 20px; - font-size: 18px; - } -} - -.el-upload-list__item { - width: 60px !important; - height: 60px !important; -} - -.el-upload-list__item-status-label, -.el-upload__text { - display: none !important; -} - -.el-upload-list__item-preview { - font-size: 17px; -} - -.el-icon-delete { - font-size: 17px; -} diff --git a/packages/mall-cook-platform-electron/src/render/scss/index.scss b/packages/mall-cook-platform-electron/src/render/scss/index.scss index bdab19c..7715894 100644 --- a/packages/mall-cook-platform-electron/src/render/scss/index.scss +++ b/packages/mall-cook-platform-electron/src/render/scss/index.scss @@ -6,7 +6,6 @@ @import "./reset.scss"; @import "./element.scss"; @import "./pc.scss"; -@import "./imgpond.scss"; @import "./yzIcon/icon.css"; -@import url('./iconfont.css'); \ No newline at end of file +@import url('./iconfont.css'); diff --git a/packages/mall-cook-platform-electron/vite.config.ts b/packages/mall-cook-platform-electron/vite.config.ts index 1372139..bb84eb7 100644 --- a/packages/mall-cook-platform-electron/vite.config.ts +++ b/packages/mall-cook-platform-electron/vite.config.ts @@ -16,6 +16,9 @@ export default defineConfig(({ command, mode }: ConfigEnv): UserConfig=>{ return { base: './', publicDir: resolve(__dirname, './dist'), + optimizeDeps: { + include: ['faim > qrcode', 'faim > sweetalert2', 'faim > upng-js'], + }, plugins: [ createVuePlugin(), /* viteExternalsPlugin({ From 40acd958e56bd7f12e9771e86856e727393b6176 Mon Sep 17 00:00:00 2001 From: Cloyd Lau <31238760+cloydlau@users.noreply.github.com> Date: Sat, 30 Dec 2023 12:19:51 +0800 Subject: [PATCH 4/4] =?UTF-8?q?chore:=20=E4=BB=A3=E7=A0=81=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mall-cook-platform-electron/src/render/config/global.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/mall-cook-platform-electron/src/render/config/global.js b/packages/mall-cook-platform-electron/src/render/config/global.js index b120ee5..65e2b4e 100644 --- a/packages/mall-cook-platform-electron/src/render/config/global.js +++ b/packages/mall-cook-platform-electron/src/render/config/global.js @@ -8,6 +8,6 @@ export default { baseApi: 'http://110.41.150.71:3000/', // 后端接口地址 viewUrl: 'http://110.41.150.71:9000/#/' // iframe嵌套的H5地址,本地开发可改为本地启动的H5地址 - // baseApi: 'http://www.sunmao-design.top/mall-cook/api/', // 后端接口地址 - // viewUrl: 'http://139.196.223.93:4001/#/', + // baseApi: 'http://www.sunmao-design.top/mall-cook/api/', // 后端接口地址 + // viewUrl: 'http://139.196.223.93:4001/#/', // iframe嵌套的H5地址,本地开发可改为本地启动的H5地址 }