考试和问卷弹窗
This commit is contained in:
5
.env.development
Normal file
5
.env.development
Normal file
@ -0,0 +1,5 @@
|
||||
# 开发环境配置
|
||||
VUE_APP_ENV = 'development'
|
||||
|
||||
# 若依管理系统/开发环境
|
||||
VUE_APP_BASE_API = 'http://118.195.192.58:1618'
|
5
.env.production
Normal file
5
.env.production
Normal file
@ -0,0 +1,5 @@
|
||||
# 开发环境配置
|
||||
VUE_APP_ENV = 'development'
|
||||
|
||||
# 若依管理系统/开发环境
|
||||
VUE_APP_BASE_API = 'http://120.26.107.74:1618'
|
@ -8,7 +8,15 @@
|
||||
"lint": "vue-cli-service lint"
|
||||
},
|
||||
"dependencies": {
|
||||
"@wangeditor/editor": "^5.0.1",
|
||||
"@wangeditor/editor-for-vue": "^5.1.10",
|
||||
"@zoomus/websdk": "^2.3.5",
|
||||
"axios": "^0.26.1",
|
||||
"coi-serviceworker": "^0.1.6",
|
||||
"core-js": "^3.8.3",
|
||||
"dayjs": "^1.11.1",
|
||||
"element-plus": "^2.1.9",
|
||||
"lodash": "^4.17.21",
|
||||
"vue": "^3.2.13",
|
||||
"vue-router": "^4.0.3",
|
||||
"vuex": "^4.0.0"
|
||||
|
93
public/coi-serviceworker.js
Normal file
93
public/coi-serviceworker.js
Normal file
@ -0,0 +1,93 @@
|
||||
/*! coi-serviceworker v0.1.6 - Guido Zuidhof, licensed under MIT */
|
||||
if (typeof window === 'undefined') {
|
||||
self.addEventListener("install", () => self.skipWaiting());
|
||||
self.addEventListener("activate", (event) => event.waitUntil(self.clients.claim()));
|
||||
|
||||
self.addEventListener("message", (ev) => {
|
||||
if (ev.data && ev.data.type === "deregister") {
|
||||
self.registration
|
||||
.unregister()
|
||||
.then(() => {
|
||||
return self.clients.matchAll();
|
||||
})
|
||||
.then(clients => {
|
||||
clients.forEach((client) => client.navigate(client.url));
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
self.addEventListener("fetch", function (event) {
|
||||
if (event.request.cache === "only-if-cached" && event.request.mode !== "same-origin") {
|
||||
return;
|
||||
}
|
||||
|
||||
event.respondWith(
|
||||
fetch(event.request)
|
||||
.then((response) => {
|
||||
if (response.status === 0) {
|
||||
return response;
|
||||
}
|
||||
|
||||
const newHeaders = new Headers(response.headers);
|
||||
newHeaders.set("Cross-Origin-Embedder-Policy", "require-corp");
|
||||
newHeaders.set("Cross-Origin-Opener-Policy", "same-origin");
|
||||
|
||||
return new Response(response.body, {
|
||||
status: response.status,
|
||||
statusText: response.statusText,
|
||||
headers: newHeaders,
|
||||
});
|
||||
})
|
||||
.catch((e) => console.error(e))
|
||||
);
|
||||
});
|
||||
|
||||
} else {
|
||||
(() => {
|
||||
// You can customize the behavior of this script through a global `coi` variable.
|
||||
const coi = {
|
||||
shouldRegister: () => true,
|
||||
shouldDeregister: () => false,
|
||||
doReload: () => window.location.reload(),
|
||||
quiet: false,
|
||||
...window.coi
|
||||
}
|
||||
|
||||
const n = navigator;
|
||||
if (coi.shouldDeregister() && n.serviceWorker && n.serviceWorker.controller) {
|
||||
n.serviceWorker.controller.postMessage({ type: "deregister" });
|
||||
}
|
||||
|
||||
// If we're already coi: do nothing. Perhaps it's due to this script doing its job, or COOP/COEP are
|
||||
// already set from the origin server. Also if the browser has no notion of crossOriginIsolated, just give up here.
|
||||
if (window.crossOriginIsolated !== false || !coi.shouldRegister()) return;
|
||||
|
||||
if (!window.isSecureContext) {
|
||||
!coi.quiet && console.log("COOP/COEP Service Worker not registered, a secure context is required.");
|
||||
return;
|
||||
}
|
||||
|
||||
// In some environments (e.g. Chrome incognito mode) this won't be available
|
||||
if (n.serviceWorker) {
|
||||
n.serviceWorker.register(window.document.currentScript.src).then(
|
||||
(registration) => {
|
||||
!coi.quiet & console.log("COOP/COEP Service Worker registered", registration.scope);
|
||||
|
||||
registration.addEventListener("updatefound", () => {
|
||||
!coi.quiet && console.log("Reloading page to make use of updated COOP/COEP Service Worker.");
|
||||
coi.doReload()
|
||||
});
|
||||
|
||||
// If the registration is active, but it's not controlling the page
|
||||
if (registration.active && !n.serviceWorker.controller) {
|
||||
!coi.quiet && console.log("Reloading page to make use of COOP/COEP Service Worker.");
|
||||
coi.doReload()
|
||||
}
|
||||
},
|
||||
(err) => {
|
||||
!coi.quiet && console.error("COOP/COEP Service Worker failed to register:", err);
|
||||
}
|
||||
);
|
||||
}
|
||||
})();
|
||||
}
|
@ -5,6 +5,8 @@
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
|
||||
<!-- <meta http-equiv="origin-trial" content="AuKHz2ifylDpZfg7iawfCDGtilbLT+tg9CCbVG4PNSxRA1v2NtYGRKAKctmE4Us42+t1lZ3IkPO9s5/VlHy/rwIAAABgeyJvcmlnaW4iOiJodHRwOi8vbG9jYWxob3N0OjMwMDAiLCJmZWF0dXJlIjoiVW5yZXN0cmljdGVkU2hhcmVkQXJyYXlCdWZmZXIiLCJleHBpcnkiOjE2NTg4Nzk5OTl9" /> -->
|
||||
<script src="/coi-serviceworker.js"></script>
|
||||
<title><%= htmlWebpackPlugin.options.title %></title>
|
||||
</head>
|
||||
<body>
|
||||
|
32
src/App.vue
32
src/App.vue
@ -1,30 +1,14 @@
|
||||
<template>
|
||||
<nav>
|
||||
<router-link to="/">Home</router-link> |
|
||||
<router-link to="/about">About</router-link>
|
||||
</nav>
|
||||
<router-view />
|
||||
</template>
|
||||
|
||||
<style lang="scss">
|
||||
#app {
|
||||
font-family: Avenir, Helvetica, Arial, sans-serif;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
text-align: center;
|
||||
color: #2c3e50;
|
||||
}
|
||||
|
||||
nav {
|
||||
padding: 30px;
|
||||
|
||||
a {
|
||||
font-weight: bold;
|
||||
color: #2c3e50;
|
||||
|
||||
&.router-link-exact-active {
|
||||
color: #42b983;
|
||||
}
|
||||
}
|
||||
<script setup></script>
|
||||
<style>
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
/* .el-message {
|
||||
width: 80%;
|
||||
} */
|
||||
</style>
|
||||
|
77
src/api/meeting.js
Normal file
77
src/api/meeting.js
Normal file
@ -0,0 +1,77 @@
|
||||
import request from "@/utils/request";
|
||||
|
||||
// 根据id获取会议详情
|
||||
export function getMeetingDetailById(id) {
|
||||
return request({
|
||||
url: `/app/meeting/${id}`,
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
// 添加预约
|
||||
export function newAppointment(data) {
|
||||
return request({
|
||||
url: `/app/appointment`,
|
||||
method: "post",
|
||||
data,
|
||||
});
|
||||
}
|
||||
|
||||
// 白名单参会
|
||||
export function whitelistJoinMeeting(params) {
|
||||
return request({
|
||||
url: `/app/whitelistJoinMeeting`,
|
||||
method: "post",
|
||||
params,
|
||||
});
|
||||
}
|
||||
|
||||
// 登记参会
|
||||
export function registerJoinUser(data) {
|
||||
return request({
|
||||
url: `/app/registerJoinUser`,
|
||||
method: "post",
|
||||
data,
|
||||
});
|
||||
}
|
||||
|
||||
// /app/visitorJoinUser
|
||||
// 游客参会
|
||||
export function visitorJoinUser(params) {
|
||||
return request({
|
||||
url: `/app/visitorJoinUser`,
|
||||
method: "post",
|
||||
params,
|
||||
});
|
||||
}
|
||||
|
||||
// 会议中签到
|
||||
export function signMeeting(data) {
|
||||
return request({
|
||||
url: `/app/signMeeting`,
|
||||
method: "post",
|
||||
data,
|
||||
});
|
||||
}
|
||||
// /app/meeting
|
||||
export function getQuestionsList(params) {
|
||||
return request({
|
||||
url: `/app/meeting`,
|
||||
method: "get",
|
||||
params,
|
||||
});
|
||||
}
|
||||
|
||||
export function commitExam(data) {
|
||||
return request({
|
||||
url: `/app/commitExam`,
|
||||
method: "post",
|
||||
data,
|
||||
});
|
||||
}
|
||||
export function commitQuestionnaire(data) {
|
||||
return request({
|
||||
url: `/app/commitQuestionnaire`,
|
||||
method: "post",
|
||||
data,
|
||||
});
|
||||
}
|
BIN
src/assets/20220415163934.png
Normal file
BIN
src/assets/20220415163934.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.7 MiB |
@ -1,130 +0,0 @@
|
||||
<template>
|
||||
<div class="hello">
|
||||
<h1>{{ msg }}</h1>
|
||||
<p>
|
||||
For a guide and recipes on how to configure / customize this project,<br />
|
||||
check out the
|
||||
<a href="https://cli.vuejs.org" target="_blank" rel="noopener"
|
||||
>vue-cli documentation</a
|
||||
>.
|
||||
</p>
|
||||
<h3>Installed CLI Plugins</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<a
|
||||
href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel"
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
>babel</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-router"
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
>router</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-vuex"
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
>vuex</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint"
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
>eslint</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Essential Links</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="https://vuejs.org" target="_blank" rel="noopener">Core Docs</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://forum.vuejs.org" target="_blank" rel="noopener"
|
||||
>Forum</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://chat.vuejs.org" target="_blank" rel="noopener"
|
||||
>Community Chat</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://twitter.com/vuejs" target="_blank" rel="noopener"
|
||||
>Twitter</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://news.vuejs.org" target="_blank" rel="noopener">News</a>
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Ecosystem</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="https://router.vuejs.org" target="_blank" rel="noopener"
|
||||
>vue-router</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://vuex.vuejs.org" target="_blank" rel="noopener">vuex</a>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href="https://github.com/vuejs/vue-devtools#vue-devtools"
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
>vue-devtools</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://vue-loader.vuejs.org" target="_blank" rel="noopener"
|
||||
>vue-loader</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href="https://github.com/vuejs/awesome-vue"
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
>awesome-vue</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "HelloWorld",
|
||||
props: {
|
||||
msg: String,
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<!-- Add "scoped" attribute to limit CSS to this component only -->
|
||||
<style scoped lang="scss">
|
||||
h3 {
|
||||
margin: 40px 0 0;
|
||||
}
|
||||
ul {
|
||||
list-style-type: none;
|
||||
padding: 0;
|
||||
}
|
||||
li {
|
||||
display: inline-block;
|
||||
margin: 0 10px;
|
||||
}
|
||||
a {
|
||||
color: #42b983;
|
||||
}
|
||||
</style>
|
82
src/components/messageList.vue
Normal file
82
src/components/messageList.vue
Normal file
@ -0,0 +1,82 @@
|
||||
<template>
|
||||
<div class="message-list">
|
||||
<div
|
||||
v-for="item in messageList"
|
||||
:key="item.id"
|
||||
class="message-row"
|
||||
:style="item.isMe ? `flex-direction: row-reverse;` : ''"
|
||||
>
|
||||
<div class="avatar">
|
||||
{{ item.account[0] }}
|
||||
</div>
|
||||
|
||||
<div class="message-item">
|
||||
<div class="sender" :style="item.isMe ? `text-align: right;` : ''">
|
||||
{{ item.account }}
|
||||
</div>
|
||||
<div
|
||||
class="text"
|
||||
:style="item.isMe ? `background-color: #89d961;` : ``"
|
||||
v-html="item.msg"
|
||||
></div>
|
||||
<div class="time">{{ item.time }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script setup name="messageList">
|
||||
import { toRefs } from "vue";
|
||||
|
||||
const props = defineProps({
|
||||
messageList: {
|
||||
type: Array,
|
||||
default: [],
|
||||
},
|
||||
});
|
||||
const { messageList } = toRefs(props);
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.message-list {
|
||||
background-color: #f5f5f5;
|
||||
padding: 20px;
|
||||
min-height: 100px;
|
||||
margin-bottom: 20px;
|
||||
border-radius: 12px;
|
||||
}
|
||||
.message-row {
|
||||
display: flex;
|
||||
margin-bottom: 10px;
|
||||
align-items: center;
|
||||
.avatar {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
background-color: #bcbcbc;
|
||||
border-radius: 50%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
// align-items: center;
|
||||
font-weight: 700;
|
||||
font-size: 24px;
|
||||
}
|
||||
.message-item {
|
||||
margin: 0 16px 0;
|
||||
.sender {
|
||||
font-size: 12px;
|
||||
color: #333;
|
||||
}
|
||||
.text {
|
||||
margin: 3px 0 3px;
|
||||
padding: 10px;
|
||||
background-color: #fff;
|
||||
border-radius: 10px;
|
||||
font-size: 16px;
|
||||
}
|
||||
.time {
|
||||
font-size: 12px;
|
||||
text-align: right;
|
||||
color: #333;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
173
src/components/questions.vue
Normal file
173
src/components/questions.vue
Normal file
@ -0,0 +1,173 @@
|
||||
<template>
|
||||
<el-dialog
|
||||
v-model="showDialog"
|
||||
:close-on-click-modal="false"
|
||||
:title="mode == `1` ? `考试` : `问卷`"
|
||||
width="80%"
|
||||
@close="closeDialog"
|
||||
>
|
||||
<div class="questions-list">
|
||||
<el-form :model="form" ref="questionsRef">
|
||||
<el-form-item
|
||||
v-for="(item, index) in form.questionsList"
|
||||
:key="item.id"
|
||||
:prop="
|
||||
item.type === `1`
|
||||
? `questionsList.${index}.choiceAnswerIdStr[0]`
|
||||
: `questionsList.${index}.choiceAnswerIdStr`
|
||||
"
|
||||
:rules="[
|
||||
{
|
||||
required: true,
|
||||
message: '必填',
|
||||
trigger: 'change',
|
||||
},
|
||||
]"
|
||||
>
|
||||
<div class="question-title">{{ item.question }}</div>
|
||||
<el-radio-group
|
||||
v-if="item.type === `1`"
|
||||
v-model="item.choiceAnswerIdStr[0]"
|
||||
>
|
||||
<el-radio
|
||||
v-for="el in item.questionChoiceList"
|
||||
:key="el.id"
|
||||
:label="el.id"
|
||||
>
|
||||
<textToolTip
|
||||
:content="el.choiceContent"
|
||||
refName="tooltipOver"
|
||||
></textToolTip>
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
|
||||
<el-checkbox-group v-else v-model="item.choiceAnswerIdStr">
|
||||
<el-checkbox
|
||||
v-for="el in item.questionChoiceList"
|
||||
:key="el.id"
|
||||
:label="el.id"
|
||||
><textToolTip
|
||||
:content="el.choiceContent"
|
||||
refName="tooltipOver"
|
||||
></textToolTip
|
||||
></el-checkbox>
|
||||
</el-checkbox-group>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
|
||||
<span class="dialog-footer">
|
||||
<el-button type="primary" @click="submit(questionsRef)">确定</el-button>
|
||||
<el-button type="primary" @click="closeDialog">取消</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { toRefs, ref } from "vue";
|
||||
|
||||
import { ElMessage } from "element-plus";
|
||||
import {
|
||||
getQuestionsList,
|
||||
commitQuestionnaire,
|
||||
commitExam,
|
||||
} from "@/api/meeting";
|
||||
import textToolTip from "@/components/textToolTip";
|
||||
import { useStore } from "vuex";
|
||||
const store = useStore();
|
||||
const props = defineProps({
|
||||
showDialog: {
|
||||
type: Boolean,
|
||||
required: true,
|
||||
default: false,
|
||||
},
|
||||
mode: {
|
||||
type: [String, Number],
|
||||
required: true,
|
||||
},
|
||||
});
|
||||
|
||||
const { showDialog, mode } = toRefs(props);
|
||||
const emit = defineEmits(["close"]);
|
||||
const joinAccount = ref("");
|
||||
joinAccount.value =
|
||||
store.getters.nickname || store.getters.phone || store.getters.icCard;
|
||||
|
||||
// 加载问题列表
|
||||
const form = ref({
|
||||
questionsList: [],
|
||||
});
|
||||
|
||||
const loadQuestionsList = async () => {
|
||||
const { data } = await getQuestionsList({
|
||||
meetingId: store.getters.meetingId,
|
||||
type: mode.value,
|
||||
});
|
||||
form.value.questionsList = data.map((item) => {
|
||||
return {
|
||||
...item,
|
||||
choiceAnswerIdStr: [],
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
const questionsRef = ref(null);
|
||||
const submit = async (questionsRef) => {
|
||||
console.log(questionsRef);
|
||||
await questionsRef.validate();
|
||||
if (mode.value == "1") {
|
||||
await commitExam({
|
||||
meetingId: store.getters.meetingId,
|
||||
userAccount: joinAccount.value,
|
||||
commitExamList: form.value.questionsList.map((item) => {
|
||||
return {
|
||||
questionId: item.id,
|
||||
choiceAnswerIdStr: item.choiceAnswerIdStr.join(","),
|
||||
};
|
||||
}),
|
||||
});
|
||||
ElMessage.success("提交考试成功");
|
||||
} else if (mode.value == "2") {
|
||||
await commitQuestionnaire({
|
||||
meetingId: store.getters.meetingId,
|
||||
userAccount: joinAccount.value,
|
||||
commitExamList: form.value.questionsList.map((item) => {
|
||||
return {
|
||||
questionId: item.id,
|
||||
choiceAnswerIdStr: item.choiceAnswerIdStr.join(",") + ",",
|
||||
};
|
||||
}),
|
||||
});
|
||||
ElMessage.success("提交问卷成功");
|
||||
}
|
||||
closeDialog();
|
||||
};
|
||||
loadQuestionsList();
|
||||
const closeDialog = () => {
|
||||
emit("close", false);
|
||||
};
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
.questions-list {
|
||||
.question-title {
|
||||
width: 100%;
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
}
|
||||
:deep(.el-checkbox-group) {
|
||||
width: 100%;
|
||||
.el-checkbox {
|
||||
width: 20%;
|
||||
.el-checkbox__label {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
:deep(.el-radio-group) {
|
||||
width: 100%;
|
||||
.el-radio {
|
||||
width: 20%;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
75
src/components/textToolTip.vue
Normal file
75
src/components/textToolTip.vue
Normal file
@ -0,0 +1,75 @@
|
||||
<template>
|
||||
<div class="text-tooltip">
|
||||
<el-tooltip
|
||||
class="item"
|
||||
effect="dark"
|
||||
:disabled="isShowTooltip"
|
||||
:content="content"
|
||||
placement="top"
|
||||
>
|
||||
<p class="over-flow" :class="className" @mouseover="onMouseOver(refName)">
|
||||
<span :ref="refName">{{ content || '-' }}</span>
|
||||
</p>
|
||||
</el-tooltip>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'textTooltip',
|
||||
props: {
|
||||
// 显示的文字内容
|
||||
content: {
|
||||
type: String,
|
||||
default: () => {
|
||||
return ''
|
||||
}
|
||||
},
|
||||
// 外层框的样式,在传入的这个类名中设置文字显示的宽度
|
||||
className: {
|
||||
type: String,
|
||||
default: () => {
|
||||
return ''
|
||||
}
|
||||
},
|
||||
// 为页面文字标识(如在同一页面中调用多次组件,此参数不可重复)
|
||||
refName: {
|
||||
type: String,
|
||||
default: () => {
|
||||
return ''
|
||||
}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
isShowTooltip: true
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
onMouseOver(str) {
|
||||
let parentWidth = this.$refs[str].parentNode.offsetWidth;
|
||||
let contentWidth = this.$refs[str].offsetWidth;
|
||||
// 判断是否开启tooltip功能
|
||||
if (contentWidth > parentWidth) {
|
||||
this.isShowTooltip = false;
|
||||
} else {
|
||||
this.isShowTooltip = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.over-flow {
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
.wid190 {
|
||||
width: 100%;
|
||||
}
|
||||
p {
|
||||
margin: 0;
|
||||
}
|
||||
</style>
|
109
src/components/wangEditor/index.vue
Normal file
109
src/components/wangEditor/index.vue
Normal file
@ -0,0 +1,109 @@
|
||||
<template>
|
||||
<div :style="`border: 1px solid #ccc; width: ${width}`">
|
||||
<Toolbar
|
||||
style="border-bottom: 1px solid #ccc"
|
||||
:editor="editorRef"
|
||||
:defaultConfig="toolbarConfig"
|
||||
:mode="mode"
|
||||
/>
|
||||
<Editor
|
||||
:style="`min-height: ${height}; overflow-y: hidden`"
|
||||
v-model="valueHtml"
|
||||
:defaultConfig="editorConfig"
|
||||
:mode="mode"
|
||||
@onCreated="handleCreated"
|
||||
@onChange="handleChange"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import "@wangeditor/editor/dist/css/style.css"; // 引入 css
|
||||
// import { getToken } from "@/utils/auth";
|
||||
import { onBeforeUnmount, ref, shallowRef, toRefs, watch } from "vue";
|
||||
|
||||
import { Editor, Toolbar } from "@wangeditor/editor-for-vue";
|
||||
|
||||
export default {
|
||||
components: { Editor, Toolbar },
|
||||
props: {
|
||||
modelValue: {
|
||||
type: String,
|
||||
default: "",
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: "300px",
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: "820px",
|
||||
},
|
||||
},
|
||||
setup(props, context) {
|
||||
// 编辑器实例,必须用 shallowRef
|
||||
const editorRef = shallowRef();
|
||||
// console.log(editorRef.value.getAllMenuKeys());
|
||||
// 内容 HTML
|
||||
const valueHtml = ref("");
|
||||
watch(
|
||||
() => props.modelValue,
|
||||
(val) => {
|
||||
valueHtml.value = val;
|
||||
}
|
||||
);
|
||||
const { height } = toRefs(props);
|
||||
const toolbarConfig = {
|
||||
toolbarKeys: [
|
||||
"bold",
|
||||
"underline",
|
||||
"italic",
|
||||
"through",
|
||||
"color",
|
||||
"bgColor",
|
||||
"fontSize",
|
||||
"fontFamily",
|
||||
"lineHeight",
|
||||
"emotion",
|
||||
"redo",
|
||||
"undo",
|
||||
],
|
||||
|
||||
// excludeKeys: ["insertVideo", "uploadVideo"],
|
||||
};
|
||||
const editorConfig = {
|
||||
placeholder: "请输入内容...",
|
||||
};
|
||||
|
||||
// console.log(editor.getMenuConfig('uploadImage'));
|
||||
// 组件销毁时,也及时销毁编辑器
|
||||
onBeforeUnmount(() => {
|
||||
const editor = editorRef.value;
|
||||
if (editor == null) return;
|
||||
editor.destroy();
|
||||
});
|
||||
|
||||
const handleCreated = (editor) => {
|
||||
editorRef.value = editor; // 记录 editor 实例,重要!
|
||||
};
|
||||
const handleChange = (editor) => {
|
||||
// console.log(editor.getAllMenuKeys());
|
||||
if (editor.getHtml() === "<p><br></p>") {
|
||||
context.emit("update:modelValue", "");
|
||||
} else {
|
||||
context.emit("update:modelValue", editor.getHtml());
|
||||
}
|
||||
};
|
||||
return {
|
||||
editorRef,
|
||||
valueHtml,
|
||||
mode: "default", // 或 'simple'
|
||||
toolbarConfig,
|
||||
editorConfig,
|
||||
height,
|
||||
handleCreated,
|
||||
handleChange,
|
||||
};
|
||||
},
|
||||
};
|
||||
</script>
|
15
src/main.js
15
src/main.js
@ -1,6 +1,15 @@
|
||||
import { createApp } from "vue";
|
||||
import App from "./App.vue";
|
||||
import router from "./router";
|
||||
import store from "./store";
|
||||
|
||||
createApp(App).use(store).use(router).mount("#app");
|
||||
import ElementPlus from "element-plus";
|
||||
import locale from "element-plus/lib/locale/lang/zh-cn"; // 中文语言
|
||||
import "element-plus/dist/index.css";
|
||||
import router from "@/router";
|
||||
import store from "@/store";
|
||||
createApp(App)
|
||||
.use(router)
|
||||
.use(store)
|
||||
.use(ElementPlus, {
|
||||
locale: locale,
|
||||
})
|
||||
.mount("#app");
|
||||
|
@ -1,26 +1,67 @@
|
||||
import { createRouter, createWebHistory } from "vue-router";
|
||||
import HomeView from "../views/HomeView.vue";
|
||||
|
||||
const routes = [
|
||||
{
|
||||
path: "/",
|
||||
name: "home",
|
||||
component: HomeView,
|
||||
},
|
||||
{
|
||||
path: "/about",
|
||||
name: "about",
|
||||
// route level code-splitting
|
||||
// this generates a separate chunk (about.[hash].js) for this route
|
||||
// which is lazy-loaded when the route is visited.
|
||||
component: () =>
|
||||
import(/* webpackChunkName: "about" */ "../views/AboutView.vue"),
|
||||
},
|
||||
];
|
||||
import { createWebHistory, createRouter } from "vue-router";
|
||||
import store from "@/store";
|
||||
import { whitelistJoinMeeting } from "@/api/meeting";
|
||||
|
||||
const router = createRouter({
|
||||
history: createWebHistory(process.env.BASE_URL),
|
||||
routes,
|
||||
history: createWebHistory(),
|
||||
routes: [
|
||||
{
|
||||
path: "/appointment/:meetingId",
|
||||
name: "Appointment",
|
||||
component: () => import("@/views/appointment.vue"),
|
||||
},
|
||||
{
|
||||
path: "/verify/:meetingId",
|
||||
name: "Verify",
|
||||
component: () => import("@/views/verify.vue"),
|
||||
},
|
||||
{
|
||||
path: "/meeting/:meetingId",
|
||||
name: "Meeting",
|
||||
component: () => import("@/views/meeting.vue"),
|
||||
},
|
||||
{
|
||||
path: "/:pathMatch(.*)*",
|
||||
name: "NotFound",
|
||||
component: () => import("@/views/NotFound.vue"),
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
router.beforeEach(async (to) => {
|
||||
// 判断会议信息是否存在,不存在则请求数据
|
||||
if (!store.state.meeting.id && to.params.meetingId) {
|
||||
await store.dispatch("getMeetingInfo", to.params.meetingId);
|
||||
}
|
||||
// 如果要前往参会页面
|
||||
if (to.name === "Meeting") {
|
||||
// 如果是白名单模式
|
||||
if (store.state.meeting.joinType === "1") {
|
||||
if (store.state.joinUser.icCard) {
|
||||
// 检测输入的IC卡号是否在白名单范围内,是则放行,否则返回原地址
|
||||
try {
|
||||
const { data } = await whitelistJoinMeeting({
|
||||
meetingId: to.params.meetingId,
|
||||
icCard: store.state.joinUser.icCard,
|
||||
});
|
||||
store.commit("setPassword", data);
|
||||
return true;
|
||||
} catch (error) {
|
||||
store.commit("setJoinUser", {});
|
||||
return `/verify/${to.params.meetingId}`;
|
||||
}
|
||||
} else {
|
||||
store.commit("setJoinUser", {});
|
||||
return `/verify/${to.params.meetingId}`;
|
||||
}
|
||||
} else {
|
||||
if (!store.state.password) {
|
||||
return `/verify/${to.params.meetingId}`;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
export default router;
|
||||
|
@ -1,9 +1,52 @@
|
||||
import { createStore } from "vuex";
|
||||
import { getMeetingDetailById } from "@/api/meeting";
|
||||
|
||||
export default createStore({
|
||||
state: {},
|
||||
getters: {},
|
||||
mutations: {},
|
||||
actions: {},
|
||||
modules: {},
|
||||
const store = createStore({
|
||||
state: {
|
||||
joinUser: localStorage.getItem("JOIN_USER")
|
||||
? JSON.parse(localStorage.getItem("JOIN_USER"))
|
||||
: {},
|
||||
meeting: {},
|
||||
password: "", //参会密码
|
||||
},
|
||||
mutations: {
|
||||
// 设置参会人员信息
|
||||
setJoinUser(state, data) {
|
||||
state.joinUser = data;
|
||||
localStorage.setItem("JOIN_USER", JSON.stringify(data));
|
||||
},
|
||||
// 设置会议信息
|
||||
setMeetingInfo(state, data) {
|
||||
state.meeting = data;
|
||||
},
|
||||
|
||||
// 设置参会密码
|
||||
setPassword(state, data) {
|
||||
state.password = data;
|
||||
},
|
||||
},
|
||||
actions: {
|
||||
// 请求会议信息
|
||||
async getMeetingInfo(context, meetingId) {
|
||||
const { data } = await getMeetingDetailById(meetingId);
|
||||
context.commit("setMeetingInfo", data);
|
||||
},
|
||||
},
|
||||
getters: {
|
||||
nickname: (state) => state.joinUser.nickname, // 姓名
|
||||
icCard: (state) => state.joinUser.icCard, // 姓名
|
||||
meetingPic: (state) => state.meeting.meetingPic, // 会议封面
|
||||
templateBackgroundPic: (state) => state.meeting.templateBackgroundPic, // 会议封面
|
||||
meetingNote: (state) => state.meeting.meetingNote, // 会议信息
|
||||
meetingSchedule: (state) => state.meeting.meetingSchedule, // 会议日程
|
||||
expertInfo: (state) => state.meeting.expertInfo, // 专家介绍
|
||||
meetingNumber: (state) => state.meeting.meetingNumber, // 姓名
|
||||
templateId: (state) => state.meeting.templateId,
|
||||
meetingId: (state) => state.meeting.id,
|
||||
textLabelList: (state) => state.meeting.textLabelList,
|
||||
questionnaireId: (state) => state.meeting.questionnaireId,
|
||||
bankId: (state) => state.meeting.bankId,
|
||||
},
|
||||
});
|
||||
|
||||
export default store;
|
||||
|
20
src/style/appoint-desktop.scss
Normal file
20
src/style/appoint-desktop.scss
Normal file
@ -0,0 +1,20 @@
|
||||
@media only screen and (min-width: 768px) {
|
||||
.meeting-title {
|
||||
font-size: 24px;
|
||||
}
|
||||
.meeting-time {
|
||||
font-size: 16px;
|
||||
}
|
||||
.form-container {
|
||||
padding: 0 10px 0;
|
||||
.joinuser-wrap {
|
||||
justify-content: space-between;
|
||||
.joinuser-item {
|
||||
width: 46%;
|
||||
:deep(.el-form-item__label) {
|
||||
width: 150px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
23
src/style/appoint-mobile.scss
Normal file
23
src/style/appoint-mobile.scss
Normal file
@ -0,0 +1,23 @@
|
||||
@media only screen and (max-width: 768px) {
|
||||
// body {
|
||||
// background-color: indianred;
|
||||
// }
|
||||
.meeting-title {
|
||||
font-size: 7vw;
|
||||
}
|
||||
.meeting-time {
|
||||
font-size: 5vw;
|
||||
.title {
|
||||
margin-right: 3vw;
|
||||
}
|
||||
}
|
||||
.form-container {
|
||||
padding: 0 2vw 0;
|
||||
.joinuser-item {
|
||||
width: 100%;
|
||||
:deep(.el-form-item__label) {
|
||||
width: 70px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
6
src/utils/errorCode.js
Normal file
6
src/utils/errorCode.js
Normal file
@ -0,0 +1,6 @@
|
||||
export default {
|
||||
'401': '认证失败,无法访问系统资源',
|
||||
'403': '当前操作没有权限',
|
||||
'404': '访问资源不存在',
|
||||
'default': '系统未知错误,请反馈给管理员'
|
||||
}
|
62
src/utils/request.js
Normal file
62
src/utils/request.js
Normal file
@ -0,0 +1,62 @@
|
||||
import axios from "axios";
|
||||
import { ElNotification, ElMessage } from "element-plus";
|
||||
import errorCode from "@/utils/errorCode";
|
||||
axios.defaults.headers["Content-Type"] = "application/json;charset=utf-8";
|
||||
|
||||
// 创建axios实例
|
||||
const service = axios.create({
|
||||
// axios中请求配置有baseURL选项,表示请求URL公共部分
|
||||
baseURL: process.env.VUE_APP_BASE_API,
|
||||
// 超时
|
||||
timeout: 100000,
|
||||
});
|
||||
|
||||
// 响应拦截器
|
||||
service.interceptors.response.use(
|
||||
(res) => {
|
||||
// 未设置状态码则默认成功状态
|
||||
const code = res.data.code || 200;
|
||||
// 获取错误信息
|
||||
const msg = errorCode[code] || res.data.msg || errorCode["default"];
|
||||
// 二进制数据则直接返回
|
||||
if (
|
||||
res.request.responseType === "blob" ||
|
||||
res.request.responseType === "arraybuffer"
|
||||
) {
|
||||
return res.data;
|
||||
}
|
||||
if (code === 500) {
|
||||
ElMessage({
|
||||
message: msg,
|
||||
type: "error",
|
||||
});
|
||||
return Promise.reject(new Error(msg));
|
||||
} else if (code !== 200) {
|
||||
ElNotification.error({
|
||||
title: msg,
|
||||
});
|
||||
return Promise.reject("error");
|
||||
} else {
|
||||
return Promise.resolve(res.data);
|
||||
}
|
||||
},
|
||||
(error) => {
|
||||
console.log("err" + error);
|
||||
let { message } = error;
|
||||
if (message == "Network Error") {
|
||||
message = "后端接口连接异常";
|
||||
} else if (message.includes("timeout")) {
|
||||
message = "系统接口请求超时";
|
||||
} else if (message.includes("Request failed with status code")) {
|
||||
message = "系统接口" + message.substr(message.length - 3) + "异常";
|
||||
}
|
||||
ElMessage({
|
||||
message: message,
|
||||
type: "error",
|
||||
duration: 5 * 1000,
|
||||
});
|
||||
return Promise.reject(error);
|
||||
}
|
||||
);
|
||||
|
||||
export default service;
|
@ -1,5 +0,0 @@
|
||||
<template>
|
||||
<div class="about">
|
||||
<h1>This is an about page</h1>
|
||||
</div>
|
||||
</template>
|
@ -1,18 +0,0 @@
|
||||
<template>
|
||||
<div class="home">
|
||||
<img alt="Vue logo" src="../assets/logo.png" />
|
||||
<HelloWorld msg="Welcome to Your Vue.js App" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
// @ is an alias to /src
|
||||
import HelloWorld from "@/components/HelloWorld.vue";
|
||||
|
||||
export default {
|
||||
name: "HomeView",
|
||||
components: {
|
||||
HelloWorld,
|
||||
},
|
||||
};
|
||||
</script>
|
1
src/views/NotFound.vue
Normal file
1
src/views/NotFound.vue
Normal file
@ -0,0 +1 @@
|
||||
<template>404</template>
|
463
src/views/appointment.vue
Normal file
463
src/views/appointment.vue
Normal file
@ -0,0 +1,463 @@
|
||||
<template>
|
||||
<img class="meeting-cover" :src="meeting.meetingPic" alt="" />
|
||||
<h3 class="meeting-title">{{ meeting.meetingName }}</h3>
|
||||
<p class="meeting-time">
|
||||
<span class="title">会议时间</span>
|
||||
<span class="time">{{ meeting.startTime }}</span>
|
||||
</p>
|
||||
<div class="form-container" v-if="appointStatus === `pending`">
|
||||
<el-form
|
||||
:model="appointForm"
|
||||
ref="appointRef"
|
||||
:rules="appointRules"
|
||||
label-position="left"
|
||||
>
|
||||
<div class="joinuser-wrap" style="display: flex; flex-wrap: wrap">
|
||||
<div class="joinuser-item" v-if="fieldConfig.icCard">
|
||||
<el-form-item label="IC卡号" prop="icCard">
|
||||
<el-input v-model="appointForm.icCard" placeholder="请输入IC卡号" />
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="joinuser-item" v-if="fieldConfig.nickname">
|
||||
<el-form-item label="姓名" prop="nickname">
|
||||
<el-input v-model="appointForm.nickname" placeholder="请输入姓名" />
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="joinuser-item" v-if="fieldConfig.phone">
|
||||
<el-form-item label="手机号" prop="phone">
|
||||
<el-input v-model="appointForm.phone" placeholder="请输入手机号" />
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="joinuser-item" v-if="fieldConfig.unit">
|
||||
<el-form-item label="单位" prop="unit">
|
||||
<el-input v-model="appointForm.unit" placeholder="请输入单位" />
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="joinuser-item" v-if="fieldConfig.address">
|
||||
<el-form-item label="地址" prop="address">
|
||||
<el-input
|
||||
v-model="appointForm.address"
|
||||
:rows="3"
|
||||
placeholder="请输入地址"
|
||||
/>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="joinuser-item" v-if="fieldConfig.age">
|
||||
<el-form-item label="年龄" prop="age">
|
||||
<el-input
|
||||
v-model="appointForm.age"
|
||||
:rows="3"
|
||||
placeholder="请输入年龄"
|
||||
/>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="joinuser-item" v-if="fieldConfig.department">
|
||||
<el-form-item label="部门" prop="department">
|
||||
<el-input
|
||||
v-model="appointForm.department"
|
||||
placeholder="请输入部门"
|
||||
/>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="joinuser-item" v-if="fieldConfig.email">
|
||||
<el-form-item label="邮箱" prop="email">
|
||||
<el-input v-model="appointForm.email" placeholder="请输入邮箱" />
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<div class="joinuser-item" v-if="fieldConfig.groupName">
|
||||
<el-form-item label="组名" prop="groupName">
|
||||
<el-input
|
||||
v-model="appointForm.groupName"
|
||||
placeholder="请输入组名"
|
||||
/>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="joinuser-item" v-if="fieldConfig.hospitalLevel">
|
||||
<el-form-item label="医院等级" prop="hospitalLevel">
|
||||
<el-input
|
||||
v-model="appointForm.hospitalLevel"
|
||||
placeholder="请输入医院等级"
|
||||
/>
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<div class="joinuser-item" v-if="fieldConfig.idCard">
|
||||
<el-form-item label="身份证" prop="idCard">
|
||||
<el-input v-model="appointForm.idCard" placeholder="请输入身份证" />
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="joinuser-item" v-if="fieldConfig.mailingAddress">
|
||||
<el-form-item label="邮寄地址" prop="mailingAddress">
|
||||
<el-input
|
||||
v-model="appointForm.mailingAddress"
|
||||
placeholder="请输入邮寄地址"
|
||||
/>
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<div class="joinuser-item" v-if="fieldConfig.major">
|
||||
<el-form-item label="专业" prop="major">
|
||||
<el-input v-model="appointForm.major" placeholder="请输入专业" />
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="joinuser-item" v-if="fieldConfig.qualification">
|
||||
<el-form-item label="学历" prop="qualification">
|
||||
<el-input
|
||||
v-model="appointForm.qualification"
|
||||
placeholder="请输入学历"
|
||||
/>
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<div class="joinuser-item" v-if="fieldConfig.region">
|
||||
<el-form-item label="地区" prop="region">
|
||||
<el-input v-model="appointForm.region" placeholder="请输入地区" />
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="joinuser-item" v-if="fieldConfig.technicalOffice">
|
||||
<el-form-item label="科室" prop="technicalOffice">
|
||||
<el-input
|
||||
v-model="appointForm.technicalOffice"
|
||||
placeholder="请输入科室"
|
||||
/>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="joinuser-item" v-if="fieldConfig.title">
|
||||
<el-form-item label="职称" prop="title">
|
||||
<el-input v-model="appointForm.title" placeholder="请输入职称" />
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="joinuser-item" v-if="fieldConfig.gender">
|
||||
<el-form-item label="性别" prop="gender">
|
||||
<el-radio-group v-model="appointForm.gender">
|
||||
<el-radio label="1">男</el-radio>
|
||||
<el-radio label="2">女</el-radio>
|
||||
<el-radio label="3">其他</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="joinuser-item" v-if="fieldConfig.needScoreFlag">
|
||||
<el-form-item
|
||||
label="是否需要学分"
|
||||
label-width="180"
|
||||
prop="needScoreFlag"
|
||||
>
|
||||
<el-radio-group v-model="appointForm.needScoreFlag">
|
||||
<el-radio :label="0">不需要</el-radio>
|
||||
<el-radio :label="1">需要</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<div class="joinuser-item" v-if="fieldConfig.affiliateWestFlag">
|
||||
<el-form-item label="隶属西部" prop="affiliateWestFlag">
|
||||
<el-checkbox
|
||||
v-model="appointForm.affiliateWestFlag"
|
||||
true-label="1"
|
||||
false-label="0"
|
||||
></el-checkbox>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="joinuser-item" v-if="fieldConfig.basicLevelUnitFlag">
|
||||
<el-form-item label="属于基层单位" prop="basicLevelUnitFlag">
|
||||
<el-checkbox
|
||||
v-model="appointForm.basicLevelUnitFlag"
|
||||
true-label="1"
|
||||
false-label="0"
|
||||
></el-checkbox>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="joinuser-item" v-if="fieldConfig.countryDoctorFlag">
|
||||
<el-form-item label="是否乡村医生" prop="countryDoctorFlag">
|
||||
<el-checkbox
|
||||
v-model="appointForm.countryDoctorFlag"
|
||||
true-label="1"
|
||||
false-label="0"
|
||||
></el-checkbox>
|
||||
</el-form-item>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<el-row type="flex" justify="center"> </el-row>
|
||||
</el-form>
|
||||
<div style="display: flex; justify-content: center">
|
||||
<el-button type="primary" @click="submitAppointment(appointRef)"
|
||||
>预约</el-button
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<el-row v-if="appointStatus !== `pending`" type="flex" justify="center">
|
||||
<el-col :sm="12" :lg="6">
|
||||
<el-result
|
||||
:icon="appointStatus === 'success' ? `success` : `error`"
|
||||
:title="appointStatus === 'success' ? '预约成功' : `预约失败`"
|
||||
:sub-title="appointMessage"
|
||||
>
|
||||
<!-- <template #extra>
|
||||
<el-button type="primary">返回</el-button>
|
||||
</template> -->
|
||||
</el-result>
|
||||
</el-col></el-row
|
||||
>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { reactive, ref, toRefs } from "vue";
|
||||
import { getMeetingDetailById, newAppointment } from "@/api/meeting";
|
||||
import { ElMessage } from "element-plus";
|
||||
import { useRoute } from "vue-router";
|
||||
import _ from "lodash";
|
||||
const route = useRoute();
|
||||
const data = reactive({
|
||||
appointForm: {
|
||||
status: "0",
|
||||
},
|
||||
fieldConfig: {
|
||||
icCard: true,
|
||||
},
|
||||
meeting: {},
|
||||
appointRules: {
|
||||
address: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
affiliateWestFlag: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
age: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
basicLevelUnitFlag: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
countryDoctorFlag: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
department: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
email: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
gender: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
groupName: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
hospitalLevel: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
icCard: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
idCard: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
mailingAddress: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
major: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
needScoreFlag: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
nickname: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
phone: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
{
|
||||
pattern: /^1[3-9]\d{9}$/,
|
||||
trigger: "blur",
|
||||
message: "手机号格式不正确",
|
||||
},
|
||||
],
|
||||
qualification: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
region: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
technicalOffice: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
title: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
unit: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
},
|
||||
appointStatus: "pending",
|
||||
appointMessage: "",
|
||||
});
|
||||
const {
|
||||
appointForm,
|
||||
fieldConfig,
|
||||
appointRules,
|
||||
appointStatus,
|
||||
meeting,
|
||||
appointMessage,
|
||||
} = toRefs(data);
|
||||
|
||||
const meetingId = ref(0);
|
||||
|
||||
meetingId.value = route.params.meetingId;
|
||||
|
||||
// 根据会议id获取详情
|
||||
const loadMeetingDetail = async (meetingId) => {
|
||||
const { data } = await getMeetingDetailById(meetingId);
|
||||
meeting.value = data;
|
||||
if (data.fieldConfig) {
|
||||
fieldConfig.value = JSON.parse(data.fieldConfig);
|
||||
}
|
||||
setJoinUserDefaultValue();
|
||||
};
|
||||
// 设置默认值
|
||||
const setJoinUserDefaultValue = () => {
|
||||
console.log(Object.keys(fieldConfig.value));
|
||||
[
|
||||
{ name: "gender", default: "1" },
|
||||
{ name: "basicLevelUnitFlag", default: "0" },
|
||||
{ name: "countryDoctorFlag", default: "0" },
|
||||
{ name: "affiliateWestFlag", default: "0" },
|
||||
].forEach((item) => {
|
||||
if (
|
||||
Object.keys(fieldConfig.value).includes(item.name) &&
|
||||
fieldConfig.value[item.name]
|
||||
) {
|
||||
appointForm.value[item.name] = item.default;
|
||||
} else {
|
||||
appointForm.value = _.omit(appointForm.value, item.name);
|
||||
}
|
||||
});
|
||||
appointForm.value.meetingId = meetingId.value;
|
||||
};
|
||||
|
||||
// 提交表单
|
||||
const appointRef = ref(null);
|
||||
const submitAppointment = async (appointRef) => {
|
||||
await appointRef.validate();
|
||||
try {
|
||||
const resp = await newAppointment(appointForm.value);
|
||||
appointStatus.value = "success";
|
||||
appointMessage.value = resp.msg;
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
appointStatus.value = "failed";
|
||||
appointMessage.value = error.message;
|
||||
}
|
||||
return;
|
||||
};
|
||||
|
||||
loadMeetingDetail(meetingId.value);
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import "@/style/appoint-mobile.scss";
|
||||
@import "@/style/appoint-desktop.scss";
|
||||
|
||||
.meeting-cover {
|
||||
width: 100%;
|
||||
}
|
||||
.meeting-title {
|
||||
text-align: center;
|
||||
}
|
||||
.meeting-time {
|
||||
text-align: center;
|
||||
}
|
||||
.form-item-container {
|
||||
display: flex;
|
||||
}
|
||||
</style>
|
465
src/views/meeting.vue
Normal file
465
src/views/meeting.vue
Normal file
@ -0,0 +1,465 @@
|
||||
<template>
|
||||
<div id="app-container" ref="appContainer">
|
||||
<div class="meeting-container" ref="meetingContainerRef">
|
||||
<div id="video-element"></div>
|
||||
</div>
|
||||
|
||||
<el-tabs class="tabs" type="border-card">
|
||||
<el-tab-pane label="会议介绍">
|
||||
<div class="meeting-info meeting-note" v-html="meetingNote"></div>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="会议日程"
|
||||
><div
|
||||
class="meeting-info meeting-schedule"
|
||||
v-html="meetingSchedule"
|
||||
></div
|
||||
></el-tab-pane>
|
||||
<el-tab-pane label="专家介绍"
|
||||
><div class="meeting-info expert-info" v-html="expertInfo"></div
|
||||
></el-tab-pane>
|
||||
<el-tab-pane label="聊天"
|
||||
><div class="meeting-info chat">
|
||||
<messageList :messageList="messages"></messageList>
|
||||
<div class="option-bar">
|
||||
<wangEditor
|
||||
v-model="editingMessage"
|
||||
height="100px"
|
||||
width="80%"
|
||||
></wangEditor>
|
||||
<el-button
|
||||
type="success"
|
||||
@click="sendMessage"
|
||||
:disabled="editingMessage.length === 0"
|
||||
>发送</el-button
|
||||
>
|
||||
</div>
|
||||
</div></el-tab-pane
|
||||
>
|
||||
</el-tabs>
|
||||
|
||||
<el-dialog
|
||||
v-model="showSignDialog"
|
||||
:close-on-click-modal="false"
|
||||
title="签到"
|
||||
width="30%"
|
||||
>
|
||||
<span>是否确认签到</span>
|
||||
<template #footer>
|
||||
<span class="dialog-footer">
|
||||
<el-button type="primary" @click="submitSign">确定</el-button>
|
||||
<el-button type="primary" @click="showSignDialog = false"
|
||||
>取消</el-button
|
||||
>
|
||||
</span>
|
||||
</template>
|
||||
</el-dialog>
|
||||
<questions
|
||||
mode="1"
|
||||
:showDialog="showExamDialog"
|
||||
@close="showExamDialog = $event"
|
||||
></questions>
|
||||
|
||||
<questions
|
||||
mode="2"
|
||||
:showDialog="showQuestionnaireDialog"
|
||||
@close="showQuestionnaireDialog = $event"
|
||||
></questions>
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
import { computed, reactive, watch, ref, onMounted } from "vue";
|
||||
import { useStore } from "vuex";
|
||||
import { signMeeting } from "@/api/meeting";
|
||||
import wangEditor from "@/components/wangEditor";
|
||||
import questions from "@/components/questions";
|
||||
import messageList from "@/components/messageList";
|
||||
import dayjs from "dayjs";
|
||||
import ZoomMtgEmbedded from "@zoomus/websdk/embedded";
|
||||
import axios from "axios";
|
||||
import _ from "lodash";
|
||||
|
||||
import { ElMessage, ElMessageBox } from "element-plus";
|
||||
|
||||
const store = useStore();
|
||||
|
||||
const meetingNote = computed(() => store.getters.meetingNote);
|
||||
const meetingSchedule = computed(() => store.getters.meetingSchedule);
|
||||
const expertInfo = computed(() => store.getters.expertInfo);
|
||||
|
||||
const templateId = ref(1);
|
||||
if (store.getters.templateId) {
|
||||
templateId.value = store.getters.templateId;
|
||||
}
|
||||
const joinAccount = ref("");
|
||||
joinAccount.value =
|
||||
store.getters.nickname || store.getters.phone || store.getters.icCard;
|
||||
const meetingWidth = ref(0);
|
||||
const meetingHeight = ref(0);
|
||||
// 设置会议背景大小、图片
|
||||
const meetingContainerRef = ref(null);
|
||||
onMounted(() => {
|
||||
meetingContainerRef.value.style.background = `url(${store.getters.templateBackgroundPic}) 0% 0% / cover no-repeat`;
|
||||
setTextLabel();
|
||||
console.log(meetingContainerRef.value.offsetWidth);
|
||||
meetingWidth.value = meetingContainerRef.value.offsetWidth * 0.8;
|
||||
meetingHeight.value = (meetingWidth.value * 3) / 4;
|
||||
document.querySelector("#video-element").style.width =
|
||||
meetingWidth.value + "px";
|
||||
document.querySelector("#video-element").style.height =
|
||||
meetingHeight.value + "px";
|
||||
});
|
||||
|
||||
// 设置文本标签
|
||||
const setTextLabel = () => {
|
||||
document.querySelectorAll(".text-tag").forEach((el) => {
|
||||
el.remove();
|
||||
});
|
||||
store.getters.textLabelList.forEach((item) => {
|
||||
const labelObj = JSON.parse(item.textLabel);
|
||||
const textEl = document.createElement("div");
|
||||
textEl.id = `${_.uniqueId("tag-")}`;
|
||||
textEl.innerHTML = labelObj.content;
|
||||
textEl.className = "text-tag";
|
||||
console.log(labelObj);
|
||||
textEl.style.left = `${labelObj.x}`;
|
||||
textEl.style.top = `${labelObj.y}`;
|
||||
document.querySelector(".meeting-container").appendChild(textEl);
|
||||
});
|
||||
};
|
||||
|
||||
const meetingConfig = reactive({
|
||||
client: ZoomMtgEmbedded.createClient(),
|
||||
// This Sample App has been updated to use SDK App type credentials https://marketplace.zoom.us/docs/guides/build/sdk-app
|
||||
sdkKey: "TUgbQFx4RhPHDPa0OQAKVgPL2dPGQoVqZIuW",
|
||||
meetingNumber: store.getters.meetingNumber,
|
||||
passWord: store.state.password,
|
||||
role: 0,
|
||||
signatureEndpoint: "http://120.26.107.74:4000",
|
||||
userEmail: "",
|
||||
userName: joinAccount.value,
|
||||
// pass in the registrant's token if your meeting or webinar requires registration. More info here:
|
||||
// Meetings: https://marketplace.zoom.us/docs/sdk/native-sdks/web/component-view/meetings#join-registered
|
||||
// Webinars: https://marketplace.zoom.us/docs/sdk/native-sdks/web/component-view/webinars#join-registered
|
||||
registrantToken: "",
|
||||
});
|
||||
const checkMedia = async () => {
|
||||
const result = {};
|
||||
try {
|
||||
await navigator.mediaDevices.getUserMedia({ video: true });
|
||||
result.video = true;
|
||||
} catch (error) {
|
||||
result.video = false;
|
||||
}
|
||||
try {
|
||||
await navigator.mediaDevices.getUserMedia({ audio: true });
|
||||
result.audio = true;
|
||||
} catch (error) {
|
||||
result.audio = false;
|
||||
}
|
||||
return result;
|
||||
};
|
||||
const getSignature = async () => {
|
||||
const res = await checkMedia();
|
||||
if (!res.audio || !res.video) {
|
||||
return ElMessageBox.alert(
|
||||
`摄像头状态 : ${res.video ? "可用" : "禁用"}\n麦克风状态 : ${
|
||||
res.audio ? "可用" : "禁用"
|
||||
}`
|
||||
);
|
||||
}
|
||||
console.log(res);
|
||||
axios
|
||||
.post(meetingConfig.signatureEndpoint, {
|
||||
meetingNumber: meetingConfig.meetingNumber,
|
||||
role: meetingConfig.role,
|
||||
})
|
||||
.then((res) => {
|
||||
console.log(res.data.signature);
|
||||
startMeeting(res.data.signature);
|
||||
})
|
||||
.catch((error) => {
|
||||
console.log(error);
|
||||
});
|
||||
};
|
||||
|
||||
const startMeeting = async (signature) => {
|
||||
let meetingSDKElement = document.getElementById("video-element");
|
||||
|
||||
console.log(meetingConfig);
|
||||
meetingConfig.client.init({
|
||||
debug: true,
|
||||
zoomAppRoot: meetingSDKElement,
|
||||
language: "zh-CN",
|
||||
customize: {
|
||||
video: {
|
||||
isResizable: false,
|
||||
popper: {
|
||||
disableDraggable: true,
|
||||
},
|
||||
viewSizes: {
|
||||
default: {
|
||||
width: meetingWidth.value,
|
||||
height: meetingHeight.value,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
meetingInfo: [
|
||||
"topic",
|
||||
"host",
|
||||
"mn",
|
||||
"pwd",
|
||||
"telPwd",
|
||||
"invite",
|
||||
"participant",
|
||||
"dc",
|
||||
"enctype",
|
||||
],
|
||||
// toolbar: {
|
||||
// buttons: [
|
||||
// {
|
||||
// text: "Custom Button",
|
||||
// className: "CustomButton",
|
||||
// onClick: () => {
|
||||
// console.log("custom button");
|
||||
// },
|
||||
// },
|
||||
// ],
|
||||
// },
|
||||
},
|
||||
});
|
||||
await meetingConfig.client.join({
|
||||
sdkKey: meetingConfig.sdkKey,
|
||||
signature: signature,
|
||||
meetingNumber: meetingConfig.meetingNumber,
|
||||
password: meetingConfig.passWord,
|
||||
userName: meetingConfig.userName,
|
||||
userEmail: meetingConfig.userEmail,
|
||||
tk: meetingConfig.registrantToken,
|
||||
});
|
||||
// console.log(meetingConfig.client.checkSystemRequirements());
|
||||
initDesktopLayout();
|
||||
// document.querySelector("#suspension-view-tab-thumbnail-speaker").click();
|
||||
};
|
||||
// 初始化
|
||||
const initDesktopLayout = () => {
|
||||
console.log(meetingHeight.value);
|
||||
// 切换到 gallery view
|
||||
document.querySelector("#suspension-view-tab-thumbnail-gallery").click();
|
||||
// 初始化高度
|
||||
document.querySelector(".MuiBox-root.jss167.jss161.jss165").style.height = `${
|
||||
meetingHeight.value - 45
|
||||
}px`;
|
||||
// 初始化宽度
|
||||
document.querySelector(
|
||||
".MuiPaper-root.jss25.MuiPaper-elevation1.MuiPaper-rounded"
|
||||
).style.width = `${meetingWidth.value - 4}px`;
|
||||
// 加载完成显示 video element
|
||||
document.querySelector("#video-element").style.visibility = "visible";
|
||||
};
|
||||
// 检测屏幕共享开启状态变化
|
||||
const inSharing = ref(false); // 是否开启屏幕共享
|
||||
setInterval(() => {
|
||||
const elSharing = document.querySelector(".jss51");
|
||||
if (elSharing) {
|
||||
if (elSharing.className.includes("in-sharing")) {
|
||||
inSharing.value = true;
|
||||
} else {
|
||||
inSharing.value = false;
|
||||
}
|
||||
}
|
||||
}, 500);
|
||||
|
||||
// 根据id设置布局
|
||||
const setLayout = (templateId) => {
|
||||
console.log(templateId);
|
||||
document.querySelector(
|
||||
".MuiBox-root.jss167.jss161.jss165"
|
||||
).style.flexDirection = "";
|
||||
if (templateId === "1" && inSharing.value) {
|
||||
document.querySelector(".jss162.jss166").style.width = `${
|
||||
meetingWidth.value / 2 - 2
|
||||
}px`;
|
||||
} else if (templateId === "2" && inSharing.value) {
|
||||
document.querySelector(".jss162.jss166").style.width = `${
|
||||
meetingWidth.value / 2 - 2
|
||||
}px`;
|
||||
document.querySelector(
|
||||
".MuiBox-root.jss167.jss161.jss165"
|
||||
).style.flexDirection = "row-reverse";
|
||||
} else if (templateId === "3" && inSharing.value) {
|
||||
document.querySelector(".jss162.jss166").style.width = `${
|
||||
(meetingWidth.value - 4) / 4
|
||||
}px`;
|
||||
} else if (templateId === "4" && inSharing.value) {
|
||||
document.querySelector(".jss162.jss166").style.width = `${
|
||||
(meetingWidth.value - 4) / 4
|
||||
}px`;
|
||||
document.querySelector(
|
||||
".MuiBox-root.jss167.jss161.jss165"
|
||||
).style.flexDirection = "row-reverse";
|
||||
}
|
||||
};
|
||||
watch(inSharing, (newVal) => {
|
||||
console.log(newVal);
|
||||
if (newVal) {
|
||||
setLayout(templateId.value);
|
||||
// document.querySelector("#suspension-view-tab-thumbnail-speaker").click();
|
||||
} else {
|
||||
// document.querySelector("#suspension-view-tab-thumbnail-speaker").click();
|
||||
const galleryViewButton = document.querySelector(
|
||||
"#suspension-view-tab-thumbnail-gallery"
|
||||
);
|
||||
galleryViewButton.click();
|
||||
document.querySelector(".jss162.jss166").style.width = "";
|
||||
document.querySelector(
|
||||
".MuiBox-root.jss167.jss161.jss165"
|
||||
).style.flexDirection = "";
|
||||
}
|
||||
});
|
||||
getSignature();
|
||||
|
||||
// 建立websocket连接
|
||||
const socket = new WebSocket(
|
||||
`ws://118.195.192.58:1618/websocket/meeting/${store.getters.meetingId}/${joinAccount.value}`
|
||||
);
|
||||
socket.addEventListener("open", () => {
|
||||
// socket.send("Hello Server!");
|
||||
console.log("websocket,已连接");
|
||||
});
|
||||
|
||||
/* 签到功能 */
|
||||
// 提交签到
|
||||
const showSignDialog = ref(false); //是否显示签到窗口
|
||||
const submitSign = async () => {
|
||||
await signMeeting({
|
||||
meetingId: store.getters.meetingId,
|
||||
signTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
|
||||
account: joinAccount.value,
|
||||
});
|
||||
showSignDialog.value = false;
|
||||
ElMessage.success("签到成功");
|
||||
};
|
||||
|
||||
// 监听websocket消息
|
||||
socket.addEventListener("message", async (event) => {
|
||||
const data = JSON.parse(JSON.parse(event.data));
|
||||
console.log(data);
|
||||
// 会议信息更新时
|
||||
if (data.type === "isRefreshMeeting") {
|
||||
await store.dispatch("getMeetingInfo", store.getters.meetingId);
|
||||
meetingContainerRef.value.style.background = ` url(${store.getters.templateBackgroundPic}) 0% 0% / cover no-repeat`;
|
||||
templateId.value = store.getters.templateId;
|
||||
setLayout(templateId.value);
|
||||
setTextLabel();
|
||||
}
|
||||
// 开始签到时
|
||||
else if (data.type === "isStartSign") {
|
||||
console.log(data);
|
||||
showSignDialog.value = true;
|
||||
}
|
||||
// 签到结束时
|
||||
else if (data.type === "isEndSign") {
|
||||
showSignDialog.value = false;
|
||||
}
|
||||
// 收到聊天消息时
|
||||
else if (data.type === "isChat") {
|
||||
console.log(JSON.parse(data.content));
|
||||
messages.value.push({
|
||||
...JSON.parse(data.content),
|
||||
id: _.uniqueId(),
|
||||
time: dayjs().format("YYYY-MM-DD HH:mm:ss"),
|
||||
});
|
||||
}
|
||||
// 开始考试时
|
||||
else if (data.type === "isStartExam") {
|
||||
showExamDialog.value = true;
|
||||
}
|
||||
// 开始问卷时
|
||||
else if (data.type === "isStartQuestionnaire") {
|
||||
showQuestionnaireDialog.value = true;
|
||||
}
|
||||
// 会议结束时
|
||||
else if (data.type === "isCloseMeeting") {
|
||||
showExamDialog.value = false;
|
||||
showQuestionnaireDialog.value = false;
|
||||
ElMessageBox.alert("会议已结束");
|
||||
}
|
||||
});
|
||||
|
||||
/* 聊天功能 */
|
||||
const messages = ref([]); // 消息列表
|
||||
const editingMessage = ref(""); // 正在编辑的内容
|
||||
// 发送消息
|
||||
const sendMessage = () => {
|
||||
console.log(socket);
|
||||
socket.send(editingMessage.value);
|
||||
messages.value.push({
|
||||
id: _.uniqueId(),
|
||||
account: joinAccount.value,
|
||||
msg: editingMessage.value,
|
||||
isMe: true,
|
||||
time: dayjs().format("YYYY-MM-DD HH:mm:ss"),
|
||||
});
|
||||
editingMessage.value = "";
|
||||
};
|
||||
|
||||
// 是否显示考试和问卷弹窗
|
||||
const showExamDialog = ref(false);
|
||||
const showQuestionnaireDialog = ref(false);
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
#app-container {
|
||||
width: 85%;
|
||||
margin: 0 auto;
|
||||
:deep(.text-tag) {
|
||||
position: absolute;
|
||||
z-index: 999;
|
||||
border-radius: 4px;
|
||||
padding: 5px;
|
||||
background-color: #fff;
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
.meeting-container {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
#video-element {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.tabs {
|
||||
width: 100%;
|
||||
.meeting-info {
|
||||
:deep(p) {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
:deep(.el-tabs__content) {
|
||||
.chat {
|
||||
.option-bar {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-around;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
:deep(.MuiPaper-root) {
|
||||
background: transparent;
|
||||
box-shadow: 0 0;
|
||||
}
|
||||
:deep(.MuiToolbar-root) {
|
||||
display: none;
|
||||
}
|
||||
:deep(.MuiPaper-root.jss2.jss9.MuiPaper-elevation1.MuiPaper-rounded) {
|
||||
padding: 0;
|
||||
}
|
||||
</style>
|
585
src/views/verify.vue
Normal file
585
src/views/verify.vue
Normal file
@ -0,0 +1,585 @@
|
||||
<template>
|
||||
<img class="meeting-cover" :src="meeting.meetingPic" alt="" />
|
||||
<h3 class="meeting-title">{{ meeting.meetingName }}</h3>
|
||||
<p class="meeting-time">
|
||||
<span class="title">会议时间</span>
|
||||
<span class="time">{{ meeting.startTime }}</span>
|
||||
</p>
|
||||
<div class="form-container">
|
||||
<el-form
|
||||
:model="newJoinUser"
|
||||
ref="newJoinUserRef"
|
||||
:rules="joinUserRules"
|
||||
label-position="left"
|
||||
>
|
||||
<div class="joinuser-wrap" style="display: flex; flex-wrap: wrap">
|
||||
<div
|
||||
class="joinuser-item"
|
||||
v-if="fieldConfig.icCard && meeting.joinType !== `3`"
|
||||
>
|
||||
<el-form-item label="IC卡号" prop="icCard">
|
||||
<el-input v-model="newJoinUser.icCard" placeholder="请输入IC卡号" />
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div
|
||||
class="joinuser-item"
|
||||
v-if="fieldConfig.nickname || meeting.joinType === `3`"
|
||||
>
|
||||
<el-form-item label="姓名" prop="nickname">
|
||||
<el-input v-model="newJoinUser.nickname" placeholder="请输入姓名" />
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div
|
||||
class="joinuser-item"
|
||||
v-if="
|
||||
meeting.joinType === `3` ||
|
||||
(fieldConfig.phone && meeting.joinType !== `1`)
|
||||
"
|
||||
>
|
||||
<el-form-item label="手机号" prop="phone">
|
||||
<el-input v-model="newJoinUser.phone" placeholder="请输入手机号" />
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div
|
||||
class="joinuser-item"
|
||||
v-if="
|
||||
fieldConfig.unit &&
|
||||
meeting.joinType !== `1` &&
|
||||
meeting.joinType !== `3`
|
||||
"
|
||||
>
|
||||
<el-form-item label="单位" prop="unit">
|
||||
<el-input v-model="newJoinUser.unit" placeholder="请输入单位" />
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div
|
||||
class="joinuser-item"
|
||||
v-if="
|
||||
fieldConfig.address &&
|
||||
meeting.joinType !== `1` &&
|
||||
meeting.joinType !== `3`
|
||||
"
|
||||
>
|
||||
<el-form-item label="地址" prop="address">
|
||||
<el-input
|
||||
v-model="newJoinUser.address"
|
||||
:rows="3"
|
||||
placeholder="请输入地址"
|
||||
/>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div
|
||||
class="joinuser-item"
|
||||
v-if="
|
||||
fieldConfig.age &&
|
||||
meeting.joinType !== `1` &&
|
||||
meeting.joinType !== `3`
|
||||
"
|
||||
>
|
||||
<el-form-item label="年龄" prop="age">
|
||||
<el-input
|
||||
v-model="newJoinUser.age"
|
||||
:rows="3"
|
||||
placeholder="请输入年龄"
|
||||
/>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div
|
||||
class="joinuser-item"
|
||||
v-if="
|
||||
fieldConfig.department &&
|
||||
meeting.joinType !== `1` &&
|
||||
meeting.joinType !== `3`
|
||||
"
|
||||
>
|
||||
<el-form-item label="部门" prop="department">
|
||||
<el-input
|
||||
v-model="newJoinUser.department"
|
||||
placeholder="请输入部门"
|
||||
/>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div
|
||||
class="joinuser-item"
|
||||
v-if="
|
||||
fieldConfig.email &&
|
||||
meeting.joinType !== `1` &&
|
||||
meeting.joinType !== `3`
|
||||
"
|
||||
>
|
||||
<el-form-item label="邮箱" prop="email">
|
||||
<el-input v-model="newJoinUser.email" placeholder="请输入邮箱" />
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<div
|
||||
class="joinuser-item"
|
||||
v-if="
|
||||
fieldConfig.groupName &&
|
||||
meeting.joinType !== `1` &&
|
||||
meeting.joinType !== `3`
|
||||
"
|
||||
>
|
||||
<el-form-item label="组名" prop="groupName">
|
||||
<el-input
|
||||
v-model="newJoinUser.groupName"
|
||||
placeholder="请输入组名"
|
||||
/>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div
|
||||
class="joinuser-item"
|
||||
v-if="
|
||||
fieldConfig.hospitalLevel &&
|
||||
meeting.joinType !== `1` &&
|
||||
meeting.joinType !== `3`
|
||||
"
|
||||
>
|
||||
<el-form-item label="医院等级" prop="hospitalLevel">
|
||||
<el-input
|
||||
v-model="newJoinUser.hospitalLevel"
|
||||
placeholder="请输入医院等级"
|
||||
/>
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<div
|
||||
class="joinuser-item"
|
||||
v-if="
|
||||
fieldConfig.idCard &&
|
||||
meeting.joinType !== `1` &&
|
||||
meeting.joinType !== `3`
|
||||
"
|
||||
>
|
||||
<el-form-item label="身份证" prop="idCard">
|
||||
<el-input v-model="newJoinUser.idCard" placeholder="请输入身份证" />
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div
|
||||
class="joinuser-item"
|
||||
v-if="
|
||||
fieldConfig.mailingAddress &&
|
||||
meeting.joinType !== `1` &&
|
||||
meeting.joinType !== `3`
|
||||
"
|
||||
>
|
||||
<el-form-item label="邮寄地址" prop="mailingAddress">
|
||||
<el-input
|
||||
v-model="newJoinUser.mailingAddress"
|
||||
placeholder="请输入邮寄地址"
|
||||
/>
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<div
|
||||
class="joinuser-item"
|
||||
v-if="
|
||||
fieldConfig.major &&
|
||||
meeting.joinType !== `1` &&
|
||||
meeting.joinType !== `3`
|
||||
"
|
||||
>
|
||||
<el-form-item label="专业" prop="major">
|
||||
<el-input v-model="newJoinUser.major" placeholder="请输入专业" />
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div
|
||||
class="joinuser-item"
|
||||
v-if="
|
||||
fieldConfig.qualification &&
|
||||
meeting.joinType !== `1` &&
|
||||
meeting.joinType !== `3`
|
||||
"
|
||||
>
|
||||
<el-form-item label="学历" prop="qualification">
|
||||
<el-input
|
||||
v-model="newJoinUser.qualification"
|
||||
placeholder="请输入学历"
|
||||
/>
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<div
|
||||
class="joinuser-item"
|
||||
v-if="
|
||||
fieldConfig.region &&
|
||||
meeting.joinType !== `1` &&
|
||||
meeting.joinType !== `3`
|
||||
"
|
||||
>
|
||||
<el-form-item label="地区" prop="region">
|
||||
<el-input v-model="newJoinUser.region" placeholder="请输入地区" />
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div
|
||||
class="joinuser-item"
|
||||
v-if="
|
||||
fieldConfig.technicalOffice &&
|
||||
meeting.joinType !== `1` &&
|
||||
meeting.joinType !== `3`
|
||||
"
|
||||
>
|
||||
<el-form-item label="科室" prop="technicalOffice">
|
||||
<el-input
|
||||
v-model="newJoinUser.technicalOffice"
|
||||
placeholder="请输入科室"
|
||||
/>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div
|
||||
class="joinuser-item"
|
||||
v-if="
|
||||
fieldConfig.title &&
|
||||
meeting.joinType !== `1` &&
|
||||
meeting.joinType !== `3`
|
||||
"
|
||||
>
|
||||
<el-form-item label="职称" prop="title">
|
||||
<el-input v-model="newJoinUser.title" placeholder="请输入职称" />
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div
|
||||
class="joinuser-item"
|
||||
v-if="
|
||||
fieldConfig.gender &&
|
||||
meeting.joinType !== `1` &&
|
||||
meeting.joinType !== `3`
|
||||
"
|
||||
>
|
||||
<el-form-item label="性别" prop="gender">
|
||||
<el-radio-group v-model="newJoinUser.gender">
|
||||
<el-radio label="1">男</el-radio>
|
||||
<el-radio label="2">女</el-radio>
|
||||
<el-radio label="3">其他</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div
|
||||
class="joinuser-item"
|
||||
v-if="
|
||||
fieldConfig.needScoreFlag &&
|
||||
meeting.joinType !== `1` &&
|
||||
meeting.joinType !== `3`
|
||||
"
|
||||
>
|
||||
<el-form-item
|
||||
label="是否需要学分"
|
||||
label-width="180"
|
||||
prop="needScoreFlag"
|
||||
>
|
||||
<el-radio-group v-model="newJoinUser.needScoreFlag">
|
||||
<el-radio :label="0">不需要</el-radio>
|
||||
<el-radio :label="1">需要</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<div
|
||||
class="joinuser-item"
|
||||
v-if="
|
||||
fieldConfig.affiliateWestFlag &&
|
||||
meeting.joinType !== `1` &&
|
||||
meeting.joinType !== `3`
|
||||
"
|
||||
>
|
||||
<el-form-item label="隶属西部" prop="affiliateWestFlag">
|
||||
<el-checkbox
|
||||
v-model="newJoinUser.affiliateWestFlag"
|
||||
true-label="1"
|
||||
false-label="0"
|
||||
></el-checkbox>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div
|
||||
class="joinuser-item"
|
||||
v-if="
|
||||
fieldConfig.basicLevelUnitFlag &&
|
||||
meeting.joinType !== `1` &&
|
||||
meeting.joinType !== `3`
|
||||
"
|
||||
>
|
||||
<el-form-item label="属于基层单位" prop="basicLevelUnitFlag">
|
||||
<el-checkbox
|
||||
v-model="newJoinUser.basicLevelUnitFlag"
|
||||
true-label="1"
|
||||
false-label="0"
|
||||
></el-checkbox>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div
|
||||
class="joinuser-item"
|
||||
v-if="
|
||||
fieldConfig.countryDoctorFlag &&
|
||||
meeting.joinType !== `1` &&
|
||||
meeting.joinType !== `3`
|
||||
"
|
||||
>
|
||||
<el-form-item label="是否乡村医生" prop="countryDoctorFlag">
|
||||
<el-checkbox
|
||||
v-model="newJoinUser.countryDoctorFlag"
|
||||
true-label="1"
|
||||
false-label="0"
|
||||
></el-checkbox>
|
||||
</el-form-item>
|
||||
</div>
|
||||
</div>
|
||||
<el-row type="flex" justify="center"> </el-row>
|
||||
</el-form>
|
||||
<div style="display: flex; justify-content: center">
|
||||
<el-button type="primary" @click="submitVerify(newJoinUserRef)"
|
||||
>加入会议</el-button
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { reactive, ref, toRefs } from "vue";
|
||||
import {
|
||||
whitelistJoinMeeting,
|
||||
registerJoinUser,
|
||||
visitorJoinUser,
|
||||
} from "@/api/meeting";
|
||||
import { useStore } from "vuex";
|
||||
import { useRoute, useRouter } from "vue-router";
|
||||
|
||||
import _ from "lodash";
|
||||
const store = useStore();
|
||||
const router = useRouter();
|
||||
const route = useRoute();
|
||||
const data = reactive({
|
||||
newJoinUser: {},
|
||||
fieldConfig: {
|
||||
icCard: true,
|
||||
},
|
||||
meeting: {},
|
||||
joinUserRules: {
|
||||
address: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
affiliateWestFlag: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
age: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
basicLevelUnitFlag: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
countryDoctorFlag: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
department: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
email: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
gender: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
groupName: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
hospitalLevel: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
icCard: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
idCard: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
mailingAddress: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
major: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
needScoreFlag: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
nickname: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
phone: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
{
|
||||
pattern: /^1[3-9]\d{9}$/,
|
||||
trigger: "blur",
|
||||
message: "手机号格式不正确",
|
||||
},
|
||||
],
|
||||
qualification: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
region: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
technicalOffice: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
title: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
unit: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "blur",
|
||||
message: "必填",
|
||||
},
|
||||
],
|
||||
},
|
||||
});
|
||||
const { newJoinUser, fieldConfig, joinUserRules, meeting } = toRefs(data);
|
||||
const meetingId = ref(route.params.meetingId);
|
||||
|
||||
meeting.value = _.cloneDeep(store.state.meeting);
|
||||
|
||||
if (data.fieldConfig) {
|
||||
fieldConfig.value = JSON.parse(meeting.value.fieldConfig);
|
||||
}
|
||||
|
||||
// 设置gender basicLevelUnitFlag countryDoctorFlag affiliateWestFlag 默认值
|
||||
const setJoinUserDefaultValue = () => {
|
||||
[
|
||||
{ name: "gender", default: "1" },
|
||||
{ name: "basicLevelUnitFlag", default: "0" },
|
||||
{ name: "countryDoctorFlag", default: "0" },
|
||||
{ name: "affiliateWestFlag", default: "0" },
|
||||
].forEach((item) => {
|
||||
if (
|
||||
Object.keys(fieldConfig.value).includes(item.name) &&
|
||||
fieldConfig.value[item.name]
|
||||
) {
|
||||
newJoinUser.value[item.name] = item.default;
|
||||
} else {
|
||||
newJoinUser.value = _.omit(newJoinUser.value, item.name);
|
||||
}
|
||||
});
|
||||
newJoinUser.value.meetingId = meetingId.value;
|
||||
};
|
||||
setJoinUserDefaultValue();
|
||||
|
||||
// 提交白名单验证 / 登记 / 游客
|
||||
const newJoinUserRef = ref(null);
|
||||
const submitVerify = async (newJoinUserRef) => {
|
||||
await newJoinUserRef.validate();
|
||||
if (meeting.value.joinType === "1") {
|
||||
store.commit("setJoinUser", newJoinUser.value);
|
||||
router.push(`/meeting/${meetingId.value}`);
|
||||
} else if (meeting.value.joinType === "2") {
|
||||
const { data } = await registerJoinUser(newJoinUser.value);
|
||||
store.commit("setPassword", data);
|
||||
store.commit("setJoinUser", newJoinUser.value);
|
||||
router.push(`/meeting/${meetingId.value}`);
|
||||
} else if (meeting.value.joinType === "3") {
|
||||
const { data } = await visitorJoinUser(newJoinUser.value);
|
||||
store.commit("setPassword", data);
|
||||
store.commit("setJoinUser", newJoinUser.value);
|
||||
router.push(`/meeting/${meetingId.value}`);
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import "@/style/appoint-mobile.scss";
|
||||
@import "@/style/appoint-desktop.scss";
|
||||
|
||||
.meeting-cover {
|
||||
width: 100%;
|
||||
}
|
||||
.meeting-title {
|
||||
text-align: center;
|
||||
}
|
||||
.meeting-time {
|
||||
text-align: center;
|
||||
}
|
||||
.form-item-container {
|
||||
display: flex;
|
||||
}
|
||||
</style>
|
@ -1,4 +1,25 @@
|
||||
const { defineConfig } = require("@vue/cli-service");
|
||||
module.exports = defineConfig({
|
||||
transpileDependencies: true,
|
||||
// publicPath: "http://120.26.107.74:1618",
|
||||
lintOnSave: false,
|
||||
devServer: {
|
||||
port: 3000,
|
||||
// proxy: {
|
||||
// "/api": {
|
||||
// target: "http://120.26.107.74:1618",
|
||||
// // ws: true,
|
||||
// changeOrigin: true,
|
||||
// // rewrite: (p) => p.replace(/^\/api/, ""),
|
||||
// // headers: {
|
||||
// // "Access-Control-Allow-Origin": "*",
|
||||
// // "Access-Control-Allow-Methods": "*",
|
||||
// // "Access-Control-Allow-Headers": "*",
|
||||
// // "Cross-Origin-Embedder-Policy": "credentialless",
|
||||
// // "Cross-Origin-Opener-Policy": "same-origin",
|
||||
// // },
|
||||
// },
|
||||
// // target: "http://120.26.107.74:1618",
|
||||
// },
|
||||
},
|
||||
});
|
||||
|
583
yarn.lock
583
yarn.lock
@ -911,7 +911,7 @@
|
||||
"@babel/types" "^7.4.4"
|
||||
esutils "^2.0.2"
|
||||
|
||||
"@babel/runtime@^7.12.13", "@babel/runtime@^7.8.4":
|
||||
"@babel/runtime@^7.12.0", "@babel/runtime@^7.12.13", "@babel/runtime@^7.4.5", "@babel/runtime@^7.8.4":
|
||||
version "7.17.9"
|
||||
resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.17.9.tgz#d19fbf802d01a8cb6cf053a64e472d42c434ba72"
|
||||
integrity sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==
|
||||
@ -951,6 +951,16 @@
|
||||
"@babel/helper-validator-identifier" "^7.16.7"
|
||||
to-fast-properties "^2.0.0"
|
||||
|
||||
"@ctrl/tinycolor@^3.4.1":
|
||||
version "3.4.1"
|
||||
resolved "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz#75b4c27948c81e88ccd3a8902047bcd797f38d32"
|
||||
integrity sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw==
|
||||
|
||||
"@element-plus/icons-vue@^1.1.4":
|
||||
version "1.1.4"
|
||||
resolved "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-1.1.4.tgz#5d2788ea356f1458068e6d400e724ca5f3d29aca"
|
||||
integrity sha512-Iz/nHqdp1sFPmdzRwHkEQQA3lKvoObk8azgABZ81QUOpW9s/lUyQVUSh0tNtEPZXQlKwlSh7SPgoVxzrE0uuVQ==
|
||||
|
||||
"@eslint/eslintrc@^0.4.3":
|
||||
version "0.4.3"
|
||||
resolved "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c"
|
||||
@ -966,6 +976,18 @@
|
||||
minimatch "^3.0.4"
|
||||
strip-json-comments "^3.1.1"
|
||||
|
||||
"@floating-ui/core@^0.6.2":
|
||||
version "0.6.2"
|
||||
resolved "https://registry.npmmirror.com/@floating-ui/core/-/core-0.6.2.tgz#f2813f0e5f3d5ed7af5029e1a082203dadf02b7d"
|
||||
integrity sha512-jktYRmZwmau63adUG3GKOAVCofBXkk55S/zQ94XOorAHhwqFIOFAy1rSp2N0Wp6/tGbe9V3u/ExlGZypyY17rg==
|
||||
|
||||
"@floating-ui/dom@^0.4.5":
|
||||
version "0.4.5"
|
||||
resolved "https://registry.npmmirror.com/@floating-ui/dom/-/dom-0.4.5.tgz#2e88d16646119cc67d44683f75ee99840475bbfa"
|
||||
integrity sha512-b+prvQgJt8pieaKYMSJBXHxX/DYwdLsAWxKYqnO5dO2V4oo/TYBZJAUQCVNjTWWsrs6o4VDrNcP9+E70HAhJdw==
|
||||
dependencies:
|
||||
"@floating-ui/core" "^0.6.2"
|
||||
|
||||
"@hapi/hoek@^9.0.0":
|
||||
version "9.2.1"
|
||||
resolved "https://registry.npmmirror.com/@hapi/hoek/-/hoek-9.2.1.tgz#9551142a1980503752536b5050fd99f4a7f13b17"
|
||||
@ -1061,6 +1083,11 @@
|
||||
resolved "https://registry.npmmirror.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1"
|
||||
integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==
|
||||
|
||||
"@popperjs/core@npm:@sxzz/popperjs-es@^2.11.6":
|
||||
version "2.11.7"
|
||||
resolved "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz#a7f69e3665d3da9b115f9e71671dae1b97e13671"
|
||||
integrity sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==
|
||||
|
||||
"@sideway/address@^4.1.3":
|
||||
version "4.1.4"
|
||||
resolved "https://registry.npmmirror.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0"
|
||||
@ -1093,6 +1120,11 @@
|
||||
resolved "https://registry.npmmirror.com/@soda/get-current-script/-/get-current-script-1.0.2.tgz#a53515db25d8038374381b73af20bb4f2e508d87"
|
||||
integrity sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==
|
||||
|
||||
"@transloadit/prettier-bytes@0.0.7":
|
||||
version "0.0.7"
|
||||
resolved "https://registry.npmmirror.com/@transloadit/prettier-bytes/-/prettier-bytes-0.0.7.tgz#cdb5399f445fdd606ed833872fa0cabdbc51686b"
|
||||
integrity sha512-VeJbUb0wEKbcwaSlj5n+LscBl9IPgLPkHVGBkh00cztv6X4L/TJXK58LzFuBKX7/GAfiGhIwH67YTLTlzvIzBA==
|
||||
|
||||
"@trysound/sax@0.2.0":
|
||||
version "0.2.0"
|
||||
resolved "https://registry.npmmirror.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad"
|
||||
@ -1157,6 +1189,11 @@
|
||||
resolved "https://registry.npmmirror.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40"
|
||||
integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==
|
||||
|
||||
"@types/event-emitter@^0.3.3":
|
||||
version "0.3.3"
|
||||
resolved "https://registry.npmmirror.com/@types/event-emitter/-/event-emitter-0.3.3.tgz#727032a9fc67565f96bbd78b2e2809275c97d7e7"
|
||||
integrity sha512-UfnOK1pIxO7P+EgPRZXD9jMpimd8QEFcEZ5R67R1UhGbv4zghU5+NE7U8M8G9H5Jc8FI51rqDWQs6FtUfq2e/Q==
|
||||
|
||||
"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18":
|
||||
version "4.17.28"
|
||||
resolved "https://registry.npmmirror.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz#c47def9f34ec81dc6328d0b1b5303d1ec98d86b8"
|
||||
@ -1193,6 +1230,18 @@
|
||||
resolved "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3"
|
||||
integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==
|
||||
|
||||
"@types/lodash-es@^4.17.6":
|
||||
version "4.17.6"
|
||||
resolved "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.6.tgz#c2ed4c8320ffa6f11b43eb89e9eaeec65966a0a0"
|
||||
integrity sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg==
|
||||
dependencies:
|
||||
"@types/lodash" "*"
|
||||
|
||||
"@types/lodash@*", "@types/lodash@^4.14.182":
|
||||
version "4.14.182"
|
||||
resolved "https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.182.tgz#05301a4d5e62963227eaafe0ce04dd77c54ea5c2"
|
||||
integrity sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q==
|
||||
|
||||
"@types/mime@^1":
|
||||
version "1.3.2"
|
||||
resolved "https://registry.npmmirror.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a"
|
||||
@ -1262,6 +1311,49 @@
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@uppy/companion-client@^2.0.4":
|
||||
version "2.0.6"
|
||||
resolved "https://registry.npmmirror.com/@uppy/companion-client/-/companion-client-2.0.6.tgz#a1d8535404fac249615f2b2edec503d97f66f639"
|
||||
integrity sha512-a2tsKhNPekW52CYUjBa7oVcK+aPm/Rd9FY/4wMbkjSsyj0BVjNdkR7jSEXfddUyKf+H5qLqNFXEHfGp/p9FOEA==
|
||||
dependencies:
|
||||
"@uppy/utils" "^4.0.6"
|
||||
namespace-emitter "^2.0.1"
|
||||
|
||||
"@uppy/core@^2.1.1":
|
||||
version "2.1.10"
|
||||
resolved "https://registry.npmmirror.com/@uppy/core/-/core-2.1.10.tgz#f356703a5247e44ab6f73e7e4eb204b13cc56374"
|
||||
integrity sha512-Y6xBtlzG5235P6GTKFJeBF2tczfHNPfEk4ZfDL30aU+n4mVXIuOXTAN60kQ3WsX/SYaIfx7RmX9DSP/SBoQrbA==
|
||||
dependencies:
|
||||
"@transloadit/prettier-bytes" "0.0.7"
|
||||
"@uppy/store-default" "^2.0.3"
|
||||
"@uppy/utils" "^4.0.7"
|
||||
lodash.throttle "^4.1.1"
|
||||
mime-match "^1.0.2"
|
||||
namespace-emitter "^2.0.1"
|
||||
nanoid "^3.1.25"
|
||||
preact "^10.5.13"
|
||||
|
||||
"@uppy/store-default@^2.0.3":
|
||||
version "2.0.3"
|
||||
resolved "https://registry.npmmirror.com/@uppy/store-default/-/store-default-2.0.3.tgz#47ad4fc4816d21955ff37d6bb5096a93278c29e2"
|
||||
integrity sha512-2BGlN1sW0cFv4rOqTK8dfSg579S984N1HxCJxLFqeW9nWD6zd/O8Omyd85tbxGQ+FLZLTmLOm/feD0YeCBMahg==
|
||||
|
||||
"@uppy/utils@^4.0.4", "@uppy/utils@^4.0.6", "@uppy/utils@^4.0.7":
|
||||
version "4.0.7"
|
||||
resolved "https://registry.npmmirror.com/@uppy/utils/-/utils-4.0.7.tgz#1f0928ca646655c34ca32b5a9061f354a8fe64cf"
|
||||
integrity sha512-nKViMT8XchKy+NWpb3DtVKuzZBmW7au26LrMq89EsvTwIOT6UR9+7bmz/+zr3+lc7UC7vMgNChIC6G+/Ya9wWQ==
|
||||
dependencies:
|
||||
lodash.throttle "^4.1.1"
|
||||
|
||||
"@uppy/xhr-upload@^2.0.3":
|
||||
version "2.0.7"
|
||||
resolved "https://registry.npmmirror.com/@uppy/xhr-upload/-/xhr-upload-2.0.7.tgz#d9128be1fdde78edc61878e23930a2855f607df5"
|
||||
integrity sha512-bzCc654B0HfNmL4BIr7gGTvg2pQBucYgPmAb4ST7jGyWlEJWbSxMXR/19zvISQzpJ6v1uP6q2ppgxGMqNdj/rA==
|
||||
dependencies:
|
||||
"@uppy/companion-client" "^2.0.4"
|
||||
"@uppy/utils" "^4.0.4"
|
||||
nanoid "^3.1.25"
|
||||
|
||||
"@vue/babel-helper-vue-jsx-merge-props@^1.2.1":
|
||||
version "1.2.1"
|
||||
resolved "https://registry.npmmirror.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.2.1.tgz#31624a7a505fb14da1d58023725a4c5f270e6a81"
|
||||
@ -1630,6 +1722,105 @@
|
||||
resolved "https://registry.npmmirror.com/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz#b6b40a7625429d2bd7c2281ddba601ed05dc7f1a"
|
||||
integrity sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==
|
||||
|
||||
"@vueuse/core@^8.2.6":
|
||||
version "8.3.1"
|
||||
resolved "https://registry.npmmirror.com/@vueuse/core/-/core-8.3.1.tgz#7f2c5977cc0690a803f44c3f5c291536ad7880d1"
|
||||
integrity sha512-WiXUgVyPG9elGx3G8UV8g+zqbEJ2hYacrPICogAxDdW6hnxxcUFdF7FtvDroJ/DxWmo2pg8XNNz07ybfnZyJbw==
|
||||
dependencies:
|
||||
"@vueuse/metadata" "8.3.1"
|
||||
"@vueuse/shared" "8.3.1"
|
||||
vue-demi "*"
|
||||
|
||||
"@vueuse/metadata@8.3.1":
|
||||
version "8.3.1"
|
||||
resolved "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-8.3.1.tgz#acc0ff9ad686c68dfc7b4869639c43e71ae2682b"
|
||||
integrity sha512-1aZaFL44HzXXkfN6Q7KMDOXBFKTHDClHlOJBxtN8rTBXIIScoGOrJCpxWiQ4kuVg95MzG/pHrd3P4wd8poL9XQ==
|
||||
|
||||
"@vueuse/shared@8.3.1":
|
||||
version "8.3.1"
|
||||
resolved "https://registry.npmmirror.com/@vueuse/shared/-/shared-8.3.1.tgz#a941ef6a0eaf483ecb0e88a062163d506c22cc4b"
|
||||
integrity sha512-7HKLCcxp4dtONq6QSSoavblo9riYgqzw7jhqiC0/VUYMXKzqj1G/GznOzTmY8Wi8uKKT197JqjKQ1DKt2j/0+A==
|
||||
dependencies:
|
||||
vue-demi "*"
|
||||
|
||||
"@wangeditor/basic-modules@^1.0.1":
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npmmirror.com/@wangeditor/basic-modules/-/basic-modules-1.0.1.tgz#6d8a96cc2f0da129b660d46e9c731b09d98529ad"
|
||||
integrity sha512-xgMh0f4BBVHyhaNc96b3rfJklRGEAC2brfeLRXoexnhSCcvyvaIsEuukvvPHYAYK72SCa0Zcdx6tD9O5WyLMDA==
|
||||
dependencies:
|
||||
is-url "^1.2.4"
|
||||
|
||||
"@wangeditor/code-highlight@^1.0.1":
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npmmirror.com/@wangeditor/code-highlight/-/code-highlight-1.0.1.tgz#cf4144cbcc61bfc116646f597b1f32efb5d5cd63"
|
||||
integrity sha512-3LJ2c7asJT3yOJZ09ibc0TfRNxNy2o5g1MB0Bje5hEM0lV7cGErcjmWNS9l9XDoxrxUoU4ma3p3YjBJzifg/lA==
|
||||
dependencies:
|
||||
prismjs "^1.23.0"
|
||||
|
||||
"@wangeditor/core@^1.0.1":
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npmmirror.com/@wangeditor/core/-/core-1.0.1.tgz#e79dfcb99aaca40569b107262461552550887350"
|
||||
integrity sha512-vqendw2S3sz+fiTbMRe1GWvlFC81BIbwYQM3jEdM5yoHsFDwQo0az7JrjPedUQjkA0+mYKQHkwuuJMeFN/+Ldg==
|
||||
dependencies:
|
||||
"@types/event-emitter" "^0.3.3"
|
||||
event-emitter "^0.3.5"
|
||||
html-void-elements "^2.0.0"
|
||||
i18next "^20.4.0"
|
||||
scroll-into-view-if-needed "^2.2.28"
|
||||
slate-history "^0.66.0"
|
||||
|
||||
"@wangeditor/editor-for-vue@^5.1.10":
|
||||
version "5.1.11"
|
||||
resolved "https://registry.npmmirror.com/@wangeditor/editor-for-vue/-/editor-for-vue-5.1.11.tgz#2f2f7ec83c1ebea6c58d30a0e090988528c3924c"
|
||||
integrity sha512-gzo6A9VMWKUVgOTtucNTplb7K1KUvnBoQ76AaB5vmh+9LXv+6jAI4QXADH46PVGwvQJcQ3zqZ/P1pIj/QthjYQ==
|
||||
|
||||
"@wangeditor/editor@^5.0.1":
|
||||
version "5.0.1"
|
||||
resolved "https://registry.npmmirror.com/@wangeditor/editor/-/editor-5.0.1.tgz#83ad19622ca856a60ad5094fc8c254b6d5897710"
|
||||
integrity sha512-Z2okt5L80u+RQP8MXiR/Tnh6IAu5dewjWP3GlPpH51Qe9PaCD2OvguaC7OxwfVnr4cbPbaaSiUoO1lf8x39Ilw==
|
||||
dependencies:
|
||||
"@uppy/core" "^2.1.1"
|
||||
"@uppy/xhr-upload" "^2.0.3"
|
||||
"@wangeditor/basic-modules" "^1.0.1"
|
||||
"@wangeditor/code-highlight" "^1.0.1"
|
||||
"@wangeditor/core" "^1.0.1"
|
||||
"@wangeditor/list-module" "^1.0.1"
|
||||
"@wangeditor/table-module" "^1.0.1"
|
||||
"@wangeditor/upload-image-module" "^1.0.1"
|
||||
"@wangeditor/video-module" "^1.0.1"
|
||||
dom7 "^3.0.0"
|
||||
is-hotkey "^0.2.0"
|
||||
lodash.camelcase "^4.3.0"
|
||||
lodash.clonedeep "^4.5.0"
|
||||
lodash.debounce "^4.0.8"
|
||||
lodash.foreach "^4.5.0"
|
||||
lodash.isequal "^4.5.0"
|
||||
lodash.throttle "^4.1.1"
|
||||
lodash.toarray "^4.4.0"
|
||||
nanoid "^3.2.0"
|
||||
slate "^0.72.0"
|
||||
snabbdom "^3.1.0"
|
||||
|
||||
"@wangeditor/list-module@^1.0.1":
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npmmirror.com/@wangeditor/list-module/-/list-module-1.0.1.tgz#c8e9ffa336c363856c247168b7bc315976c294cc"
|
||||
integrity sha512-hlVwoXCK01eMqwwbZpSAjwHYDeZJei6mvPddcHkT5xws6r4wlT+8Xv3iBiAuutfdPbJTlXBRIWmNDFqN5aRtQg==
|
||||
|
||||
"@wangeditor/table-module@^1.0.1":
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npmmirror.com/@wangeditor/table-module/-/table-module-1.0.1.tgz#c015cf4bf885c2355cd5c2bc5994cc538e64c936"
|
||||
integrity sha512-55U77WoypdUsMY35OJ/FN8VfKM7tBd6JCSCr9EE8Z78nfzFxhJcLPasWkFXqPklleDZ+pcIkfiPojn2DdNRy5w==
|
||||
|
||||
"@wangeditor/upload-image-module@^1.0.1":
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npmmirror.com/@wangeditor/upload-image-module/-/upload-image-module-1.0.1.tgz#a074518d73ce9c5cfd3e8ee56d1adf831996f142"
|
||||
integrity sha512-vgUV4ENttTITblqtVuzleIq732OmzmzzgrIvX6b3GRGPSw5u8glJ/87tOEhvHjHECc4oFo18B7xzJ1GpBj79/w==
|
||||
|
||||
"@wangeditor/video-module@^1.0.1":
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npmmirror.com/@wangeditor/video-module/-/video-module-1.0.1.tgz#6b7af41bf7b42898ceff159ba86568e85cb7c4d2"
|
||||
integrity sha512-SiMWfigMK8V5t1PuwLEJy6nDgivpyJqicSZZNwqypsASQviNRGBPpAubkd/SjcMlFvUplsTrqjT6KnlMR54iPQ==
|
||||
|
||||
"@webassemblyjs/ast@1.11.1":
|
||||
version "1.11.1"
|
||||
resolved "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7"
|
||||
@ -1761,6 +1952,18 @@
|
||||
resolved "https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
|
||||
integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
|
||||
|
||||
"@zoomus/websdk@^2.3.5":
|
||||
version "2.3.5"
|
||||
resolved "https://registry.npmmirror.com/@zoomus/websdk/-/websdk-2.3.5.tgz#3d8bf39d0561ab4a4aa39eca4dda08db3a9aa6b0"
|
||||
integrity sha512-EAgeoh6CV22ljO8AFbRV7Zv6APL66JuUt/EKqQwcnDRW8T9/dyFFsZF3OqJAjSE2eU3k9FR827dUk9ecTGTbXg==
|
||||
dependencies:
|
||||
lodash "^4.17.21"
|
||||
react "16.8.6"
|
||||
react-dom "16.8.6"
|
||||
react-redux "7.1.0"
|
||||
redux "3.7.2"
|
||||
redux-thunk "2.2.0"
|
||||
|
||||
accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8:
|
||||
version "1.3.8"
|
||||
resolved "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e"
|
||||
@ -1922,6 +2125,11 @@ astral-regex@^2.0.0:
|
||||
resolved "https://registry.npmmirror.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
|
||||
integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
|
||||
|
||||
async-validator@^4.0.7:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.npmmirror.com/async-validator/-/async-validator-4.1.1.tgz#3cd1437faa2de64743f7d56649dd904c946a18fe"
|
||||
integrity sha512-p4DO/JXwjs8klJyJL8Q2oM4ks5fUTze/h5k10oPPKMiLe1fj3G1QMzPHNmN1Py4ycOk7WlO2DcGXv1qiESJCZA==
|
||||
|
||||
async@^2.6.2:
|
||||
version "2.6.4"
|
||||
resolved "https://registry.npmmirror.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221"
|
||||
@ -1946,6 +2154,13 @@ autoprefixer@^10.2.4:
|
||||
picocolors "^1.0.0"
|
||||
postcss-value-parser "^4.2.0"
|
||||
|
||||
axios@^0.26.1:
|
||||
version "0.26.1"
|
||||
resolved "https://registry.npmmirror.com/axios/-/axios-0.26.1.tgz#1ede41c51fcf51bbbd6fd43669caaa4f0495aaa9"
|
||||
integrity sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==
|
||||
dependencies:
|
||||
follow-redirects "^1.14.8"
|
||||
|
||||
babel-loader@^8.2.2:
|
||||
version "8.2.5"
|
||||
resolved "https://registry.npmmirror.com/babel-loader/-/babel-loader-8.2.5.tgz#d45f585e654d5a5d90f5350a779d7647c5ed512e"
|
||||
@ -2284,6 +2499,11 @@ clone@^1.0.2:
|
||||
resolved "https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
|
||||
integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==
|
||||
|
||||
coi-serviceworker@^0.1.6:
|
||||
version "0.1.6"
|
||||
resolved "https://registry.npmmirror.com/coi-serviceworker/-/coi-serviceworker-0.1.6.tgz#c84b9ba54fe7bb013118e1eea201b8a22f434ca8"
|
||||
integrity sha512-STWJBMdxuKvvzbd3G1+sFrV5Ia+UDv5lP2CVCx+kEfqghOSb8nzcG/ttpSV2k/haTUn5OsfTAlkK+uFkKBqBqw==
|
||||
|
||||
color-convert@^1.9.0:
|
||||
version "1.9.3"
|
||||
resolved "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
|
||||
@ -2358,6 +2578,11 @@ compression@^1.7.4:
|
||||
safe-buffer "5.1.2"
|
||||
vary "~1.1.2"
|
||||
|
||||
compute-scroll-into-view@^1.0.17:
|
||||
version "1.0.17"
|
||||
resolved "https://registry.npmmirror.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.17.tgz#6a88f18acd9d42e9cf4baa6bec7e0522607ab7ab"
|
||||
integrity sha512-j4dx+Fb0URmzbwwMUrhqWM2BEWHdFGx+qZ9qqASHRPqvTYdqvWnHg0H1hIbcyLnvgnoNAVMlwkepyqM3DaIFUg==
|
||||
|
||||
concat-map@0.0.1:
|
||||
version "0.0.1"
|
||||
resolved "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
||||
@ -2595,6 +2820,19 @@ csstype@^2.6.8:
|
||||
resolved "https://registry.npmmirror.com/csstype/-/csstype-2.6.20.tgz#9229c65ea0b260cf4d3d997cb06288e36a8d6dda"
|
||||
integrity sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==
|
||||
|
||||
d@1, d@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npmmirror.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a"
|
||||
integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==
|
||||
dependencies:
|
||||
es5-ext "^0.10.50"
|
||||
type "^1.0.1"
|
||||
|
||||
dayjs@^1.11.1:
|
||||
version "1.11.1"
|
||||
resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.1.tgz#90b33a3dda3417258d48ad2771b415def6545eb0"
|
||||
integrity sha512-ER7EjqVAMkRRsxNCC5YqJ9d9VQYuWdGt7aiH2qA5R5wt8ZmWaP2dLUSIK6y/kVzLMlmh1Tvu5xUf4M/wdGJ5KA==
|
||||
|
||||
debug@2.6.9:
|
||||
version "2.6.9"
|
||||
resolved "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
|
||||
@ -2715,6 +2953,13 @@ dom-serializer@^1.0.1:
|
||||
domhandler "^4.2.0"
|
||||
entities "^2.0.0"
|
||||
|
||||
dom7@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npmmirror.com/dom7/-/dom7-3.0.0.tgz#b861ce5d67a6becd7aaa3ad02942ff14b1240331"
|
||||
integrity sha512-oNlcUdHsC4zb7Msx7JN3K0Nro1dzJ48knvBOnDPKJ2GV9wl1i5vydJZUSyOfrkKFDZEud/jBsTk92S/VGSAe/g==
|
||||
dependencies:
|
||||
ssr-window "^3.0.0-alpha.1"
|
||||
|
||||
domelementtype@^2.0.1, domelementtype@^2.2.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
|
||||
@ -2774,6 +3019,27 @@ electron-to-chromium@^1.4.118:
|
||||
resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.126.tgz#56e9d3cbb658c58b45d05ecfedbcb3b09ab1a2d8"
|
||||
integrity sha512-g/e18Yv0fBdN2c2Z8hWV9jOXxOxOByyG8uGufrJWUym+LHMYa5K2oR9C+D8Bvh0slUTarBwBBZFi41ImQjEZIA==
|
||||
|
||||
element-plus@^2.1.9:
|
||||
version "2.1.11"
|
||||
resolved "https://registry.npmmirror.com/element-plus/-/element-plus-2.1.11.tgz#6c1be29f5d78ea78720e0dda519960fd0c7d8fde"
|
||||
integrity sha512-s4X0I8s787tv+9UdekBC1g7v42Fj4bucPAmu03EjbgrGrV7BJvkoBGuK52lNfu4yC76bl6Uyjesd5Fu8CMakSw==
|
||||
dependencies:
|
||||
"@ctrl/tinycolor" "^3.4.1"
|
||||
"@element-plus/icons-vue" "^1.1.4"
|
||||
"@floating-ui/dom" "^0.4.5"
|
||||
"@popperjs/core" "npm:@sxzz/popperjs-es@^2.11.6"
|
||||
"@types/lodash" "^4.14.182"
|
||||
"@types/lodash-es" "^4.17.6"
|
||||
"@vueuse/core" "^8.2.6"
|
||||
async-validator "^4.0.7"
|
||||
dayjs "^1.11.1"
|
||||
escape-html "^1.0.3"
|
||||
lodash "^4.17.21"
|
||||
lodash-es "^4.17.21"
|
||||
lodash-unified "^1.0.2"
|
||||
memoize-one "^6.0.0"
|
||||
normalize-wheel-es "^1.1.2"
|
||||
|
||||
emoji-regex@^8.0.0:
|
||||
version "8.0.0"
|
||||
resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
|
||||
@ -2835,12 +3101,38 @@ es-module-lexer@^0.9.0:
|
||||
resolved "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19"
|
||||
integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==
|
||||
|
||||
es5-ext@^0.10.35, es5-ext@^0.10.50, es5-ext@~0.10.14:
|
||||
version "0.10.61"
|
||||
resolved "https://registry.npmmirror.com/es5-ext/-/es5-ext-0.10.61.tgz#311de37949ef86b6b0dcea894d1ffedb909d3269"
|
||||
integrity sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==
|
||||
dependencies:
|
||||
es6-iterator "^2.0.3"
|
||||
es6-symbol "^3.1.3"
|
||||
next-tick "^1.1.0"
|
||||
|
||||
es6-iterator@^2.0.3:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.npmmirror.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
|
||||
integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==
|
||||
dependencies:
|
||||
d "1"
|
||||
es5-ext "^0.10.35"
|
||||
es6-symbol "^3.1.1"
|
||||
|
||||
es6-symbol@^3.1.1, es6-symbol@^3.1.3:
|
||||
version "3.1.3"
|
||||
resolved "https://registry.npmmirror.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18"
|
||||
integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==
|
||||
dependencies:
|
||||
d "^1.0.1"
|
||||
ext "^1.1.2"
|
||||
|
||||
escalade@^3.1.1:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
|
||||
integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
|
||||
|
||||
escape-html@~1.0.3:
|
||||
escape-html@^1.0.3, escape-html@~1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
|
||||
integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
|
||||
@ -3043,6 +3335,14 @@ etag@~1.8.1:
|
||||
resolved "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
|
||||
integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==
|
||||
|
||||
event-emitter@^0.3.5:
|
||||
version "0.3.5"
|
||||
resolved "https://registry.npmmirror.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39"
|
||||
integrity sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==
|
||||
dependencies:
|
||||
d "1"
|
||||
es5-ext "~0.10.14"
|
||||
|
||||
event-pubsub@4.3.0:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.npmmirror.com/event-pubsub/-/event-pubsub-4.3.0.tgz#f68d816bc29f1ec02c539dc58c8dd40ce72cb36e"
|
||||
@ -3136,6 +3436,13 @@ express@^4.17.3:
|
||||
utils-merge "1.0.1"
|
||||
vary "~1.1.2"
|
||||
|
||||
ext@^1.1.2:
|
||||
version "1.6.0"
|
||||
resolved "https://registry.npmmirror.com/ext/-/ext-1.6.0.tgz#3871d50641e874cc172e2b53f919842d19db4c52"
|
||||
integrity sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==
|
||||
dependencies:
|
||||
type "^2.5.0"
|
||||
|
||||
fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
|
||||
version "3.1.3"
|
||||
resolved "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
|
||||
@ -3245,7 +3552,7 @@ flatted@^3.1.0:
|
||||
resolved "https://registry.npmmirror.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3"
|
||||
integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==
|
||||
|
||||
follow-redirects@^1.0.0:
|
||||
follow-redirects@^1.0.0, follow-redirects@^1.14.8:
|
||||
version "1.14.9"
|
||||
resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.14.9.tgz#dd4ea157de7bfaf9ea9b3fbd85aa16951f78d8d7"
|
||||
integrity sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==
|
||||
@ -3457,6 +3764,13 @@ highlight.js@^10.7.1:
|
||||
resolved "https://registry.npmmirror.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531"
|
||||
integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==
|
||||
|
||||
hoist-non-react-statics@^3.3.0:
|
||||
version "3.3.2"
|
||||
resolved "https://registry.npmmirror.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
|
||||
integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
|
||||
dependencies:
|
||||
react-is "^16.7.0"
|
||||
|
||||
hosted-git-info@^2.1.4:
|
||||
version "2.8.9"
|
||||
resolved "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
|
||||
@ -3500,6 +3814,11 @@ html-tags@^3.1.0:
|
||||
resolved "https://registry.npmmirror.com/html-tags/-/html-tags-3.2.0.tgz#dbb3518d20b726524e4dd43de397eb0a95726961"
|
||||
integrity sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==
|
||||
|
||||
html-void-elements@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.npmmirror.com/html-void-elements/-/html-void-elements-2.0.1.tgz#29459b8b05c200b6c5ee98743c41b979d577549f"
|
||||
integrity sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==
|
||||
|
||||
html-webpack-plugin@^5.1.0:
|
||||
version "5.5.0"
|
||||
resolved "https://registry.npmmirror.com/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz#c3911936f57681c1f9f4d8b68c158cd9dfe52f50"
|
||||
@ -3577,6 +3896,13 @@ human-signals@^2.1.0:
|
||||
resolved "https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
|
||||
integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
|
||||
|
||||
i18next@^20.4.0:
|
||||
version "20.6.1"
|
||||
resolved "https://registry.npmmirror.com/i18next/-/i18next-20.6.1.tgz#535e5f6e5baeb685c7d25df70db63bf3cc0aa345"
|
||||
integrity sha512-yCMYTMEJ9ihCwEQQ3phLo7I/Pwycf8uAx+sRHwwk5U9Aui/IZYgQRyMqXafQOw5QQ7DM1Z+WyEXWIqSuJHhG2A==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.12.0"
|
||||
|
||||
iconv-lite@0.4.24:
|
||||
version "0.4.24"
|
||||
resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
|
||||
@ -3604,6 +3930,11 @@ ignore@^5.2.0:
|
||||
resolved "https://registry.npmmirror.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a"
|
||||
integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==
|
||||
|
||||
immer@^9.0.6:
|
||||
version "9.0.12"
|
||||
resolved "https://registry.npmmirror.com/immer/-/immer-9.0.12.tgz#2d33ddf3ee1d247deab9d707ca472c8c942a0f20"
|
||||
integrity sha512-lk7UNmSbAukB5B6dh9fnh5D0bJTOFKxVg2cyJWTYrWRfhLrLMBquONcUs3aFq507hNoIZEDDh8lb8UtOizSMhA==
|
||||
|
||||
immutable@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.npmmirror.com/immutable/-/immutable-4.0.0.tgz#b86f78de6adef3608395efb269a91462797e2c23"
|
||||
@ -3640,6 +3971,13 @@ inherits@2.0.3:
|
||||
resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
|
||||
integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==
|
||||
|
||||
invariant@^2.2.4:
|
||||
version "2.2.4"
|
||||
resolved "https://registry.npmmirror.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
|
||||
integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
|
||||
dependencies:
|
||||
loose-envify "^1.0.0"
|
||||
|
||||
ipaddr.js@1.9.1:
|
||||
version "1.9.1"
|
||||
resolved "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
|
||||
@ -3710,6 +4048,11 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
|
||||
dependencies:
|
||||
is-extglob "^2.1.1"
|
||||
|
||||
is-hotkey@^0.2.0:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.npmmirror.com/is-hotkey/-/is-hotkey-0.2.0.tgz#1835a68171a91e5c9460869d96336947c8340cef"
|
||||
integrity sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==
|
||||
|
||||
is-interactive@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npmmirror.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e"
|
||||
@ -3732,6 +4075,11 @@ is-plain-object@^2.0.4:
|
||||
dependencies:
|
||||
isobject "^3.0.1"
|
||||
|
||||
is-plain-object@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344"
|
||||
integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==
|
||||
|
||||
is-stream@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.npmmirror.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
|
||||
@ -3747,6 +4095,11 @@ is-unicode-supported@^0.1.0:
|
||||
resolved "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
|
||||
integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
|
||||
|
||||
is-url@^1.2.4:
|
||||
version "1.2.4"
|
||||
resolved "https://registry.npmmirror.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52"
|
||||
integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==
|
||||
|
||||
is-wsl@^2.1.1, is-wsl@^2.2.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
|
||||
@ -3799,7 +4152,7 @@ js-message@1.0.7:
|
||||
resolved "https://registry.npmmirror.com/js-message/-/js-message-1.0.7.tgz#fbddd053c7a47021871bb8b2c95397cc17c20e47"
|
||||
integrity sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==
|
||||
|
||||
js-tokens@^4.0.0:
|
||||
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
|
||||
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
|
||||
@ -3941,6 +4294,26 @@ locate-path@^5.0.0:
|
||||
dependencies:
|
||||
p-locate "^4.1.0"
|
||||
|
||||
lodash-es@^4.17.21, lodash-es@^4.2.1:
|
||||
version "4.17.21"
|
||||
resolved "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee"
|
||||
integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
|
||||
|
||||
lodash-unified@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.2.tgz#bb2694db3533781e5cce984af60cfaea318b83c1"
|
||||
integrity sha512-OGbEy+1P+UT26CYi4opY4gebD8cWRDxAT6MAObIVQMiqYdxZr1g3QHWCToVsm31x2NkLS4K3+MC2qInaRMa39g==
|
||||
|
||||
lodash.camelcase@^4.3.0:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.npmmirror.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
|
||||
integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==
|
||||
|
||||
lodash.clonedeep@^4.5.0:
|
||||
version "4.5.0"
|
||||
resolved "https://registry.npmmirror.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
|
||||
integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==
|
||||
|
||||
lodash.debounce@^4.0.8:
|
||||
version "4.0.8"
|
||||
resolved "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
|
||||
@ -3951,6 +4324,16 @@ lodash.defaultsdeep@^4.6.1:
|
||||
resolved "https://registry.npmmirror.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6"
|
||||
integrity sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==
|
||||
|
||||
lodash.foreach@^4.5.0:
|
||||
version "4.5.0"
|
||||
resolved "https://registry.npmmirror.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53"
|
||||
integrity sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==
|
||||
|
||||
lodash.isequal@^4.5.0:
|
||||
version "4.5.0"
|
||||
resolved "https://registry.npmmirror.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0"
|
||||
integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==
|
||||
|
||||
lodash.kebabcase@^4.1.1:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.npmmirror.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36"
|
||||
@ -3976,6 +4359,16 @@ lodash.sortby@^4.7.0:
|
||||
resolved "https://registry.npmmirror.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
|
||||
integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==
|
||||
|
||||
lodash.throttle@^4.1.1:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.npmmirror.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4"
|
||||
integrity sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==
|
||||
|
||||
lodash.toarray@^4.4.0:
|
||||
version "4.4.0"
|
||||
resolved "https://registry.npmmirror.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561"
|
||||
integrity sha512-QyffEA3i5dma5q2490+SgCvDN0pXLmRGSyAANuVi0HQ01Pkfr9fuoKQW8wm1wGBnJITs/mS7wQvS6VshUEBFCw==
|
||||
|
||||
lodash.truncate@^4.4.2:
|
||||
version "4.4.2"
|
||||
resolved "https://registry.npmmirror.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193"
|
||||
@ -3986,7 +4379,7 @@ lodash.uniq@^4.5.0:
|
||||
resolved "https://registry.npmmirror.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
|
||||
integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==
|
||||
|
||||
lodash@^4.17.14, lodash@^4.17.20, lodash@^4.17.21:
|
||||
lodash@^4.17.14, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.2.1:
|
||||
version "4.17.21"
|
||||
resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
|
||||
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
|
||||
@ -4008,6 +4401,13 @@ log-update@^2.3.0:
|
||||
cli-cursor "^2.0.0"
|
||||
wrap-ansi "^3.0.1"
|
||||
|
||||
loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
|
||||
integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
|
||||
dependencies:
|
||||
js-tokens "^3.0.0 || ^4.0.0"
|
||||
|
||||
lower-case@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.npmmirror.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28"
|
||||
@ -4061,6 +4461,11 @@ memfs@^3.4.1:
|
||||
dependencies:
|
||||
fs-monkey "1.0.3"
|
||||
|
||||
memoize-one@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045"
|
||||
integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==
|
||||
|
||||
merge-descriptors@1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
|
||||
@ -4101,6 +4506,13 @@ mime-db@1.52.0, "mime-db@>= 1.43.0 < 2":
|
||||
resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
|
||||
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
|
||||
|
||||
mime-match@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.npmmirror.com/mime-match/-/mime-match-1.0.2.tgz#3f87c31e9af1a5fd485fb9db134428b23bbb7ba8"
|
||||
integrity sha512-VXp/ugGDVh3eCLOBCiHZMYWQaTNUHv2IJrut+yXA6+JbLPXHglHwfS/5A5L0ll+jkCY7fIzRJcH6OIunF+c6Cg==
|
||||
dependencies:
|
||||
wildcard "^1.1.0"
|
||||
|
||||
mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34:
|
||||
version "2.1.35"
|
||||
resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
|
||||
@ -4203,7 +4615,12 @@ mz@^2.4.0:
|
||||
object-assign "^4.0.1"
|
||||
thenify-all "^1.0.0"
|
||||
|
||||
nanoid@^3.3.1:
|
||||
namespace-emitter@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.npmmirror.com/namespace-emitter/-/namespace-emitter-2.0.1.tgz#978d51361c61313b4e6b8cf6f3853d08dfa2b17c"
|
||||
integrity sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g==
|
||||
|
||||
nanoid@^3.1.25, nanoid@^3.2.0, nanoid@^3.3.1:
|
||||
version "3.3.3"
|
||||
resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25"
|
||||
integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==
|
||||
@ -4223,6 +4640,11 @@ neo-async@^2.6.2:
|
||||
resolved "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
|
||||
integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
|
||||
|
||||
next-tick@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.npmmirror.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb"
|
||||
integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==
|
||||
|
||||
nice-try@^1.0.4:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.npmmirror.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
|
||||
@ -4283,6 +4705,11 @@ normalize-url@^6.0.1:
|
||||
resolved "https://registry.npmmirror.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a"
|
||||
integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==
|
||||
|
||||
normalize-wheel-es@^1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.1.2.tgz#285e43676a62d687bf145e33452ea6be435162d0"
|
||||
integrity sha512-scX83plWJXYH1J4+BhAuIHadROzxX0UBF3+HuZNY2Ks8BciE7tSTQ+5JhTsvzjaO0/EJdm4JBGrfObKxFf3Png==
|
||||
|
||||
npm-run-path@^2.0.0:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
|
||||
@ -4304,7 +4731,7 @@ nth-check@^2.0.1:
|
||||
dependencies:
|
||||
boolbase "^1.0.0"
|
||||
|
||||
object-assign@^4.0.1:
|
||||
object-assign@^4.0.1, object-assign@^4.1.1:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
|
||||
integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
|
||||
@ -4824,6 +5251,11 @@ postcss@^8.1.10, postcss@^8.2.6, postcss@^8.3.5, postcss@^8.4.7:
|
||||
picocolors "^1.0.0"
|
||||
source-map-js "^1.0.2"
|
||||
|
||||
preact@^10.5.13:
|
||||
version "10.7.1"
|
||||
resolved "https://registry.npmmirror.com/preact/-/preact-10.7.1.tgz#bdd2b2dce91a5842c3b9b34dfe050e5401068c9e"
|
||||
integrity sha512-MufnRFz39aIhs9AMFisonjzTud1PK1bY+jcJLo6m2T9Uh8AqjD77w11eAAawmjUogoGOnipECq7e/1RClIKsxg==
|
||||
|
||||
prelude-ls@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
|
||||
@ -4849,6 +5281,11 @@ pretty-error@^4.0.0:
|
||||
lodash "^4.17.20"
|
||||
renderkid "^3.0.0"
|
||||
|
||||
prismjs@^1.23.0:
|
||||
version "1.28.0"
|
||||
resolved "https://registry.npmmirror.com/prismjs/-/prismjs-1.28.0.tgz#0d8f561fa0f7cf6ebca901747828b149147044b6"
|
||||
integrity sha512-8aaXdYvl1F7iC7Xm1spqSaY/OJBpYW3v+KJ+F17iYxvdc8sfjW194COK5wVhMZX45tGteiBQgdvD/nhxcRwylw==
|
||||
|
||||
process-nextick-args@~2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
|
||||
@ -4868,6 +5305,15 @@ progress@^2.0.0:
|
||||
resolved "https://registry.npmmirror.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
|
||||
integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
|
||||
|
||||
prop-types@^15.6.2, prop-types@^15.7.2:
|
||||
version "15.8.1"
|
||||
resolved "https://registry.npmmirror.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
|
||||
integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
|
||||
dependencies:
|
||||
loose-envify "^1.4.0"
|
||||
object-assign "^4.1.1"
|
||||
react-is "^16.13.1"
|
||||
|
||||
proxy-addr@~2.0.7:
|
||||
version "2.0.7"
|
||||
resolved "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
|
||||
@ -4928,6 +5374,43 @@ raw-body@2.5.1:
|
||||
iconv-lite "0.4.24"
|
||||
unpipe "1.0.0"
|
||||
|
||||
react-dom@16.8.6:
|
||||
version "16.8.6"
|
||||
resolved "https://registry.npmmirror.com/react-dom/-/react-dom-16.8.6.tgz#71d6303f631e8b0097f56165ef608f051ff6e10f"
|
||||
integrity sha512-1nL7PIq9LTL3fthPqwkvr2zY7phIPjYrT0jp4HjyEQrEROnw4dG41VVwi/wfoCneoleqrNX7iAD+pXebJZwrwA==
|
||||
dependencies:
|
||||
loose-envify "^1.1.0"
|
||||
object-assign "^4.1.1"
|
||||
prop-types "^15.6.2"
|
||||
scheduler "^0.13.6"
|
||||
|
||||
react-is@^16.13.1, react-is@^16.7.0, react-is@^16.8.6:
|
||||
version "16.13.1"
|
||||
resolved "https://registry.npmmirror.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
|
||||
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
|
||||
|
||||
react-redux@7.1.0:
|
||||
version "7.1.0"
|
||||
resolved "https://registry.npmmirror.com/react-redux/-/react-redux-7.1.0.tgz#72af7cf490a74acdc516ea9c1dd80e25af9ea0b2"
|
||||
integrity sha512-hyu/PoFK3vZgdLTg9ozbt7WF3GgX5+Yn3pZm5/96/o4UueXA+zj08aiSC9Mfj2WtD1bvpIb3C5yvskzZySzzaw==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.4.5"
|
||||
hoist-non-react-statics "^3.3.0"
|
||||
invariant "^2.2.4"
|
||||
loose-envify "^1.4.0"
|
||||
prop-types "^15.7.2"
|
||||
react-is "^16.8.6"
|
||||
|
||||
react@16.8.6:
|
||||
version "16.8.6"
|
||||
resolved "https://registry.npmmirror.com/react/-/react-16.8.6.tgz#ad6c3a9614fd3a4e9ef51117f54d888da01f2bbe"
|
||||
integrity sha512-pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw==
|
||||
dependencies:
|
||||
loose-envify "^1.1.0"
|
||||
object-assign "^4.1.1"
|
||||
prop-types "^15.6.2"
|
||||
scheduler "^0.13.6"
|
||||
|
||||
read-pkg-up@^7.0.1:
|
||||
version "7.0.1"
|
||||
resolved "https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507"
|
||||
@ -4976,6 +5459,21 @@ readdirp@~3.6.0:
|
||||
dependencies:
|
||||
picomatch "^2.2.1"
|
||||
|
||||
redux-thunk@2.2.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.npmmirror.com/redux-thunk/-/redux-thunk-2.2.0.tgz#e615a16e16b47a19a515766133d1e3e99b7852e5"
|
||||
integrity sha512-OOFWh9mt/7i94QPq4IAxhSIUyfIJJRnk6pe1IwgXethQik3kyg1wuxVZZlW9QOmL5rP/MrwzV+Cb+/HBKlvM8Q==
|
||||
|
||||
redux@3.7.2:
|
||||
version "3.7.2"
|
||||
resolved "https://registry.npmmirror.com/redux/-/redux-3.7.2.tgz#06b73123215901d25d065be342eb026bc1c8537b"
|
||||
integrity sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==
|
||||
dependencies:
|
||||
lodash "^4.2.1"
|
||||
lodash-es "^4.2.1"
|
||||
loose-envify "^1.1.0"
|
||||
symbol-observable "^1.0.3"
|
||||
|
||||
regenerate-unicode-properties@^10.0.1:
|
||||
version "10.0.1"
|
||||
resolved "https://registry.npmmirror.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56"
|
||||
@ -5146,6 +5644,14 @@ sass@^1.32.7:
|
||||
immutable "^4.0.0"
|
||||
source-map-js ">=0.6.2 <2.0.0"
|
||||
|
||||
scheduler@^0.13.6:
|
||||
version "0.13.6"
|
||||
resolved "https://registry.npmmirror.com/scheduler/-/scheduler-0.13.6.tgz#466a4ec332467b31a91b9bf74e5347072e4cd889"
|
||||
integrity sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==
|
||||
dependencies:
|
||||
loose-envify "^1.1.0"
|
||||
object-assign "^4.1.1"
|
||||
|
||||
schema-utils@^2.6.5:
|
||||
version "2.7.1"
|
||||
resolved "https://registry.npmmirror.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7"
|
||||
@ -5174,6 +5680,13 @@ schema-utils@^4.0.0:
|
||||
ajv-formats "^2.1.1"
|
||||
ajv-keywords "^5.0.0"
|
||||
|
||||
scroll-into-view-if-needed@^2.2.28:
|
||||
version "2.2.29"
|
||||
resolved "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.29.tgz#551791a84b7e2287706511f8c68161e4990ab885"
|
||||
integrity sha512-hxpAR6AN+Gh53AdAimHM6C8oTN1ppwVZITihix+WqalywBeFcQ6LdQP5ABNl26nX8GTEL7VT+b8lKpdqq65wXg==
|
||||
dependencies:
|
||||
compute-scroll-into-view "^1.0.17"
|
||||
|
||||
select-hose@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npmmirror.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
|
||||
@ -5331,6 +5844,22 @@ slash@^3.0.0:
|
||||
resolved "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
|
||||
integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
|
||||
|
||||
slate-history@^0.66.0:
|
||||
version "0.66.0"
|
||||
resolved "https://registry.npmmirror.com/slate-history/-/slate-history-0.66.0.tgz#ac63fddb903098ceb4c944433e3f75fe63acf940"
|
||||
integrity sha512-6MWpxGQZiMvSINlCbMW43E2YBSVMCMCIwQfBzGssjWw4kb0qfvj0pIdblWNRQZD0hR6WHP+dHHgGSeVdMWzfng==
|
||||
dependencies:
|
||||
is-plain-object "^5.0.0"
|
||||
|
||||
slate@^0.72.0:
|
||||
version "0.72.8"
|
||||
resolved "https://registry.npmmirror.com/slate/-/slate-0.72.8.tgz#5a018edf24e45448655293a68bfbcf563aa5ba81"
|
||||
integrity sha512-/nJwTswQgnRurpK+bGJFH1oM7naD5qDmHd89JyiKNT2oOKD8marW0QSBtuFnwEbL5aGCS8AmrhXQgNOsn4osAw==
|
||||
dependencies:
|
||||
immer "^9.0.6"
|
||||
is-plain-object "^5.0.0"
|
||||
tiny-warning "^1.0.3"
|
||||
|
||||
slice-ansi@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b"
|
||||
@ -5340,6 +5869,11 @@ slice-ansi@^4.0.0:
|
||||
astral-regex "^2.0.0"
|
||||
is-fullwidth-code-point "^3.0.0"
|
||||
|
||||
snabbdom@^3.1.0:
|
||||
version "3.5.0"
|
||||
resolved "https://registry.npmmirror.com/snabbdom/-/snabbdom-3.5.0.tgz#e75acbdedb26ea327c75028a433ba064db0ccf6e"
|
||||
integrity sha512-Ff5BKG18KrrPuskHJlA9aujPHqEabItaDl96l7ZZndF4zt5AYSczz7ZjjgQAX5IBd5cd25lw9NfgX21yVUJ+9g==
|
||||
|
||||
sockjs@^0.3.21:
|
||||
version "0.3.24"
|
||||
resolved "https://registry.npmmirror.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce"
|
||||
@ -5438,6 +5972,11 @@ sprintf-js@~1.0.2:
|
||||
resolved "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
|
||||
integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
|
||||
|
||||
ssr-window@^3.0.0-alpha.1:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npmmirror.com/ssr-window/-/ssr-window-3.0.0.tgz#fd5b82801638943e0cc704c4691801435af7ac37"
|
||||
integrity sha512-q+8UfWDg9Itrg0yWK7oe5p/XRCJpJF9OBtXfOPgSJl+u3Xd5KI328RUEvUqSMVM9CiQUEf1QdBzJMkYGErj9QA==
|
||||
|
||||
ssri@^8.0.1:
|
||||
version "8.0.1"
|
||||
resolved "https://registry.npmmirror.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af"
|
||||
@ -5582,6 +6121,11 @@ svgo@^2.7.0:
|
||||
picocolors "^1.0.0"
|
||||
stable "^0.1.8"
|
||||
|
||||
symbol-observable@^1.0.3:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.npmmirror.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
|
||||
integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
|
||||
|
||||
table@^6.0.9:
|
||||
version "6.8.0"
|
||||
resolved "https://registry.npmmirror.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca"
|
||||
@ -5654,6 +6198,11 @@ thunky@^1.0.2:
|
||||
resolved "https://registry.npmmirror.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d"
|
||||
integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==
|
||||
|
||||
tiny-warning@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.npmmirror.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
|
||||
integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==
|
||||
|
||||
to-fast-properties@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
|
||||
@ -5723,6 +6272,16 @@ type-is@~1.6.18:
|
||||
media-typer "0.3.0"
|
||||
mime-types "~2.1.24"
|
||||
|
||||
type@^1.0.1:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.npmmirror.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0"
|
||||
integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==
|
||||
|
||||
type@^2.5.0:
|
||||
version "2.6.0"
|
||||
resolved "https://registry.npmmirror.com/type/-/type-2.6.0.tgz#3ca6099af5981d36ca86b78442973694278a219f"
|
||||
integrity sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==
|
||||
|
||||
unicode-canonical-property-names-ecmascript@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npmmirror.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc"
|
||||
@ -5801,6 +6360,11 @@ vary@~1.1.2:
|
||||
resolved "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
|
||||
integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
|
||||
|
||||
vue-demi@*:
|
||||
version "0.12.5"
|
||||
resolved "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.12.5.tgz#8eeed566a7d86eb090209a11723f887d28aeb2d1"
|
||||
integrity sha512-BREuTgTYlUr0zw0EZn3hnhC3I6gPWv+Kwh4MCih6QcAeaTlaIX0DwOVN0wHej7hSvDPecz4jygy/idsgKfW58Q==
|
||||
|
||||
vue-eslint-parser@^8.0.1:
|
||||
version "8.3.0"
|
||||
resolved "https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz#5d31129a1b3dd89c0069ca0a1c88f970c360bd0d"
|
||||
@ -6065,6 +6629,11 @@ which@^2.0.1:
|
||||
dependencies:
|
||||
isexe "^2.0.0"
|
||||
|
||||
wildcard@^1.1.0:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.npmmirror.com/wildcard/-/wildcard-1.1.2.tgz#a7020453084d8cd2efe70ba9d3696263de1710a5"
|
||||
integrity sha512-DXukZJxpHA8LuotRwL0pP1+rS6CS7FF2qStDDE1C7DDg2rLud2PXRMuEDYIPhgEezwnlHNL4c+N6MfMTjCGTng==
|
||||
|
||||
wildcard@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npmmirror.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec"
|
||||
|
Reference in New Issue
Block a user