From 69e14fed9c04fb852223390a2129c76045de32dc Mon Sep 17 00:00:00 2001 From: kuaifan Date: Sat, 10 Jul 2021 19:50:59 +0800 Subject: [PATCH] no message --- .env.docker | 1 + .env.example | 1 + app/Http/Controllers/Api/FileController.php | 77 +++++++++-- app/Http/Middleware/VerifyCsrfToken.php | 3 + docker-compose.yml | 15 ++ docker/office/.gitignore | 2 + resources/assets/js/components/OnlyOffice.vue | 129 ++++++++++++++++++ .../pages/manage/components/FileContent.vue | 26 +++- resources/assets/js/pages/manage/file.vue | 26 +++- .../sass/pages/components/file-content.scss | 26 ++-- resources/assets/sass/pages/page-file.scss | 27 ++++ resources/assets/statics/empty/empty.docx | Bin 0 -> 10994 bytes resources/assets/statics/empty/empty.pptx | Bin 0 -> 26882 bytes resources/assets/statics/empty/empty.xlsx | Bin 0 -> 8128 bytes .../statics/public/images/file/document.svg | 2 +- .../statics/public/images/file/excel.svg | 1 + .../statics/public/images/file/flow.svg | 2 +- .../statics/public/images/file/folder.svg | 2 +- .../statics/public/images/file/mind.svg | 2 +- .../assets/statics/public/images/file/ppt.svg | 1 + .../statics/public/images/file/sheet.svg | 2 +- .../statics/public/images/file/word.svg | 1 + 22 files changed, 304 insertions(+), 42 deletions(-) create mode 100644 docker/office/.gitignore create mode 100644 resources/assets/js/components/OnlyOffice.vue create mode 100644 resources/assets/statics/empty/empty.docx create mode 100644 resources/assets/statics/empty/empty.pptx create mode 100644 resources/assets/statics/empty/empty.xlsx create mode 100644 resources/assets/statics/public/images/file/excel.svg create mode 100644 resources/assets/statics/public/images/file/ppt.svg create mode 100644 resources/assets/statics/public/images/file/word.svg diff --git a/.env.docker b/.env.docker index 9b72dda0..89b4da38 100644 --- a/.env.docker +++ b/.env.docker @@ -6,6 +6,7 @@ APP_URL=http://localhost APP_PORT=2222 APP_PORT_SSL=2223 +APP_PORT_ONLYOFFICE=2224 LOG_CHANNEL=stack LOG_LEVEL=debug diff --git a/.env.example b/.env.example index db24d140..3ddb0d36 100644 --- a/.env.example +++ b/.env.example @@ -6,6 +6,7 @@ APP_URL=http://localhost APP_PORT=2222 APP_PORT_SSL=2223 +APP_PORT_ONLYOFFICE=2224 LOG_CHANNEL=stack LOG_LEVEL=debug diff --git a/app/Http/Controllers/Api/FileController.php b/app/Http/Controllers/Api/FileController.php index 00a543e0..bf33306c 100755 --- a/app/Http/Controllers/Api/FileController.php +++ b/app/Http/Controllers/Api/FileController.php @@ -8,8 +8,10 @@ use App\Models\FileContent; use App\Models\FileUser; use App\Models\User; use App\Module\Base; +use App\Module\Ihttp; use Arr; use Request; +use Response; /** * @apiDefine file @@ -129,6 +131,9 @@ class FileController extends AbstractController 'mind', 'sheet', 'flow', + 'word', + 'excel', + 'ppt', ])) { return Base::retError('类型错误'); } @@ -254,30 +259,32 @@ class FileController extends AbstractController } /** - * 文件内容 + * 获取文件内容 * * @apiParam {Number} id 文件ID */ public function content() { - $user = User::auth(); - // $id = intval(Request::input('id')); // $file = File::allowFind($id); // - $content = FileContent::whereFid($file->id)->orderByDesc('id')->first(); - if (empty($content)) { - $content = FileContent::createInstance([ - 'fid' => $file->id, - 'content' => '{}', - 'userid' => $user->userid, - ]); - $content->save(); + switch ($file->type) { + case "word": + return Response::download(resource_path('assets/statics/empty/empty.docx')); + + case "excel": + return Response::download(resource_path('assets/statics/empty/empty.xlsx')); + + case "ppt": + return Response::download(resource_path('assets/statics/empty/empty.pptx')); + + default: + $content = FileContent::whereFid($file->id)->orderByDesc('id')->first(); + return Base::retSuccess('success', [ + 'content' => FileContent::formatContent($file->type, $content ? $content->content : []) + ]); } - // - $content->content = $content->formatContent($file->type, $content->content); - return Base::retSuccess('success', $content); } /** @@ -296,6 +303,10 @@ class FileController extends AbstractController // $file = File::allowFind($id); // + if (in_array($file->type, ['word', 'excel', 'ppt'])) { + return Base::retError($file->type . ' 不支持此方式保存'); + } + // $text = ''; if ($file->type == 'document') { $data = Base::json2array($content); @@ -333,6 +344,44 @@ class FileController extends AbstractController return Base::retSuccess('保存成功', $content); } + /** + * 保存文件内容(office) + * + * @apiParam {Number} id 文件ID + */ + public function content__office() + { + $user = User::auth(); + // + $id = intval(Request::input('id')); + $status = intval(Request::input('status')); + $key = Request::input('key'); + $url = Request::input('url'); + // + $file = File::allowFind($id); + // + if ($status === 2) { + $parse = parse_url($url); + $url = 'http://10.22.22.6' . $parse['query'] . '?' . $parse['query']; + $path = public_path('uploads/office/' . $file->id . '/' . $key); + Base::makeDir(dirname($path)); + $res = Ihttp::download($url, $path); + if (Base::isSuccess($res)) { + FileContent::createInstance([ + 'fid' => $file->id, + 'content' => [ + 'from' => $url, + 'url' => 'uploads/office/' . $file->id . '/' . $key + ], + 'text' => '', + 'size' => filesize($path), + 'userid' => $user->userid, + ])->save(); + } + } + return ['error' => 0]; + } + /** * 获取共享信息 * diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php index 27f93cc3..7d18f870 100644 --- a/app/Http/Middleware/VerifyCsrfToken.php +++ b/app/Http/Middleware/VerifyCsrfToken.php @@ -35,5 +35,8 @@ class VerifyCsrfToken extends Middleware // 保存文件内容 'api/file/content/save/', + + // 保存文件内容(office) + 'api/file/content/office/', ]; } diff --git a/docker-compose.yml b/docker-compose.yml index 8cf29bd3..e0fb46d4 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -79,6 +79,21 @@ services: ipv4_address: 10.22.22.5 restart: unless-stopped + office: + container_name: "dooteak-office-${DOCKER_ID}" + image: "onlyoffice/documentserver" + ports: + - "${APP_PORT_ONLYOFFICE}:80" + volumes: + - ./docker/office/data:/var/www/onlyoffice/Data + - ./docker/office/logs:/var/log/onlyoffice + environment: + TZ: "Asia/Shanghai" + networks: + extnetwork: + ipv4_address: 10.22.22.6 + restart: unless-stopped + networks: extnetwork: name: "dooteak-networks-${DOCKER_ID}" diff --git a/docker/office/.gitignore b/docker/office/.gitignore new file mode 100644 index 00000000..cf0767a6 --- /dev/null +++ b/docker/office/.gitignore @@ -0,0 +1,2 @@ +data +logs diff --git a/resources/assets/js/components/OnlyOffice.vue b/resources/assets/js/components/OnlyOffice.vue new file mode 100644 index 00000000..4d6967d6 --- /dev/null +++ b/resources/assets/js/components/OnlyOffice.vue @@ -0,0 +1,129 @@ + + + + diff --git a/resources/assets/js/pages/manage/components/FileContent.vue b/resources/assets/js/pages/manage/components/FileContent.vue index 5d0d86bd..bd767c60 100644 --- a/resources/assets/js/pages/manage/components/FileContent.vue +++ b/resources/assets/js/pages/manage/components/FileContent.vue @@ -12,7 +12,7 @@ [{{$L('未保存')}}*] - {{file.name}} + {{formatName(file.name, file.type)}}
+
@@ -72,10 +73,11 @@ const MDEditor = () => import('../../../components/MDEditor/index'); const TEditor = () => import('../../../components/TEditor'); const LuckySheet = () => import('../../../components/LuckySheet'); const Flow = () => import('../../../components/flow'); +const OnlyOffice = () => import('../../../components/OnlyOffice'); export default { name: "FileContent", - components: {TEditor, MDEditor, LuckySheet, Flow}, + components: {TEditor, MDEditor, LuckySheet, Flow, OnlyOffice}, props: { file: { type: Object, @@ -168,6 +170,11 @@ export default { this.contentDetail = this.fileContent[this.fileId]; return; } + if (['word', 'excel', 'ppt'].includes(this.file.type)) { + this.contentDetail = $A.cloneJSON(this.file); + this.updateBak(); + return; + } this.loadIng++; this.loadContent++; this.$store.dispatch("call", { @@ -255,7 +262,18 @@ export default { unsaveSave() { this.handleClick('save'); this.unsaveTip = false; - } + }, + + formatName(name, type) { + if (type == 'word') { + name += ".docx"; + } else if (type == 'excel') { + name += ".xlsx"; + } else if (type == 'ppt') { + name += ".pptx"; + } + return name; + }, } } diff --git a/resources/assets/js/pages/manage/file.vue b/resources/assets/js/pages/manage/file.vue index e8b97649..1ca94392 100644 --- a/resources/assets/js/pages/manage/file.vue +++ b/resources/assets/js/pages/manage/file.vue @@ -17,7 +17,7 @@ @command="addFile"> - +
{{$L('新建' + type.name)}}
@@ -98,7 +98,7 @@ @on-enter="onEnter(item)"/>
-
{{item.name}}
+
{{formatName(item.name, item.type)}}
@@ -159,10 +159,13 @@ export default { types: [ {value: 'folder', name: "目录"}, - {value: 'document', name: "文本"}, + {value: 'document', name: "文本", divided: true}, {value: 'mind', name: "脑图"}, {value: 'sheet', name: "表格"}, {value: 'flow', name: "流程图"}, + {value: 'word', name: " Word 文档", label: "Word", divided: true}, + {value: 'excel', name: " Excel 工作表", label: "Excel"}, + {value: 'ppt', name: " PPT 演示文稿", label: "PPT"}, ], tableHeight: 500, @@ -304,7 +307,7 @@ export default { }, array), ]); } else { - // 编辑 + // 编辑、查看 array.push(h('QuickEdit', { props: { value: row.name, @@ -328,7 +331,7 @@ export default { } } }, [ - h('AutoTip', row.name) + h('AutoTip', this.formatName(row.name, row.type)) ])); // const iconArray = []; @@ -384,7 +387,7 @@ export default { render: (h, {row}) => { let type = this.types.find(({value}) => value == row.type); if (type) { - return h('AutoTip', type.name); + return h('AutoTip', type.label || type.name); } else { return h('div', '-') } @@ -417,6 +420,17 @@ export default { ] }, + formatName(name, type) { + if (type == 'word') { + name += ".docx"; + } else if (type == 'excel') { + name += ".xlsx"; + } else if (type == 'ppt') { + name += ".pptx"; + } + return name; + }, + getFileList() { this.loadIng++; this.$store.dispatch("getFiles", this.pid).then(() => { diff --git a/resources/assets/sass/pages/components/file-content.scss b/resources/assets/sass/pages/components/file-content.scss index 8838d20e..24c8dee7 100644 --- a/resources/assets/sass/pages/components/file-content.scss +++ b/resources/assets/sass/pages/components/file-content.scss @@ -171,20 +171,20 @@ .luckysheet { border: 0; } + } - .content-load { - display: flex; - align-items: center; - justify-content: center; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - z-index: 1000; - .common-loading { - margin: 0; - } + .content-load { + display: flex; + align-items: center; + justify-content: center; + position: absolute; + top: 42px; + left: 0; + right: 0; + bottom: 0; + z-index: 1000; + .common-loading { + margin: 0; } } } diff --git a/resources/assets/sass/pages/page-file.scss b/resources/assets/sass/pages/page-file.scss index 96fef8a5..e78924ac 100644 --- a/resources/assets/sass/pages/page-file.scss +++ b/resources/assets/sass/pages/page-file.scss @@ -270,6 +270,15 @@ &.flow:before { background-image: url("../images/file/flow.svg"); } + &.word:before { + background-image: url("../images/file/word.svg"); + } + &.excel:before { + background-image: url("../images/file/excel.svg"); + } + &.ppt:before { + background-image: url("../images/file/ppt.svg"); + } } .taskfont { color: #aaaaaa; @@ -395,6 +404,15 @@ &.flow .file-icon { background-image: url("../images/file/flow.svg"); } + &.word .file-icon { + background-image: url("../images/file/word.svg"); + } + &.excel .file-icon { + background-image: url("../images/file/excel.svg"); + } + &.ppt .file-icon { + background-image: url("../images/file/ppt.svg"); + } &:hover { background-color: #f4f5f7; .file-menu { @@ -436,5 +454,14 @@ &.flow:before { background-image: url("../images/file/flow.svg"); } + &.word:before { + background-image: url("../images/file/word.svg"); + } + &.excel:before { + background-image: url("../images/file/excel.svg"); + } + &.ppt:before { + background-image: url("../images/file/ppt.svg"); + } } } diff --git a/resources/assets/statics/empty/empty.docx b/resources/assets/statics/empty/empty.docx new file mode 100644 index 0000000000000000000000000000000000000000..d491eadc02821dba2e6ac53f6e18628f37b2add3 GIT binary patch literal 10994 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 X3-VHsKg|~=DEWX3+8rI_kD&hn$A0Ez literal 0 HcmV?d00001 diff --git a/resources/assets/statics/empty/empty.pptx b/resources/assets/statics/empty/empty.pptx new file mode 100644 index 0000000000000000000000000000000000000000..d2a2e2f92670476d76aab127e12f675447cb6c2b GIT binary patch literal 26882 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 z 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 literal 0 HcmV?d00001 diff --git a/resources/assets/statics/empty/empty.xlsx b/resources/assets/statics/empty/empty.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..026036fb627966abaae4524c38ef1a62ed5b909a GIT binary patch literal 8128 zcmai31z40@x28iuY6xkNZWtI+8bliDZls59q>+?Hx{*#vVdw@4kx;rzQc~&;djI2* z|J-x;^UQoR^R2blx8J??+I!wtQ3f920nA-{Ex#;$cl}R8g?=yr8!I}1?HpMZp=JQ+ z4=6v)MATzCxL{#mIN@MmF#m35XlKXbW@DWm(=H9q4v;wWzs0NukKS{zX`%XY#z7X#{Oa#xl@ zu-OLizA^zl>Uc|Y_6%<#Ycirh|=2Fe=sz&>`i7R+9Kfn<&Y{3=zE-<~vE zo}WFQ@Nl#Ha&Tp4=X#?P=jE6JIQ?72Y3)4DiY-OhZa0YBUfej9qVJYjW`z|o>-B({&;oM{%%2c1#0z|-heFH>g&6Da5F3LXOz$vGh-sJa zWWyBSm%0*L^<3r=K`f=hg&ROb@TbJ&9-Obkt1|u)T;mfJS3`lqLJR?33N&dC)fc}J zZ0Gy3i5){Ffn`3AQZz;Fp~tce1n`d37&zxyeP*&MMApxK&2N?oc<-Mc3rc z#+$D|vI+QGV7qm&iTOfGdKlI_$IGh>uhPq4Us~{WJ`lhe0?xu31F^?Q>CZzr$?EoC z{f!Gn{7xUm1ulXskV|GW(IFi63|p==Lp4$SrVj-}ay@re&8=rZ7T*OW`xFj#=602Z zESa3^86OogAQa5PeUB`&W!bABdnizZP>TW75Eh43c+G~qM%~)1#iE#y|2TAfJSk6x zBliOJ4ytnL-BkC#TMreT%8@A zz&1a#H(ErYlN{i?PjiFZkuIvaEh*MC?b75n+STX@?_~8N3sy@v;#N0htJ%}*La)VZ z|8Vy;X7O%psaZ$%1!HQBd5n;{>SIO>as;*2 z@MYW_{~)e)z|KzjAwrrEzRkPZdA=9GNZ(JVMZFV9^*A?TMX2i#EYg1%>*B3*fqsY9 zKi30zC|YjTKP$mM8$9}D;0kuIax^zJb-G_Q{BB^u$xztYpgj@%m+em%_B;F|U&w)H z*w7#t(>|C^6{h$f)eV~n2oYusg{wy18;#XrK0l^vwyNIN1S$0nH63 zb5k4BdwYc}N#f`XA`A@q<6jHzFSDPKHEoEVBijE4{nEqW_-i+_;H!{fzrZlAk83y5O5%!sB#$1kXMq@~#R4rLQ3sOBGtdfpv$QKb6;-67}jP!WB(T zwQ3oN5tXuNKc5b^zMcjL+rYS1R-s%CxdX7w^YlM04>&K!l z932?>`$|+)0-NWm*Bk0C6)L0hhT>~T+MTvpw-1^+$kS}Mc-=W!Xv?OEPS*9d^x+G2 zdQY^k%~~~ojKcsBDnF%#Z@sTtnBV7mPzpOB#OHOU1=≺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 \ No newline at end of file + \ No newline at end of file diff --git a/resources/assets/statics/public/images/file/excel.svg b/resources/assets/statics/public/images/file/excel.svg new file mode 100644 index 00000000..86688755 --- /dev/null +++ b/resources/assets/statics/public/images/file/excel.svg @@ -0,0 +1 @@ + diff --git a/resources/assets/statics/public/images/file/flow.svg b/resources/assets/statics/public/images/file/flow.svg index f32e101d..1af5497f 100644 --- a/resources/assets/statics/public/images/file/flow.svg +++ b/resources/assets/statics/public/images/file/flow.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/assets/statics/public/images/file/folder.svg b/resources/assets/statics/public/images/file/folder.svg index 60788d5b..47b32776 100644 --- a/resources/assets/statics/public/images/file/folder.svg +++ b/resources/assets/statics/public/images/file/folder.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/assets/statics/public/images/file/mind.svg b/resources/assets/statics/public/images/file/mind.svg index a6636648..af2e370e 100644 --- a/resources/assets/statics/public/images/file/mind.svg +++ b/resources/assets/statics/public/images/file/mind.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/assets/statics/public/images/file/ppt.svg b/resources/assets/statics/public/images/file/ppt.svg new file mode 100644 index 00000000..3d37b593 --- /dev/null +++ b/resources/assets/statics/public/images/file/ppt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/assets/statics/public/images/file/sheet.svg b/resources/assets/statics/public/images/file/sheet.svg index 77ced9bd..d7e11669 100644 --- a/resources/assets/statics/public/images/file/sheet.svg +++ b/resources/assets/statics/public/images/file/sheet.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/assets/statics/public/images/file/word.svg b/resources/assets/statics/public/images/file/word.svg new file mode 100644 index 00000000..d388d694 --- /dev/null +++ b/resources/assets/statics/public/images/file/word.svg @@ -0,0 +1 @@ + \ No newline at end of file