refactor: use setup refactor

This commit is contained in:
xiaoxian521 2021-09-18 22:24:52 +08:00
parent 67db3cb1c3
commit 85f4917f26
18 changed files with 1139 additions and 1214 deletions

View File

@ -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",

View File

@ -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",

View File

@ -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;

View File

@ -1,60 +1,29 @@
<template> <script setup lang="ts">
<div class="flip-clock">
<flippers ref="flipperHour1" />
<flippers ref="flipperHour2" />
<em>:</em>
<flippers ref="flipperMinute1" />
<flippers ref="flipperMinute2" />
<em>:</em>
<flippers ref="flipperSecond1" />
<flippers ref="flipperSecond2" />
</div>
</template>
<script lang="ts">
import { ref, unref, nextTick, onUnmounted } from "vue"; import { ref, unref, nextTick, onUnmounted } from "vue";
import { templateRef } from "@vueuse/core";
import flippers from "./Filpper"; import flippers from "./Filpper";
import { templateRef } from "@vueuse/core"; let timer = ref(null);
export default { let flipObjs = ref([]);
name: "Flop",
components: {
flippers
},
setup() {
let timer = ref(null);
let flipObjs = ref([]);
const flipperHour1 = templateRef<HTMLElement | null>("flipperHour1", null); const flipperHour1 = templateRef<HTMLElement | null>("flipperHour1", null);
const flipperHour2 = templateRef<HTMLElement | null>("flipperHour2", null); const flipperHour2 = templateRef<HTMLElement | null>("flipperHour2", null);
const flipperMinute1 = templateRef<HTMLElement | null>( const flipperMinute1 = templateRef<HTMLElement | null>("flipperMinute1", null);
"flipperMinute1", const flipperMinute2 = templateRef<HTMLElement | null>("flipperMinute2", null);
null const flipperSecond1 = templateRef<HTMLElement | null>("flipperSecond1", null);
); const flipperSecond2 = templateRef<HTMLElement | null>("flipperSecond2", null);
const flipperMinute2 = templateRef<HTMLElement | null>(
"flipperMinute2",
null
);
const flipperSecond1 = templateRef<HTMLElement | null>(
"flipperSecond1",
null
);
const flipperSecond2 = templateRef<HTMLElement | null>(
"flipperSecond2",
null
);
// //
const init = () => { const init = () => {
let now = new Date(); let now = new Date();
let nowTimeStr = formatDate(new Date(now.getTime()), "hhiiss"); let nowTimeStr = formatDate(new Date(now.getTime()), "hhiiss");
for (let i = 0; i < flipObjs.value.length; i++) { for (let i = 0; i < flipObjs.value.length; i++) {
flipObjs?.value[i]?.setFront(nowTimeStr[i]); flipObjs?.value[i]?.setFront(nowTimeStr[i]);
} }
}; };
// //
const run = () => { const run = () => {
timer.value = setInterval(() => { timer.value = setInterval(() => {
// //
let now = new Date(); let now = new Date();
@ -67,10 +36,10 @@ export default {
flipObjs?.value[i]?.flipDown(nowTimeStr[i], nextTimeStr[i]); flipObjs?.value[i]?.flipDown(nowTimeStr[i], nextTimeStr[i]);
} }
}, 1000); }, 1000);
}; };
// //
const formatDate = (date: Date, dateFormat: string) => { const formatDate = (date: Date, dateFormat: string) => {
/* y /* y
* 例如yyyy => 2019 * 例如yyyy => 2019
yy => 19 yy => 19
@ -106,14 +75,14 @@ export default {
} }
} }
return dateFormat; return dateFormat;
}; };
// //
const padLeftZero = (str: string | any[]) => { const padLeftZero = (str: string | any[]) => {
return ("00" + str).substr(str.length); return ("00" + str).substr(str.length);
}; };
nextTick(() => { nextTick(() => {
flipObjs.value = [ flipObjs.value = [
unref(flipperHour1), unref(flipperHour1),
unref(flipperHour2), unref(flipperHour2),
@ -125,33 +94,29 @@ export default {
init(); init();
run(); run();
}); });
onUnmounted(() => { onUnmounted(() => {
if (timer.value) { if (timer.value) {
clearInterval(timer.value); clearInterval(timer.value);
timer.value = null; timer.value = null;
} }
}); });
return {
timer,
flipObjs,
init,
run,
formatDate,
padLeftZero,
flipperHour1,
flipperHour2,
flipperMinute1,
flipperMinute2,
flipperSecond1,
flipperSecond2
};
}
};
</script> </script>
<template>
<div class="flip-clock">
<flippers ref="flipperHour1" />
<flippers ref="flipperHour2" />
<em>:</em>
<flippers ref="flipperMinute1" />
<flippers ref="flipperMinute2" />
<em>:</em>
<flippers ref="flipperSecond1" />
<flippers ref="flipperSecond2" />
</div>
</template>
<style> <style>
.flip-clock .m-flipper { .flip-clock .m-flipper {
margin: 0 3px; margin: 0 3px;

View File

@ -1,54 +1,26 @@
<template> <script setup lang="ts">
<div class="control-container"> import { ref, unref, onMounted } from "vue";
<!-- 功能按钮 -->
<ul>
<li
v-for="(item, key) in titleLists"
:key="key"
:title="item.text"
:style="{ background: focusIndex === key ? '#ccc' : '' }"
@mouseenter.prevent="onEnter(key)"
@mouseleave.prevent="focusIndex = -1"
>
<button
:ref="'controlButton' + key"
:disabled="item.disabled"
:style="{
cursor: item.disabled === false ? 'pointer' : 'not-allowed'
}"
@click="onControl(item, key)"
>
<span :class="'iconfont ' + item.icon"></span>
<p>{{ item.text }}</p>
</button>
</li>
</ul>
</div>
</template>
<script lang="ts">
import { defineComponent, ref, unref, onMounted } from "vue";
import { templateRef } from "@vueuse/core"; import { templateRef } from "@vueuse/core";
import { LogicFlow } from "@logicflow/core";
export default defineComponent({ interface Props {
name: "Control", lf: LogicFlow;
props: { catTurboData?: boolean;
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); const props = withDefaults(defineProps<Props>(), {
let titleLists = ref([ 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", icon: "icon-zoom-out-hs",
text: "缩小", text: "缩小",
@ -84,9 +56,9 @@ export default defineComponent({
text: "查看数据", text: "查看数据",
disabled: false disabled: false
} }
]); ]);
const onControl = (item, key) => { const onControl = (item, key) => {
["zoom", "zoom", "resetZoom", "undo", "redo", "getSnapshot"].forEach( ["zoom", "zoom", "resetZoom", "undo", "redo", "getSnapshot"].forEach(
(v, i) => { (v, i) => {
let domControl = props.lf; let domControl = props.lf;
@ -101,31 +73,48 @@ export default defineComponent({
} }
} }
); );
}; };
const onEnter = key => { const onEnter = key => {
focusIndex.value = key; focusIndex.value = key;
}; };
onMounted(() => { onMounted(() => {
props.lf.on("history:change", ({ data: { undoAble, redoAble } }) => { props.lf.on("history:change", ({ data: { undoAble, redoAble } }) => {
unref(titleLists)[3].disabled = unref(controlButton3).disabled = unref(titleLists)[3].disabled = unref(controlButton3).disabled = !undoAble;
!undoAble; unref(titleLists)[4].disabled = unref(controlButton4).disabled = !redoAble;
unref(titleLists)[4].disabled = unref(controlButton4).disabled =
!redoAble;
}); });
});
return {
focusIndex,
titleLists,
onControl,
onEnter
};
}
}); });
</script> </script>
<template>
<div class="control-container">
<!-- 功能按钮 -->
<ul>
<li
v-for="(item, key) in titleLists"
:key="key"
:title="item.text"
:style="{ background: focusIndex === key ? '#ccc' : '' }"
@mouseenter.prevent="onEnter(key)"
@mouseleave.prevent="focusIndex = -1"
>
<button
:ref="'controlButton' + key"
:disabled="item.disabled"
:style="{
cursor: item.disabled === false ? 'pointer' : 'not-allowed'
}"
@click="onControl(item, key)"
>
<span :class="'iconfont ' + item.icon"></span>
<p>{{ item.text }}</p>
</button>
</li>
</ul>
</div>
</template>
<style scoped> <style scoped>
@import "./assets/iconfont/iconfont.css"; @import "./assets/iconfont/iconfont.css";

View File

@ -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>

View File

@ -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;

View File

@ -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>

View File

@ -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;

View File

@ -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
}; };

View File

@ -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,36 +19,27 @@ 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();
const mapSet: mapInter = reactive({
loading: deviceDetection() ? false : true loading: deviceDetection() ? false : true
}); });
// () // ()
const complete = (): void => { const complete = (): void => {
if (map) { if (map) {
map.on("complete", () => { map.on("complete", () => {
mapSet.loading = false; mapSet.loading = false;
}); });
} }
}; };
// onBeforeMount(() => {
const destroyMap = (): void => {
if (map) {
map.destroy() && map.clearEvents("click");
}
};
onBeforeMount(() => {
if (!instance) return; if (!instance) return;
let { MapConfigure } = let { MapConfigure } = instance.appContext.config.globalProperties.$config;
instance.appContext.config.globalProperties.$config;
let { options } = MapConfigure; let { options } = MapConfigure;
AMapLoader.load({ AMapLoader.load({
@ -100,7 +63,8 @@ export default defineComponent({
}); });
MarkerCluster = new AMap.MarkerCluster(map, [], { MarkerCluster = new AMap.MarkerCluster(map, [], {
gridSize: 80, // //
gridSize: 80,
maxZoom: 14, maxZoom: 14,
renderMarker(ctx) { renderMarker(ctx) {
let { marker, data } = ctx; let { marker, data } = ctx;
@ -112,8 +76,10 @@ export default defineComponent({
marker.setContent(content); marker.setContent(content);
marker.setLabel({ marker.setLabel({
direction: "bottom", direction: "bottom",
offset: new AMap.Pixel(-4, 0), // //
content: `<div> ${plateNumber}(${driver})</div>` // offset: new AMap.Pixel(-4, 0),
//
content: `<div> ${plateNumber}(${driver})</div>`
}); });
marker.setOffset(new AMap.Pixel(-18, -10)); marker.setOffset(new AMap.Pixel(-18, -10));
marker.on("click", ({ lnglat }) => { marker.on("click", ({ lnglat }) => {
@ -145,18 +111,27 @@ export default defineComponent({
mapSet.loading = false; mapSet.loading = false;
throw "地图加载失败,请重新加载"; throw "地图加载失败,请重新加载";
}); });
}); });
return { onUnmounted(() => {
...toRefs(mapSet), if (map) {
complete, //
destroyMap, map.destroy() && map.clearEvents("click");
greenCar
};
} }
}); });
</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%;

View File

@ -1,14 +0,0 @@
<template>
<div></div>
</template>
<script lang="ts">
export default {
name: "BaiduMap",
setup() {
return {};
}
};
</script>
<style scoped></style>

View File

@ -1,41 +1,6 @@
<template> <script setup lang="ts">
<div :ref="'wrap' + classOption['key']"> import { computed, ref, unref, nextTick } from "vue";
<div import type { CSSProperties, PropType } from "vue";
:style="leftSwitch"
v-if="navigation"
:class="leftSwitchClass"
@click="leftSwitchClick"
>
<slot name="left-switch"></slot>
</div>
<div
:style="rightSwitch"
v-if="navigation"
:class="rightSwitchClass"
@click="rightSwitchClick"
>
<slot name="right-switch"></slot>
</div>
<div
:ref="'realBox' + classOption['key']"
:style="pos"
@mouseenter="enter"
@mouseleave="leave"
@touchstart="touchStart"
@touchmove="touchMove"
@touchend="touchEnd"
@mousewheel="wheel"
>
<div :ref="'slotList' + classOption['key']" :style="float">
<slot></slot>
</div>
<div v-html="copyHtml" :style="float"></div>
</div>
</div>
</template>
<script lang="ts">
import { defineComponent, computed, ref, unref, nextTick } from "vue";
import { import {
tryOnMounted, tryOnMounted,
tryOnUnmounted, tryOnUnmounted,
@ -46,77 +11,68 @@ import * as utilsMethods from "./utils";
const { animationFrame, copyObj } = utilsMethods; const { animationFrame, copyObj } = utilsMethods;
animationFrame(); animationFrame();
export default defineComponent({ const props = defineProps({
name: "SeamlessScroll",
props: {
data: { data: {
type: Array, type: Array as PropType<unknown>
default: () => {
return [];
}
}, },
classOption: { classOption: {
type: Object, type: Object as PropType<unknown>
default: () => {
return {};
} }
} });
},
emits: ["ScrollEnd"],
setup(props, { emit }) {
let xPos = ref(0);
let yPos = ref(0);
let delay = ref(0);
let copyHtml = ref("");
let height = ref(0);
//
let width = ref(0);
//
let realBoxWidth = ref(0);
let realBoxHeight = ref(0);
// single const emit = defineEmits<{
let singleWaitTime = null; (e: "scrollEnd"): void;
// moveanimationFrame }>();
let reqFrame = null;
let startPos = null;
//touchStartposY
let startPosY = null;
//touchStartposX
let startPosX = null;
// mouseenter mouseleave scrollMove()
let isHover = false;
let ease = "ease-in";
// eslint-disable-next-line vue/no-setup-props-destructure let xPos = ref<number>(0);
let { classOption } = props; let yPos = ref<number>(0);
let delay = ref<number>(0);
let height = ref<number>(0);
//
let width = ref<number>(0);
//
let realBoxWidth = ref<number>(0);
let realBoxHeight = ref<number>(0);
let copyHtml = ref("");
// single
let singleWaitTime = null;
// moveanimationFrame
let reqFrame = null;
let startPos = null;
//touchStartposY
let startPosY = null;
//touchStartposX
let startPosX = null;
// mouseenter mouseleave scrollMove()
let isHover = false;
let ease = "ease-in";
if (classOption["key"] === undefined) { // eslint-disable-next-line vue/no-setup-props-destructure
let { classOption } = props;
if (classOption["key"] === undefined) {
classOption["key"] = 0; classOption["key"] = 0;
} }
const wrap = templateRef<HTMLElement | null>( const wrap = templateRef<HTMLElement | null>(`wrap${classOption["key"]}`, null);
`wrap${classOption["key"]}`, const slotList = templateRef<HTMLElement | null>(
null
);
const slotList = templateRef<HTMLElement | null>(
`slotList${classOption["key"]}`, `slotList${classOption["key"]}`,
null null
); );
const realBox = templateRef<HTMLElement | null>( const realBox = templateRef<HTMLElement | null>(
`realBox${classOption["key"]}`, `realBox${classOption["key"]}`,
null null
); );
let leftSwitchState = computed(() => { let leftSwitchState = computed(() => {
return unref(xPos) < 0; return unref(xPos) < 0;
}); });
let rightSwitchState = computed(() => { let rightSwitchState = computed(() => {
return Math.abs(unref(xPos)) < unref(realBoxWidth) - unref(width); return Math.abs(unref(xPos)) < unref(realBoxWidth) - unref(width);
}); });
let defaultOption = computed(() => { let defaultOption = computed(() => {
return { return {
// //
step: 1, step: 1,
@ -143,30 +99,30 @@ export default defineComponent({
// singleWidth/singleHeight rem // singleWidth/singleHeight rem
isSingleRemUnit: false isSingleRemUnit: false
}; };
}); });
let options = computed(() => { let options = computed(() => {
// @ts-ignore // @ts-ignore
return copyObj({}, unref(defaultOption), classOption); return copyObj({}, unref(defaultOption), classOption);
}); });
let leftSwitchClass = computed(() => { const leftSwitchClass = computed(() => {
return unref(leftSwitchState) ? "" : unref(options).switchDisabledClass; return unref(leftSwitchState) ? "" : unref(options).switchDisabledClass;
}); });
let rightSwitchClass = computed(() => { let rightSwitchClass = computed(() => {
return unref(rightSwitchState) ? "" : unref(options).switchDisabledClass; return unref(rightSwitchState) ? "" : unref(options).switchDisabledClass;
}); });
let leftSwitch = computed(() => { let leftSwitch = computed((): CSSProperties => {
return { return {
position: "absolute", position: "absolute",
margin: `${unref(height) / 2}px 0 0 -${unref(options).switchOffset}px`, margin: `${unref(height) / 2}px 0 0 -${unref(options).switchOffset}px`,
transform: "translate(-100%,-50%)" transform: "translate(-100%,-50%)"
}; };
}); });
let rightSwitch = computed(() => { let rightSwitch = computed((): CSSProperties => {
return { return {
position: "absolute", position: "absolute",
margin: `${unref(height) / 2}px 0 0 ${ margin: `${unref(height) / 2}px 0 0 ${
@ -174,68 +130,65 @@ export default defineComponent({
}px`, }px`,
transform: "translateY(-50%)" transform: "translateY(-50%)"
}; };
}); });
let isHorizontal = computed(() => { let isHorizontal = computed(() => {
return ( return (
unref(options).direction !== "bottom" && unref(options).direction !== "bottom" && unref(options).direction !== "top"
unref(options).direction !== "top"
); );
}); });
let float = computed(() => { let float = computed((): CSSProperties => {
return unref(isHorizontal) return unref(isHorizontal)
? { float: "left", overflow: "hidden" } ? { float: "left", overflow: "hidden" }
: { overflow: "hidden" }; : { overflow: "hidden" };
}); });
let pos = computed(() => { let pos = computed(() => {
return { return {
transform: `translate(${unref(xPos)}px,${unref(yPos)}px)`, transform: `translate(${unref(xPos)}px,${unref(yPos)}px)`,
transition: `all ${ease} ${unref(delay)}ms`, transition: `all ${ease} ${unref(delay)}ms`,
overflow: "hidden" overflow: "hidden"
}; };
}); });
let navigation = computed(() => { let navigation = computed(() => {
return unref(options).navigation; return unref(options).navigation;
}); });
let autoPlay = computed(() => { let autoPlay = computed(() => {
if (unref(navigation)) return false; if (unref(navigation)) return false;
return unref(options).autoPlay; return unref(options).autoPlay;
}); });
let scrollSwitch = computed(() => { let scrollSwitch = computed(() => {
// props . // props .
return props.data.length >= unref(options).limitMoveNum; return props.data.length >= unref(options).limitMoveNum;
}); });
let hoverStopSwitch = computed(() => { let hoverStopSwitch = computed(() => {
return unref(options).hoverStop && unref(autoPlay) && unref(scrollSwitch); return unref(options).hoverStop && unref(autoPlay) && unref(scrollSwitch);
}); });
let canTouchScroll = computed(() => { let canTouchScroll = computed(() => {
return unref(options).openTouch; return unref(options).openTouch;
}); });
let baseFontSize = computed(() => { let baseFontSize = computed(() => {
return unref(options).isSingleRemUnit return unref(options).isSingleRemUnit
? parseInt( ? parseInt(window.getComputedStyle(document.documentElement, null).fontSize)
window.getComputedStyle(document.documentElement, null).fontSize
)
: 1; : 1;
}); });
let realSingleStopWidth = computed(() => { let realSingleStopWidth = computed(() => {
return unref(options).singleWidth * unref(baseFontSize); return unref(options).singleWidth * unref(baseFontSize);
}); });
let realSingleStopHeight = computed(() => { let realSingleStopHeight = computed(() => {
return unref(options).singleHeight * unref(baseFontSize); return unref(options).singleHeight * unref(baseFontSize);
}); });
let step = computed(() => { let step = computed(() => {
let singleStep; let singleStep;
let step = unref(options).step; let step = unref(options).step;
if (unref(isHorizontal)) { if (unref(isHorizontal)) {
@ -247,16 +200,16 @@ export default defineComponent({
throw "如果设置了单步滚动step需是单步大小的约数否则无法保证单步滚动结束的位置是否准确"; throw "如果设置了单步滚动step需是单步大小的约数否则无法保证单步滚动结束的位置是否准确";
} }
return step; return step;
}); });
function reset() { function reset() {
xPos.value = 0; xPos.value = 0;
yPos.value = 0; yPos.value = 0;
scrollCancle(); scrollCancle();
scrollInitMove(); scrollInitMove();
} }
function leftSwitchClick() { function leftSwitchClick() {
if (!unref(leftSwitchState)) return; if (!unref(leftSwitchState)) return;
// //
if (Math.abs(unref(xPos)) < unref(options).switchSingleStep) { if (Math.abs(unref(xPos)) < unref(options).switchSingleStep) {
@ -264,9 +217,9 @@ export default defineComponent({
return; return;
} }
xPos.value += unref(options).switchSingleStep; xPos.value += unref(options).switchSingleStep;
} }
function rightSwitchClick() { function rightSwitchClick() {
if (!unref(rightSwitchState)) return; if (!unref(rightSwitchState)) return;
// //
if ( if (
@ -277,13 +230,13 @@ export default defineComponent({
return; return;
} }
xPos.value -= unref(options).switchSingleStep; xPos.value -= unref(options).switchSingleStep;
} }
function scrollCancle() { function scrollCancle() {
cancelAnimationFrame(reqFrame || ""); cancelAnimationFrame(reqFrame || "");
} }
function touchStart(e) { function touchStart(e) {
if (!unref(canTouchScroll)) return; if (!unref(canTouchScroll)) return;
let timer; let timer;
//touchestouchtouch //touchestouchtouch
@ -306,9 +259,9 @@ export default defineComponent({
} else { } else {
scrollCancle(); scrollCancle();
} }
} }
function touchMove(e) { function touchMove(e) {
//touchmove //touchmove
if ( if (
!unref(canTouchScroll) || !unref(canTouchScroll) ||
@ -339,9 +292,9 @@ export default defineComponent({
// && // &&
xPos.value = startPosX + endPos.x; xPos.value = startPosX + endPos.x;
} }
} }
function touchEnd() { function touchEnd() {
if (!unref(canTouchScroll)) return; if (!unref(canTouchScroll)) return;
let timer; let timer;
const direction = unref(options).direction; const direction = unref(options).direction;
@ -362,17 +315,17 @@ export default defineComponent({
delay.value = 0; delay.value = 0;
scrollMove(); scrollMove();
}, unref(delay)); }, unref(delay));
} }
function enter() { function enter() {
if (unref(hoverStopSwitch)) scrollStopMove(); if (unref(hoverStopSwitch)) scrollStopMove();
} }
function leave() { function leave() {
if (unref(hoverStopSwitch)) scrollStartMove(); if (unref(hoverStopSwitch)) scrollStartMove();
} }
function scrollMove() { function scrollMove() {
// scrollMove() // scrollMove()
if (isHover) return; if (isHover) return;
//move touchMove //move touchMove
@ -386,28 +339,28 @@ export default defineComponent({
if (direction === "top") { if (direction === "top") {
// //
if (Math.abs(unref(yPos)) >= h) { if (Math.abs(unref(yPos)) >= h) {
emit("ScrollEnd"); emit("scrollEnd");
yPos.value = 0; yPos.value = 0;
} }
yPos.value -= step.value; yPos.value -= step.value;
} else if (direction === "bottom") { } else if (direction === "bottom") {
// //
if (unref(yPos) >= 0) { if (unref(yPos) >= 0) {
emit("ScrollEnd"); emit("scrollEnd");
yPos.value = h * -1; yPos.value = h * -1;
} }
yPos.value += step.value; yPos.value += step.value;
} else if (direction === "left") { } else if (direction === "left") {
// //
if (Math.abs(unref(xPos)) >= w) { if (Math.abs(unref(xPos)) >= w) {
emit("ScrollEnd"); emit("scrollEnd");
xPos.value = 0; xPos.value = 0;
} }
xPos.value -= step.value; xPos.value -= step.value;
} else if (direction === "right") { } else if (direction === "right") {
// //
if (unref(xPos) >= 0) { if (unref(xPos) >= 0) {
emit("ScrollEnd"); emit("scrollEnd");
xPos.value = w * -1; xPos.value = w * -1;
} }
xPos.value += step.value; xPos.value += step.value;
@ -415,10 +368,7 @@ export default defineComponent({
if (singleWaitTime) clearTimeout(singleWaitTime); if (singleWaitTime) clearTimeout(singleWaitTime);
if (unref(realSingleStopHeight)) { if (unref(realSingleStopHeight)) {
// //
if ( if (Math.abs(unref(yPos)) % unref(realSingleStopHeight) < unref(step)) {
Math.abs(unref(yPos)) % unref(realSingleStopHeight) <
unref(step)
) {
// waitTime // waitTime
singleWaitTime = setTimeout(() => { singleWaitTime = setTimeout(() => {
scrollMove(); scrollMove();
@ -427,10 +377,7 @@ export default defineComponent({
scrollMove(); scrollMove();
} }
} else if (unref(realSingleStopWidth)) { } else if (unref(realSingleStopWidth)) {
if ( if (Math.abs(unref(xPos)) % unref(realSingleStopWidth) < unref(step)) {
Math.abs(unref(xPos)) % unref(realSingleStopWidth) <
unref(step)
) {
// waitTime // waitTime
singleWaitTime = setTimeout(() => { singleWaitTime = setTimeout(() => {
scrollMove(); scrollMove();
@ -442,9 +389,9 @@ export default defineComponent({
scrollMove(); scrollMove();
} }
}); });
} }
function scrollInitMove() { function scrollInitMove() {
nextTick(() => { nextTick(() => {
const { switchDelay } = unref(options); const { switchDelay } = unref(options);
//copy //copy
@ -485,39 +432,24 @@ export default defineComponent({
yPos.value = xPos.value = 0; yPos.value = xPos.value = 0;
} }
}); });
} }
function scrollStartMove() { function scrollStartMove() {
//scrollMove //scrollMove
isHover = false; isHover = false;
scrollMove(); scrollMove();
} }
function scrollStopMove() { function scrollStopMove() {
//scrollMove //scrollMove
isHover = true; isHover = true;
// hover, // hover,
if (singleWaitTime) clearTimeout(singleWaitTime); if (singleWaitTime) clearTimeout(singleWaitTime);
scrollCancle(); scrollCancle();
} }
// watchEffect(() => { //
// const watchData = data; function wheel(e) {
// if (!watchData) return;
// nextTick(() => {
// reset();
// });
// const watchAutoPlay = unref(autoPlay);
// if (watchAutoPlay) {
// reset();
// } else {
// scrollStopMove();
// }
// });
//
function wheel(e) {
e.preventDefault(); e.preventDefault();
if ( if (
unref(options).direction === "left" || unref(options).direction === "left" ||
@ -527,59 +459,69 @@ export default defineComponent({
useDebounceFn(() => { useDebounceFn(() => {
e.deltaY > 0 ? (yPos.value -= step.value) : (yPos.value += step.value); e.deltaY > 0 ? (yPos.value -= step.value) : (yPos.value += step.value);
}, 50)(); }, 50)();
} }
tryOnMounted(() => { // watchEffect(() => {
// const watchData = data;
// if (!watchData) return;
// nextTick(() => {
// reset();
// });
// const watchAutoPlay = unref(autoPlay);
// if (watchAutoPlay) {
// reset();
// } else {
// scrollStopMove();
// }
// });
tryOnMounted(() => {
scrollInitMove(); scrollInitMove();
}); });
tryOnUnmounted(() => { tryOnUnmounted(() => {
scrollCancle(); scrollCancle();
clearTimeout(singleWaitTime); clearTimeout(singleWaitTime);
}); });
return { defineExpose({
xPos, reset
yPos,
delay,
copyHtml,
height,
width,
realBoxWidth,
leftSwitchState,
rightSwitchState,
options,
leftSwitchClass,
rightSwitchClass,
leftSwitch,
rightSwitch,
isHorizontal,
float,
pos,
navigation,
autoPlay,
scrollSwitch,
hoverStopSwitch,
canTouchScroll,
baseFontSize,
realSingleStopWidth,
realSingleStopHeight,
step,
reset,
leftSwitchClick,
rightSwitchClick,
scrollCancle,
touchStart,
touchMove,
touchEnd,
enter,
leave,
scrollMove,
scrollInitMove,
scrollStartMove,
scrollStopMove,
wheel
};
}
}); });
</script> </script>
<template>
<div :ref="'wrap' + classOption['key']">
<div
:style="leftSwitch"
v-if="navigation"
:class="leftSwitchClass"
@click="leftSwitchClick"
>
<slot name="left-switch"></slot>
</div>
<div
:style="rightSwitch"
v-if="navigation"
:class="rightSwitchClass"
@click="rightSwitchClick"
>
<slot name="right-switch"></slot>
</div>
<div
:ref="'realBox' + classOption['key']"
:style="pos"
@mouseenter="enter"
@mouseleave="leave"
@touchstart="touchStart"
@touchmove="touchMove"
@touchend="touchEnd"
@mousewheel="wheel"
>
<div :ref="'slotList' + classOption['key']" :style="float">
<slot></slot>
</div>
<div v-html="copyHtml" :style="float"></div>
</div>
</div>
</template>

View File

@ -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 ||

View File

@ -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
View File

@ -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
View File

@ -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
View File

@ -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"