@neatui/nuxt 0.1.0

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 (102) hide show
  1. package/README.md +3 -0
  2. package/package.json +43 -0
  3. package/rollup.config.js +35 -0
  4. package/src/components/basic/IDraggable.vue +84 -0
  5. package/src/components/basic/IDraggable@b.vue +80 -0
  6. package/src/components/basic/IFollowView.vue +211 -0
  7. package/src/components/basic/IPickerView.vue +351 -0
  8. package/src/components/basic/IRouterView.vue +360 -0
  9. package/src/components/basic/IScrollView.vue +127 -0
  10. package/src/components/basic/Icon.vue +54 -0
  11. package/src/components/basic/LayerView/Layer.vue +339 -0
  12. package/src/components/basic/LayerView/index.ts +5 -0
  13. package/src/components/basic/index.ts +7 -0
  14. package/src/components/display/Avatar.vue +1 -0
  15. package/src/components/display/Badge.vue +1 -0
  16. package/src/components/display/Calendar.vue +245 -0
  17. package/src/components/display/CalendarReg.vue +245 -0
  18. package/src/components/display/Card.vue +1 -0
  19. package/src/components/display/Carousel.vue +1 -0
  20. package/src/components/display/ChartView.vue +123 -0
  21. package/src/components/display/Collapse.vue +1 -0
  22. package/src/components/display/Desriptions.vue +1 -0
  23. package/src/components/display/Empty.vue +1 -0
  24. package/src/components/display/Image.vue +112 -0
  25. package/src/components/display/List.vue +1 -0
  26. package/src/components/display/PhotoEditor.vue +181 -0
  27. package/src/components/display/PhotoViewer.vue +50 -0
  28. package/src/components/display/Popover.vue +1 -0
  29. package/src/components/display/QRCode.vue +1 -0
  30. package/src/components/display/Segmented.vue +1 -0
  31. package/src/components/display/Statistic.vue +1 -0
  32. package/src/components/display/Table.vue +1 -0
  33. package/src/components/display/Tabs.vue +1 -0
  34. package/src/components/display/Tag.vue +1 -0
  35. package/src/components/display/Timeline.vue +1 -0
  36. package/src/components/display/Tooltip.vue +1 -0
  37. package/src/components/display/Tour.vue +1 -0
  38. package/src/components/display/Tree.vue +431 -0
  39. package/src/components/display/TreeView.vue +225 -0
  40. package/src/components/display/index.ts +8 -0
  41. package/src/components/form/Cascader.vue +435 -0
  42. package/src/components/form/DatePicker.vue +124 -0
  43. package/src/components/form/DateRangePicker@v2.vue.backup +224 -0
  44. package/src/components/form/DateRangePicker@v3.vue +116 -0
  45. package/src/components/form/DateRangeView@v3.vue +386 -0
  46. package/src/components/form/DateView.vue +229 -0
  47. package/src/components/form/DateView@v2.vue +386 -0
  48. package/src/components/form/DateView@v3.vue +471 -0
  49. package/src/components/form/EditUpload.vue +4 -0
  50. package/src/components/form/ImgUpload.vue +174 -0
  51. package/src/components/form/Input.vue.backup +230 -0
  52. package/src/components/form/Input@v3.vue +267 -0
  53. package/src/components/form/InputNumber.vue +200 -0
  54. package/src/components/form/InputRange.vue +235 -0
  55. package/src/components/form/MoreSelect.vue.backup +144 -0
  56. package/src/components/form/MoreSelect@v3.vue +195 -0
  57. package/src/components/form/MoreSelectList.vue +125 -0
  58. package/src/components/form/MoreSelectPanel@v3.vue +190 -0
  59. package/src/components/form/MoreSelectPicker.vue +124 -0
  60. package/src/components/form/MoreSelectTags.vue +124 -0
  61. package/src/components/form/PageMoreSelect.vue +187 -0
  62. package/src/components/form/PageSelect.vue +189 -0
  63. package/src/components/form/SearchMoreSelect.vue +173 -0
  64. package/src/components/form/SearchSelect.vue.backup +194 -0
  65. package/src/components/form/SearchSelect@v3.vue +202 -0
  66. package/src/components/form/Select@v3.vue +201 -0
  67. package/src/components/form/SelectList.vue +58 -0
  68. package/src/components/form/SelectPicker.vue +97 -0
  69. package/src/components/form/SelectTags.vue +52 -0
  70. package/src/components/form/SelectTree/SelectTree@v1.vue +227 -0
  71. package/src/components/form/Switch.vue +135 -0
  72. package/src/components/form/TextArea.vue +193 -0
  73. package/src/components/form/TimePicker.vue +11 -0
  74. package/src/components/form/TimeView.vue +244 -0
  75. package/src/components/form/Upload.vue +346 -0
  76. package/src/components/form/index.ts +82 -0
  77. package/src/components/loader/FormLoader/FormLoader@v2.vue +422 -0
  78. package/src/components/loader/FormLoader/FormLoader@v3.vue.backup +318 -0
  79. package/src/components/loader/FormLoader/index.ts +2 -0
  80. package/src/components/loader/FormLoader@v1/FormLoader.vue +506 -0
  81. package/src/components/loader/FormLoader@v1/FormRender.vue +277 -0
  82. package/src/components/loader/LimitLoader/LimitLoader.vue.backup +131 -0
  83. package/src/components/loader/LimitLoader/LimitLoader@v2.vue.backup +174 -0
  84. package/src/components/loader/LimitLoader/LimitLoader@v3.vue +183 -0
  85. package/src/components/loader/LimitLoader/index.ts +2 -0
  86. package/src/components/loader/TableLoader/TableColView.vue +115 -0
  87. package/src/components/loader/TableLoader/TableLoader.vue +360 -0
  88. package/src/components/loader/TableLoader/index.ts +2 -0
  89. package/src/components/loader/ViewLoader/ViewLoader@v1.vue +256 -0
  90. package/src/components/loader/ViewLoader/index.ts +2 -0
  91. package/src/components/loader/index.ts +5 -0
  92. package/src/components/tools/FormDraftsView.vue +330 -0
  93. package/src/components/tools/FormVerifyView.vue +206 -0
  94. package/src/components/tools/MoreTools.vue +74 -0
  95. package/src/components/tools/MoreTools@v2.vue +74 -0
  96. package/src/components/tools/Pagination@a.vue +222 -0
  97. package/src/components/tools/Pagination@b.vue +221 -0
  98. package/src/components/tools/index.ts +5 -0
  99. package/src/index.ts +9 -0
  100. package/src/shims-vue.d.ts +5 -0
  101. package/src/store/myui.ts +50 -0
  102. package/tsconfig.json +24 -0
@@ -0,0 +1,435 @@
1
+ <template>
2
+ <div :ui-form="`@a type:select sz:${sz}`" :ui-form-open="state.show ? 'show' : ''" class="mc-cascader">
3
+ <IFollowView
4
+ ref="ifollow"
5
+ :tipBoxStyle="`${state.flatOpts.length && state.flatOpts[0]?.length > 0 ? 'min-width: 10em;' : 'min-width: 100%'}`"
6
+ pos="bl"
7
+ tipBoxClass="ny-sm nx-no"
8
+ >
9
+ <Input v-model="state.selectd.label" :clearable="false" :disabled="disabled" readonly v-bind="bindProps">
10
+ <template #suffix><i ui-form-select=""></i></template>
11
+ </Input>
12
+ <template #tips v-if="!readonly && !disabled">
13
+ <div v-if="state.flatOpts?.length && state.flatOpts[0]?.length > 0" ui-flex="row">
14
+ <template v-for="(opt, optIndex) in state.flatOpts" :key="optIndex">
15
+ <ul v-if="opt?.length" class="min-h-ms max-h-ls" :class="`nx-sm lh-ml ${optIndex === 0 ? '' : 'bl-xs bk-back b-solid'}`" ui-scroll=":y s">
16
+ <!-- 多选 -->
17
+ <template v-if="multiple">
18
+ <li v-for="(item, idx) of opt" :key="idx" class="ux-hover nx-sm r-ss nowrap" @click="multiSelect(item, optIndex)">
19
+ <div ui-flex="row xm">
20
+ <div ui-form="@a type:checkbox :block`">
21
+ <input
22
+ :checked="item.checkedStatus === 'all'"
23
+ :class="`mr-sm ${item.checkedStatus === 'part' ? 'part-style' : ''}`"
24
+ :name="formName"
25
+ type="checkbox"
26
+ @change="(e: any) => inputChange(e.target.checked, item, optIndex)"
27
+ @click.stop="() => {}"
28
+ />
29
+ <span :class="`${state.selectd.value[optIndex] === item.value ? 'co-main' : ''}`"> {{ item.label || item }}</span>
30
+ </div>
31
+ <i v-if="item.children?.length" :class="`icon icon-next ${state.selectd.value[optIndex] === item.value ? 'co-main' : 'co-note'}`"></i>
32
+ </div>
33
+ </li>
34
+ </template>
35
+ <!-- 单选 -->
36
+ <template v-else>
37
+ <li
38
+ v-for="(item, idx) of opt"
39
+ :key="idx"
40
+ :class="item.value === state.transSelected?.value ? 'co-main' : ''"
41
+ class="ux-hover nx-sm r-ss nowrap"
42
+ @click="select(item, optIndex)"
43
+ >
44
+ <IFollowView v-if="item.optTips" event="hover">
45
+ <div ui-flex="row xm">
46
+ <span :class="`${state.transSelected.value[optIndex] === item.value ? 'co-main' : ''}`"> {{ item.label || item }}</span>
47
+ <i v-if="item.children?.length" :class="`icon icon-next ${state.transSelected.value[optIndex] === item.value ? 'co-main' : 'co-note'}`"></i>
48
+ </div>
49
+ <template #tips>
50
+ <div class="nowrap">{{ item.optTips }}</div>
51
+ </template>
52
+ </IFollowView>
53
+ <div v-else ui-flex="row xm">
54
+ <span :class="`${state.transSelected.value[optIndex] === item.value ? 'co-main' : ''}`"> {{ item.label || item }}</span>
55
+ <i v-if="item.children?.length" :class="`icon icon-next ${state.transSelected.value[optIndex] === item.value ? 'co-main' : 'co-note'}`"></i>
56
+ </div>
57
+ </li>
58
+ </template>
59
+ </ul>
60
+ </template>
61
+ </div>
62
+ <div v-else class="w-full ny-ms" ui-flex="col cm" v-html="spare"></div>
63
+
64
+ <ul v-if="tools" class="nx-sm lh-ml">
65
+ <li class="my-ss">
66
+ <div class="o-mm" ui-line="@a"></div>
67
+ </li>
68
+ <li ui-flex="row xm">
69
+ <div v-if="!multiple">
70
+ <p class="nx-sm r-ss nowrap">
71
+ <span>单选</span>
72
+ </p>
73
+ </div>
74
+ <label v-else class="nx-sm r-ss nowrap" ui-form="@a type:checkbox :block`">
75
+ <input :checked="state.checkAll" name="checkAll" type="checkbox" @change="checkAllChange" />
76
+ <span :class="`${state.checkAll ? 'co-main' : ''}`">全选</span>
77
+ </label>
78
+ <div>
79
+ <button v-show="state.selectd?.value" class="co-risk" ui-btn="@a none s" @click="remove">清空</button>
80
+ </div>
81
+ </li>
82
+ </ul>
83
+ </template>
84
+ </IFollowView>
85
+ </div>
86
+ </template>
87
+
88
+ <script lang="ts" setup>
89
+ import { reactive, ref, watch, computed } from 'vue';
90
+ import { Input } from '.';
91
+ import IFollowView from '../basic/IFollowView.vue';
92
+ import { deepcopy } from '@fekit/utils';
93
+
94
+ const ifollow: any = ref(null);
95
+
96
+ const props = defineProps({
97
+ theme: { type: String, default: '@a' },
98
+ sz: { type: String, default: 'm' },
99
+ co: { type: String, default: '' },
100
+ block: { type: Boolean, default: true },
101
+ // 提示文案
102
+ tips: {
103
+ type: String,
104
+ default: ''
105
+ },
106
+ placeholder: {
107
+ type: String,
108
+ default: ''
109
+ },
110
+ options: {
111
+ type: Array as () => any[],
112
+ default: () => []
113
+ },
114
+ ui: {
115
+ type: Object,
116
+ default: () => ({ sz: 'm' })
117
+ },
118
+ modelValue: {
119
+ type: [String, Number, Array as () => any[]],
120
+ default: ''
121
+ },
122
+ tools: {
123
+ type: Boolean,
124
+ default: true
125
+ },
126
+ spare: {
127
+ type: String,
128
+ default: '当前没有可选项'
129
+ },
130
+ multiple: {
131
+ type: Boolean,
132
+ default: false
133
+ },
134
+ // 单选时生效,当为true时选中任何一级节点都生效
135
+ changeOnSelect: {
136
+ type: Boolean,
137
+ default: false
138
+ },
139
+ readonly: {
140
+ type: Boolean,
141
+ default: false
142
+ },
143
+ disabled: {
144
+ type: Boolean,
145
+ default: false
146
+ }
147
+ });
148
+
149
+ const emit = defineEmits(['update:modelValue']);
150
+
151
+ const state: any = reactive({
152
+ view: 1,
153
+ pos: 'bl',
154
+ show: 0,
155
+ search: '',
156
+ flatOpts: [], // 拉平的数据
157
+ selectd: { label: '', value: '' },
158
+ transSelected: { label: '', value: [] }, // 单选选中节点 - 单选过渡节点(记录选中的级联节点)
159
+ checkAll: false //全选
160
+ });
161
+
162
+ // modelValue与input组件的v-model绑定属性重复,会造成覆盖问题。需要删掉
163
+ const bindProps: any = computed(() => {
164
+ const result: any = { ...props };
165
+ delete result.modelValue;
166
+ return bindProps;
167
+ });
168
+
169
+ const formName = new Date().getTime().toString();
170
+
171
+ // 根据子节点获取所有父节点
172
+ const getParents = (treeData: any, val: any) => {
173
+ for (const i in treeData) {
174
+ if (treeData[i].value === val && (!treeData[i].children?.length || props.changeOnSelect)) {
175
+ return [{ label: treeData[i].label, value: treeData[i].value }];
176
+ }
177
+ if (treeData[i].children) {
178
+ const result: any = getParents(treeData[i].children, val);
179
+ if (result !== undefined) {
180
+ return result.concat({ label: treeData[i].label, value: treeData[i].value });
181
+ }
182
+ }
183
+ }
184
+ };
185
+
186
+ // 单选有值时默认展开
187
+ const handleExpand = () => {
188
+ state.flatOpts = [[...props.options]];
189
+ if (state.transSelected.value) {
190
+ const deepMap = (treeData: any, optIndex: any) => {
191
+ for (const i in treeData) {
192
+ if (treeData[i].value === state.transSelected?.value[optIndex] && treeData[i]?.children?.length > 0) {
193
+ state.flatOpts.push([...treeData[i].children]);
194
+ deepMap(treeData[i].children, optIndex + 1);
195
+ }
196
+ }
197
+ };
198
+ deepMap(props.options, 0);
199
+ }
200
+ };
201
+
202
+ // 根据传入的value处理内部selectd(单选)
203
+ const getSelected = () => {
204
+ const p = getParents(props.options, props.modelValue);
205
+ if (p) {
206
+ p.reverse();
207
+ const label = p.map((item: any) => item.label);
208
+ const value = p.map((item: any) => item.value);
209
+ state.transSelected.value = value;
210
+ state.selectd.label = label.join('/');
211
+ state.selectd.value = props.modelValue;
212
+
213
+ //当有值的时候默认展开
214
+ handleExpand();
215
+ } else {
216
+ state.selectd = { label: '', value: '' };
217
+ state.transSelected = { label: '', value: [] };
218
+ }
219
+ };
220
+
221
+ // 选择(单选)
222
+ const select = (item: any = {}, optIndex: any) => {
223
+ const label = optIndex === 0 ? [] : state.transSelected.label?.split('/').splice(0, optIndex);
224
+ const _label = [...label, item.label];
225
+ state.transSelected.label = _label.length > 0 ? _label.join('/') : '';
226
+ const _value = optIndex === 0 ? [] : state.transSelected.value?.splice(0, optIndex);
227
+ state.transSelected.value = [..._value, item.value];
228
+
229
+ if (item.children?.length > 0) {
230
+ const _opt = optIndex < state.flatOpts.length ? state.flatOpts.slice(0, optIndex + 1) : state.flatOpts;
231
+ state.flatOpts = [..._opt, item.children];
232
+ if (props.changeOnSelect) {
233
+ state.selectd.label = state.transSelected.label;
234
+ state.selectd.value = item.value;
235
+ }
236
+ } else {
237
+ state.selectd.label = state.transSelected.label;
238
+ state.selectd.value = item.value;
239
+ ifollow.value.cancel();
240
+ }
241
+ };
242
+
243
+ // 勾选样式处理(多选)
244
+ const handleCheck = (clear = false, value = []) => {
245
+ state.flatOpts = state.flatOpts.map((optItem: any) => {
246
+ return optItem.map((item: any) => {
247
+ const all = item.childNodes?.every((n: any) => {
248
+ return state.selectd.value.includes(n.value);
249
+ });
250
+ const part = item.childNodes?.some((n: any) => {
251
+ return state.selectd.value.includes(n.value);
252
+ });
253
+ item.checkedStatus = clear || (!all && !part) ? 'none' : all ? 'all' : 'part';
254
+ return item;
255
+ });
256
+ });
257
+ };
258
+
259
+ //寻找某个节点对应的所有最底部子节点
260
+ const searchChildNode = (n: any) => {
261
+ const childNodes: any = [];
262
+ // 递归查找子节点
263
+ const deepMap = (opts: any) => {
264
+ if (opts.children?.length > 0) {
265
+ opts.children.map((item: any) => {
266
+ deepMap(item);
267
+ });
268
+ } else {
269
+ childNodes.push(opts);
270
+ }
271
+ };
272
+ deepMap(n);
273
+ return childNodes;
274
+ };
275
+
276
+ //获取所有的子节点
277
+ const getAllChildNode = () => {
278
+ const nodes: any = [];
279
+ props.options.map((item: any) => {
280
+ const itemNodes = searchChildNode(item);
281
+ nodes.push(...itemNodes);
282
+ });
283
+ return nodes;
284
+ };
285
+
286
+ // 根据传入的value处理内部selectd(多选)
287
+ const getMultiSelected = (value: any) => {
288
+ const nodes = getAllChildNode();
289
+ const _label: any = [];
290
+ nodes?.map((item: any) => {
291
+ if (value?.includes(item.value)) {
292
+ _label.push(item.label);
293
+ }
294
+ });
295
+ const label = _label?.length > 0 ? _label.join(' | ') : '';
296
+ state.selectd.label = label;
297
+ state.selectd.value = value;
298
+ };
299
+
300
+ // 将拉平的数组的每个节点加入子节点
301
+ const handleFlatOpts = () => {
302
+ state.flatOpts.map((optItem: any) => {
303
+ return optItem.map((item: any) => {
304
+ item.childNodes = searchChildNode(item);
305
+ return item;
306
+ });
307
+ });
308
+ };
309
+
310
+ // 初始化赋值 && 处理样式
311
+ const init = () => {
312
+ state.flatOpts = [[...deepcopy(props.options)]];
313
+ if (props.multiple) {
314
+ getMultiSelected(props.modelValue);
315
+ handleFlatOpts();
316
+ handleCheck();
317
+ } else {
318
+ getSelected();
319
+ }
320
+ };
321
+ init();
322
+
323
+ // 选择(多选)
324
+ const multiSelect = (item: any = {}, optIndex: any) => {
325
+ if (item.children?.length > 0) {
326
+ const _opt = optIndex < state.flatOpts.length ? state.flatOpts.slice(0, optIndex + 1) : state.flatOpts;
327
+ state.flatOpts = [..._opt, item.children];
328
+ handleFlatOpts();
329
+ handleCheck();
330
+ }
331
+ };
332
+
333
+ // 复选框选择事件
334
+ const inputChange = (checked: any, item: any = {}, optIndex: any) => {
335
+ const childNodes = searchChildNode(item);
336
+ const labels: any = [];
337
+ const values: any = [];
338
+ childNodes.map((item: any) => {
339
+ labels.push(item.label);
340
+ values.push(item.value);
341
+ });
342
+
343
+ if (checked) {
344
+ const labelList = state.selectd?.label === '' ? [] : state.selectd?.label?.split(' | ');
345
+ const _label = [...new Set([...labelList, ...labels])] || [];
346
+ state.selectd.label = _label?.length > 0 ? _label.join(' | ') : '';
347
+ state.selectd.value = [...new Set([...state.selectd.value, ...values])];
348
+ } else {
349
+ const labelList = state.selectd?.label === '' ? [] : state.selectd.label?.split(' | ');
350
+ const _label =
351
+ labelList?.filter((item: any) => {
352
+ return !labels.includes(item);
353
+ }) || [];
354
+ state.selectd.label = _label.length > 0 ? _label.join(' | ') : '';
355
+ state.selectd.value =
356
+ state.selectd?.value?.filter((item: any) => {
357
+ return !values.includes(item);
358
+ }) || [];
359
+ }
360
+ handleCheck();
361
+ };
362
+
363
+ // 全选
364
+ const checkAllChange = ({ target }: any) => {
365
+ state.checkAll = target.checked;
366
+ if (state.checkAll) {
367
+ const allNodes = getAllChildNode();
368
+ const _value = allNodes.map((n: any) => n.value);
369
+ getMultiSelected(_value);
370
+ handleFlatOpts();
371
+ handleCheck();
372
+ } else {
373
+ state.selectd = {
374
+ label: '',
375
+ value: props.multiple ? [] : ''
376
+ };
377
+ handleCheck(true);
378
+ }
379
+ };
380
+
381
+ // 清空
382
+ const remove = () => {
383
+ state.selectd = {
384
+ label: '',
385
+ value: props.multiple ? [] : ''
386
+ };
387
+ if (props.multiple) {
388
+ handleCheck(true);
389
+ state.checkAll = false;
390
+ } else {
391
+ state.transSelected = {
392
+ label: '',
393
+ value: []
394
+ };
395
+ }
396
+ ifollow.value.cancel();
397
+ };
398
+ // 取消
399
+ const cancel = () => {
400
+ ifollow.value.cancel();
401
+ };
402
+
403
+ watch(
404
+ () => props.options,
405
+ () => {
406
+ init();
407
+ },
408
+ { deep: true }
409
+ );
410
+
411
+ watch(
412
+ () => [props.modelValue, state.selectd.value],
413
+ (n: any, o: any) => {
414
+ if (n[0] !== o[0]) {
415
+ if (props.multiple) {
416
+ getMultiSelected(props.modelValue);
417
+ } else {
418
+ getSelected();
419
+ handleExpand();
420
+ }
421
+ }
422
+ if (n[1] !== o[1]) {
423
+ emit('update:modelValue', state.selectd.value);
424
+ }
425
+ },
426
+ { deep: true }
427
+ );
428
+
429
+ defineExpose({
430
+ select,
431
+ remove,
432
+ cancel
433
+ });
434
+ </script>
435
+ . .
@@ -0,0 +1,124 @@
1
+ <template>
2
+ <div :ui-form="`@a type:select sz:${sz}`" ui-tips="@a co:well" :ui-tips-view="state.show">
3
+ <IFollowView ref="ifollow">
4
+ <Input
5
+ v-bind="{ placeholder, rules, theme, sz, co, block, ready, type, tips, maxlength, minlength, disabled, readonly, clearable, verify, prefix, suffix, interacted }"
6
+ :clearable="false"
7
+ readonly
8
+ v-model="state.value"
9
+ @click="toggle"
10
+ >
11
+ <template #suffix><i ui-form-select=""></i></template>
12
+ </Input>
13
+ <template #tips>
14
+ <DateView v-bind="{ frame, tools, format, picker, holiday, shortcuts, time }" v-model="state.value" @change="state.show = 0" />
15
+ </template>
16
+ </IFollowView>
17
+ </div>
18
+ </template>
19
+ <script setup lang="ts">
20
+ import { reactive, watch, ref } from 'vue';
21
+ import { Input } from '.';
22
+ import { DateView } from '.';
23
+ import { IFollowView } from '../basic';
24
+ const ifollow: any = ref(null);
25
+ // 方法
26
+ const emits: any = defineEmits(['update:modelValue', 'change']);
27
+
28
+ interface TimeProps {
29
+ h: boolean | number;
30
+ m?: boolean | number;
31
+ s?: boolean | number;
32
+ }
33
+ // 类型
34
+ interface Props {
35
+ modelValue?: string | number;
36
+ // 日期组件入参
37
+ frame?: boolean;
38
+ tools?: boolean;
39
+ format?: string;
40
+ picker?: 'date' | 'week' | 'month' | 'quarter';
41
+ holiday?: object;
42
+ shortcuts?: Array<'yesterday' | 'today' | 'tomorrow'>;
43
+ time?: boolean | TimeProps;
44
+
45
+ // 输入组件入参
46
+ placeholder?: string;
47
+ rules?: Array<object>;
48
+ theme?: string;
49
+ sz?: '' | 'xs' | 's' | 'm' | 'l' | 'xl';
50
+ co?: string;
51
+ block?: boolean;
52
+ ready?: boolean;
53
+ type?: string;
54
+ tips?: string;
55
+ maxlength?: null | number;
56
+ minlength?: null | number;
57
+ disabled?: boolean;
58
+ readonly?: boolean;
59
+ clearable?: boolean;
60
+ verify?: boolean;
61
+ prefix?: Array<any>;
62
+ suffix?: Array<any>;
63
+ interacted?: boolean;
64
+ }
65
+ const props: any = withDefaults(defineProps<Props>(), {
66
+ // 值
67
+ modelValue: '',
68
+ // 日期组件入参
69
+ frame: false,
70
+ tools: true,
71
+ format: 'YYYY-M-D',
72
+ picker: 'date',
73
+ holiday: () => ({}),
74
+ shortcuts: () => ['yesterday', 'today', 'tomorrow'],
75
+ // 输入组件入参
76
+ placeholder: '',
77
+ rules: () => [],
78
+ theme: '@a',
79
+ sz: '',
80
+ co: '',
81
+ block: true,
82
+ ready: false,
83
+ type: 'text',
84
+ tips: '',
85
+ maxlength: null,
86
+ minlength: null,
87
+ disabled: false,
88
+ readonly: false,
89
+ clearable: true,
90
+ verify: false,
91
+ prefix: () => [],
92
+ suffix: () => [],
93
+ interacted: false,
94
+ time: false
95
+ });
96
+
97
+ const state: any = reactive({
98
+ // view: 1,
99
+ show: 0,
100
+ value: ''
101
+ });
102
+
103
+ watch(
104
+ () => props.modelValue,
105
+ (value: any) => {
106
+ state.value = value;
107
+ },
108
+ { deep: true, immediate: true }
109
+ );
110
+
111
+ watch(
112
+ () => state.value,
113
+ (value: any) => {
114
+ emits('update:modelValue', value);
115
+ ifollow.value?.hide();
116
+ },
117
+ { deep: true, immediate: true }
118
+ );
119
+
120
+ const toggle = () => {
121
+ state.show = state.show ? 0 : 1;
122
+ };
123
+ </script>
124
+ .. ..