ct-component-plus 0.0.1

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 (87) hide show
  1. package/README.md +3 -0
  2. package/package.json +37 -0
  3. package/packages/components/button/index.js +9 -0
  4. package/packages/components/button/src/button.vue +172 -0
  5. package/packages/components/cascader/index.js +8 -0
  6. package/packages/components/cascader/src/cascader.vue +224 -0
  7. package/packages/components/cascader/src/ct-cascader.vue +261 -0
  8. package/packages/components/cascader/src/index.js +51 -0
  9. package/packages/components/checkbox/index.js +8 -0
  10. package/packages/components/checkbox/src/checkbox.vue +48 -0
  11. package/packages/components/checkbox/src/index.js +13 -0
  12. package/packages/components/date-picker/index.js +9 -0
  13. package/packages/components/date-picker/src/clear-icon.vue +3 -0
  14. package/packages/components/date-picker/src/date-icon.vue +3 -0
  15. package/packages/components/date-picker/src/date-picker.vue +77 -0
  16. package/packages/components/date-picker/src/index.js +34 -0
  17. package/packages/components/dialog/index.js +9 -0
  18. package/packages/components/dialog/src/dialog.vue +104 -0
  19. package/packages/components/empty/index.js +9 -0
  20. package/packages/components/empty/src/empty.vue +98 -0
  21. package/packages/components/index.js +71 -0
  22. package/packages/components/input/index.js +8 -0
  23. package/packages/components/input/src/index.js +14 -0
  24. package/packages/components/input/src/input.vue +107 -0
  25. package/packages/components/input-range/index.js +8 -0
  26. package/packages/components/input-range/src/index.js +30 -0
  27. package/packages/components/input-range/src/input-range.vue +234 -0
  28. package/packages/components/menu/index.js +8 -0
  29. package/packages/components/menu/src/assets/plus_line.svg +1 -0
  30. package/packages/components/menu/src/item.vue +47 -0
  31. package/packages/components/menu/src/link.vue +29 -0
  32. package/packages/components/menu/src/logo.vue +26 -0
  33. package/packages/components/menu/src/menu-item.vue +104 -0
  34. package/packages/components/menu/src/menu.vue +192 -0
  35. package/packages/components/menu/src/utils/index.js +5 -0
  36. package/packages/components/message/icon/ErrorIcon.vue +25 -0
  37. package/packages/components/message/icon/InfoIcon.vue +25 -0
  38. package/packages/components/message/icon/SuccessIcon.vue +25 -0
  39. package/packages/components/message/icon/WarningIcon.vue +25 -0
  40. package/packages/components/message/index.js +9 -0
  41. package/packages/components/message/src/method.js +55 -0
  42. package/packages/components/message-box/index.js +8 -0
  43. package/packages/components/message-box/src/message-box.vue +108 -0
  44. package/packages/components/pagination/index.js +8 -0
  45. package/packages/components/pagination/src/pagination.vue +37 -0
  46. package/packages/components/radio/index.js +8 -0
  47. package/packages/components/radio/src/index.js +13 -0
  48. package/packages/components/radio/src/radio.vue +48 -0
  49. package/packages/components/search-box/index.js +25 -0
  50. package/packages/components/search-box/src/index.js +30 -0
  51. package/packages/components/search-box/src/search-box.vue +240 -0
  52. package/packages/components/search-box/src/slot.vue +5 -0
  53. package/packages/components/select/index.js +8 -0
  54. package/packages/components/select/src/arrow-down.vue +3 -0
  55. package/packages/components/select/src/clear-icon.vue +3 -0
  56. package/packages/components/select/src/empty.vue +14 -0
  57. package/packages/components/select/src/index.js +52 -0
  58. package/packages/components/select/src/select.vue +331 -0
  59. package/packages/components/table/index.js +8 -0
  60. package/packages/components/table/src/TableSort.vue +179 -0
  61. package/packages/components/table/src/index.js +47 -0
  62. package/packages/components/table/src/table.vue +249 -0
  63. package/packages/components/tabs/index.js +8 -0
  64. package/packages/components/tabs/src/tabs.vue +226 -0
  65. package/packages/components/year-select/index.js +8 -0
  66. package/packages/components/year-select/src/index.js +45 -0
  67. package/packages/components/year-select/src/year-select.vue +274 -0
  68. package/packages/constants/aria.ts +17 -0
  69. package/packages/constants/index.ts +1 -0
  70. package/packages/directives/click-outside/index.ts +118 -0
  71. package/packages/directives/index.js +1 -0
  72. package/packages/echarts/bar/index.js +64 -0
  73. package/packages/echarts/base.js +96 -0
  74. package/packages/echarts/line/index.js +107 -0
  75. package/packages/hooks/index.js +6 -0
  76. package/packages/hooks/use-buried/index.js +47 -0
  77. package/packages/hooks/use-checked-all/index.js +37 -0
  78. package/packages/hooks/use-echarts/index.js +2 -0
  79. package/packages/hooks/use-echarts/use-bar/index.js +67 -0
  80. package/packages/hooks/use-echarts/use-line/index.js +83 -0
  81. package/packages/hooks/use-namespace/index.js +66 -0
  82. package/packages/hooks/use-search-component/index.js +29 -0
  83. package/packages/style/element.less +600 -0
  84. package/packages/style/init.less +114 -0
  85. package/packages/utils/index.js +2 -0
  86. package/packages/utils/operate.js +78 -0
  87. package/packages/utils/types.js +35 -0
@@ -0,0 +1,104 @@
1
+ <template>
2
+ <template v-if="isLastOne">
3
+ <app-link :to="routerLink" :type="linkType" @click="clickLinkMenu(menu)">
4
+ <el-tooltip
5
+ :disabled="!collapse && menu.label.length <= 10"
6
+ effect="dark"
7
+ :content="menu.label"
8
+ placement="right"
9
+ >
10
+ <el-menu-item :index="menuIndex" class="ct-menu-item">
11
+ <i v-if="haveIcon" class="ct-menu-item__icon">
12
+ <slot name="icon" :menu="menu" :title="menu.label"> </slot>
13
+ </i>
14
+ <template #title>
15
+ <slot name="title" :menu="menu" :title="menu.label">
16
+ {{ menu.label }}
17
+ </slot>
18
+ </template>
19
+ </el-menu-item>
20
+ </el-tooltip>
21
+ </app-link>
22
+ </template>
23
+ <el-sub-menu v-else :index="menuIndex" popper-class="ct-menu">
24
+ <template #title>
25
+ <i class="ct-menu-item__icon">
26
+ <slot name="icon" :menu="menu" :title="menu.label"></slot>
27
+ </i>
28
+ <span>
29
+ <slot name="title" :menu="menu" :title="menu.label">
30
+ {{ menu.label }}
31
+ </slot>
32
+ </span>
33
+ </template>
34
+ <menu-item
35
+ v-for="child in menu.children"
36
+ :key="child.router || child.value"
37
+ :menu="child"
38
+ :is-nest="true"
39
+ class="is-nest-menu"
40
+ @clickMenu="clickLinkMenu"
41
+ >
42
+ <template #icon="{ menu }">
43
+ <slot name="icon" :menu="menu">
44
+ <ct-icon v-if="menu.icon" :name="menu.icon"></ct-icon>
45
+ </slot>
46
+ </template>
47
+ <template #title="{ menu }">
48
+ <slot name="title" :menu="menu"> {{ menu.label }} </slot>
49
+ </template>
50
+ </menu-item>
51
+ </el-sub-menu>
52
+ </template>
53
+
54
+ <script setup>
55
+ import { onMounted, computed } from "vue";
56
+ import appLink from "./link.vue";
57
+ import { getMenuIndex } from "./utils";
58
+ const props = defineProps({
59
+ menu: {
60
+ type: Object,
61
+ default() {
62
+ return {};
63
+ },
64
+ },
65
+ isNest: {
66
+ type: Boolean,
67
+ default: false,
68
+ },
69
+ collapse: Boolean,
70
+ });
71
+ const emit = defineEmits(["clickMenu"]);
72
+ const isLastOne = computed(() => {
73
+ const item = props.menu;
74
+ return !item.children || !item.children.length;
75
+ });
76
+ const menuIndex = computed(() => {
77
+ return getMenuIndex(props.menu);
78
+ });
79
+ const routerLink = computed(() => {
80
+ return props.menu.outLink || props.menu.router;
81
+ });
82
+ const linkType = computed(() => {
83
+ //判断跳转链接的方式是a标签还是router-link
84
+ if (props.menu.linkType) return props.menu.linkType;
85
+ let type = "router-link";
86
+ if (props.menu.outLink) type = "a";
87
+ return type;
88
+ });
89
+ const haveIcon = computed(() => props.menu.icon || props.menu.haveIcon);
90
+ const clickLinkMenu = (menu) => {
91
+ emit("clickMenu", menu);
92
+ };
93
+ onMounted(() => {});
94
+ </script>
95
+ <style lang='less'>
96
+ .ct-menu-item {
97
+ display: flex;
98
+ align-items: center;
99
+ &__icon {
100
+ margin-right: var(--ct-menu-icon-margin);
101
+ font-size: var(--ct-menu-icon-size);
102
+ }
103
+ }
104
+ </style>
@@ -0,0 +1,192 @@
1
+ <template>
2
+ <div :class="[ns.b(), ns.is('collapse', collapse)]">
3
+ <el-menu
4
+ :default-active="defaultActive"
5
+ ref="menuRef"
6
+ :collapse="collapse"
7
+ :collapse-transition="collapseTransition"
8
+ @select="selectMenu"
9
+ v-bind="$attrs"
10
+ >
11
+ <div :class="[ns.e('logo'), ns.is('collapse', collapse)]" v-if="showLogo">
12
+ <slot name="logo" :collapse="collapse"></slot>
13
+ </div>
14
+ <menu-item
15
+ v-for="menu in menuList"
16
+ :key="menu.router || menu.value"
17
+ :menu="menu"
18
+ :collapse="collapse"
19
+ @click-menu="clickMenu"
20
+ >
21
+ <template #icon="{ menu }">
22
+ <slot
23
+ name="menu-icon"
24
+ :menu="menu"
25
+ :is-active="activeMenuIndex === getMenuIndex(menu)"
26
+ >
27
+ <ct-icon v-if="menu.icon" :name="menu.icon"></ct-icon>
28
+ </slot>
29
+ </template>
30
+ <template #title="{ menu }">
31
+ <slot
32
+ name="menu-title"
33
+ :menu="menu"
34
+ :is-active="activeMenuIndex === getMenuIndex(menu)"
35
+ >
36
+ {{ menu.label }}
37
+ </slot>
38
+ </template>
39
+ </menu-item>
40
+ </el-menu>
41
+ </div>
42
+ </template>
43
+
44
+ <script setup>
45
+ import { onMounted, ref } from "vue";
46
+ import { useNamespace } from "../../../hooks";
47
+ import menuItem from "./menu-item.vue";
48
+ import { getMenuIndex } from "./utils";
49
+ const props = defineProps({
50
+ menuList: {
51
+ type: Array,
52
+ default: () => [],
53
+ },
54
+ defaultActive: {
55
+ type: String,
56
+ default: "",
57
+ },
58
+ collapseTransition: {
59
+ //这里默认关闭折叠动画
60
+ type: Boolean,
61
+ default: true,
62
+ },
63
+ showLogo: Boolean,
64
+ collapse: {
65
+ type: Boolean,
66
+ default: false,
67
+ },
68
+ });
69
+ const emit = defineEmits(["clickMenu", "select"]);
70
+ const ns = useNamespace("menu");
71
+ const menuRef = ref(null);
72
+ const isCollapse = ref(false);
73
+ const activeMenuIndex = ref("");
74
+ const clickMenu = (menu) => {
75
+ emit("clickMenu", menu);
76
+ };
77
+ const selectMenu = (...args) => {
78
+ activeMenuIndex.value = args[0];
79
+ emit("select", ...args);
80
+ };
81
+ onMounted(() => {
82
+ activeMenuIndex.value = props.defaultActive || "";
83
+ });
84
+
85
+ defineExpose({
86
+ menuRef,
87
+ collapse: isCollapse,
88
+ });
89
+ </script>
90
+ <style lang='less'>
91
+ body {
92
+ --ct-menu-bg-color: #d7e0ea;
93
+ --ct-menu-popper-width: 224px;
94
+ --ct-menu-item-height: 38px;
95
+ --ct-menu-line-space: 12px;
96
+ --ct-menu-item-border-radius: 5px;
97
+ --ct-menu-icon-margin: 10px;
98
+ --ct-menu-icon-size: 16px;
99
+ --el-menu-icon-width: var(--ct-menu-icon-size);
100
+ --el-menu-item-height: var(--ct-menu-item-height);
101
+ --el-menu-sub-item-height: var(--ct-menu-item-height);
102
+ --el-menu-bg-color: var(--ct-menu-bg-color);
103
+ --el-menu-base-level-padding: 12px;
104
+ --el-menu-level-padding: 26px;
105
+ --el-menu-hover-bg-color: rgba(255, 255, 255, 0.6);
106
+ --el-menu-text-color: var(--ct-color-black);
107
+ }
108
+ .ct-menu {
109
+ width: var(--ct-layout-menu-width, 224px);
110
+ &__logo {
111
+ background-color: var(--ct-menu-bg-color);
112
+ // &.is-collapse {
113
+ // width: var(--ct-layout-menu-width_collapse);
114
+ // }
115
+ }
116
+ & > .el-menu {
117
+ padding: 8px 12px;
118
+ }
119
+ .el-menu {
120
+ border-right: none;
121
+ &--collapse {
122
+ width: var(--ct-layout-menu-width_collapse);
123
+ --ct-menu-icon-margin: 0;
124
+ --ct-menu-icon-size: 18px;
125
+ --ct-menu-line-space: 14px;
126
+ .ct-menu-item {
127
+ &__title {
128
+ display: none;
129
+ }
130
+ }
131
+ .el-sub-menu {
132
+ &.is-active {
133
+ background-color: #fff;
134
+ box-shadow: 0px 4px 20px 0px rgba(130, 146, 181, 0.06);
135
+ border-radius: 5px;
136
+ .ct-icon {
137
+ color: var(--el-menu-active-color);
138
+ }
139
+ }
140
+ }
141
+ }
142
+ }
143
+ .el-menu-item,
144
+ .el-sub-menu__title {
145
+ margin-top: var(--ct-menu-line-space);
146
+ border-radius: var(--ct-menu-item-border-radius);
147
+ font-weight: 600;
148
+ * {
149
+ vertical-align: unset;
150
+ }
151
+ &.is-active {
152
+ background-color: #fff;
153
+ box-shadow: 0px 4px 20px 0px rgba(130, 146, 181, 0.06);
154
+ }
155
+ }
156
+ .el-sub-menu {
157
+ &__title {
158
+ font-weight: 600;
159
+ }
160
+ .el-sub-menu__icon-arrow {
161
+ width: 14px;
162
+ height: 14px;
163
+ background: url("./assets/plus_line.svg") no-repeat center center;
164
+ > svg {
165
+ display: none;
166
+ }
167
+ }
168
+ }
169
+ .is-nest-menu {
170
+ .el-menu-item {
171
+ &:not(.is-active) {
172
+ font-weight: 400;
173
+ }
174
+ }
175
+ }
176
+ &.el-popper {
177
+ --ct-layout-menu-width: 175px;
178
+ --ct-menu-line-space: 6px;
179
+ --el-menu-base-level-padding: 16px;
180
+ transform: translateX(15px);
181
+ &.is-light {
182
+ border: none;
183
+ }
184
+ .el-menu {
185
+ &--popup {
186
+ min-width: unset;
187
+ padding: 4px 12px 10px;
188
+ }
189
+ }
190
+ }
191
+ }
192
+ </style>
@@ -0,0 +1,5 @@
1
+
2
+ export const getMenuIndex = (menu) => {
3
+ if (!menu) return '';
4
+ return menu.router || menu.value || menu.label
5
+ }
@@ -0,0 +1,25 @@
1
+ <template>
2
+ <svg
3
+ :width="size + 'px'"
4
+ :height="size + 'px'"
5
+ xmlns="http://www.w3.org/2000/svg"
6
+ viewBox="0 0 24 24"
7
+ >
8
+ <path
9
+ d="M12.001 1.559c5.767 0 10.442 4.674 10.442 10.441S17.768 22.441 12 22.441c-5.766 0-10.44-4.674-10.44-10.441S6.234 1.559 12 1.559zM9.457 8.183a.5.5 0 00-.707 0l-.566.566a.5.5 0 000 .707L10.728 12l-2.544 2.544a.5.5 0 000 .707l.566.566a.5.5 0 00.707 0l2.544-2.544 2.545 2.544a.5.5 0 00.707 0l.565-.566a.5.5 0 000-.707L13.274 12l2.544-2.544a.5.5 0 000-.707l-.565-.566a.5.5 0 00-.707 0L12 10.727z"
10
+ fill="var(--ct-color-danger)"
11
+ />
12
+ </svg>
13
+ </template>
14
+
15
+ <script>
16
+ export default {
17
+ name: "ErrorIcon",
18
+ props: {
19
+ size: {
20
+ type: [Number, String],
21
+ default: 18,
22
+ },
23
+ },
24
+ };
25
+ </script>
@@ -0,0 +1,25 @@
1
+ <template>
2
+ <svg
3
+ :width="size + 'px'"
4
+ :height="size + 'px'"
5
+ xmlns="http://www.w3.org/2000/svg"
6
+ viewBox="0 0 24 24"
7
+ >
8
+ <path
9
+ d="M12.003 1.559c5.766 0 10.44 4.674 10.44 10.441s-4.674 10.441-10.44 10.441C6.236 22.441 1.56 17.767 1.56 12S6.236 1.559 12.003 1.559zm.576 8.315H10.77a.5.5 0 00-.5.5v.7a.5.5 0 00.5.5h.609v4.303h-.866a.5.5 0 00-.5.5v.7a.5.5 0 00.5.5h3.332a.5.5 0 00.5-.5v-.7a.5.5 0 00-.5-.5h-.766v-5.503a.5.5 0 00-.5-.5zm.032-3.315h-1.217a.5.5 0 00-.5.5v1.217a.5.5 0 00.5.5h1.217a.5.5 0 00.5-.5V7.06a.5.5 0 00-.5-.5z"
10
+ fill="var(--ct-color-primary)"
11
+ />
12
+ </svg>
13
+ </template>
14
+
15
+ <script>
16
+ export default {
17
+ name: "InfoIcon",
18
+ props: {
19
+ size: {
20
+ type: [Number, String],
21
+ default: 18,
22
+ },
23
+ },
24
+ };
25
+ </script>
@@ -0,0 +1,25 @@
1
+ <template>
2
+ <svg
3
+ :width="size + 'px'"
4
+ :height="size + 'px'"
5
+ xmlns="http://www.w3.org/2000/svg"
6
+ viewBox="0 0 24 24"
7
+ >
8
+ <path
9
+ d="M12 1.559c5.767 0 10.441 4.674 10.441 10.441S17.767 22.441 12 22.441 1.559 17.767 1.559 12 6.233 1.559 12 1.559zm5.012 6.81a.5.5 0 00-.708 0l-5.236 5.236-2.649-2.65a.5.5 0 00-.707 0l-.566.567a.5.5 0 000 .707l3.286 3.285a.9.9 0 001.273 0l5.872-5.872a.5.5 0 000-.708z"
10
+ fill="var(--ct-color-success)"
11
+ />
12
+ </svg>
13
+ </template>
14
+
15
+ <script>
16
+ export default {
17
+ name: "SuccessIcon",
18
+ props: {
19
+ size: {
20
+ type: [Number, String],
21
+ default: 18,
22
+ },
23
+ },
24
+ };
25
+ </script>
@@ -0,0 +1,25 @@
1
+ <template>
2
+ <svg
3
+ :width="size + 'px'"
4
+ :height="size + 'px'"
5
+ xmlns="http://www.w3.org/2000/svg"
6
+ viewBox="0 0 24 24"
7
+ >
8
+ <path
9
+ d="M12 1.559c5.767 0 10.441 4.674 10.441 10.441S17.767 22.441 12 22.441 1.559 17.767 1.559 12 6.233 1.559 12 1.559zm.609 13.474H11.39a.5.5 0 00-.5.5v1.217a.5.5 0 00.5.5h1.218a.5.5 0 00.5-.5v-1.217a.5.5 0 00-.5-.5zm-.209-8.8h-.8a.5.5 0 00-.5.5v6.702a.5.5 0 00.5.5h.8a.5.5 0 00.5-.5V6.732a.5.5 0 00-.5-.5z"
10
+ fill="var(--ct-color-warning)"
11
+ />
12
+ </svg>
13
+ </template>
14
+
15
+ <script>
16
+ export default {
17
+ name: "WarningIcon",
18
+ props: {
19
+ size: {
20
+ type: [Number, String],
21
+ default: 18,
22
+ },
23
+ },
24
+ };
25
+ </script>
@@ -0,0 +1,9 @@
1
+ import CtMessage from './src/method.js';
2
+
3
+ /* istanbul ignore next */
4
+ CtMessage.install = function (app) {
5
+ app.config.globalProperties['CtMessage'] = CtMessage;
6
+ app.provide('CtMessage', CtMessage);
7
+ };
8
+
9
+ export default CtMessage;
@@ -0,0 +1,55 @@
1
+ import { ElMessage } from "element-plus";
2
+ import SuccessIcon from "../icon/SuccessIcon.vue";
3
+ import InfoIcon from "../icon/InfoIcon.vue";
4
+ import WarningIcon from "../icon/WarningIcon.vue";
5
+ import ErrorIcon from "../icon/ErrorIcon.vue";
6
+ const success = (message, option) => {
7
+ ElMessage({
8
+ type: 'success',
9
+ customClass: 'ct-message--success',
10
+ message: message,
11
+ duration: 3000,
12
+ showClose: true,
13
+ icon: SuccessIcon,
14
+ ...option
15
+ })
16
+ }
17
+ const info = (message, option) => {
18
+ ElMessage({
19
+ type: 'info',
20
+ customClass: 'ct-message--info',
21
+ message: message,
22
+ duration: 3000,
23
+ showClose: true,
24
+ icon: InfoIcon,
25
+ ...option
26
+ })
27
+ }
28
+ const warning = (message, option) => {
29
+ ElMessage({
30
+ type: 'warning',
31
+ customClass: 'ct-message--warning',
32
+ message: message,
33
+ duration: 3000,
34
+ showClose: true,
35
+ icon: WarningIcon,
36
+ ...option
37
+ })
38
+ }
39
+ const error = (message, option) => {
40
+ ElMessage({
41
+ type: 'error',
42
+ customClass: 'ct-message--error',
43
+ message: message,
44
+ duration: 3000,
45
+ showClose: true,
46
+ icon: ErrorIcon,
47
+ ...option
48
+ })
49
+ }
50
+ export default {
51
+ success,
52
+ info,
53
+ warning,
54
+ error
55
+ }
@@ -0,0 +1,8 @@
1
+ import CtMessageBox from './src/message-box.vue';
2
+
3
+ /* istanbul ignore next */
4
+ CtMessageBox.install = function (Vue) {
5
+ Vue.component('CtMessageBox', CtMessageBox);
6
+ };
7
+
8
+ export default CtMessageBox;
@@ -0,0 +1,108 @@
1
+ <template>
2
+ <el-dialog
3
+ :class="[ns.b()]"
4
+ v-model="dialogVisible"
5
+ :title="title"
6
+ :width="width"
7
+ :show-close="false"
8
+ :close-on-click-modal="false"
9
+ :close-on-press-escape="false"
10
+ append-to-body
11
+ >
12
+ <template #header="{ titleId, titleClass }">
13
+ <div :id="titleId" :class="[titleClass, ns.e('title')]">
14
+ <ct-icon
15
+ name="tip_solid"
16
+ :color="iconColor"
17
+ size="26"
18
+ :style="{ color: iconColor }"
19
+ ></ct-icon>
20
+ {{ title }}
21
+ </div>
22
+ </template>
23
+ <slot></slot>
24
+ <template #footer>
25
+ <el-button :type="buttonType" @click="handleConfirm">确定</el-button>
26
+ </template>
27
+ </el-dialog>
28
+ </template>
29
+
30
+ <script setup>
31
+ import { ref, reactive, onMounted, computed } from "vue";
32
+ import { useNamespace } from "../../../hooks";
33
+ const ns = useNamespace("message-box");
34
+
35
+ const props = defineProps({
36
+ modelValue: {
37
+ type: Boolean,
38
+ required: true,
39
+ },
40
+ title: {
41
+ type: String,
42
+ default: "登录异常通知",
43
+ },
44
+ width: {
45
+ type: [String, Number],
46
+ default: 480,
47
+ },
48
+ type: {
49
+ type: String,
50
+ default: "info",
51
+ },
52
+ });
53
+ const emit = defineEmits(["update:modelValue", "handleConfirm"]);
54
+
55
+ const dialogVisible = computed({
56
+ get() {
57
+ return props.modelValue;
58
+ },
59
+ set(val) {
60
+ emit("update:modelValue", val);
61
+ },
62
+ });
63
+ const buttonType = computed(() => {
64
+ return props.type == "info"
65
+ ? "primary"
66
+ : props.type == "error"
67
+ ? "danger"
68
+ : "warning";
69
+ });
70
+ const iconColor = computed(() => {
71
+ return props.type == "info"
72
+ ? "#4D64FF"
73
+ : props.type == "error"
74
+ ? "#FF4D4D"
75
+ : "#FFAD2C";
76
+ });
77
+ const handleConfirm = () => {
78
+ emit("handleConfirm");
79
+ };
80
+ </script>
81
+
82
+ <style lang='less'>
83
+ .el-dialog.ct-message-box{
84
+ border-radius: var(--ct-border-radius-l);
85
+ @R: .el-dialog;
86
+ @{R}__header {
87
+ padding: 24px 40px !important;
88
+ margin-right: 0 !important;
89
+ position: relative;
90
+ }
91
+ @{R}__title{
92
+ display: flex;
93
+ align-items: center;
94
+ line-height: 26px;
95
+ .ct-icon{
96
+ margin-right: 14px;
97
+ }
98
+ }
99
+ @{R}__body {
100
+ padding: 0 40px 32px !important;
101
+ font-size: 15px;
102
+ line-height: 28px;
103
+ }
104
+ @{R}__footer {
105
+ padding: 0 40px 32px !important;
106
+ }
107
+ }
108
+ </style>
@@ -0,0 +1,8 @@
1
+ import CtPagination from './src/pagination.vue';
2
+
3
+ /* istanbul ignore next */
4
+ CtPagination.install = function (Vue) {
5
+ Vue.component('CtPagination', CtPagination);
6
+ };
7
+
8
+ export default CtPagination;
@@ -0,0 +1,37 @@
1
+ <template>
2
+ <el-pagination
3
+ :layout="$attrs.layout || paginationLayout"
4
+ :background="background"
5
+ :class="{ [ns.b()]: true, 'have-border': !background && border }"
6
+ :pager-count="9"
7
+ />
8
+ </template>
9
+
10
+ <script setup>
11
+ import { computed } from "vue";
12
+ import { useNamespace } from "../../../hooks";
13
+ const props = defineProps({
14
+ border: {
15
+ type: Boolean,
16
+ default: true,
17
+ },
18
+ background: {
19
+ type: Boolean,
20
+ default: false,
21
+ },
22
+ showJump: {
23
+ type: Boolean,
24
+ default: false,
25
+ },
26
+ });
27
+ const ns = useNamespace("pagination");
28
+ const paginationLayout = computed(() => {
29
+ const layout = ["prev", "pager", "next"];
30
+ if (props.showJump) {
31
+ layout.push("jumper");
32
+ }
33
+ return layout.join(",");
34
+ });
35
+ </script>
36
+ <style lang='less'>
37
+ </style>
@@ -0,0 +1,8 @@
1
+ import CtRadio from './src/radio.vue';
2
+
3
+ /* istanbul ignore next */
4
+ CtRadio.install = function (Vue) {
5
+ Vue.component('CtRadio', CtRadio);
6
+ };
7
+
8
+ export default CtRadio;
@@ -0,0 +1,13 @@
1
+ import { buriedParamsKey, searchComponentProps } from '../../../hooks';
2
+
3
+ export const radioEmits = ["update:modelValue", buriedParamsKey];
4
+ export const radioProps = {
5
+ ...searchComponentProps,
6
+ modelValue: String,
7
+ options: {
8
+ type: Array,
9
+ default() {
10
+ return []
11
+ }
12
+ }
13
+ }