@fishawack/lab-velocity 2.0.0-beta.1 → 2.0.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_Build/vue/components/Icon.vue +33 -0
- package/_Build/vue/components/Svg.vue +45 -0
- package/_Build/vue/components/basic/Button.vue +109 -0
- package/_Build/vue/components/basic/link.vue +64 -0
- package/_Build/vue/components/form/Cascader.vue +85 -0
- package/_Build/vue/components/form/Checkbox.vue +39 -0
- package/_Build/vue/components/form/CheckboxGroup.vue +91 -0
- package/_Build/vue/components/form/DatePicker.vue +116 -0
- package/_Build/vue/components/form/InputNumber.vue +89 -0
- package/_Build/vue/components/form/Select.vue +109 -0
- package/_Build/vue/components/form/Switch.vue +63 -0
- package/_Build/vue/components/form/Upload.vue +101 -0
- package/_Build/vue/components/form/Wysiwyg.vue +127 -0
- package/_Build/vue/components/form/Wysiwyg2.vue +577 -0
- package/_Build/vue/components/form/basic.vue +106 -0
- package/_Build/vue/components/form/color.vue +22 -0
- package/_Build/vue/components/form/file.vue +89 -0
- package/_Build/vue/components/form/input.js +79 -0
- package/_Build/vue/components/form/input.vue +105 -0
- package/_Build/vue/components/layout/Alert.vue +38 -0
- package/_Build/vue/components/layout/Footer.vue +50 -0
- package/_Build/vue/components/layout/Header.vue +13 -0
- package/_Build/vue/components/layout/Loader.vue +59 -0
- package/_Build/vue/components/layout/Tooltip.vue +46 -0
- package/_Build/vue/components/layout/pageTitle.vue +18 -0
- package/_Build/vue/components/layout/sideBar.vue +25 -0
- package/_Build/vue/components/navigation/Breadcrumbs.vue +37 -0
- package/_Build/vue/components/navigation/BreadcrumbsItem.vue +19 -0
- package/_Build/vue/components/navigation/Menu.vue +14 -0
- package/_Build/vue/components/navigation/MenuItem.vue +20 -0
- package/_Build/vue/components/navigation/MenuItemGroup.vue +20 -0
- package/_Build/vue/components/navigation/SubMenu.vue +20 -0
- package/_Build/vue/modules/AuthModule/adminRoutes/PCompanies/Children/Upload/upload.vue +251 -0
- package/_Build/vue/modules/AuthModule/adminRoutes/PCompanies/Children/create.vue +62 -0
- package/_Build/vue/modules/AuthModule/adminRoutes/PCompanies/Children/edit.vue +98 -0
- package/_Build/vue/modules/AuthModule/adminRoutes/PCompanies/Children/index.vue +90 -0
- package/_Build/vue/modules/AuthModule/adminRoutes/PCompanies/Children/partials/form.vue +173 -0
- package/_Build/vue/modules/AuthModule/adminRoutes/PCompanies/Children/show.vue +262 -0
- package/_Build/vue/modules/AuthModule/adminRoutes/PCompanies/parent.vue +36 -0
- package/_Build/vue/modules/AuthModule/adminRoutes/PUsers/Children/create.vue +112 -0
- package/_Build/vue/modules/AuthModule/adminRoutes/PUsers/Children/edit.vue +103 -0
- package/_Build/vue/modules/AuthModule/adminRoutes/PUsers/Children/index.vue +112 -0
- package/_Build/vue/modules/AuthModule/adminRoutes/PUsers/Children/partials/form.vue +169 -0
- package/_Build/vue/modules/AuthModule/adminRoutes/PUsers/Children/show.vue +120 -0
- package/_Build/vue/modules/AuthModule/adminRoutes/PUsers/parent.vue +36 -0
- package/_Build/vue/modules/AuthModule/components/AuthModal.vue +105 -0
- package/_Build/vue/modules/AuthModule/components/Chip.vue +70 -0
- package/_Build/vue/modules/AuthModule/components/Chips.vue +26 -0
- package/_Build/vue/modules/AuthModule/components/FormRole.vue +115 -0
- package/_Build/vue/modules/AuthModule/components/VBreadcrumbs.vue +33 -0
- package/_Build/vue/modules/AuthModule/components/VFormFooter.vue +46 -0
- package/_Build/vue/modules/AuthModule/components/VPageHeader.vue +38 -0
- package/_Build/vue/modules/AuthModule/components/VPasswordValidation.vue +106 -0
- package/_Build/vue/modules/AuthModule/components/VRoleLegend.vue +43 -0
- package/_Build/vue/modules/AuthModule/components/VTable.vue +127 -0
- package/_Build/vue/modules/AuthModule/components/VTableSorter.vue +240 -0
- package/_Build/vue/modules/AuthModule/js/FakeAPI.js +78 -0
- package/_Build/vue/modules/AuthModule/js/axios.js +62 -0
- package/_Build/vue/modules/AuthModule/js/router.js +295 -0
- package/_Build/vue/modules/AuthModule/js/store.js +62 -0
- package/_Build/vue/modules/AuthModule/routes/account-exists.vue +33 -0
- package/_Build/vue/modules/AuthModule/routes/change-password.vue +165 -0
- package/_Build/vue/modules/AuthModule/routes/container.vue +34 -0
- package/_Build/vue/modules/AuthModule/routes/expired-reset.vue +78 -0
- package/_Build/vue/modules/AuthModule/routes/expired-verification.vue +100 -0
- package/_Build/vue/modules/AuthModule/routes/force-reset.vue +152 -0
- package/_Build/vue/modules/AuthModule/routes/forgot.vue +91 -0
- package/_Build/vue/modules/AuthModule/routes/login.vue +143 -0
- package/_Build/vue/modules/AuthModule/routes/logincallback.vue +41 -0
- package/_Build/vue/modules/AuthModule/routes/loginheadless.vue +21 -0
- package/_Build/vue/modules/AuthModule/routes/loginsso.vue +134 -0
- package/_Build/vue/modules/AuthModule/routes/logout.vue +21 -0
- package/_Build/vue/modules/AuthModule/routes/logoutheadless.vue +27 -0
- package/_Build/vue/modules/AuthModule/routes/register.vue +174 -0
- package/_Build/vue/modules/AuthModule/routes/reset.vue +133 -0
- package/_Build/vue/modules/AuthModule/routes/success-forgot.vue +119 -0
- package/_Build/vue/modules/AuthModule/routes/success-reset.vue +35 -0
- package/_Build/vue/modules/AuthModule/routes/success-verify.vue +32 -0
- package/_Build/vue/modules/AuthModule/routes/verify.vue +113 -0
- package/package.json +3 -9
- package/components/_alert.scss +0 -5
- package/components/_basic.scss +0 -55
- package/components/_breadcrumbs.scss +0 -39
- package/components/_button.scss +0 -304
- package/components/_cascader.scss +0 -12
- package/components/_checkbox.scss +0 -41
- package/components/_chip.scss +0 -24
- package/components/_collapse.scss +0 -24
- package/components/_datepicker.scss +0 -52
- package/components/_footer.scss +0 -46
- package/components/_form.scss +0 -24
- package/components/_header.scss +0 -54
- package/components/_icon.scss +0 -25
- package/components/_input.scss +0 -0
- package/components/_inputNumber.scss +0 -22
- package/components/_link.scss +0 -44
- package/components/_loader.scss +0 -43
- package/components/_menu.scss +0 -112
- package/components/_pageTitle.scss +0 -8
- package/components/_permissionLegend.scss +0 -18
- package/components/_select.scss +0 -29
- package/components/_sidebar.scss +0 -56
- package/components/_switch.scss +0 -14
- package/components/_table.scss +0 -20
- package/components/_tooltip.scss +0 -4
- package/components/_typography.scss +0 -162
- package/components/_upload.scss +0 -15
- package/components/_wysiwyg.scss +0 -7
- package/components/_wysiwyg2.scss +0 -142
- package/modules/_AuthModule.scss +0 -212
- package/modules/_AuthVariables.scss +0 -7
- package/modules/_modal.scss +0 -24
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<XInput v-bind="$props">
|
|
3
|
+
<template #label>
|
|
4
|
+
<slot name="label" />
|
|
5
|
+
</template>
|
|
6
|
+
|
|
7
|
+
<el-color-picker v-model="content" @change="handleInput" />
|
|
8
|
+
</XInput>
|
|
9
|
+
</template>
|
|
10
|
+
|
|
11
|
+
<script>
|
|
12
|
+
import input from "./input.js";
|
|
13
|
+
import XInput from "./input.vue";
|
|
14
|
+
|
|
15
|
+
export default {
|
|
16
|
+
mixins: [input],
|
|
17
|
+
|
|
18
|
+
components: {
|
|
19
|
+
XInput,
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
</script>
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<XInput v-bind="$props">
|
|
3
|
+
<template #label>
|
|
4
|
+
<slot name="label" />
|
|
5
|
+
</template>
|
|
6
|
+
|
|
7
|
+
<input
|
|
8
|
+
ref="input"
|
|
9
|
+
type="file"
|
|
10
|
+
class="absolute invisible top-0 left-0"
|
|
11
|
+
@change="onImageChange"
|
|
12
|
+
/>
|
|
13
|
+
<div class="border-solid border border-color-6">
|
|
14
|
+
<el-empty
|
|
15
|
+
@click.prevent="$refs.input.click()"
|
|
16
|
+
class="p-0 w-100 block mx-auto cursor"
|
|
17
|
+
style="max-width: 150px"
|
|
18
|
+
:image="hasPreview && imgSrc"
|
|
19
|
+
:description="hasPreview ? 'Preview' : 'No preview available'"
|
|
20
|
+
/>
|
|
21
|
+
</div>
|
|
22
|
+
<div class="text-center mt-0.5">
|
|
23
|
+
<el-button v-if="content" type="danger" @click="cancel"
|
|
24
|
+
>Clear</el-button
|
|
25
|
+
>
|
|
26
|
+
</div>
|
|
27
|
+
</XInput>
|
|
28
|
+
</template>
|
|
29
|
+
|
|
30
|
+
<script>
|
|
31
|
+
import input from "./input.js";
|
|
32
|
+
import XInput from "./input.vue";
|
|
33
|
+
|
|
34
|
+
export default {
|
|
35
|
+
mixins: [input],
|
|
36
|
+
|
|
37
|
+
components: { XInput },
|
|
38
|
+
|
|
39
|
+
props: {
|
|
40
|
+
preview: {},
|
|
41
|
+
},
|
|
42
|
+
|
|
43
|
+
data() {
|
|
44
|
+
return {
|
|
45
|
+
imgSrc: null,
|
|
46
|
+
};
|
|
47
|
+
},
|
|
48
|
+
|
|
49
|
+
mounted() {
|
|
50
|
+
this.imgSrc = this.preview;
|
|
51
|
+
},
|
|
52
|
+
|
|
53
|
+
computed: {
|
|
54
|
+
hasPreview() {
|
|
55
|
+
return this.imgSrc &&
|
|
56
|
+
[".svg", ".jpg", ".png", "data:image/"].some((d) =>
|
|
57
|
+
this.imgSrc.includes(d),
|
|
58
|
+
)
|
|
59
|
+
? this.imgSrc
|
|
60
|
+
: "";
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
|
|
64
|
+
methods: {
|
|
65
|
+
onImageChange(e) {
|
|
66
|
+
if (!e.target.files.length) return;
|
|
67
|
+
|
|
68
|
+
let file = e.target.files[0];
|
|
69
|
+
let reader = new FileReader();
|
|
70
|
+
|
|
71
|
+
reader.readAsDataURL(file);
|
|
72
|
+
|
|
73
|
+
reader.onload = (e) => {
|
|
74
|
+
this.imgSrc = reader.result;
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
this.content = file;
|
|
78
|
+
|
|
79
|
+
this.handleInput();
|
|
80
|
+
},
|
|
81
|
+
cancel() {
|
|
82
|
+
this.$refs.input.value = null;
|
|
83
|
+
this.content = null;
|
|
84
|
+
this.imgSrc = this.preview;
|
|
85
|
+
this.handleInput();
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
</script>
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
props: {
|
|
3
|
+
type: {
|
|
4
|
+
type: String,
|
|
5
|
+
default: "text",
|
|
6
|
+
},
|
|
7
|
+
placeholder: {
|
|
8
|
+
type: String,
|
|
9
|
+
default: null,
|
|
10
|
+
},
|
|
11
|
+
required: {
|
|
12
|
+
type: Boolean,
|
|
13
|
+
default: false,
|
|
14
|
+
},
|
|
15
|
+
disabled: {
|
|
16
|
+
type: Boolean,
|
|
17
|
+
default: false,
|
|
18
|
+
},
|
|
19
|
+
autofocus: {
|
|
20
|
+
type: Boolean,
|
|
21
|
+
default: false,
|
|
22
|
+
},
|
|
23
|
+
modelValue: {
|
|
24
|
+
type: [String, Number, Array],
|
|
25
|
+
default: null,
|
|
26
|
+
},
|
|
27
|
+
label: {
|
|
28
|
+
type: String,
|
|
29
|
+
default: null,
|
|
30
|
+
},
|
|
31
|
+
name: {
|
|
32
|
+
type: String,
|
|
33
|
+
default: null,
|
|
34
|
+
},
|
|
35
|
+
id: {
|
|
36
|
+
type: String,
|
|
37
|
+
default: null,
|
|
38
|
+
},
|
|
39
|
+
size: {
|
|
40
|
+
type: String,
|
|
41
|
+
default: null,
|
|
42
|
+
},
|
|
43
|
+
error: {
|
|
44
|
+
type: [String, Object],
|
|
45
|
+
default: null,
|
|
46
|
+
},
|
|
47
|
+
baseClass: {
|
|
48
|
+
type: String,
|
|
49
|
+
default: null,
|
|
50
|
+
},
|
|
51
|
+
classes: {
|
|
52
|
+
type: String,
|
|
53
|
+
default: null,
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
emits: ["update:modelValue"],
|
|
58
|
+
|
|
59
|
+
data() {
|
|
60
|
+
return {
|
|
61
|
+
content: "",
|
|
62
|
+
};
|
|
63
|
+
},
|
|
64
|
+
|
|
65
|
+
watch: {
|
|
66
|
+
modelValue: {
|
|
67
|
+
immediate: true,
|
|
68
|
+
handler(val) {
|
|
69
|
+
this.content = val;
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
|
|
74
|
+
methods: {
|
|
75
|
+
handleInput() {
|
|
76
|
+
this.$emit("update:modelValue", this.content);
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
};
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div
|
|
3
|
+
class="form__group"
|
|
4
|
+
:class="{
|
|
5
|
+
[baseClass]: baseClass,
|
|
6
|
+
'form__group--error': hasError(name),
|
|
7
|
+
[classes]: classes,
|
|
8
|
+
}"
|
|
9
|
+
>
|
|
10
|
+
<label
|
|
11
|
+
v-if="(label || $slots.label) && inputType !== 'button'"
|
|
12
|
+
:class="{ [baseClass + '__label']: baseClass }"
|
|
13
|
+
:for="name"
|
|
14
|
+
>
|
|
15
|
+
<slot name="label">
|
|
16
|
+
<span v-html="label"></span>
|
|
17
|
+
</slot>
|
|
18
|
+
</label>
|
|
19
|
+
|
|
20
|
+
<slot />
|
|
21
|
+
|
|
22
|
+
<div
|
|
23
|
+
v-if="hasError(name)"
|
|
24
|
+
class="form__error"
|
|
25
|
+
:class="{ [baseClass + '__error']: baseClass }"
|
|
26
|
+
>
|
|
27
|
+
<small v-html="first(name)" />
|
|
28
|
+
</div>
|
|
29
|
+
</div>
|
|
30
|
+
</template>
|
|
31
|
+
|
|
32
|
+
<script>
|
|
33
|
+
export default {
|
|
34
|
+
props: {
|
|
35
|
+
label: {
|
|
36
|
+
type: String,
|
|
37
|
+
default: null,
|
|
38
|
+
},
|
|
39
|
+
name: {
|
|
40
|
+
type: String,
|
|
41
|
+
default: null,
|
|
42
|
+
},
|
|
43
|
+
error: {
|
|
44
|
+
type: [String, Object],
|
|
45
|
+
default: null,
|
|
46
|
+
},
|
|
47
|
+
baseClass: {
|
|
48
|
+
type: String,
|
|
49
|
+
default: null,
|
|
50
|
+
},
|
|
51
|
+
classes: {
|
|
52
|
+
type: String,
|
|
53
|
+
default: null,
|
|
54
|
+
},
|
|
55
|
+
type: {
|
|
56
|
+
type: String,
|
|
57
|
+
default: null,
|
|
58
|
+
},
|
|
59
|
+
inputType: {
|
|
60
|
+
type: String,
|
|
61
|
+
default: "text",
|
|
62
|
+
},
|
|
63
|
+
size: {
|
|
64
|
+
type: String,
|
|
65
|
+
default: null,
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
|
|
69
|
+
methods: {
|
|
70
|
+
hasError(field) {
|
|
71
|
+
if (!this.$props?.error?.errors) {
|
|
72
|
+
if (typeof this.$props?.error === "string") {
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
let hasError = this.$props.error.errors.hasOwnProperty(field);
|
|
78
|
+
|
|
79
|
+
if (!hasError) {
|
|
80
|
+
const errors = Object.keys(this.$props.error.errors).filter(
|
|
81
|
+
(e) =>
|
|
82
|
+
e.startsWith(`${field}.`) || e.startsWith(`${field}[`),
|
|
83
|
+
);
|
|
84
|
+
|
|
85
|
+
hasError = errors.length > 0;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
return hasError;
|
|
89
|
+
},
|
|
90
|
+
|
|
91
|
+
first(field) {
|
|
92
|
+
return this.get(field)[0];
|
|
93
|
+
},
|
|
94
|
+
|
|
95
|
+
get(field) {
|
|
96
|
+
return (
|
|
97
|
+
this.$props.error?.errors?.[field] ||
|
|
98
|
+
(typeof this.$props.error === "string"
|
|
99
|
+
? [this.$props.error]
|
|
100
|
+
: [])
|
|
101
|
+
);
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
</script>
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<el-alert
|
|
3
|
+
class="mb-4 vel-alert"
|
|
4
|
+
:effect="effect"
|
|
5
|
+
:title="title"
|
|
6
|
+
:type="type"
|
|
7
|
+
:show-icon="showIcon"
|
|
8
|
+
/>
|
|
9
|
+
</template>
|
|
10
|
+
|
|
11
|
+
<script>
|
|
12
|
+
import { ElAlert } from "element-plus";
|
|
13
|
+
export default {
|
|
14
|
+
name: "VPageTitle",
|
|
15
|
+
|
|
16
|
+
props: {
|
|
17
|
+
effect: {
|
|
18
|
+
type: String,
|
|
19
|
+
default: "dark",
|
|
20
|
+
},
|
|
21
|
+
title: {
|
|
22
|
+
type: String,
|
|
23
|
+
},
|
|
24
|
+
type: {
|
|
25
|
+
type: String,
|
|
26
|
+
default: "error",
|
|
27
|
+
},
|
|
28
|
+
showIcon: {
|
|
29
|
+
type: Boolean,
|
|
30
|
+
default: true,
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
|
|
34
|
+
components: {
|
|
35
|
+
ElAlert,
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
</script>
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<footer class="vel-footer">
|
|
3
|
+
<div>
|
|
4
|
+
<h5 class="color-0">
|
|
5
|
+
<slot />
|
|
6
|
+
</h5>
|
|
7
|
+
</div>
|
|
8
|
+
<div class="vel-footer__bottom">
|
|
9
|
+
<div class="vel-footer__bottom__links">
|
|
10
|
+
<p class="color-0">©2025 Avalere Health.</p>
|
|
11
|
+
<el-link
|
|
12
|
+
underline
|
|
13
|
+
class="color-0 ml"
|
|
14
|
+
href="https://avalerehealth.com/privacy-policy/"
|
|
15
|
+
target="_blank"
|
|
16
|
+
>Privacy Policy</el-link
|
|
17
|
+
>
|
|
18
|
+
<el-link
|
|
19
|
+
underline
|
|
20
|
+
class="color-0 ml"
|
|
21
|
+
href="https://avalerehealth.com/corporate-policies/"
|
|
22
|
+
target="_blank"
|
|
23
|
+
>Corporate policies and compliance</el-link
|
|
24
|
+
>
|
|
25
|
+
</div>
|
|
26
|
+
<div class="vel-footer__bottom__end">
|
|
27
|
+
<p class="color-0">Have a question?</p>
|
|
28
|
+
<el-link underline class="color-0 ml" :href="contact"
|
|
29
|
+
>Contact our Support Team</el-link
|
|
30
|
+
>
|
|
31
|
+
</div>
|
|
32
|
+
</div>
|
|
33
|
+
</footer>
|
|
34
|
+
</template>
|
|
35
|
+
|
|
36
|
+
<script>
|
|
37
|
+
import elLink from "../basic/link.vue";
|
|
38
|
+
|
|
39
|
+
export default {
|
|
40
|
+
props: {
|
|
41
|
+
contact: {
|
|
42
|
+
required: true,
|
|
43
|
+
type: String,
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
components: {
|
|
47
|
+
elLink,
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
</script>
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="vel-loader">
|
|
3
|
+
<slot>
|
|
4
|
+
<svg
|
|
5
|
+
viewBox="0 0 84 84"
|
|
6
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
7
|
+
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
8
|
+
>
|
|
9
|
+
<defs>
|
|
10
|
+
<pattern
|
|
11
|
+
id="e11rz3cojb"
|
|
12
|
+
width="100%"
|
|
13
|
+
height="100%"
|
|
14
|
+
patternUnits="objectBoundingBox"
|
|
15
|
+
>
|
|
16
|
+
<use xlink:href="#w1y9w0pc6a" />
|
|
17
|
+
</pattern>
|
|
18
|
+
<image
|
|
19
|
+
id="w1y9w0pc6a"
|
|
20
|
+
width="84"
|
|
21
|
+
height="84"
|
|
22
|
+
xlink:href="data:image/png;base64,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"
|
|
23
|
+
/>
|
|
24
|
+
<path id="3vizvfpwxc" d="M0 0h39.967v39.966H0z" />
|
|
25
|
+
</defs>
|
|
26
|
+
<g fill="none" fill-rule="evenodd">
|
|
27
|
+
<path
|
|
28
|
+
class="circle"
|
|
29
|
+
d="M42 0C18.804 0 0 18.804 0 42s18.804 42 42 42 42-18.804 42-42S65.196 0 42 0zm0 4c20.987 0 38 17.013 38 38S62.987 80 42 80 4 62.987 4 42 21.013 4 42 4z"
|
|
30
|
+
fill="url(#e11rz3cojb)"
|
|
31
|
+
fill-rule="nonzero"
|
|
32
|
+
/>
|
|
33
|
+
<g transform="translate(22 22)">
|
|
34
|
+
<mask id="y3cby6hymd" fill="#fff">
|
|
35
|
+
<use xlink:href="#3vizvfpwxc" />
|
|
36
|
+
</mask>
|
|
37
|
+
<path
|
|
38
|
+
d="m16.552 21.54 4.036-12.407h.312l4.204 12.946c2.503 1.604 4.81 3.465 6.752 5.604l-.38.486c-3.45-2.688-8.243-5.126-14.924-6.63m23.414 18.425L26.189 0h-10.89L8.295 20.29a82.37 82.37 0 0 0-6.892-.306L0 24.047c2.37.103 4.628.329 6.769.664L1.502 39.966h9.055l4.314-13.26c7.747 2.716 13.03 7.333 15.105 13.26h9.99v-.002"
|
|
39
|
+
fill="#0D0D0D"
|
|
40
|
+
mask="url(#y3cby6hymd)"
|
|
41
|
+
/>
|
|
42
|
+
</g>
|
|
43
|
+
</g>
|
|
44
|
+
</svg>
|
|
45
|
+
</slot>
|
|
46
|
+
</div>
|
|
47
|
+
</template>
|
|
48
|
+
|
|
49
|
+
<script>
|
|
50
|
+
export default {
|
|
51
|
+
props: {
|
|
52
|
+
reversed: {
|
|
53
|
+
type: Boolean,
|
|
54
|
+
default: false,
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
components: {},
|
|
58
|
+
};
|
|
59
|
+
</script>
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<el-popover
|
|
3
|
+
class="vel-tooltip"
|
|
4
|
+
:trigger="trigger"
|
|
5
|
+
:placement="placement"
|
|
6
|
+
:content="content"
|
|
7
|
+
:effect="effect"
|
|
8
|
+
popper-class="vel-tooltip"
|
|
9
|
+
>
|
|
10
|
+
<template #reference><slot name="reference"></slot></template>
|
|
11
|
+
<slot />
|
|
12
|
+
</el-popover>
|
|
13
|
+
</template>
|
|
14
|
+
|
|
15
|
+
<script>
|
|
16
|
+
import { ElPopover } from "element-plus";
|
|
17
|
+
export default {
|
|
18
|
+
name: "Tooltip",
|
|
19
|
+
|
|
20
|
+
props: {
|
|
21
|
+
width: {
|
|
22
|
+
type: Number,
|
|
23
|
+
default: 100,
|
|
24
|
+
},
|
|
25
|
+
trigger: {
|
|
26
|
+
type: String,
|
|
27
|
+
default: "hover",
|
|
28
|
+
},
|
|
29
|
+
effect: {
|
|
30
|
+
type: String,
|
|
31
|
+
default: "dark",
|
|
32
|
+
},
|
|
33
|
+
placement: {
|
|
34
|
+
type: String,
|
|
35
|
+
default: "top",
|
|
36
|
+
},
|
|
37
|
+
content: {
|
|
38
|
+
type: String,
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
|
|
42
|
+
components: {
|
|
43
|
+
ElPopover,
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
</script>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="vel-page-title">
|
|
3
|
+
<h2 class="h2" v-html="title" />
|
|
4
|
+
</div>
|
|
5
|
+
</template>
|
|
6
|
+
|
|
7
|
+
<script>
|
|
8
|
+
export default {
|
|
9
|
+
name: "VPageTitle",
|
|
10
|
+
|
|
11
|
+
props: {
|
|
12
|
+
title: {
|
|
13
|
+
type: String,
|
|
14
|
+
required: true,
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
</script>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="vel-side-bar" :class="{ active: active }">
|
|
3
|
+
<div>
|
|
4
|
+
<slot name="navigation" />
|
|
5
|
+
</div>
|
|
6
|
+
|
|
7
|
+
<div class="vel-side-bar__bottom">
|
|
8
|
+
<button class="vel-side-bar__button" @click="active = !active">
|
|
9
|
+
<slot name="expand"> > </slot>
|
|
10
|
+
</button>
|
|
11
|
+
</div>
|
|
12
|
+
</div>
|
|
13
|
+
</template>
|
|
14
|
+
|
|
15
|
+
<script>
|
|
16
|
+
export default {
|
|
17
|
+
name: "SideBar",
|
|
18
|
+
|
|
19
|
+
data() {
|
|
20
|
+
return {
|
|
21
|
+
active: true,
|
|
22
|
+
};
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
</script>
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<el-breadcrumb class="vel-breadcrumb" :seperator="''">
|
|
3
|
+
<slot name="default">
|
|
4
|
+
<template v-for="(crumb, index) in crumbs">
|
|
5
|
+
<el-breadcrumb-item :to="crumb.href"
|
|
6
|
+
>{{ crumb.text }}
|
|
7
|
+
</el-breadcrumb-item>
|
|
8
|
+
<template v-if="index !== crumbs.length - 1">
|
|
9
|
+
<span class="el-breadcrumb__item">
|
|
10
|
+
<span
|
|
11
|
+
class="el-breadcrumb__separator inline-block"
|
|
12
|
+
role="presentation"
|
|
13
|
+
>
|
|
14
|
+
<slot name="seperator">/</slot>
|
|
15
|
+
</span>
|
|
16
|
+
</span>
|
|
17
|
+
</template>
|
|
18
|
+
</template>
|
|
19
|
+
</slot>
|
|
20
|
+
</el-breadcrumb>
|
|
21
|
+
</template>
|
|
22
|
+
|
|
23
|
+
<script>
|
|
24
|
+
import { ElBreadcrumb } from "element-plus";
|
|
25
|
+
import ElBreadcrumbItem from "./BreadcrumbsItem.vue";
|
|
26
|
+
export default {
|
|
27
|
+
props: {
|
|
28
|
+
crumbs: {
|
|
29
|
+
required: false,
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
components: {
|
|
33
|
+
ElBreadcrumb,
|
|
34
|
+
ElBreadcrumbItem,
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
</script>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<el-breadcrumb-item v-bind="$props">
|
|
3
|
+
<slot></slot>
|
|
4
|
+
</el-breadcrumb-item>
|
|
5
|
+
</template>
|
|
6
|
+
|
|
7
|
+
<script>
|
|
8
|
+
import { ElBreadcrumbItem } from "element-plus";
|
|
9
|
+
export default {
|
|
10
|
+
props: {
|
|
11
|
+
crumbs: {
|
|
12
|
+
required: false,
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
components: {
|
|
16
|
+
ElBreadcrumbItem,
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
</script>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<el-menu-item :index="index" class="vel-menu-item" v-bind="$props">
|
|
3
|
+
<template #title>
|
|
4
|
+
<slot name="title" />
|
|
5
|
+
</template>
|
|
6
|
+
<template #default>
|
|
7
|
+
<slot name="default" />
|
|
8
|
+
</template>
|
|
9
|
+
</el-menu-item>
|
|
10
|
+
</template>
|
|
11
|
+
|
|
12
|
+
<script>
|
|
13
|
+
import { ElMenuItem } from "element-plus";
|
|
14
|
+
export default {
|
|
15
|
+
components: {
|
|
16
|
+
ElMenuItem,
|
|
17
|
+
},
|
|
18
|
+
props: ["index"],
|
|
19
|
+
};
|
|
20
|
+
</script>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<el-sub-menu :index="index" v-bind="$props">
|
|
3
|
+
<template #title>
|
|
4
|
+
<slot name="title" />
|
|
5
|
+
</template>
|
|
6
|
+
<template #default>
|
|
7
|
+
<slot name="default" />
|
|
8
|
+
</template>
|
|
9
|
+
</el-sub-menu>
|
|
10
|
+
</template>
|
|
11
|
+
|
|
12
|
+
<script>
|
|
13
|
+
import ElSubMenu from "./SubMenu.vue";
|
|
14
|
+
export default {
|
|
15
|
+
components: {
|
|
16
|
+
ElSubMenu,
|
|
17
|
+
},
|
|
18
|
+
props: ["index"],
|
|
19
|
+
};
|
|
20
|
+
</script>
|