h5-tdsign-for-vue 0.1.0 → 0.1.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.
- package/README.md +155 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +106 -0
- package/dist/index.js +539 -410
- package/dist/index.js.map +1 -1
- package/dist/style.css +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -292,17 +292,171 @@ const formatResponse = (res: any) => ({
|
|
|
292
292
|
/>
|
|
293
293
|
```
|
|
294
294
|
|
|
295
|
+
---
|
|
296
|
+
|
|
297
|
+
### SmartPage 页面容器
|
|
298
|
+
|
|
299
|
+
集成 Navbar 和 TabBar 的页面根组件,提供统一的页面布局方案。
|
|
300
|
+
|
|
301
|
+
```vue
|
|
302
|
+
<template>
|
|
303
|
+
<SmartPage
|
|
304
|
+
title="首页"
|
|
305
|
+
show-back
|
|
306
|
+
show-tab-bar
|
|
307
|
+
v-model:tab-bar-value="activeTab"
|
|
308
|
+
:tabs="tabList"
|
|
309
|
+
@back="handleBack"
|
|
310
|
+
@tab-change="handleTabChange"
|
|
311
|
+
>
|
|
312
|
+
<div class="page-content">
|
|
313
|
+
页面内容
|
|
314
|
+
</div>
|
|
315
|
+
</SmartPage>
|
|
316
|
+
</template>
|
|
317
|
+
|
|
318
|
+
<script setup lang="ts">
|
|
319
|
+
import { ref, h } from 'vue'
|
|
320
|
+
import { Icon as TIcon } from 'tdesign-mobile-vue'
|
|
321
|
+
import type { TabItem } from 'h5-tdsign-for-vue'
|
|
322
|
+
|
|
323
|
+
const activeTab = ref('home')
|
|
324
|
+
|
|
325
|
+
// 创建图标组件 - 支持 TDesign Icon、图片、SVG
|
|
326
|
+
const HomeIcon = () => h(TIcon, { name: 'home' })
|
|
327
|
+
const UserIcon = () => h(TIcon, { name: 'user' })
|
|
328
|
+
|
|
329
|
+
// 使用自定义图片作为图标
|
|
330
|
+
const CustomIcon = () => h('img', { src: '/icons/custom.png', style: { width: '24px' } })
|
|
331
|
+
|
|
332
|
+
const tabList: TabItem[] = [
|
|
333
|
+
{ value: 'home', label: '首页', icon: HomeIcon },
|
|
334
|
+
{ value: 'user', label: '我的', icon: UserIcon, badgeProps: { count: 5 } },
|
|
335
|
+
]
|
|
336
|
+
|
|
337
|
+
const handleBack = () => {
|
|
338
|
+
console.log('返回')
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
const handleTabChange = (value: string | number) => {
|
|
342
|
+
console.log('切换到:', value)
|
|
343
|
+
}
|
|
344
|
+
</script>
|
|
345
|
+
|
|
346
|
+
<style scoped>
|
|
347
|
+
.page-content {
|
|
348
|
+
/* 设置 height: 100% 可以正确撑满内容区域 */
|
|
349
|
+
height: 100%;
|
|
350
|
+
overflow: auto;
|
|
351
|
+
}
|
|
352
|
+
</style>
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
#### Props
|
|
356
|
+
|
|
357
|
+
| 属性 | 说明 | 类型 | 默认值 |
|
|
358
|
+
|------|------|------|--------|
|
|
359
|
+
| `title` | 页面标题 | `string` | - |
|
|
360
|
+
| `showNavbar` | 显示顶部导航栏 | `boolean` | `true` |
|
|
361
|
+
| `showBack` | 显示返回按钮 | `boolean` | `false` |
|
|
362
|
+
| `onBack` | 自定义返回逻辑 | `() => void` | `window.history.back()` |
|
|
363
|
+
| `showTabBar` | 显示底部标签栏 | `boolean` | `false` |
|
|
364
|
+
| `tabs` | 标签栏配置 | `TabItem[]` | `[]` |
|
|
365
|
+
| `tabBarValue` | 当前选中标签(支持 v-model) | `string \| number` | - |
|
|
366
|
+
|
|
367
|
+
#### Navbar 相关属性
|
|
368
|
+
|
|
369
|
+
| 属性 | 说明 | 类型 | 默认值 |
|
|
370
|
+
|------|------|------|--------|
|
|
371
|
+
| `navbarAnimation` | 标题切换动画 | `boolean` | `true` |
|
|
372
|
+
| `navbarFixed` | 固定在顶部 | `boolean` | `true` |
|
|
373
|
+
| `navbarPlaceholder` | 固定时是否占位 | `boolean` | `true` |
|
|
374
|
+
| `navbarSafeAreaInsetTop` | 安全区域适配 | `boolean` | `true` |
|
|
375
|
+
| `navbarZIndex` | 层级 | `number` | - |
|
|
376
|
+
|
|
377
|
+
#### TabBar 相关属性
|
|
378
|
+
|
|
379
|
+
| 属性 | 说明 | 类型 | 默认值 |
|
|
380
|
+
|------|------|------|--------|
|
|
381
|
+
| `tabBarBordered` | 显示边框 | `boolean` | `true` |
|
|
382
|
+
| `tabBarFixed` | 固定在底部 | `boolean` | `true` |
|
|
383
|
+
| `tabBarPlaceholder` | 固定时是否占位 | `boolean` | `true` |
|
|
384
|
+
| `tabBarSafeAreaInsetBottom` | 安全区域适配 | `boolean` | `true` |
|
|
385
|
+
| `tabBarShape` | 形状 | `'round' \| 'normal'` | `'round'` |
|
|
386
|
+
| `tabBarTheme` | 主题 | `'normal' \| 'tag'` | `'normal'` |
|
|
387
|
+
| `tabBarZIndex` | 层级 | `number` | - |
|
|
388
|
+
|
|
389
|
+
#### TabItem 配置
|
|
390
|
+
|
|
391
|
+
| 属性 | 说明 | 类型 | 必填 |
|
|
392
|
+
|------|------|------|------|
|
|
393
|
+
| `value` | 标签值 | `string \| number` | ✅ |
|
|
394
|
+
| `label` | 标签文本 | `string` | - |
|
|
395
|
+
| `icon` | 图标组件 | `Component` | - |
|
|
396
|
+
| `badgeProps` | 徽标配置 | `TdBadgeProps` | - |
|
|
397
|
+
|
|
398
|
+
#### Events
|
|
399
|
+
|
|
400
|
+
| 事件 | 说明 | 参数 |
|
|
401
|
+
|------|------|------|
|
|
402
|
+
| `back` | 点击返回按钮 | - |
|
|
403
|
+
| `tab-change` | 切换标签 | `(value: string \| number)` |
|
|
404
|
+
| `update:tabBarValue` | 标签值变更 | `(value: string \| number)` |
|
|
405
|
+
| `right-click` | 点击导航栏右侧 | - |
|
|
406
|
+
|
|
407
|
+
#### Slots
|
|
408
|
+
|
|
409
|
+
| 插槽 | 说明 |
|
|
410
|
+
|------|------|
|
|
411
|
+
| `default` | 页面内容 |
|
|
412
|
+
| `navbar-left` | 导航栏左侧自定义内容 |
|
|
413
|
+
| `navbar-right` | 导航栏右侧自定义内容 |
|
|
414
|
+
| `navbar-title` | 导航栏标题自定义内容 |
|
|
415
|
+
| `navbar-capsule` | 导航栏胶囊区域 |
|
|
416
|
+
|
|
417
|
+
#### 自定义图标
|
|
418
|
+
|
|
419
|
+
支持多种图标类型:
|
|
420
|
+
|
|
421
|
+
```typescript
|
|
422
|
+
import { h } from 'vue'
|
|
423
|
+
import { Icon as TIcon } from 'tdesign-mobile-vue'
|
|
424
|
+
import CustomSvgIcon from '@/icons/CustomIcon.vue'
|
|
425
|
+
|
|
426
|
+
// 1. TDesign Icon
|
|
427
|
+
const TdIcon = () => h(TIcon, { name: 'home' })
|
|
428
|
+
|
|
429
|
+
// 2. 图片图标
|
|
430
|
+
const ImageIcon = () => h('img', {
|
|
431
|
+
src: '/icons/home.png',
|
|
432
|
+
style: { width: '24px', height: '24px' }
|
|
433
|
+
})
|
|
434
|
+
|
|
435
|
+
// 3. 内联 SVG
|
|
436
|
+
const SvgIcon = () => h('svg', { viewBox: '0 0 24 24' }, [
|
|
437
|
+
h('path', { d: 'M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z', fill: 'currentColor' })
|
|
438
|
+
])
|
|
439
|
+
|
|
440
|
+
// 4. Vue 组件
|
|
441
|
+
const VueIcon = CustomSvgIcon
|
|
442
|
+
```
|
|
443
|
+
|
|
295
444
|
## 📝 类型导出
|
|
296
445
|
|
|
297
446
|
```typescript
|
|
298
447
|
import type {
|
|
448
|
+
// SmartForm 相关
|
|
299
449
|
FormSchema,
|
|
300
450
|
SmartFormProps,
|
|
451
|
+
ComponentType,
|
|
452
|
+
// SmartUpload 相关
|
|
301
453
|
SmartUploadProps,
|
|
302
454
|
SmartUploadFile,
|
|
303
455
|
FileListValue,
|
|
304
456
|
FileListValueType,
|
|
305
|
-
|
|
457
|
+
// SmartPage 相关
|
|
458
|
+
SmartPageProps,
|
|
459
|
+
TabItem,
|
|
306
460
|
} from 'h5-tdsign-for-vue'
|
|
307
461
|
```
|
|
308
462
|
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),m=require("tdesign-mobile-vue");function T(u){const b=e.ref(!1),r=e.computed(()=>{const y=u.modelValue.value;if(y==null||y==="")return"";const h=u.findLabel(u.options.value,y);return h!==null?h:u.displayLabel?.value?u.displayLabel.value:String(y)});return{visible:b,displayValue:r,openPopup:()=>{b.value=!0},closePopup:()=>{b.value=!1}}}const U={class:"smart-select"},$={name:"SmartSelect"},N=e.defineComponent({...$,props:{modelValue:{type:[String,Number,Boolean],default:""},columns:{type:[Array,Function],default:()=>[]},rules:{default:()=>[]},required:{type:Boolean,default:!1},title:{default:""},label:{},placeholder:{default:"请选择"},displayLabel:{},align:{default:"left"},allowInputOverMax:{type:Boolean},autocomplete:{},autofocus:{type:Boolean},borderless:{type:Boolean,default:!0},clearTrigger:{},clearable:{type:Boolean,default:!1},cursorColor:{},disabled:{type:Boolean,default:!1},enterkeyhint:{},extra:{},format:{},layout:{},maxcharacter:{},maxlength:{},name:{},prefixIcon:{},readonly:{type:Boolean,default:!1},spellCheck:{type:Boolean},status:{},suffix:{},suffixIcon:{},tips:{},type:{},onBlur:{},onClear:{},onFocus:{},onValidate:{},cancelBtn:{type:[Boolean,String],default:!0},confirmBtn:{type:[Boolean,String],default:!0},footer:{},header:{},keys:{},option:{},renderLabel:{},swipeDuration:{},onPick:{},attach:{},closeBtn:{type:Boolean},closeOnOverlayClick:{type:Boolean},destroyOnClose:{type:Boolean},duration:{},overlayProps:{},placement:{default:"bottom"},preventScrollThrough:{type:Boolean},showOverlay:{type:Boolean,default:!0},transitionName:{},defaultVisible:{type:Boolean},zIndex:{},onClose:{},onClosed:{},onOpen:{},onOpened:{}},emits:["update:modelValue","change","confirm","cancel"],setup(u,{emit:b}){const r=u,p=b,f=(s,l)=>{let a=[];Array.isArray(s)&&(s.length>0&&Array.isArray(s[0])?a=s.flat():a=s);const t=a.find(o=>o.value===l);return t?t.label:null},{visible:y,displayValue:h,openPopup:g,closePopup:P}=T({modelValue:e.toRef(()=>r.modelValue),options:e.toRef(()=>r.columns),findLabel:(s,l)=>f(s,l),displayLabel:e.toRef(()=>r.displayLabel)}),S=["attach","closeBtn","closeOnOverlayClick","destroyOnClose","duration","overlayProps","placement","preventScrollThrough","showOverlay","transitionName","zIndex"],x=e.computed(()=>{const s={},l=r;return S.forEach(a=>{l[a]!==void 0&&(s[a]=l[a])}),s}),C=["align","autofocus","borderless","clearable","clearTrigger","disabled","label","layout","maxcharacter","maxlength","name","placeholder","prefixIcon","readonly","size","status","suffix","suffixIcon","tips","type"],V=e.computed(()=>{const s={},l=r;return C.forEach(a=>{l[a]!==void 0&&(s[a]=l[a])}),s}),i=(s,l)=>{const a=s[0];a!==void 0&&typeof a!="object"&&p("update:modelValue",a),p("confirm",s,l),P()},v=s=>{p("cancel",s),P()},c=(s,l)=>{p("change",s,l)};return(s,l)=>(e.openBlock(),e.createElementBlock("div",U,[e.createVNode(e.unref(m.Input),e.mergeProps({value:e.unref(h),onClick:e.unref(g)},{...s.$attrs,...V.value},{readonly:"","suffix-icon":()=>e.h(e.unref(m.Icon),{name:"chevron-right"})}),e.createSlots({_:2},[e.renderList(s.$slots,(a,t)=>({name:t,fn:e.withCtx(o=>[e.renderSlot(s.$slots,t,e.normalizeProps(e.guardReactiveProps(o||{})),void 0,!0)])}))]),1040,["value","onClick","suffix-icon"]),e.createVNode(e.unref(m.Popup),e.mergeProps({modelValue:e.unref(y),"onUpdate:modelValue":l[0]||(l[0]=a=>e.isRef(y)?y.value=a:null),placement:"bottom"},x.value),{default:e.withCtx(()=>[e.createVNode(e.unref(m.Picker),{value:[u.modelValue],columns:u.columns,title:u.title,"cancel-btn":u.cancelBtn,"confirm-btn":u.confirmBtn,onConfirm:i,onCancel:v,onChange:c},null,8,["value","columns","title","cancel-btn","confirm-btn"])]),_:1},16,["modelValue"])]))}}),I=(u,b)=>{const r=u.__vccOpts||u;for(const[p,f]of b)r[p]=f;return r},w=I(N,[["__scopeId","data-v-af49dba1"]]),F={class:"smart-time-picker"},M={name:"SmartTimePicker"},z=e.defineComponent({...M,props:{modelValue:{default:""},rules:{default:()=>[]},required:{type:Boolean,default:!1},label:{},placeholder:{default:"请选择时间"},mode:{default:"date"},inputFormat:{},align:{default:"left"},allowInputOverMax:{type:Boolean},autocomplete:{},autofocus:{type:Boolean,default:!1},borderless:{type:Boolean,default:!0},clearTrigger:{default:"always"},clearable:{type:Boolean,default:!1},cursorColor:{default:"#0052d9"},disabled:{type:Boolean,default:!1},enterkeyhint:{},extra:{},layout:{default:"horizontal"},maxcharacter:{},maxlength:{},name:{default:""},prefixIcon:{},readonly:{type:Boolean,default:!1},spellCheck:{type:Boolean},status:{default:"default"},suffix:{},suffixIcon:{},tips:{},type:{default:"text"},onBlur:{},onClear:{},onFocus:{},onValidate:{},cancelBtn:{default:""},confirmBtn:{default:""},end:{},footer:{},format:{default:"YYYY-MM-DD HH:mm:ss"},header:{},renderLabel:{},showWeek:{type:Boolean,default:!1},start:{},steps:{default:()=>({})},title:{default:""},onPick:{},attach:{type:[String,Function],default:"body"},closeBtn:{type:Boolean},closeOnOverlayClick:{type:Boolean,default:!0},destroyOnClose:{type:Boolean},duration:{default:240},overlayProps:{default:()=>({})},placement:{default:"bottom"},preventScrollThrough:{type:Boolean,default:!0},showOverlay:{type:Boolean,default:!0},transitionName:{default:""},defaultVisible:{type:Boolean},zIndex:{},onClose:{},onClosed:{},onOpen:{},onOpened:{}},emits:["update:modelValue","change","confirm","cancel","pick"],setup(u,{emit:b}){const r=u,p=b,f=e.ref(!1),y=["attach","closeBtn","closeOnOverlayClick","destroyOnClose","duration","overlayProps","placement","preventScrollThrough","showOverlay","transitionName","zIndex","onClose","onClosed","onOpen","onOpened"],h=r,g=e.computed(()=>{const s={};return y.forEach(l=>{h[l]!==void 0&&(s[l]=h[l])}),s}),P=e.computed(()=>{const{modelValue:s,title:l,inputFormat:a,...t}=r,o={...t};return y.forEach(d=>{delete o[d]}),["cancelBtn","confirmBtn","end","footer","header","mode","renderLabel","showWeek","start","steps","format"].forEach(d=>delete o[d]),a&&(o.format=a),o}),S=e.computed(()=>{const{label:s,placeholder:l,rules:a,required:t,modelValue:o,...n}=r,d={...n};return y.forEach(B=>{delete d[B]}),d}),x=e.computed(()=>String(r.modelValue||"")),C=()=>{f.value=!0},V=s=>{p("update:modelValue",s),p("confirm",s),f.value=!1},i=s=>{p("cancel",s),f.value=!1},v=s=>{p("change",s)},c=s=>{p("pick",s)};return(s,l)=>(e.openBlock(),e.createElementBlock("div",F,[e.createVNode(e.unref(m.Input),e.mergeProps({value:x.value,onClick:C},{...s.$attrs,...P.value},{readonly:"","suffix-icon":()=>e.h(e.unref(m.Icon),{name:"chevron-right"})}),e.createSlots({_:2},[e.renderList(s.$slots,(a,t)=>({name:t,fn:e.withCtx(o=>[e.renderSlot(s.$slots,t,e.normalizeProps(e.guardReactiveProps(o||{})),void 0,!0)])}))]),1040,["value","suffix-icon"]),e.createVNode(e.unref(m.Popup),e.mergeProps({modelValue:f.value,"onUpdate:modelValue":l[0]||(l[0]=a=>f.value=a),placement:"bottom"},g.value),{default:e.withCtx(()=>[e.createVNode(e.unref(m.DateTimePicker),e.mergeProps({value:u.modelValue},S.value,{onConfirm:V,onCancel:i,onChange:v,onPick:c}),null,16,["value"])]),_:1},16,["modelValue"])]))}}),O=I(z,[["__scopeId","data-v-cf6cd38e"]]),j={class:"smart-cascader"},K={name:"SmartCascader"},q=e.defineComponent({...K,props:{modelValue:{default:""},placeholder:{default:"请选择"},rules:{default:()=>[]},required:{type:Boolean,default:!1},label:{},displayLabel:{},align:{default:"left"},allowInputOverMax:{type:Boolean},autocomplete:{},autofocus:{type:Boolean},borderless:{type:Boolean,default:!0},clearTrigger:{},clearable:{type:Boolean,default:!1},cursorColor:{},disabled:{type:Boolean,default:!1},enterkeyhint:{},extra:{},format:{},layout:{},maxcharacter:{},maxlength:{},name:{},prefixIcon:{},readonly:{type:Boolean,default:!1},spellCheck:{type:Boolean},status:{},suffix:{},suffixIcon:{},tips:{},type:{},onBlur:{},onClear:{},onFocus:{},onValidate:{},checkStrictly:{type:Boolean,default:!1},closeBtn:{type:Boolean},header:{},keys:{},load:{},middleContent:{},options:{default:()=>[]},overlayProps:{},subTitles:{},theme:{default:"step"},title:{default:""},defaultValue:{}},emits:["update:modelValue","change","pick","close"],setup(u,{emit:b}){const r=u,p=b,f=(l,a,t=[])=>{for(const o of l){const n=o.value??o.id,d=o.label??o.name;if(n===a)return[...t,String(d)];if(o.children&&o.children.length>0){const B=f(o.children,a,[...t,String(d)]);if(B)return B}}return null},y=(l,a)=>{const t=f(l,a);return t?t.join(" / "):null},{visible:h,displayValue:g,openPopup:P,closePopup:S}=T({modelValue:e.toRef(()=>r.modelValue),options:e.toRef(()=>r.options||[]),findLabel:y,displayLabel:e.toRef(()=>r.displayLabel)}),x=["align","autofocus","borderless","clearable","clearTrigger","disabled","label","layout","maxcharacter","maxlength","name","placeholder","prefixIcon","readonly","size","status","suffix","suffixIcon","tips","type"],C=e.computed(()=>{const l={},a=r;return x.forEach(t=>{a[t]!==void 0&&(l[t]=a[t])}),l}),V=["checkStrictly","closeBtn","header","keys","load","middleContent","options","overlayProps","subTitles","theme","title"],i=e.computed(()=>{const l={},a=r;return V.forEach(t=>{a[t]!==void 0&&(l[t]=a[t])}),l}),v=(l,a)=>{p("update:modelValue",l),p("change",l,a),S()},c=l=>{p("pick",l.value,l)},s=l=>{p("close",l),S()};return(l,a)=>(e.openBlock(),e.createElementBlock("div",j,[e.createVNode(e.unref(m.Input),e.mergeProps({value:e.unref(g),onClick:e.unref(P)},{...l.$attrs,...C.value},{readonly:"","suffix-icon":()=>e.h(e.unref(m.Icon),{name:"chevron-right"})}),e.createSlots({_:2},[e.renderList(l.$slots,(t,o)=>({name:o,fn:e.withCtx(n=>[e.renderSlot(l.$slots,o,e.normalizeProps(e.guardReactiveProps(n||{})),void 0,!0)])}))]),1040,["value","onClick","suffix-icon"]),e.createVNode(e.unref(m.Cascader),e.mergeProps({visible:e.unref(h),"onUpdate:visible":a[0]||(a[0]=t=>e.isRef(h)?h.value=t:null),value:u.modelValue},i.value,{onChange:v,onPick:c,onClose:s}),null,16,["visible","value"])]))}}),_=I(q,[["__scopeId","data-v-f420c3ed"]]),Y={class:"smart-tree-select"},D={class:"tree-select-wrapper"},W={name:"SmartTreeSelect"},G=e.defineComponent({...W,props:{modelValue:{},options:{default:()=>[]},rules:{default:()=>[]},required:{type:Boolean,default:!1},title:{default:""},label:{},placeholder:{default:"请选择"},align:{default:"left"},allowInputOverMax:{type:Boolean},autocomplete:{},autofocus:{type:Boolean,default:!1},borderless:{type:Boolean,default:!0},clearTrigger:{default:"always"},clearable:{type:Boolean,default:!1},cursorColor:{default:"#0052d9"},disabled:{type:Boolean,default:!1},enterkeyhint:{},extra:{},format:{},layout:{default:"horizontal"},maxcharacter:{},maxlength:{},name:{default:""},prefixIcon:{},readonly:{type:Boolean,default:!1},spellCheck:{type:Boolean},status:{default:"default"},suffix:{},suffixIcon:{},tips:{},type:{default:"text"},onBlur:{},onClear:{},onFocus:{},onValidate:{},customStyle:{default:""},filterable:{type:Boolean,default:!1},height:{default:336},keys:{},multiple:{type:Boolean,default:!1},attach:{type:[String,Function],default:"body"},closeBtn:{type:Boolean},closeOnOverlayClick:{type:Boolean,default:!0},destroyOnClose:{type:Boolean},duration:{default:240},overlayProps:{default:()=>({})},placement:{default:"bottom"},preventScrollThrough:{type:Boolean,default:!0},showOverlay:{type:Boolean,default:!0},transitionName:{default:""},zIndex:{},onClose:{},onClosed:{},onOpen:{},onOpened:{}},emits:["update:modelValue","change","close"],setup(u,{emit:b}){const r=u,p=b,f=e.ref(!1),y=["attach","closeBtn","closeOnOverlayClick","destroyOnClose","duration","overlayProps","placement","preventScrollThrough","showOverlay","transitionName","zIndex","onClose","onClosed","onOpen","onOpened"],h=["customStyle","filterable","height","keys","multiple","options"],g=r,P=e.computed(()=>{const t={};return y.forEach(o=>{g[o]!==void 0&&(t[o]=g[o])}),t}),S=e.computed(()=>{const{modelValue:t,...o}=r,n={...o};return y.forEach(d=>{delete n[d]}),h.forEach(d=>{delete n[d]}),delete n.rules,delete n.required,delete n.title,n}),x=e.computed(()=>{const t={};return h.forEach(o=>{o!=="options"&&g[o]!==void 0&&(t[o]=g[o])}),g.keys!==void 0&&(t.keys=g.keys),t}),C=(t,o)=>{for(const n of t){if(n.value===o)return!n.children||n.children.length===0;if(n.children&&n.children.length>0){const d=C(n.children,o);if(d!==!1)return d}}return!1},V=(t,o,n=[])=>{for(const d of t){if(d.value===o)return[...n,d.value];if(d.children&&d.children.length>0){const B=V(d.children,o,[...n,d.value]);if(B)return B}}return null},i=e.ref([]),v=t=>Array.isArray(t)?t.flatMap(o=>Array.isArray(o)?o:[o]).filter(o=>typeof o=="string"||typeof o=="number"):t==null||t===""?[]:[t];e.watch(()=>r.modelValue,t=>{if(Array.isArray(t))i.value=v(t);else if(t!==void 0&&t!==""&&t!==null){const o=r.options||[],n=V(o,t);i.value=n||[]}else i.value=[]},{immediate:!0}),e.watch(()=>r.options,()=>{const t=r.modelValue;if(!Array.isArray(t)&&t!==void 0&&t!==""&&t!==null){const o=r.options||[],n=V(o,t);i.value=n||[]}},{deep:!0});const c=(t,o)=>{for(const n of t){if(n.value===o)return n.label||String(n.value);if(n.children&&n.children.length>0){const d=c(n.children,o);if(d)return d}}return null},s=e.computed(()=>{const t=r.modelValue;if(!t&&t!==0)return"";const o=r.options||[];if(Array.isArray(t)){const n=t[t.length-1];return n!==void 0?c(o,n)||String(n):""}return c(o,t)||String(t)}),l=()=>{r.disabled||(f.value=!0)},a=(t,o)=>{if(Array.isArray(t)){const n=v(t),d=n[n.length-1];i.value=n;const B=r.options||[];C(B,d)&&(p("update:modelValue",d),p("change",d,o),r.multiple||(f.value=!1))}else i.value=v(t),p("update:modelValue",t),p("change",t,o)};return(t,o)=>(e.openBlock(),e.createElementBlock("div",Y,[e.createVNode(e.unref(m.Input),e.mergeProps({value:s.value,onClick:l},{...t.$attrs,...S.value},{readonly:"","suffix-icon":()=>e.h(e.unref(m.Icon),{name:"chevron-right"})}),e.createSlots({_:2},[e.renderList(t.$slots,(n,d)=>({name:d,fn:e.withCtx(B=>[e.renderSlot(t.$slots,d,e.normalizeProps(e.guardReactiveProps(B||{})),void 0,!0)])}))]),1040,["value","suffix-icon"]),e.createVNode(e.unref(m.Popup),e.mergeProps({modelValue:f.value,"onUpdate:modelValue":o[0]||(o[0]=n=>f.value=n),placement:"bottom"},P.value),{default:e.withCtx(()=>[e.createElementVNode("div",D,[f.value?(e.openBlock(),e.createBlock(e.unref(m.TreeSelect),e.mergeProps({key:0,value:i.value,options:u.options},x.value,{onChange:a}),null,16,["value","options"])):e.createCommentVNode("",!0)])]),_:1},16,["modelValue"])]))}}),R=I(G,[["__scopeId","data-v-4d44f50a"]]),H={class:"smart-upload"},J={name:"SmartUpload"},Z=e.defineComponent({...J,props:{modelValue:{default:""},valueType:{},separator:{default:","},urlPrefix:{default:""},urlKey:{default:"fileUrl"},nameKey:{default:"filename"},mode:{default:"image"},accept:{default:"image/*"},action:{},max:{default:9},maxSize:{default:10*1024},multiple:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1},requestMethod:{},formatResponse:{}},emits:["update:modelValue","success","fail","remove"],setup(u,{emit:b}){const r=u,p=b,f=e.ref([]),y=e.computed(()=>Array.isArray(r.accept)?r.accept.join(","):r.accept),h=e.computed(()=>{if(r.valueType)return r.valueType;const l=r.modelValue;return typeof l=="string"?"string":Array.isArray(l)?l.length===0?"stringArray":typeof l[0]=="object"&&l[0]!==null?"objectArray":"stringArray":"string"}),g=l=>/^(https?:|blob:|data:)/i.test(l),P=l=>{if(typeof l=="string")return l;const a=l[r.urlKey];return typeof a=="string"?a:""},S=(l,a)=>{if(typeof l=="object"&&l[r.nameKey]){const t=l[r.nameKey];return typeof t=="string"?t:String(t)}return a.split("/").pop()||""},x=l=>!r.urlPrefix||!l?l:l.startsWith(r.urlPrefix)?l.slice(r.urlPrefix.length):l,C=l=>{if(!l)return[];let a=[];return typeof l=="string"?a=l.split(r.separator).filter(Boolean):a=l.filter(Boolean),a.map((t,o)=>{const n=P(t);if(!n)return null;const B={url:g(n)?n:r.urlPrefix+n,name:S(t,n),status:"success",originalPath:n};return typeof t=="object"&&(B.__rawResult__=t),B}).filter(Boolean)};e.watch(()=>r.modelValue,l=>{const a=C(l),t=f.value.filter(n=>n.status==="success").map(n=>n.originalPath||n.url),o=a.map(n=>n.originalPath||n.url);if(JSON.stringify(t)!==JSON.stringify(o)){const n=f.value.filter(d=>d.status!=="success");f.value=[...a,...n]}},{immediate:!0});const V=()=>{const l=f.value.filter(t=>t.status==="success");let a;switch(h.value){case"string":a=l.map(t=>x(t.originalPath||t.url||"")).filter(Boolean).join(r.separator);break;case"objectArray":a=l.map(t=>{if(t.__rawResult__&&typeof t.__rawResult__=="object"){const n=t.__rawResult__[r.urlKey];return{...t.__rawResult__,[r.urlKey]:x(typeof n=="string"?n:t.originalPath||t.url||"")}}const o={[r.urlKey]:x(t.originalPath||t.url||"")};return r.nameKey&&(o[r.nameKey]=t.name),o});break;default:a=l.map(t=>x(t.originalPath||t.url||"")).filter(Boolean);break}p("update:modelValue",a)},i=l=>{const{file:a,response:t}=l;if(console.log("[SmartUpload] onSuccess",{file:a,response:t}),a){let o="";if(r.formatResponse)o=r.formatResponse(t);else if(t&&typeof t=="object"){const n=Array.isArray(t)?t[0]:t;n&&"url"in n&&(o=n.url)}if(console.log("[SmartUpload] uploadResult:",o),o){const n=typeof o=="object";let d="",B;if(n){const k=o[r.urlKey];d=typeof k=="string"?k:"",B=o}else d=o;const E=g(d)?d:r.urlPrefix+d;e.nextTick(()=>{const k=f.value.findIndex(L=>L.name===a.name);console.log("[SmartUpload] fileIndex:",k),k>=0&&(f.value[k]={...f.value[k],status:"success",url:E,originalPath:d,__rawResult__:B}),V()})}}p("success",l)},v=l=>{const{file:a}=l;if(a){const t=f.value.findIndex(o=>o.name===a.name);t>=0&&f.value.splice(t,1)}m.Message.error("上传失败,请重试"),p("fail",l)},c=l=>{const{index:a=0,file:t}=l;p("remove",t,a),e.nextTick(()=>{V()})},s=l=>{const{type:a,files:t}=l;switch(console.log("[SmartUpload] onValidate",{type:a,files:t}),a){case"FILTER_FILE_SAME_NAME":m.Message.info("请勿上传重复的文件");break;case"FILE_OVER_SIZE_LIMIT":m.Message.error(`文件大小超过限制(最大 ${Math.round(r.maxSize/1024)}MB)`);break;case"FILES_OVER_LENGTH_LIMIT":m.Message.info(`最多只能上传 ${r.max} 个文件`);break}};return(l,a)=>(e.openBlock(),e.createElementBlock("div",H,[u.mode==="image"?(e.openBlock(),e.createBlock(e.unref(m.Upload),{key:0,modelValue:f.value,"onUpdate:modelValue":a[0]||(a[0]=t=>f.value=t),action:u.action,accept:y.value,max:u.max,"size-limit":{size:u.maxSize,unit:"KB"},multiple:u.multiple,disabled:u.disabled,"request-method":u.requestMethod,onSuccess:i,onFail:v,onRemove:c,onValidate:s},null,8,["modelValue","action","accept","max","size-limit","multiple","disabled","request-method"])):(e.openBlock(),e.createBlock(e.unref(m.Upload),{key:1,modelValue:f.value,"onUpdate:modelValue":a[1]||(a[1]=t=>f.value=t),action:u.action,accept:y.value,max:u.max,"size-limit":{size:u.maxSize,unit:"KB"},multiple:u.multiple,disabled:u.disabled,"request-method":u.requestMethod,onSuccess:i,onFail:v,onRemove:c,onValidate:s},null,8,["modelValue","action","accept","max","size-limit","multiple","disabled","request-method"]))]))}}),A=I(Z,[["__scopeId","data-v-a3054ef0"]]),Q={class:"smart-form"},X={key:0,class:"smart-form-footer"},ee={name:"SmartForm"},te=e.defineComponent({...ee,props:{modelValue:{},schemas:{},labelWidth:{default:"80px"},labelAlign:{default:"left"},showFooter:{type:Boolean,default:!0},submitBtnText:{default:"提交"},resetBtnText:{default:"重置"},loading:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},componentMap:{}},emits:["update:modelValue","submit","reset","validate-failed"],setup(u,{expose:b,emit:r}){const p=u,f=r,y=e.ref(),h={input:m.Input,password:m.Input,number:m.Input,textarea:m.Textarea,select:w,cascader:_,"tree-select":R,date:O,time:O,switch:m.Switch,radio:m.RadioGroup,checkbox:m.CheckboxGroup,stepper:m.Stepper,upload:A},g=i=>{const v=i||"input";return p.componentMap?.[v]?p.componentMap[v]:h[v]??null},P=i=>{const v=[];return i.required&&v.push({required:!0,message:`${i.label||"该项"}不能为空`}),i.rules&&v.push(...i.rules),v},S=i=>{const v=p.modelValue;let c={};typeof i.props=="function"?c=i.props(v):i.props&&(c={...i.props});const s=i.type||"input";if(s==="password"?Object.assign(c,{type:"password"}):s==="number"?Object.assign(c,{type:"number"}):s==="date"?Object.assign(c,{mode:"date"}):s==="time"&&Object.assign(c,{mode:["hour","minute"]}),["input","password","number","textarea"].includes(s)&&(!(typeof i.props=="object"&&i.props!==null&&Object.prototype.hasOwnProperty.call(i.props,"borderless"))&&c.borderless===void 0&&(c.borderless=!0),c.type==="file"&&(console.warn(`[SmartForm] Detected type="file" on Input component (field: ${i.name}). Please use type: "upload" in your schema instead.`),delete c.type)),p.disabled)Object.assign(c,{disabled:!0});else if(i.disabled){const l=typeof i.disabled=="function"?i.disabled(v):i.disabled;Object.assign(c,{disabled:l})}return c},x=i=>i.hidden===void 0?!0:typeof i.hidden=="function"?!i.hidden(p.modelValue):!i.hidden,C=i=>{i.validateResult===!0?f("submit",e.toRaw(p.modelValue)):f("validate-failed",i.validateResult)},V=()=>{y.value?.reset(),f("reset")};return b({validate:()=>y.value?.validate(),reset:()=>y.value?.reset(),clearValidate:()=>y.value?.clearValidate()}),(i,v)=>(e.openBlock(),e.createElementBlock("div",Q,[e.createVNode(e.unref(m.Form),{ref_key:"formRef",ref:y,data:u.modelValue,"label-width":u.labelWidth,"label-align":u.labelAlign,onSubmit:C},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.schemas,c=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:c.name},[x(c)?(e.openBlock(),e.createBlock(e.unref(m.FormItem),{key:0,name:c.name,label:c.label,rules:P(c),help:c.help},{default:e.withCtx(()=>[c.type==="slot"&&c.slot?e.renderSlot(i.$slots,c.slot,{key:0,model:u.modelValue,schema:c},void 0,!0):(e.openBlock(),e.createBlock(e.resolveDynamicComponent(g(c.type)),e.mergeProps({key:1,modelValue:u.modelValue[c.name],"onUpdate:modelValue":s=>u.modelValue[c.name]=s},{ref_for:!0},S(c)),null,16,["modelValue","onUpdate:modelValue"]))]),_:2},1032,["name","label","rules","help"])):e.createCommentVNode("",!0)],64))),128)),u.showFooter?(e.openBlock(),e.createElementBlock("div",X,[e.createVNode(e.unref(m.Button),{theme:"primary",type:"submit",block:"",loading:u.loading,disabled:u.disabled},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(u.submitBtnText),1)]),_:1},8,["loading","disabled"]),u.resetBtnText?(e.openBlock(),e.createBlock(e.unref(m.Button),{key:0,theme:"default",variant:"outline",block:"",class:"reset-btn",onClick:V,disabled:u.disabled||u.loading},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(u.resetBtnText),1)]),_:1},8,["disabled"])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)]),_:3},8,["data","label-width","label-align"])]))}}),le=I(te,[["__scopeId","data-v-88de1754"]]);exports.SmartCascader=_;exports.SmartForm=le;exports.SmartSelect=w;exports.SmartTimePicker=O;exports.SmartTreeSelect=R;exports.SmartUpload=A;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),m=require("tdesign-mobile-vue");function O(l){const g=e.ref(!1),s=e.computed(()=>{const b=l.modelValue.value;if(b==null||b==="")return"";const y=l.findLabel(l.options.value,b);return y!==null?y:l.displayLabel?.value?l.displayLabel.value:String(b)});return{visible:g,displayValue:s,openPopup:()=>{g.value=!0},closePopup:()=>{g.value=!1}}}const N={class:"smart-select"},F={name:"SmartSelect"},U=e.defineComponent({...F,props:{modelValue:{type:[String,Number,Boolean],default:""},columns:{type:[Array,Function],default:()=>[]},rules:{default:()=>[]},required:{type:Boolean,default:!1},title:{default:""},label:{},placeholder:{default:"请选择"},displayLabel:{},align:{default:"left"},allowInputOverMax:{type:Boolean},autocomplete:{},autofocus:{type:Boolean},borderless:{type:Boolean,default:!0},clearTrigger:{},clearable:{type:Boolean,default:!1},cursorColor:{},disabled:{type:Boolean,default:!1},enterkeyhint:{},extra:{},format:{},layout:{},maxcharacter:{},maxlength:{},name:{},prefixIcon:{},readonly:{type:Boolean,default:!1},spellCheck:{type:Boolean},status:{},suffix:{},suffixIcon:{},tips:{},type:{},onBlur:{},onClear:{},onFocus:{},onValidate:{},cancelBtn:{type:[Boolean,String],default:!0},confirmBtn:{type:[Boolean,String],default:!0},footer:{},header:{},keys:{},option:{},renderLabel:{},swipeDuration:{},onPick:{},attach:{},closeBtn:{type:Boolean},closeOnOverlayClick:{type:Boolean},destroyOnClose:{type:Boolean},duration:{},overlayProps:{},placement:{default:"bottom"},preventScrollThrough:{type:Boolean},showOverlay:{type:Boolean,default:!0},transitionName:{},defaultVisible:{type:Boolean},zIndex:{},onClose:{},onClosed:{},onOpen:{},onOpened:{}},emits:["update:modelValue","change","confirm","cancel"],setup(l,{emit:g}){const s=l,f=g,p=(u,a)=>{let n=[];Array.isArray(u)&&(u.length>0&&Array.isArray(u[0])?n=u.flat():n=u);const t=n.find(o=>o.value===a);return t?t.label:null},{visible:b,displayValue:y,openPopup:h,closePopup:B}=O({modelValue:e.toRef(()=>s.modelValue),options:e.toRef(()=>s.columns),findLabel:(u,a)=>p(u,a),displayLabel:e.toRef(()=>s.displayLabel)}),V=["attach","closeBtn","closeOnOverlayClick","destroyOnClose","duration","overlayProps","placement","preventScrollThrough","showOverlay","transitionName","zIndex"],x=e.computed(()=>{const u={},a=s;return V.forEach(n=>{a[n]!==void 0&&(u[n]=a[n])}),u}),S=["align","autofocus","borderless","clearable","clearTrigger","disabled","label","layout","maxcharacter","maxlength","name","placeholder","prefixIcon","readonly","size","status","suffix","suffixIcon","tips","type"],C=e.computed(()=>{const u={},a=s;return S.forEach(n=>{a[n]!==void 0&&(u[n]=a[n])}),u}),i=(u,a)=>{const n=u[0];n!==void 0&&typeof n!="object"&&f("update:modelValue",n),f("confirm",u,a),B()},v=u=>{f("cancel",u),B()},c=(u,a)=>{f("change",u,a)};return(u,a)=>(e.openBlock(),e.createElementBlock("div",N,[e.createVNode(e.unref(m.Input),e.mergeProps({value:e.unref(y),onClick:e.unref(h)},{...u.$attrs,...C.value},{readonly:"","suffix-icon":()=>e.h(e.unref(m.Icon),{name:"chevron-right"})}),e.createSlots({_:2},[e.renderList(u.$slots,(n,t)=>({name:t,fn:e.withCtx(o=>[e.renderSlot(u.$slots,t,e.normalizeProps(e.guardReactiveProps(o||{})),void 0,!0)])}))]),1040,["value","onClick","suffix-icon"]),e.createVNode(e.unref(m.Popup),e.mergeProps({modelValue:e.unref(b),"onUpdate:modelValue":a[0]||(a[0]=n=>e.isRef(b)?b.value=n:null),placement:"bottom"},x.value),{default:e.withCtx(()=>[e.createVNode(e.unref(m.Picker),{value:[l.modelValue],columns:l.columns,title:l.title,"cancel-btn":l.cancelBtn,"confirm-btn":l.confirmBtn,onConfirm:i,onCancel:v,onChange:c},null,8,["value","columns","title","cancel-btn","confirm-btn"])]),_:1},16,["modelValue"])]))}}),I=(l,g)=>{const s=l.__vccOpts||l;for(const[f,p]of g)s[f]=p;return s},E=I(U,[["__scopeId","data-v-af49dba1"]]),z={class:"smart-time-picker"},M={name:"SmartTimePicker"},j=e.defineComponent({...M,props:{modelValue:{default:""},rules:{default:()=>[]},required:{type:Boolean,default:!1},label:{},placeholder:{default:"请选择时间"},mode:{default:"date"},inputFormat:{},align:{default:"left"},allowInputOverMax:{type:Boolean},autocomplete:{},autofocus:{type:Boolean,default:!1},borderless:{type:Boolean,default:!0},clearTrigger:{default:"always"},clearable:{type:Boolean,default:!1},cursorColor:{default:"#0052d9"},disabled:{type:Boolean,default:!1},enterkeyhint:{},extra:{},layout:{default:"horizontal"},maxcharacter:{},maxlength:{},name:{default:""},prefixIcon:{},readonly:{type:Boolean,default:!1},spellCheck:{type:Boolean},status:{default:"default"},suffix:{},suffixIcon:{},tips:{},type:{default:"text"},onBlur:{},onClear:{},onFocus:{},onValidate:{},cancelBtn:{default:""},confirmBtn:{default:""},end:{},footer:{},format:{default:"YYYY-MM-DD HH:mm:ss"},header:{},renderLabel:{},showWeek:{type:Boolean,default:!1},start:{},steps:{default:()=>({})},title:{default:""},onPick:{},attach:{type:[String,Function],default:"body"},closeBtn:{type:Boolean},closeOnOverlayClick:{type:Boolean,default:!0},destroyOnClose:{type:Boolean},duration:{default:240},overlayProps:{default:()=>({})},placement:{default:"bottom"},preventScrollThrough:{type:Boolean,default:!0},showOverlay:{type:Boolean,default:!0},transitionName:{default:""},defaultVisible:{type:Boolean},zIndex:{},onClose:{},onClosed:{},onOpen:{},onOpened:{}},emits:["update:modelValue","change","confirm","cancel","pick"],setup(l,{emit:g}){const s=l,f=g,p=e.ref(!1),b=["attach","closeBtn","closeOnOverlayClick","destroyOnClose","duration","overlayProps","placement","preventScrollThrough","showOverlay","transitionName","zIndex","onClose","onClosed","onOpen","onOpened"],y=s,h=e.computed(()=>{const u={};return b.forEach(a=>{y[a]!==void 0&&(u[a]=y[a])}),u}),B=e.computed(()=>{const{modelValue:u,title:a,inputFormat:n,...t}=s,o={...t};return b.forEach(d=>{delete o[d]}),["cancelBtn","confirmBtn","end","footer","header","mode","renderLabel","showWeek","start","steps","format"].forEach(d=>delete o[d]),n&&(o.format=n),o}),V=e.computed(()=>{const{label:u,placeholder:a,rules:n,required:t,modelValue:o,...r}=s,d={...r};return b.forEach(k=>{delete d[k]}),d}),x=e.computed(()=>String(s.modelValue||"")),S=()=>{p.value=!0},C=u=>{f("update:modelValue",u),f("confirm",u),p.value=!1},i=u=>{f("cancel",u),p.value=!1},v=u=>{f("change",u)},c=u=>{f("pick",u)};return(u,a)=>(e.openBlock(),e.createElementBlock("div",z,[e.createVNode(e.unref(m.Input),e.mergeProps({value:x.value,onClick:S},{...u.$attrs,...B.value},{readonly:"","suffix-icon":()=>e.h(e.unref(m.Icon),{name:"chevron-right"})}),e.createSlots({_:2},[e.renderList(u.$slots,(n,t)=>({name:t,fn:e.withCtx(o=>[e.renderSlot(u.$slots,t,e.normalizeProps(e.guardReactiveProps(o||{})),void 0,!0)])}))]),1040,["value","suffix-icon"]),e.createVNode(e.unref(m.Popup),e.mergeProps({modelValue:p.value,"onUpdate:modelValue":a[0]||(a[0]=n=>p.value=n),placement:"bottom"},h.value),{default:e.withCtx(()=>[e.createVNode(e.unref(m.DateTimePicker),e.mergeProps({value:l.modelValue},V.value,{onConfirm:C,onCancel:i,onChange:v,onPick:c}),null,16,["value"])]),_:1},16,["modelValue"])]))}}),w=I(j,[["__scopeId","data-v-cf6cd38e"]]),K={class:"smart-cascader"},q={name:"SmartCascader"},D=e.defineComponent({...q,props:{modelValue:{default:""},placeholder:{default:"请选择"},rules:{default:()=>[]},required:{type:Boolean,default:!1},label:{},displayLabel:{},align:{default:"left"},allowInputOverMax:{type:Boolean},autocomplete:{},autofocus:{type:Boolean},borderless:{type:Boolean,default:!0},clearTrigger:{},clearable:{type:Boolean,default:!1},cursorColor:{},disabled:{type:Boolean,default:!1},enterkeyhint:{},extra:{},format:{},layout:{},maxcharacter:{},maxlength:{},name:{},prefixIcon:{},readonly:{type:Boolean,default:!1},spellCheck:{type:Boolean},status:{},suffix:{},suffixIcon:{},tips:{},type:{},onBlur:{},onClear:{},onFocus:{},onValidate:{},checkStrictly:{type:Boolean,default:!1},closeBtn:{type:Boolean},header:{},keys:{},load:{},middleContent:{},options:{default:()=>[]},overlayProps:{},subTitles:{},theme:{default:"step"},title:{default:""},defaultValue:{}},emits:["update:modelValue","change","pick","close"],setup(l,{emit:g}){const s=l,f=g,p=(a,n,t=[])=>{for(const o of a){const r=o.value??o.id,d=o.label??o.name;if(r===n)return[...t,String(d)];if(o.children&&o.children.length>0){const k=p(o.children,n,[...t,String(d)]);if(k)return k}}return null},b=(a,n)=>{const t=p(a,n);return t?t.join(" / "):null},{visible:y,displayValue:h,openPopup:B,closePopup:V}=O({modelValue:e.toRef(()=>s.modelValue),options:e.toRef(()=>s.options||[]),findLabel:b,displayLabel:e.toRef(()=>s.displayLabel)}),x=["align","autofocus","borderless","clearable","clearTrigger","disabled","label","layout","maxcharacter","maxlength","name","placeholder","prefixIcon","readonly","size","status","suffix","suffixIcon","tips","type"],S=e.computed(()=>{const a={},n=s;return x.forEach(t=>{n[t]!==void 0&&(a[t]=n[t])}),a}),C=["checkStrictly","closeBtn","header","keys","load","middleContent","options","overlayProps","subTitles","theme","title"],i=e.computed(()=>{const a={},n=s;return C.forEach(t=>{n[t]!==void 0&&(a[t]=n[t])}),a}),v=(a,n)=>{f("update:modelValue",a),f("change",a,n),V()},c=a=>{f("pick",a.value,a)},u=a=>{f("close",a),V()};return(a,n)=>(e.openBlock(),e.createElementBlock("div",K,[e.createVNode(e.unref(m.Input),e.mergeProps({value:e.unref(h),onClick:e.unref(B)},{...a.$attrs,...S.value},{readonly:"","suffix-icon":()=>e.h(e.unref(m.Icon),{name:"chevron-right"})}),e.createSlots({_:2},[e.renderList(a.$slots,(t,o)=>({name:o,fn:e.withCtx(r=>[e.renderSlot(a.$slots,o,e.normalizeProps(e.guardReactiveProps(r||{})),void 0,!0)])}))]),1040,["value","onClick","suffix-icon"]),e.createVNode(e.unref(m.Cascader),e.mergeProps({visible:e.unref(y),"onUpdate:visible":n[0]||(n[0]=t=>e.isRef(y)?y.value=t:null),value:l.modelValue},i.value,{onChange:v,onPick:c,onClose:u}),null,16,["visible","value"])]))}}),$=I(D,[["__scopeId","data-v-f420c3ed"]]),Y={class:"smart-tree-select"},W={class:"tree-select-wrapper"},Z={name:"SmartTreeSelect"},G=e.defineComponent({...Z,props:{modelValue:{},options:{default:()=>[]},rules:{default:()=>[]},required:{type:Boolean,default:!1},title:{default:""},label:{},placeholder:{default:"请选择"},align:{default:"left"},allowInputOverMax:{type:Boolean},autocomplete:{},autofocus:{type:Boolean,default:!1},borderless:{type:Boolean,default:!0},clearTrigger:{default:"always"},clearable:{type:Boolean,default:!1},cursorColor:{default:"#0052d9"},disabled:{type:Boolean,default:!1},enterkeyhint:{},extra:{},format:{},layout:{default:"horizontal"},maxcharacter:{},maxlength:{},name:{default:""},prefixIcon:{},readonly:{type:Boolean,default:!1},spellCheck:{type:Boolean},status:{default:"default"},suffix:{},suffixIcon:{},tips:{},type:{default:"text"},onBlur:{},onClear:{},onFocus:{},onValidate:{},customStyle:{default:""},filterable:{type:Boolean,default:!1},height:{default:336},keys:{},multiple:{type:Boolean,default:!1},attach:{type:[String,Function],default:"body"},closeBtn:{type:Boolean},closeOnOverlayClick:{type:Boolean,default:!0},destroyOnClose:{type:Boolean},duration:{default:240},overlayProps:{default:()=>({})},placement:{default:"bottom"},preventScrollThrough:{type:Boolean,default:!0},showOverlay:{type:Boolean,default:!0},transitionName:{default:""},zIndex:{},onClose:{},onClosed:{},onOpen:{},onOpened:{}},emits:["update:modelValue","change","close"],setup(l,{emit:g}){const s=l,f=g,p=e.ref(!1),b=["attach","closeBtn","closeOnOverlayClick","destroyOnClose","duration","overlayProps","placement","preventScrollThrough","showOverlay","transitionName","zIndex","onClose","onClosed","onOpen","onOpened"],y=["customStyle","filterable","height","keys","multiple","options"],h=s,B=e.computed(()=>{const t={};return b.forEach(o=>{h[o]!==void 0&&(t[o]=h[o])}),t}),V=e.computed(()=>{const{modelValue:t,...o}=s,r={...o};return b.forEach(d=>{delete r[d]}),y.forEach(d=>{delete r[d]}),delete r.rules,delete r.required,delete r.title,r}),x=e.computed(()=>{const t={};return y.forEach(o=>{o!=="options"&&h[o]!==void 0&&(t[o]=h[o])}),h.keys!==void 0&&(t.keys=h.keys),t}),S=(t,o)=>{for(const r of t){if(r.value===o)return!r.children||r.children.length===0;if(r.children&&r.children.length>0){const d=S(r.children,o);if(d!==!1)return d}}return!1},C=(t,o,r=[])=>{for(const d of t){if(d.value===o)return[...r,d.value];if(d.children&&d.children.length>0){const k=C(d.children,o,[...r,d.value]);if(k)return k}}return null},i=e.ref([]),v=t=>Array.isArray(t)?t.flatMap(o=>Array.isArray(o)?o:[o]).filter(o=>typeof o=="string"||typeof o=="number"):t==null||t===""?[]:[t];e.watch(()=>s.modelValue,t=>{if(Array.isArray(t))i.value=v(t);else if(t!==void 0&&t!==""&&t!==null){const o=s.options||[],r=C(o,t);i.value=r||[]}else i.value=[]},{immediate:!0}),e.watch(()=>s.options,()=>{const t=s.modelValue;if(!Array.isArray(t)&&t!==void 0&&t!==""&&t!==null){const o=s.options||[],r=C(o,t);i.value=r||[]}},{deep:!0});const c=(t,o)=>{for(const r of t){if(r.value===o)return r.label||String(r.value);if(r.children&&r.children.length>0){const d=c(r.children,o);if(d)return d}}return null},u=e.computed(()=>{const t=s.modelValue;if(!t&&t!==0)return"";const o=s.options||[];if(Array.isArray(t)){const r=t[t.length-1];return r!==void 0?c(o,r)||String(r):""}return c(o,t)||String(t)}),a=()=>{s.disabled||(p.value=!0)},n=(t,o)=>{if(Array.isArray(t)){const r=v(t),d=r[r.length-1];i.value=r;const k=s.options||[];S(k,d)&&(f("update:modelValue",d),f("change",d,o),s.multiple||(p.value=!1))}else i.value=v(t),f("update:modelValue",t),f("change",t,o)};return(t,o)=>(e.openBlock(),e.createElementBlock("div",Y,[e.createVNode(e.unref(m.Input),e.mergeProps({value:u.value,onClick:a},{...t.$attrs,...V.value},{readonly:"","suffix-icon":()=>e.h(e.unref(m.Icon),{name:"chevron-right"})}),e.createSlots({_:2},[e.renderList(t.$slots,(r,d)=>({name:d,fn:e.withCtx(k=>[e.renderSlot(t.$slots,d,e.normalizeProps(e.guardReactiveProps(k||{})),void 0,!0)])}))]),1040,["value","suffix-icon"]),e.createVNode(e.unref(m.Popup),e.mergeProps({modelValue:p.value,"onUpdate:modelValue":o[0]||(o[0]=r=>p.value=r),placement:"bottom"},B.value),{default:e.withCtx(()=>[e.createElementVNode("div",W,[p.value?(e.openBlock(),e.createBlock(e.unref(m.TreeSelect),e.mergeProps({key:0,value:i.value,options:l.options},x.value,{onChange:n}),null,16,["value","options"])):e.createCommentVNode("",!0)])]),_:1},16,["modelValue"])]))}}),A=I(G,[["__scopeId","data-v-4d44f50a"]]),H={class:"smart-upload"},J={name:"SmartUpload"},Q=e.defineComponent({...J,props:{modelValue:{default:""},valueType:{},separator:{default:","},urlPrefix:{default:""},urlKey:{default:"fileUrl"},nameKey:{default:"filename"},mode:{default:"image"},accept:{default:"image/*"},action:{},max:{default:9},maxSize:{default:10*1024},multiple:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1},requestMethod:{},formatResponse:{}},emits:["update:modelValue","success","fail","remove"],setup(l,{emit:g}){const s=l,f=g,p=e.ref([]),b=e.computed(()=>Array.isArray(s.accept)?s.accept.join(","):s.accept),y=e.computed(()=>{if(s.valueType)return s.valueType;const a=s.modelValue;return typeof a=="string"?"string":Array.isArray(a)?a.length===0?"stringArray":typeof a[0]=="object"&&a[0]!==null?"objectArray":"stringArray":"string"}),h=a=>/^(https?:|blob:|data:)/i.test(a),B=a=>{if(typeof a=="string")return a;const n=a[s.urlKey];return typeof n=="string"?n:""},V=(a,n)=>{if(typeof a=="object"&&a[s.nameKey]){const t=a[s.nameKey];return typeof t=="string"?t:String(t)}return n.split("/").pop()||""},x=a=>!s.urlPrefix||!a?a:a.startsWith(s.urlPrefix)?a.slice(s.urlPrefix.length):a,S=a=>{if(!a)return[];let n=[];return typeof a=="string"?n=a.split(s.separator).filter(Boolean):n=a.filter(Boolean),n.map((t,o)=>{const r=B(t);if(!r)return null;const k={url:h(r)?r:s.urlPrefix+r,name:V(t,r),status:"success",originalPath:r};return typeof t=="object"&&(k.__rawResult__=t),k}).filter(Boolean)};e.watch(()=>s.modelValue,a=>{const n=S(a),t=p.value.filter(r=>r.status==="success").map(r=>r.originalPath||r.url),o=n.map(r=>r.originalPath||r.url);if(JSON.stringify(t)!==JSON.stringify(o)){const r=p.value.filter(d=>d.status!=="success");p.value=[...n,...r]}},{immediate:!0});const C=()=>{const a=p.value.filter(t=>t.status==="success");let n;switch(y.value){case"string":n=a.map(t=>x(t.originalPath||t.url||"")).filter(Boolean).join(s.separator);break;case"objectArray":n=a.map(t=>{if(t.__rawResult__&&typeof t.__rawResult__=="object"){const r=t.__rawResult__[s.urlKey];return{...t.__rawResult__,[s.urlKey]:x(typeof r=="string"?r:t.originalPath||t.url||"")}}const o={[s.urlKey]:x(t.originalPath||t.url||"")};return s.nameKey&&(o[s.nameKey]=t.name),o});break;default:n=a.map(t=>x(t.originalPath||t.url||"")).filter(Boolean);break}f("update:modelValue",n)},i=a=>{const{file:n,response:t}=a;if(console.log("[SmartUpload] onSuccess",{file:n,response:t}),n){let o="";if(s.formatResponse)o=s.formatResponse(t);else if(t&&typeof t=="object"){const r=Array.isArray(t)?t[0]:t;r&&"url"in r&&(o=r.url)}if(console.log("[SmartUpload] uploadResult:",o),o){const r=typeof o=="object";let d="",k;if(r){const P=o[s.urlKey];d=typeof P=="string"?P:"",k=o}else d=o;const T=h(d)?d:s.urlPrefix+d;e.nextTick(()=>{const P=p.value.findIndex(L=>L.name===n.name);console.log("[SmartUpload] fileIndex:",P),P>=0&&(p.value[P]={...p.value[P],status:"success",url:T,originalPath:d,__rawResult__:k}),C()})}}f("success",a)},v=a=>{const{file:n}=a;if(n){const t=p.value.findIndex(o=>o.name===n.name);t>=0&&p.value.splice(t,1)}m.Message.error("上传失败,请重试"),f("fail",a)},c=a=>{const{index:n=0,file:t}=a;f("remove",t,n),e.nextTick(()=>{C()})},u=a=>{const{type:n,files:t}=a;switch(console.log("[SmartUpload] onValidate",{type:n,files:t}),n){case"FILTER_FILE_SAME_NAME":m.Message.info("请勿上传重复的文件");break;case"FILE_OVER_SIZE_LIMIT":m.Message.error(`文件大小超过限制(最大 ${Math.round(s.maxSize/1024)}MB)`);break;case"FILES_OVER_LENGTH_LIMIT":m.Message.info(`最多只能上传 ${s.max} 个文件`);break}};return(a,n)=>(e.openBlock(),e.createElementBlock("div",H,[l.mode==="image"?(e.openBlock(),e.createBlock(e.unref(m.Upload),{key:0,modelValue:p.value,"onUpdate:modelValue":n[0]||(n[0]=t=>p.value=t),action:l.action,accept:b.value,max:l.max,"size-limit":{size:l.maxSize,unit:"KB"},multiple:l.multiple,disabled:l.disabled,"request-method":l.requestMethod,onSuccess:i,onFail:v,onRemove:c,onValidate:u},null,8,["modelValue","action","accept","max","size-limit","multiple","disabled","request-method"])):(e.openBlock(),e.createBlock(e.unref(m.Upload),{key:1,modelValue:p.value,"onUpdate:modelValue":n[1]||(n[1]=t=>p.value=t),action:l.action,accept:b.value,max:l.max,"size-limit":{size:l.maxSize,unit:"KB"},multiple:l.multiple,disabled:l.disabled,"request-method":l.requestMethod,onSuccess:i,onFail:v,onRemove:c,onValidate:u},null,8,["modelValue","action","accept","max","size-limit","multiple","disabled","request-method"]))]))}}),R=I(Q,[["__scopeId","data-v-a3054ef0"]]),X={class:"smart-form"},_={key:0,class:"smart-form-footer"},ee={name:"SmartForm"},te=e.defineComponent({...ee,props:{modelValue:{},schemas:{},labelWidth:{default:"80px"},labelAlign:{default:"left"},showFooter:{type:Boolean,default:!0},submitBtnText:{default:"提交"},resetBtnText:{default:"重置"},loading:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},componentMap:{}},emits:["update:modelValue","submit","reset","validate-failed"],setup(l,{expose:g,emit:s}){const f=l,p=s,b=e.ref(),y={input:m.Input,password:m.Input,number:m.Input,textarea:m.Textarea,select:E,cascader:$,"tree-select":A,date:w,time:w,switch:m.Switch,radio:m.RadioGroup,checkbox:m.CheckboxGroup,stepper:m.Stepper,upload:R},h=i=>{const v=i||"input";return f.componentMap?.[v]?f.componentMap[v]:y[v]??null},B=i=>{const v=[];return i.required&&v.push({required:!0,message:`${i.label||"该项"}不能为空`}),i.rules&&v.push(...i.rules),v},V=i=>{const v=f.modelValue;let c={};typeof i.props=="function"?c=i.props(v):i.props&&(c={...i.props});const u=i.type||"input";if(u==="password"?Object.assign(c,{type:"password"}):u==="number"?Object.assign(c,{type:"number"}):u==="date"?Object.assign(c,{mode:"date"}):u==="time"&&Object.assign(c,{mode:["hour","minute"]}),["input","password","number","textarea"].includes(u)&&(!(typeof i.props=="object"&&i.props!==null&&Object.prototype.hasOwnProperty.call(i.props,"borderless"))&&c.borderless===void 0&&(c.borderless=!0),c.type==="file"&&(console.warn(`[SmartForm] Detected type="file" on Input component (field: ${i.name}). Please use type: "upload" in your schema instead.`),delete c.type)),f.disabled)Object.assign(c,{disabled:!0});else if(i.disabled){const a=typeof i.disabled=="function"?i.disabled(v):i.disabled;Object.assign(c,{disabled:a})}return c},x=i=>i.hidden===void 0?!0:typeof i.hidden=="function"?!i.hidden(f.modelValue):!i.hidden,S=i=>{i.validateResult===!0?p("submit",e.toRaw(f.modelValue)):p("validate-failed",i.validateResult)},C=()=>{b.value?.reset(),p("reset")};return g({validate:()=>b.value?.validate(),reset:()=>b.value?.reset(),clearValidate:()=>b.value?.clearValidate()}),(i,v)=>(e.openBlock(),e.createElementBlock("div",X,[e.createVNode(e.unref(m.Form),{ref_key:"formRef",ref:b,data:l.modelValue,"label-width":l.labelWidth,"label-align":l.labelAlign,onSubmit:S},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.schemas,c=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:c.name},[x(c)?(e.openBlock(),e.createBlock(e.unref(m.FormItem),{key:0,name:c.name,label:c.label,rules:B(c),help:c.help},{default:e.withCtx(()=>[c.type==="slot"&&c.slot?e.renderSlot(i.$slots,c.slot,{key:0,model:l.modelValue,schema:c},void 0,!0):(e.openBlock(),e.createBlock(e.resolveDynamicComponent(h(c.type)),e.mergeProps({key:1,modelValue:l.modelValue[c.name],"onUpdate:modelValue":u=>l.modelValue[c.name]=u},{ref_for:!0},V(c)),null,16,["modelValue","onUpdate:modelValue"]))]),_:2},1032,["name","label","rules","help"])):e.createCommentVNode("",!0)],64))),128)),l.showFooter?(e.openBlock(),e.createElementBlock("div",_,[e.createVNode(e.unref(m.Button),{theme:"primary",type:"submit",block:"",loading:l.loading,disabled:l.disabled},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(l.submitBtnText),1)]),_:1},8,["loading","disabled"]),l.resetBtnText?(e.openBlock(),e.createBlock(e.unref(m.Button),{key:0,theme:"default",variant:"outline",block:"",class:"reset-btn",onClick:C,disabled:l.disabled||l.loading},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(l.resetBtnText),1)]),_:1},8,["disabled"])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)]),_:3},8,["data","label-width","label-align"])]))}}),ae=I(te,[["__scopeId","data-v-88de1754"]]),le={class:"smart-page"},oe={class:"smart-page__content"},ne={name:"SmartPage"},re=e.defineComponent({...ne,props:{title:{},showNavbar:{type:Boolean,default:!0},showBack:{type:Boolean,default:!1},onBack:{},showTabBar:{type:Boolean,default:!1},tabs:{},navbarAnimation:{type:Boolean,default:!0},navbarCapsule:{},navbarFixed:{type:Boolean,default:!0},navbarLeft:{},navbarPlaceholder:{type:Boolean,default:!0},navbarRight:{},navbarSafeAreaInsetTop:{type:Boolean,default:!0},navbarTitleMaxLength:{},navbarVisible:{type:Boolean,default:!0},navbarZIndex:{},tabBarValue:{},tabBarBordered:{type:Boolean,default:!0},tabBarFixed:{type:Boolean,default:!0},tabBarPlaceholder:{type:Boolean,default:!0},tabBarSafeAreaInsetBottom:{type:Boolean,default:!0},tabBarShape:{default:"round"},tabBarSplit:{type:Boolean,default:!0},tabBarTheme:{default:"normal"},tabBarZIndex:{}},emits:["update:tabBarValue","tab-change","back","right-click"],setup(l,{emit:g}){const s=l,f=g,p=()=>{f("back"),s.onBack?s.onBack():window.history.back()},b=y=>{f("update:tabBarValue",y),f("tab-change",y)};return(y,h)=>(e.openBlock(),e.createElementBlock("div",le,[l.showNavbar?(e.openBlock(),e.createBlock(e.unref(m.Navbar),{key:0,title:l.title,"left-arrow":l.showBack,animation:l.navbarAnimation,fixed:l.navbarFixed,placeholder:l.navbarPlaceholder,"safe-area-inset-top":l.navbarSafeAreaInsetTop,"title-max-length":l.navbarTitleMaxLength,visible:l.navbarVisible,"z-index":l.navbarZIndex,onLeftClick:p,onRightClick:h[0]||(h[0]=B=>f("right-click"))},e.createSlots({_:2},[y.$slots["navbar-left"]||l.navbarLeft?{name:"left",fn:e.withCtx(()=>[e.renderSlot(y.$slots,"navbar-left",{},()=>[l.navbarLeft?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(l.navbarLeft),{key:0})):e.createCommentVNode("",!0)],!0)]),key:"0"}:void 0,y.$slots["navbar-title"]?{name:"title",fn:e.withCtx(()=>[e.renderSlot(y.$slots,"navbar-title",{},void 0,!0)]),key:"1"}:void 0,y.$slots["navbar-right"]||l.navbarRight?{name:"right",fn:e.withCtx(()=>[e.renderSlot(y.$slots,"navbar-right",{},()=>[l.navbarRight?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(l.navbarRight),{key:0})):e.createCommentVNode("",!0)],!0)]),key:"2"}:void 0,y.$slots["navbar-capsule"]||l.navbarCapsule?{name:"capsule",fn:e.withCtx(()=>[e.renderSlot(y.$slots,"navbar-capsule",{},()=>[l.navbarCapsule?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(l.navbarCapsule),{key:0})):e.createCommentVNode("",!0)],!0)]),key:"3"}:void 0]),1032,["title","left-arrow","animation","fixed","placeholder","safe-area-inset-top","title-max-length","visible","z-index"])):e.createCommentVNode("",!0),e.createElementVNode("div",oe,[e.renderSlot(y.$slots,"default",{},void 0,!0)]),l.showTabBar&&l.tabs?.length?(e.openBlock(),e.createBlock(e.unref(m.TabBar),{key:1,value:l.tabBarValue,bordered:l.tabBarBordered,fixed:l.tabBarFixed,placeholder:l.tabBarPlaceholder,"safe-area-inset-bottom":l.tabBarSafeAreaInsetBottom,shape:l.tabBarShape,split:l.tabBarSplit,theme:l.tabBarTheme,"z-index":l.tabBarZIndex,onChange:b},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.tabs,B=>(e.openBlock(),e.createBlock(e.unref(m.TabBarItem),{key:B.value,value:B.value,"badge-props":B.badgeProps},e.createSlots({default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(B.label),1)]),_:2},[B.icon?{name:"icon",fn:e.withCtx(()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(B.icon)))]),key:"0"}:void 0]),1032,["value","badge-props"]))),128))]),_:1},8,["value","bordered","fixed","placeholder","safe-area-inset-bottom","shape","split","theme","z-index"])):e.createCommentVNode("",!0)]))}}),se=I(re,[["__scopeId","data-v-ba4b4ca0"]]);exports.SmartCascader=$;exports.SmartForm=ae;exports.SmartPage=se;exports.SmartSelect=E;exports.SmartTimePicker=w;exports.SmartTreeSelect=A;exports.SmartUpload=R;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|