mirror of
https://github.com/pure-admin/vue-pure-admin.git
synced 2025-06-06 16:37:18 +08:00
refactor: use setup refactor
This commit is contained in:
parent
67db3cb1c3
commit
85f4917f26
14
.eslintrc.js
14
.eslintrc.js
@ -11,6 +11,20 @@ module.exports = {
|
|||||||
$shallowRef: "readonly",
|
$shallowRef: "readonly",
|
||||||
$computed: "readonly",
|
$computed: "readonly",
|
||||||
|
|
||||||
|
// index.d.ts
|
||||||
|
// global.d.ts
|
||||||
|
Fn: "readonly",
|
||||||
|
PromiseFn: "readonly",
|
||||||
|
RefType: "readonly",
|
||||||
|
LabelValueOptions: "readonly",
|
||||||
|
EmitType: "readonly",
|
||||||
|
TargetContext: "readonly",
|
||||||
|
ComponentElRef: "readonly",
|
||||||
|
ComponentRef: "readonly",
|
||||||
|
ElRef: "readonly",
|
||||||
|
global: "readonly",
|
||||||
|
ForDataType: "readonly",
|
||||||
|
|
||||||
// script setup
|
// script setup
|
||||||
defineProps: "readonly",
|
defineProps: "readonly",
|
||||||
defineEmits: "readonly",
|
defineEmits: "readonly",
|
||||||
|
10
package.json
10
package.json
@ -8,7 +8,7 @@
|
|||||||
"build": "rimraf dist && cross-env vite build",
|
"build": "rimraf dist && cross-env vite build",
|
||||||
"preview": "vite preview",
|
"preview": "vite preview",
|
||||||
"preview:build": "yarn build && vite preview",
|
"preview:build": "yarn build && vite preview",
|
||||||
"clean:cache": "rm -rf node_modules && rm -rf .eslintcache && yarn cache clean && yarn install",
|
"clean:cache": "rm -rf node_modules && rm -rf .eslintcache && yarn cache clean && yarn",
|
||||||
"lint:eslint": "eslint --cache --max-warnings 0 \"{src,mock}/**/*.{vue,ts,tsx}\" --fix",
|
"lint:eslint": "eslint --cache --max-warnings 0 \"{src,mock}/**/*.{vue,ts,tsx}\" --fix",
|
||||||
"lint:prettier": "prettier --write \"src/**/*.{js,json,tsx,css,less,scss,vue,html,md}\"",
|
"lint:prettier": "prettier --write \"src/**/*.{js,json,tsx,css,less,scss,vue,html,md}\"",
|
||||||
"lint:stylelint": "stylelint --cache --fix \"**/*.{vue,css,scss,postcss,less}\" --cache --cache-location node_modules/.cache/stylelint/",
|
"lint:stylelint": "stylelint --cache --fix \"**/*.{vue,css,scss,postcss,less}\" --cache --cache-location node_modules/.cache/stylelint/",
|
||||||
@ -21,7 +21,7 @@
|
|||||||
"@amap/amap-jsapi-loader": "^1.0.1",
|
"@amap/amap-jsapi-loader": "^1.0.1",
|
||||||
"@logicflow/core": "^0.4.6",
|
"@logicflow/core": "^0.4.6",
|
||||||
"@logicflow/extension": "^0.4.6",
|
"@logicflow/extension": "^0.4.6",
|
||||||
"@vueuse/core": "^6.0.0",
|
"@vueuse/core": "^6.4.1",
|
||||||
"animate.css": "^4.1.1",
|
"animate.css": "^4.1.1",
|
||||||
"await-to-js": "^3.0.0",
|
"await-to-js": "^3.0.0",
|
||||||
"axios": "^0.21.1",
|
"axios": "^0.21.1",
|
||||||
@ -43,11 +43,11 @@
|
|||||||
"responsive-storage": "^1.0.9",
|
"responsive-storage": "^1.0.9",
|
||||||
"sortablejs": "1.13.0",
|
"sortablejs": "1.13.0",
|
||||||
"v-contextmenu": "^3.0.0",
|
"v-contextmenu": "^3.0.0",
|
||||||
"vue": "^3.2.11",
|
"vue": "^3.2.12",
|
||||||
"vue-i18n": "^9.2.0-beta.3",
|
"vue-i18n": "^9.2.0-beta.3",
|
||||||
"vue-json-pretty": "^2.0.2",
|
"vue-json-pretty": "^2.0.2",
|
||||||
"vue-router": "^4.0.11",
|
"vue-router": "^4.0.11",
|
||||||
"vue-types": "^4.0.3",
|
"vue-types": "^4.1.0",
|
||||||
"vuedraggable": "^4.1.0",
|
"vuedraggable": "^4.1.0",
|
||||||
"vxe-table": "^4.0.27",
|
"vxe-table": "^4.0.27",
|
||||||
"wangeditor": "^4.7.7",
|
"wangeditor": "^4.7.7",
|
||||||
@ -66,7 +66,7 @@
|
|||||||
"@typescript-eslint/parser": "^4.31.0",
|
"@typescript-eslint/parser": "^4.31.0",
|
||||||
"@vitejs/plugin-vue": "^1.6.0",
|
"@vitejs/plugin-vue": "^1.6.0",
|
||||||
"@vitejs/plugin-vue-jsx": "^1.1.7",
|
"@vitejs/plugin-vue-jsx": "^1.1.7",
|
||||||
"@vue/compiler-sfc": "^3.2.11",
|
"@vue/compiler-sfc": "^3.2.12",
|
||||||
"@vue/eslint-config-prettier": "^6.0.0",
|
"@vue/eslint-config-prettier": "^6.0.0",
|
||||||
"@vue/eslint-config-typescript": "^7.0.0",
|
"@vue/eslint-config-typescript": "^7.0.0",
|
||||||
"autoprefixer": "^10.2.4",
|
"autoprefixer": "^10.2.4",
|
||||||
|
@ -1,3 +1,52 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { ref, watch, Ref } from "vue";
|
||||||
|
import { useRoute, useRouter, RouteLocationMatched } from "vue-router";
|
||||||
|
|
||||||
|
const levelList: Ref<RouteLocationMatched[]> = ref([]);
|
||||||
|
const route = useRoute();
|
||||||
|
const router = useRouter();
|
||||||
|
|
||||||
|
const isDashboard = (route: RouteLocationMatched): boolean | string => {
|
||||||
|
const name = route && (route.name as string);
|
||||||
|
if (!name) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return name.trim().toLocaleLowerCase() === "welcome".toLocaleLowerCase();
|
||||||
|
};
|
||||||
|
|
||||||
|
const getBreadcrumb = (): void => {
|
||||||
|
let matched = route.matched.filter(item => item.meta && item.meta.title);
|
||||||
|
const first = matched[0];
|
||||||
|
if (!isDashboard(first)) {
|
||||||
|
matched = [
|
||||||
|
{
|
||||||
|
path: "/welcome",
|
||||||
|
meta: { title: "message.hshome" }
|
||||||
|
} as unknown as RouteLocationMatched
|
||||||
|
].concat(matched);
|
||||||
|
}
|
||||||
|
levelList.value = matched.filter(
|
||||||
|
item => item.meta && item.meta.title && item.meta.breadcrumb !== false
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
getBreadcrumb();
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => route.path,
|
||||||
|
() => getBreadcrumb()
|
||||||
|
);
|
||||||
|
|
||||||
|
const handleLink = (item: RouteLocationMatched): any => {
|
||||||
|
const { redirect, path } = item;
|
||||||
|
if (redirect) {
|
||||||
|
router.push(redirect.toString());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
router.push(path);
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-breadcrumb class="app-breadcrumb" separator="/">
|
<el-breadcrumb class="app-breadcrumb" separator="/">
|
||||||
<transition-group appear name="breadcrumb">
|
<transition-group appear name="breadcrumb">
|
||||||
@ -15,62 +64,6 @@
|
|||||||
</el-breadcrumb>
|
</el-breadcrumb>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
|
||||||
import { ref, defineComponent, watch, Ref } from "vue";
|
|
||||||
import { useRoute, useRouter, RouteLocationMatched } from "vue-router";
|
|
||||||
|
|
||||||
export default defineComponent({
|
|
||||||
name: "ReBreadCrumb",
|
|
||||||
setup() {
|
|
||||||
const levelList: Ref<RouteLocationMatched[]> = ref([]);
|
|
||||||
const route = useRoute();
|
|
||||||
const router = useRouter();
|
|
||||||
|
|
||||||
const isDashboard = (route: RouteLocationMatched): boolean | string => {
|
|
||||||
const name = route && (route.name as string);
|
|
||||||
if (!name) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return name.trim().toLocaleLowerCase() === "welcome".toLocaleLowerCase();
|
|
||||||
};
|
|
||||||
|
|
||||||
const getBreadcrumb = (): void => {
|
|
||||||
let matched = route.matched.filter(item => item.meta && item.meta.title);
|
|
||||||
const first = matched[0];
|
|
||||||
if (!isDashboard(first)) {
|
|
||||||
matched = [
|
|
||||||
{
|
|
||||||
path: "/welcome",
|
|
||||||
meta: { title: "message.hshome" }
|
|
||||||
} as unknown as RouteLocationMatched
|
|
||||||
].concat(matched);
|
|
||||||
}
|
|
||||||
levelList.value = matched.filter(
|
|
||||||
item => item.meta && item.meta.title && item.meta.breadcrumb !== false
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
getBreadcrumb();
|
|
||||||
|
|
||||||
watch(
|
|
||||||
() => route.path,
|
|
||||||
() => getBreadcrumb()
|
|
||||||
);
|
|
||||||
|
|
||||||
const handleLink = (item: RouteLocationMatched): any => {
|
|
||||||
const { redirect, path } = item;
|
|
||||||
if (redirect) {
|
|
||||||
router.push(redirect.toString());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
router.push(path);
|
|
||||||
};
|
|
||||||
|
|
||||||
return { levelList, handleLink };
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.app-breadcrumb.el-breadcrumb {
|
.app-breadcrumb.el-breadcrumb {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
|
@ -1,3 +1,109 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { ref, unref, nextTick, onUnmounted } from "vue";
|
||||||
|
import { templateRef } from "@vueuse/core";
|
||||||
|
import flippers from "./Filpper";
|
||||||
|
|
||||||
|
let timer = ref(null);
|
||||||
|
let flipObjs = ref([]);
|
||||||
|
|
||||||
|
const flipperHour1 = templateRef<HTMLElement | null>("flipperHour1", null);
|
||||||
|
const flipperHour2 = templateRef<HTMLElement | null>("flipperHour2", null);
|
||||||
|
const flipperMinute1 = templateRef<HTMLElement | null>("flipperMinute1", null);
|
||||||
|
const flipperMinute2 = templateRef<HTMLElement | null>("flipperMinute2", null);
|
||||||
|
const flipperSecond1 = templateRef<HTMLElement | null>("flipperSecond1", null);
|
||||||
|
const flipperSecond2 = templateRef<HTMLElement | null>("flipperSecond2", null);
|
||||||
|
|
||||||
|
// 初始化数字
|
||||||
|
const init = () => {
|
||||||
|
let now = new Date();
|
||||||
|
let nowTimeStr = formatDate(new Date(now.getTime()), "hhiiss");
|
||||||
|
for (let i = 0; i < flipObjs.value.length; i++) {
|
||||||
|
flipObjs?.value[i]?.setFront(nowTimeStr[i]);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 开始计时
|
||||||
|
const run = () => {
|
||||||
|
timer.value = setInterval(() => {
|
||||||
|
// 获取当前时间
|
||||||
|
let now = new Date();
|
||||||
|
let nowTimeStr = formatDate(new Date(now.getTime() - 1000), "hhiiss");
|
||||||
|
let nextTimeStr = formatDate(now, "hhiiss");
|
||||||
|
for (let i = 0; i < flipObjs.value.length; i++) {
|
||||||
|
if (nowTimeStr[i] === nextTimeStr[i]) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
flipObjs?.value[i]?.flipDown(nowTimeStr[i], nextTimeStr[i]);
|
||||||
|
}
|
||||||
|
}, 1000);
|
||||||
|
};
|
||||||
|
|
||||||
|
// 正则格式化日期
|
||||||
|
const formatDate = (date: Date, dateFormat: string) => {
|
||||||
|
/* 单独格式化年份,根据y的字符数量输出年份
|
||||||
|
* 例如:yyyy => 2019
|
||||||
|
yy => 19
|
||||||
|
y => 9
|
||||||
|
*/
|
||||||
|
if (/(y+)/.test(dateFormat)) {
|
||||||
|
dateFormat = dateFormat.replace(
|
||||||
|
RegExp.$1,
|
||||||
|
(date.getFullYear() + "").substr(4 - RegExp.$1.length)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
// 格式化月、日、时、分、秒
|
||||||
|
let o = {
|
||||||
|
"m+": date.getMonth() + 1,
|
||||||
|
"d+": date.getDate(),
|
||||||
|
"h+": date.getHours(),
|
||||||
|
"i+": date.getMinutes(),
|
||||||
|
"s+": date.getSeconds()
|
||||||
|
};
|
||||||
|
for (let k in o) {
|
||||||
|
if (new RegExp(`(${k})`).test(dateFormat)) {
|
||||||
|
// 取出对应的值
|
||||||
|
let str = o[k] + "";
|
||||||
|
/* 根据设置的格式,输出对应的字符
|
||||||
|
* 例如: 早上8时,hh => 08,h => 8
|
||||||
|
* 但是,当数字>=10时,无论格式为一位还是多位,不做截取,这是与年份格式化不一致的地方
|
||||||
|
* 例如: 下午15时,hh => 15, h => 15
|
||||||
|
*/
|
||||||
|
dateFormat = dateFormat.replace(
|
||||||
|
RegExp.$1,
|
||||||
|
RegExp.$1.length === 1 ? str : padLeftZero(str)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dateFormat;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 日期时间补零
|
||||||
|
const padLeftZero = (str: string | any[]) => {
|
||||||
|
return ("00" + str).substr(str.length);
|
||||||
|
};
|
||||||
|
|
||||||
|
nextTick(() => {
|
||||||
|
flipObjs.value = [
|
||||||
|
unref(flipperHour1),
|
||||||
|
unref(flipperHour2),
|
||||||
|
unref(flipperMinute1),
|
||||||
|
unref(flipperMinute2),
|
||||||
|
unref(flipperSecond1),
|
||||||
|
unref(flipperSecond2)
|
||||||
|
];
|
||||||
|
|
||||||
|
init();
|
||||||
|
run();
|
||||||
|
});
|
||||||
|
|
||||||
|
onUnmounted(() => {
|
||||||
|
if (timer.value) {
|
||||||
|
clearInterval(timer.value);
|
||||||
|
timer.value = null;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="flip-clock">
|
<div class="flip-clock">
|
||||||
<flippers ref="flipperHour1" />
|
<flippers ref="flipperHour1" />
|
||||||
@ -11,147 +117,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
|
||||||
import { ref, unref, nextTick, onUnmounted } from "vue";
|
|
||||||
import flippers from "./Filpper";
|
|
||||||
|
|
||||||
import { templateRef } from "@vueuse/core";
|
|
||||||
export default {
|
|
||||||
name: "Flop",
|
|
||||||
components: {
|
|
||||||
flippers
|
|
||||||
},
|
|
||||||
setup() {
|
|
||||||
let timer = ref(null);
|
|
||||||
let flipObjs = ref([]);
|
|
||||||
|
|
||||||
const flipperHour1 = templateRef<HTMLElement | null>("flipperHour1", null);
|
|
||||||
const flipperHour2 = templateRef<HTMLElement | null>("flipperHour2", null);
|
|
||||||
const flipperMinute1 = templateRef<HTMLElement | null>(
|
|
||||||
"flipperMinute1",
|
|
||||||
null
|
|
||||||
);
|
|
||||||
const flipperMinute2 = templateRef<HTMLElement | null>(
|
|
||||||
"flipperMinute2",
|
|
||||||
null
|
|
||||||
);
|
|
||||||
const flipperSecond1 = templateRef<HTMLElement | null>(
|
|
||||||
"flipperSecond1",
|
|
||||||
null
|
|
||||||
);
|
|
||||||
const flipperSecond2 = templateRef<HTMLElement | null>(
|
|
||||||
"flipperSecond2",
|
|
||||||
null
|
|
||||||
);
|
|
||||||
|
|
||||||
// 初始化数字
|
|
||||||
const init = () => {
|
|
||||||
let now = new Date();
|
|
||||||
let nowTimeStr = formatDate(new Date(now.getTime()), "hhiiss");
|
|
||||||
for (let i = 0; i < flipObjs.value.length; i++) {
|
|
||||||
flipObjs?.value[i]?.setFront(nowTimeStr[i]);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// 开始计时
|
|
||||||
const run = () => {
|
|
||||||
timer.value = setInterval(() => {
|
|
||||||
// 获取当前时间
|
|
||||||
let now = new Date();
|
|
||||||
let nowTimeStr = formatDate(new Date(now.getTime() - 1000), "hhiiss");
|
|
||||||
let nextTimeStr = formatDate(now, "hhiiss");
|
|
||||||
for (let i = 0; i < flipObjs.value.length; i++) {
|
|
||||||
if (nowTimeStr[i] === nextTimeStr[i]) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
flipObjs?.value[i]?.flipDown(nowTimeStr[i], nextTimeStr[i]);
|
|
||||||
}
|
|
||||||
}, 1000);
|
|
||||||
};
|
|
||||||
|
|
||||||
// 正则格式化日期
|
|
||||||
const formatDate = (date: Date, dateFormat: string) => {
|
|
||||||
/* 单独格式化年份,根据y的字符数量输出年份
|
|
||||||
* 例如:yyyy => 2019
|
|
||||||
yy => 19
|
|
||||||
y => 9
|
|
||||||
*/
|
|
||||||
if (/(y+)/.test(dateFormat)) {
|
|
||||||
dateFormat = dateFormat.replace(
|
|
||||||
RegExp.$1,
|
|
||||||
(date.getFullYear() + "").substr(4 - RegExp.$1.length)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
// 格式化月、日、时、分、秒
|
|
||||||
let o = {
|
|
||||||
"m+": date.getMonth() + 1,
|
|
||||||
"d+": date.getDate(),
|
|
||||||
"h+": date.getHours(),
|
|
||||||
"i+": date.getMinutes(),
|
|
||||||
"s+": date.getSeconds()
|
|
||||||
};
|
|
||||||
for (let k in o) {
|
|
||||||
if (new RegExp(`(${k})`).test(dateFormat)) {
|
|
||||||
// 取出对应的值
|
|
||||||
let str = o[k] + "";
|
|
||||||
/* 根据设置的格式,输出对应的字符
|
|
||||||
* 例如: 早上8时,hh => 08,h => 8
|
|
||||||
* 但是,当数字>=10时,无论格式为一位还是多位,不做截取,这是与年份格式化不一致的地方
|
|
||||||
* 例如: 下午15时,hh => 15, h => 15
|
|
||||||
*/
|
|
||||||
dateFormat = dateFormat.replace(
|
|
||||||
RegExp.$1,
|
|
||||||
RegExp.$1.length === 1 ? str : padLeftZero(str)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return dateFormat;
|
|
||||||
};
|
|
||||||
|
|
||||||
// 日期时间补零
|
|
||||||
const padLeftZero = (str: string | any[]) => {
|
|
||||||
return ("00" + str).substr(str.length);
|
|
||||||
};
|
|
||||||
|
|
||||||
nextTick(() => {
|
|
||||||
flipObjs.value = [
|
|
||||||
unref(flipperHour1),
|
|
||||||
unref(flipperHour2),
|
|
||||||
unref(flipperMinute1),
|
|
||||||
unref(flipperMinute2),
|
|
||||||
unref(flipperSecond1),
|
|
||||||
unref(flipperSecond2)
|
|
||||||
];
|
|
||||||
|
|
||||||
init();
|
|
||||||
run();
|
|
||||||
});
|
|
||||||
|
|
||||||
onUnmounted(() => {
|
|
||||||
if (timer.value) {
|
|
||||||
clearInterval(timer.value);
|
|
||||||
timer.value = null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return {
|
|
||||||
timer,
|
|
||||||
flipObjs,
|
|
||||||
init,
|
|
||||||
run,
|
|
||||||
formatDate,
|
|
||||||
padLeftZero,
|
|
||||||
flipperHour1,
|
|
||||||
flipperHour2,
|
|
||||||
flipperMinute1,
|
|
||||||
flipperMinute2,
|
|
||||||
flipperSecond1,
|
|
||||||
flipperSecond2
|
|
||||||
};
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.flip-clock .m-flipper {
|
.flip-clock .m-flipper {
|
||||||
margin: 0 3px;
|
margin: 0 3px;
|
||||||
|
@ -1,3 +1,92 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { ref, unref, onMounted } from "vue";
|
||||||
|
import { templateRef } from "@vueuse/core";
|
||||||
|
import { LogicFlow } from "@logicflow/core";
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
lf: LogicFlow;
|
||||||
|
catTurboData?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
const props = withDefaults(defineProps<Props>(), {
|
||||||
|
lf: null
|
||||||
|
});
|
||||||
|
|
||||||
|
const emit = defineEmits<{
|
||||||
|
(e: "catData"): void;
|
||||||
|
}>();
|
||||||
|
|
||||||
|
const controlButton3 = templateRef<HTMLElement | any>("controlButton3", null);
|
||||||
|
const controlButton4 = templateRef<HTMLElement | any>("controlButton4", null);
|
||||||
|
|
||||||
|
let focusIndex = ref<Number>(-1);
|
||||||
|
let titleLists = ref([
|
||||||
|
{
|
||||||
|
icon: "icon-zoom-out-hs",
|
||||||
|
text: "缩小",
|
||||||
|
disabled: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: "icon-enlarge-hs",
|
||||||
|
text: "放大",
|
||||||
|
disabled: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: "icon-full-screen-hs",
|
||||||
|
text: "适应",
|
||||||
|
disabled: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: "icon-previous-hs",
|
||||||
|
text: "上一步",
|
||||||
|
disabled: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: "icon-next-step-hs",
|
||||||
|
text: "下一步",
|
||||||
|
disabled: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: "icon-download-hs",
|
||||||
|
text: "下载图片",
|
||||||
|
disabled: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: "icon-watch-hs",
|
||||||
|
text: "查看数据",
|
||||||
|
disabled: false
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
|
||||||
|
const onControl = (item, key) => {
|
||||||
|
["zoom", "zoom", "resetZoom", "undo", "redo", "getSnapshot"].forEach(
|
||||||
|
(v, i) => {
|
||||||
|
let domControl = props.lf;
|
||||||
|
if (key === 1) {
|
||||||
|
domControl.zoom(true);
|
||||||
|
}
|
||||||
|
if (key === 6) {
|
||||||
|
emit("catData");
|
||||||
|
}
|
||||||
|
if (key === i) {
|
||||||
|
domControl[v]();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const onEnter = key => {
|
||||||
|
focusIndex.value = key;
|
||||||
|
};
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
props.lf.on("history:change", ({ data: { undoAble, redoAble } }) => {
|
||||||
|
unref(titleLists)[3].disabled = unref(controlButton3).disabled = !undoAble;
|
||||||
|
unref(titleLists)[4].disabled = unref(controlButton4).disabled = !redoAble;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="control-container">
|
<div class="control-container">
|
||||||
<!-- 功能按钮 -->
|
<!-- 功能按钮 -->
|
||||||
@ -26,106 +115,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
|
||||||
import { defineComponent, ref, unref, onMounted } from "vue";
|
|
||||||
import { templateRef } from "@vueuse/core";
|
|
||||||
|
|
||||||
export default defineComponent({
|
|
||||||
name: "Control",
|
|
||||||
props: {
|
|
||||||
lf: null,
|
|
||||||
catTurboData: Boolean
|
|
||||||
},
|
|
||||||
emits: ["catData"],
|
|
||||||
setup(props, { emit }) {
|
|
||||||
const controlButton3 = templateRef<HTMLElement | any>(
|
|
||||||
"controlButton3",
|
|
||||||
null
|
|
||||||
);
|
|
||||||
const controlButton4 = templateRef<HTMLElement | any>(
|
|
||||||
"controlButton4",
|
|
||||||
null
|
|
||||||
);
|
|
||||||
|
|
||||||
let focusIndex = ref(-1);
|
|
||||||
let titleLists = ref([
|
|
||||||
{
|
|
||||||
icon: "icon-zoom-out-hs",
|
|
||||||
text: "缩小",
|
|
||||||
disabled: false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: "icon-enlarge-hs",
|
|
||||||
text: "放大",
|
|
||||||
disabled: false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: "icon-full-screen-hs",
|
|
||||||
text: "适应",
|
|
||||||
disabled: false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: "icon-previous-hs",
|
|
||||||
text: "上一步",
|
|
||||||
disabled: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: "icon-next-step-hs",
|
|
||||||
text: "下一步",
|
|
||||||
disabled: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: "icon-download-hs",
|
|
||||||
text: "下载图片",
|
|
||||||
disabled: false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: "icon-watch-hs",
|
|
||||||
text: "查看数据",
|
|
||||||
disabled: false
|
|
||||||
}
|
|
||||||
]);
|
|
||||||
|
|
||||||
const onControl = (item, key) => {
|
|
||||||
["zoom", "zoom", "resetZoom", "undo", "redo", "getSnapshot"].forEach(
|
|
||||||
(v, i) => {
|
|
||||||
let domControl = props.lf;
|
|
||||||
if (key === 1) {
|
|
||||||
domControl.zoom(true);
|
|
||||||
}
|
|
||||||
if (key === 6) {
|
|
||||||
emit("catData");
|
|
||||||
}
|
|
||||||
if (key === i) {
|
|
||||||
domControl[v]();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
const onEnter = key => {
|
|
||||||
focusIndex.value = key;
|
|
||||||
};
|
|
||||||
|
|
||||||
onMounted(() => {
|
|
||||||
props.lf.on("history:change", ({ data: { undoAble, redoAble } }) => {
|
|
||||||
unref(titleLists)[3].disabled = unref(controlButton3).disabled =
|
|
||||||
!undoAble;
|
|
||||||
unref(titleLists)[4].disabled = unref(controlButton4).disabled =
|
|
||||||
!redoAble;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
return {
|
|
||||||
focusIndex,
|
|
||||||
titleLists,
|
|
||||||
onControl,
|
|
||||||
onEnter
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
@import "./assets/iconfont/iconfont.css";
|
@import "./assets/iconfont/iconfont.css";
|
||||||
|
|
||||||
|
@ -1,23 +1,17 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import VueJsonPretty from "vue-json-pretty";
|
||||||
|
import "vue-json-pretty/lib/styles.css";
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
graphData: Object
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<vue-json-pretty
|
<vue-json-pretty
|
||||||
:path="'res'"
|
:path="'res'"
|
||||||
:deep="3"
|
:deep="3"
|
||||||
:showLength="true"
|
:showLength="true"
|
||||||
:data="graphData"
|
:data="props.graphData"
|
||||||
></vue-json-pretty>
|
></vue-json-pretty>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
|
||||||
import VueJsonPretty from "vue-json-pretty";
|
|
||||||
import "vue-json-pretty/lib/styles.css";
|
|
||||||
import { defineComponent } from "vue";
|
|
||||||
export default defineComponent({
|
|
||||||
name: "DataDialog",
|
|
||||||
props: {
|
|
||||||
graphData: Object
|
|
||||||
},
|
|
||||||
components: {
|
|
||||||
VueJsonPretty
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
@ -1,9 +1,36 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { ref, unref } from "vue";
|
||||||
|
import { LogicFlow } from "@logicflow/core";
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
lf: LogicFlow;
|
||||||
|
nodeList: ForDataType<undefined>;
|
||||||
|
}
|
||||||
|
|
||||||
|
const props = withDefaults(defineProps<Props>(), {
|
||||||
|
lf: null,
|
||||||
|
nodeList: null
|
||||||
|
});
|
||||||
|
|
||||||
|
let properties = ref({
|
||||||
|
a: "efrwe",
|
||||||
|
b: "wewe"
|
||||||
|
});
|
||||||
|
|
||||||
|
const nodeDragNode = item => {
|
||||||
|
props.lf.dnd.startDrag({
|
||||||
|
type: item.type,
|
||||||
|
properties: unref(properties)
|
||||||
|
});
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<!-- 左侧bpmn元素选择器 -->
|
<!-- 左侧bpmn元素选择器 -->
|
||||||
<div class="node-panel">
|
<div class="node-panel">
|
||||||
<div
|
<div
|
||||||
class="node-item"
|
class="node-item"
|
||||||
v-for="item in nodeList"
|
v-for="item in props.nodeList"
|
||||||
:key="item.text"
|
:key="item.text"
|
||||||
@mousedown="nodeDragNode(item)"
|
@mousedown="nodeDragNode(item)"
|
||||||
>
|
>
|
||||||
@ -18,43 +45,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
|
||||||
import { defineComponent, ref, unref } from "vue";
|
|
||||||
export default defineComponent({
|
|
||||||
name: "NodePanel",
|
|
||||||
props: {
|
|
||||||
lf: Object,
|
|
||||||
nodeList: Array
|
|
||||||
},
|
|
||||||
setup(props) {
|
|
||||||
let node = ref({
|
|
||||||
type: "rect",
|
|
||||||
property: {
|
|
||||||
a: "efrwe",
|
|
||||||
b: "wewe"
|
|
||||||
}
|
|
||||||
});
|
|
||||||
let properties = ref({
|
|
||||||
a: "efrwe",
|
|
||||||
b: "wewe"
|
|
||||||
});
|
|
||||||
|
|
||||||
const nodeDragNode = item => {
|
|
||||||
props.lf.dnd.startDrag({
|
|
||||||
type: item.type,
|
|
||||||
properties: unref(properties)
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
return {
|
|
||||||
node,
|
|
||||||
properties,
|
|
||||||
nodeDragNode
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.node-panel {
|
.node-panel {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
@ -1,8 +1,26 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
export interface Props {
|
||||||
|
isActive: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
const props = withDefaults(defineProps<Props>(), {
|
||||||
|
isActive: false
|
||||||
|
});
|
||||||
|
|
||||||
|
const emit = defineEmits<{
|
||||||
|
(e: "toggleClick"): void;
|
||||||
|
}>();
|
||||||
|
|
||||||
|
const toggleClick = () => {
|
||||||
|
emit("toggleClick");
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div style="padding: 0 15px" @click="toggleClick">
|
<div :class="classes.container" @click="toggleClick">
|
||||||
<svg
|
<svg
|
||||||
:class="{ 'is-active': isActive }"
|
|
||||||
class="hamburger"
|
class="hamburger"
|
||||||
|
:class="props.isActive ? 'is-active' : ''"
|
||||||
viewBox="0 0 1024 1024"
|
viewBox="0 0 1024 1024"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
width="64"
|
width="64"
|
||||||
@ -15,26 +33,11 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<style module="classes" scoped>
|
||||||
import { defineComponent } from "vue";
|
.container {
|
||||||
export default defineComponent({
|
padding: 0 15px;
|
||||||
name: "HamBurger",
|
}
|
||||||
props: {
|
</style>
|
||||||
isActive: {
|
|
||||||
type: Boolean,
|
|
||||||
default: false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
emits: ["toggleClick"],
|
|
||||||
setup(props, ctx) {
|
|
||||||
const toggleClick = () => {
|
|
||||||
ctx.emit("toggleClick");
|
|
||||||
};
|
|
||||||
|
|
||||||
return { toggleClick };
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.hamburger {
|
.hamburger {
|
||||||
@ -44,7 +47,7 @@ export default defineComponent({
|
|||||||
height: 20px;
|
height: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hamburger.is-active {
|
.is-active {
|
||||||
transform: rotate(180deg);
|
transform: rotate(180deg);
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -1,3 +1,97 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { ref, PropType, getCurrentInstance, watch, nextTick, toRef } from "vue";
|
||||||
|
import { useRouter, useRoute } from "vue-router";
|
||||||
|
import { initRouter } from "/@/router";
|
||||||
|
import { storageSession } from "/@/utils/storage";
|
||||||
|
|
||||||
|
export interface ContextProps {
|
||||||
|
userName: string;
|
||||||
|
passWord: string;
|
||||||
|
verify: number | null;
|
||||||
|
svg: any;
|
||||||
|
telephone?: number;
|
||||||
|
dynamicText?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
ruleForm: {
|
||||||
|
type: Object as PropType<ContextProps>
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const emit = defineEmits<{
|
||||||
|
(e: "onBehavior", evt: Object): void;
|
||||||
|
(e: "refreshVerify"): void;
|
||||||
|
}>();
|
||||||
|
|
||||||
|
const instance = getCurrentInstance();
|
||||||
|
|
||||||
|
const model = toRef(props, "ruleForm");
|
||||||
|
let tips = ref<string>("注册");
|
||||||
|
let tipsFalse = ref<string>("登录");
|
||||||
|
|
||||||
|
const route = useRoute();
|
||||||
|
const router = useRouter();
|
||||||
|
|
||||||
|
watch(
|
||||||
|
route,
|
||||||
|
async ({ path }): Promise<void> => {
|
||||||
|
await nextTick();
|
||||||
|
path.includes("register")
|
||||||
|
? (tips.value = "登录") && (tipsFalse.value = "注册")
|
||||||
|
: (tips.value = "注册") && (tipsFalse.value = "登录");
|
||||||
|
},
|
||||||
|
{ immediate: true }
|
||||||
|
);
|
||||||
|
|
||||||
|
const rules: Object = ref({
|
||||||
|
userName: [{ required: true, message: "请输入用户名", trigger: "blur" }],
|
||||||
|
passWord: [
|
||||||
|
{ required: true, message: "请输入密码", trigger: "blur" },
|
||||||
|
{ min: 6, message: "密码长度必须不小于6位", trigger: "blur" }
|
||||||
|
],
|
||||||
|
verify: [
|
||||||
|
{ required: true, message: "请输入验证码", trigger: "blur" },
|
||||||
|
{ type: "number", message: "验证码必须是数字类型", trigger: "blur" }
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
// 点击登录或注册
|
||||||
|
const onBehavior = (evt: Object): void => {
|
||||||
|
instance.refs.ruleForm.validate((valid: boolean) => {
|
||||||
|
if (valid) {
|
||||||
|
emit("onBehavior", evt);
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// 刷新验证码
|
||||||
|
const refreshVerify = (): void => {
|
||||||
|
emit("refreshVerify");
|
||||||
|
};
|
||||||
|
|
||||||
|
// 表单重置
|
||||||
|
const resetForm = (): void => {
|
||||||
|
instance.refs.ruleForm.resetFields();
|
||||||
|
};
|
||||||
|
|
||||||
|
// 登录、注册页面切换
|
||||||
|
const changPage = (): void => {
|
||||||
|
tips.value === "注册" ? router.push("/register") : router.push("/login");
|
||||||
|
};
|
||||||
|
|
||||||
|
const noSecret = (): void => {
|
||||||
|
storageSession.setItem("info", {
|
||||||
|
username: "admin",
|
||||||
|
accessToken: "eyJhbGciOiJIUzUxMiJ9.test"
|
||||||
|
});
|
||||||
|
initRouter("admin").then(() => {});
|
||||||
|
router.push("/");
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="info">
|
<div class="info">
|
||||||
<el-form :model="model" :rules="rules" ref="ruleForm" class="rule-form">
|
<el-form :model="model" :rules="rules" ref="ruleForm" class="rule-form">
|
||||||
@ -47,123 +141,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
|
||||||
import {
|
|
||||||
ref,
|
|
||||||
defineComponent,
|
|
||||||
PropType,
|
|
||||||
getCurrentInstance,
|
|
||||||
watch,
|
|
||||||
nextTick,
|
|
||||||
toRef
|
|
||||||
} from "vue";
|
|
||||||
import { storageSession } from "/@/utils/storage";
|
|
||||||
|
|
||||||
export interface ContextProps {
|
|
||||||
userName: string;
|
|
||||||
passWord: string;
|
|
||||||
verify: number | null;
|
|
||||||
svg: any;
|
|
||||||
telephone?: number;
|
|
||||||
dynamicText?: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
import { useRouter, useRoute } from "vue-router";
|
|
||||||
|
|
||||||
import { initRouter } from "/@/router";
|
|
||||||
|
|
||||||
export default defineComponent({
|
|
||||||
name: "Info",
|
|
||||||
props: {
|
|
||||||
ruleForm: {
|
|
||||||
type: Object as PropType<ContextProps>,
|
|
||||||
require: true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
emits: ["onBehavior", "refreshVerify"],
|
|
||||||
setup(props, ctx) {
|
|
||||||
const instance = getCurrentInstance();
|
|
||||||
|
|
||||||
const model = toRef(props, "ruleForm");
|
|
||||||
let tips = ref("注册");
|
|
||||||
let tipsFalse = ref("登录");
|
|
||||||
|
|
||||||
const route = useRoute();
|
|
||||||
const router = useRouter();
|
|
||||||
|
|
||||||
watch(
|
|
||||||
route,
|
|
||||||
async ({ path }): Promise<void> => {
|
|
||||||
await nextTick();
|
|
||||||
path.includes("register")
|
|
||||||
? (tips.value = "登录") && (tipsFalse.value = "注册")
|
|
||||||
: (tips.value = "注册") && (tipsFalse.value = "登录");
|
|
||||||
},
|
|
||||||
{ immediate: true }
|
|
||||||
);
|
|
||||||
|
|
||||||
const rules: Object = ref({
|
|
||||||
userName: [{ required: true, message: "请输入用户名", trigger: "blur" }],
|
|
||||||
passWord: [
|
|
||||||
{ required: true, message: "请输入密码", trigger: "blur" },
|
|
||||||
{ min: 6, message: "密码长度必须不小于6位", trigger: "blur" }
|
|
||||||
],
|
|
||||||
verify: [
|
|
||||||
{ required: true, message: "请输入验证码", trigger: "blur" },
|
|
||||||
{ type: "number", message: "验证码必须是数字类型", trigger: "blur" }
|
|
||||||
]
|
|
||||||
});
|
|
||||||
|
|
||||||
// 点击登录或注册
|
|
||||||
const onBehavior = (evt: Object): void => {
|
|
||||||
instance.refs.ruleForm.validate((valid: boolean) => {
|
|
||||||
if (valid) {
|
|
||||||
ctx.emit("onBehavior", evt);
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
// 刷新验证码
|
|
||||||
const refreshVerify = (): void => {
|
|
||||||
ctx.emit("refreshVerify");
|
|
||||||
};
|
|
||||||
|
|
||||||
// 表单重置
|
|
||||||
const resetForm = (): void => {
|
|
||||||
instance.refs.ruleForm.resetFields();
|
|
||||||
};
|
|
||||||
|
|
||||||
// 登录、注册页面切换
|
|
||||||
const changPage = (): void => {
|
|
||||||
tips.value === "注册" ? router.push("/register") : router.push("/login");
|
|
||||||
};
|
|
||||||
|
|
||||||
const noSecret = (): void => {
|
|
||||||
storageSession.setItem("info", {
|
|
||||||
username: "admin",
|
|
||||||
accessToken: "eyJhbGciOiJIUzUxMiJ9.test"
|
|
||||||
});
|
|
||||||
initRouter("admin").then(() => {});
|
|
||||||
router.push("/");
|
|
||||||
};
|
|
||||||
|
|
||||||
return {
|
|
||||||
model,
|
|
||||||
rules,
|
|
||||||
tips,
|
|
||||||
tipsFalse,
|
|
||||||
resetForm,
|
|
||||||
onBehavior,
|
|
||||||
refreshVerify,
|
|
||||||
changPage,
|
|
||||||
noSecret
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.info {
|
.info {
|
||||||
width: 30vw;
|
width: 30vw;
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
import { App } from "vue";
|
import { App } from "vue";
|
||||||
import amap from "./src/Amap.vue";
|
import amap from "./src/Amap.vue";
|
||||||
import baiduMap from "./src/BaiduMap.vue";
|
|
||||||
|
|
||||||
export const Amap = Object.assign(amap, {
|
export const Amap = Object.assign(amap, {
|
||||||
install(app: App) {
|
install(app: App) {
|
||||||
@ -8,13 +7,6 @@ export const Amap = Object.assign(amap, {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
export const BaiduMap = Object.assign(baiduMap, {
|
|
||||||
install(app: App) {
|
|
||||||
app.component(baiduMap.name, baiduMap);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
Amap,
|
Amap
|
||||||
BaiduMap
|
|
||||||
};
|
};
|
||||||
|
@ -1,45 +1,17 @@
|
|||||||
<template>
|
<script setup lang="ts">
|
||||||
<div
|
|
||||||
id="mapview"
|
|
||||||
ref="mapview"
|
|
||||||
v-loading="loading"
|
|
||||||
element-loading-text="地图加载中"
|
|
||||||
element-loading-spinner="el-icon-loading"
|
|
||||||
element-loading-background="rgba(0, 0, 0, 0.8)"
|
|
||||||
></div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script lang="ts">
|
|
||||||
import AMapLoader from "@amap/amap-jsapi-loader";
|
import AMapLoader from "@amap/amap-jsapi-loader";
|
||||||
import {
|
import { reactive, getCurrentInstance, onBeforeMount, onUnmounted } from "vue";
|
||||||
reactive,
|
|
||||||
toRefs,
|
|
||||||
defineComponent,
|
|
||||||
onBeforeMount,
|
|
||||||
getCurrentInstance
|
|
||||||
} from "vue";
|
|
||||||
|
|
||||||
import { mapJson } from "/@/api/mock";
|
import { mapJson } from "/@/api/mock";
|
||||||
import { deviceDetection } from "/@/utils/deviceDetection";
|
import { deviceDetection } from "/@/utils/deviceDetection";
|
||||||
|
|
||||||
import greenCar from "/@/assets/green.png";
|
import greenCar from "/@/assets/green.png";
|
||||||
|
|
||||||
let MarkerCluster;
|
|
||||||
|
|
||||||
export interface MapConfigureInter {
|
export interface MapConfigureInter {
|
||||||
// eslint-disable-next-line no-undef
|
|
||||||
on: Fn;
|
on: Fn;
|
||||||
// eslint-disable-next-line no-undef
|
|
||||||
destroy?: Fn;
|
destroy?: Fn;
|
||||||
// eslint-disable-next-line no-undef
|
|
||||||
clearEvents?: Fn;
|
clearEvents?: Fn;
|
||||||
// eslint-disable-next-line no-undef
|
|
||||||
addControl?: Fn;
|
addControl?: Fn;
|
||||||
// eslint-disable-next-line no-undef
|
|
||||||
setCenter?: Fn;
|
setCenter?: Fn;
|
||||||
// eslint-disable-next-line no-undef
|
|
||||||
setZoom?: Fn;
|
setZoom?: Fn;
|
||||||
// eslint-disable-next-line no-undef
|
|
||||||
plugin?: Fn;
|
plugin?: Fn;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -47,116 +19,119 @@ export interface mapInter {
|
|||||||
loading: boolean;
|
loading: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default defineComponent({
|
let MarkerCluster;
|
||||||
name: "Amap",
|
let map: MapConfigureInter;
|
||||||
setup() {
|
|
||||||
const instance = getCurrentInstance();
|
|
||||||
let map: MapConfigureInter;
|
|
||||||
|
|
||||||
const mapSet: mapInter = reactive({
|
const instance = getCurrentInstance();
|
||||||
loading: deviceDetection() ? false : true
|
|
||||||
|
const mapSet: mapInter = reactive({
|
||||||
|
loading: deviceDetection() ? false : true
|
||||||
|
});
|
||||||
|
|
||||||
|
// 地图创建完成(动画关闭)
|
||||||
|
const complete = (): void => {
|
||||||
|
if (map) {
|
||||||
|
map.on("complete", () => {
|
||||||
|
mapSet.loading = false;
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// 地图创建完成(动画关闭)
|
onBeforeMount(() => {
|
||||||
const complete = (): void => {
|
if (!instance) return;
|
||||||
if (map) {
|
let { MapConfigure } = instance.appContext.config.globalProperties.$config;
|
||||||
map.on("complete", () => {
|
let { options } = MapConfigure;
|
||||||
mapSet.loading = false;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// 销毁地图实例
|
AMapLoader.load({
|
||||||
const destroyMap = (): void => {
|
key: MapConfigure.amapKey,
|
||||||
if (map) {
|
version: "2.0",
|
||||||
map.destroy() && map.clearEvents("click");
|
plugins: ["AMap.MarkerCluster"]
|
||||||
}
|
})
|
||||||
};
|
.then(AMap => {
|
||||||
|
// 创建地图实例
|
||||||
|
map = new AMap.Map(instance.refs.mapview, options);
|
||||||
|
|
||||||
onBeforeMount(() => {
|
//地图中添加地图操作ToolBar插件
|
||||||
if (!instance) return;
|
map.plugin(["AMap.ToolBar", "AMap.MapType"], () => {
|
||||||
let { MapConfigure } =
|
map.addControl(new AMap.ToolBar());
|
||||||
instance.appContext.config.globalProperties.$config;
|
//地图类型切换
|
||||||
let { options } = MapConfigure;
|
map.addControl(
|
||||||
|
new AMap.MapType({
|
||||||
|
defaultType: 0
|
||||||
|
})
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
AMapLoader.load({
|
MarkerCluster = new AMap.MarkerCluster(map, [], {
|
||||||
key: MapConfigure.amapKey,
|
// 聚合网格像素大小
|
||||||
version: "2.0",
|
gridSize: 80,
|
||||||
plugins: ["AMap.MarkerCluster"]
|
maxZoom: 14,
|
||||||
})
|
renderMarker(ctx) {
|
||||||
.then(AMap => {
|
let { marker, data } = ctx;
|
||||||
// 创建地图实例
|
if (Array.isArray(data) && data[0]) {
|
||||||
map = new AMap.Map(instance.refs.mapview, options);
|
var { driver, plateNumber, orientation } = data[0];
|
||||||
|
var content = `<img style="transform: scale(1) rotate(${
|
||||||
//地图中添加地图操作ToolBar插件
|
360 - Number(orientation)
|
||||||
map.plugin(["AMap.ToolBar", "AMap.MapType"], () => {
|
}deg);" src='${greenCar}' />`;
|
||||||
map.addControl(new AMap.ToolBar());
|
marker.setContent(content);
|
||||||
//地图类型切换
|
marker.setLabel({
|
||||||
map.addControl(
|
direction: "bottom",
|
||||||
new AMap.MapType({
|
//设置文本标注偏移量
|
||||||
defaultType: 0
|
offset: new AMap.Pixel(-4, 0),
|
||||||
})
|
//设置文本标注内容
|
||||||
);
|
content: `<div> ${plateNumber}(${driver})</div>`
|
||||||
});
|
|
||||||
|
|
||||||
MarkerCluster = new AMap.MarkerCluster(map, [], {
|
|
||||||
gridSize: 80, // 聚合网格像素大小
|
|
||||||
maxZoom: 14,
|
|
||||||
renderMarker(ctx) {
|
|
||||||
let { marker, data } = ctx;
|
|
||||||
if (Array.isArray(data) && data[0]) {
|
|
||||||
var { driver, plateNumber, orientation } = data[0];
|
|
||||||
var content = `<img style="transform: scale(1) rotate(${
|
|
||||||
360 - Number(orientation)
|
|
||||||
}deg);" src='${greenCar}' />`;
|
|
||||||
marker.setContent(content);
|
|
||||||
marker.setLabel({
|
|
||||||
direction: "bottom",
|
|
||||||
offset: new AMap.Pixel(-4, 0), //设置文本标注偏移量
|
|
||||||
content: `<div> ${plateNumber}(${driver})</div>` //设置文本标注内容
|
|
||||||
});
|
|
||||||
marker.setOffset(new AMap.Pixel(-18, -10));
|
|
||||||
marker.on("click", ({ lnglat }) => {
|
|
||||||
map.setZoom(13); //设置地图层级
|
|
||||||
map.setCenter(lnglat);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// 获取模拟车辆信息
|
|
||||||
mapJson()
|
|
||||||
.then(res => {
|
|
||||||
let points: object = res.info.map((v: any) => {
|
|
||||||
return {
|
|
||||||
lnglat: [v.lng, v.lat],
|
|
||||||
...v
|
|
||||||
};
|
|
||||||
});
|
|
||||||
if (MarkerCluster) MarkerCluster.setData(points);
|
|
||||||
})
|
|
||||||
.catch(err => {
|
|
||||||
console.log("err:", err);
|
|
||||||
});
|
});
|
||||||
|
marker.setOffset(new AMap.Pixel(-18, -10));
|
||||||
|
marker.on("click", ({ lnglat }) => {
|
||||||
|
map.setZoom(13); //设置地图层级
|
||||||
|
map.setCenter(lnglat);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
complete();
|
// 获取模拟车辆信息
|
||||||
|
mapJson()
|
||||||
|
.then(res => {
|
||||||
|
let points: object = res.info.map((v: any) => {
|
||||||
|
return {
|
||||||
|
lnglat: [v.lng, v.lat],
|
||||||
|
...v
|
||||||
|
};
|
||||||
|
});
|
||||||
|
if (MarkerCluster) MarkerCluster.setData(points);
|
||||||
})
|
})
|
||||||
.catch(() => {
|
.catch(err => {
|
||||||
mapSet.loading = false;
|
console.log("err:", err);
|
||||||
throw "地图加载失败,请重新加载";
|
|
||||||
});
|
});
|
||||||
});
|
|
||||||
|
|
||||||
return {
|
complete();
|
||||||
...toRefs(mapSet),
|
})
|
||||||
complete,
|
.catch(() => {
|
||||||
destroyMap,
|
mapSet.loading = false;
|
||||||
greenCar
|
throw "地图加载失败,请重新加载";
|
||||||
};
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
onUnmounted(() => {
|
||||||
|
if (map) {
|
||||||
|
// 销毁地图实例
|
||||||
|
map.destroy() && map.clearEvents("click");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div
|
||||||
|
id="mapview"
|
||||||
|
ref="mapview"
|
||||||
|
v-loading="mapSet.loading"
|
||||||
|
element-loading-text="地图加载中"
|
||||||
|
element-loading-spinner="el-icon-loading"
|
||||||
|
element-loading-background="rgba(0, 0, 0, 0.8)"
|
||||||
|
></div>
|
||||||
|
</template>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
#mapview {
|
#mapview {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
@ -1,14 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div></div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script lang="ts">
|
|
||||||
export default {
|
|
||||||
name: "BaiduMap",
|
|
||||||
setup() {
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped></style>
|
|
File diff suppressed because it is too large
Load Diff
@ -2,7 +2,7 @@
|
|||||||
* @desc AnimationFrame简单兼容hack
|
* @desc AnimationFrame简单兼容hack
|
||||||
*/
|
*/
|
||||||
export const animationFrame = () => {
|
export const animationFrame = () => {
|
||||||
window.cancelAnimationFrame = (function () {
|
window.cancelAnimationFrame = (() => {
|
||||||
return (
|
return (
|
||||||
window.cancelAnimationFrame ||
|
window.cancelAnimationFrame ||
|
||||||
window.webkitCancelAnimationFrame ||
|
window.webkitCancelAnimationFrame ||
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
"/#/*": ["types/*"]
|
"/#/*": ["types/*"]
|
||||||
},
|
},
|
||||||
"types": ["node", "vite/client"],
|
"types": ["node", "vite/client"],
|
||||||
"typeRoots": ["./node_modules/@types/", "./types"]
|
"typeRoots": ["./node_modules/@types/", "./types", "./vue-types"]
|
||||||
},
|
},
|
||||||
"include": [
|
"include": [
|
||||||
"src/**/*.ts",
|
"src/**/*.ts",
|
||||||
|
13
types/global.d.ts
vendored
13
types/global.d.ts
vendored
@ -20,13 +20,14 @@ declare global {
|
|||||||
// Global vue app instance
|
// Global vue app instance
|
||||||
__APP__: App<Element>;
|
__APP__: App<Element>;
|
||||||
webkitCancelAnimationFrame: (handle: number) => void;
|
webkitCancelAnimationFrame: (handle: number) => void;
|
||||||
|
mozCancelAnimationFrame: (handle: number) => void;
|
||||||
|
oCancelAnimationFrame: (handle: number) => void;
|
||||||
|
msCancelAnimationFrame: (handle: number) => void;
|
||||||
|
|
||||||
webkitRequestAnimationFrame: (callback: FrameRequestCallback) => number;
|
webkitRequestAnimationFrame: (callback: FrameRequestCallback) => number;
|
||||||
mozCancelAnimationFrame: (id?: string) => any;
|
mozRequestAnimationFrame: (callback: FrameRequestCallback) => number;
|
||||||
oCancelAnimationFrame: (id?: string) => any;
|
oRequestAnimationFrame: (callback: FrameRequestCallback) => number;
|
||||||
msCancelAnimationFrame: (id?: string) => any;
|
msRequestAnimationFrame: (callback: FrameRequestCallback) => number;
|
||||||
mozRequestAnimationFrame: (id?: string) => any;
|
|
||||||
oRequestAnimationFrame: (id?: string) => any;
|
|
||||||
msRequestAnimationFrame: (id?: string) => any;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// vue
|
// vue
|
||||||
|
4
types/index.d.ts
vendored
4
types/index.d.ts
vendored
@ -25,3 +25,7 @@ declare type ComponentRef<T extends HTMLElement = HTMLDivElement> =
|
|||||||
ComponentElRef<T> | null;
|
ComponentElRef<T> | null;
|
||||||
|
|
||||||
declare type ElRef<T extends HTMLElement = HTMLDivElement> = Nullable<T>;
|
declare type ElRef<T extends HTMLElement = HTMLDivElement> = Nullable<T>;
|
||||||
|
|
||||||
|
declare type ForDataType<T> = {
|
||||||
|
[P in T]?: ForDataType<T[P]>;
|
||||||
|
};
|
||||||
|
124
yarn.lock
124
yarn.lock
@ -786,6 +786,17 @@
|
|||||||
estree-walker "^2.0.2"
|
estree-walker "^2.0.2"
|
||||||
source-map "^0.6.1"
|
source-map "^0.6.1"
|
||||||
|
|
||||||
|
"@vue/compiler-core@3.2.12":
|
||||||
|
version "3.2.12"
|
||||||
|
resolved "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.12.tgz#23998d6986a45e1ab0424130cc0ad00e33da1101"
|
||||||
|
integrity sha512-IGJ0JmrAaAl5KBBegPAKkoXvsfDFgN/h7K1t/+0MxqpZF1fTDVUOp3tG7q9gWa7fwzGEaIsPhjtT5C3qztdLKg==
|
||||||
|
dependencies:
|
||||||
|
"@babel/parser" "^7.15.0"
|
||||||
|
"@babel/types" "^7.15.0"
|
||||||
|
"@vue/shared" "3.2.12"
|
||||||
|
estree-walker "^2.0.2"
|
||||||
|
source-map "^0.6.1"
|
||||||
|
|
||||||
"@vue/compiler-dom@3.2.11":
|
"@vue/compiler-dom@3.2.11":
|
||||||
version "3.2.11"
|
version "3.2.11"
|
||||||
resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.11.tgz#d066f8e1f1812b4e881593819ade0fe6d654c776"
|
resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.11.tgz#d066f8e1f1812b4e881593819ade0fe6d654c776"
|
||||||
@ -794,7 +805,15 @@
|
|||||||
"@vue/compiler-core" "3.2.11"
|
"@vue/compiler-core" "3.2.11"
|
||||||
"@vue/shared" "3.2.11"
|
"@vue/shared" "3.2.11"
|
||||||
|
|
||||||
"@vue/compiler-sfc@^3.0.11", "@vue/compiler-sfc@^3.2.11":
|
"@vue/compiler-dom@3.2.12":
|
||||||
|
version "3.2.12"
|
||||||
|
resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.12.tgz#d6ba00114e73adb8b18940c3ff18797cc2b0514f"
|
||||||
|
integrity sha512-MulvKilA2USm8ubPfvXvNY55HVTn+zHERsXeNg437TXrmM4FRCis6zjWW47QZ3ZyxEkCdqOmuiFCtXbpnuthyw==
|
||||||
|
dependencies:
|
||||||
|
"@vue/compiler-core" "3.2.12"
|
||||||
|
"@vue/shared" "3.2.12"
|
||||||
|
|
||||||
|
"@vue/compiler-sfc@^3.0.11":
|
||||||
version "3.2.11"
|
version "3.2.11"
|
||||||
resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.11.tgz#628fa12238760d9b9b339ac2e125a759224fadbf"
|
resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.11.tgz#628fa12238760d9b9b339ac2e125a759224fadbf"
|
||||||
integrity sha512-cUIaS8mgJrQ6yucj2AupWAwBRITK3W/a8wCOn9g5fJGtOl8h4APY8vN3lzP8HIJDyEeRF3I8SfRhL+oX97kSnw==
|
integrity sha512-cUIaS8mgJrQ6yucj2AupWAwBRITK3W/a8wCOn9g5fJGtOl8h4APY8vN3lzP8HIJDyEeRF3I8SfRhL+oX97kSnw==
|
||||||
@ -818,6 +837,30 @@
|
|||||||
postcss-selector-parser "^6.0.4"
|
postcss-selector-parser "^6.0.4"
|
||||||
source-map "^0.6.1"
|
source-map "^0.6.1"
|
||||||
|
|
||||||
|
"@vue/compiler-sfc@^3.2.12":
|
||||||
|
version "3.2.12"
|
||||||
|
resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.12.tgz#39555550d96051508753ba934f7260dc5ee5211e"
|
||||||
|
integrity sha512-EjzeMQ7H2ICj+JRw2buSFXTocdCg8e5yWQTlNM/6h/u68sTwMbIfiOJBFEwBhG/wCG7Nb6Nnz888AfHTU3hdrA==
|
||||||
|
dependencies:
|
||||||
|
"@babel/parser" "^7.15.0"
|
||||||
|
"@babel/types" "^7.15.0"
|
||||||
|
"@types/estree" "^0.0.48"
|
||||||
|
"@vue/compiler-core" "3.2.12"
|
||||||
|
"@vue/compiler-dom" "3.2.12"
|
||||||
|
"@vue/compiler-ssr" "3.2.12"
|
||||||
|
"@vue/ref-transform" "3.2.12"
|
||||||
|
"@vue/shared" "3.2.12"
|
||||||
|
consolidate "^0.16.0"
|
||||||
|
estree-walker "^2.0.2"
|
||||||
|
hash-sum "^2.0.0"
|
||||||
|
lru-cache "^5.1.1"
|
||||||
|
magic-string "^0.25.7"
|
||||||
|
merge-source-map "^1.1.0"
|
||||||
|
postcss "^8.1.10"
|
||||||
|
postcss-modules "^4.0.0"
|
||||||
|
postcss-selector-parser "^6.0.4"
|
||||||
|
source-map "^0.6.1"
|
||||||
|
|
||||||
"@vue/compiler-ssr@3.2.11":
|
"@vue/compiler-ssr@3.2.11":
|
||||||
version "3.2.11"
|
version "3.2.11"
|
||||||
resolved "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.11.tgz#702cef3429651645bdbe09fe5962803b5a621abb"
|
resolved "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.11.tgz#702cef3429651645bdbe09fe5962803b5a621abb"
|
||||||
@ -826,6 +869,14 @@
|
|||||||
"@vue/compiler-dom" "3.2.11"
|
"@vue/compiler-dom" "3.2.11"
|
||||||
"@vue/shared" "3.2.11"
|
"@vue/shared" "3.2.11"
|
||||||
|
|
||||||
|
"@vue/compiler-ssr@3.2.12":
|
||||||
|
version "3.2.12"
|
||||||
|
resolved "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.12.tgz#32e5d4bc31c371c125b43e9d07b8a8f70442b080"
|
||||||
|
integrity sha512-sY+VbLQ17FPr1CgirnqEgY+jbC7wI5c2Ma6u8le0+b4UKMYF9urI2pybAZc1nKz6O78FWA3OSnQFxTTLppe+9Q==
|
||||||
|
dependencies:
|
||||||
|
"@vue/compiler-dom" "3.2.12"
|
||||||
|
"@vue/shared" "3.2.12"
|
||||||
|
|
||||||
"@vue/devtools-api@^6.0.0-beta.13", "@vue/devtools-api@^6.0.0-beta.14", "@vue/devtools-api@^6.0.0-beta.15":
|
"@vue/devtools-api@^6.0.0-beta.13", "@vue/devtools-api@^6.0.0-beta.14", "@vue/devtools-api@^6.0.0-beta.15":
|
||||||
version "6.0.0-beta.15"
|
version "6.0.0-beta.15"
|
||||||
resolved "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.0.0-beta.15.tgz#ad7cb384e062f165bcf9c83732125bffbc2ad83d"
|
resolved "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.0.0-beta.15.tgz#ad7cb384e062f165bcf9c83732125bffbc2ad83d"
|
||||||
@ -852,6 +903,13 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@vue/shared" "3.2.11"
|
"@vue/shared" "3.2.11"
|
||||||
|
|
||||||
|
"@vue/reactivity@3.2.12":
|
||||||
|
version "3.2.12"
|
||||||
|
resolved "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.12.tgz#b482a737cbdc891f9b1ec3100f3c1804b56d080b"
|
||||||
|
integrity sha512-Lr5CTQjFm5mT/6DGnVNhptmba/Qg1DbD6eNWWmiHLMlpPt4q2ww9A2orEjVw0qNcdTJ04JLPEVAz5jhTZTCfIg==
|
||||||
|
dependencies:
|
||||||
|
"@vue/shared" "3.2.12"
|
||||||
|
|
||||||
"@vue/ref-transform@3.2.11":
|
"@vue/ref-transform@3.2.11":
|
||||||
version "3.2.11"
|
version "3.2.11"
|
||||||
resolved "https://registry.npmjs.org/@vue/ref-transform/-/ref-transform-3.2.11.tgz#4d282b9570d1485a73e7bf5d57cce27b4a7aa690"
|
resolved "https://registry.npmjs.org/@vue/ref-transform/-/ref-transform-3.2.11.tgz#4d282b9570d1485a73e7bf5d57cce27b4a7aa690"
|
||||||
@ -863,6 +921,17 @@
|
|||||||
estree-walker "^2.0.2"
|
estree-walker "^2.0.2"
|
||||||
magic-string "^0.25.7"
|
magic-string "^0.25.7"
|
||||||
|
|
||||||
|
"@vue/ref-transform@3.2.12":
|
||||||
|
version "3.2.12"
|
||||||
|
resolved "https://registry.npmjs.org/@vue/ref-transform/-/ref-transform-3.2.12.tgz#6f7fa46dd84447ddcf54adfb1b689b1cf4243de0"
|
||||||
|
integrity sha512-lS7TDda61iSf3ljokXVfN0VbOsQdmpST6MZLjxzBydFCECCJaEAr6o+K8VZ7NhUCSrl+gKXHpdXxmcvwdk66aQ==
|
||||||
|
dependencies:
|
||||||
|
"@babel/parser" "^7.15.0"
|
||||||
|
"@vue/compiler-core" "3.2.12"
|
||||||
|
"@vue/shared" "3.2.12"
|
||||||
|
estree-walker "^2.0.2"
|
||||||
|
magic-string "^0.25.7"
|
||||||
|
|
||||||
"@vue/runtime-core@3.2.11":
|
"@vue/runtime-core@3.2.11":
|
||||||
version "3.2.11"
|
version "3.2.11"
|
||||||
resolved "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.11.tgz#0dbe801be4bd0bfde253226797e7d304c8fdda30"
|
resolved "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.11.tgz#0dbe801be4bd0bfde253226797e7d304c8fdda30"
|
||||||
@ -871,6 +940,14 @@
|
|||||||
"@vue/reactivity" "3.2.11"
|
"@vue/reactivity" "3.2.11"
|
||||||
"@vue/shared" "3.2.11"
|
"@vue/shared" "3.2.11"
|
||||||
|
|
||||||
|
"@vue/runtime-core@3.2.12":
|
||||||
|
version "3.2.12"
|
||||||
|
resolved "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.12.tgz#422662fd5b85f787222d2aea840264ba97e84a13"
|
||||||
|
integrity sha512-LO+ztgcmsomavYUaSq7BTteh8pmnUmvUnXUFVYdlcg3VCdYRS0ImlclpYsNHqjAk2gU+H09dr2PP0kL961xUfQ==
|
||||||
|
dependencies:
|
||||||
|
"@vue/reactivity" "3.2.12"
|
||||||
|
"@vue/shared" "3.2.12"
|
||||||
|
|
||||||
"@vue/runtime-dom@3.2.11":
|
"@vue/runtime-dom@3.2.11":
|
||||||
version "3.2.11"
|
version "3.2.11"
|
||||||
resolved "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.11.tgz#04f9054a9e64bdf156c2fc22cad67cfaa8b84616"
|
resolved "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.11.tgz#04f9054a9e64bdf156c2fc22cad67cfaa8b84616"
|
||||||
@ -880,17 +957,31 @@
|
|||||||
"@vue/shared" "3.2.11"
|
"@vue/shared" "3.2.11"
|
||||||
csstype "^2.6.8"
|
csstype "^2.6.8"
|
||||||
|
|
||||||
|
"@vue/runtime-dom@3.2.12":
|
||||||
|
version "3.2.12"
|
||||||
|
resolved "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.12.tgz#d9fe865dca36f9ca33ba327afdeb89ae2aa03f4c"
|
||||||
|
integrity sha512-+NSDqivgihvoPYbKFDmzFu1tW7SOzwc7r0b7T8vsJtooVPGxwtfAFZ6wyLtteOXXrCpyTR3kpyTCIp31uY7aJg==
|
||||||
|
dependencies:
|
||||||
|
"@vue/runtime-core" "3.2.12"
|
||||||
|
"@vue/shared" "3.2.12"
|
||||||
|
csstype "^2.6.8"
|
||||||
|
|
||||||
"@vue/shared@3.2.11":
|
"@vue/shared@3.2.11":
|
||||||
version "3.2.11"
|
version "3.2.11"
|
||||||
resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.2.11.tgz#01899f54949caf1ac241de397bd17069632574de"
|
resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.2.11.tgz#01899f54949caf1ac241de397bd17069632574de"
|
||||||
integrity sha512-ovfXAsSsCvV9JVceWjkqC/7OF5HbgLOtCWjCIosmPGG8lxbPuavhIxRH1dTx4Dg9xLgRTNLvI3pVxG4ItQZekg==
|
integrity sha512-ovfXAsSsCvV9JVceWjkqC/7OF5HbgLOtCWjCIosmPGG8lxbPuavhIxRH1dTx4Dg9xLgRTNLvI3pVxG4ItQZekg==
|
||||||
|
|
||||||
"@vueuse/core@^6.0.0":
|
"@vue/shared@3.2.12":
|
||||||
version "6.3.3"
|
version "3.2.12"
|
||||||
resolved "https://registry.npmjs.org/@vueuse/core/-/core-6.3.3.tgz#0682c01b50d28e91d3d76f27278600ee1692fa24"
|
resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.2.12.tgz#304064a4b56fc6c7b9169d80e9ee62ecb4bf0a1c"
|
||||||
integrity sha512-qa/0WYqcvqFKQmlkgsLGlXBrYcQeUi3fzHMIaxsD/lO/zm0IWBSN8CTFu91LwER5qNYs4DGhU5pu7jOdrTzAIQ==
|
integrity sha512-5CkaifUCJwcTuru7FDwKFacPJuEoGUTw0LKSa5bw40B23s0TS+MGlYR1285nbV/ju3QUGlA6d6PD+GJkWy7uFg==
|
||||||
|
|
||||||
|
"@vueuse/core@^6.4.1":
|
||||||
|
version "6.4.1"
|
||||||
|
resolved "https://registry.npmjs.org/@vueuse/core/-/core-6.4.1.tgz#21416997a23bfb4924a5082ed6fa959027f80d04"
|
||||||
|
integrity sha512-FRFeEPVq77gcMZP0mCloJY+lyHJaUQmUMaPp5fBds3fs/BbkAt7HTMMizFKHWDVjbmA20vBOjmC9tTnfD+DdEA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@vueuse/shared" "6.3.3"
|
"@vueuse/shared" "6.4.1"
|
||||||
vue-demi "*"
|
vue-demi "*"
|
||||||
|
|
||||||
"@vueuse/core@~6.1.0":
|
"@vueuse/core@~6.1.0":
|
||||||
@ -908,10 +999,10 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
vue-demi "*"
|
vue-demi "*"
|
||||||
|
|
||||||
"@vueuse/shared@6.3.3":
|
"@vueuse/shared@6.4.1":
|
||||||
version "6.3.3"
|
version "6.4.1"
|
||||||
resolved "https://registry.npmjs.org/@vueuse/shared/-/shared-6.3.3.tgz#4e5c600ad1ed5bf2a8630ad0bd38edb1f4269f37"
|
resolved "https://registry.npmjs.org/@vueuse/shared/-/shared-6.4.1.tgz#5bc84be107cead84e11c21d2c57b1e9f2c376975"
|
||||||
integrity sha512-2+YPRhFNUXEhhvKNTWBtNU6hGkft9+mfYSVjI4hZu2U8KDbNNKF/215lBPzMYI2twScDtPsAssQ+vu5t9PBy0g==
|
integrity sha512-zsaYxxZwACQbMmGg+UBjPUVemi325sDdnnB0mn+PNizE0fVC57B+vbLgdj45NBmr6P4nw6a0Y2rMupebwDWsdw==
|
||||||
dependencies:
|
dependencies:
|
||||||
vue-demi "*"
|
vue-demi "*"
|
||||||
|
|
||||||
@ -4498,14 +4589,14 @@ vue-router@^4.0.11:
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@vue/devtools-api" "^6.0.0-beta.14"
|
"@vue/devtools-api" "^6.0.0-beta.14"
|
||||||
|
|
||||||
vue-types@^4.0.3:
|
vue-types@^4.1.0:
|
||||||
version "4.1.0"
|
version "4.1.0"
|
||||||
resolved "https://registry.npmjs.org/vue-types/-/vue-types-4.1.0.tgz#8dcbbaccf9d5c3815449ac7cb8ae5864454cfff0"
|
resolved "https://registry.npmjs.org/vue-types/-/vue-types-4.1.0.tgz#8dcbbaccf9d5c3815449ac7cb8ae5864454cfff0"
|
||||||
integrity sha512-oPAeKKx5vY5Q8c7lMQPQyrBIbmWQGael5XEHqO1f+Y3V/RUZNuISz7KxI4woGjh79Vy/gDDaPX9j9zKYpaaA2g==
|
integrity sha512-oPAeKKx5vY5Q8c7lMQPQyrBIbmWQGael5XEHqO1f+Y3V/RUZNuISz7KxI4woGjh79Vy/gDDaPX9j9zKYpaaA2g==
|
||||||
dependencies:
|
dependencies:
|
||||||
is-plain-object "5.0.0"
|
is-plain-object "5.0.0"
|
||||||
|
|
||||||
vue@^3.1.1, vue@^3.2.11:
|
vue@^3.1.1:
|
||||||
version "3.2.11"
|
version "3.2.11"
|
||||||
resolved "https://registry.npmjs.org/vue/-/vue-3.2.11.tgz#6b92295048df705ddac558fd3e3ed553e55e57c8"
|
resolved "https://registry.npmjs.org/vue/-/vue-3.2.11.tgz#6b92295048df705ddac558fd3e3ed553e55e57c8"
|
||||||
integrity sha512-JkI3/eIgfk4E0f/p319TD3EZgOwBQfftgnkRsXlT7OrRyyiyoyUXn6embPGZXSBxD3LoZ9SWhJoxLhFh5AleeA==
|
integrity sha512-JkI3/eIgfk4E0f/p319TD3EZgOwBQfftgnkRsXlT7OrRyyiyoyUXn6embPGZXSBxD3LoZ9SWhJoxLhFh5AleeA==
|
||||||
@ -4514,6 +4605,15 @@ vue@^3.1.1, vue@^3.2.11:
|
|||||||
"@vue/runtime-dom" "3.2.11"
|
"@vue/runtime-dom" "3.2.11"
|
||||||
"@vue/shared" "3.2.11"
|
"@vue/shared" "3.2.11"
|
||||||
|
|
||||||
|
vue@^3.2.12:
|
||||||
|
version "3.2.12"
|
||||||
|
resolved "https://registry.npmjs.org/vue/-/vue-3.2.12.tgz#b44f55506fb6a7c4b65635e609deb5f9368aa2ce"
|
||||||
|
integrity sha512-VV14HtubmB56uuQaSvLkJZgoocPiN8CJI3zZA9y8h7q/Z5hcknDIFkbq5d8ku0ukZ6AJPQqMsZWcq0qryF0jgg==
|
||||||
|
dependencies:
|
||||||
|
"@vue/compiler-dom" "3.2.12"
|
||||||
|
"@vue/runtime-dom" "3.2.12"
|
||||||
|
"@vue/shared" "3.2.12"
|
||||||
|
|
||||||
vuedraggable@^4.1.0:
|
vuedraggable@^4.1.0:
|
||||||
version "4.1.0"
|
version "4.1.0"
|
||||||
resolved "https://registry.npmjs.org/vuedraggable/-/vuedraggable-4.1.0.tgz#edece68adb8a4d9e06accff9dfc9040e66852270"
|
resolved "https://registry.npmjs.org/vuedraggable/-/vuedraggable-4.1.0.tgz#edece68adb8a4d9e06accff9dfc9040e66852270"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user