@tplc/business 0.1.12 → 0.1.13

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/CHANGELOG.md CHANGED
@@ -2,6 +2,35 @@
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.1.13](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/compare/v0.1.6...v0.1.13) (2024-10-28)
6
+
7
+
8
+ ### 🚀 Chore | 构建/工程依赖/工具
9
+
10
+ * **release:** 0.1.10 ([732f746](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/commit/732f746ecc268186d3357b882c40e4ee0a227250))
11
+ * **release:** 0.1.11 ([0ff8ceb](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/commit/0ff8ceb8c63810597998d2660a87ccc8007f7196))
12
+ * **release:** 0.1.12 ([cb45e26](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/commit/cb45e26560dbc7de5691950e480b3f070d3dafa5))
13
+ * **release:** 0.1.7 ([69fbf39](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/commit/69fbf39f9e9f1c7b2daf25aa81d7e508a530fa2b))
14
+ * **release:** 0.1.8 ([0cd2b98](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/commit/0cd2b98488ea39de407df1badedf2554f94190f1))
15
+ * **release:** 0.1.9 ([b1dd896](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/commit/b1dd896c4acc76bfc370b39c7d0a24eb729182eb))
16
+
17
+
18
+ ### 🐛 Bug Fixes | Bug 修复
19
+
20
+ * 修改图片尺寸 ([1d4dd25](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/commit/1d4dd25e5065401562cd75560507bc23953967e8))
21
+
22
+
23
+ ### ✨ Features | 新功能
24
+
25
+ * lcb-list 相关 slot 适应小程序调整 ([aff0850](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/commit/aff085079e4918761191a7a00f7c48a5fb2c599d))
26
+ * nav 颜色调整 ([1f7bba0](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/commit/1f7bba00c2386a85a5bfe3b3973ad160c87efd78))
27
+ * version update ([3e0904a](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/commit/3e0904a72675d2c262ec4efd388c08a1f4a5375a))
28
+ * 上传图片 ([5ae5dcb](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/commit/5ae5dcbb018ce5c9bbc53290eb0e3e082985d887))
29
+ * 优化 lcb-product-item 插槽与属性 ([29d00e4](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/commit/29d00e49adf8c47ea223f92b400eac74385f8ee0))
30
+ * 新增dynamic-data ([d43b20f](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/commit/d43b20f5f334ae6ac5b46294b5caf7903bc4a820))
31
+ * 类型调整 ([206b930](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/commit/206b93056631e72531cd39617a3c6e7ad5529723))
32
+ * 调整usertop ui ([13daab3](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/commit/13daab39ecd02d313cf9c9c61fa8ab79ba10198f))
33
+
5
34
  ### [0.1.12](http://gitlab888.30jia.com.cn/bhBank/zero-code-pro/compare/v0.1.6...v0.1.12) (2024-10-28)
6
35
 
7
36
 
@@ -17,7 +17,8 @@
17
17
  :src="item.url"
18
18
  :enable-preview="enablePreview"
19
19
  mode="widthFix"
20
- :class="`${styleGroup == 3 ? 'overflow-hidden' : 'overflow-hidden block'}`"
20
+ height="auto"
21
+ :custom-class="`${styleGroup == 3 ? 'overflow-hidden' : 'overflow-hidden block'}`"
21
22
  :style="{
22
23
  borderRadius: transformValueUnit(imageRadius),
23
24
  display: 'block',
@@ -37,13 +37,16 @@ const normalizeDataList = computed(() => {
37
37
  const imgArr = formatJson(item.coverImg, [])
38
38
  const tags = formatJson(item.tags, [])
39
39
  return {
40
- ...item,
41
40
  image: imgArr?.[1] || imgArr?.[0],
42
41
  title: item?.productName,
43
- tags,
42
+ // subTitle: item?.poiName,
43
+ location: item?.address,
44
44
  price: item?.price,
45
- location: item?.cityAreaName,
46
45
  priceSuffix: item?.behindUnit,
46
+ // originPrice: item?.price,
47
+ // originPriceSuffix: item?.behindUnit,
48
+ ...item,
49
+ tags,
47
50
  }
48
51
  })
49
52
  // console.log('list', list)
@@ -77,6 +80,7 @@ watch(
77
80
  )
78
81
  const queryList = async (page: number, limit: number) => {
79
82
  try {
83
+ // const { data } = mockData
80
84
  const { data } = await uni.$lcb.http.post(props.url, {
81
85
  ...props.baseParam,
82
86
  ...props.filter,
@@ -90,7 +90,7 @@
90
90
 
91
91
  <script setup lang="ts">
92
92
  import { computed, inject, Ref, ref, watch, useAttrs } from 'vue'
93
- import { LcbListProps, defaultLcbListProps } from './types'
93
+ import { LcbListProps } from './types'
94
94
  import { FilterComponent, getFilterDetail, LcbFilterResult } from './api'
95
95
  import FilterSelect from './components/FilterSelect/index.vue'
96
96
  import TreeSelect from './components/TreeSelect/index.vue'
@@ -113,7 +113,18 @@ defineOptions({
113
113
  })
114
114
  const form = inject<Ref<Record<string, any>>>(FORM_KEY)
115
115
  const dropMenu = ref()
116
- const props = withDefaults(defineProps<LcbListProps>(), defaultLcbListProps as any)
116
+ const props = withDefaults(defineProps<LcbListProps>(), {
117
+ pageFilterType: 'hotelTravelFilter',
118
+ border: true,
119
+ styleMode: 'default',
120
+ listType: 'list',
121
+ // @ts-ignore
122
+ pageListProps: () => ({
123
+ productProps: {
124
+ // listType: 'list',
125
+ },
126
+ }),
127
+ } as LcbListProps as any)
117
128
  const info = ref<LcbFilterResult>()
118
129
  const filter = ref<Record<string, any>>({})
119
130
  const titleObj = ref<Record<string, any>>({})
@@ -24,16 +24,3 @@ export interface FilterItemProps {
24
24
  options?: Option[]
25
25
  test?: 1
26
26
  }
27
-
28
- export const defaultLcbListProps: LcbListProps = {
29
- pageFilterType: 'hotelTravelFilter',
30
- border: true,
31
- styleMode: 'default',
32
- listType: 'list',
33
- // @ts-ignore
34
- pageListProps: () => ({
35
- productProps: {
36
- // listType: 'list',
37
- },
38
- }),
39
- }
@@ -31,7 +31,33 @@ defineSlots<{
31
31
  <lcb-product-item
32
32
  v-bind="{ ...item, ...attrs }"
33
33
  :imageStyle="{ width: `${imageWidthPercent}%` }"
34
- ></lcb-product-item>
34
+ >
35
+ <!-- <template #itemTopSection>
36
+ <view class="min-w-10 min-h-10 bg-red-500/50"></view>
37
+ </template>
38
+ <template #itemBottomSection>
39
+ <view class="min-w-10 min-h-10 bg-yellow-500/50"></view>
40
+ </template>
41
+ <template #itemLeftSection>
42
+ <view class="min-w-10 min-h-10 bg-blue-500/50"></view>
43
+ </template>
44
+ <template #itemRightSection>
45
+ <view class="min-w-10 min-h-10 bg-green-500/50"></view>
46
+ </template> -->
47
+
48
+ <!-- <template #imageSection>
49
+ <view class="min-w-5 min-h-5 bg-yellow-400 right-1 top-1 absolute z-10"></view>
50
+ </template>
51
+
52
+ <template #itemSection>
53
+ <view class="min-w-10 min-h-10 bg-blue-500/50 right-0 top-0 absolute z-10"></view>
54
+ </template>
55
+ <template #contentSection>
56
+ <view
57
+ class="min-w-15 min-h-15 bg-gray-500/20 right-10 top-10 absolute z-10 rounded-full"
58
+ ></view>
59
+ </template> -->
60
+ </lcb-product-item>
35
61
  </slot>
36
62
  </view>
37
63
  </view>
@@ -46,7 +72,20 @@ defineSlots<{
46
72
  layoutType="vertical"
47
73
  className="!h-full"
48
74
  :imageStyle="{ height: `${imageHeightPercent}%` }"
49
- ></lcb-product-item>
75
+ >
76
+ <!-- <template #itemTopSection>
77
+ <view class="min-w-10 min-h-10 bg-red-500/50"></view>
78
+ </template>
79
+ <template #itemBottomSection>
80
+ <view class="min-w-10 min-h-10 bg-yellow-500/50"></view>
81
+ </template>
82
+ <template #itemLeftSection>
83
+ <view class="min-w-10 min-h-10 bg-blue-500/50"></view>
84
+ </template>
85
+ <template #itemRightSection>
86
+ <view class="min-w-10 min-h-10 bg-green-500/50"></view>
87
+ </template> -->
88
+ </lcb-product-item>
50
89
  </slot>
51
90
  </view>
52
91
  </view>
@@ -4,7 +4,7 @@ import { isArray } from '@tplc/wot/components/common/util'
4
4
 
5
5
  // const attrs = useAttrs()
6
6
 
7
- const itemProps = inject('lcb-product-item-props')
7
+ const itemProps: any = inject('lcb-product-item-props')
8
8
 
9
9
  const props = withDefaults(
10
10
  defineProps<{
@@ -23,6 +23,7 @@ defineSlots<{
23
23
  priceSuffix(props: { value: any }): any
24
24
  originPrice(props: { value: any }): any
25
25
  originPriceUnit(props: { value: any }): any
26
+ originPriceSuffix(props: { value: any }): any
26
27
  tags(props: { value: any }): any
27
28
  location(props: { value: any }): any
28
29
  distance(props: { value: any }): any
@@ -50,12 +51,37 @@ const value = computed(() => {
50
51
  <slot :value="value" v-if="prop === 'image'" name="image">
51
52
  <view :value="value" :class="className" :style="style">
52
53
  <image :src="value" class="w-full h-full" mode="aspectFill" />
54
+ <slot></slot>
53
55
  </view>
54
56
  </slot>
55
57
 
56
58
  <!-- 标题 -->
57
59
  <slot :value="value" v-if="prop === 'title'" name="title">
58
- <view :class="className" :style="style" :value="value" class="text-ellipsis line-clamp-1">
60
+ <view
61
+ :class="[
62
+ className,
63
+ 'text-ellipsis',
64
+ {
65
+ 'line-clamp-1': itemProps?.titleLineClamp === 1,
66
+ 'line-clamp-2': itemProps?.titleLineClamp === 2,
67
+ 'line-clamp-3': itemProps?.titleLineClamp === 3,
68
+ },
69
+ ]"
70
+ :style="style"
71
+ :value="value"
72
+ >
73
+ <view>{{ value }}</view>
74
+ </view>
75
+ </slot>
76
+
77
+ <!-- 副标题 -->
78
+ <slot :value="value" v-if="prop === 'subTitle'" name="subTitle">
79
+ <view
80
+ :class="className"
81
+ :style="style"
82
+ :value="value"
83
+ class="text-22rpx text-gray-500 text-ellipsis line-clamp-1"
84
+ >
59
85
  <view>{{ value }}</view>
60
86
  </view>
61
87
  </slot>
@@ -69,21 +95,48 @@ const value = computed(() => {
69
95
  class="text-gray-500 text-22rpx flex gap-3rpx items-center"
70
96
  >
71
97
  <wd-icon name="location" size="32rpx"></wd-icon>
72
- <view>{{ value }}</view>
98
+ <view class="text-ellipsis line-clamp-1">{{ value }}</view>
99
+ </view>
100
+ </slot>
101
+
102
+ <!-- 距离 -->
103
+ <slot :value="value" v-if="prop === 'distance'" name="distance">
104
+ <view
105
+ :class="className"
106
+ :style="style"
107
+ :value="value"
108
+ class="text-gray-500 text-22rpx flex gap-3rpx items-center"
109
+ >
110
+ <wd-icon name="location" size="32rpx"></wd-icon>
111
+ <view class="text-ellipsis line-clamp-1">
112
+ 距您{{ value }}{{ itemProps?.distanceUnit ?? 'km' }}
113
+ </view>
73
114
  </view>
74
115
  </slot>
75
116
 
76
117
  <!-- 标签 -->
77
118
  <slot :value="value" v-if="prop === 'tags'" name="tags">
78
- <view class="flex gap-1 whitespace-nowrap overflow-auto">
119
+ <view
120
+ :class="[
121
+ 'flex gap-1',
122
+ {
123
+ 'whitespace-nowrap overflow-auto': !itemProps?.tagOverflowWrap,
124
+ 'flex-wrap': itemProps?.tagOverflowWrap,
125
+ },
126
+ ]"
127
+ >
79
128
  <wd-tag
80
129
  v-for="tag in value"
81
130
  :key="tag"
82
131
  class="!text-20rpx"
83
132
  :class="className"
84
133
  :style="style"
85
- plain
86
- type="primary"
134
+ :color="itemProps?.tagContentColor"
135
+ :bg-color="itemProps?.tagBgColor"
136
+ :plain="itemProps?.tagPlain ?? true"
137
+ :mark="itemProps?.tagMark ?? false"
138
+ :round="itemProps?.tagRound ?? false"
139
+ :type="itemProps?.tagType ?? 'primary'"
87
140
  >
88
141
  {{ tag }}
89
142
  </wd-tag>
@@ -120,5 +173,36 @@ const value = computed(() => {
120
173
  <view>{{ value }}</view>
121
174
  </view>
122
175
  </slot>
176
+
177
+ <!-- 原始价格单位 -->
178
+ <slot :value="value" v-if="prop === 'originPriceUnit'" name="originPriceUnit">
179
+ <view
180
+ :class="className"
181
+ :style="style"
182
+ :value="value"
183
+ class="text-gray-500 font-bold text-19rpx"
184
+ >
185
+ <view>{{ value }}</view>
186
+ </view>
187
+ </slot>
188
+
189
+ <!-- 原始价格 -->
190
+ <slot :value="value" v-if="prop === 'originPrice'" name="originPrice">
191
+ <view
192
+ :class="className"
193
+ :style="style"
194
+ :value="value"
195
+ class="text-gray-500 font-bold text-20rpx"
196
+ >
197
+ <view>{{ value }}</view>
198
+ </view>
199
+ </slot>
200
+
201
+ <!-- 原始价格后缀 -->
202
+ <slot :value="value" v-if="prop === 'originPriceSuffix'" name="originPriceSuffix">
203
+ <view :class="className" :style="style" :value="value" class="text-gray-500 text-20rpx">
204
+ <view>{{ value }}</view>
205
+ </view>
206
+ </slot>
123
207
  </template>
124
208
  </template>
@@ -1,8 +1,10 @@
1
1
  <script setup lang="ts">
2
2
  import { computed, provide, useAttrs } from 'vue'
3
- import { lcbProductItemContentTypes, LcbProductItemProps } from './types'
3
+ import { LcbProductItemProps } from './types'
4
4
  import ItemValue from './components/ItemValue.vue'
5
5
 
6
+ const isNumber = (value: any) => typeof value === 'number'
7
+
6
8
  defineOptions({
7
9
  name: 'LcbProductItem',
8
10
  options: {
@@ -14,19 +16,28 @@ defineOptions({
14
16
 
15
17
  const props = withDefaults(defineProps<LcbProductItemProps>(), {
16
18
  layoutType: 'horizontal',
19
+ titleLineClamp: 1,
20
+ tagOverflowWrap: false,
21
+ tagType: 'primary',
22
+ tagPlain: true,
23
+ tagMark: false,
24
+ tagRound: false,
25
+ distanceUnit: 'km',
26
+
17
27
  priceUnit: '¥',
18
28
  originPriceUnit: '¥',
19
29
  imageVisible: true,
20
30
  titleVisible: true,
21
- subTitleVisible: true,
31
+ subTitleVisible: false,
22
32
  priceVisible: true,
23
33
  priceUnitVisible: true,
24
34
  priceSuffixVisible: true,
25
35
  originPriceVisible: true,
26
36
  originPriceUnitVisible: true,
37
+ originPriceSuffixVisible: true,
27
38
  tagsVisible: true,
28
39
  locationVisible: true,
29
- distanceVisible: true,
40
+ distanceVisible: false,
30
41
  })
31
42
  const attrs = useAttrs()
32
43
 
@@ -41,9 +52,18 @@ defineSlots<{
41
52
  priceSuffix(props: { value: any }): any
42
53
  originPrice(props: { value: any }): any
43
54
  originPriceUnit(props: { value: any }): any
55
+ originPriceSuffix(props: { value: any }): any
44
56
  tags(props: { value: any }): any
45
57
  location(props: { value: any }): any
46
58
  distance(props: { value: any }): any
59
+
60
+ itemSection(): any
61
+ itemTopSection(): any
62
+ itemBottomSection(): any
63
+ itemLeftSection(): any
64
+ itemRightSection(): any
65
+ imageSection(): any
66
+ contentSection(): any
47
67
  }>()
48
68
 
49
69
  // console.log('attrs', attrs)
@@ -51,46 +71,43 @@ defineSlots<{
51
71
 
52
72
  <template>
53
73
  <!-- 横向布局 -->
54
- <view v-if="layoutType === 'horizontal'" :class="className" class="flex gap-3 px-2 py-3 bg-white">
55
- <ItemValue
56
- v-if="!!$slots?.['image']"
57
- prop="image"
58
- className="w-1/3 h-220rpx bg-gray-100 rounded-sm overflow-hidden"
59
- >
60
- <template #image="{ value }">
61
- <slot name="image" :value="value" />
62
- </template>
63
- </ItemValue>
64
- <ItemValue
65
- v-else
66
- prop="image"
67
- className="w-1/3 h-220rpx bg-gray-100 rounded-sm overflow-hidden"
68
- />
69
- <view class="flex flex-col flex-1 gap-2 justify-between text-26rpx overflow-hidden">
70
- <view class="flex flex-col gap-2 overflow-hidden">
71
- <template v-for="propName in ['title', 'location', 'tags']" :key="propName">
72
- <ItemValue :prop="propName" v-if="!!$slots?.[propName]">
73
- <template #image="{ value }"><slot name="image" :value="value" /></template>
74
- <template #title="{ value }"><slot name="title" :value="value" /></template>
75
- <template #subTitle="{ value }"><slot name="subTitle" :value="value" /></template>
76
- <template #price="{ value }"><slot name="price" :value="value" /></template>
77
- <template #priceUnit="{ value }"><slot name="priceUnit" :value="value" /></template>
78
- <template #priceSuffix="{ value }"><slot name="priceSuffix" :value="value" /></template>
79
- <template #originPrice="{ value }"><slot name="originPrice" :value="value" /></template>
80
- <template #originPriceUnit="{ value }">
81
- <slot name="originPriceUnit" :value="value" />
82
- </template>
83
- <template #tags="{ value }"><slot name="tags" :value="value" /></template>
84
- <template #location="{ value }"><slot name="location" :value="value" /></template>
85
- <template #distance="{ value }"><slot name="distance" :value="value" /></template>
86
- </ItemValue>
87
- <ItemValue :prop="propName" v-else />
74
+ <view
75
+ v-if="layoutType === 'horizontal'"
76
+ :class="className"
77
+ class="flex flex-col gap-1 px-2 py-3 bg-white relative"
78
+ >
79
+ <slot name="itemSection" />
80
+ <slot name="itemTopSection" />
81
+ <view class="flex gap-2">
82
+ <slot name="itemLeftSection" />
83
+ <ItemValue
84
+ v-if="!!$slots?.['image']"
85
+ prop="image"
86
+ className="w-1/3 h-220rpx bg-gray-100 rounded-sm overflow-hidden relative"
87
+ >
88
+ <template #default>
89
+ <slot name="imageSection" />
88
90
  </template>
89
- </view>
90
-
91
- <view class="flex gap-2">
92
- <view class="flex gap-[4rpx] items-end">
93
- <template v-for="propName in ['priceUnit', 'price', 'priceSuffix']" :key="propName">
91
+ <template #image="{ value }">
92
+ <slot name="image" :value="value" />
93
+ </template>
94
+ </ItemValue>
95
+ <ItemValue
96
+ v-else
97
+ prop="image"
98
+ className="w-1/3 h-220rpx bg-gray-100 rounded-sm overflow-hidden relative"
99
+ >
100
+ <template #default>
101
+ <slot name="imageSection" />
102
+ </template>
103
+ </ItemValue>
104
+ <view class="flex flex-col flex-1 gap-2 justify-between text-26rpx overflow-hidden relative">
105
+ <slot name="contentSection" />
106
+ <view class="flex flex-col gap-2 overflow-hidden">
107
+ <template
108
+ v-for="propName in ['title', 'subTitle', 'location', 'distance', 'tags']"
109
+ :key="propName"
110
+ >
94
111
  <ItemValue :prop="propName" v-if="!!$slots?.[propName]">
95
112
  <template #image="{ value }"><slot name="image" :value="value" /></template>
96
113
  <template #title="{ value }"><slot name="title" :value="value" /></template>
@@ -113,46 +130,101 @@ defineSlots<{
113
130
  <ItemValue :prop="propName" v-else />
114
131
  </template>
115
132
  </view>
133
+
134
+ <view class="flex gap-2">
135
+ <view class="flex gap-[4rpx] items-end" v-if="priceVisible && isNumber(price)">
136
+ <template v-for="propName in ['priceUnit', 'price', 'priceSuffix']" :key="propName">
137
+ <ItemValue :prop="propName" v-if="!!$slots?.[propName]">
138
+ <template #image="{ value }"><slot name="image" :value="value" /></template>
139
+ <template #title="{ value }"><slot name="title" :value="value" /></template>
140
+ <template #subTitle="{ value }"><slot name="subTitle" :value="value" /></template>
141
+ <template #price="{ value }"><slot name="price" :value="value" /></template>
142
+ <template #priceUnit="{ value }"><slot name="priceUnit" :value="value" /></template>
143
+ <template #priceSuffix="{ value }">
144
+ <slot name="priceSuffix" :value="value" />
145
+ </template>
146
+ <template #originPrice="{ value }">
147
+ <slot name="originPrice" :value="value" />
148
+ </template>
149
+ <template #originPriceUnit="{ value }">
150
+ <slot name="originPriceUnit" :value="value" />
151
+ </template>
152
+ <template #tags="{ value }"><slot name="tags" :value="value" /></template>
153
+ <template #location="{ value }"><slot name="location" :value="value" /></template>
154
+ <template #distance="{ value }"><slot name="distance" :value="value" /></template>
155
+ </ItemValue>
156
+ <ItemValue :prop="propName" v-else />
157
+ </template>
158
+ </view>
159
+ <view
160
+ class="flex gap-[2rpx] items-end line-through"
161
+ v-if="originPriceVisible && isNumber(originPrice)"
162
+ >
163
+ <template
164
+ v-for="propName in ['originPriceUnit', 'originPrice', 'originPriceSuffix']"
165
+ :key="propName"
166
+ >
167
+ <ItemValue :prop="propName" v-if="!!$slots?.[propName]">
168
+ <template #image="{ value }"><slot name="image" :value="value" /></template>
169
+ <template #title="{ value }"><slot name="title" :value="value" /></template>
170
+ <template #subTitle="{ value }"><slot name="subTitle" :value="value" /></template>
171
+ <template #price="{ value }"><slot name="price" :value="value" /></template>
172
+ <template #priceUnit="{ value }"><slot name="priceUnit" :value="value" /></template>
173
+ <template #priceSuffix="{ value }">
174
+ <slot name="priceSuffix" :value="value" />
175
+ </template>
176
+ <template #originPrice="{ value }">
177
+ <slot name="originPrice" :value="value" />
178
+ </template>
179
+ <template #originPriceUnit="{ value }">
180
+ <slot name="originPriceUnit" :value="value" />
181
+ </template>
182
+ <template #originPriceSuffix="{ value }">
183
+ <slot name="originPriceSuffix" :value="value" />
184
+ </template>
185
+ <template #tags="{ value }"><slot name="tags" :value="value" /></template>
186
+ <template #location="{ value }"><slot name="location" :value="value" /></template>
187
+ <template #distance="{ value }"><slot name="distance" :value="value" /></template>
188
+ </ItemValue>
189
+ <ItemValue :prop="propName" v-else />
190
+ </template>
191
+ </view>
192
+ </view>
116
193
  </view>
194
+ <slot name="itemRightSection" />
117
195
  </view>
196
+ <slot name="itemBottomSection" />
118
197
  </view>
119
198
 
120
199
  <!-- 竖向布局 -->
121
- <view v-if="layoutType === 'vertical'" :class="className" class="flex flex-col gap-2 bg-white">
122
- <ItemValue v-if="!!$slots?.['image']" prop="image" className="overflow-hidden">
123
- <template #image="{ value }">
124
- <slot name="image" :value="value" />
125
- </template>
126
- </ItemValue>
127
- <ItemValue v-else prop="image" className="overflow-hidden" />
128
- <view
129
- :class="'p-2'"
130
- class="flex flex-col flex-1 gap-2 justify-between text-26rpx overflow-hidden"
131
- >
132
- <view class="flex flex-col gap-2 overflow-hidden">
133
- <template v-for="propName in ['title', 'location', 'tags']" :key="propName">
134
- <ItemValue :prop="propName" v-if="!!$slots?.[propName]">
135
- <template #image="{ value }"><slot name="image" :value="value" /></template>
136
- <template #title="{ value }"><slot name="title" :value="value" /></template>
137
- <template #subTitle="{ value }"><slot name="subTitle" :value="value" /></template>
138
- <template #price="{ value }"><slot name="price" :value="value" /></template>
139
- <template #priceUnit="{ value }"><slot name="priceUnit" :value="value" /></template>
140
- <template #priceSuffix="{ value }"><slot name="priceSuffix" :value="value" /></template>
141
- <template #originPrice="{ value }"><slot name="originPrice" :value="value" /></template>
142
- <template #originPriceUnit="{ value }">
143
- <slot name="originPriceUnit" :value="value" />
144
- </template>
145
- <template #tags="{ value }"><slot name="tags" :value="value" /></template>
146
- <template #location="{ value }"><slot name="location" :value="value" /></template>
147
- <template #distance="{ value }"><slot name="distance" :value="value" /></template>
148
- </ItemValue>
149
- <ItemValue :prop="propName" v-else />
200
+ <view v-if="layoutType === 'vertical'" class="flex bg-white relative" :class="className">
201
+ <slot name="itemSection" />
202
+ <slot name="itemLeftSection" />
203
+ <view class="flex-1 flex flex-col w-full overflow-hidden">
204
+ <slot name="itemTopSection" />
205
+ <ItemValue v-if="!!$slots?.['image']" prop="image" className="overflow-hidden relative">
206
+ <template #default>
207
+ <slot name="imageSection" />
150
208
  </template>
151
- </view>
152
-
153
- <view class="flex gap-2">
154
- <view class="flex gap-[4rpx] items-end">
155
- <template v-for="propName in ['priceUnit', 'price', 'priceSuffix']" :key="propName">
209
+ <template #image="{ value }">
210
+ <slot name="image" :value="value" />
211
+ </template>
212
+ </ItemValue>
213
+ <ItemValue v-else prop="image" className="overflow-hidden relative">
214
+ <template #default>
215
+ <slot name="imageSection" />
216
+ </template>
217
+ </ItemValue>
218
+ <view
219
+ :class="'p-2'"
220
+ class="flex flex-col flex-1 gap-2 justify-between text-26rpx overflow-hidden relative"
221
+ >
222
+ <slot name="contentSection" />
223
+ <view class="flex flex-col gap-2 overflow-hidden">
224
+ <template
225
+ v-for="propName in ['title', 'subTitle', 'location', 'distance', 'tags']"
226
+ :key="propName"
227
+ >
156
228
  <ItemValue :prop="propName" v-if="!!$slots?.[propName]">
157
229
  <template #image="{ value }"><slot name="image" :value="value" /></template>
158
230
  <template #title="{ value }"><slot name="title" :value="value" /></template>
@@ -175,8 +247,70 @@ defineSlots<{
175
247
  <ItemValue :prop="propName" v-else />
176
248
  </template>
177
249
  </view>
250
+
251
+ <view class="flex gap-2">
252
+ <view class="flex gap-[4rpx] items-end" v-if="priceVisible && isNumber(price)">
253
+ <template v-for="propName in ['priceUnit', 'price', 'priceSuffix']" :key="propName">
254
+ <ItemValue :prop="propName" v-if="!!$slots?.[propName]">
255
+ <template #image="{ value }"><slot name="image" :value="value" /></template>
256
+ <template #title="{ value }"><slot name="title" :value="value" /></template>
257
+ <template #subTitle="{ value }"><slot name="subTitle" :value="value" /></template>
258
+ <template #price="{ value }"><slot name="price" :value="value" /></template>
259
+ <template #priceUnit="{ value }"><slot name="priceUnit" :value="value" /></template>
260
+ <template #priceSuffix="{ value }">
261
+ <slot name="priceSuffix" :value="value" />
262
+ </template>
263
+ <template #originPrice="{ value }">
264
+ <slot name="originPrice" :value="value" />
265
+ </template>
266
+ <template #originPriceUnit="{ value }">
267
+ <slot name="originPriceUnit" :value="value" />
268
+ </template>
269
+ <template #tags="{ value }"><slot name="tags" :value="value" /></template>
270
+ <template #location="{ value }"><slot name="location" :value="value" /></template>
271
+ <template #distance="{ value }"><slot name="distance" :value="value" /></template>
272
+ </ItemValue>
273
+ <ItemValue :prop="propName" v-else />
274
+ </template>
275
+ </view>
276
+ <view
277
+ class="flex gap-[2rpx] items-end line-through"
278
+ v-if="originPriceVisible && isNumber(originPrice)"
279
+ >
280
+ <template
281
+ v-for="propName in ['originPriceUnit', 'originPrice', 'originPriceSuffix']"
282
+ :key="propName"
283
+ >
284
+ <ItemValue :prop="propName" v-if="!!$slots?.[propName]">
285
+ <template #image="{ value }"><slot name="image" :value="value" /></template>
286
+ <template #title="{ value }"><slot name="title" :value="value" /></template>
287
+ <template #subTitle="{ value }"><slot name="subTitle" :value="value" /></template>
288
+ <template #price="{ value }"><slot name="price" :value="value" /></template>
289
+ <template #priceUnit="{ value }"><slot name="priceUnit" :value="value" /></template>
290
+ <template #priceSuffix="{ value }">
291
+ <slot name="priceSuffix" :value="value" />
292
+ </template>
293
+ <template #originPrice="{ value }">
294
+ <slot name="originPrice" :value="value" />
295
+ </template>
296
+ <template #originPriceUnit="{ value }">
297
+ <slot name="originPriceUnit" :value="value" />
298
+ </template>
299
+ <template #originPriceSuffix="{ value }">
300
+ <slot name="originPriceSuffix" :value="value" />
301
+ </template>
302
+ <template #tags="{ value }"><slot name="tags" :value="value" /></template>
303
+ <template #location="{ value }"><slot name="location" :value="value" /></template>
304
+ <template #distance="{ value }"><slot name="distance" :value="value" /></template>
305
+ </ItemValue>
306
+ <ItemValue :prop="propName" v-else />
307
+ </template>
308
+ </view>
309
+ </view>
178
310
  </view>
311
+ <slot name="itemBottomSection" />
179
312
  </view>
313
+ <slot name="itemRightSection" />
180
314
  </view>
181
315
  </template>
182
316
 
@@ -1,23 +1,20 @@
1
1
  import { CSSProperties } from 'vue'
2
-
3
- export const lcbProductItemContentTypes = [
4
- 'image',
5
- 'title',
6
- 'subTitle',
7
- 'price',
8
- 'priceUnit',
9
- 'priceSuffix',
10
- 'originPrice',
11
- 'originPriceUnit',
12
- 'tags',
13
- 'location',
14
- 'distance',
15
- ] as const
2
+ import { TagType } from '@tplc/wot/components/wd-tag/types'
16
3
 
17
4
  export interface LcbProductItemProps {
18
5
  // Define the component's prop types here
19
6
  className?: string
20
7
  layoutType?: 'vertical' | 'horizontal'
8
+ titleLineClamp?: number
9
+ tagOverflowWrap?: boolean
10
+ tagType?: TagType
11
+ tagContentColor?: string
12
+ tagBgColor?: string
13
+ tagPlain?: boolean
14
+ tagMark?: boolean
15
+ tagRound?: boolean
16
+ distanceUnit?: string
17
+
21
18
  image?: any
22
19
  title?: any
23
20
  subTitle?: any
@@ -26,6 +23,7 @@ export interface LcbProductItemProps {
26
23
  priceSuffix?: any
27
24
  originPrice?: any
28
25
  originPriceUnit?: any
26
+ originPriceSuffix?: any
29
27
  tags?: any
30
28
  location?: any
31
29
  distance?: any
@@ -38,6 +36,7 @@ export interface LcbProductItemProps {
38
36
  priceSuffixVisible?: boolean
39
37
  originPriceVisible?: boolean
40
38
  originPriceUnitVisible?: boolean
39
+ originPriceSuffixVisible?: boolean
41
40
  tagsVisible?: boolean
42
41
  locationVisible?: boolean
43
42
  distanceVisible?: boolean
@@ -50,6 +49,7 @@ export interface LcbProductItemProps {
50
49
  priceSuffixClass?: string
51
50
  originPriceClass?: string
52
51
  originPriceUnitClass?: string
52
+ originPriceSuffixClass?: string
53
53
  tagsClass?: string
54
54
  tagsWrapperClass?: string
55
55
  locationClass?: string
@@ -63,6 +63,7 @@ export interface LcbProductItemProps {
63
63
  priceSuffixStyle?: CSSProperties
64
64
  originPriceStyle?: CSSProperties
65
65
  originPriceUnitStyle?: CSSProperties
66
+ originPriceSuffixStyle?: CSSProperties
66
67
  tagsStyle?: CSSProperties
67
68
  tagsWrapperStyle?: CSSProperties
68
69
  locationStyle?: CSSProperties
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tplc/business",
3
- "version": "0.1.12",
3
+ "version": "0.1.13",
4
4
  "keywords": [
5
5
  "业务组件"
6
6
  ],
@@ -24,9 +24,9 @@ declare const __VLS_component: import('vue').DefineComponent<
24
24
  {
25
25
  listType: 'horizontal' | 'list' | 'grid' | 'waterfall'
26
26
  pageFilterType: string
27
+ pageListProps: import('./components/FilterList/type').PageListProps
27
28
  border: boolean
28
29
  styleMode: 'default' | 'plain'
29
- pageListProps: import('./components/FilterList/type').PageListProps
30
30
  },
31
31
  {}
32
32
  >
@@ -22,4 +22,3 @@ export interface FilterItemProps {
22
22
  options?: Option[]
23
23
  test?: 1
24
24
  }
25
- export declare const defaultLcbListProps: LcbListProps
@@ -7,6 +7,7 @@ declare function __VLS_template(): Readonly<{
7
7
  priceSuffix(props: { value: any }): any
8
8
  originPrice(props: { value: any }): any
9
9
  originPriceUnit(props: { value: any }): any
10
+ originPriceSuffix(props: { value: any }): any
10
11
  tags(props: { value: any }): any
11
12
  location(props: { value: any }): any
12
13
  distance(props: { value: any }): any
@@ -19,6 +20,7 @@ declare function __VLS_template(): Readonly<{
19
20
  priceSuffix(props: { value: any }): any
20
21
  originPrice(props: { value: any }): any
21
22
  originPriceUnit(props: { value: any }): any
23
+ originPriceSuffix(props: { value: any }): any
22
24
  tags(props: { value: any }): any
23
25
  location(props: { value: any }): any
24
26
  distance(props: { value: any }): any
@@ -8,9 +8,17 @@ declare function __VLS_template(): Readonly<{
8
8
  priceSuffix(props: { value: any }): any
9
9
  originPrice(props: { value: any }): any
10
10
  originPriceUnit(props: { value: any }): any
11
+ originPriceSuffix(props: { value: any }): any
11
12
  tags(props: { value: any }): any
12
13
  location(props: { value: any }): any
13
14
  distance(props: { value: any }): any
15
+ itemSection(): any
16
+ itemTopSection(): any
17
+ itemBottomSection(): any
18
+ itemLeftSection(): any
19
+ itemRightSection(): any
20
+ imageSection(): any
21
+ contentSection(): any
14
22
  }> & {
15
23
  image(props: { value: any }): any
16
24
  title(props: { value: any }): any
@@ -20,15 +28,30 @@ declare function __VLS_template(): Readonly<{
20
28
  priceSuffix(props: { value: any }): any
21
29
  originPrice(props: { value: any }): any
22
30
  originPriceUnit(props: { value: any }): any
31
+ originPriceSuffix(props: { value: any }): any
23
32
  tags(props: { value: any }): any
24
33
  location(props: { value: any }): any
25
34
  distance(props: { value: any }): any
35
+ itemSection(): any
36
+ itemTopSection(): any
37
+ itemBottomSection(): any
38
+ itemLeftSection(): any
39
+ itemRightSection(): any
40
+ imageSection(): any
41
+ contentSection(): any
26
42
  }
27
43
  declare const __VLS_component: import('vue').DefineComponent<
28
44
  __VLS_WithDefaults<
29
45
  __VLS_TypePropsToOption<LcbProductItemProps>,
30
46
  {
31
47
  layoutType: string
48
+ titleLineClamp: number
49
+ tagOverflowWrap: boolean
50
+ tagType: string
51
+ tagPlain: boolean
52
+ tagMark: boolean
53
+ tagRound: boolean
54
+ distanceUnit: string
32
55
  priceUnit: string
33
56
  originPriceUnit: string
34
57
  imageVisible: boolean
@@ -39,6 +62,7 @@ declare const __VLS_component: import('vue').DefineComponent<
39
62
  priceSuffixVisible: boolean
40
63
  originPriceVisible: boolean
41
64
  originPriceUnitVisible: boolean
65
+ originPriceSuffixVisible: boolean
42
66
  tagsVisible: boolean
43
67
  locationVisible: boolean
44
68
  distanceVisible: boolean
@@ -59,6 +83,13 @@ declare const __VLS_component: import('vue').DefineComponent<
59
83
  __VLS_TypePropsToOption<LcbProductItemProps>,
60
84
  {
61
85
  layoutType: string
86
+ titleLineClamp: number
87
+ tagOverflowWrap: boolean
88
+ tagType: string
89
+ tagPlain: boolean
90
+ tagMark: boolean
91
+ tagRound: boolean
92
+ distanceUnit: string
62
93
  priceUnit: string
63
94
  originPriceUnit: string
64
95
  imageVisible: boolean
@@ -69,6 +100,7 @@ declare const __VLS_component: import('vue').DefineComponent<
69
100
  priceSuffixVisible: boolean
70
101
  originPriceVisible: boolean
71
102
  originPriceUnitVisible: boolean
103
+ originPriceSuffixVisible: boolean
72
104
  tagsVisible: boolean
73
105
  locationVisible: boolean
74
106
  distanceVisible: boolean
@@ -80,6 +112,13 @@ declare const __VLS_component: import('vue').DefineComponent<
80
112
  layoutType: 'vertical' | 'horizontal'
81
113
  priceUnit: any
82
114
  originPriceUnit: any
115
+ titleLineClamp: number
116
+ tagOverflowWrap: boolean
117
+ tagType: import('@tplc/wot/components/wd-tag/types').TagType
118
+ tagPlain: boolean
119
+ tagMark: boolean
120
+ tagRound: boolean
121
+ distanceUnit: string
83
122
  imageVisible: boolean
84
123
  titleVisible: boolean
85
124
  subTitleVisible: boolean
@@ -88,6 +127,7 @@ declare const __VLS_component: import('vue').DefineComponent<
88
127
  priceSuffixVisible: boolean
89
128
  originPriceVisible: boolean
90
129
  originPriceUnitVisible: boolean
130
+ originPriceSuffixVisible: boolean
91
131
  tagsVisible: boolean
92
132
  locationVisible: boolean
93
133
  distanceVisible: boolean
@@ -1,20 +1,17 @@
1
1
  import { CSSProperties } from 'vue'
2
- export declare const lcbProductItemContentTypes: readonly [
3
- 'image',
4
- 'title',
5
- 'subTitle',
6
- 'price',
7
- 'priceUnit',
8
- 'priceSuffix',
9
- 'originPrice',
10
- 'originPriceUnit',
11
- 'tags',
12
- 'location',
13
- 'distance',
14
- ]
2
+ import { TagType } from '@tplc/wot/components/wd-tag/types'
15
3
  export interface LcbProductItemProps {
16
4
  className?: string
17
5
  layoutType?: 'vertical' | 'horizontal'
6
+ titleLineClamp?: number
7
+ tagOverflowWrap?: boolean
8
+ tagType?: TagType
9
+ tagContentColor?: string
10
+ tagBgColor?: string
11
+ tagPlain?: boolean
12
+ tagMark?: boolean
13
+ tagRound?: boolean
14
+ distanceUnit?: string
18
15
  image?: any
19
16
  title?: any
20
17
  subTitle?: any
@@ -23,6 +20,7 @@ export interface LcbProductItemProps {
23
20
  priceSuffix?: any
24
21
  originPrice?: any
25
22
  originPriceUnit?: any
23
+ originPriceSuffix?: any
26
24
  tags?: any
27
25
  location?: any
28
26
  distance?: any
@@ -34,6 +32,7 @@ export interface LcbProductItemProps {
34
32
  priceSuffixVisible?: boolean
35
33
  originPriceVisible?: boolean
36
34
  originPriceUnitVisible?: boolean
35
+ originPriceSuffixVisible?: boolean
37
36
  tagsVisible?: boolean
38
37
  locationVisible?: boolean
39
38
  distanceVisible?: boolean
@@ -45,6 +44,7 @@ export interface LcbProductItemProps {
45
44
  priceSuffixClass?: string
46
45
  originPriceClass?: string
47
46
  originPriceUnitClass?: string
47
+ originPriceSuffixClass?: string
48
48
  tagsClass?: string
49
49
  tagsWrapperClass?: string
50
50
  locationClass?: string
@@ -57,6 +57,7 @@ export interface LcbProductItemProps {
57
57
  priceSuffixStyle?: CSSProperties
58
58
  originPriceStyle?: CSSProperties
59
59
  originPriceUnitStyle?: CSSProperties
60
+ originPriceSuffixStyle?: CSSProperties
60
61
  tagsStyle?: CSSProperties
61
62
  tagsWrapperStyle?: CSSProperties
62
63
  locationStyle?: CSSProperties