@touchvue/ui 0.0.1-alpha.2
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/README.md +70 -0
- package/es/components/article/index.js +66 -0
- package/es/components/article/index.js.map +1 -0
- package/es/components/box/index.js +98 -0
- package/es/components/box/index.js.map +1 -0
- package/es/components/button/index.js +96 -0
- package/es/components/button/index.js.map +1 -0
- package/es/components/calendar/index.js +44 -0
- package/es/components/calendar/index.js.map +1 -0
- package/es/components/card/index.js +290 -0
- package/es/components/card/index.js.map +1 -0
- package/es/components/checkbox/index.js +97 -0
- package/es/components/checkbox/index.js.map +1 -0
- package/es/components/datepicker/index.js +44 -0
- package/es/components/datepicker/index.js.map +1 -0
- package/es/components/form/index.js +303 -0
- package/es/components/form/index.js.map +1 -0
- package/es/components/grid/index.js +253 -0
- package/es/components/grid/index.js.map +1 -0
- package/es/components/header/index.js +233 -0
- package/es/components/header/index.js.map +1 -0
- package/es/components/icon/index.js +98 -0
- package/es/components/icon/index.js.map +1 -0
- package/es/components/input/index.js +436 -0
- package/es/components/input/index.js.map +1 -0
- package/es/components/line/index.js +100 -0
- package/es/components/line/index.js.map +1 -0
- package/es/components/msg/index.js +322 -0
- package/es/components/msg/index.js.map +1 -0
- package/es/components/padding/index.js +92 -0
- package/es/components/padding/index.js.map +1 -0
- package/es/components/page/index.js +334 -0
- package/es/components/page/index.js.map +1 -0
- package/es/components/select/index.js +218 -0
- package/es/components/select/index.js.map +1 -0
- package/es/components/space/index.js +88 -0
- package/es/components/space/index.js.map +1 -0
- package/es/components/step/index.js +127 -0
- package/es/components/step/index.js.map +1 -0
- package/es/components/switch/index.js +120 -0
- package/es/components/switch/index.js.map +1 -0
- package/es/components/tab/index.js +227 -0
- package/es/components/tab/index.js.map +1 -0
- package/es/components/table/index.js +893 -0
- package/es/components/table/index.js.map +1 -0
- package/es/directives/dis/index.js +32 -0
- package/es/directives/dis/index.js.map +1 -0
- package/es/directives/size/index.js +23 -0
- package/es/directives/size/index.js.map +1 -0
- package/es/hooks/index.js +2 -0
- package/es/hooks/index.js.map +1 -0
- package/es/index.js +4209 -0
- package/es/index.js.map +1 -0
- package/es/utils/index.js +90 -0
- package/es/utils/index.js.map +1 -0
- package/lib/components/article/index.js +70 -0
- package/lib/components/article/index.js.map +1 -0
- package/lib/components/box/index.js +102 -0
- package/lib/components/box/index.js.map +1 -0
- package/lib/components/button/index.js +98 -0
- package/lib/components/button/index.js.map +1 -0
- package/lib/components/calendar/index.js +46 -0
- package/lib/components/calendar/index.js.map +1 -0
- package/lib/components/card/index.js +292 -0
- package/lib/components/card/index.js.map +1 -0
- package/lib/components/checkbox/index.js +99 -0
- package/lib/components/checkbox/index.js.map +1 -0
- package/lib/components/datepicker/index.js +46 -0
- package/lib/components/datepicker/index.js.map +1 -0
- package/lib/components/form/index.js +306 -0
- package/lib/components/form/index.js.map +1 -0
- package/lib/components/grid/index.js +256 -0
- package/lib/components/grid/index.js.map +1 -0
- package/lib/components/header/index.js +235 -0
- package/lib/components/header/index.js.map +1 -0
- package/lib/components/icon/index.js +101 -0
- package/lib/components/icon/index.js.map +1 -0
- package/lib/components/input/index.js +438 -0
- package/lib/components/input/index.js.map +1 -0
- package/lib/components/line/index.js +102 -0
- package/lib/components/line/index.js.map +1 -0
- package/lib/components/msg/index.js +324 -0
- package/lib/components/msg/index.js.map +1 -0
- package/lib/components/padding/index.js +94 -0
- package/lib/components/padding/index.js.map +1 -0
- package/lib/components/page/index.js +336 -0
- package/lib/components/page/index.js.map +1 -0
- package/lib/components/select/index.js +220 -0
- package/lib/components/select/index.js.map +1 -0
- package/lib/components/space/index.js +90 -0
- package/lib/components/space/index.js.map +1 -0
- package/lib/components/step/index.js +129 -0
- package/lib/components/step/index.js.map +1 -0
- package/lib/components/switch/index.js +122 -0
- package/lib/components/switch/index.js.map +1 -0
- package/lib/components/tab/index.js +230 -0
- package/lib/components/tab/index.js.map +1 -0
- package/lib/components/table/index.js +898 -0
- package/lib/components/table/index.js.map +1 -0
- package/lib/directives/dis/index.js +34 -0
- package/lib/directives/dis/index.js.map +1 -0
- package/lib/directives/size/index.js +25 -0
- package/lib/directives/size/index.js.map +1 -0
- package/lib/hooks/index.js +3 -0
- package/lib/hooks/index.js.map +1 -0
- package/lib/index.js +4251 -0
- package/lib/index.js.map +1 -0
- package/lib/utils/index.js +99 -0
- package/lib/utils/index.js.map +1 -0
- package/package.json +35 -0
- package/theme/components/article/index.css +1 -0
- package/theme/components/box/index.css +1 -0
- package/theme/components/button/index.css +1 -0
- package/theme/components/calendar/index.css +0 -0
- package/theme/components/card/index.css +1 -0
- package/theme/components/checkbox/index.css +1 -0
- package/theme/components/datepicker/index.css +0 -0
- package/theme/components/form/index.css +1 -0
- package/theme/components/grid/index.css +1 -0
- package/theme/components/header/index.css +1 -0
- package/theme/components/icon/index.css +1 -0
- package/theme/components/input/index.css +1 -0
- package/theme/components/line/index.css +1 -0
- package/theme/components/msg/index.css +1 -0
- package/theme/components/padding/index.css +1 -0
- package/theme/components/space/index.css +1 -0
- package/theme/components/step/index.css +1 -0
- package/theme/components/switch/index.css +1 -0
- package/theme/components/tab/index.css +1 -0
- package/theme/components/table/index.css +1 -0
- package/theme/img/default.png +0 -0
- package/theme/img/icon-type-fill.ttf +0 -0
- package/theme/img/icon.ttf +0 -0
- package/theme/img/loading-in.png +0 -0
- package/theme/img/loading-out.png +0 -0
- package/theme/img/msg/error-bg.png +0 -0
- package/theme/img/msg/error-icon.png +0 -0
- package/theme/img/msg/success-bg.png +0 -0
- package/theme/img/msg/success-icon.png +0 -0
- package/theme/index.css +1 -0
- package/theme/skin/default.css +1 -0
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
import { defineComponent, ref, computed, watch, onMounted, resolveComponent, resolveDirective, withDirectives, openBlock, createElementBlock, normalizeClass, toDisplayString, createCommentVNode, renderSlot, createElementVNode, Fragment, renderList, createVNode, withKeys } from 'vue';
|
|
2
|
+
|
|
3
|
+
const _hoisted_1 = {
|
|
4
|
+
key: 0,
|
|
5
|
+
class: "to-page-total"
|
|
6
|
+
};
|
|
7
|
+
const _hoisted_2 = {
|
|
8
|
+
key: 1,
|
|
9
|
+
class: "to-page-pager"
|
|
10
|
+
};
|
|
11
|
+
const _hoisted_3 = { class: "to-page-pager-list" };
|
|
12
|
+
const _hoisted_4 = {
|
|
13
|
+
key: 0,
|
|
14
|
+
class: "to-page-pager-ellipsis"
|
|
15
|
+
};
|
|
16
|
+
const _hoisted_5 = ["onClick"];
|
|
17
|
+
const _hoisted_6 = {
|
|
18
|
+
key: 1,
|
|
19
|
+
class: "to-page-pager-ellipsis"
|
|
20
|
+
};
|
|
21
|
+
const _hoisted_7 = {
|
|
22
|
+
key: 2,
|
|
23
|
+
class: "to-page-size"
|
|
24
|
+
};
|
|
25
|
+
const _hoisted_8 = {
|
|
26
|
+
key: 3,
|
|
27
|
+
class: "to-page-jumper"
|
|
28
|
+
};
|
|
29
|
+
var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
30
|
+
__name: "page",
|
|
31
|
+
props: {
|
|
32
|
+
align: { type: String, default: "" },
|
|
33
|
+
pageSize: { type: [Number, String], default: 10 },
|
|
34
|
+
total: { type: [Number, String], default: 0 },
|
|
35
|
+
pageCount: { type: [Number, String], default: void 0 },
|
|
36
|
+
pagerCount: { type: [Number, String], default: 7 },
|
|
37
|
+
currentPage: { type: [Number, String], default: 1 },
|
|
38
|
+
layout: { type: String, default: "all" },
|
|
39
|
+
pageSizes: { type: [Array, String], default: () => [10, 20, 30, 40, 50, 100] },
|
|
40
|
+
prevText: { type: String, default: "" },
|
|
41
|
+
nextText: { type: String, default: "" },
|
|
42
|
+
disabled: { type: Boolean, default: false },
|
|
43
|
+
hideOnSinglePage: { type: Boolean, default: false },
|
|
44
|
+
lite: Boolean
|
|
45
|
+
},
|
|
46
|
+
emits: [
|
|
47
|
+
"update:pageSize",
|
|
48
|
+
"size-change",
|
|
49
|
+
"update:currentPage",
|
|
50
|
+
"current-change",
|
|
51
|
+
"prev-click",
|
|
52
|
+
"next-click"
|
|
53
|
+
],
|
|
54
|
+
setup(__props, { emit: __emit }) {
|
|
55
|
+
const props = __props;
|
|
56
|
+
const emit = __emit;
|
|
57
|
+
const pageCount_ = ref(0);
|
|
58
|
+
const pageSize_ = ref(Number(props.pageSize));
|
|
59
|
+
const currentPage_ = ref(Number(props.currentPage));
|
|
60
|
+
const pager_ = ref([]);
|
|
61
|
+
const jumperPage = ref("");
|
|
62
|
+
const showPrevMore = ref(false);
|
|
63
|
+
const showNextMore = ref(false);
|
|
64
|
+
const cShowInSingle = computed(() => {
|
|
65
|
+
return !(props.hideOnSinglePage && Number(pageCount_.value) <= 1) || !props.hideOnSinglePage;
|
|
66
|
+
});
|
|
67
|
+
const cPageSizes = computed(() => {
|
|
68
|
+
const sizes = typeof props.pageSizes === "string" ? props.pageSizes.split(",") : props.pageSizes;
|
|
69
|
+
return sizes.map((size) => ({
|
|
70
|
+
label: size,
|
|
71
|
+
value: Number(size)
|
|
72
|
+
}));
|
|
73
|
+
});
|
|
74
|
+
const setClass = computed(() => {
|
|
75
|
+
let arr = [];
|
|
76
|
+
if (props.lite) {
|
|
77
|
+
arr.push(`is-lite`);
|
|
78
|
+
}
|
|
79
|
+
return arr;
|
|
80
|
+
});
|
|
81
|
+
watch(
|
|
82
|
+
() => props.pageSize,
|
|
83
|
+
(val) => {
|
|
84
|
+
const sizes = typeof props.pageSizes === "string" ? props.pageSizes.split(",") : props.pageSizes;
|
|
85
|
+
pageSize_.value = sizes.includes(val) ? Number(val) : Number(sizes[0]);
|
|
86
|
+
},
|
|
87
|
+
{ immediate: true }
|
|
88
|
+
);
|
|
89
|
+
watch(
|
|
90
|
+
() => props.currentPage,
|
|
91
|
+
(val) => {
|
|
92
|
+
currentPage_.value = Number(val);
|
|
93
|
+
computePager();
|
|
94
|
+
},
|
|
95
|
+
{ immediate: true }
|
|
96
|
+
);
|
|
97
|
+
watch(
|
|
98
|
+
() => props.pageCount,
|
|
99
|
+
(val) => {
|
|
100
|
+
pageCount_.value = Number(val);
|
|
101
|
+
computePager();
|
|
102
|
+
},
|
|
103
|
+
{ immediate: true }
|
|
104
|
+
);
|
|
105
|
+
watch(() => props.total, computePager);
|
|
106
|
+
watch(() => props.pagerCount, computePager);
|
|
107
|
+
onMounted(() => computePager());
|
|
108
|
+
function handleJump() {
|
|
109
|
+
if (props.disabled || !jumperPage.value)
|
|
110
|
+
return;
|
|
111
|
+
let jump = Number(jumperPage.value);
|
|
112
|
+
jump = Math.max(1, Math.min(jump, pageCount_.value));
|
|
113
|
+
jumperPage.value = "";
|
|
114
|
+
handleCurrentChange(jump);
|
|
115
|
+
}
|
|
116
|
+
function handleSizeChange(size) {
|
|
117
|
+
if (props.disabled)
|
|
118
|
+
return;
|
|
119
|
+
emit("update:pageSize", size);
|
|
120
|
+
emit("size-change", size);
|
|
121
|
+
computePager();
|
|
122
|
+
}
|
|
123
|
+
function handleCurrentChange(page) {
|
|
124
|
+
if (props.disabled)
|
|
125
|
+
return;
|
|
126
|
+
currentPage_.value = page;
|
|
127
|
+
emit("update:currentPage", page);
|
|
128
|
+
emit("current-change", page);
|
|
129
|
+
computePager();
|
|
130
|
+
}
|
|
131
|
+
function handlePagePrev() {
|
|
132
|
+
if (props.disabled || currentPage_.value <= 1)
|
|
133
|
+
return;
|
|
134
|
+
currentPage_.value--;
|
|
135
|
+
handleCurrentChange(currentPage_.value);
|
|
136
|
+
emit("prev-click", currentPage_.value);
|
|
137
|
+
}
|
|
138
|
+
function handlePageNext() {
|
|
139
|
+
if (props.disabled || currentPage_.value >= pageCount_.value)
|
|
140
|
+
return;
|
|
141
|
+
currentPage_.value++;
|
|
142
|
+
handleCurrentChange(currentPage_.value);
|
|
143
|
+
emit("next-click", currentPage_.value);
|
|
144
|
+
}
|
|
145
|
+
function computePager() {
|
|
146
|
+
const pagerCount = Number(props.pagerCount);
|
|
147
|
+
const halfPagerCount = (pagerCount - 1) / 2;
|
|
148
|
+
const count = props.pageCount ? Number(props.pageCount) : Math.ceil(Number(props.total) / pageSize_.value);
|
|
149
|
+
pageCount_.value = Math.max(1, count);
|
|
150
|
+
const current = currentPage_.value;
|
|
151
|
+
showPrevMore.value = current > pagerCount - halfPagerCount;
|
|
152
|
+
showNextMore.value = current < pageCount_.value - halfPagerCount;
|
|
153
|
+
const pages = [];
|
|
154
|
+
if (showPrevMore.value && !showNextMore.value) {
|
|
155
|
+
const start = pageCount_.value - (pagerCount - 2);
|
|
156
|
+
for (let i = start; i < pageCount_.value; i++)
|
|
157
|
+
pages.push(i);
|
|
158
|
+
} else if (!showPrevMore.value && showNextMore.value) {
|
|
159
|
+
for (let i = 2; i < pagerCount; i++)
|
|
160
|
+
pages.push(i);
|
|
161
|
+
} else if (showPrevMore.value && showNextMore.value) {
|
|
162
|
+
const offset = Math.floor(pagerCount / 2) - 1;
|
|
163
|
+
for (let i = current - offset; i <= current + offset; i++)
|
|
164
|
+
pages.push(i);
|
|
165
|
+
} else {
|
|
166
|
+
for (let i = 2; i < pageCount_.value; i++)
|
|
167
|
+
pages.push(i);
|
|
168
|
+
}
|
|
169
|
+
pager_.value = pages;
|
|
170
|
+
}
|
|
171
|
+
return (_ctx, _cache) => {
|
|
172
|
+
const _component_to_select = resolveComponent("to-select");
|
|
173
|
+
const _component_to_input = resolveComponent("to-input");
|
|
174
|
+
const _directive_dis = resolveDirective("dis");
|
|
175
|
+
const _directive_align = resolveDirective("align");
|
|
176
|
+
return cShowInSingle.value ? withDirectives((openBlock(), createElementBlock(
|
|
177
|
+
"div",
|
|
178
|
+
{
|
|
179
|
+
key: 0,
|
|
180
|
+
class: normalizeClass([setClass.value, "to-page"])
|
|
181
|
+
},
|
|
182
|
+
[
|
|
183
|
+
__props.layout.includes("total") || __props.layout === "all" ? (openBlock(), createElementBlock(
|
|
184
|
+
"div",
|
|
185
|
+
_hoisted_1,
|
|
186
|
+
" \u5171 " + toDisplayString(__props.total) + " \u9879\u6570\u636E ",
|
|
187
|
+
1
|
|
188
|
+
/* TEXT */
|
|
189
|
+
)) : createCommentVNode("v-if", true),
|
|
190
|
+
createCommentVNode(' <div class="to-page-slot" v-if="slots.default || !lite"> '),
|
|
191
|
+
renderSlot(_ctx.$slots, "default"),
|
|
192
|
+
createCommentVNode(" </div> "),
|
|
193
|
+
__props.layout.includes("pager") || __props.layout === "all" ? (openBlock(), createElementBlock("div", _hoisted_2, [
|
|
194
|
+
withDirectives(createElementVNode(
|
|
195
|
+
"div",
|
|
196
|
+
{
|
|
197
|
+
class: "to-page-pager-prev",
|
|
198
|
+
onClick: handlePagePrev
|
|
199
|
+
},
|
|
200
|
+
null,
|
|
201
|
+
512
|
|
202
|
+
/* NEED_PATCH */
|
|
203
|
+
), [
|
|
204
|
+
[_directive_dis, Number(currentPage_.value) <= 1]
|
|
205
|
+
]),
|
|
206
|
+
createElementVNode("ul", _hoisted_3, [
|
|
207
|
+
createElementVNode(
|
|
208
|
+
"li",
|
|
209
|
+
{
|
|
210
|
+
class: normalizeClass(["to-page-pager-item", { "is-on": Number(currentPage_.value) === 1 }]),
|
|
211
|
+
onClick: _cache[0] || (_cache[0] = ($event) => handleCurrentChange(1))
|
|
212
|
+
},
|
|
213
|
+
" 1 ",
|
|
214
|
+
2
|
|
215
|
+
/* CLASS */
|
|
216
|
+
),
|
|
217
|
+
showPrevMore.value ? (openBlock(), createElementBlock("li", _hoisted_4, "\u2026")) : createCommentVNode("v-if", true),
|
|
218
|
+
(openBlock(true), createElementBlock(
|
|
219
|
+
Fragment,
|
|
220
|
+
null,
|
|
221
|
+
renderList(pager_.value, (page) => {
|
|
222
|
+
return openBlock(), createElementBlock("li", {
|
|
223
|
+
key: page,
|
|
224
|
+
class: normalizeClass(["to-page-pager-item", { "is-on": Number(currentPage_.value) === page }]),
|
|
225
|
+
onClick: ($event) => handleCurrentChange(page)
|
|
226
|
+
}, toDisplayString(page), 11, _hoisted_5);
|
|
227
|
+
}),
|
|
228
|
+
128
|
|
229
|
+
/* KEYED_FRAGMENT */
|
|
230
|
+
)),
|
|
231
|
+
showNextMore.value ? (openBlock(), createElementBlock("li", _hoisted_6, "\u2026")) : createCommentVNode("v-if", true),
|
|
232
|
+
pageCount_.value > 1 ? (openBlock(), createElementBlock(
|
|
233
|
+
"li",
|
|
234
|
+
{
|
|
235
|
+
key: 2,
|
|
236
|
+
class: normalizeClass(["to-page-pager-item", { "is-on": Number(currentPage_.value) === Number(pageCount_.value) }]),
|
|
237
|
+
onClick: _cache[1] || (_cache[1] = ($event) => handleCurrentChange(pageCount_.value))
|
|
238
|
+
},
|
|
239
|
+
toDisplayString(pageCount_.value),
|
|
240
|
+
3
|
|
241
|
+
/* TEXT, CLASS */
|
|
242
|
+
)) : createCommentVNode("v-if", true)
|
|
243
|
+
]),
|
|
244
|
+
withDirectives(createElementVNode(
|
|
245
|
+
"div",
|
|
246
|
+
{
|
|
247
|
+
class: "to-page-pager-next",
|
|
248
|
+
onClick: handlePageNext
|
|
249
|
+
},
|
|
250
|
+
null,
|
|
251
|
+
512
|
|
252
|
+
/* NEED_PATCH */
|
|
253
|
+
), [
|
|
254
|
+
[_directive_dis, Number(currentPage_.value) >= Number(pageCount_.value)]
|
|
255
|
+
])
|
|
256
|
+
])) : createCommentVNode("v-if", true),
|
|
257
|
+
__props.layout.includes("size") || __props.layout === "all" ? (openBlock(), createElementBlock("div", _hoisted_7, [
|
|
258
|
+
withDirectives(createVNode(_component_to_select, {
|
|
259
|
+
modelValue: pageSize_.value,
|
|
260
|
+
"onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => pageSize_.value = $event),
|
|
261
|
+
suffix: "\u6761/\u9875",
|
|
262
|
+
mode: "none",
|
|
263
|
+
clearable: false,
|
|
264
|
+
data: cPageSizes.value,
|
|
265
|
+
"option-width": 10,
|
|
266
|
+
onChange: handleSizeChange
|
|
267
|
+
}, null, 8, ["modelValue", "data"]), [
|
|
268
|
+
[_directive_dis, __props.disabled]
|
|
269
|
+
])
|
|
270
|
+
])) : createCommentVNode("v-if", true),
|
|
271
|
+
__props.layout.includes("jumper") || __props.layout === "all" ? (openBlock(), createElementBlock("div", _hoisted_8, [
|
|
272
|
+
_cache[4] || (_cache[4] = createElementVNode(
|
|
273
|
+
"span",
|
|
274
|
+
null,
|
|
275
|
+
"\u8DF3\u81F3",
|
|
276
|
+
-1
|
|
277
|
+
/* CACHED */
|
|
278
|
+
)),
|
|
279
|
+
withDirectives(createVNode(_component_to_input, {
|
|
280
|
+
modelValue: jumperPage.value,
|
|
281
|
+
"onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => jumperPage.value = $event),
|
|
282
|
+
placeholder: "1",
|
|
283
|
+
onKeyup: withKeys(handleJump, ["enter"])
|
|
284
|
+
}, null, 8, ["modelValue"]), [
|
|
285
|
+
[_directive_dis, __props.disabled]
|
|
286
|
+
]),
|
|
287
|
+
createElementVNode(
|
|
288
|
+
"span",
|
|
289
|
+
null,
|
|
290
|
+
"/" + toDisplayString(pageCount_.value) + "\u9875",
|
|
291
|
+
1
|
|
292
|
+
/* TEXT */
|
|
293
|
+
)
|
|
294
|
+
])) : createCommentVNode("v-if", true)
|
|
295
|
+
],
|
|
296
|
+
2
|
|
297
|
+
/* CLASS */
|
|
298
|
+
)), [
|
|
299
|
+
[_directive_align, __props.align]
|
|
300
|
+
]) : createCommentVNode("v-if", true);
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
});
|
|
304
|
+
|
|
305
|
+
var _export_sfc = (sfc, props) => {
|
|
306
|
+
const target = sfc.__vccOpts || sfc;
|
|
307
|
+
for (const [key, val] of props) {
|
|
308
|
+
target[key] = val;
|
|
309
|
+
}
|
|
310
|
+
return target;
|
|
311
|
+
};
|
|
312
|
+
|
|
313
|
+
var Page = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "/Users/wangding/WorkSpace/AsiaInfo/projects/\u524D\u7AEF\u6846\u67B6/touch-vue3-ui/packages/components/page/src/page.vue"]]);
|
|
314
|
+
|
|
315
|
+
const withInstall = (main, extra) => {
|
|
316
|
+
main.install = (app) => {
|
|
317
|
+
for (const comp of [main, ...Object.values(extra != null ? extra : {})]) {
|
|
318
|
+
app.component(comp.name, comp);
|
|
319
|
+
}
|
|
320
|
+
};
|
|
321
|
+
if (extra) {
|
|
322
|
+
for (const [key, comp] of Object.entries(extra)) {
|
|
323
|
+
main[key] = comp;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
return main;
|
|
327
|
+
};
|
|
328
|
+
|
|
329
|
+
navigator.userAgent.toLowerCase();
|
|
330
|
+
|
|
331
|
+
const ToPage = withInstall(Page);
|
|
332
|
+
|
|
333
|
+
export { ToPage };
|
|
334
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../packages/components/page/src/page.vue","../../../../packages/utils/types.ts","../../../../packages/utils/ratio.ts","../../../../packages/components/page/index.ts"],"sourcesContent":["<template>\n <div v-if=\"cShowInSingle\" v-align=\"align\" :class=\"setClass\" class=\"to-page\">\n <div v-if=\"layout.includes('total') || layout === 'all'\" class=\"to-page-total\">\n 共 {{ total }} 项数据\n </div>\n <!-- <div class=\"to-page-slot\" v-if=\"slots.default || !lite\"> -->\n <slot />\n <!-- </div> -->\n <div v-if=\"layout.includes('pager') || layout === 'all'\" class=\"to-page-pager\">\n <div\n v-dis=\"Number(currentPage_) <= 1\"\n class=\"to-page-pager-prev\"\n @click=\"handlePagePrev\"\n ></div>\n <ul class=\"to-page-pager-list\">\n <li\n class=\"to-page-pager-item\"\n :class=\"{ 'is-on': Number(currentPage_) === 1 }\"\n @click=\"handleCurrentChange(1)\"\n >\n 1\n </li>\n <li v-if=\"showPrevMore\" class=\"to-page-pager-ellipsis\">…</li>\n <li\n v-for=\"page in pager_\"\n :key=\"page\"\n class=\"to-page-pager-item\"\n :class=\"{ 'is-on': Number(currentPage_) === page }\"\n @click=\"handleCurrentChange(page)\"\n >\n {{ page }}\n </li>\n <li v-if=\"showNextMore\" class=\"to-page-pager-ellipsis\">…</li>\n <li\n v-if=\"pageCount_ > 1\"\n class=\"to-page-pager-item\"\n :class=\"{ 'is-on': Number(currentPage_) === Number(pageCount_) }\"\n @click=\"handleCurrentChange(pageCount_)\"\n >\n {{ pageCount_ }}\n </li>\n </ul>\n <div\n v-dis=\"Number(currentPage_) >= Number(pageCount_)\"\n class=\"to-page-pager-next\"\n @click=\"handlePageNext\"\n ></div>\n </div>\n <div v-if=\"layout.includes('size') || layout === 'all'\" class=\"to-page-size\">\n <to-select\n v-model=\"pageSize_\"\n v-dis=\"disabled\"\n suffix=\"条/页\"\n mode=\"none\"\n :clearable=\"false\"\n :data=\"cPageSizes\"\n :option-width=\"10\"\n @change=\"handleSizeChange\"\n />\n </div>\n <div v-if=\"layout.includes('jumper') || layout === 'all'\" class=\"to-page-jumper\">\n <span>跳至</span>\n <to-input\n v-model=\"jumperPage\"\n v-dis=\"disabled\"\n placeholder=\"1\"\n @keyup.enter=\"handleJump\"\n ></to-input>\n <span>/{{ pageCount_ }}页</span>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, defineProps, defineEmits, onMounted } from 'vue';\n// const slots = useSlots\nconst props = defineProps({\n align: { type: String, default: '' },\n pageSize: { type: [Number, String], default: 10 },\n total: { type: [Number, String], default: 0 },\n pageCount: { type: [Number, String], default: undefined },\n pagerCount: { type: [Number, String], default: 7 },\n currentPage: { type: [Number, String], default: 1 },\n layout: { type: String, default: 'all' },\n pageSizes: { type: [Array, String], default: () => [10, 20, 30, 40, 50, 100] },\n prevText: { type: String, default: '' },\n nextText: { type: String, default: '' },\n disabled: { type: Boolean, default: false },\n hideOnSinglePage: { type: Boolean, default: false },\n lite: Boolean,\n});\n\nconst emit = defineEmits([\n 'update:pageSize',\n 'size-change',\n 'update:currentPage',\n 'current-change',\n 'prev-click',\n 'next-click',\n]);\n\nconst pageCount_ = ref<number>(0);\nconst pageSize_ = ref<number>(Number(props.pageSize));\nconst currentPage_ = ref<number>(Number(props.currentPage));\nconst pager_ = ref<number[]>([]);\nconst jumperPage = ref<string>('');\nconst showPrevMore = ref(false);\nconst showNextMore = ref(false);\n\nconst cShowInSingle = computed(() => {\n return !(props.hideOnSinglePage && Number(pageCount_.value) <= 1) || !props.hideOnSinglePage;\n});\n\nconst cPageSizes = computed(() => {\n const sizes = typeof props.pageSizes === 'string' ? props.pageSizes.split(',') : props.pageSizes;\n return sizes.map(size => ({\n label: size,\n value: Number(size),\n }));\n});\n\nconst setClass = computed(() => {\n let arr: string[] = [];\n if (props.lite) {\n arr.push(`is-lite`);\n }\n return arr;\n});\n\nwatch(\n () => props.pageSize,\n val => {\n const sizes =\n typeof props.pageSizes === 'string' ? props.pageSizes.split(',') : props.pageSizes;\n pageSize_.value = sizes.includes(val) ? Number(val) : Number(sizes[0]);\n },\n { immediate: true }\n);\n\nwatch(\n () => props.currentPage,\n val => {\n currentPage_.value = Number(val);\n computePager();\n },\n { immediate: true }\n);\n\nwatch(\n () => props.pageCount,\n val => {\n pageCount_.value = Number(val);\n computePager();\n },\n { immediate: true }\n);\n\nwatch(() => props.total, computePager);\nwatch(() => props.pagerCount, computePager);\n\nonMounted(() => computePager());\n\nfunction handleJump() {\n if (props.disabled || !jumperPage.value) return;\n let jump = Number(jumperPage.value);\n jump = Math.max(1, Math.min(jump, pageCount_.value));\n jumperPage.value = '';\n handleCurrentChange(jump);\n}\n\nfunction handleSizeChange(size: number) {\n if (props.disabled) return;\n emit('update:pageSize', size);\n emit('size-change', size);\n computePager();\n}\n\nfunction handleCurrentChange(page: number) {\n if (props.disabled) return;\n currentPage_.value = page;\n emit('update:currentPage', page);\n emit('current-change', page);\n computePager();\n}\n\nfunction handlePagePrev() {\n if (props.disabled || currentPage_.value <= 1) return;\n currentPage_.value--;\n handleCurrentChange(currentPage_.value);\n emit('prev-click', currentPage_.value);\n}\n\nfunction handlePageNext() {\n if (props.disabled || currentPage_.value >= pageCount_.value) return;\n currentPage_.value++;\n handleCurrentChange(currentPage_.value);\n emit('next-click', currentPage_.value);\n}\n\nfunction computePager() {\n const pagerCount = Number(props.pagerCount);\n const halfPagerCount = (pagerCount - 1) / 2;\n const count = props.pageCount\n ? Number(props.pageCount)\n : Math.ceil(Number(props.total) / pageSize_.value);\n pageCount_.value = Math.max(1, count);\n\n const current = currentPage_.value;\n showPrevMore.value = current > pagerCount - halfPagerCount;\n showNextMore.value = current < pageCount_.value - halfPagerCount;\n\n const pages: number[] = [];\n\n if (showPrevMore.value && !showNextMore.value) {\n const start = pageCount_.value - (pagerCount - 2);\n for (let i = start; i < pageCount_.value; i++) pages.push(i);\n } else if (!showPrevMore.value && showNextMore.value) {\n for (let i = 2; i < pagerCount; i++) pages.push(i);\n } else if (showPrevMore.value && showNextMore.value) {\n const offset = Math.floor(pagerCount / 2) - 1;\n for (let i = current - offset; i <= current + offset; i++) pages.push(i);\n } else {\n for (let i = 2; i < pageCount_.value; i++) pages.push(i);\n }\n\n pager_.value = pages;\n}\n</script>\n","import type { App, Plugin } from 'vue';\n\n/* 生成install函数 */\n\nexport type SFCWithInstall<T> = T & Plugin;\n\nexport type SFCInstallWithContext<T> = SFCWithInstall<T> & {\n _context: App | null;\n};\n\nexport const withInstall = <T, E extends Record<string, any>>(main: T, extra?: E) => {\n (main as SFCWithInstall<T>).install = (app: App): void => {\n for (const comp of [main, ...Object.values(extra ?? {})]) {\n app.component(comp.name, comp);\n }\n };\n\n if (extra) {\n for (const [key, comp] of Object.entries(extra)) {\n (main as any)[key] = comp;\n }\n }\n return main as SFCWithInstall<T> & E;\n};\n\nexport const withInstallFunction = <T>(fn: T, name: string) => {\n (fn as SFCWithInstall<T>).install = (app: App) => {\n (fn as SFCInstallWithContext<T>)._context = app;\n app.config.globalProperties[name] = fn;\n };\n\n return fn as SFCInstallWithContext<T>;\n};\n","interface Options {\n ratio?: {\n base?: {\n pc?: number;\n pad?: number;\n phone?: number;\n };\n };\n}\n\nconst ua = navigator.userAgent.toLowerCase();\n\nexport function setRatio(options: Options = {}) {\n const ua = navigator.userAgent.toLowerCase();\n const base = options?.ratio?.base ?? {};\n\n const baseSize = /iphone|android.*mobile|windows phone|ipod/i.test(ua)\n ? (base.phone ?? 375)\n : /ipad|android(?!.*mobile)|tablet/i.test(ua)\n ? (base.pad ?? 1100)\n : (base.pc ?? 1366);\n\n const updateFontSize = () => {\n const width = window.innerWidth || document.documentElement.clientWidth;\n document.documentElement.style.fontSize = (width / baseSize) * 100 + 'px';\n };\n\n updateFontSize();\n window.addEventListener('resize', updateFontSize);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function getMedia(options: Options = {}) {\n const isMobile = /iphone|android.*mobile|windows phone|ipod/i.test(ua);\n const isTablet = /ipad|android(?!.*mobile)|tablet/i.test(ua);\n\n return isMobile ? 'phone' : isTablet ? 'pad' : 'pc';\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function setMedia(options: Options = {}) {\n const html = document.documentElement;\n const classList: string[] = [];\n\n // 判断操作系统\n if (/windows/i.test(ua)) {\n classList.push('os-windows');\n } else if (/macintosh|mac os x/i.test(ua)) {\n classList.push('os-macos');\n } else if (/android/i.test(ua)) {\n classList.push('os-android');\n } else if (/iphone|ipad|ipod/i.test(ua)) {\n classList.push('os-ios');\n }\n\n // 判断设备类型\n const media = getMedia();\n if (media === 'pad') {\n classList.push('media-pad');\n } else if (media === 'phone') {\n classList.push('media-phone');\n } else {\n classList.push('media-pc');\n }\n\n // 添加 class 到 <html>\n html.className += ' ' + classList.join(' ');\n}\n\nexport function getEm() {\n const el = document.createElement('div');\n el.style.width = '1em';\n el.style.height = '1em';\n el.style.position = 'absolute';\n document.body.appendChild(el);\n const size = el.getBoundingClientRect().height;\n document.body.removeChild(el);\n return size;\n}\n","import Page from './src/page.vue';\nimport { SFCWithInstall, withInstall } from '@touchvue/utils';\nexport const ToPage: SFCWithInstall<typeof Page> = withInstall(Page);\nexport * from './src/instance';\n"],"names":["_createElementBlock","_normalizeClass","_openBlock","_toDisplayString","_createCommentVNode","_renderSlot","_createElementVNode","_Fragment","_renderList","_createVNode"],"mappings":"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"}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import { ref, computed, openBlock, createElementBlock, normalizeClass, createElementVNode, toDisplayString, createCommentVNode, createTextVNode, createBlock, Teleport, unref, normalizeStyle, Fragment, renderList } from 'vue';
|
|
2
|
+
|
|
3
|
+
var _export_sfc = (sfc, props) => {
|
|
4
|
+
const target = sfc.__vccOpts || sfc;
|
|
5
|
+
for (const [key, val] of props) {
|
|
6
|
+
target[key] = val;
|
|
7
|
+
}
|
|
8
|
+
return target;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
const _hoisted_1 = { class: "to-select-content" };
|
|
12
|
+
const _hoisted_2 = { key: 0 };
|
|
13
|
+
const _hoisted_3 = { key: 1 };
|
|
14
|
+
const _hoisted_4 = ["onClick"];
|
|
15
|
+
|
|
16
|
+
const _sfc_main = /*@__PURE__*/Object.assign({
|
|
17
|
+
name: 'ToSelect',
|
|
18
|
+
}, {
|
|
19
|
+
__name: 'select',
|
|
20
|
+
props: {
|
|
21
|
+
modelValue: {
|
|
22
|
+
type: [String, Number],
|
|
23
|
+
default: '',
|
|
24
|
+
},
|
|
25
|
+
data: {
|
|
26
|
+
type: [Boolean, Array],
|
|
27
|
+
default: () => {
|
|
28
|
+
return [];
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
prefix: {
|
|
32
|
+
type: String,
|
|
33
|
+
default: '',
|
|
34
|
+
},
|
|
35
|
+
suffix: {
|
|
36
|
+
type: String,
|
|
37
|
+
default: '',
|
|
38
|
+
},
|
|
39
|
+
mode: {
|
|
40
|
+
type: String,
|
|
41
|
+
default: 'default',
|
|
42
|
+
},
|
|
43
|
+
placeholderText: {
|
|
44
|
+
type: String,
|
|
45
|
+
default: '请选择',
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
emits: ['update:modelValue', 'change'],
|
|
49
|
+
setup(__props, { emit: __emit }) {
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
const props = __props;
|
|
53
|
+
const elRef = ref(null);
|
|
54
|
+
const optionRef = ref(null);
|
|
55
|
+
let showOption = ref(false);
|
|
56
|
+
const options = computed(() => {
|
|
57
|
+
if (typeof props.data === 'string') {
|
|
58
|
+
// 按逗号拆分字符串,过滤空项
|
|
59
|
+
return props.data
|
|
60
|
+
.split(',')
|
|
61
|
+
.map(item => item.trim())
|
|
62
|
+
.filter(item => item.length > 0)
|
|
63
|
+
.map(item => ({ label: item, value: item }));
|
|
64
|
+
} else if (Array.isArray(props.data)) {
|
|
65
|
+
return props.data;
|
|
66
|
+
}
|
|
67
|
+
// 其它情况返回空数组
|
|
68
|
+
return [];
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
const emit = __emit;
|
|
72
|
+
|
|
73
|
+
const isPlaceholder = computed(
|
|
74
|
+
() => props.modelValue === undefined || props.modelValue === null || props.modelValue === ''
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
const displayText = computed(() => {
|
|
78
|
+
if (isPlaceholder.value) return props.placeholderText;
|
|
79
|
+
if (options.value.length) {
|
|
80
|
+
const found = options.value.find(item => item.value === props.modelValue);
|
|
81
|
+
return found && found.label !== undefined ? found.label : String(props.modelValue);
|
|
82
|
+
}
|
|
83
|
+
return String(props.modelValue);
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
const setClass = computed(() => {
|
|
87
|
+
const arr = [];
|
|
88
|
+
if (props.mode) {
|
|
89
|
+
arr.push(`mode-${props.mode}`);
|
|
90
|
+
}
|
|
91
|
+
return arr;
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
const setOptionStyle = computed(() => {
|
|
95
|
+
const obj = {};
|
|
96
|
+
return obj;
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
const open = () => {
|
|
100
|
+
if (showOption.value) {
|
|
101
|
+
showOption.value = false;
|
|
102
|
+
} else {
|
|
103
|
+
// 获取初始变量
|
|
104
|
+
const baseInfo = elRef.value.getBoundingClientRect();
|
|
105
|
+
// const floatInfo = optionRef.value.getBoundingClientRect()
|
|
106
|
+
const contentHeight = optionRef.value.scrollHeight;
|
|
107
|
+
const spaceHeight = document.body.offsetHeight - (baseInfo.top + baseInfo.height);
|
|
108
|
+
|
|
109
|
+
// 定位
|
|
110
|
+
optionRef.value.style.left = `${baseInfo.left}px`;
|
|
111
|
+
optionRef.value.style.top = `${baseInfo.top + baseInfo.height - 1}px`;
|
|
112
|
+
|
|
113
|
+
// 设置大小
|
|
114
|
+
optionRef.value.style.width = `${baseInfo.width}px`;
|
|
115
|
+
|
|
116
|
+
// 设置高度
|
|
117
|
+
if (spaceHeight < contentHeight) {
|
|
118
|
+
optionRef.value.style.height = `${spaceHeight}px`;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// 打开
|
|
122
|
+
showOption.value = true;
|
|
123
|
+
|
|
124
|
+
// 点击组件之外关闭
|
|
125
|
+
document.body.addEventListener('mousedown', blur);
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
const blur = e => {
|
|
130
|
+
let node = e.target;
|
|
131
|
+
while (node && node !== optionRef.value && node !== elRef.value && node.nodeName !== 'BODY') {
|
|
132
|
+
node = node.parentNode;
|
|
133
|
+
}
|
|
134
|
+
if (node && node.nodeName === 'BODY') {
|
|
135
|
+
close();
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
const select = item => {
|
|
140
|
+
emit('update:modelValue', item.value);
|
|
141
|
+
emit('change', item.value);
|
|
142
|
+
close();
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
const close = () => {
|
|
146
|
+
showOption.value = false;
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
const clear = () => {
|
|
150
|
+
emit('update:modelValue', '');
|
|
151
|
+
emit('change', '');
|
|
152
|
+
close();
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
return (_ctx, _cache) => {
|
|
156
|
+
return (openBlock(), createElementBlock("div", {
|
|
157
|
+
ref_key: "elRef",
|
|
158
|
+
ref: elRef,
|
|
159
|
+
class: normalizeClass(["to-select", [{ 'is-placeholder': isPlaceholder.value }, ...setClass.value]]),
|
|
160
|
+
onClick: open
|
|
161
|
+
}, [
|
|
162
|
+
createElementVNode("div", _hoisted_1, [
|
|
163
|
+
(!isPlaceholder.value)
|
|
164
|
+
? (openBlock(), createElementBlock("span", _hoisted_2, toDisplayString(__props.prefix), 1 /* TEXT */))
|
|
165
|
+
: createCommentVNode("v-if", true),
|
|
166
|
+
createTextVNode(" " + toDisplayString(displayText.value) + " ", 1 /* TEXT */),
|
|
167
|
+
(!isPlaceholder.value)
|
|
168
|
+
? (openBlock(), createElementBlock("span", _hoisted_3, toDisplayString(__props.suffix), 1 /* TEXT */))
|
|
169
|
+
: createCommentVNode("v-if", true)
|
|
170
|
+
]),
|
|
171
|
+
_cache[0] || (_cache[0] = createElementVNode("div", { class: "to-select-arrow" }, null, -1 /* CACHED */)),
|
|
172
|
+
(openBlock(), createBlock(Teleport, { to: "body" }, [
|
|
173
|
+
createElementVNode("div", {
|
|
174
|
+
ref_key: "optionRef",
|
|
175
|
+
ref: optionRef,
|
|
176
|
+
class: normalizeClass(["to-select-option", { 'is-show': unref(showOption) }]),
|
|
177
|
+
style: normalizeStyle(setOptionStyle.value)
|
|
178
|
+
}, [
|
|
179
|
+
createElementVNode("div", {
|
|
180
|
+
class: "to-select-item",
|
|
181
|
+
onClick: clear
|
|
182
|
+
}, toDisplayString(__props.placeholderText), 1 /* TEXT */),
|
|
183
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(options.value, (item, index) => {
|
|
184
|
+
return (openBlock(), createElementBlock("div", {
|
|
185
|
+
key: index,
|
|
186
|
+
class: normalizeClass(["to-select-item", { 'is-on': __props.modelValue === item.value }]),
|
|
187
|
+
onClick: $event => (select(item))
|
|
188
|
+
}, toDisplayString(item.label), 11 /* TEXT, CLASS, PROPS */, _hoisted_4))
|
|
189
|
+
}), 128 /* KEYED_FRAGMENT */))
|
|
190
|
+
], 6 /* CLASS, STYLE */)
|
|
191
|
+
]))
|
|
192
|
+
], 2 /* CLASS */))
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
});
|
|
197
|
+
var Select = /*#__PURE__*/_export_sfc(_sfc_main, [['__file',"/Users/wangding/WorkSpace/AsiaInfo/projects/前端框架/touch-vue3-ui/packages/components/select/src/select.vue"]]);
|
|
198
|
+
|
|
199
|
+
const withInstall = (main, extra) => {
|
|
200
|
+
main.install = (app) => {
|
|
201
|
+
for (const comp of [main, ...Object.values(extra != null ? extra : {})]) {
|
|
202
|
+
app.component(comp.name, comp);
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
if (extra) {
|
|
206
|
+
for (const [key, comp] of Object.entries(extra)) {
|
|
207
|
+
main[key] = comp;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return main;
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
navigator.userAgent.toLowerCase();
|
|
214
|
+
|
|
215
|
+
const ToSelect = withInstall(Select);
|
|
216
|
+
|
|
217
|
+
export { ToSelect };
|
|
218
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../packages/components/select/src/select.vue","../../../../packages/utils/types.ts","../../../../packages/utils/ratio.ts","../../../../packages/components/select/index.ts"],"sourcesContent":["<template>\n <div\n ref=\"elRef\"\n class=\"to-select\"\n :class=\"[{ 'is-placeholder': isPlaceholder }, ...setClass]\"\n @click=\"open\"\n >\n <div class=\"to-select-content\">\n <span v-if=\"!isPlaceholder\">{{ prefix }}</span>\n {{ displayText }}\n <span v-if=\"!isPlaceholder\">{{ suffix }}</span>\n </div>\n <div class=\"to-select-arrow\"></div>\n <Teleport to=\"body\">\n <div\n ref=\"optionRef\"\n class=\"to-select-option\"\n :class=\"{ 'is-show': showOption }\"\n :style=\"setOptionStyle\"\n >\n <div class=\"to-select-item\" @click=\"clear\">{{ placeholderText }}</div>\n <div\n v-for=\"(item, index) in options\"\n :key=\"index\"\n class=\"to-select-item\"\n :class=\"{ 'is-on': modelValue === item.value }\"\n @click=\"select(item)\"\n >\n {{ item.label }}\n </div>\n </div>\n </Teleport>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed } from 'vue';\ndefineOptions({\n name: 'ToSelect',\n});\nconst props = defineProps({\n modelValue: {\n type: [String, Number],\n default: '',\n },\n data: {\n type: [Boolean, Array],\n default: () => {\n return [];\n },\n },\n prefix: {\n type: String,\n default: '',\n },\n suffix: {\n type: String,\n default: '',\n },\n mode: {\n type: String,\n default: 'default',\n },\n placeholderText: {\n type: String,\n default: '请选择',\n },\n});\nconst elRef = ref(null);\nconst optionRef = ref(null);\nlet showOption = ref(false);\nconst options = computed(() => {\n if (typeof props.data === 'string') {\n // 按逗号拆分字符串,过滤空项\n return props.data\n .split(',')\n .map(item => item.trim())\n .filter(item => item.length > 0)\n .map(item => ({ label: item, value: item }));\n } else if (Array.isArray(props.data)) {\n return props.data;\n }\n // 其它情况返回空数组\n return [];\n});\n\nconst emit = defineEmits(['update:modelValue', 'change']);\n\nconst isPlaceholder = computed(\n () => props.modelValue === undefined || props.modelValue === null || props.modelValue === ''\n);\n\nconst displayText = computed(() => {\n if (isPlaceholder.value) return props.placeholderText;\n if (options.value.length) {\n const found = options.value.find(item => item.value === props.modelValue);\n return found && found.label !== undefined ? found.label : String(props.modelValue);\n }\n return String(props.modelValue);\n});\n\nconst setClass = computed(() => {\n const arr = [];\n if (props.mode) {\n arr.push(`mode-${props.mode}`);\n }\n return arr;\n});\n\nconst setOptionStyle = computed(() => {\n const obj = {};\n return obj;\n});\n\nconst open = () => {\n if (showOption.value) {\n showOption.value = false;\n } else {\n // 获取初始变量\n const baseInfo = elRef.value.getBoundingClientRect();\n // const floatInfo = optionRef.value.getBoundingClientRect()\n const contentHeight = optionRef.value.scrollHeight;\n const spaceHeight = document.body.offsetHeight - (baseInfo.top + baseInfo.height);\n\n // 定位\n optionRef.value.style.left = `${baseInfo.left}px`;\n optionRef.value.style.top = `${baseInfo.top + baseInfo.height - 1}px`;\n\n // 设置大小\n optionRef.value.style.width = `${baseInfo.width}px`;\n\n // 设置高度\n if (spaceHeight < contentHeight) {\n optionRef.value.style.height = `${spaceHeight}px`;\n }\n\n // 打开\n showOption.value = true;\n\n // 点击组件之外关闭\n document.body.addEventListener('mousedown', blur);\n }\n};\n\nconst blur = e => {\n let node = e.target;\n while (node && node !== optionRef.value && node !== elRef.value && node.nodeName !== 'BODY') {\n node = node.parentNode;\n }\n if (node && node.nodeName === 'BODY') {\n close();\n }\n};\n\nconst select = item => {\n emit('update:modelValue', item.value);\n emit('change', item.value);\n close();\n};\n\nconst close = () => {\n showOption.value = false;\n};\n\nconst clear = () => {\n emit('update:modelValue', '');\n emit('change', '');\n close();\n};\n</script>\n","import type { App, Plugin } from 'vue';\n\n/* 生成install函数 */\n\nexport type SFCWithInstall<T> = T & Plugin;\n\nexport type SFCInstallWithContext<T> = SFCWithInstall<T> & {\n _context: App | null;\n};\n\nexport const withInstall = <T, E extends Record<string, any>>(main: T, extra?: E) => {\n (main as SFCWithInstall<T>).install = (app: App): void => {\n for (const comp of [main, ...Object.values(extra ?? {})]) {\n app.component(comp.name, comp);\n }\n };\n\n if (extra) {\n for (const [key, comp] of Object.entries(extra)) {\n (main as any)[key] = comp;\n }\n }\n return main as SFCWithInstall<T> & E;\n};\n\nexport const withInstallFunction = <T>(fn: T, name: string) => {\n (fn as SFCWithInstall<T>).install = (app: App) => {\n (fn as SFCInstallWithContext<T>)._context = app;\n app.config.globalProperties[name] = fn;\n };\n\n return fn as SFCInstallWithContext<T>;\n};\n","interface Options {\n ratio?: {\n base?: {\n pc?: number;\n pad?: number;\n phone?: number;\n };\n };\n}\n\nconst ua = navigator.userAgent.toLowerCase();\n\nexport function setRatio(options: Options = {}) {\n const ua = navigator.userAgent.toLowerCase();\n const base = options?.ratio?.base ?? {};\n\n const baseSize = /iphone|android.*mobile|windows phone|ipod/i.test(ua)\n ? (base.phone ?? 375)\n : /ipad|android(?!.*mobile)|tablet/i.test(ua)\n ? (base.pad ?? 1100)\n : (base.pc ?? 1366);\n\n const updateFontSize = () => {\n const width = window.innerWidth || document.documentElement.clientWidth;\n document.documentElement.style.fontSize = (width / baseSize) * 100 + 'px';\n };\n\n updateFontSize();\n window.addEventListener('resize', updateFontSize);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function getMedia(options: Options = {}) {\n const isMobile = /iphone|android.*mobile|windows phone|ipod/i.test(ua);\n const isTablet = /ipad|android(?!.*mobile)|tablet/i.test(ua);\n\n return isMobile ? 'phone' : isTablet ? 'pad' : 'pc';\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function setMedia(options: Options = {}) {\n const html = document.documentElement;\n const classList: string[] = [];\n\n // 判断操作系统\n if (/windows/i.test(ua)) {\n classList.push('os-windows');\n } else if (/macintosh|mac os x/i.test(ua)) {\n classList.push('os-macos');\n } else if (/android/i.test(ua)) {\n classList.push('os-android');\n } else if (/iphone|ipad|ipod/i.test(ua)) {\n classList.push('os-ios');\n }\n\n // 判断设备类型\n const media = getMedia();\n if (media === 'pad') {\n classList.push('media-pad');\n } else if (media === 'phone') {\n classList.push('media-phone');\n } else {\n classList.push('media-pc');\n }\n\n // 添加 class 到 <html>\n html.className += ' ' + classList.join(' ');\n}\n\nexport function getEm() {\n const el = document.createElement('div');\n el.style.width = '1em';\n el.style.height = '1em';\n el.style.position = 'absolute';\n document.body.appendChild(el);\n const size = el.getBoundingClientRect().height;\n document.body.removeChild(el);\n return size;\n}\n","import Select from './src/select.vue';\nimport { SFCWithInstall, withInstall } from '@touchvue/utils';\n\nexport const ToSelect: SFCWithInstall<typeof Select> = withInstall(Select);\n\nexport * from './src/instance';\n"],"names":["_createElementBlock","_normalizeClass","_createElementVNode","_openBlock","_toDisplayString","_createBlock","_Teleport","_unref","_Fragment","_renderList"],"mappings":"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"}
|