From 10d68790e72258b06d737f2ba7bceb97169d19e1 Mon Sep 17 00:00:00 2001 From: weifashi <605403358@qq.com> Date: Tue, 11 Jul 2023 18:59:34 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E7=BB=84=E4=BB=B6=E5=85=B1?= =?UTF-8?q?=E4=BA=AB=E7=A0=94=E7=A9=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/assets/js/microapp.js | 2 + resources/assets/js/pages/manage.vue | 12 +- .../pages/manage/components/DialogWrapper.vue | 6 +- resources/assets/js/pages/manage/microapp.vue | 90 +++++ resources/assets/js/pages/manage/test/gggg.js | 311 ++++++++++++++++++ resources/assets/js/pages/microapp.vue | 7 - resources/assets/js/routes.js | 12 +- resources/assets/sass/pages/_.scss | 1 + .../assets/sass/pages/page-microapp.scss | 9 + 9 files changed, 435 insertions(+), 15 deletions(-) create mode 100644 resources/assets/js/pages/manage/microapp.vue create mode 100644 resources/assets/js/pages/manage/test/gggg.js delete mode 100644 resources/assets/js/pages/microapp.vue create mode 100644 resources/assets/sass/pages/page-microapp.scss diff --git a/resources/assets/js/microapp.js b/resources/assets/js/microapp.js index d0a908dcb..a520ca210 100644 --- a/resources/assets/js/microapp.js +++ b/resources/assets/js/microapp.js @@ -1,4 +1,5 @@ import microApp from '@micro-zoe/micro-app' +import DialogWrapper from "./pages/manage/components/DialogWrapper.vue"; export default function() { let urls = ""; @@ -28,6 +29,7 @@ export default function() { // 微应用 microApp.start({ plugins: { + global: [DialogWrapper], modules: modules } }) diff --git a/resources/assets/js/pages/manage.vue b/resources/assets/js/pages/manage.vue index 1f874d47b..8607c3254 100644 --- a/resources/assets/js/pages/manage.vue +++ b/resources/assets/js/pages/manage.vue @@ -565,11 +565,15 @@ export default { {path: 'team', name: '团队管理', divided: true}, {path: 'approve', name: '审批中心'}, + {path: 'okrManage', name: 'OkR管理'}, + {path: 'okrAnalyze', name: 'OkR结果分析'}, ]) } else { array.push(...[ {path: 'personal', name: '个人设置', divided: true}, {path: 'approve', name: '审批中心'}, + {path: 'okrManage', name: 'OkR管理'}, + {path: 'okrAnalyze', name: 'OkR结果分析'}, {path: 'version', name: '更新版本', divided: true, visible: !!this.clientNewVersion}, {path: 'workReport', name: '工作报告', divided: true}, @@ -771,11 +775,17 @@ export default { this.goForward('index'); } return; - case 'approve': + case 'approve': if (this.menu.findIndex((m) => m.path == path) > -1) { this.goForward({name: 'manage-approve'}); } return; + case 'okrManage': + case 'okrAnalyze': + if (this.menu.findIndex((m) => m.path == path) > -1) { + this.goForward({path: '/manage/microapp/'}); + } + return; case 'logout': $A.modalConfirm({ title: '退出登录', diff --git a/resources/assets/js/pages/manage/components/DialogWrapper.vue b/resources/assets/js/pages/manage/components/DialogWrapper.vue index 074723167..d43998cb1 100644 --- a/resources/assets/js/pages/manage/components/DialogWrapper.vue +++ b/resources/assets/js/pages/manage/components/DialogWrapper.vue @@ -540,7 +540,7 @@ export default { props: { dialogId: { type: Number, - default: 0 + default: 1 }, msgId: { type: Number, @@ -559,6 +559,9 @@ export default { data() { return { + + dialogId:1, + msgItem: DialogItem, msgText: '', msgNew: 0, @@ -651,6 +654,7 @@ export default { }, beforeDestroy() { + console.log(21123123123123123123) this.$store.dispatch('forgetInDialog', this._uid) this.$store.dispatch('closeDialog', this.dialogId) }, diff --git a/resources/assets/js/pages/manage/microapp.vue b/resources/assets/js/pages/manage/microapp.vue new file mode 100644 index 000000000..2d843f49d --- /dev/null +++ b/resources/assets/js/pages/manage/microapp.vue @@ -0,0 +1,90 @@ + + + \ No newline at end of file diff --git a/resources/assets/js/pages/manage/test/gggg.js b/resources/assets/js/pages/manage/test/gggg.js new file mode 100644 index 000000000..408f3f5d8 --- /dev/null +++ b/resources/assets/js/pages/manage/test/gggg.js @@ -0,0 +1,311 @@ +import Vue from 'vue'; +import Modal from './modal.vue'; +import Button from '../button/button.vue'; +import Locale from '../../mixins/locale'; + +const prefixCls = 'ivu-modal-confirm'; + +Modal.newInstance = properties => { + const _props = properties || {}; + + const Instance = new Vue({ + mixins: [ Locale ], + data: Object.assign({}, _props, { + visible: false, + width: 416, + title: '', + body: '', + iconType: '', + iconName: '', + okText: undefined, + cancelText: undefined, + showCancel: false, + loading: false, + buttonLoading: false, + scrollable: false, + closable: false, + closing: false, // 关闭有动画,期间使用此属性避免重复点击 + okIng: false, + enterOk: false, + }), + render (h) { + let footerVNodes = []; + if (this.showCancel) { + footerVNodes.push(h(Button, { + props: { + type: 'text' + }, + on: { + click: this.cancel + } + }, this.localeCancelText)); + } + footerVNodes.push(h(Button, { + props: { + type: 'primary', + loading: this.buttonLoading + }, + on: { + click: this.ok + } + }, this.localeOkText)); + + // render content + let body_render; + if (this.render) { + body_render = h('div', { + attrs: { + class: `${prefixCls}-body ${prefixCls}-body-render` + } + }, [this.render(h)]); + } else { + body_render = h('div', { + attrs: { + class: `${prefixCls}-body` + } + }, [ + h('div', { + domProps: { + innerHTML: this.body + } + }) + ]); + } + + // when render with no title, hide head + let head_render; + if (this.title) { + head_render = h('div', { + attrs: { + class: `${prefixCls}-head` + } + }, [ + h('div', { + class: this.iconTypeCls + }, [ + h('i', { + class: this.iconNameCls + }) + ]), + h('div', { + attrs: { + class: `${prefixCls}-head-title` + }, + domProps: { + innerHTML: this.title + } + }) + ]); + } + + return h(Modal, { + props: Object.assign({}, _props, { + width: this.width, + scrollable: this.scrollable, + closable: this.closable, + enterOk: this.enterOk + }), + domProps: { + value: this.visible + }, + on: { + input: (status) => { + this.visible = status; + }, + 'on-cancel': this.cancel + } + }, [ + h('div', { + attrs: { + class: prefixCls + } + }, [ + head_render, + body_render, + h('div', { + attrs: { + class: `${prefixCls}-footer` + } + }, footerVNodes) + ]) + ]); + }, + computed: { + iconTypeCls () { + return [ + `${prefixCls}-head-icon`, + `${prefixCls}-head-icon-${this.iconType}` + ]; + }, + iconNameCls () { + return [ + 'ivu-icon', + `ivu-icon-${this.iconName}` + ]; + }, + localeOkText () { + if (this.okText) { + return this.okText; + } else { + return this.t('i.modal.okText'); + } + }, + localeCancelText () { + if (this.cancelText) { + return this.cancelText; + } else { + return this.t('i.modal.cancelText'); + } + } + }, + methods: { + cancel () { + if (this.closing) return; + this.$children[0].visible = false; + this.buttonLoading = false; + this.onCancel(); + this.remove(); + }, + ok () { + if (this.closing) return; + if (this.loading) { + this.buttonLoading = true; + } else { + this.$children[0].visible = false; + this.remove(); + } + + this.okIng = true; + const call = this.onOk(); + if (call && call.then) { + call.then(() => { + this.$children[0].visible = false; + this.remove(); + }).catch(() => { + this.buttonLoading = false; + }).finally(_ => { + this.okIng = false; + }); + } else { + this.okIng = false; + } + }, + remove () { + this.closing = true; + setTimeout(() => { + this.closing = false; + this.destroy(); + }, 300); + }, + destroy () { + this.$destroy(); + if (this.$el) { + try { + if (this.append && typeof this.append === 'object') { + this.append.removeChild(this.$el); + } else { + document.body.removeChild(this.$el); + } + } catch (e) { + + } + } + this.onRemove(); + }, + onOk () {}, + onCancel () {}, + onRemove () {} + } + }); + + const component = Instance.$mount(); + if (_props.append && typeof _props.append === 'object') { + _props.append.appendChild(component.$el); + } else { + document.body.appendChild(component.$el); + } + const modal = Instance.$children[0]; + + return { + show (props) { + modal.$parent.showCancel = props.showCancel; + modal.$parent.iconType = props.icon; + + switch (props.icon) { + case 'info': + modal.$parent.iconName = 'ios-information-circle'; + break; + case 'success': + modal.$parent.iconName = 'ios-checkmark-circle'; + break; + case 'warning': + modal.$parent.iconName = 'ios-alert'; + break; + case 'error': + modal.$parent.iconName = 'ios-close-circle'; + break; + case 'confirm': + modal.$parent.iconName = 'ios-help-circle'; + break; + } + + if ('width' in props) { + modal.$parent.width = props.width; + } + + if ('closable' in props) { + modal.$parent.closable = props.closable; + } + + if ('title' in props) { + modal.$parent.title = props.title; + } + + if ('content' in props) { + modal.$parent.body = props.content; + } + + if ('okText' in props) { + modal.$parent.okText = props.okText; + } + + if ('cancelText' in props) { + modal.$parent.cancelText = props.cancelText; + } + + if ('onCancel' in props) { + modal.$parent.onCancel = props.onCancel; + } + + if ('onOk' in props) { + modal.$parent.onOk = props.onOk; + } + + // async for ok + if ('loading' in props) { + modal.$parent.loading = props.loading; + } + + if ('scrollable' in props) { + modal.$parent.scrollable = props.scrollable; + } + + if ('enterOk' in props) { + modal.$parent.enterOk = props.enterOk; + } + + // notice when component destroy + modal.$parent.onRemove = props.onRemove; + + modal.visible = true; + }, + remove () { + modal.visible = false; + modal.$parent.buttonLoading = false; + modal.$parent.remove(); + }, + component: modal + }; +}; + +export default Modal; diff --git a/resources/assets/js/pages/microapp.vue b/resources/assets/js/pages/microapp.vue deleted file mode 100644 index 96171bd5b..000000000 --- a/resources/assets/js/pages/microapp.vue +++ /dev/null @@ -1,7 +0,0 @@ - \ No newline at end of file diff --git a/resources/assets/js/routes.js b/resources/assets/js/routes.js index f0fc654bc..36a273a95 100755 --- a/resources/assets/js/routes.js +++ b/resources/assets/js/routes.js @@ -39,6 +39,11 @@ export default [ path: 'approve/details', component: () => import('./pages/manage/approve/details.vue'), }, + { + name: 'manage-microapp', + path: 'microapp/*', + component: () => import('./pages/manage/microapp.vue') + }, { name: 'manage-setting', path: 'setting', @@ -167,10 +172,5 @@ export default [ name: '404', path: '*', component: () => import('./pages/404.vue') - }, - { - path: '/microapp/*', - name: 'microapp', - component: () => import('./pages/microapp.vue') - }, + } ] diff --git a/resources/assets/sass/pages/_.scss b/resources/assets/sass/pages/_.scss index af6da2891..7fac2bb9c 100755 --- a/resources/assets/sass/pages/_.scss +++ b/resources/assets/sass/pages/_.scss @@ -9,4 +9,5 @@ @import "page-setting"; @import "page-index"; @import "page-approve"; +@import "page-microapp"; @import "components/_"; diff --git a/resources/assets/sass/pages/page-microapp.scss b/resources/assets/sass/pages/page-microapp.scss new file mode 100644 index 000000000..50d636fdc --- /dev/null +++ b/resources/assets/sass/pages/page-microapp.scss @@ -0,0 +1,9 @@ +.page-microapp { + .microapp-load{ + align-items: center; + display: flex; + justify-content: center; + height: 90%; + } +} +