@tplc/business 0.0.40 → 0.0.47

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 (37) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/action.d.ts +3 -0
  3. package/components/lcb-action-view/lcb-action-view.vue +19 -4
  4. package/components/lcb-dynamic-data/lcb-dynamic-data.vue +5 -2
  5. package/components/lcb-dynamic-data/types.ts +1 -1
  6. package/components/lcb-list/components/FilterList/index.vue +1 -5
  7. package/components/lcb-list/index.scss +5 -0
  8. package/components/lcb-list/lcb-list.vue +23 -1
  9. package/components/lcb-list/types.ts +1 -1
  10. package/components/lcb-nav/lcb-nav.vue +9 -9
  11. package/components/lcb-product/lcb-product.vue +56 -11
  12. package/components/lcb-product-item/components/ItemValue.vue +77 -65
  13. package/components/lcb-product-item/lcb-product-item.vue +69 -15
  14. package/components/lcb-product-item/types.ts +14 -0
  15. package/components/lcb-user-top/api/index.ts +13 -0
  16. package/components/lcb-user-top/lcb-user-top.vue +43 -41
  17. package/components/lcb-user-top/types.ts +4 -47
  18. package/constants.ts +2 -0
  19. package/hooks/useUpload.api.ts +17 -0
  20. package/hooks/useUpload.ts +111 -0
  21. package/package.json +2 -2
  22. package/types/components/lcb-action-view/lcb-action-view.vue.d.ts +22 -2
  23. package/types/components/lcb-dynamic-data/types.d.ts +1 -1
  24. package/types/components/lcb-list/components/FilterList/index.vue.d.ts +13 -1
  25. package/types/components/lcb-list/lcb-list.vue.d.ts +31 -1
  26. package/types/components/lcb-nav/lcb-nav.vue.d.ts +1 -1
  27. package/types/components/lcb-product/lcb-product.vue.d.ts +35 -1
  28. package/types/components/lcb-product-item/components/ItemValue.vue.d.ts +19 -1
  29. package/types/components/lcb-product-item/lcb-product-item.vue.d.ts +36 -2
  30. package/types/components/lcb-product-item/types.d.ts +13 -0
  31. package/types/components/lcb-user-top/api/index.d.ts +10 -0
  32. package/types/components/lcb-user-top/lcb-user-top.vue.d.ts +3 -0
  33. package/types/components/lcb-user-top/types.d.ts +4 -3
  34. package/types/constants.d.ts +2 -0
  35. package/types/hooks/useUpload.api.d.ts +12 -0
  36. package/types/hooks/useUpload.d.ts +23 -0
  37. package/utils/utils.ts +9 -9
package/CHANGELOG.md CHANGED
@@ -2,6 +2,71 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ### [0.0.47](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/compare/v0.0.46...v0.0.47) (2024-10-26)
6
+
7
+ ### [0.0.46](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/compare/v0.0.45...v0.0.46) (2024-10-26)
8
+
9
+ ### [0.0.45](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/compare/v0.0.44...v0.0.45) (2024-10-26)
10
+
11
+
12
+ ### ✨ Features | 新功能
13
+
14
+ * lcb list 增加插槽 ([abd3cb8](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/commit/abd3cb857b38055e77cff2e838603e44f1d01857))
15
+ * 动态数据 ([25cb0bf](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/commit/25cb0bff0d13f0640a254696e0550e4e14f08ede))
16
+ * 增加 lcb-list 插槽 ([ec1832a](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/commit/ec1832a5478ed133485036c095b9fb97f61b9611))
17
+ * 暂时提交userTOP ([64a9895](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/commit/64a98951e63cf78c799b88ce1f73e9905e93bf3d))
18
+
19
+
20
+ ### 🚀 Chore | 构建/工程依赖/工具
21
+
22
+ * **release:** 0.0.43 ([1e53dca](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/commit/1e53dca714a73f575cee6af8730aad0dfd7c7bdd))
23
+ * **release:** 0.0.44 ([b849321](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/commit/b8493214ad99d7f4efcea00a878b2e25d857c2ec))
24
+ * 去除影响 windows 环境依赖安装的依赖项 ([75d42b5](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/commit/75d42b52f766ec7d8291f005d8e1c8e34162bd3e))
25
+
26
+ ### [0.0.43](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/compare/v0.0.44...v0.0.43) (2024-10-26)
27
+
28
+
29
+ ### 🚀 Chore | 构建/工程依赖/工具
30
+
31
+ * 去除影响 windows 环境依赖安装的依赖项 ([75d42b5](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/commit/75d42b52f766ec7d8291f005d8e1c8e34162bd3e))
32
+
33
+
34
+ ### ✨ Features | 新功能
35
+
36
+ * lcb list 增加插槽 ([abd3cb8](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/commit/abd3cb857b38055e77cff2e838603e44f1d01857))
37
+ * 动态数据 ([25cb0bf](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/commit/25cb0bff0d13f0640a254696e0550e4e14f08ede))
38
+ * 增加 lcb-list 插槽 ([ec1832a](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/commit/ec1832a5478ed133485036c095b9fb97f61b9611))
39
+ * 暂时提交userTOP ([64a9895](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/commit/64a98951e63cf78c799b88ce1f73e9905e93bf3d))
40
+
41
+ ### [0.0.44](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/compare/v0.0.43...v0.0.44) (2024-10-25)
42
+
43
+ ### [0.0.43](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/compare/v0.1.20...v0.0.43) (2024-10-25)
44
+
45
+
46
+ ### 🐛 Bug Fixes | Bug 修复
47
+
48
+ * gap 支持safe ([c4ba91d](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/commit/c4ba91d452a1caccb4651cff1cf28b9899fa3eb0))
49
+
50
+
51
+ ### ✨ Features | 新功能
52
+
53
+ * list box-shadow ([e086e39](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/commit/e086e394074a507d840a062e91e3949d7aa11ffe))
54
+
55
+ ### [0.0.42](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/compare/v0.0.41...v0.0.42) (2024-10-25)
56
+
57
+ ### [0.0.41](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/compare/v0.0.40...v0.0.41) (2024-10-25)
58
+
59
+
60
+ ### ✨ Features | 新功能
61
+
62
+ * sticky 兼容小程序 ([c179ae0](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/commit/c179ae0d276d51e91fe6d7cc3cadb57bf238c969))
63
+
64
+
65
+ ### 🐛 Bug Fixes | Bug 修复
66
+
67
+ * filter颜色 ([ca3cd9c](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/commit/ca3cd9ca596306580e06305eabad4e5e7ad44d1f))
68
+ * nav 兼容statusbar ([322e6d4](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/commit/322e6d46d7bd8c32e45e2236064d8ed16ac0793c))
69
+
5
70
  ### [0.0.40](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/compare/v0.0.39...v0.0.40) (2024-10-24)
6
71
 
7
72
 
package/action.d.ts CHANGED
@@ -28,6 +28,9 @@ export interface LcbGlobal {
28
28
  query?: Record<string, any> | undefined,
29
29
  ): Promise<IResData<T>>
30
30
  }
31
+ loadingStore?: () => {
32
+ changeLoading: (path: string, loading: boolean) => void
33
+ }
31
34
  }
32
35
 
33
36
  global {
@@ -4,6 +4,7 @@
4
4
  class="lcb-action-btn"
5
5
  :open-type="openType"
6
6
  @getphonenumber="getPhoneNumber"
7
+ @chooseavatar="onChooseAvatar"
7
8
  :class="customClass"
8
9
  >
9
10
  <slot />
@@ -13,6 +14,7 @@
13
14
  <script setup lang="ts">
14
15
  import { computed } from 'vue'
15
16
  import { LcbActionViewProps } from './types'
17
+ import { uploadFile } from '../../hooks/useUpload'
16
18
  defineOptions({
17
19
  name: 'LcbActionView',
18
20
  options: {
@@ -22,8 +24,13 @@ defineOptions({
22
24
  },
23
25
  })
24
26
  const props = defineProps<LcbActionViewProps>()
27
+ const emits = defineEmits<{
28
+ (e: 'phone', value: { detail: { errMsg: string; encryptedData: string; iv: string } }): void
29
+ (e: 'avatar', value: string): void
30
+ }>()
31
+
25
32
  const openType = computed(() => {
26
- return { 88: 'getPhoneNumber', 12: 'contact' }[props.jumpType || '']
33
+ return { 88: 'getPhoneNumber', 12: 'contact', 101: 'chooseAvatar' }[props.jumpType || '']
27
34
  })
28
35
  const onActionClick = () => {
29
36
  const { jumpAppid, jumpUrl: url, jumpType, phoneNumber } = props
@@ -123,11 +130,19 @@ const onActionClick = () => {
123
130
  }
124
131
  const getPhoneNumber = (e) => {
125
132
  if (e.detail.errMsg === 'getPhoneNumber:ok') {
126
- // 成功获取手机号,可以将 e.detail.encryptedData 和 e.detail.iv 发给后端解密
127
- console.log('encryptedData:', e.detail.encryptedData)
128
- console.log('iv:', e.detail.iv)
133
+ emits('phone', e)
129
134
  }
130
135
  }
136
+ const onChooseAvatar = async (e) => {
137
+ const url = e.detail.avatarUrl
138
+ uploadFile({
139
+ filePath: url,
140
+ name: url.split('/').pop(),
141
+ onSuccess: (e) => {
142
+ emits('avatar', e)
143
+ },
144
+ })
145
+ }
131
146
  </script>
132
147
 
133
148
  <style lang="scss" scoped>
@@ -1,8 +1,8 @@
1
1
  <template>
2
2
  <lcb-block v-bind="$props">
3
- <view class="flex">
3
+ <view class="flex justify-between items-center">
4
4
  <view v-for="item in items" :key="item.title">
5
- <view>{{ item.unit }} {{ item.key }}</view>
5
+ <view>{{ item.unit }} {{ pageInfo[item.key] }}</view>
6
6
  <view>{{ item.title }}</view>
7
7
  </view>
8
8
  </view>
@@ -10,6 +10,8 @@
10
10
  </template>
11
11
 
12
12
  <script setup lang="ts">
13
+ import { PAGE_PROVIDE_KEY } from '../../constants'
14
+ import { inject } from 'vue'
13
15
  import { LcbDynamicDataProps } from './types'
14
16
  defineOptions({
15
17
  name: 'LcbDynamicData',
@@ -19,6 +21,7 @@ defineOptions({
19
21
  styleIsolation: 'shared',
20
22
  },
21
23
  })
24
+ const pageInfo = inject(PAGE_PROVIDE_KEY, {})
22
25
  withDefaults(defineProps<LcbDynamicDataProps>(), {})
23
26
  </script>
24
27
 
@@ -2,6 +2,6 @@ export interface LcbDynamicDataProps {
2
2
  items: {
3
3
  title: string
4
4
  unit?: string
5
- key?: string
5
+ key: string
6
6
  }[]
7
7
  }
@@ -7,11 +7,7 @@
7
7
  @query="queryList"
8
8
  use-page-scroll
9
9
  >
10
- <lcb-product
11
- v-bind="{ ...productProps, ...attrs }"
12
- :listType="listType"
13
- :items="normalizeDataList"
14
- />
10
+ <slot :items="normalizeDataList"></slot>
15
11
  </z-paging>
16
12
  </template>
17
13
 
@@ -13,6 +13,11 @@
13
13
  border-top: 1px solid #F3F5F9;
14
14
  }
15
15
 
16
+ &__view {
17
+ background-color: #fff !important;
18
+ box-shadow: 0 2rpx 4rpx 0 rgba(0, 0, 0, 0.1);
19
+ }
20
+
16
21
  &__plain {
17
22
  :deep(.wd-drop-menu__list) {
18
23
  background-color: transparent;
@@ -5,6 +5,7 @@
5
5
  :class="{
6
6
  'lcb-filter__border-top': showPlain ? false : border,
7
7
  'lcb-filter__plain': showPlain,
8
+ 'lcb-filter__view': !showPlain,
8
9
  }"
9
10
  class="w-100vw"
10
11
  >
@@ -67,7 +68,24 @@
67
68
  </view>
68
69
  </wd-sticky>
69
70
 
70
- <FilterList v-bind="{ ...info.listInfo, listType, filter, ...attrs }" test2="11" />
71
+ <FilterList v-bind="{ ...info.listInfo, listType, filter, ...attrs }">
72
+ <template #default="{ items }">
73
+ <slot name="list" :items="items">
74
+ <lcb-product v-bind="{ ...attrs }" :listType="listType" :items="items">
75
+ <template #item="slotContext">
76
+ <slot name="item" v-bind="slotContext" />
77
+ </template>
78
+ <template
79
+ v-for="slotName in lcbProductItemContentTypes"
80
+ :key="slotName"
81
+ #[slotName]="slotContext"
82
+ >
83
+ <slot :name="slotName" v-bind="slotContext" />
84
+ </template>
85
+ </lcb-product>
86
+ </slot>
87
+ </template>
88
+ </FilterList>
71
89
  </view>
72
90
  </template>
73
91
 
@@ -81,10 +99,14 @@ import ComponentGroup from './components/ComponentGroup/index.vue'
81
99
  import TagSelect from './components/TagSelect/index.vue'
82
100
  import FilterList from './components/FilterList/index.vue'
83
101
  import FilterTabs from './components/FilterTabs/index.vue'
102
+ import { lcbProductItemContentTypes } from '../lcb-product-item/types'
103
+
84
104
  import './index.scss'
85
105
  import { FORM_KEY } from '../../constants'
86
106
  const attrs = useAttrs()
87
107
 
108
+ const slotNames = [...lcbProductItemContentTypes, 'item']
109
+
88
110
  defineOptions({
89
111
  name: 'LcbList',
90
112
  options: {
@@ -29,7 +29,7 @@ export const defaultLcbListProps: LcbListProps = {
29
29
  pageFilterType: 'hotelTravelFilter',
30
30
  border: true,
31
31
  styleMode: 'default',
32
- listType: 'grid',
32
+ listType: 'list',
33
33
  // @ts-ignore
34
34
  pageListProps: () => ({
35
35
  productProps: {
@@ -9,20 +9,20 @@
9
9
  paddingTop,
10
10
  }"
11
11
  >
12
+ <view
13
+ class="navbar-header-background"
14
+ :style="{
15
+ backgroundColor: navbarBgColor,
16
+ opacity: navbarBgOpacity,
17
+ backgroundImage: backgroundType === 'img' ? `url(${backgroundImage})` : '',
18
+ }"
19
+ />
12
20
  <view
13
21
  class="navbar-header"
14
22
  :style="{
15
23
  color: contentColor,
16
24
  }"
17
25
  >
18
- <view
19
- class="navbar-header-background"
20
- :style="{
21
- backgroundColor: navbarBgColor,
22
- opacity: navbarBgOpacity,
23
- backgroundImage: backgroundType === 'img' ? `url(${backgroundImage})` : '',
24
- }"
25
- />
26
26
  <!-- 左边布局 -->
27
27
  <view class="navbar-left z-1">
28
28
  <!-- 返回按钮 -->
@@ -52,7 +52,7 @@
52
52
  name="zuo_left"
53
53
  @click="toBack"
54
54
  :color="contentColor"
55
- size="44rpx"
55
+ size="24px"
56
56
  />
57
57
  </template>
58
58
  <view class="ml-2" v-if="titleLocation === 'left'">
@@ -1,6 +1,8 @@
1
1
  <script setup lang="ts">
2
2
  import { computed, useAttrs } from 'vue'
3
3
  import { LcbProductProps } from './types'
4
+ import { lcbProductItemContentTypes } from '../lcb-product-item/types'
5
+
4
6
  const attrs = useAttrs()
5
7
  defineOptions({
6
8
  name: 'LcbProduct',
@@ -17,16 +19,39 @@ const props = withDefaults(defineProps<LcbProductProps>(), {
17
19
  imageHeightPercent: (300 / 560) * 100,
18
20
  itemHeight: 560,
19
21
  } as any)
22
+ defineSlots<{
23
+ image(): any
24
+ title(): any
25
+ subTitle(): any
26
+ price(): any
27
+ priceUnit(): any
28
+ priceSuffix(): any
29
+ originPrice(): any
30
+ originPriceUnit(): any
31
+ tags(): any
32
+ location(): any
33
+ distance(): any
34
+ }>()
20
35
  </script>
21
36
 
22
37
  <template>
23
38
  <lcb-block v-bind="$props">
24
39
  <view class="flex flex-col gap-2 p-2" v-if="listType === 'list'">
25
40
  <view v-for="(item, index) in items" :key="`${item?.productId}:${index}`">
26
- <lcb-product-item
27
- v-bind="{ ...item, ...attrs }"
28
- :imageStyle="{ width: `${imageWidthPercent}%` }"
29
- />
41
+ <slot name="item" :item="item">
42
+ <lcb-product-item
43
+ v-bind="{ ...item, ...attrs }"
44
+ :imageStyle="{ width: `${imageWidthPercent}%` }"
45
+ >
46
+ <template
47
+ v-for="slotName in lcbProductItemContentTypes"
48
+ :key="slotName"
49
+ #[slotName]="slotContext"
50
+ >
51
+ <slot :name="slotName" v-bind="slotContext" />
52
+ </template>
53
+ </lcb-product-item>
54
+ </slot>
30
55
  </view>
31
56
  </view>
32
57
 
@@ -34,12 +59,22 @@ const props = withDefaults(defineProps<LcbProductProps>(), {
34
59
  <view v-for="(item, index) in items" :key="`${item?.productId}:${index}`" class="w-1/2">
35
60
  <view class="p-1 overflow-hidden">
36
61
  <view class="rounded overflow-hidden" :style="{ height: `${itemHeight}rpx` }">
37
- <lcb-product-item
38
- v-bind="{ ...item, ...attrs }"
39
- layoutType="vertical"
40
- className="!h-full"
41
- :imageStyle="{ height: `${imageHeightPercent}%` }"
42
- />
62
+ <slot name="item" :item="item">
63
+ <lcb-product-item
64
+ v-bind="{ ...item, ...attrs }"
65
+ layoutType="vertical"
66
+ className="!h-full"
67
+ :imageStyle="{ height: `${imageHeightPercent}%` }"
68
+ >
69
+ <template
70
+ v-for="slotName in lcbProductItemContentTypes"
71
+ :key="slotName"
72
+ #[slotName]="slotContext"
73
+ >
74
+ <slot :name="slotName" v-bind="slotContext" />
75
+ </template>
76
+ </lcb-product-item>
77
+ </slot>
43
78
  </view>
44
79
  </view>
45
80
  </view>
@@ -52,7 +87,17 @@ const props = withDefaults(defineProps<LcbProductProps>(), {
52
87
  :key="`${item?.productId}:${index}`"
53
88
  class="!w-66vw flex-shrink-0"
54
89
  >
55
- <lcb-product-item v-bind="item" imageClass="!w-1/2" />
90
+ <slot name="item" :item="item">
91
+ <lcb-product-item v-bind="item" imageClass="!w-1/2">
92
+ <template
93
+ v-for="slotName in lcbProductItemContentTypes"
94
+ :key="slotName"
95
+ #[slotName]="slotContext"
96
+ >
97
+ <slot :name="slotName" v-bind="slotContext" />
98
+ </template>
99
+ </lcb-product-item>
100
+ </slot>
56
101
  </view>
57
102
  </view>
58
103
  </scroll-view>
@@ -14,6 +14,20 @@ const props = withDefaults(
14
14
  {},
15
15
  )
16
16
 
17
+ // defineSlots<{
18
+ // image(): any
19
+ // title(): any
20
+ // subTitle(): any
21
+ // price(): any
22
+ // priceUnit(): any
23
+ // priceSuffix(): any
24
+ // originPrice(): any
25
+ // originPriceUnit(): any
26
+ // tags(): any
27
+ // location(): any
28
+ // distance(): any
29
+ // }>()
30
+
17
31
  const visible = computed(() => {
18
32
  return itemProps?.[`${props?.prop}Visible`] ?? true
19
33
  })
@@ -31,85 +45,83 @@ const value = computed(() => {
31
45
  <template>
32
46
  <template v-if="visible && !!value && (isArray(value) ? value?.length > 0 : true)">
33
47
  <!-- 图片 -->
34
- <view v-if="prop === 'image'" :value="value" :class="className" :style="style">
35
- <image :src="value" class="w-full h-full" mode="aspectFill" />
36
- </view>
48
+ <slot :value="value" v-if="prop === 'image'" name="image">
49
+ <view :value="value" :class="className" :style="style">
50
+ <image :src="value" class="w-full h-full" mode="aspectFill" />
51
+ </view>
52
+ </slot>
37
53
 
38
54
  <!-- 标题 -->
39
- <view
40
- v-if="prop === 'title'"
41
- :class="className"
42
- :style="style"
43
- :value="value"
44
- class="text-ellipsis line-clamp-2"
45
- >
46
- <view>{{ value }}</view>
47
- </view>
55
+ <slot :value="value" v-if="prop === 'title'" name="title">
56
+ <view :class="className" :style="style" :value="value" class="text-ellipsis line-clamp-1">
57
+ <view>{{ value }}</view>
58
+ </view>
59
+ </slot>
48
60
 
49
61
  <!-- 位置 -->
50
- <view
51
- :class="className"
52
- :style="style"
53
- v-if="prop === 'location'"
54
- :value="value"
55
- class="text-gray-500 text-22rpx flex gap-3rpx items-center"
56
- >
57
- <wd-icon name="location" size="32rpx"></wd-icon>
58
- <view>{{ value }}</view>
59
- </view>
62
+ <slot :value="value" v-if="prop === 'location'" name="location">
63
+ <view
64
+ :class="className"
65
+ :style="style"
66
+ :value="value"
67
+ class="text-gray-500 text-22rpx flex gap-3rpx items-center"
68
+ >
69
+ <wd-icon name="location" size="32rpx"></wd-icon>
70
+ <view>{{ value }}</view>
71
+ </view>
72
+ </slot>
60
73
 
61
74
  <!-- 标签 -->
62
- <view
63
- :class="className"
64
- :style="style"
65
- v-if="prop === 'tags'"
66
- :value="value"
67
- class="flex gap-1 whitespace-nowrap overflow-auto"
68
- >
69
- <wd-tag
70
- v-for="tag in value"
71
- :key="tag"
72
- class="!text-20rpx"
75
+ <slot :value="value" v-if="prop === 'tags'" name="tags">
76
+ <view
73
77
  :class="className"
74
78
  :style="style"
75
- plain
76
- type="primary"
79
+ :value="value"
80
+ class="flex gap-1 whitespace-nowrap overflow-auto"
77
81
  >
78
- {{ tag }}
79
- </wd-tag>
80
- </view>
82
+ <wd-tag
83
+ v-for="tag in value"
84
+ :key="tag"
85
+ class="!text-20rpx"
86
+ :class="className"
87
+ :style="style"
88
+ plain
89
+ type="primary"
90
+ >
91
+ {{ tag }}
92
+ </wd-tag>
93
+ </view>
94
+ </slot>
81
95
 
82
96
  <!-- 价格单位 -->
83
- <view
84
- :class="className"
85
- :style="style"
86
- v-if="prop === 'priceUnit'"
87
- :value="value"
88
- class="text-red-500 font-bold text-22rpx"
89
- >
90
- <view>{{ value }}</view>
91
- </view>
97
+ <slot :value="value" v-if="prop === 'priceUnit'" name="priceUnit">
98
+ <view
99
+ :class="className"
100
+ :style="style"
101
+ :value="value"
102
+ class="text-red-500 font-bold text-22rpx"
103
+ >
104
+ <view>{{ value }}</view>
105
+ </view>
106
+ </slot>
92
107
 
93
108
  <!-- 价格 -->
94
- <view
95
- :class="className"
96
- :style="style"
97
- v-if="prop === 'price'"
98
- :value="value"
99
- class="text-red-500 font-bold text-27rpx"
100
- >
101
- <view>{{ value }}</view>
102
- </view>
109
+ <slot :value="value" v-if="prop === 'price'" name="price">
110
+ <view
111
+ :class="className"
112
+ :style="style"
113
+ :value="value"
114
+ class="text-red-500 font-bold text-27rpx"
115
+ >
116
+ <view>{{ value }}</view>
117
+ </view>
118
+ </slot>
103
119
 
104
120
  <!-- 价格后缀 -->
105
- <view
106
- :class="className"
107
- :style="style"
108
- v-if="prop === 'priceSuffix'"
109
- :value="value"
110
- class="text-22rpx"
111
- >
112
- <view>{{ value }}</view>
113
- </view>
121
+ <slot :value="value" v-if="prop === 'priceSuffix'" name="priceSuffix">
122
+ <view :class="className" :style="style" :value="value" class="text-22rpx">
123
+ <view>{{ value }}</view>
124
+ </view>
125
+ </slot>
114
126
  </template>
115
127
  </template>