@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.
Files changed (112) hide show
  1. package/_Build/vue/components/Icon.vue +33 -0
  2. package/_Build/vue/components/Svg.vue +45 -0
  3. package/_Build/vue/components/basic/Button.vue +109 -0
  4. package/_Build/vue/components/basic/link.vue +64 -0
  5. package/_Build/vue/components/form/Cascader.vue +85 -0
  6. package/_Build/vue/components/form/Checkbox.vue +39 -0
  7. package/_Build/vue/components/form/CheckboxGroup.vue +91 -0
  8. package/_Build/vue/components/form/DatePicker.vue +116 -0
  9. package/_Build/vue/components/form/InputNumber.vue +89 -0
  10. package/_Build/vue/components/form/Select.vue +109 -0
  11. package/_Build/vue/components/form/Switch.vue +63 -0
  12. package/_Build/vue/components/form/Upload.vue +101 -0
  13. package/_Build/vue/components/form/Wysiwyg.vue +127 -0
  14. package/_Build/vue/components/form/Wysiwyg2.vue +577 -0
  15. package/_Build/vue/components/form/basic.vue +106 -0
  16. package/_Build/vue/components/form/color.vue +22 -0
  17. package/_Build/vue/components/form/file.vue +89 -0
  18. package/_Build/vue/components/form/input.js +79 -0
  19. package/_Build/vue/components/form/input.vue +105 -0
  20. package/_Build/vue/components/layout/Alert.vue +38 -0
  21. package/_Build/vue/components/layout/Footer.vue +50 -0
  22. package/_Build/vue/components/layout/Header.vue +13 -0
  23. package/_Build/vue/components/layout/Loader.vue +59 -0
  24. package/_Build/vue/components/layout/Tooltip.vue +46 -0
  25. package/_Build/vue/components/layout/pageTitle.vue +18 -0
  26. package/_Build/vue/components/layout/sideBar.vue +25 -0
  27. package/_Build/vue/components/navigation/Breadcrumbs.vue +37 -0
  28. package/_Build/vue/components/navigation/BreadcrumbsItem.vue +19 -0
  29. package/_Build/vue/components/navigation/Menu.vue +14 -0
  30. package/_Build/vue/components/navigation/MenuItem.vue +20 -0
  31. package/_Build/vue/components/navigation/MenuItemGroup.vue +20 -0
  32. package/_Build/vue/components/navigation/SubMenu.vue +20 -0
  33. package/_Build/vue/modules/AuthModule/adminRoutes/PCompanies/Children/Upload/upload.vue +251 -0
  34. package/_Build/vue/modules/AuthModule/adminRoutes/PCompanies/Children/create.vue +62 -0
  35. package/_Build/vue/modules/AuthModule/adminRoutes/PCompanies/Children/edit.vue +98 -0
  36. package/_Build/vue/modules/AuthModule/adminRoutes/PCompanies/Children/index.vue +90 -0
  37. package/_Build/vue/modules/AuthModule/adminRoutes/PCompanies/Children/partials/form.vue +173 -0
  38. package/_Build/vue/modules/AuthModule/adminRoutes/PCompanies/Children/show.vue +262 -0
  39. package/_Build/vue/modules/AuthModule/adminRoutes/PCompanies/parent.vue +36 -0
  40. package/_Build/vue/modules/AuthModule/adminRoutes/PUsers/Children/create.vue +112 -0
  41. package/_Build/vue/modules/AuthModule/adminRoutes/PUsers/Children/edit.vue +103 -0
  42. package/_Build/vue/modules/AuthModule/adminRoutes/PUsers/Children/index.vue +112 -0
  43. package/_Build/vue/modules/AuthModule/adminRoutes/PUsers/Children/partials/form.vue +169 -0
  44. package/_Build/vue/modules/AuthModule/adminRoutes/PUsers/Children/show.vue +120 -0
  45. package/_Build/vue/modules/AuthModule/adminRoutes/PUsers/parent.vue +36 -0
  46. package/_Build/vue/modules/AuthModule/components/AuthModal.vue +105 -0
  47. package/_Build/vue/modules/AuthModule/components/Chip.vue +70 -0
  48. package/_Build/vue/modules/AuthModule/components/Chips.vue +26 -0
  49. package/_Build/vue/modules/AuthModule/components/FormRole.vue +115 -0
  50. package/_Build/vue/modules/AuthModule/components/VBreadcrumbs.vue +33 -0
  51. package/_Build/vue/modules/AuthModule/components/VFormFooter.vue +46 -0
  52. package/_Build/vue/modules/AuthModule/components/VPageHeader.vue +38 -0
  53. package/_Build/vue/modules/AuthModule/components/VPasswordValidation.vue +106 -0
  54. package/_Build/vue/modules/AuthModule/components/VRoleLegend.vue +43 -0
  55. package/_Build/vue/modules/AuthModule/components/VTable.vue +127 -0
  56. package/_Build/vue/modules/AuthModule/components/VTableSorter.vue +240 -0
  57. package/_Build/vue/modules/AuthModule/js/FakeAPI.js +78 -0
  58. package/_Build/vue/modules/AuthModule/js/axios.js +62 -0
  59. package/_Build/vue/modules/AuthModule/js/router.js +295 -0
  60. package/_Build/vue/modules/AuthModule/js/store.js +62 -0
  61. package/_Build/vue/modules/AuthModule/routes/account-exists.vue +33 -0
  62. package/_Build/vue/modules/AuthModule/routes/change-password.vue +165 -0
  63. package/_Build/vue/modules/AuthModule/routes/container.vue +34 -0
  64. package/_Build/vue/modules/AuthModule/routes/expired-reset.vue +78 -0
  65. package/_Build/vue/modules/AuthModule/routes/expired-verification.vue +100 -0
  66. package/_Build/vue/modules/AuthModule/routes/force-reset.vue +152 -0
  67. package/_Build/vue/modules/AuthModule/routes/forgot.vue +91 -0
  68. package/_Build/vue/modules/AuthModule/routes/login.vue +143 -0
  69. package/_Build/vue/modules/AuthModule/routes/logincallback.vue +41 -0
  70. package/_Build/vue/modules/AuthModule/routes/loginheadless.vue +21 -0
  71. package/_Build/vue/modules/AuthModule/routes/loginsso.vue +134 -0
  72. package/_Build/vue/modules/AuthModule/routes/logout.vue +21 -0
  73. package/_Build/vue/modules/AuthModule/routes/logoutheadless.vue +27 -0
  74. package/_Build/vue/modules/AuthModule/routes/register.vue +174 -0
  75. package/_Build/vue/modules/AuthModule/routes/reset.vue +133 -0
  76. package/_Build/vue/modules/AuthModule/routes/success-forgot.vue +119 -0
  77. package/_Build/vue/modules/AuthModule/routes/success-reset.vue +35 -0
  78. package/_Build/vue/modules/AuthModule/routes/success-verify.vue +32 -0
  79. package/_Build/vue/modules/AuthModule/routes/verify.vue +113 -0
  80. package/package.json +3 -9
  81. package/components/_alert.scss +0 -5
  82. package/components/_basic.scss +0 -55
  83. package/components/_breadcrumbs.scss +0 -39
  84. package/components/_button.scss +0 -304
  85. package/components/_cascader.scss +0 -12
  86. package/components/_checkbox.scss +0 -41
  87. package/components/_chip.scss +0 -24
  88. package/components/_collapse.scss +0 -24
  89. package/components/_datepicker.scss +0 -52
  90. package/components/_footer.scss +0 -46
  91. package/components/_form.scss +0 -24
  92. package/components/_header.scss +0 -54
  93. package/components/_icon.scss +0 -25
  94. package/components/_input.scss +0 -0
  95. package/components/_inputNumber.scss +0 -22
  96. package/components/_link.scss +0 -44
  97. package/components/_loader.scss +0 -43
  98. package/components/_menu.scss +0 -112
  99. package/components/_pageTitle.scss +0 -8
  100. package/components/_permissionLegend.scss +0 -18
  101. package/components/_select.scss +0 -29
  102. package/components/_sidebar.scss +0 -56
  103. package/components/_switch.scss +0 -14
  104. package/components/_table.scss +0 -20
  105. package/components/_tooltip.scss +0 -4
  106. package/components/_typography.scss +0 -162
  107. package/components/_upload.scss +0 -15
  108. package/components/_wysiwyg.scss +0 -7
  109. package/components/_wysiwyg2.scss +0 -142
  110. package/modules/_AuthModule.scss +0 -212
  111. package/modules/_AuthVariables.scss +0 -7
  112. 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">&copy;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,13 @@
1
+ <template>
2
+ <header class="vel-header">
3
+ <slot />
4
+
5
+ <div class="vel-header__list">
6
+ <slot name="links" />
7
+ </div>
8
+ </header>
9
+ </template>
10
+
11
+ <script>
12
+ export default {};
13
+ </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,14 @@
1
+ <template>
2
+ <el-menu class="vel-menu">
3
+ <slot />
4
+ </el-menu>
5
+ </template>
6
+
7
+ <script>
8
+ import { ElMenu } from "element-plus";
9
+ export default {
10
+ components: {
11
+ ElMenu,
12
+ },
13
+ };
14
+ </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>