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%;
+ }
+}
+