From ccea4b5b1b8af93575613ff77f0af3fb06782c3d Mon Sep 17 00:00:00 2001 From: weifashi <605403358@qq.com> Date: Mon, 10 Jul 2023 18:41:15 +0800 Subject: [PATCH 01/80] =?UTF-8?q?feat=EF=BC=9A=E6=B7=BB=E5=8A=A0=E5=BE=AE?= =?UTF-8?q?=E5=BA=94=E7=94=A8=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 5 +++- resources/assets/js/app.js | 3 +++ resources/assets/js/microapp.js | 35 ++++++++++++++++++++++++++ resources/assets/js/pages/microapp.vue | 7 ++++++ resources/assets/js/routes.js | 5 ++++ 5 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 resources/assets/js/microapp.js create mode 100644 resources/assets/js/pages/microapp.vue diff --git a/package.json b/package.json index 3200a0718..090d9573c 100644 --- a/package.json +++ b/package.json @@ -87,5 +87,8 @@ "url": "https://www.dootask.com/desktop/publish" } } - ] + ], + "dependencies": { + "@micro-zoe/micro-app": "^0.8.11" + } } diff --git a/resources/assets/js/app.js b/resources/assets/js/app.js index 60a1cccba..85a2bca9c 100644 --- a/resources/assets/js/app.js +++ b/resources/assets/js/app.js @@ -1,6 +1,9 @@ const isElectron = !!(window && window.process && window.process.type); const isEEUiApp = window && window.navigator && /eeui/i.test(window.navigator.userAgent); +import microappInit from "./microapp" +microappInit() + import {switchLanguage as $L} from "./language"; import './functions/common' diff --git a/resources/assets/js/microapp.js b/resources/assets/js/microapp.js new file mode 100644 index 000000000..d0a908dcb --- /dev/null +++ b/resources/assets/js/microapp.js @@ -0,0 +1,35 @@ +import microApp from '@micro-zoe/micro-app' + +export default function() { + let urls = ""; + let route = "/microapp/"; + let modules = {}; + + let obj = { + loader(code,url) { + if (process.env.NODE_ENV === 'development') { + const match = /^https?:\/\/([^:/]+)(?::(\d+))?/.exec(url); + if( match && match[0] && url.indexOf('@vite/client') !== -1 ){ + urls = url.replace("@vite/client",""); + route = urls.replace(match[0].replace("@vite/client",""),""); + } + // 这里 /basename/ 需要和子应用vite.config.js中base的配置保持一致 + code = code.replace( eval(`/(from|import)(\\s*['"])(${route.replace(/\//g,"\\/")})/g`) , all => { + return all.replace(route, urls) + }) + } + return code + } + } + + // 微应用名称 + modules["micro-app"] = [obj] + + // 微应用 + microApp.start({ + plugins: { + modules: modules + } + }) + +} \ No newline at end of file diff --git a/resources/assets/js/pages/microapp.vue b/resources/assets/js/pages/microapp.vue new file mode 100644 index 000000000..96171bd5b --- /dev/null +++ b/resources/assets/js/pages/microapp.vue @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/resources/assets/js/routes.js b/resources/assets/js/routes.js index 13ba1ab4a..f0fc654bc 100755 --- a/resources/assets/js/routes.js +++ b/resources/assets/js/routes.js @@ -168,4 +168,9 @@ export default [ path: '*', component: () => import('./pages/404.vue') }, + { + path: '/microapp/*', + name: 'microapp', + component: () => import('./pages/microapp.vue') + }, ] 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 02/80] =?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%; + } +} + From fead7586607c48bdf017d17f53d1ff6eaa249bfd Mon Sep 17 00:00:00 2001 From: weifashi <605403358@qq.com> Date: Wed, 12 Jul 2023 14:58:52 +0800 Subject: [PATCH 03/80] =?UTF-8?q?feat=EF=BC=9A=E5=A4=9A=E5=BA=94=E7=94=A8?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/assets/js/pages/manage.vue | 7 ++- .../manage/components/ChatInput/index.vue | 1 - .../pages/manage/components/DialogWrapper.vue | 5 +- resources/assets/js/pages/manage/microapp.vue | 55 ++++++++++++------- 4 files changed, 40 insertions(+), 28 deletions(-) diff --git a/resources/assets/js/pages/manage.vue b/resources/assets/js/pages/manage.vue index 8607c3254..c4996c004 100644 --- a/resources/assets/js/pages/manage.vue +++ b/resources/assets/js/pages/manage.vue @@ -573,7 +573,6 @@ export default { {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}, @@ -782,8 +781,10 @@ export default { return; case 'okrManage': case 'okrAnalyze': - if (this.menu.findIndex((m) => m.path == path) > -1) { - this.goForward({path: '/manage/microapp/'}); + if(path=='okrManage'){ + this.goForward({path: '/manage/microapp/' }); + }else{ + this.goForward({path: '/manage/microapp/#/main' }); } return; case 'logout': diff --git a/resources/assets/js/pages/manage/components/ChatInput/index.vue b/resources/assets/js/pages/manage/components/ChatInput/index.vue index 2130d6754..61e5d76eb 100755 --- a/resources/assets/js/pages/manage/components/ChatInput/index.vue +++ b/resources/assets/js/pages/manage/components/ChatInput/index.vue @@ -713,7 +713,6 @@ export default { this.quill.on('text-change', _ => { this.textTimer && clearTimeout(this.textTimer) this.textTimer = setTimeout(_ => { - console.log(11); if (this.maxlength > 0 && this.quill.getLength() > this.maxlength) { this.quill.deleteText(this.maxlength, this.quill.getLength()); } diff --git a/resources/assets/js/pages/manage/components/DialogWrapper.vue b/resources/assets/js/pages/manage/components/DialogWrapper.vue index d43998cb1..9381b0a55 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: 1 + default: 0 }, msgId: { type: Number, @@ -559,9 +559,6 @@ export default { data() { return { - - dialogId:1, - msgItem: DialogItem, msgText: '', msgNew: 0, diff --git a/resources/assets/js/pages/manage/microapp.vue b/resources/assets/js/pages/manage/microapp.vue index 2d843f49d..1a3c624e5 100644 --- a/resources/assets/js/pages/manage/microapp.vue +++ b/resources/assets/js/pages/manage/microapp.vue @@ -5,13 +5,11 @@ - import Vue from 'vue' +import store from '../../store/index' +import {mapState} from "vuex"; import { EventCenterForMicroApp } from '@micro-zoe/micro-app' -import ProjectDialog from "./components/ProjectDialog.vue"; -import DialogWrapper from "./components/DialogWrapper.vue"; - -window.DialogWrapper = DialogWrapper; -// Vue.component('MyComponent', { -// // 组件的配置和代码... -// }) -window.Vue = Vue; +import DialogWrapper from './components/DialogWrapper' +import {languageList, languageType} from "../../language"; export default { - components: { ProjectDialog, DialogWrapper }, data() { return { loading: false, - microAppUrl: 'http://localhost:5567/', - microAppData: { } + microAppUrl: 'http://localhost:5567/manage/microapp/#/main', + microAppData: {} } }, @@ -54,14 +47,24 @@ export default { '$route': { handler(to) { if( to.name == 'manage-microapp' ){ - this.loading = false; - window.eventCenterForAppNameVite = new EventCenterForMicroApp("micro-app") + this.loading = true; + this.$nextTick(()=>{ + this.loading = false; + window.eventCenterForAppNameVite = new EventCenterForMicroApp("micro-app") + }) } }, immediate: true, }, }, + computed: { + ...mapState([ + 'userInfo', + 'themeMode', + ]) + }, + methods: { handleCreate(e) { console.log("子应用创建了",e) @@ -70,9 +73,21 @@ export default { console.log("子应用即将被渲染",e) }, handleMount(e) { - console.log("子应用已经渲染完成",e) - this.microAppData = { - msg: '来自基座的数据' + this.microAppData = { + type: 'init', + vues:{ + Vue, + store, + components:{ + DialogWrapper + } + }, + theme: this.themeMode, + languages: { + languageList, + languageType, + }, + userInfo: this.userInfo, } }, handleUnmount(e) { From f6fd9a5edf9e4c9c4f983b7cab54f4ed00b601b1 Mon Sep 17 00:00:00 2001 From: weifashi <605403358@qq.com> Date: Wed, 12 Jul 2023 15:29:17 +0800 Subject: [PATCH 04/80] =?UTF-8?q?feat=EF=BC=9A=E6=B7=BB=E5=8A=A0=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/assets/js/pages/manage.vue | 5 +++-- resources/assets/js/pages/manage/microapp.vue | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/resources/assets/js/pages/manage.vue b/resources/assets/js/pages/manage.vue index c4996c004..1cb9895e1 100644 --- a/resources/assets/js/pages/manage.vue +++ b/resources/assets/js/pages/manage.vue @@ -781,10 +781,11 @@ export default { return; case 'okrManage': case 'okrAnalyze': + let query = { url: import.meta.env.VITE_OKR_WEB_URL || "/manage/microapp/okr/" } if(path=='okrManage'){ - this.goForward({path: '/manage/microapp/' }); + this.goForward({ path: '/manage/microapp/', query }); }else{ - this.goForward({path: '/manage/microapp/#/main' }); + this.goForward({ path: '/manage/microapp/#/main', query }); } return; case 'logout': diff --git a/resources/assets/js/pages/manage/microapp.vue b/resources/assets/js/pages/manage/microapp.vue index 1a3c624e5..2f126f5dd 100644 --- a/resources/assets/js/pages/manage/microapp.vue +++ b/resources/assets/js/pages/manage/microapp.vue @@ -7,7 +7,6 @@ { this.loading = false; + this.microAppUrl = this.$route.query.url window.eventCenterForAppNameVite = new EventCenterForMicroApp("micro-app") }) } From ddc7aecd53d7b71618e557488dd3d55e6d1f62ae Mon Sep 17 00:00:00 2001 From: weifashi <605403358@qq.com> Date: Wed, 12 Jul 2023 18:44:28 +0800 Subject: [PATCH 05/80] =?UTF-8?q?feat=EF=BC=9A=E5=BE=AE=E5=BA=94=E7=94=A8?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E8=A1=A5=E5=85=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/nginx/default.conf | 5 +++++ resources/assets/js/pages/manage/microapp.vue | 9 ++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/docker/nginx/default.conf b/docker/nginx/default.conf index 906db1e6f..94e0ecd17 100644 --- a/docker/nginx/default.conf +++ b/docker/nginx/default.conf @@ -183,6 +183,11 @@ server { proxy_set_header Content-Length $request_length; proxy_pass http://service/api/approve/verifyToken; } + + # OKR + location /manage/microapp/okr/ { + proxy_pass http://192.168.100.83:5566/; + } } include /etc/nginx/conf.d/conf.d/*.conf; diff --git a/resources/assets/js/pages/manage/microapp.vue b/resources/assets/js/pages/manage/microapp.vue index 2f126f5dd..57e2bec01 100644 --- a/resources/assets/js/pages/manage/microapp.vue +++ b/resources/assets/js/pages/manage/microapp.vue @@ -7,9 +7,8 @@ { this.loading = false; - this.microAppUrl = this.$route.query.url + let url = $A.apiUrl(this.$route.query.url) + if( url.indexOf('http') == -1 ){ + url = window.location.origin + url + } + this.microAppUrl =url window.eventCenterForAppNameVite = new EventCenterForMicroApp("micro-app") }) } From af5db70c073bc47a5fbd08e27087d39f2bc6f2a9 Mon Sep 17 00:00:00 2001 From: ganzizi Date: Wed, 19 Jul 2023 18:26:12 +0800 Subject: [PATCH 06/80] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9EOKR=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/DialogController.php | 114 ++++++++++++++---- app/Models/User.php | 5 + .../manage/components/DialogGroupInfo.vue | 1 + 3 files changed, 98 insertions(+), 22 deletions(-) diff --git a/app/Http/Controllers/Api/DialogController.php b/app/Http/Controllers/Api/DialogController.php index bef2a669d..712b212a2 100755 --- a/app/Http/Controllers/Api/DialogController.php +++ b/app/Http/Controllers/Api/DialogController.php @@ -814,7 +814,7 @@ class DialogController extends AbstractController } /** - * @api {post} api/dialog/msg/sendfiles 38. 群发文件上传 + * @api {post} api/dialog/msg/sendfiles 17. 群发文件上传 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 @@ -869,7 +869,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/msg/sendfileid 17. 通过文件ID发送文件 + * @api {get} api/dialog/msg/sendfileid 18. 通过文件ID发送文件 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 @@ -939,7 +939,7 @@ class DialogController extends AbstractController } /** - * @api {post} api/dialog/msg/sendanon 18. 发送匿名消息 + * @api {post} api/dialog/msg/sendanon 19. 发送匿名消息 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 @@ -992,7 +992,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/msg/readlist 19. 获取消息阅读情况 + * @api {get} api/dialog/msg/readlist 20. 获取消息阅读情况 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 @@ -1021,7 +1021,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/msg/detail 20. 消息详情 + * @api {get} api/dialog/msg/detail 21. 消息详情 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 @@ -1069,7 +1069,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/msg/download 21. 文件下载 + * @api {get} api/dialog/msg/download 22. 文件下载 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 @@ -1112,7 +1112,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/msg/withdraw 22. 聊天消息撤回 + * @api {get} api/dialog/msg/withdraw 23. 聊天消息撤回 * * @apiDescription 消息撤回限制24小时内,需要token身份 * @apiVersion 1.0.0 @@ -1138,7 +1138,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/msg/mark 23. 消息标记操作 + * @api {get} api/dialog/msg/mark 24. 消息标记操作 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 @@ -1205,7 +1205,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/msg/silence 24. 消息免打扰 + * @api {get} api/dialog/msg/silence 25. 消息免打扰 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 @@ -1268,7 +1268,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/msg/forward 25. 转发消息给 + * @api {get} api/dialog/msg/forward 26. 转发消息给 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 @@ -1305,7 +1305,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/msg/emoji 26. emoji回复 + * @api {get} api/dialog/msg/emoji 27. emoji回复 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 @@ -1340,7 +1340,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/msg/tag 27. 标注/取消标注 + * @api {get} api/dialog/msg/tag 28. 标注/取消标注 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 @@ -1369,7 +1369,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/msg/todo 28. 设待办/取消待办 + * @api {get} api/dialog/msg/todo 29. 设待办/取消待办 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 @@ -1412,7 +1412,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/msg/todolist 29. 获取消息待办情况 + * @api {get} api/dialog/msg/todolist 30. 获取消息待办情况 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 @@ -1442,7 +1442,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/msg/done 30. 完成待办 + * @api {get} api/dialog/msg/done 31. 完成待办 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 @@ -1489,7 +1489,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/group/add 31. 新增群组 + * @api {get} api/dialog/group/add 32. 新增群组 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 @@ -1551,7 +1551,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/group/edit 32. 修改群组 + * @api {get} api/dialog/group/edit 33. 修改群组 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 @@ -1612,7 +1612,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/group/adduser 33. 添加群成员 + * @api {get} api/dialog/group/adduser 34. 添加群成员 * * @apiDescription 需要token身份 * - 有群主时:只有群主可以邀请 @@ -1648,7 +1648,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/group/deluser 34. 移出(退出)群成员 + * @api {get} api/dialog/group/deluser 35. 移出(退出)群成员 * * @apiDescription 需要token身份 * - 只有群主、邀请人可以踢人 @@ -1692,7 +1692,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/group/transfer 35. 转让群组 + * @api {get} api/dialog/group/transfer 36. 转让群组 * * @apiDescription 需要token身份 * - 只有群主且是个人类型群可以解散 @@ -1736,7 +1736,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/group/disband 36. 解散群组 + * @api {get} api/dialog/group/disband 37. 解散群组 * * @apiDescription 需要token身份 * - 只有群主且是个人类型群可以解散 @@ -1764,7 +1764,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/group/searchuser 37. 搜索个人群(仅限管理员) + * @api {get} api/dialog/group/searchuser 38. 搜索个人群(仅限管理员) * * @apiDescription 需要token身份,用于创建部门搜索个人群组 * @apiVersion 1.0.0 @@ -1791,4 +1791,74 @@ class DialogController extends AbstractController 'list' => $builder->take(20)->get() ]); } + + /** + * @api {post} api/dialog/okr/add 39. 创建OKR评论会话 + * + * @apiDescription 需要token身份 + * @apiVersion 1.0.0 + * @apiGroup dialog + * @apiName okr__add + * + * @apiParam {String} name 标题 + * @apiParam {Array} userids 群成员,格式: [userid1, userid2, userid3] + * + * @apiSuccess {Number} ret 返回状态码(1正确、0错误) + * @apiSuccess {String} msg 返回信息(错误描述) + * @apiSuccess {Object} data 返回数据 + */ + public function okr__add() + { + $user = User::auth(); + // + $name = trim(Request::input('name')); + $userids = Request::input('userids'); + // + if (empty($name)) { + return Base::retError('群名称至少2个字'); + } + // + $dialog = WebSocketDialog::createGroup($name, $userids, 'okr', $user->userid); + if (empty($dialog)) { + return Base::retError('创建群组失败'); + } + WebSocketDialogMsg::sendMsg(null, $dialog->id, 'text', ['text' => "test"], $user->userid); + return Base::retSuccess('创建成功', $dialog); + } + + + + + /** + * @api {post} api/dialog/okr/push 40. 推送OKR相关信息 + * + * @apiDescription 需要token身份 + * @apiVersion 1.0.0 + * @apiGroup dialog + * @apiName okr__push + * + * @apiParam {String} text 发送内容 + * @apiParam {Number} userid 成员ID + * + * @apiSuccess {Number} ret 返回状态码(1正确、0错误) + * @apiSuccess {String} msg 返回信息(错误描述) + * @apiSuccess {Object} data 返回数据 + */ + public function okr__push() + { + User::auth(); + $text = trim(Request::input('text')); + $userid = intval(Request::input('userid')); + // + $botUser = User::botGetOrCreate('okr-alert'); + if (empty($botUser)) { + return Base::retError('机器人不存在'); + } + // + $dialog = WebSocketDialog::checkUserDialog($botUser, $userid); + if ($dialog) { + WebSocketDialogMsg::sendMsg(null, $dialog->id, 'text', ['text' => $text], $botUser->userid); + } + return Base::retSuccess('success', $dialog); + } } diff --git a/app/Models/User.php b/app/Models/User.php index d254c1efb..257e075ed 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -533,6 +533,8 @@ class User extends AbstractModel return url("images/avatar/default_anon.png"); case 'approval-alert@bot.system': return url("images/avatar/default_approval.png"); + case 'okr-alert@bot.system': + return url("images/avatar/default_task.png"); case 'bot-manager@bot.system': return url("images/avatar/default_bot.png"); } @@ -619,6 +621,9 @@ class User extends AbstractModel case 'approval-alert': $update['nickname'] = '审批'; break; + case 'okr-alert': + $update['nickname'] = "OKR提醒"; + break; case 'bot-manager': $update['nickname'] = '机器人管理'; break; diff --git a/resources/assets/js/pages/manage/components/DialogGroupInfo.vue b/resources/assets/js/pages/manage/components/DialogGroupInfo.vue index 9e4148f8f..bb3fd87c6 100644 --- a/resources/assets/js/pages/manage/components/DialogGroupInfo.vue +++ b/resources/assets/js/pages/manage/components/DialogGroupInfo.vue @@ -99,6 +99,7 @@ export default { if (group_type === 'task') return '任务群组' if (group_type === 'user') return '个人群组' if (group_type === 'all') return '全员群组' + if (group_type === 'okr') return 'OKR群组' return '未知' }, From 11b152cfbbf9a6ddbad0a03997b463de025211ba Mon Sep 17 00:00:00 2001 From: weifashi <605403358@qq.com> Date: Thu, 20 Jul 2023 16:31:20 +0800 Subject: [PATCH 07/80] =?UTF-8?q?feat=EF=BC=9A=E4=B8=80=E4=BA=9B=E9=85=8D?= =?UTF-8?q?=E5=90=88okr=E5=BE=AE=E5=BA=94=E7=94=A8=E7=9A=84=E6=94=B9?= =?UTF-8?q?=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/nginx/default.conf | 5 ++++- language/original-web.txt | 5 ++++- language/translate.json | 22 ++++++++++++++++++++++ resources/assets/js/pages/manage.vue | 2 +- 4 files changed, 31 insertions(+), 3 deletions(-) diff --git a/docker/nginx/default.conf b/docker/nginx/default.conf index 94e0ecd17..b1269d54a 100644 --- a/docker/nginx/default.conf +++ b/docker/nginx/default.conf @@ -186,7 +186,10 @@ server { # OKR location /manage/microapp/okr/ { - proxy_pass http://192.168.100.83:5566/; + proxy_pass http://192.168.100.90:5566/; + } + location /api/v1/okr/ { + proxy_pass http://192.168.100.90:5566/api/v1/okr/; } } diff --git a/language/original-web.txt b/language/original-web.txt index f3d8519f8..ccb183d07 100644 --- a/language/original-web.txt +++ b/language/original-web.txt @@ -1248,4 +1248,7 @@ Markdown 格式发送 确定要离开会议吗? 继续 退出 -会议组件加载失败! \ No newline at end of file +会议组件加载失败! + +OkR管理 +OkR结果分析 \ No newline at end of file diff --git a/language/translate.json b/language/translate.json index bde95bebe..f75e71586 100644 --- a/language/translate.json +++ b/language/translate.json @@ -16883,5 +16883,27 @@ "de": "Geladen mit fallender fracht des meetings!", "fr": "Échec du chargement du composant conférence!", "id": "Perakitan perakitan gagal!" + }, + { + "key": "OkR管理", + "zh": "", + "zh-CHT": "OkR管理", + "en": "OkR management", + "ko": "Okr 매니지먼트", + "ja": "OkRマネジメントです", + "de": "Das ist OkR.", + "fr": "Gestion des OkR", + "id": "OkR manajemen" + }, + { + "key": "OkR结果分析", + "zh": "", + "zh-CHT": "OkR結果分析", + "en": "Analysis of OkR results", + "ko": "Okr 결과 분석", + "ja": "OkR結果分析です", + "de": "Wenn die ergebnisse umgekehrt sind", + "fr": "Analyse des résultats OkR", + "id": "Analisis hasil OkR" } ] \ No newline at end of file diff --git a/resources/assets/js/pages/manage.vue b/resources/assets/js/pages/manage.vue index 1cb9895e1..31d8f3e9b 100644 --- a/resources/assets/js/pages/manage.vue +++ b/resources/assets/js/pages/manage.vue @@ -785,7 +785,7 @@ export default { if(path=='okrManage'){ this.goForward({ path: '/manage/microapp/', query }); }else{ - this.goForward({ path: '/manage/microapp/#/main', query }); + this.goForward({ path: '/manage/microapp/#/analysis', query }); } return; case 'logout': From 5f95c230294627bad8932bf75ad0dcf381b89c99 Mon Sep 17 00:00:00 2001 From: weifashi <605403358@qq.com> Date: Thu, 20 Jul 2023 17:26:11 +0800 Subject: [PATCH 08/80] =?UTF-8?q?feat=EF=BC=9Aokr=E4=BB=A3=E7=90=86?= =?UTF-8?q?=E8=B7=AF=E7=94=B1=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/nginx/default.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/nginx/default.conf b/docker/nginx/default.conf index b1269d54a..7f734abc2 100644 --- a/docker/nginx/default.conf +++ b/docker/nginx/default.conf @@ -188,8 +188,8 @@ server { location /manage/microapp/okr/ { proxy_pass http://192.168.100.90:5566/; } - location /api/v1/okr/ { - proxy_pass http://192.168.100.90:5566/api/v1/okr/; + location /microapp/okr/api/ { + proxy_pass http://192.168.100.90:5566/microapp/okr/api/; } } From 69fd97485d601f17b3d5331afe94b050b9c867bf Mon Sep 17 00:00:00 2001 From: ganzizi Date: Fri, 21 Jul 2023 18:32:32 +0800 Subject: [PATCH 09/80] =?UTF-8?q?fix:=20=E5=8E=BB=E6=8E=89test=E4=BF=A1?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/DialogController.php | 1 - 1 file changed, 1 deletion(-) diff --git a/app/Http/Controllers/Api/DialogController.php b/app/Http/Controllers/Api/DialogController.php index 712b212a2..a75ab7624 100755 --- a/app/Http/Controllers/Api/DialogController.php +++ b/app/Http/Controllers/Api/DialogController.php @@ -1822,7 +1822,6 @@ class DialogController extends AbstractController if (empty($dialog)) { return Base::retError('创建群组失败'); } - WebSocketDialogMsg::sendMsg(null, $dialog->id, 'text', ['text' => "test"], $user->userid); return Base::retSuccess('创建成功', $dialog); } From dd7e24850d8ff818b512146ff3451e499a8a07c6 Mon Sep 17 00:00:00 2001 From: weifashi <605403358@qq.com> Date: Mon, 24 Jul 2023 13:58:06 +0800 Subject: [PATCH 10/80] =?UTF-8?q?feat=EF=BC=9A=E6=9B=B4=E6=94=B9=E8=B7=AF?= =?UTF-8?q?=E7=94=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/nginx/default.conf | 8 +++--- resources/assets/js/pages/manage.vue | 6 ++--- .../pages/manage/{microapp.vue => apps.vue} | 27 ++++++++++--------- resources/assets/js/routes.js | 6 ++--- 4 files changed, 23 insertions(+), 24 deletions(-) rename resources/assets/js/pages/manage/{microapp.vue => apps.vue} (79%) diff --git a/docker/nginx/default.conf b/docker/nginx/default.conf index 7f734abc2..e83c36182 100644 --- a/docker/nginx/default.conf +++ b/docker/nginx/default.conf @@ -185,12 +185,10 @@ server { } # OKR - location /manage/microapp/okr/ { - proxy_pass http://192.168.100.90:5566/; - } - location /microapp/okr/api/ { - proxy_pass http://192.168.100.90:5566/microapp/okr/api/; + location /apps/okr/ { + proxy_pass http://192.168.100.88:5566/apps/okr/; } + } include /etc/nginx/conf.d/conf.d/*.conf; diff --git a/resources/assets/js/pages/manage.vue b/resources/assets/js/pages/manage.vue index 31d8f3e9b..17bda6689 100644 --- a/resources/assets/js/pages/manage.vue +++ b/resources/assets/js/pages/manage.vue @@ -781,11 +781,11 @@ export default { return; case 'okrManage': case 'okrAnalyze': - let query = { url: import.meta.env.VITE_OKR_WEB_URL || "/manage/microapp/okr/" } + let query = { url: import.meta.env.VITE_OKR_WEB_URL || "/apps/okr/" } if(path=='okrManage'){ - this.goForward({ path: '/manage/microapp/', query }); + this.goForward({ path: '/manage/apps/', query }); }else{ - this.goForward({ path: '/manage/microapp/#/analysis', query }); + this.goForward({ path: '/manage/apps/#/analysis', query }); } return; case 'logout': diff --git a/resources/assets/js/pages/manage/microapp.vue b/resources/assets/js/pages/manage/apps.vue similarity index 79% rename from resources/assets/js/pages/manage/microapp.vue rename to resources/assets/js/pages/manage/apps.vue index 57e2bec01..8c6fdfebb 100644 --- a/resources/assets/js/pages/manage/microapp.vue +++ b/resources/assets/js/pages/manage/apps.vue @@ -5,11 +5,12 @@ - { this.loading = false; @@ -52,7 +53,7 @@ export default { if( url.indexOf('http') == -1 ){ url = window.location.origin + url } - this.microAppUrl =url + this.appUrl = url window.eventCenterForAppNameVite = new EventCenterForMicroApp("micro-app") }) } @@ -70,13 +71,13 @@ export default { methods: { handleCreate(e) { - console.log("子应用创建了",e) + // console.log("子应用创建了",e) }, handleBeforeMount(e) { - console.log("子应用即将被渲染",e) + // console.log("子应用即将被渲染",e) }, handleMount(e) { - this.microAppData = { + this.appData = { type: 'init', vues:{ Vue, @@ -95,13 +96,13 @@ export default { }, handleUnmount(e) { this.loading = true; - console.log("子应用卸载了",e) + // console.log("子应用卸载了",e) }, handleError(e) { - console.log("子应用加载出错了",e.detail.error) + // console.log("子应用加载出错了",e.detail.error) }, handleDataChange(e) { - console.log('来自子应用 child-vite 的数据:', e.detail.data) + // console.log('来自子应用 child-vite 的数据:', e.detail.data) } } } diff --git a/resources/assets/js/routes.js b/resources/assets/js/routes.js index 36a273a95..76a6cdd58 100755 --- a/resources/assets/js/routes.js +++ b/resources/assets/js/routes.js @@ -40,9 +40,9 @@ export default [ component: () => import('./pages/manage/approve/details.vue'), }, { - name: 'manage-microapp', - path: 'microapp/*', - component: () => import('./pages/manage/microapp.vue') + name: 'manage-apps', + path: 'apps/*', + component: () => import('./pages/manage/apps.vue') }, { name: 'manage-setting', From 89260dc7518a2501d4004f1b48fdf154d6d773d0 Mon Sep 17 00:00:00 2001 From: ganzizi Date: Mon, 24 Jul 2023 15:33:45 +0800 Subject: [PATCH 11/80] =?UTF-8?q?feat:=20okr=E4=BF=A1=E6=81=AF=E9=9D=A2?= =?UTF-8?q?=E6=9D=BF=E6=96=B0=E5=A2=9E"=E6=89=93=E5=BC=80OKR"=E6=8C=89?= =?UTF-8?q?=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/assets/js/pages/manage/components/DialogWrapper.vue | 3 +++ 1 file changed, 3 insertions(+) diff --git a/resources/assets/js/pages/manage/components/DialogWrapper.vue b/resources/assets/js/pages/manage/components/DialogWrapper.vue index 9381b0a55..77508ea24 100644 --- a/resources/assets/js/pages/manage/components/DialogWrapper.vue +++ b/resources/assets/js/pages/manage/components/DialogWrapper.vue @@ -785,6 +785,9 @@ export default { if (this.dialogData.group_type === 'task') { array.push({type: 'task', label: '打开任务'}) } + if (this.dialogData.group_type === 'okr') { + array.push({type: 'okr', label: '打开OKR'}) + } return array }, From d423c2bd0566878fa474e320bfc86f3c1c4837d8 Mon Sep 17 00:00:00 2001 From: ganzizi Date: Mon, 24 Jul 2023 16:49:07 +0800 Subject: [PATCH 12/80] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E8=81=8A=E5=A4=A9=E5=85=B3=E8=81=94id?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/DialogController.php | 13 ++++--- ..._093619_add_web_socket_dialogs_link_id.php | 36 +++++++++++++++++++ public/docs/assets/main.bundle.js | 28 +++++++-------- public/docs/assets/main.css | 1 - public/docs/index.html | 16 ++++----- 5 files changed, 66 insertions(+), 28 deletions(-) create mode 100644 database/migrations/2023_07_24_093619_add_web_socket_dialogs_link_id.php diff --git a/app/Http/Controllers/Api/DialogController.php b/app/Http/Controllers/Api/DialogController.php index a75ab7624..39e64553d 100755 --- a/app/Http/Controllers/Api/DialogController.php +++ b/app/Http/Controllers/Api/DialogController.php @@ -1792,7 +1792,7 @@ class DialogController extends AbstractController ]); } - /** + /** * @api {post} api/dialog/okr/add 39. 创建OKR评论会话 * * @apiDescription 需要token身份 @@ -1800,7 +1800,8 @@ class DialogController extends AbstractController * @apiGroup dialog * @apiName okr__add * - * @apiParam {String} name 标题 + * @apiParam {String} name 标题 + * @apiParam {number} link_id 关联id * @apiParam {Array} userids 群成员,格式: [userid1, userid2, userid3] * * @apiSuccess {Number} ret 返回状态码(1正确、0错误) @@ -1812,6 +1813,7 @@ class DialogController extends AbstractController $user = User::auth(); // $name = trim(Request::input('name')); + $link_id = intval(Request::input('link_id')); $userids = Request::input('userids'); // if (empty($name)) { @@ -1822,12 +1824,13 @@ class DialogController extends AbstractController if (empty($dialog)) { return Base::retError('创建群组失败'); } + if ($link_id) { + $dialog->link_id = $link_id; + $dialog->save(); + } return Base::retSuccess('创建成功', $dialog); } - - - /** * @api {post} api/dialog/okr/push 40. 推送OKR相关信息 * diff --git a/database/migrations/2023_07_24_093619_add_web_socket_dialogs_link_id.php b/database/migrations/2023_07_24_093619_add_web_socket_dialogs_link_id.php new file mode 100644 index 000000000..2ac466c7a --- /dev/null +++ b/database/migrations/2023_07_24_093619_add_web_socket_dialogs_link_id.php @@ -0,0 +1,36 @@ +bigInteger('link_id')->nullable()->default(0)->after('owner_id')->comment('关联id'); + } + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + Schema::table('web_socket_dialogs', function (Blueprint $table) { + $table->dropColumn("link_id"); + }); + } +} diff --git a/public/docs/assets/main.bundle.js b/public/docs/assets/main.bundle.js index cba61b6be..7b15aae4a 100644 --- a/public/docs/assets/main.bundle.js +++ b/public/docs/assets/main.bundle.js @@ -1,4 +1,4 @@ -(()=>{var Za={2988:()=>{+function(P){"use strict";var y=".dropdown-backdrop",o='[data-toggle="dropdown"]',h=function(l){P(l).on("click.bs.dropdown",this.toggle)};h.VERSION="3.4.1";function i(l){var s=l.attr("data-target");s||(s=l.attr("href"),s=s&&/#[A-Za-z]/.test(s)&&s.replace(/.*(?=#[^\s]*$)/,""));var u=s!=="#"?P(document).find(s):null;return u&&u.length?u:l.parent()}function r(l){l&&l.which===3||(P(y).remove(),P(o).each(function(){var s=P(this),u=i(s),g={relatedTarget:this};u.hasClass("open")&&(l&&l.type=="click"&&/input|textarea/i.test(l.target.tagName)&&P.contains(u[0],l.target)||(u.trigger(l=P.Event("hide.bs.dropdown",g)),!l.isDefaultPrevented()&&(s.attr("aria-expanded","false"),u.removeClass("open").trigger(P.Event("hidden.bs.dropdown",g)))))}))}h.prototype.toggle=function(l){var s=P(this);if(!s.is(".disabled, :disabled")){var u=i(s),g=u.hasClass("open");if(r(),!g){"ontouchstart"in document.documentElement&&!u.closest(".navbar-nav").length&&P(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(P(this)).on("click",r);var n={relatedTarget:this};if(u.trigger(l=P.Event("show.bs.dropdown",n)),l.isDefaultPrevented())return;s.trigger("focus").attr("aria-expanded","true"),u.toggleClass("open").trigger(P.Event("shown.bs.dropdown",n))}return!1}},h.prototype.keydown=function(l){if(!(!/(38|40|27|32)/.test(l.which)||/input|textarea/i.test(l.target.tagName))){var s=P(this);if(l.preventDefault(),l.stopPropagation(),!s.is(".disabled, :disabled")){var u=i(s),g=u.hasClass("open");if(!g&&l.which!=27||g&&l.which==27)return l.which==27&&u.find(o).trigger("focus"),s.trigger("click");var n=" li:not(.disabled):visible a",m=u.find(".dropdown-menu"+n);if(m.length){var f=m.index(l.target);l.which==38&&f>0&&f--,l.which==40&&f{+function(P){"use strict";var y=function(i,r){this.init("popover",i,r)};if(!P.fn.tooltip)throw new Error("Popover requires tooltip.js");y.VERSION="3.4.1",y.DEFAULTS=P.extend({},P.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),y.prototype=P.extend({},P.fn.tooltip.Constructor.prototype),y.prototype.constructor=y,y.prototype.getDefaults=function(){return y.DEFAULTS},y.prototype.setContent=function(){var i=this.tip(),r=this.getTitle(),p=this.getContent();if(this.options.html){var c=typeof p;this.options.sanitize&&(r=this.sanitizeHtml(r),c==="string"&&(p=this.sanitizeHtml(p))),i.find(".popover-title").html(r),i.find(".popover-content").children().detach().end()[c==="string"?"html":"append"](p)}else i.find(".popover-title").text(r),i.find(".popover-content").children().detach().end().text(p);i.removeClass("fade top bottom left right in"),i.find(".popover-title").html()||i.find(".popover-title").hide()},y.prototype.hasContent=function(){return this.getTitle()||this.getContent()},y.prototype.getContent=function(){var i=this.$element,r=this.options;return i.attr("data-content")||(typeof r.content=="function"?r.content.call(i[0]):r.content)},y.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};function o(i){return this.each(function(){var r=P(this),p=r.data("bs.popover"),c=typeof i=="object"&&i;!p&&/destroy|hide/.test(i)||(p||r.data("bs.popover",p=new y(this,c)),typeof i=="string"&&p[i]())})}var h=P.fn.popover;P.fn.popover=o,P.fn.popover.Constructor=y,P.fn.popover.noConflict=function(){return P.fn.popover=h,this}}(jQuery)},954:()=>{+function(P){"use strict";function y(i,r){this.$body=P(document.body),this.$scrollElement=P(i).is(document.body)?P(window):P(i),this.options=P.extend({},y.DEFAULTS,r),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",P.proxy(this.process,this)),this.refresh(),this.process()}y.VERSION="3.4.1",y.DEFAULTS={offset:10},y.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},y.prototype.refresh=function(){var i=this,r="offset",p=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),P.isWindow(this.$scrollElement[0])||(r="position",p=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var c=P(this),l=c.data("target")||c.attr("href"),s=/^#./.test(l)&&P(l);return s&&s.length&&s.is(":visible")&&[[s[r]().top+p,l]]||null}).sort(function(c,l){return c[0]-l[0]}).each(function(){i.offsets.push(this[0]),i.targets.push(this[1])})},y.prototype.process=function(){var i=this.$scrollElement.scrollTop()+this.options.offset,r=this.getScrollHeight(),p=this.options.offset+r-this.$scrollElement.height(),c=this.offsets,l=this.targets,s=this.activeTarget,u;if(this.scrollHeight!=r&&this.refresh(),i>=p)return s!=(u=l[l.length-1])&&this.activate(u);if(s&&i=c[u]&&(c[u+1]===void 0||i{+function(P){"use strict";var y=function(r){this.element=P(r)};y.VERSION="3.4.1",y.TRANSITION_DURATION=150,y.prototype.show=function(){var r=this.element,p=r.closest("ul:not(.dropdown-menu)"),c=r.data("target");if(c||(c=r.attr("href"),c=c&&c.replace(/.*(?=#[^\s]*$)/,"")),!r.parent("li").hasClass("active")){var l=p.find(".active:last a"),s=P.Event("hide.bs.tab",{relatedTarget:r[0]}),u=P.Event("show.bs.tab",{relatedTarget:l[0]});if(l.trigger(s),r.trigger(u),!(u.isDefaultPrevented()||s.isDefaultPrevented())){var g=P(document).find(c);this.activate(r.closest("li"),p),this.activate(g,g.parent(),function(){l.trigger({type:"hidden.bs.tab",relatedTarget:r[0]}),r.trigger({type:"shown.bs.tab",relatedTarget:l[0]})})}}},y.prototype.activate=function(r,p,c){var l=p.find("> .active"),s=c&&P.support.transition&&(l.length&&l.hasClass("fade")||!!p.find("> .fade").length);function u(){l.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),r.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),s?(r[0].offsetWidth,r.addClass("in")):r.removeClass("fade"),r.parent(".dropdown-menu").length&&r.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),c&&c()}l.length&&s?l.one("bsTransitionEnd",u).emulateTransitionEnd(y.TRANSITION_DURATION):u(),l.removeClass("in")};function o(r){return this.each(function(){var p=P(this),c=p.data("bs.tab");c||p.data("bs.tab",c=new y(this)),typeof r=="string"&&c[r]()})}var h=P.fn.tab;P.fn.tab=o,P.fn.tab.Constructor=y,P.fn.tab.noConflict=function(){return P.fn.tab=h,this};var i=function(r){r.preventDefault(),o.call(P(this),"show")};P(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',i).on("click.bs.tab.data-api",'[data-toggle="pill"]',i)}(jQuery)},8480:()=>{+function(P){"use strict";var y=["sanitize","whiteList","sanitizeFn"],o=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],h=/^aria-[\w-]*$/i,i={"*":["class","dir","id","lang","role",h],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},r=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,p=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;function c(n,m){var f=n.nodeName.toLowerCase();if(P.inArray(f,m)!==-1)return P.inArray(f,o)!==-1?Boolean(n.nodeValue.match(r)||n.nodeValue.match(p)):!0;for(var d=P(m).filter(function(E,N){return N instanceof RegExp}),S=0,v=d.length;S
',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0},sanitize:!0,sanitizeFn:null,whiteList:i},s.prototype.init=function(n,m,f){if(this.enabled=!0,this.type=n,this.$element=P(m),this.options=this.getOptions(f),this.$viewport=this.options.viewport&&P(document).find(P.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var d=this.options.trigger.split(" "),S=d.length;S--;){var v=d[S];if(v=="click")this.$element.on("click."+this.type,this.options.selector,P.proxy(this.toggle,this));else if(v!="manual"){var E=v=="hover"?"mouseenter":"focusin",N=v=="hover"?"mouseleave":"focusout";this.$element.on(E+"."+this.type,this.options.selector,P.proxy(this.enter,this)),this.$element.on(N+"."+this.type,this.options.selector,P.proxy(this.leave,this))}}this.options.selector?this._options=P.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},s.prototype.getDefaults=function(){return s.DEFAULTS},s.prototype.getOptions=function(n){var m=this.$element.data();for(var f in m)m.hasOwnProperty(f)&&P.inArray(f,y)!==-1&&delete m[f];return n=P.extend({},this.getDefaults(),m,n),n.delay&&typeof n.delay=="number"&&(n.delay={show:n.delay,hide:n.delay}),n.sanitize&&(n.template=l(n.template,n.whiteList,n.sanitizeFn)),n},s.prototype.getDelegateOptions=function(){var n={},m=this.getDefaults();return this._options&&P.each(this._options,function(f,d){m[f]!=d&&(n[f]=d)}),n},s.prototype.enter=function(n){var m=n instanceof this.constructor?n:P(n.currentTarget).data("bs."+this.type);if(m||(m=new this.constructor(n.currentTarget,this.getDelegateOptions()),P(n.currentTarget).data("bs."+this.type,m)),n instanceof P.Event&&(m.inState[n.type=="focusin"?"focus":"hover"]=!0),m.tip().hasClass("in")||m.hoverState=="in"){m.hoverState="in";return}if(clearTimeout(m.timeout),m.hoverState="in",!m.options.delay||!m.options.delay.show)return m.show();m.timeout=setTimeout(function(){m.hoverState=="in"&&m.show()},m.options.delay.show)},s.prototype.isInStateTrue=function(){for(var n in this.inState)if(this.inState[n])return!0;return!1},s.prototype.leave=function(n){var m=n instanceof this.constructor?n:P(n.currentTarget).data("bs."+this.type);if(m||(m=new this.constructor(n.currentTarget,this.getDelegateOptions()),P(n.currentTarget).data("bs."+this.type,m)),n instanceof P.Event&&(m.inState[n.type=="focusout"?"focus":"hover"]=!1),!m.isInStateTrue()){if(clearTimeout(m.timeout),m.hoverState="out",!m.options.delay||!m.options.delay.hide)return m.hide();m.timeout=setTimeout(function(){m.hoverState=="out"&&m.hide()},m.options.delay.hide)}},s.prototype.show=function(){var n=P.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(n);var m=P.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(n.isDefaultPrevented()||!m)return;var f=this,d=this.tip(),S=this.getUID(this.type);this.setContent(),d.attr("id",S),this.$element.attr("aria-describedby",S),this.options.animation&&d.addClass("fade");var v=typeof this.options.placement=="function"?this.options.placement.call(this,d[0],this.$element[0]):this.options.placement,E=/\s?auto?\s?/i,N=E.test(v);N&&(v=v.replace(E,"")||"top"),d.detach().css({top:0,left:0,display:"block"}).addClass(v).data("bs."+this.type,this),this.options.container?d.appendTo(P(document).find(this.options.container)):d.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var A=this.getPosition(),T=d[0].offsetWidth,b=d[0].offsetHeight;if(N){var D=v,C=this.getPosition(this.$viewport);v=v=="bottom"&&A.bottom+b>C.bottom?"top":v=="top"&&A.top-bC.width?"left":v=="left"&&A.left-TE.top+E.height&&(S.top=E.top+E.height-A)}else{var T=m.left-v,b=m.left+v+f;TE.right&&(S.left=E.left+E.width-b)}return S},s.prototype.getTitle=function(){var n,m=this.$element,f=this.options;return n=m.attr("data-original-title")||(typeof f.title=="function"?f.title.call(m[0]):f.title),n},s.prototype.getUID=function(n){do n+=~~(Math.random()*1e6);while(document.getElementById(n));return n},s.prototype.tip=function(){if(!this.$tip&&(this.$tip=P(this.options.template),this.$tip.length!=1))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},s.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},s.prototype.enable=function(){this.enabled=!0},s.prototype.disable=function(){this.enabled=!1},s.prototype.toggleEnabled=function(){this.enabled=!this.enabled},s.prototype.toggle=function(n){var m=this;n&&(m=P(n.currentTarget).data("bs."+this.type),m||(m=new this.constructor(n.currentTarget,this.getDelegateOptions()),P(n.currentTarget).data("bs."+this.type,m))),n?(m.inState.click=!m.inState.click,m.isInStateTrue()?m.enter(m):m.leave(m)):m.tip().hasClass("in")?m.leave(m):m.enter(m)},s.prototype.destroy=function(){var n=this;clearTimeout(this.timeout),this.hide(function(){n.$element.off("."+n.type).removeData("bs."+n.type),n.$tip&&n.$tip.detach(),n.$tip=null,n.$arrow=null,n.$viewport=null,n.$element=null})},s.prototype.sanitizeHtml=function(n){return l(n,this.options.whiteList,this.options.sanitizeFn)};function u(n){return this.each(function(){var m=P(this),f=m.data("bs.tooltip"),d=typeof n=="object"&&n;!f&&/destroy|hide/.test(n)||(f||m.data("bs.tooltip",f=new s(this,d)),typeof n=="string"&&f[n]())})}var g=P.fn.tooltip;P.fn.tooltip=u,P.fn.tooltip.Constructor=s,P.fn.tooltip.noConflict=function(){return P.fn.tooltip=g,this}}(jQuery)},7030:P=>{var y=function(){this.Diff_Timeout=1,this.Diff_EditCost=4,this.Match_Threshold=.5,this.Match_Distance=1e3,this.Patch_DeleteThreshold=.5,this.Patch_Margin=4,this.Match_MaxBits=32},o=-1,h=1,i=0;y.Diff=function(r,p){return[r,p]},y.prototype.diff_main=function(r,p,c,l){typeof l=="undefined"&&(this.Diff_Timeout<=0?l=Number.MAX_VALUE:l=new Date().getTime()+this.Diff_Timeout*1e3);var s=l;if(r==null||p==null)throw new Error("Null input. (diff_main)");if(r==p)return r?[new y.Diff(i,r)]:[];typeof c=="undefined"&&(c=!0);var u=c,g=this.diff_commonPrefix(r,p),n=r.substring(0,g);r=r.substring(g),p=p.substring(g),g=this.diff_commonSuffix(r,p);var m=r.substring(r.length-g);r=r.substring(0,r.length-g),p=p.substring(0,p.length-g);var f=this.diff_compute_(r,p,u,s);return n&&f.unshift(new y.Diff(i,n)),m&&f.push(new y.Diff(i,m)),this.diff_cleanupMerge(f),f},y.prototype.diff_compute_=function(r,p,c,l){var s;if(!r)return[new y.Diff(h,p)];if(!p)return[new y.Diff(o,r)];var u=r.length>p.length?r:p,g=r.length>p.length?p:r,n=u.indexOf(g);if(n!=-1)return s=[new y.Diff(h,u.substring(0,n)),new y.Diff(i,g),new y.Diff(h,u.substring(n+g.length))],r.length>p.length&&(s[0][0]=s[2][0]=o),s;if(g.length==1)return[new y.Diff(o,r),new y.Diff(h,p)];var m=this.diff_halfMatch_(r,p);if(m){var f=m[0],d=m[1],S=m[2],v=m[3],E=m[4],N=this.diff_main(f,S,c,l),A=this.diff_main(d,v,c,l);return N.concat([new y.Diff(i,E)],A)}return c&&r.length>100&&p.length>100?this.diff_lineMode_(r,p,l):this.diff_bisect_(r,p,l)},y.prototype.diff_lineMode_=function(r,p,c){var l=this.diff_linesToChars_(r,p);r=l.chars1,p=l.chars2;var s=l.lineArray,u=this.diff_main(r,p,!1,c);this.diff_charsToLines_(u,s),this.diff_cleanupSemantic(u),u.push(new y.Diff(i,""));for(var g=0,n=0,m=0,f="",d="";g=1&&m>=1){u.splice(g-n-m,n+m),g=g-n-m;for(var S=this.diff_main(f,d,!1,c),v=S.length-1;v>=0;v--)u.splice(g,0,S[v]);g=g+S.length}m=0,n=0,f="",d="";break}g++}return u.pop(),u},y.prototype.diff_bisect_=function(r,p,c){for(var l=r.length,s=p.length,u=Math.ceil((l+s)/2),g=u,n=2*u,m=new Array(n),f=new Array(n),d=0;dc);b++){for(var D=-b+E;D<=b-N;D+=2){var C=g+D,I;D==-b||D!=b&&m[C-1]l)N+=2;else if(R>s)E+=2;else if(v){var x=g+S-D;if(x>=0&&x=O)return this.diff_bisectSplit_(r,p,I,R,c)}}}for(var $=-b+A;$<=b-T;$+=2){var x=g+$,O;$==-b||$!=b&&f[x-1]l)T+=2;else if(F>s)A+=2;else if(!v){var C=g+S-$;if(C>=0&&C=O)return this.diff_bisectSplit_(r,p,I,R,c)}}}}return[new y.Diff(o,r),new y.Diff(h,p)]},y.prototype.diff_bisectSplit_=function(r,p,c,l,s){var u=r.substring(0,c),g=p.substring(0,l),n=r.substring(c),m=p.substring(l),f=this.diff_main(u,g,!1,s),d=this.diff_main(n,m,!1,s);return f.concat(d)},y.prototype.diff_linesToChars_=function(r,p){var c=[],l={};c[0]="";function s(m){for(var f="",d=0,S=-1,v=c.length;S{var Za={2988:()=>{+function(P){"use strict";var y=".dropdown-backdrop",o='[data-toggle="dropdown"]',h=function(l){P(l).on("click.bs.dropdown",this.toggle)};h.VERSION="3.4.1";function i(l){var s=l.attr("data-target");s||(s=l.attr("href"),s=s&&/#[A-Za-z]/.test(s)&&s.replace(/.*(?=#[^\s]*$)/,""));var u=s!=="#"?P(document).find(s):null;return u&&u.length?u:l.parent()}function r(l){l&&l.which===3||(P(y).remove(),P(o).each(function(){var s=P(this),u=i(s),g={relatedTarget:this};!u.hasClass("open")||l&&l.type=="click"&&/input|textarea/i.test(l.target.tagName)&&P.contains(u[0],l.target)||(u.trigger(l=P.Event("hide.bs.dropdown",g)),!l.isDefaultPrevented()&&(s.attr("aria-expanded","false"),u.removeClass("open").trigger(P.Event("hidden.bs.dropdown",g))))}))}h.prototype.toggle=function(l){var s=P(this);if(!s.is(".disabled, :disabled")){var u=i(s),g=u.hasClass("open");if(r(),!g){"ontouchstart"in document.documentElement&&!u.closest(".navbar-nav").length&&P(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(P(this)).on("click",r);var n={relatedTarget:this};if(u.trigger(l=P.Event("show.bs.dropdown",n)),l.isDefaultPrevented())return;s.trigger("focus").attr("aria-expanded","true"),u.toggleClass("open").trigger(P.Event("shown.bs.dropdown",n))}return!1}},h.prototype.keydown=function(l){if(!(!/(38|40|27|32)/.test(l.which)||/input|textarea/i.test(l.target.tagName))){var s=P(this);if(l.preventDefault(),l.stopPropagation(),!s.is(".disabled, :disabled")){var u=i(s),g=u.hasClass("open");if(!g&&l.which!=27||g&&l.which==27)return l.which==27&&u.find(o).trigger("focus"),s.trigger("click");var n=" li:not(.disabled):visible a",m=u.find(".dropdown-menu"+n);if(!!m.length){var f=m.index(l.target);l.which==38&&f>0&&f--,l.which==40&&f{+function(P){"use strict";var y=function(i,r){this.init("popover",i,r)};if(!P.fn.tooltip)throw new Error("Popover requires tooltip.js");y.VERSION="3.4.1",y.DEFAULTS=P.extend({},P.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),y.prototype=P.extend({},P.fn.tooltip.Constructor.prototype),y.prototype.constructor=y,y.prototype.getDefaults=function(){return y.DEFAULTS},y.prototype.setContent=function(){var i=this.tip(),r=this.getTitle(),p=this.getContent();if(this.options.html){var c=typeof p;this.options.sanitize&&(r=this.sanitizeHtml(r),c==="string"&&(p=this.sanitizeHtml(p))),i.find(".popover-title").html(r),i.find(".popover-content").children().detach().end()[c==="string"?"html":"append"](p)}else i.find(".popover-title").text(r),i.find(".popover-content").children().detach().end().text(p);i.removeClass("fade top bottom left right in"),i.find(".popover-title").html()||i.find(".popover-title").hide()},y.prototype.hasContent=function(){return this.getTitle()||this.getContent()},y.prototype.getContent=function(){var i=this.$element,r=this.options;return i.attr("data-content")||(typeof r.content=="function"?r.content.call(i[0]):r.content)},y.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};function o(i){return this.each(function(){var r=P(this),p=r.data("bs.popover"),c=typeof i=="object"&&i;!p&&/destroy|hide/.test(i)||(p||r.data("bs.popover",p=new y(this,c)),typeof i=="string"&&p[i]())})}var h=P.fn.popover;P.fn.popover=o,P.fn.popover.Constructor=y,P.fn.popover.noConflict=function(){return P.fn.popover=h,this}}(jQuery)},954:()=>{+function(P){"use strict";function y(i,r){this.$body=P(document.body),this.$scrollElement=P(i).is(document.body)?P(window):P(i),this.options=P.extend({},y.DEFAULTS,r),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",P.proxy(this.process,this)),this.refresh(),this.process()}y.VERSION="3.4.1",y.DEFAULTS={offset:10},y.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},y.prototype.refresh=function(){var i=this,r="offset",p=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),P.isWindow(this.$scrollElement[0])||(r="position",p=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var c=P(this),l=c.data("target")||c.attr("href"),s=/^#./.test(l)&&P(l);return s&&s.length&&s.is(":visible")&&[[s[r]().top+p,l]]||null}).sort(function(c,l){return c[0]-l[0]}).each(function(){i.offsets.push(this[0]),i.targets.push(this[1])})},y.prototype.process=function(){var i=this.$scrollElement.scrollTop()+this.options.offset,r=this.getScrollHeight(),p=this.options.offset+r-this.$scrollElement.height(),c=this.offsets,l=this.targets,s=this.activeTarget,u;if(this.scrollHeight!=r&&this.refresh(),i>=p)return s!=(u=l[l.length-1])&&this.activate(u);if(s&&i=c[u]&&(c[u+1]===void 0||i{+function(P){"use strict";var y=function(r){this.element=P(r)};y.VERSION="3.4.1",y.TRANSITION_DURATION=150,y.prototype.show=function(){var r=this.element,p=r.closest("ul:not(.dropdown-menu)"),c=r.data("target");if(c||(c=r.attr("href"),c=c&&c.replace(/.*(?=#[^\s]*$)/,"")),!r.parent("li").hasClass("active")){var l=p.find(".active:last a"),s=P.Event("hide.bs.tab",{relatedTarget:r[0]}),u=P.Event("show.bs.tab",{relatedTarget:l[0]});if(l.trigger(s),r.trigger(u),!(u.isDefaultPrevented()||s.isDefaultPrevented())){var g=P(document).find(c);this.activate(r.closest("li"),p),this.activate(g,g.parent(),function(){l.trigger({type:"hidden.bs.tab",relatedTarget:r[0]}),r.trigger({type:"shown.bs.tab",relatedTarget:l[0]})})}}},y.prototype.activate=function(r,p,c){var l=p.find("> .active"),s=c&&P.support.transition&&(l.length&&l.hasClass("fade")||!!p.find("> .fade").length);function u(){l.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),r.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),s?(r[0].offsetWidth,r.addClass("in")):r.removeClass("fade"),r.parent(".dropdown-menu").length&&r.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),c&&c()}l.length&&s?l.one("bsTransitionEnd",u).emulateTransitionEnd(y.TRANSITION_DURATION):u(),l.removeClass("in")};function o(r){return this.each(function(){var p=P(this),c=p.data("bs.tab");c||p.data("bs.tab",c=new y(this)),typeof r=="string"&&c[r]()})}var h=P.fn.tab;P.fn.tab=o,P.fn.tab.Constructor=y,P.fn.tab.noConflict=function(){return P.fn.tab=h,this};var i=function(r){r.preventDefault(),o.call(P(this),"show")};P(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',i).on("click.bs.tab.data-api",'[data-toggle="pill"]',i)}(jQuery)},8480:()=>{+function(P){"use strict";var y=["sanitize","whiteList","sanitizeFn"],o=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],h=/^aria-[\w-]*$/i,i={"*":["class","dir","id","lang","role",h],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},r=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,p=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;function c(n,m){var f=n.nodeName.toLowerCase();if(P.inArray(f,m)!==-1)return P.inArray(f,o)!==-1?Boolean(n.nodeValue.match(r)||n.nodeValue.match(p)):!0;for(var d=P(m).filter(function(E,N){return N instanceof RegExp}),S=0,v=d.length;S
',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0},sanitize:!0,sanitizeFn:null,whiteList:i},s.prototype.init=function(n,m,f){if(this.enabled=!0,this.type=n,this.$element=P(m),this.options=this.getOptions(f),this.$viewport=this.options.viewport&&P(document).find(P.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var d=this.options.trigger.split(" "),S=d.length;S--;){var v=d[S];if(v=="click")this.$element.on("click."+this.type,this.options.selector,P.proxy(this.toggle,this));else if(v!="manual"){var E=v=="hover"?"mouseenter":"focusin",N=v=="hover"?"mouseleave":"focusout";this.$element.on(E+"."+this.type,this.options.selector,P.proxy(this.enter,this)),this.$element.on(N+"."+this.type,this.options.selector,P.proxy(this.leave,this))}}this.options.selector?this._options=P.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},s.prototype.getDefaults=function(){return s.DEFAULTS},s.prototype.getOptions=function(n){var m=this.$element.data();for(var f in m)m.hasOwnProperty(f)&&P.inArray(f,y)!==-1&&delete m[f];return n=P.extend({},this.getDefaults(),m,n),n.delay&&typeof n.delay=="number"&&(n.delay={show:n.delay,hide:n.delay}),n.sanitize&&(n.template=l(n.template,n.whiteList,n.sanitizeFn)),n},s.prototype.getDelegateOptions=function(){var n={},m=this.getDefaults();return this._options&&P.each(this._options,function(f,d){m[f]!=d&&(n[f]=d)}),n},s.prototype.enter=function(n){var m=n instanceof this.constructor?n:P(n.currentTarget).data("bs."+this.type);if(m||(m=new this.constructor(n.currentTarget,this.getDelegateOptions()),P(n.currentTarget).data("bs."+this.type,m)),n instanceof P.Event&&(m.inState[n.type=="focusin"?"focus":"hover"]=!0),m.tip().hasClass("in")||m.hoverState=="in"){m.hoverState="in";return}if(clearTimeout(m.timeout),m.hoverState="in",!m.options.delay||!m.options.delay.show)return m.show();m.timeout=setTimeout(function(){m.hoverState=="in"&&m.show()},m.options.delay.show)},s.prototype.isInStateTrue=function(){for(var n in this.inState)if(this.inState[n])return!0;return!1},s.prototype.leave=function(n){var m=n instanceof this.constructor?n:P(n.currentTarget).data("bs."+this.type);if(m||(m=new this.constructor(n.currentTarget,this.getDelegateOptions()),P(n.currentTarget).data("bs."+this.type,m)),n instanceof P.Event&&(m.inState[n.type=="focusout"?"focus":"hover"]=!1),!m.isInStateTrue()){if(clearTimeout(m.timeout),m.hoverState="out",!m.options.delay||!m.options.delay.hide)return m.hide();m.timeout=setTimeout(function(){m.hoverState=="out"&&m.hide()},m.options.delay.hide)}},s.prototype.show=function(){var n=P.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(n);var m=P.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(n.isDefaultPrevented()||!m)return;var f=this,d=this.tip(),S=this.getUID(this.type);this.setContent(),d.attr("id",S),this.$element.attr("aria-describedby",S),this.options.animation&&d.addClass("fade");var v=typeof this.options.placement=="function"?this.options.placement.call(this,d[0],this.$element[0]):this.options.placement,E=/\s?auto?\s?/i,N=E.test(v);N&&(v=v.replace(E,"")||"top"),d.detach().css({top:0,left:0,display:"block"}).addClass(v).data("bs."+this.type,this),this.options.container?d.appendTo(P(document).find(this.options.container)):d.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var A=this.getPosition(),T=d[0].offsetWidth,b=d[0].offsetHeight;if(N){var D=v,C=this.getPosition(this.$viewport);v=v=="bottom"&&A.bottom+b>C.bottom?"top":v=="top"&&A.top-bC.width?"left":v=="left"&&A.left-TE.top+E.height&&(S.top=E.top+E.height-A)}else{var T=m.left-v,b=m.left+v+f;TE.right&&(S.left=E.left+E.width-b)}return S},s.prototype.getTitle=function(){var n,m=this.$element,f=this.options;return n=m.attr("data-original-title")||(typeof f.title=="function"?f.title.call(m[0]):f.title),n},s.prototype.getUID=function(n){do n+=~~(Math.random()*1e6);while(document.getElementById(n));return n},s.prototype.tip=function(){if(!this.$tip&&(this.$tip=P(this.options.template),this.$tip.length!=1))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},s.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},s.prototype.enable=function(){this.enabled=!0},s.prototype.disable=function(){this.enabled=!1},s.prototype.toggleEnabled=function(){this.enabled=!this.enabled},s.prototype.toggle=function(n){var m=this;n&&(m=P(n.currentTarget).data("bs."+this.type),m||(m=new this.constructor(n.currentTarget,this.getDelegateOptions()),P(n.currentTarget).data("bs."+this.type,m))),n?(m.inState.click=!m.inState.click,m.isInStateTrue()?m.enter(m):m.leave(m)):m.tip().hasClass("in")?m.leave(m):m.enter(m)},s.prototype.destroy=function(){var n=this;clearTimeout(this.timeout),this.hide(function(){n.$element.off("."+n.type).removeData("bs."+n.type),n.$tip&&n.$tip.detach(),n.$tip=null,n.$arrow=null,n.$viewport=null,n.$element=null})},s.prototype.sanitizeHtml=function(n){return l(n,this.options.whiteList,this.options.sanitizeFn)};function u(n){return this.each(function(){var m=P(this),f=m.data("bs.tooltip"),d=typeof n=="object"&&n;!f&&/destroy|hide/.test(n)||(f||m.data("bs.tooltip",f=new s(this,d)),typeof n=="string"&&f[n]())})}var g=P.fn.tooltip;P.fn.tooltip=u,P.fn.tooltip.Constructor=s,P.fn.tooltip.noConflict=function(){return P.fn.tooltip=g,this}}(jQuery)},7030:P=>{var y=function(){this.Diff_Timeout=1,this.Diff_EditCost=4,this.Match_Threshold=.5,this.Match_Distance=1e3,this.Patch_DeleteThreshold=.5,this.Patch_Margin=4,this.Match_MaxBits=32},o=-1,h=1,i=0;y.Diff=function(r,p){return[r,p]},y.prototype.diff_main=function(r,p,c,l){typeof l=="undefined"&&(this.Diff_Timeout<=0?l=Number.MAX_VALUE:l=new Date().getTime()+this.Diff_Timeout*1e3);var s=l;if(r==null||p==null)throw new Error("Null input. (diff_main)");if(r==p)return r?[new y.Diff(i,r)]:[];typeof c=="undefined"&&(c=!0);var u=c,g=this.diff_commonPrefix(r,p),n=r.substring(0,g);r=r.substring(g),p=p.substring(g),g=this.diff_commonSuffix(r,p);var m=r.substring(r.length-g);r=r.substring(0,r.length-g),p=p.substring(0,p.length-g);var f=this.diff_compute_(r,p,u,s);return n&&f.unshift(new y.Diff(i,n)),m&&f.push(new y.Diff(i,m)),this.diff_cleanupMerge(f),f},y.prototype.diff_compute_=function(r,p,c,l){var s;if(!r)return[new y.Diff(h,p)];if(!p)return[new y.Diff(o,r)];var u=r.length>p.length?r:p,g=r.length>p.length?p:r,n=u.indexOf(g);if(n!=-1)return s=[new y.Diff(h,u.substring(0,n)),new y.Diff(i,g),new y.Diff(h,u.substring(n+g.length))],r.length>p.length&&(s[0][0]=s[2][0]=o),s;if(g.length==1)return[new y.Diff(o,r),new y.Diff(h,p)];var m=this.diff_halfMatch_(r,p);if(m){var f=m[0],d=m[1],S=m[2],v=m[3],E=m[4],N=this.diff_main(f,S,c,l),A=this.diff_main(d,v,c,l);return N.concat([new y.Diff(i,E)],A)}return c&&r.length>100&&p.length>100?this.diff_lineMode_(r,p,l):this.diff_bisect_(r,p,l)},y.prototype.diff_lineMode_=function(r,p,c){var l=this.diff_linesToChars_(r,p);r=l.chars1,p=l.chars2;var s=l.lineArray,u=this.diff_main(r,p,!1,c);this.diff_charsToLines_(u,s),this.diff_cleanupSemantic(u),u.push(new y.Diff(i,""));for(var g=0,n=0,m=0,f="",d="";g=1&&m>=1){u.splice(g-n-m,n+m),g=g-n-m;for(var S=this.diff_main(f,d,!1,c),v=S.length-1;v>=0;v--)u.splice(g,0,S[v]);g=g+S.length}m=0,n=0,f="",d="";break}g++}return u.pop(),u},y.prototype.diff_bisect_=function(r,p,c){for(var l=r.length,s=p.length,u=Math.ceil((l+s)/2),g=u,n=2*u,m=new Array(n),f=new Array(n),d=0;dc);b++){for(var D=-b+E;D<=b-N;D+=2){var C=g+D,I;D==-b||D!=b&&m[C-1]l)N+=2;else if(R>s)E+=2;else if(v){var x=g+S-D;if(x>=0&&x=O)return this.diff_bisectSplit_(r,p,I,R,c)}}}for(var $=-b+A;$<=b-T;$+=2){var x=g+$,O;$==-b||$!=b&&f[x-1]l)T+=2;else if(F>s)A+=2;else if(!v){var C=g+S-$;if(C>=0&&C=O)return this.diff_bisectSplit_(r,p,I,R,c)}}}}return[new y.Diff(o,r),new y.Diff(h,p)]},y.prototype.diff_bisectSplit_=function(r,p,c,l,s){var u=r.substring(0,c),g=p.substring(0,l),n=r.substring(c),m=p.substring(l),f=this.diff_main(u,g,!1,s),d=this.diff_main(n,m,!1,s);return f.concat(d)},y.prototype.diff_linesToChars_=function(r,p){var c=[],l={};c[0]="";function s(m){for(var f="",d=0,S=-1,v=c.length;Sl?r=r.substring(c-l):cp.length?r:p,l=r.length>p.length?p:r;if(c.length<4||l.length*2=N.length?[I,R,x,O,C]:null}var g=u(c,l,Math.ceil(c.length/4)),n=u(c,l,Math.ceil(c.length/2)),m;if(!g&&!n)return null;n?g?m=g[4].length>n[4].length?g:n:m=n:m=g;var f,d,S,v;r.length>p.length?(f=m[0],d=m[1],S=m[2],v=m[3]):(S=m[0],v=m[1],f=m[2],d=m[3]);var E=m[4];return[f,d,S,v,E]},y.prototype.diff_cleanupSemantic=function(r){for(var p=!1,c=[],l=0,s=null,u=0,g=0,n=0,m=0,f=0;u0?c[l-1]:-1,g=0,n=0,m=0,f=0,s=null,p=!0)),u++;for(p&&this.diff_cleanupMerge(r),this.diff_cleanupSemanticLossless(r),u=1;u=E?(v>=d.length/2||v>=S.length/2)&&(r.splice(u,0,new y.Diff(i,S.substring(0,v))),r[u-1][1]=d.substring(0,d.length-v),r[u+1][1]=S.substring(v),u++):(E>=d.length/2||E>=S.length/2)&&(r.splice(u,0,new y.Diff(i,d.substring(0,E))),r[u-1][0]=h,r[u-1][1]=S.substring(0,S.length-E),r[u+1][0]=o,r[u+1][1]=d.substring(E),u++),u++}u++}},y.prototype.diff_cleanupSemanticLossless=function(r){function p(E,N){if(!E||!N)return 6;var A=E.charAt(E.length-1),T=N.charAt(0),b=A.match(y.nonAlphaNumericRegex_),D=T.match(y.nonAlphaNumericRegex_),C=b&&A.match(y.whitespaceRegex_),I=D&&T.match(y.whitespaceRegex_),R=C&&A.match(y.linebreakRegex_),x=I&&T.match(y.linebreakRegex_),O=R&&E.match(y.blanklineEndRegex_),$=x&&N.match(y.blanklineStartRegex_);return O||$?5:R||x?4:b&&!C&&I?3:C||I?2:b||D?1:0}for(var c=1;c=S&&(S=v,m=l,f=s,d=u)}r[c-1][1]!=m&&(m?r[c-1][1]=m:(r.splice(c-1,1),c--),r[c][1]=f,d?r[c+1][1]=d:(r.splice(c+1,1),c--))}c++}},y.nonAlphaNumericRegex_=/[^a-zA-Z0-9]/,y.whitespaceRegex_=/\s/,y.linebreakRegex_=/[\r\n]/,y.blanklineEndRegex_=/\n\r?\n$/,y.blanklineStartRegex_=/^\r?\n\r?\n/,y.prototype.diff_cleanupEfficiency=function(r){for(var p=!1,c=[],l=0,s=null,u=0,g=!1,n=!1,m=!1,f=!1;u0?c[l-1]:-1,m=f=!1),p=!0)),u++;p&&this.diff_cleanupMerge(r)},y.prototype.diff_cleanupMerge=function(r){r.push(new y.Diff(i,""));for(var p=0,c=0,l=0,s="",u="",g;p1?(c!==0&&l!==0&&(g=this.diff_commonPrefix(u,s),g!==0&&(p-c-l>0&&r[p-c-l-1][0]==i?r[p-c-l-1][1]+=u.substring(0,g):(r.splice(0,0,new y.Diff(i,u.substring(0,g))),p++),u=u.substring(g),s=s.substring(g)),g=this.diff_commonSuffix(u,s),g!==0&&(r[p][1]=u.substring(u.length-g)+r[p][1],u=u.substring(0,u.length-g),s=s.substring(0,s.length-g))),p-=c+l,r.splice(p,c+l),s.length&&(r.splice(p,0,new y.Diff(o,s)),p++),u.length&&(r.splice(p,0,new y.Diff(h,u)),p++),p++):p!==0&&r[p-1][0]==i?(r[p-1][1]+=r[p][1],r.splice(p,1)):p++,l=0,c=0,s="",u="";break}r[r.length-1][1]===""&&r.pop();var n=!1;for(p=1;pp));g++)s=c,u=l;return r.length!=g&&r[g][0]===o?u:u+(p-s)},y.prototype.diff_prettyHtml=function(r){for(var p=[],c=/&/g,l=//g,u=/\n/g,g=0;g");switch(n){case h:p[g]=''+f+"";break;case o:p[g]=''+f+"";break;case i:p[g]=""+f+"";break}}return p.join("")},y.prototype.diff_text1=function(r){for(var p=[],c=0;cthis.Match_MaxBits)throw new Error("Pattern too long for this browser.");var l=this.match_alphabet_(p),s=this;function u(I,R){var x=I/p.length,O=Math.abs(c-R);return s.Match_Distance?x+O/s.Match_Distance:O?1:x}var g=this.Match_Threshold,n=r.indexOf(p,c);n!=-1&&(g=Math.min(u(0,n),g),n=r.lastIndexOf(p,c+p.length),n!=-1&&(g=Math.min(u(0,n),g)));var m=1<=N;b--){var D=l[r.charAt(b-1)];if(E===0?T[b]=(T[b+1]<<1|1)&D:T[b]=(T[b+1]<<1|1)&D|((v[b+1]|v[b])<<1|1)|v[b+1],T[b]&m){var C=u(E,b-1);if(C<=g)if(g=C,n=b-1,n>c)N=Math.max(1,2*c-n);else break}}if(u(E+1,c)>g)break;v=T}return n},y.prototype.match_alphabet_=function(r){for(var p={},c=0;c2&&(this.diff_cleanupSemantic(s),this.diff_cleanupEfficiency(s));else if(r&&typeof r=="object"&&typeof p=="undefined"&&typeof c=="undefined")s=r,l=this.diff_text1(s);else if(typeof r=="string"&&p&&typeof p=="object"&&typeof c=="undefined")l=r,s=p;else if(typeof r=="string"&&typeof p=="string"&&c&&typeof c=="object")l=r,s=c;else throw new Error("Unknown call format to patch_make.");if(s.length===0)return[];for(var u=[],g=new y.patch_obj,n=0,m=0,f=0,d=l,S=l,v=0;v=2*this.Patch_Margin&&n&&(this.patch_addContext_(g,d),u.push(g),g=new y.patch_obj,n=0,d=S,m=f);break}E!==h&&(m+=N.length),E!==o&&(f+=N.length)}return n&&(this.patch_addContext_(g,d),u.push(g)),u},y.prototype.patch_deepCopy=function(r){for(var p=[],c=0;cthis.Match_MaxBits?(m=this.match_main(p,n.substring(0,this.Match_MaxBits),g),m!=-1&&(f=this.match_main(p,n.substring(n.length-this.Match_MaxBits),g+n.length-this.Match_MaxBits),(f==-1||m>=f)&&(m=-1))):m=this.match_main(p,n,g),m==-1)s[u]=!1,l-=r[u].length2-r[u].length1;else{s[u]=!0,l=m-g;var d;if(f==-1?d=p.substring(m,m+n.length):d=p.substring(m,f+this.Match_MaxBits),n==d)p=p.substring(0,m)+this.diff_text2(r[u].diffs)+p.substring(m+n.length);else{var S=this.diff_main(n,d,!1);if(n.length>this.Match_MaxBits&&this.diff_levenshtein(S)/n.length>this.Patch_DeleteThreshold)s[u]=!1;else{this.diff_cleanupSemanticLossless(S);for(var v=0,E,N=0;Nu[0][1].length){var g=p-u[0][1].length;u[0][1]=c.substring(u[0][1].length)+u[0][1],s.start1-=g,s.start2-=g,s.length1+=g,s.length2+=g}if(s=r[r.length-1],u=s.diffs,u.length==0||u[u.length-1][0]!=i)u.push(new y.Diff(i,c)),s.length1+=p,s.length2+=p;else if(p>u[u.length-1][1].length){var g=p-u[u.length-1][1].length;u[u.length-1][1]+=c.substring(0,g),s.length1+=g,s.length2+=g}return c},y.prototype.patch_splitMax=function(r){for(var p=this.Match_MaxBits,c=0;c2*p?(n.length1+=d.length,s+=d.length,m=!1,n.diffs.push(new y.Diff(f,d)),l.diffs.shift()):(d=d.substring(0,p-n.length1-this.Patch_Margin),n.length1+=d.length,s+=d.length,f===i?(n.length2+=d.length,u+=d.length):m=!1,n.diffs.push(new y.Diff(f,d)),d==l.diffs[0][1]?l.diffs.shift():l.diffs[0][1]=l.diffs[0][1].substring(d.length))}g=this.diff_text2(n.diffs),g=g.substring(g.length-this.Patch_Margin);var S=this.diff_text1(l.diffs).substring(0,this.Patch_Margin);S!==""&&(n.length1+=S.length,n.length2+=S.length,n.diffs.length!==0&&n.diffs[n.diffs.length-1][0]===i?n.diffs[n.diffs.length-1][1]+=S:n.diffs.push(new y.Diff(i,S))),m||r.splice(++c,0,n)}}},y.prototype.patch_toText=function(r){for(var p=[],c=0;cthis.stackVars.length&&this.stackVars.push("stack"+this.stackSlot),this.topStackName()},topStackName:function(){return"stack"+this.stackSlot},flushInline:function(){var d=this.inlineStack;this.inlineStack=[];for(var S=0,v=d.length;S{var h;/*! -* Sizzle CSS Selector Engine v2.3.10 +* Sizzle CSS Selector Engine v2.3.6 * https://sizzlejs.com/ * * Copyright JS Foundation and other contributors * Released under the MIT license * https://js.foundation/ * -* Date: 2023-02-14 -*/(function(i){var r,p,c,l,s,u,g,n,m,f,d,S,v,E,N,A,T,b,D,C="sizzle"+1*new Date,I=i.document,R=0,x=0,O=Ge(),$=Ge(),F=Ge(),U=Ge(),W=function(k,G){return k===G&&(d=!0),0},z={}.hasOwnProperty,B=[],V=B.pop,Y=B.push,re=B.push,ne=B.slice,pe=function(k,G){for(var Z=0,j=k.length;Z+~]|"+he+")"+he+"*"),Ce=new RegExp(he+"|>"),_t=new RegExp(nt),$e=new RegExp("^"+Ee+"$"),He={ID:new RegExp("^#("+Ee+")"),CLASS:new RegExp("^\\.("+Ee+")"),TAG:new RegExp("^("+Ee+"|[*])"),ATTR:new RegExp("^"+Le),PSEUDO:new RegExp("^"+nt),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+he+"*(even|odd|(([+-]|)(\\d*)n|)"+he+"*(?:([+-]|)"+he+"*(\\d+)|))"+he+"*\\)|)","i"),bool:new RegExp("^(?:"+te+")$","i"),needsContext:new RegExp("^"+he+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+he+"*((?:-\\d)?\\d*)"+he+"*\\)|)(?=[^-]|$)","i")},Wt=/HTML$/i,Fe=/^(?:input|select|textarea|button)$/i,le=/^h\d$/i,Te=/^[^{]+\{\s*\[native \w/,we=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,se=/[+~]/,ve=new RegExp("\\\\[\\da-fA-F]{1,6}"+he+"?|\\\\([^\\r\\n\\f])","g"),me=function(k,G){var Z="0x"+k.slice(1)-65536;return G||(Z<0?String.fromCharCode(Z+65536):String.fromCharCode(Z>>10|55296,Z&1023|56320))},_e=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,Ze=function(k,G){return G?k==="\0"?"\uFFFD":k.slice(0,-1)+"\\"+k.charCodeAt(k.length-1).toString(16)+" ":"\\"+k},Xe=function(){S()},qe=vt(function(k){return k.disabled===!0&&k.nodeName.toLowerCase()==="fieldset"},{dir:"parentNode",next:"legend"});try{re.apply(B=ne.call(I.childNodes),I.childNodes),B[I.childNodes.length].nodeType}catch(k){re={apply:B.length?function(G,Z){Y.apply(G,ne.call(Z))}:function(G,Z){for(var j=G.length,H=0;G[j++]=Z[H++];);G.length=j-1}}}function be(k,G,Z,j){var H,J,ee,ae,fe,ge,Ae,Ne=G&&G.ownerDocument,Oe=G?G.nodeType:9;if(Z=Z||[],typeof k!="string"||!k||Oe!==1&&Oe!==9&&Oe!==11)return Z;if(!j&&(S(G),G=G||v,N)){if(Oe!==11&&(fe=we.exec(k)))if(H=fe[1]){if(Oe===9)if(ee=G.getElementById(H)){if(ee.id===H)return Z.push(ee),Z}else return Z;else if(Ne&&(ee=Ne.getElementById(H))&&D(G,ee)&&ee.id===H)return Z.push(ee),Z}else{if(fe[2])return re.apply(Z,G.getElementsByTagName(k)),Z;if((H=fe[3])&&p.getElementsByClassName&&G.getElementsByClassName)return re.apply(Z,G.getElementsByClassName(H)),Z}if(p.qsa&&!U[k+" "]&&(!A||!A.test(k))&&(Oe!==1||G.nodeName.toLowerCase()!=="object")){if(Ae=k,Ne=G,Oe===1&&(Ce.test(k)||Dt.test(k))){for(Ne=se.test(k)&&dr(G.parentNode)||G,(Ne!==G||!p.scope)&&((ae=G.getAttribute("id"))?ae=ae.replace(_e,Ze):G.setAttribute("id",ae=C)),ge=u(k),J=ge.length;J--;)ge[J]=(ae?"#"+ae:":scope")+" "+hr(ge[J]);Ae=ge.join(",")}try{return re.apply(Z,Ne.querySelectorAll(Ae)),Z}catch(Ye){U(k,!0)}finally{ae===C&&G.removeAttribute("id")}}}return n(k.replace(ft,"$1"),G,Z,j)}function Ge(){var k=[];function G(Z,j){return k.push(Z+" ")>c.cacheLength&&delete G[k.shift()],G[Z+" "]=j}return G}function Qe(k){return k[C]=!0,k}function Je(k){var G=v.createElement("fieldset");try{return!!k(G)}catch(Z){return!1}finally{G.parentNode&&G.parentNode.removeChild(G),G=null}}function Ut(k,G){for(var Z=k.split("|"),j=Z.length;j--;)c.attrHandle[Z[j]]=G}function Lt(k,G){var Z=G&&k,j=Z&&k.nodeType===1&&G.nodeType===1&&k.sourceIndex-G.sourceIndex;if(j)return j;if(Z){for(;Z=Z.nextSibling;)if(Z===G)return-1}return k?1:-1}function Tt(k){return function(G){var Z=G.nodeName.toLowerCase();return Z==="input"&&G.type===k}}function br(k){return function(G){var Z=G.nodeName.toLowerCase();return(Z==="input"||Z==="button")&&G.type===k}}function nr(k){return function(G){return"form"in G?G.parentNode&&G.disabled===!1?"label"in G?"label"in G.parentNode?G.parentNode.disabled===k:G.disabled===k:G.isDisabled===k||G.isDisabled!==!k&&qe(G)===k:G.disabled===k:"label"in G?G.disabled===k:!1}}function Ht(k){return Qe(function(G){return G=+G,Qe(function(Z,j){for(var H,J=k([],Z.length,G),ee=J.length;ee--;)Z[H=J[ee]]&&(Z[H]=!(j[H]=Z[H]))})})}function dr(k){return k&&typeof k.getElementsByTagName!="undefined"&&k}p=be.support={},s=be.isXML=function(k){var G=k&&k.namespaceURI,Z=k&&(k.ownerDocument||k).documentElement;return!Wt.test(G||Z&&Z.nodeName||"HTML")},S=be.setDocument=function(k){var G,Z,j=k?k.ownerDocument||k:I;return j==v||j.nodeType!==9||!j.documentElement||(v=j,E=v.documentElement,N=!s(v),I!=v&&(Z=v.defaultView)&&Z.top!==Z&&(Z.addEventListener?Z.addEventListener("unload",Xe,!1):Z.attachEvent&&Z.attachEvent("onunload",Xe)),p.scope=Je(function(H){return E.appendChild(H).appendChild(v.createElement("div")),typeof H.querySelectorAll!="undefined"&&!H.querySelectorAll(":scope fieldset div").length}),p.cssHas=Je(function(){try{return v.querySelector(":has(*,:jqfake)"),!1}catch(H){return!0}}),p.attributes=Je(function(H){return H.className="i",!H.getAttribute("className")}),p.getElementsByTagName=Je(function(H){return H.appendChild(v.createComment("")),!H.getElementsByTagName("*").length}),p.getElementsByClassName=Te.test(v.getElementsByClassName),p.getById=Je(function(H){return E.appendChild(H).id=C,!v.getElementsByName||!v.getElementsByName(C).length}),p.getById?(c.filter.ID=function(H){var J=H.replace(ve,me);return function(ee){return ee.getAttribute("id")===J}},c.find.ID=function(H,J){if(typeof J.getElementById!="undefined"&&N){var ee=J.getElementById(H);return ee?[ee]:[]}}):(c.filter.ID=function(H){var J=H.replace(ve,me);return function(ee){var ae=typeof ee.getAttributeNode!="undefined"&&ee.getAttributeNode("id");return ae&&ae.value===J}},c.find.ID=function(H,J){if(typeof J.getElementById!="undefined"&&N){var ee,ae,fe,ge=J.getElementById(H);if(ge){if(ee=ge.getAttributeNode("id"),ee&&ee.value===H)return[ge];for(fe=J.getElementsByName(H),ae=0;ge=fe[ae++];)if(ee=ge.getAttributeNode("id"),ee&&ee.value===H)return[ge]}return[]}}),c.find.TAG=p.getElementsByTagName?function(H,J){if(typeof J.getElementsByTagName!="undefined")return J.getElementsByTagName(H);if(p.qsa)return J.querySelectorAll(H)}:function(H,J){var ee,ae=[],fe=0,ge=J.getElementsByTagName(H);if(H==="*"){for(;ee=ge[fe++];)ee.nodeType===1&&ae.push(ee);return ae}return ge},c.find.CLASS=p.getElementsByClassName&&function(H,J){if(typeof J.getElementsByClassName!="undefined"&&N)return J.getElementsByClassName(H)},T=[],A=[],(p.qsa=Te.test(v.querySelectorAll))&&(Je(function(H){var J;E.appendChild(H).innerHTML="",H.querySelectorAll("[msallowcapture^='']").length&&A.push("[*^$]="+he+`*(?:''|"")`),H.querySelectorAll("[selected]").length||A.push("\\["+he+"*(?:value|"+te+")"),H.querySelectorAll("[id~="+C+"-]").length||A.push("~="),J=v.createElement("input"),J.setAttribute("name",""),H.appendChild(J),H.querySelectorAll("[name='']").length||A.push("\\["+he+"*name"+he+"*="+he+`*(?:''|"")`),H.querySelectorAll(":checked").length||A.push(":checked"),H.querySelectorAll("a#"+C+"+*").length||A.push(".#.+[+~]"),H.querySelectorAll("\\\f"),A.push("[\\r\\n\\f]")}),Je(function(H){H.innerHTML="";var J=v.createElement("input");J.setAttribute("type","hidden"),H.appendChild(J).setAttribute("name","D"),H.querySelectorAll("[name=d]").length&&A.push("name"+he+"*[*^$|!~]?="),H.querySelectorAll(":enabled").length!==2&&A.push(":enabled",":disabled"),E.appendChild(H).disabled=!0,H.querySelectorAll(":disabled").length!==2&&A.push(":enabled",":disabled"),H.querySelectorAll("*,:x"),A.push(",.*:")})),(p.matchesSelector=Te.test(b=E.matches||E.webkitMatchesSelector||E.mozMatchesSelector||E.oMatchesSelector||E.msMatchesSelector))&&Je(function(H){p.disconnectedMatch=b.call(H,"*"),b.call(H,"[s!='']:x"),T.push("!=",nt)}),p.cssHas||A.push(":has"),A=A.length&&new RegExp(A.join("|")),T=T.length&&new RegExp(T.join("|")),G=Te.test(E.compareDocumentPosition),D=G||Te.test(E.contains)?function(H,J){var ee=H.nodeType===9&&H.documentElement||H,ae=J&&J.parentNode;return H===ae||!!(ae&&ae.nodeType===1&&(ee.contains?ee.contains(ae):H.compareDocumentPosition&&H.compareDocumentPosition(ae)&16))}:function(H,J){if(J){for(;J=J.parentNode;)if(J===H)return!0}return!1},W=G?function(H,J){if(H===J)return d=!0,0;var ee=!H.compareDocumentPosition-!J.compareDocumentPosition;return ee||(ee=(H.ownerDocument||H)==(J.ownerDocument||J)?H.compareDocumentPosition(J):1,ee&1||!p.sortDetached&&J.compareDocumentPosition(H)===ee?H==v||H.ownerDocument==I&&D(I,H)?-1:J==v||J.ownerDocument==I&&D(I,J)?1:f?pe(f,H)-pe(f,J):0:ee&4?-1:1)}:function(H,J){if(H===J)return d=!0,0;var ee,ae=0,fe=H.parentNode,ge=J.parentNode,Ae=[H],Ne=[J];if(!fe||!ge)return H==v?-1:J==v?1:fe?-1:ge?1:f?pe(f,H)-pe(f,J):0;if(fe===ge)return Lt(H,J);for(ee=H;ee=ee.parentNode;)Ae.unshift(ee);for(ee=J;ee=ee.parentNode;)Ne.unshift(ee);for(;Ae[ae]===Ne[ae];)ae++;return ae?Lt(Ae[ae],Ne[ae]):Ae[ae]==I?-1:Ne[ae]==I?1:0}),v},be.matches=function(k,G){return be(k,null,null,G)},be.matchesSelector=function(k,G){if(S(k),p.matchesSelector&&N&&!U[G+" "]&&(!T||!T.test(G))&&(!A||!A.test(G)))try{var Z=b.call(k,G);if(Z||p.disconnectedMatch||k.document&&k.document.nodeType!==11)return Z}catch(j){U(G,!0)}return be(G,v,null,[k]).length>0},be.contains=function(k,G){return(k.ownerDocument||k)!=v&&S(k),D(k,G)},be.attr=function(k,G){(k.ownerDocument||k)!=v&&S(k);var Z=c.attrHandle[G.toLowerCase()],j=Z&&z.call(c.attrHandle,G.toLowerCase())?Z(k,G,!N):void 0;return j!==void 0?j:p.attributes||!N?k.getAttribute(G):(j=k.getAttributeNode(G))&&j.specified?j.value:null},be.escape=function(k){return(k+"").replace(_e,Ze)},be.error=function(k){throw new Error("Syntax error, unrecognized expression: "+k)},be.uniqueSort=function(k){var G,Z=[],j=0,H=0;if(d=!p.detectDuplicates,f=!p.sortStable&&k.slice(0),k.sort(W),d){for(;G=k[H++];)G===k[H]&&(j=Z.push(H));for(;j--;)k.splice(Z[j],1)}return f=null,k},l=be.getText=function(k){var G,Z="",j=0,H=k.nodeType;if(H){if(H===1||H===9||H===11){if(typeof k.textContent=="string")return k.textContent;for(k=k.firstChild;k;k=k.nextSibling)Z+=l(k)}else if(H===3||H===4)return k.nodeValue}else for(;G=k[j++];)Z+=l(G);return Z},c=be.selectors={cacheLength:50,createPseudo:Qe,match:He,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(k){return k[1]=k[1].replace(ve,me),k[3]=(k[3]||k[4]||k[5]||"").replace(ve,me),k[2]==="~="&&(k[3]=" "+k[3]+" "),k.slice(0,4)},CHILD:function(k){return k[1]=k[1].toLowerCase(),k[1].slice(0,3)==="nth"?(k[3]||be.error(k[0]),k[4]=+(k[4]?k[5]+(k[6]||1):2*(k[3]==="even"||k[3]==="odd")),k[5]=+(k[7]+k[8]||k[3]==="odd")):k[3]&&be.error(k[0]),k},PSEUDO:function(k){var G,Z=!k[6]&&k[2];return He.CHILD.test(k[0])?null:(k[3]?k[2]=k[4]||k[5]||"":Z&&_t.test(Z)&&(G=u(Z,!0))&&(G=Z.indexOf(")",Z.length-G)-Z.length)&&(k[0]=k[0].slice(0,G),k[2]=Z.slice(0,G)),k.slice(0,3))}},filter:{TAG:function(k){var G=k.replace(ve,me).toLowerCase();return k==="*"?function(){return!0}:function(Z){return Z.nodeName&&Z.nodeName.toLowerCase()===G}},CLASS:function(k){var G=O[k+" "];return G||(G=new RegExp("(^|"+he+")"+k+"("+he+"|$)"))&&O(k,function(Z){return G.test(typeof Z.className=="string"&&Z.className||typeof Z.getAttribute!="undefined"&&Z.getAttribute("class")||"")})},ATTR:function(k,G,Z){return function(j){var H=be.attr(j,k);return H==null?G==="!=":G?(H+="",G==="="?H===Z:G==="!="?H!==Z:G==="^="?Z&&H.indexOf(Z)===0:G==="*="?Z&&H.indexOf(Z)>-1:G==="$="?Z&&H.slice(-Z.length)===Z:G==="~="?(" "+H.replace(gt," ")+" ").indexOf(Z)>-1:G==="|="?H===Z||H.slice(0,Z.length+1)===Z+"-":!1):!0}},CHILD:function(k,G,Z,j,H){var J=k.slice(0,3)!=="nth",ee=k.slice(-4)!=="last",ae=G==="of-type";return j===1&&H===0?function(fe){return!!fe.parentNode}:function(fe,ge,Ae){var Ne,Oe,Ye,ye,ke,yt,Ct=J!==ee?"nextSibling":"previousSibling",st=fe.parentNode,jt=ae&&fe.nodeName.toLowerCase(),Br=!Ae&&!ae,At=!1;if(st){if(J){for(;Ct;){for(ye=fe;ye=ye[Ct];)if(ae?ye.nodeName.toLowerCase()===jt:ye.nodeType===1)return!1;yt=Ct=k==="only"&&!yt&&"nextSibling"}return!0}if(yt=[ee?st.firstChild:st.lastChild],ee&&Br){for(ye=st,Ye=ye[C]||(ye[C]={}),Oe=Ye[ye.uniqueID]||(Ye[ye.uniqueID]={}),Ne=Oe[k]||[],ke=Ne[0]===R&&Ne[1],At=ke&&Ne[2],ye=ke&&st.childNodes[ke];ye=++ke&&ye&&ye[Ct]||(At=ke=0)||yt.pop();)if(ye.nodeType===1&&++At&&ye===fe){Oe[k]=[R,ke,At];break}}else if(Br&&(ye=fe,Ye=ye[C]||(ye[C]={}),Oe=Ye[ye.uniqueID]||(Ye[ye.uniqueID]={}),Ne=Oe[k]||[],ke=Ne[0]===R&&Ne[1],At=ke),At===!1)for(;(ye=++ke&&ye&&ye[Ct]||(At=ke=0)||yt.pop())&&!((ae?ye.nodeName.toLowerCase()===jt:ye.nodeType===1)&&++At&&(Br&&(Ye=ye[C]||(ye[C]={}),Oe=Ye[ye.uniqueID]||(Ye[ye.uniqueID]={}),Oe[k]=[R,At]),ye===fe)););return At-=H,At===j||At%j===0&&At/j>=0}}},PSEUDO:function(k,G){var Z,j=c.pseudos[k]||c.setFilters[k.toLowerCase()]||be.error("unsupported pseudo: "+k);return j[C]?j(G):j.length>1?(Z=[k,k,"",G],c.setFilters.hasOwnProperty(k.toLowerCase())?Qe(function(H,J){for(var ee,ae=j(H,G),fe=ae.length;fe--;)ee=pe(H,ae[fe]),H[ee]=!(J[ee]=ae[fe])}):function(H){return j(H,0,Z)}):j}},pseudos:{not:Qe(function(k){var G=[],Z=[],j=g(k.replace(ft,"$1"));return j[C]?Qe(function(H,J,ee,ae){for(var fe,ge=j(H,null,ae,[]),Ae=H.length;Ae--;)(fe=ge[Ae])&&(H[Ae]=!(J[Ae]=fe))}):function(H,J,ee){return G[0]=H,j(G,null,ee,Z),G[0]=null,!Z.pop()}}),has:Qe(function(k){return function(G){return be(k,G).length>0}}),contains:Qe(function(k){return k=k.replace(ve,me),function(G){return(G.textContent||l(G)).indexOf(k)>-1}}),lang:Qe(function(k){return $e.test(k||"")||be.error("unsupported lang: "+k),k=k.replace(ve,me).toLowerCase(),function(G){var Z;do if(Z=N?G.lang:G.getAttribute("xml:lang")||G.getAttribute("lang"))return Z=Z.toLowerCase(),Z===k||Z.indexOf(k+"-")===0;while((G=G.parentNode)&&G.nodeType===1);return!1}}),target:function(k){var G=i.location&&i.location.hash;return G&&G.slice(1)===k.id},root:function(k){return k===E},focus:function(k){return k===v.activeElement&&(!v.hasFocus||v.hasFocus())&&!!(k.type||k.href||~k.tabIndex)},enabled:nr(!1),disabled:nr(!0),checked:function(k){var G=k.nodeName.toLowerCase();return G==="input"&&!!k.checked||G==="option"&&!!k.selected},selected:function(k){return k.parentNode&&k.parentNode.selectedIndex,k.selected===!0},empty:function(k){for(k=k.firstChild;k;k=k.nextSibling)if(k.nodeType<6)return!1;return!0},parent:function(k){return!c.pseudos.empty(k)},header:function(k){return le.test(k.nodeName)},input:function(k){return Fe.test(k.nodeName)},button:function(k){var G=k.nodeName.toLowerCase();return G==="input"&&k.type==="button"||G==="button"},text:function(k){var G;return k.nodeName.toLowerCase()==="input"&&k.type==="text"&&((G=k.getAttribute("type"))==null||G.toLowerCase()==="text")},first:Ht(function(){return[0]}),last:Ht(function(k,G){return[G-1]}),eq:Ht(function(k,G,Z){return[Z<0?Z+G:Z]}),even:Ht(function(k,G){for(var Z=0;ZG?G:Z;--j>=0;)k.push(j);return k}),gt:Ht(function(k,G,Z){for(var j=Z<0?Z+G:Z;++j1?function(G,Z,j){for(var H=k.length;H--;)if(!k[H](G,Z,j))return!1;return!0}:k[0]}function Fr(k,G,Z){for(var j=0,H=G.length;j-1&&(ee[Ae]=!(ae[Ae]=Oe))}}else st=lr(st===ae?st.splice(ke,st.length):st),H?H(null,ae,st,ge):re.apply(ae,st)})}function Dr(k){for(var G,Z,j,H=k.length,J=c.relative[k[0].type],ee=J||c.relative[" "],ae=J?1:0,fe=vt(function(Ne){return Ne===G},ee,!0),ge=vt(function(Ne){return pe(G,Ne)>-1},ee,!0),Ae=[function(Ne,Oe,Ye){var ye=!J&&(Ye||Oe!==m)||((G=Oe).nodeType?fe(Ne,Oe,Ye):ge(Ne,Oe,Ye));return G=null,ye}];ae1&&Nr(Ae),ae>1&&hr(k.slice(0,ae-1).concat({value:k[ae-2].type===" "?"*":""})).replace(ft,"$1"),Z,ae0,j=k.length>0,H=function(J,ee,ae,fe,ge){var Ae,Ne,Oe,Ye=0,ye="0",ke=J&&[],yt=[],Ct=m,st=J||j&&c.find.TAG("*",ge),jt=R+=Ct==null?1:Math.random()||.1,Br=st.length;for(ge&&(m=ee==v||ee||ge);ye!==Br&&(Ae=st[ye])!=null;ye++){if(j&&Ae){for(Ne=0,!ee&&Ae.ownerDocument!=v&&(S(Ae),ae=!N);Oe=k[Ne++];)if(Oe(Ae,ee||v,ae)){fe.push(Ae);break}ge&&(R=jt)}Z&&((Ae=!Oe&&Ae)&&Ye--,J&&ke.push(Ae))}if(Ye+=ye,Z&&ye!==Ye){for(Ne=0;Oe=G[Ne++];)Oe(ke,yt,ee,ae);if(J){if(Ye>0)for(;ye--;)ke[ye]||yt[ye]||(yt[ye]=V.call(fe));yt=lr(yt)}re.apply(fe,yt),ge&&!J&&yt.length>0&&Ye+G.length>1&&be.uniqueSort(fe)}return ge&&(R=jt,m=Ct),ke};return Z?Qe(H):H}g=be.compile=function(k,G){var Z,j=[],H=[],J=F[k+" "];if(!J){for(G||(G=u(k)),Z=G.length;Z--;)J=Dr(G[Z]),J[C]?j.push(J):H.push(J);J=F(k,ai(H,j)),J.selector=k}return J},n=be.select=function(k,G,Z,j){var H,J,ee,ae,fe,ge=typeof k=="function"&&k,Ae=!j&&u(k=ge.selector||k);if(Z=Z||[],Ae.length===1){if(J=Ae[0]=Ae[0].slice(0),J.length>2&&(ee=J[0]).type==="ID"&&G.nodeType===9&&N&&c.relative[J[1].type]){if(G=(c.find.ID(ee.matches[0].replace(ve,me),G)||[])[0],G)ge&&(G=G.parentNode);else return Z;k=k.slice(J.shift().value.length)}for(H=He.needsContext.test(k)?0:J.length;H--&&(ee=J[H],!c.relative[ae=ee.type]);)if((fe=c.find[ae])&&(j=fe(ee.matches[0].replace(ve,me),se.test(J[0].type)&&dr(G.parentNode)||G))){if(J.splice(H,1),k=j.length&&hr(J),!k)return re.apply(Z,j),Z;break}}return(ge||g(k,Ae))(j,G,!N,Z,!G||se.test(k)&&dr(G.parentNode)||G),Z},p.sortStable=C.split("").sort(W).join("")===C,p.detectDuplicates=!!d,S(),p.sortDetached=Je(function(k){return k.compareDocumentPosition(v.createElement("fieldset"))&1}),Je(function(k){return k.innerHTML="",k.firstChild.getAttribute("href")==="#"})||Ut("type|href|height|width",function(k,G,Z){if(!Z)return k.getAttribute(G,G.toLowerCase()==="type"?1:2)}),(!p.attributes||!Je(function(k){return k.innerHTML="",k.firstChild.setAttribute("value",""),k.firstChild.getAttribute("value")===""}))&&Ut("value",function(k,G,Z){if(!Z&&k.nodeName.toLowerCase()==="input")return k.defaultValue}),Je(function(k){return k.getAttribute("disabled")==null})||Ut(te,function(k,G,Z){var j;if(!Z)return k[G]===!0?G.toLowerCase():(j=k.getAttributeNode(G))&&j.specified?j.value:null});var Vr=i.Sizzle;be.noConflict=function(){return i.Sizzle===be&&(i.Sizzle=Vr),be},h=function(){return be}.call(y,o,y,P),h!==void 0&&(P.exports=h)})(window)},5547:(P,y,o)=>{var h,i;h=[o(264),o(5422),o(4995),o(3153),o(2954),o(6880),o(4330),o(7116),o(5535),o(1188),o(1210),o(8433)],i=function(r,p,c,l,s,u,g){"use strict";var n=/%20/g,m=/#.*$/,f=/([?&])_=[^&]*/,d=/^(.*?):[ \t]*([^\r\n]*)$/mg,S=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,v=/^(?:GET|HEAD)$/,E=/^\/\//,N={},A={},T="*/".concat("*"),b=p.createElement("a");b.href=s.href;function D(O){return function($,F){typeof $!="string"&&(F=$,$="*");var U,W=0,z=$.toLowerCase().match(l)||[];if(c(F))for(;U=z[W++];)U[0]==="+"?(U=U.slice(1)||"*",(O[U]=O[U]||[]).unshift(F)):(O[U]=O[U]||[]).push(F)}}function C(O,$,F,U){var W={},z=O===A;function B(V){var Y;return W[V]=!0,r.each(O[V]||[],function(re,ne){var pe=ne($,F,U);if(typeof pe=="string"&&!z&&!W[pe])return $.dataTypes.unshift(pe),B(pe),!1;if(z)return!(Y=pe)}),Y}return B($.dataTypes[0])||!W["*"]&&B("*")}function I(O,$){var F,U,W=r.ajaxSettings.flatOptions||{};for(F in $)$[F]!==void 0&&((W[F]?O:U||(U={}))[F]=$[F]);return U&&r.extend(!0,O,U),O}function R(O,$,F){for(var U,W,z,B,V=O.contents,Y=O.dataTypes;Y[0]==="*";)Y.shift(),U===void 0&&(U=O.mimeType||$.getResponseHeader("Content-Type"));if(U){for(W in V)if(V[W]&&V[W].test(U)){Y.unshift(W);break}}if(Y[0]in F)z=Y[0];else{for(W in F){if(!Y[0]||O.converters[W+" "+Y[0]]){z=W;break}B||(B=W)}z=z||B}if(z)return z!==Y[0]&&Y.unshift(z),F[z]}function x(O,$,F,U){var W,z,B,V,Y,re={},ne=O.dataTypes.slice();if(ne[1])for(B in O.converters)re[B.toLowerCase()]=O.converters[B];for(z=ne.shift();z;)if(O.responseFields[z]&&(F[O.responseFields[z]]=$),!Y&&U&&O.dataFilter&&($=O.dataFilter($,O.dataType)),Y=z,z=ne.shift(),z){if(z==="*")z=Y;else if(Y!=="*"&&Y!==z){if(B=re[Y+" "+z]||re["* "+z],!B){for(W in re)if(V=W.split(" "),V[1]===z&&(B=re[Y+" "+V[0]]||re["* "+V[0]],B)){B===!0?B=re[W]:re[W]!==!0&&(z=V[0],ne.unshift(V[1]));break}}if(B!==!0)if(B&&O.throws)$=B($);else try{$=B($)}catch(pe){return{state:"parsererror",error:B?pe:"No conversion from "+Y+" to "+z}}}}return{state:"success",data:$}}return r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:s.href,type:"GET",isLocal:S.test(s.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":T,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(O,$){return $?I(I(O,r.ajaxSettings),$):I(r.ajaxSettings,O)},ajaxPrefilter:D(N),ajaxTransport:D(A),ajax:function(O,$){typeof O=="object"&&($=O,O=void 0),$=$||{};var F,U,W,z,B,V,Y,re,ne,pe,te=r.ajaxSetup({},$),he=te.context||te,Ee=te.context&&(he.nodeType||he.jquery)?r(he):r.event,Le=r.Deferred(),nt=r.Callbacks("once memory"),gt=te.statusCode||{},ft={},mt={},Dt="canceled",Ce={readyState:0,getResponseHeader:function($e){var He;if(Y){if(!z)for(z={};He=d.exec(W);)z[He[1].toLowerCase()+" "]=(z[He[1].toLowerCase()+" "]||[]).concat(He[2]);He=z[$e.toLowerCase()+" "]}return He==null?null:He.join(", ")},getAllResponseHeaders:function(){return Y?W:null},setRequestHeader:function($e,He){return Y==null&&($e=mt[$e.toLowerCase()]=mt[$e.toLowerCase()]||$e,ft[$e]=He),this},overrideMimeType:function($e){return Y==null&&(te.mimeType=$e),this},statusCode:function($e){var He;if($e)if(Y)Ce.always($e[Ce.status]);else for(He in $e)gt[He]=[gt[He],$e[He]];return this},abort:function($e){var He=$e||Dt;return F&&F.abort(He),_t(0,He),this}};if(Le.promise(Ce),te.url=((O||te.url||s.href)+"").replace(E,s.protocol+"//"),te.type=$.method||$.type||te.method||te.type,te.dataTypes=(te.dataType||"*").toLowerCase().match(l)||[""],te.crossDomain==null){V=p.createElement("a");try{V.href=te.url,V.href=V.href,te.crossDomain=b.protocol+"//"+b.host!=V.protocol+"//"+V.host}catch($e){te.crossDomain=!0}}if(te.data&&te.processData&&typeof te.data!="string"&&(te.data=r.param(te.data,te.traditional)),C(N,te,$,Ce),Y)return Ce;re=r.event&&te.global,re&&r.active++===0&&r.event.trigger("ajaxStart"),te.type=te.type.toUpperCase(),te.hasContent=!v.test(te.type),U=te.url.replace(m,""),te.hasContent?te.data&&te.processData&&(te.contentType||"").indexOf("application/x-www-form-urlencoded")===0&&(te.data=te.data.replace(n,"+")):(pe=te.url.slice(U.length),te.data&&(te.processData||typeof te.data=="string")&&(U+=(g.test(U)?"&":"?")+te.data,delete te.data),te.cache===!1&&(U=U.replace(f,"$1"),pe=(g.test(U)?"&":"?")+"_="+u.guid+++pe),te.url=U+pe),te.ifModified&&(r.lastModified[U]&&Ce.setRequestHeader("If-Modified-Since",r.lastModified[U]),r.etag[U]&&Ce.setRequestHeader("If-None-Match",r.etag[U])),(te.data&&te.hasContent&&te.contentType!==!1||$.contentType)&&Ce.setRequestHeader("Content-Type",te.contentType),Ce.setRequestHeader("Accept",te.dataTypes[0]&&te.accepts[te.dataTypes[0]]?te.accepts[te.dataTypes[0]]+(te.dataTypes[0]!=="*"?", "+T+"; q=0.01":""):te.accepts["*"]);for(ne in te.headers)Ce.setRequestHeader(ne,te.headers[ne]);if(te.beforeSend&&(te.beforeSend.call(he,Ce,te)===!1||Y))return Ce.abort();if(Dt="abort",nt.add(te.complete),Ce.done(te.success),Ce.fail(te.error),F=C(A,te,$,Ce),!F)_t(-1,"No Transport");else{if(Ce.readyState=1,re&&Ee.trigger("ajaxSend",[Ce,te]),Y)return Ce;te.async&&te.timeout>0&&(B=window.setTimeout(function(){Ce.abort("timeout")},te.timeout));try{Y=!1,F.send(ft,_t)}catch($e){if(Y)throw $e;_t(-1,$e)}}function _t($e,He,Wt,Fe){var le,Te,we,se,ve,me=He;Y||(Y=!0,B&&window.clearTimeout(B),F=void 0,W=Fe||"",Ce.readyState=$e>0?4:0,le=$e>=200&&$e<300||$e===304,Wt&&(se=R(te,Ce,Wt)),!le&&r.inArray("script",te.dataTypes)>-1&&r.inArray("json",te.dataTypes)<0&&(te.converters["text script"]=function(){}),se=x(te,se,Ce,le),le?(te.ifModified&&(ve=Ce.getResponseHeader("Last-Modified"),ve&&(r.lastModified[U]=ve),ve=Ce.getResponseHeader("etag"),ve&&(r.etag[U]=ve)),$e===204||te.type==="HEAD"?me="nocontent":$e===304?me="notmodified":(me=se.state,Te=se.data,we=se.error,le=!we)):(we=me,($e||!me)&&(me="error",$e<0&&($e=0))),Ce.status=$e,Ce.statusText=(He||me)+"",le?Le.resolveWith(he,[Te,me,Ce]):Le.rejectWith(he,[Ce,me,we]),Ce.statusCode(gt),gt=void 0,re&&Ee.trigger(le?"ajaxSuccess":"ajaxError",[Ce,te,le?Te:we]),nt.fireWith(he,[Ce,me]),re&&(Ee.trigger("ajaxComplete",[Ce,te]),--r.active||r.event.trigger("ajaxStop")))}return Ce},getJSON:function(O,$,F){return r.get(O,$,F,"json")},getScript:function(O,$){return r.get(O,void 0,$,"script")}}),r.each(["get","post"],function(O,$){r[$]=function(F,U,W,z){return c(U)&&(z=z||W,W=U,U=void 0),r.ajax(r.extend({url:F,type:$,dataType:z,data:U,success:W},r.isPlainObject(F)&&F))}}),r.ajaxPrefilter(function(O){var $;for($ in O.headers)$.toLowerCase()==="content-type"&&(O.contentType=O.headers[$]||"")}),r}.apply(y,h),i!==void 0&&(P.exports=i)},3004:(P,y,o)=>{var h,i;h=[o(264),o(4995),o(6880),o(4330),o(5547)],i=function(r,p,c,l){"use strict";var s=[],u=/(=)\?(?=&|$)|\?\?/;r.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var g=s.pop()||r.expando+"_"+c.guid++;return this[g]=!0,g}}),r.ajaxPrefilter("json jsonp",function(g,n,m){var f,d,S,v=g.jsonp!==!1&&(u.test(g.url)?"url":typeof g.data=="string"&&(g.contentType||"").indexOf("application/x-www-form-urlencoded")===0&&u.test(g.data)&&"data");if(v||g.dataTypes[0]==="jsonp")return f=g.jsonpCallback=p(g.jsonpCallback)?g.jsonpCallback():g.jsonpCallback,v?g[v]=g[v].replace(u,"$1"+f):g.jsonp!==!1&&(g.url+=(l.test(g.url)?"&":"?")+g.jsonp+"="+f),g.converters["script json"]=function(){return S||r.error(f+" was not called"),S[0]},g.dataTypes[0]="json",d=window[f],window[f]=function(){S=arguments},m.always(function(){d===void 0?r(window).removeProp(f):window[f]=d,g[f]&&(g.jsonpCallback=n.jsonpCallback,s.push(f)),S&&p(d)&&d(S[0]),S=d=void 0}),"script"})}.apply(y,h),i!==void 0&&(P.exports=i)},2926:(P,y,o)=>{var h,i;h=[o(264),o(5242),o(4995),o(2023),o(5547),o(3599),o(9921),o(5704)],i=function(r,p,c){"use strict";r.fn.load=function(l,s,u){var g,n,m,f=this,d=l.indexOf(" ");return d>-1&&(g=p(l.slice(d)),l=l.slice(0,d)),c(s)?(u=s,s=void 0):s&&typeof s=="object"&&(n="POST"),f.length>0&&r.ajax({url:l,type:n||"GET",dataType:"html",data:s}).done(function(S){m=arguments,f.html(g?r("
").append(r.parseHTML(S)).find(g):S)}).always(u&&function(S,v){f.each(function(){u.apply(this,m||[S.responseText,v,S])})}),this}}.apply(y,h),i!==void 0&&(P.exports=i)},2377:(P,y,o)=>{var h,i;h=[o(264),o(5422),o(5547)],i=function(r,p){"use strict";r.ajaxPrefilter(function(c){c.crossDomain&&(c.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(c){return r.globalEval(c),c}}}),r.ajaxPrefilter("script",function(c){c.cache===void 0&&(c.cache=!1),c.crossDomain&&(c.type="GET")}),r.ajaxTransport("script",function(c){if(c.crossDomain||c.scriptAttrs){var l,s;return{send:function(u,g){l=r(" + From 75242f8844c4c1489be6a101bf5db81d1885cc21 Mon Sep 17 00:00:00 2001 From: ganzizi Date: Mon, 24 Jul 2023 16:50:50 +0800 Subject: [PATCH 13/80] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E8=81=8A=E5=A4=A9=E5=85=B3=E8=81=94id?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/DialogController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/Api/DialogController.php b/app/Http/Controllers/Api/DialogController.php index 39e64553d..a40c3fcb4 100755 --- a/app/Http/Controllers/Api/DialogController.php +++ b/app/Http/Controllers/Api/DialogController.php @@ -1801,7 +1801,7 @@ class DialogController extends AbstractController * @apiName okr__add * * @apiParam {String} name 标题 - * @apiParam {number} link_id 关联id + * @apiParam {Number} link_id 关联id * @apiParam {Array} userids 群成员,格式: [userid1, userid2, userid3] * * @apiSuccess {Number} ret 返回状态码(1正确、0错误) From b8eab81ad23a22cb718640ecaf3cfebaafa212ab Mon Sep 17 00:00:00 2001 From: weifashi <605403358@qq.com> Date: Mon, 24 Jul 2023 18:13:31 +0800 Subject: [PATCH 14/80] =?UTF-8?q?feat=EF=BC=9A=E8=81=8A=E5=A4=A9=E6=89=93?= =?UTF-8?q?=E5=BC=80okr=20-=20=2010%?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/assets/js/pages/manage/apps.vue | 5 +++-- .../js/pages/manage/components/DialogWrapper.vue | 16 +++++++++++++++- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/resources/assets/js/pages/manage/apps.vue b/resources/assets/js/pages/manage/apps.vue index 8c6fdfebb..7b2783c7c 100644 --- a/resources/assets/js/pages/manage/apps.vue +++ b/resources/assets/js/pages/manage/apps.vue @@ -10,6 +10,7 @@ inline destroy disableSandbox + keep-alive :data='appData' @created='handleCreate' @beforemount='handleBeforeMount' @@ -71,7 +72,7 @@ export default { methods: { handleCreate(e) { - // console.log("子应用创建了",e) + console.log("子应用创建了",e) }, handleBeforeMount(e) { // console.log("子应用即将被渲染",e) @@ -96,7 +97,7 @@ export default { }, handleUnmount(e) { this.loading = true; - // console.log("子应用卸载了",e) + console.log("子应用卸载了",e) }, handleError(e) { // console.log("子应用加载出错了",e.detail.error) diff --git a/resources/assets/js/pages/manage/components/DialogWrapper.vue b/resources/assets/js/pages/manage/components/DialogWrapper.vue index 77508ea24..53ec01ae7 100644 --- a/resources/assets/js/pages/manage/components/DialogWrapper.vue +++ b/resources/assets/js/pages/manage/components/DialogWrapper.vue @@ -651,7 +651,6 @@ export default { }, beforeDestroy() { - console.log(21123123123123123123) this.$store.dispatch('forgetInDialog', this._uid) this.$store.dispatch('closeDialog', this.dialogId) }, @@ -1798,6 +1797,17 @@ export default { this.$store.dispatch("openTask", this.dialogData.group_info.id); }, + openOkr() { + if (!this.dialogData.link_id) { + return; + } + if (this.taskId > 0) { + // 如果当前打开着任务窗口则关闭对话窗口 + this.$store.dispatch("openDialog", 0); + } + this.$store.dispatch("openTask", this.dialogData.link_id); + }, + onPrevPage() { if (this.prevId === 0) { return @@ -2150,6 +2160,10 @@ export default { this.openTask() break; + case 'okr': + this.openOkr() + break; + default: if (this.loadMsg) { $A.messageWarning("正在加载,请稍后再试...") From 46967f1e002d3d0810d9b48272473438e2971a51 Mon Sep 17 00:00:00 2001 From: weifashi <605403358@qq.com> Date: Tue, 25 Jul 2023 16:01:53 +0800 Subject: [PATCH 15/80] =?UTF-8?q?feat=EF=BC=9A=E5=BE=AE=E5=BA=94=E7=94=A8?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/assets/js/pages/manage/apps.vue | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/resources/assets/js/pages/manage/apps.vue b/resources/assets/js/pages/manage/apps.vue index 7b2783c7c..6395004a6 100644 --- a/resources/assets/js/pages/manage/apps.vue +++ b/resources/assets/js/pages/manage/apps.vue @@ -10,7 +10,6 @@ inline destroy disableSandbox - keep-alive :data='appData' @created='handleCreate' @beforemount='handleBeforeMount' @@ -72,12 +71,9 @@ export default { methods: { handleCreate(e) { - console.log("子应用创建了",e) + // console.log("子应用创建了",e) }, handleBeforeMount(e) { - // console.log("子应用即将被渲染",e) - }, - handleMount(e) { this.appData = { type: 'init', vues:{ @@ -94,10 +90,14 @@ export default { }, userInfo: this.userInfo, } + }, + handleMount(e) { + }, handleUnmount(e) { this.loading = true; - console.log("子应用卸载了",e) + window.dispatchEvent(new Event('apps-unmount')); + // console.log("子应用卸载了",e) }, handleError(e) { // console.log("子应用加载出错了",e.detail.error) From df627b0ad5325e6c9a836f7009a23439ce353c54 Mon Sep 17 00:00:00 2001 From: weifashi <605403358@qq.com> Date: Wed, 26 Jul 2023 18:47:48 +0800 Subject: [PATCH 16/80] =?UTF-8?q?feat=EF=BC=9A=E7=94=A8=E6=88=B7=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E7=BB=84=E4=BB=B6=20-=20=20=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E7=94=A8=E6=88=B7ids?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/assets/js/components/UserSelect.vue | 2 +- resources/assets/js/pages/manage/apps.vue | 4 +- resources/assets/js/pages/manage/test/gggg.js | 311 ------------------ 3 files changed, 4 insertions(+), 313 deletions(-) delete mode 100644 resources/assets/js/pages/manage/test/gggg.js diff --git a/resources/assets/js/components/UserSelect.vue b/resources/assets/js/components/UserSelect.vue index 42b8a4974..338952cbb 100755 --- a/resources/assets/js/components/UserSelect.vue +++ b/resources/assets/js/components/UserSelect.vue @@ -312,7 +312,7 @@ export default { } else { this.searchKey = "" } - this.$emit("on-show-change",value) + this.$emit("on-show-change",value,this.values) }, searchKey() { diff --git a/resources/assets/js/pages/manage/apps.vue b/resources/assets/js/pages/manage/apps.vue index 6395004a6..8696d0550 100644 --- a/resources/assets/js/pages/manage/apps.vue +++ b/resources/assets/js/pages/manage/apps.vue @@ -27,6 +27,7 @@ import store from '../../store/index' import {mapState} from "vuex"; import { EventCenterForMicroApp } from '@micro-zoe/micro-app' import DialogWrapper from './components/DialogWrapper' +import UserSelect from "../../components/UserSelect.vue"; import {languageList, languageType} from "../../language"; export default { @@ -80,7 +81,8 @@ export default { Vue, store, components:{ - DialogWrapper + DialogWrapper, + UserSelect } }, theme: this.themeMode, diff --git a/resources/assets/js/pages/manage/test/gggg.js b/resources/assets/js/pages/manage/test/gggg.js deleted file mode 100644 index 408f3f5d8..000000000 --- a/resources/assets/js/pages/manage/test/gggg.js +++ /dev/null @@ -1,311 +0,0 @@ -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; From 7bae000a282d093e049334b04f578a012623b486 Mon Sep 17 00:00:00 2001 From: ganzizi Date: Thu, 27 Jul 2023 18:18:05 +0800 Subject: [PATCH 17/80] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E5=A4=9A?= =?UTF-8?q?=E9=83=A8=E9=97=A8=E7=94=A8=E6=88=B7=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/UsersController.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/Http/Controllers/Api/UsersController.php b/app/Http/Controllers/Api/UsersController.php index 18155b8e2..39dc8598c 100755 --- a/app/Http/Controllers/Api/UsersController.php +++ b/app/Http/Controllers/Api/UsersController.php @@ -538,6 +538,16 @@ class UsersController extends AbstractController $query->select('userid')->from('web_socket_dialog_users')->where('dialog_id', $keys['dialog_id']); }); } + if ($keys['departments']) { + if (!is_array($keys['departments'])) { + $keys['departments'] = explode(",", $keys['departments']); + } + $builder->where(function($query) use ($keys) { + foreach ($keys['departments'] AS $department) { + $query->orWhereRaw("FIND_IN_SET('{$department}', department)"); + } + }); + } if (in_array($sorts['az'], ['asc', 'desc'])) { $builder->orderBy('az', $sorts['az']); } else { From a603211f1a9cd136ed1d819e4827fabbfb0eafd9 Mon Sep 17 00:00:00 2001 From: weifashi <605403358@qq.com> Date: Fri, 28 Jul 2023 15:04:38 +0800 Subject: [PATCH 18/80] =?UTF-8?q?feat=EF=BC=9A=E8=9E=8D=E5=90=88=E5=AD=90?= =?UTF-8?q?=E5=BA=94=E7=94=A8=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/assets/js/components/MicroApps.vue | 130 ++++++++++++++++++ resources/assets/js/microapp.js | 8 +- resources/assets/js/pages/manage.vue | 24 +++- resources/assets/js/pages/manage/apps.vue | 90 ++---------- .../pages/manage/components/DialogWrapper.vue | 9 +- resources/assets/js/store/actions.js | 21 ++- resources/assets/js/store/state.js | 7 + 7 files changed, 191 insertions(+), 98 deletions(-) create mode 100644 resources/assets/js/components/MicroApps.vue diff --git a/resources/assets/js/components/MicroApps.vue b/resources/assets/js/components/MicroApps.vue new file mode 100644 index 000000000..c1c0addde --- /dev/null +++ b/resources/assets/js/components/MicroApps.vue @@ -0,0 +1,130 @@ + + + \ No newline at end of file diff --git a/resources/assets/js/microapp.js b/resources/assets/js/microapp.js index a520ca210..9365bee30 100644 --- a/resources/assets/js/microapp.js +++ b/resources/assets/js/microapp.js @@ -1,11 +1,9 @@ import microApp from '@micro-zoe/micro-app' -import DialogWrapper from "./pages/manage/components/DialogWrapper.vue"; export default function() { let urls = ""; - let route = "/microapp/"; + let route = "/"; let modules = {}; - let obj = { loader(code,url) { if (process.env.NODE_ENV === 'development') { @@ -25,11 +23,11 @@ export default function() { // 微应用名称 modules["micro-app"] = [obj] - + modules["okr-details"] = [obj] + // 微应用 microApp.start({ plugins: { - global: [DialogWrapper], modules: modules } }) diff --git a/resources/assets/js/pages/manage.vue b/resources/assets/js/pages/manage.vue index 17bda6689..839ea8a95 100644 --- a/resources/assets/js/pages/manage.vue +++ b/resources/assets/js/pages/manage.vue @@ -302,6 +302,9 @@ + + +
@@ -325,6 +328,7 @@ import TaskExport from "./manage/components/TaskExport"; import ApproveExport from "./manage/components/ApproveExport"; import notificationKoro from "notification-koro1"; import {Store} from "le5le-store"; +import MicroApps from "../components/MicroApps.vue"; export default { components: { @@ -342,7 +346,9 @@ export default { DrawerOverlay, ProjectManagement, TeamManagement, - ProjectArchived}, + ProjectArchived, + MicroApps + }, directives: {longpress}, data() { return { @@ -396,6 +402,8 @@ export default { operateItem: {}, needStartHome: false, + + okrUrl: import.meta.env.VITE_OKR_WEB_URL || "/apps/okr/" } }, @@ -459,6 +467,8 @@ export default { 'reportUnreadNumber', 'approveUnreadNumber', + + 'okrWindow' ]), ...mapGetters(['dashboardTask']), @@ -781,12 +791,12 @@ export default { return; case 'okrManage': case 'okrAnalyze': - let query = { url: import.meta.env.VITE_OKR_WEB_URL || "/apps/okr/" } - if(path=='okrManage'){ - this.goForward({ path: '/manage/apps/', query }); - }else{ - this.goForward({ path: '/manage/apps/#/analysis', query }); - } + this.goForward({ + path:'/manage/apps/' + ( path == 'okrManage' ? '/#/list' : '/#/analysis') , + query: { + baseUrl: this.okrUrl + } + }); return; case 'logout': $A.modalConfirm({ diff --git a/resources/assets/js/pages/manage/apps.vue b/resources/assets/js/pages/manage/apps.vue index 8696d0550..eafcb9ef7 100644 --- a/resources/assets/js/pages/manage/apps.vue +++ b/resources/assets/js/pages/manage/apps.vue @@ -1,41 +1,17 @@ diff --git a/resources/assets/js/pages/manage/setting/checkin.vue b/resources/assets/js/pages/manage/setting/checkin.vue index cbd3e554a..1e7706fcc 100644 --- a/resources/assets/js/pages/manage/setting/checkin.vue +++ b/resources/assets/js/pages/manage/setting/checkin.vue @@ -60,6 +60,7 @@ diff --git a/resources/assets/sass/pages/components/chat-input.scss b/resources/assets/sass/pages/components/chat-input.scss index b0234613e..c78a23bea 100755 --- a/resources/assets/sass/pages/components/chat-input.scss +++ b/resources/assets/sass/pages/components/chat-input.scss @@ -339,7 +339,7 @@ width: 100%; padding: 3px 0; border-radius: 8px; - box-sizing: content-box; + // box-sizing: content-box; > li { position: relative; &:before { @@ -375,6 +375,7 @@ .chat-emoji-wrapper { display: flex; flex-direction: column; + position: relative; .chat-emoji-emosearch { flex-shrink: 0; @@ -523,6 +524,24 @@ box-sizing: content-box; } } + + .left-btn,.right-btn{ + position: absolute !important; + height: 40px; + background: #f2f4f7 !important; + width: 34px; + z-index: 3; + } + + .left-btn{ + left: 0; + box-shadow: 10px 0 10px -10px rgba(0, 0, 0, 0.5); + } + + .right-btn{ + right: 0; + box-shadow: -10px 0 10px -10px rgba(0, 0, 0, 0.5); + } } } @@ -891,7 +910,8 @@ body.window-portrait { border-radius: 0; background-color: #f8f8f8; padding: 4px; - width: calc(100% - 8px); + width: 100%; + height: 48px; > li { &.active { &:before { @@ -899,6 +919,9 @@ body.window-portrait { } } } + .left-btn,.right-btn{ + background: #f8f8f8 !important; + } } } } From 1fed482025fc666d25ac090a526dad20ed5721e2 Mon Sep 17 00:00:00 2001 From: weifashi <605403358@qq.com> Date: Wed, 23 Aug 2023 10:54:37 +0800 Subject: [PATCH 69/80] =?UTF-8?q?feat=EF=BC=9A=E6=9B=B4=E6=96=B0=E5=AE=A1?= =?UTF-8?q?=E6=89=B9=E5=AE=B9=E5=99=A8=E7=89=88=E6=9C=AC=20-=20=E8=A7=A3?= =?UTF-8?q?=E5=86=B3=E6=B5=81=E7=A8=8B=E5=88=97=E8=A1=A8=E6=8E=92=E5=BA=8F?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index d9f4dc44a..8d96bd187 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -149,7 +149,7 @@ services: approve: container_name: "dootask-approve-${APP_ID}" - image: "kuaifan/dooapprove:0.0.1" + image: "kuaifan/dooapprove:0.0.2" environment: TZ: "${TIMEZONE:-PRC}" MYSQL_HOST: "${DB_HOST}" From 769e2b0223e7a2a81b2c9f147991a9c61e3eb856 Mon Sep 17 00:00:00 2001 From: weifashi <605403358@qq.com> Date: Thu, 24 Aug 2023 09:50:16 +0800 Subject: [PATCH 70/80] =?UTF-8?q?feat=EF=BC=9A=E5=AE=A1=E6=89=B9=E4=B8=AD?= =?UTF-8?q?=E5=BF=83=20-=20=E6=96=87=E6=A1=88=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/assets/js/pages/manage/approve/details.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/assets/js/pages/manage/approve/details.vue b/resources/assets/js/pages/manage/approve/details.vue index a8ab3edd3..75dc0e3d9 100644 --- a/resources/assets/js/pages/manage/approve/details.vue +++ b/resources/assets/js/pages/manage/approve/details.vue @@ -291,7 +291,7 @@ export default { return type == 2 ? `${hours}${this.$L('小时')}` : `${hours} ${this.$L('小时前')}`; } else { const days = Math.floor(timeDiff / 3600 / 24); - return type == 2 ? `${days + 1}${this.$L('天')}` : `${days + 1} ${this.$L('天')}`; + return type == 2 ? `${days + 1}${this.$L('天')}` : `${days + 1} ${this.$L('天前')}`; } }, // 时间转为周几 From 5b09a111cd1d2299f475826d064aed3876b460a7 Mon Sep 17 00:00:00 2001 From: weifashi <605403358@qq.com> Date: Thu, 24 Aug 2023 15:43:13 +0800 Subject: [PATCH 71/80] =?UTF-8?q?feat=EF=BC=9A=E5=AE=A1=E6=89=B9=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../assets/js/components/Mobile/Tabbar.vue | 2 +- .../js/pages/manage/approve/details.vue | 32 ++++----- .../assets/js/pages/manage/approve/index.vue | 72 +++++++++++++------ 3 files changed, 67 insertions(+), 39 deletions(-) diff --git a/resources/assets/js/components/Mobile/Tabbar.vue b/resources/assets/js/components/Mobile/Tabbar.vue index c6704d82e..e99af93c1 100644 --- a/resources/assets/js/components/Mobile/Tabbar.vue +++ b/resources/assets/js/components/Mobile/Tabbar.vue @@ -34,7 +34,7 @@ diff --git a/resources/assets/js/pages/manage/approve/details.vue b/resources/assets/js/pages/manage/approve/details.vue index 75dc0e3d9..ac04c630f 100644 --- a/resources/assets/js/pages/manage/approve/details.vue +++ b/resources/assets/js/pages/manage/approve/details.vue @@ -289,9 +289,12 @@ export default { } else if (timeDiff < 3600 * 24) { const hours = Math.floor(timeDiff / 3600); return type == 2 ? `${hours}${this.$L('小时')}` : `${hours} ${this.$L('小时前')}`; - } else { + } else if (timeDiff < 3600 * 24 * 30) { const days = Math.floor(timeDiff / 3600 / 24); return type == 2 ? `${days + 1}${this.$L('天')}` : `${days + 1} ${this.$L('天前')}`; + } else { + const days = Math.floor(timeDiff / 3600 / 720); + return type == 2 ? `${days + 1}${this.$L('月')}` : `${days + 1} ${this.$L('月前')}`; } }, // 时间转为周几 @@ -334,10 +337,8 @@ export default { } return item; }) - this.$nextTick(() => { - this.datas = data - isScrollToBottom && this.scrollToBottom(); - }) + this.datas = data + isScrollToBottom && this.scrollToBottom(); }).catch(({msg}) => { $A.modalError(msg); }).finally(_ => { @@ -431,14 +432,7 @@ export default { } }).then(({msg}) => { $A.messageSuccess("添加成功"); - if (this.$route.name == 'manage-approve-details' || this.$route.name == 'manage-messenger') { - this.getInfo(true) - } else { - this.$emit('approve') - setTimeout(() => { - this.scrollToBottom() - }, 500); - } + this.getInfo(true) this.commentShow = false; }).catch(({msg}) => { $A.modalError(msg); @@ -448,11 +442,13 @@ export default { }, // 滚动到容器底部 scrollToBottom() { - const container = this.$refs.approveDetailsBox - container.scrollTo({ - top: container.scrollHeight + 1000, - behavior: 'smooth' - }); + this.$nextTick(() => { + const container = this.$refs.approveDetailsBox + container.scrollTo({ + top: container.scrollHeight + 1000, + behavior: 'smooth' + }); + }) }, // 获取内容 getContent(content) { diff --git a/resources/assets/js/pages/manage/approve/index.vue b/resources/assets/js/pages/manage/approve/index.vue index 8d1c3352f..fcbaa13b0 100644 --- a/resources/assets/js/pages/manage/approve/index.vue +++ b/resources/assets/js/pages/manage/approve/index.vue @@ -8,7 +8,7 @@

{{$L('审批中心')}}

- + @@ -269,8 +269,6 @@ export default { approvalType: "all", approvalList: [ { value: "all", label: this.$L("全部审批") }, - { value: "请假", label: this.$L("请假") }, - { value: "加班申请", label: this.$L("加班申请") }, ], searchState: "all", searchStateList: [ @@ -349,16 +347,22 @@ export default { watch: { '$route' (to) { if(to.name == 'manage-approve'){ - this.tabsClick() + this.init() } }, wsMsg: { handler(info) { - const {type, action} = info; + const {type, action, mode, data} = info; switch (type) { case 'approve': if (action == 'unread') { - this.tabsClick() + this.tabsClick(); + } + break; + case 'dialog': + if (mode == 'add' && data?.msg?.text?.indexOf('open-approve-details') != -1) { + console.log(22); + this.tabsClick(); } break; } @@ -372,7 +376,7 @@ export default { }, showType(val){ if(val == 1){ - this.tabsClick() + this.init() } }, windowWidth(val){ @@ -381,13 +385,41 @@ export default { }, mounted() { this.tabsValue = "unread" - this.tabsClick() - this.getUnreadList() - this.addData.department_id = this.userInfo.department[0] || 0; - this.addData.startTime = this.addData.endTime = this.getCurrentDate(); - this.isShowIcon = this.windowWidth < 515 + this.init() }, methods:{ + + init() { + this.tabsClick() + this.getProcdefList() + if(this.tabsValue != 'unread'){ + this.getUnreadList(); + } + this.addData.department_id = this.userInfo.department[0] || 0; + this.addData.startTime = this.addData.endTime = this.getCurrentDate(); + this.isShowIcon = this.windowWidth < 515 + }, + + // 获取流程列表 + getProcdefList() { + return new Promise((resolve, reject) => { + this.$store.dispatch("call", { + url: 'approve/procdef/all', + method: 'post', + }).then(({data}) => { + this.procdefList = data.rows || []; + this.approvalList = this.procdefList.map(h=>{ + return { value: h.name, label: h.name } + }) + this.approvalList.unshift({ value: "all", label: this.$L("全部审批") }) + resolve() + }).catch(({msg}) => { + $A.modalError(msg); + reject() + }); + }); + }, + // 获取当前时间 getCurrentDate() { const today = new Date(); @@ -410,6 +442,9 @@ export default { if(val){ this.approvalType = this.searchState = "all" } + // + this.detailsShow = false; + // if(this.tabsValue == 'unread'){ if(val === false){ this.unreadPage = 1; @@ -438,6 +473,7 @@ export default { } this.getInitiatedList(); } + }, // 列表点击事件 @@ -663,16 +699,11 @@ export default { skipAuthError: true }).then(({data}) => { this.addData.department_id = data[0]?.department[0] || 0; - this.$store.dispatch("call", { - url: 'approve/procdef/all', - method: 'post', - }).then(({data}) => { - this.procdefList = data.rows || []; + this.getProcdefList().then(_ => { this.addTitle = this.$L("添加申请"); this.addShow = true; - }).catch(({msg}) => { - $A.modalError(msg); - }).finally(_ => { + this.addLoadIng = false; + }).catch(_ => { this.addLoadIng = false; }); }).catch(({msg}) => { @@ -710,6 +741,7 @@ export default { this.addShow = false; this.$refs.initiateRef.resetFields(); this.tabsValue = 'initiated'; + this.initiatedList.map(h=>{ h._active = false; }) this.$nextTick(()=>{ this.tabsClick(); }) From 42dec0464e4bc03868dd156e99d6c43aaa8a99b1 Mon Sep 17 00:00:00 2001 From: weifashi <605403358@qq.com> Date: Thu, 24 Aug 2023 16:05:59 +0800 Subject: [PATCH 72/80] =?UTF-8?q?feat=EF=BC=9A=E5=AE=A1=E6=89=B9=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/assets/js/pages/manage/approve/index.vue | 1 - 1 file changed, 1 deletion(-) diff --git a/resources/assets/js/pages/manage/approve/index.vue b/resources/assets/js/pages/manage/approve/index.vue index fcbaa13b0..ec12869bc 100644 --- a/resources/assets/js/pages/manage/approve/index.vue +++ b/resources/assets/js/pages/manage/approve/index.vue @@ -361,7 +361,6 @@ export default { break; case 'dialog': if (mode == 'add' && data?.msg?.text?.indexOf('open-approve-details') != -1) { - console.log(22); this.tabsClick(); } break; From 288e265aaaa3e1c2c136cf669e8fee4025cb6dee Mon Sep 17 00:00:00 2001 From: weifashi <605403358@qq.com> Date: Tue, 29 Aug 2023 11:51:46 +0800 Subject: [PATCH 73/80] =?UTF-8?q?init=EF=BC=9A1.=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=B8=85=E7=A9=BA=E6=95=B0=E6=8D=AE=E5=BA=93=E7=9A=84=E6=8C=87?= =?UTF-8?q?=E4=BB=A4=20=202.=20=E4=BF=AE=E5=A4=8D=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E5=89=8D=E7=AB=AF=E6=8E=A7=E5=88=B6=E5=8F=B0=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd | 24 +++++++++++++++++-- .../js/components/DrawerOverlay/index.vue | 4 ++-- resources/assets/js/components/Minder.vue | 2 +- .../assets/js/pages/manage/messenger.vue | 2 +- 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/cmd b/cmd index b7957bc67..a95b27431 100755 --- a/cmd +++ b/cmd @@ -162,20 +162,20 @@ run_exec() { run_mysql() { if [ "$1" = "backup" ]; then - # 备份数据库 database=$(env_get DB_DATABASE) username=$(env_get DB_USERNAME) password=$(env_get DB_PASSWORD) + # 备份数据库 mkdir -p ${cur_path}/docker/mysql/backup filename="${cur_path}/docker/mysql/backup/${database}_$(date "+%Y%m%d%H%M%S").sql.gz" run_exec mariadb "exec mysqldump --databases $database -u$username -p$password" | gzip > $filename judge "备份数据库" [ -f "$filename" ] && echo -e "备份文件:$filename" elif [ "$1" = "recovery" ]; then - # 还原数据库 database=$(env_get DB_DATABASE) username=$(env_get DB_USERNAME) password=$(env_get DB_PASSWORD) + # 还原数据库 mkdir -p ${cur_path}/docker/mysql/backup list=`ls -1 "${cur_path}/docker/mysql/backup" | grep ".sql.gz"` if [ -z "$list" ]; then @@ -198,6 +198,24 @@ run_mysql() { run_exec mariadb "gunzip < /$inputname | mysql -u$username -p$password $database" run_exec php "php artisan migrate" judge "还原数据库" + elif [ "$1" = "empty" ]; then + read -rp "确定要清空数据库吗?(Y/n): " empty + [[ -z ${empty} ]] && empty="Y" + case $empty in + [yY][eE][sS] | [yY]) + echo -e "${RedBG} 开始清空... ${Font}" + ;; + *) + echo -e "${GreenBG} 终止清空。 ${Font}" + exit 2 + ;; + esac + ./cmd mysql backup + $COMPOSE stop mariadb + $COMPOSE rm -f mariadb + rm -rf "./docker/mysql/data" + $COMPOSE up -d mariadb + judge "清空数据库" fi } @@ -424,6 +442,8 @@ if [ $# -gt 0 ]; then run_mysql backup elif [ "$1" = "recovery" ]; then run_mysql recovery + elif [ "$1" = "empty" ]; then + run_mysql empty else e="mysql $@" && run_exec mariadb "$e" fi diff --git a/resources/assets/js/components/DrawerOverlay/index.vue b/resources/assets/js/components/DrawerOverlay/index.vue index 15ec60f75..825aecda2 100644 --- a/resources/assets/js/components/DrawerOverlay/index.vue +++ b/resources/assets/js/components/DrawerOverlay/index.vue @@ -78,7 +78,7 @@ export default { this.value !== v && this.$emit("input", v) }, windowWidth(val){ - this.isFullscreen = val < 500 + this.isFullscreen = val < 500 && this.placement != 'bottom' } }, computed: { @@ -98,7 +98,7 @@ export default { } }, mounted() { - this.isFullscreen = this.windowWidth < 515 + this.isFullscreen = this.windowWidth < 500 && this.placement != 'bottom' }, methods: { onClose() { diff --git a/resources/assets/js/components/Minder.vue b/resources/assets/js/components/Minder.vue index 276132a59..97db83e09 100644 --- a/resources/assets/js/components/Minder.vue +++ b/resources/assets/js/components/Minder.vue @@ -205,7 +205,7 @@ components: {IFrame}, props: { value: { - type: Object, + type: undefined, default: function () { return {} } diff --git a/resources/assets/js/pages/manage/messenger.vue b/resources/assets/js/pages/manage/messenger.vue index a89cf0abe..c9a8b1434 100644 --- a/resources/assets/js/pages/manage/messenger.vue +++ b/resources/assets/js/pages/manage/messenger.vue @@ -545,7 +545,7 @@ export default { methods: { listTouch() { - if (this.$refs.navMenu.visible) { + if (this.$refs.navMenu?.visible) { this.$refs.navMenu.hide() } }, From 3a2c40a43e023a2b8d9e05e732e969eefd9527d7 Mon Sep 17 00:00:00 2001 From: weifashi <605403358@qq.com> Date: Tue, 29 Aug 2023 17:09:32 +0800 Subject: [PATCH 74/80] =?UTF-8?q?feat=EF=BC=9A=E4=BC=9A=E8=AE=AE=E5=8F=AF?= =?UTF-8?q?=E5=88=86=E4=BA=AB=20-=2060%?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/UsersController.php | 18 +++++--- app/Http/Controllers/IndexController.php | 12 ++++++ .../manage/components/MeetingManager.vue | 43 +++++++++++++++---- .../pages/manage/components/MeetingPlayer.vue | 8 +++- resources/assets/js/pages/meeting.vue | 23 ++++++++++ resources/assets/js/routes.js | 5 +++ resources/assets/js/store/actions.js | 6 ++- 7 files changed, 95 insertions(+), 20 deletions(-) create mode 100644 resources/assets/js/pages/meeting.vue diff --git a/app/Http/Controllers/Api/UsersController.php b/app/Http/Controllers/Api/UsersController.php index d6a4d7e96..b3854a43f 100755 --- a/app/Http/Controllers/Api/UsersController.php +++ b/app/Http/Controllers/Api/UsersController.php @@ -1120,6 +1120,8 @@ class UsersController extends AbstractController * - join: 加入会议,有效参数:meetingid (必填) * @apiParam {String} [meetingid] 频道ID(不是数字) * @apiParam {String} [name] 会话ID + * @apiParam {String} [meetingsign] 签名 + * @apiParam {String} [username] 用户名称 * @apiParam {Array} [userids] 邀请成员 * * @apiSuccess {Number} ret 返回状态码(1正确、0错误) @@ -1128,13 +1130,15 @@ class UsersController extends AbstractController */ public function meeting__open() { - $user = User::auth(); - // $type = trim(Request::input('type')); $meetingid = trim(Request::input('meetingid')); $name = trim(Request::input('name')); $userids = Request::input('userids'); + $meetingsign = trim(Request::input('meetingsign')); + $username = trim(Request::input('username')); + $user = empty($meetingsign) ? User::auth() : null; $isCreate = false; + // 创建、加入 if ($type === 'join') { $meeting = Meeting::whereMeetingid($meetingid)->first(); @@ -1143,13 +1147,13 @@ class UsersController extends AbstractController } } elseif ($type === 'create') { $meetingid = strtoupper(Base::generatePassword(11, 1)); - $name = $name ?: "{$user->nickname} 发起的会议"; + $name = $name ?: "{$user?->nickname} 发起的会议"; $channel = "DooTask:" . substr(md5($meetingid . env("APP_KEY")), 16); $meeting = Meeting::createInstance([ 'meetingid' => $meetingid, 'name' => $name, 'channel' => $channel, - 'userid' => $user->userid + 'userid' => $user?->userid ]); $meeting->save(); $isCreate = true; @@ -1165,7 +1169,7 @@ class UsersController extends AbstractController if (empty($meetingSetting['appid']) || empty($meetingSetting['app_certificate'])) { return Base::retError('会议功能配置错误,请联系管理员'); } - $uid = intval(str_pad( Request::header('fd'), 6, 9, STR_PAD_LEFT) . $user->userid); + $uid = intval(str_pad( Request::header('fd'), 6, 9, STR_PAD_LEFT) . $user?->userid); try { $service = new AgoraTokenGenerator($meetingSetting['appid'], $meetingSetting['app_certificate'], $meeting->channel, $uid); } catch (\Exception $e) { @@ -1194,8 +1198,8 @@ class UsersController extends AbstractController // $data['appid'] = $meetingSetting['appid']; $data['uid'] = $uid; - $data['userimg'] = $user->userimg; - $data['nickname'] = $user->nickname; + $data['userimg'] = $meetingsign ? 'https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png' : $user?->userimg; + $data['nickname'] = $meetingsign ? $username : $user?->nickname; $data['token'] = $token; $data['msgs'] = $msgs; return Base::retSuccess('success', $data); diff --git a/app/Http/Controllers/IndexController.php b/app/Http/Controllers/IndexController.php index b2a19105c..e06e2c938 100755 --- a/app/Http/Controllers/IndexController.php +++ b/app/Http/Controllers/IndexController.php @@ -438,4 +438,16 @@ class IndexController extends InvokeController } return implode("\n", array_values($array)); } + + /** + * 提取所有中文 + * @return array|string + */ + public function meeting__share() + { + return response()->view('meeting.share', [ + 'version' => Base::getVersion(), + ])->header('Link', "<" . url('manifest.txt') . ">; rel=\"prefetch\""); + } + } diff --git a/resources/assets/js/pages/manage/components/MeetingManager.vue b/resources/assets/js/pages/manage/components/MeetingManager.vue index c5e76bb6d..aeb43c941 100644 --- a/resources/assets/js/pages/manage/components/MeetingManager.vue +++ b/resources/assets/js/pages/manage/components/MeetingManager.vue @@ -4,13 +4,17 @@ + :mask-closable="false" + :closable="!addData.meetingsign">