@tplc/business 0.0.13 → 0.0.15

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 (68) hide show
  1. package/action.d.ts +28 -0
  2. package/components/lcb-banner/types.ts +1 -1
  3. package/components/lcb-banner-block/lcb-banner-block.vue +1 -1
  4. package/components/lcb-banner-block/types.ts +1 -1
  5. package/components/lcb-block/lcb-block.vue +18 -1
  6. package/components/lcb-block/types.ts +5 -0
  7. package/components/lcb-filter/api.ts +56 -0
  8. package/components/lcb-filter/components/ActionView/index.vue +32 -0
  9. package/components/lcb-filter/components/ComponentGroup/index.vue +77 -0
  10. package/components/lcb-filter/components/ComponentGroup/type.ts +6 -0
  11. package/components/lcb-filter/components/FilterSelect/index.vue +60 -0
  12. package/components/lcb-filter/components/FilterSelect/type.ts +3 -0
  13. package/components/lcb-filter/components/FilterSlider/index.vue +63 -0
  14. package/components/lcb-filter/components/FilterSlider/types.ts +3 -0
  15. package/components/lcb-filter/components/SelectTagView/index.vue +42 -0
  16. package/components/lcb-filter/components/TagSelect/index.vue +151 -0
  17. package/components/lcb-filter/components/TagSelect/type.ts +5 -0
  18. package/components/lcb-filter/components/TreeSelect/index.vue +123 -0
  19. package/components/lcb-filter/components/TreeSelect/type.ts +3 -0
  20. package/components/lcb-filter/hooks/useSelect.ts +45 -0
  21. package/components/lcb-filter/index.scss +30 -0
  22. package/components/lcb-filter/lcb-filter.vue +125 -0
  23. package/components/lcb-filter/types.ts +18 -0
  24. package/components/lcb-grid/lcb-grid.vue +1 -1
  25. package/components/lcb-grid/types.ts +1 -1
  26. package/components/lcb-home-search/lcb-home-search.vue +10 -0
  27. package/components/lcb-img-nav/types.ts +1 -1
  28. package/components/lcb-nav/lcb-nav.vue +15 -18
  29. package/components/lcb-nav/types.ts +2 -2
  30. package/components/lcb-swiper/lcb-swiper.vue +1 -1
  31. package/components/lcb-title/lcb-title.vue +1 -1
  32. package/components/lcb-user-order/lcb-user-order.vue +90 -0
  33. package/components/lcb-user-order/types.ts +59 -0
  34. package/components/lcb-user-top/lcb-user-top.vue +100 -0
  35. package/components/lcb-user-top/types.ts +69 -0
  36. package/global.d.ts +8 -11
  37. package/hooks/useTranslate.ts +13 -0
  38. package/iconfonts/index.css +156 -0
  39. package/index.ts +37 -0
  40. package/package.json +6 -3
  41. package/types/components/lcb-banner/types.d.ts +1 -1
  42. package/types/components/lcb-banner-block/types.d.ts +1 -1
  43. package/types/components/lcb-block/lcb-block.vue.d.ts +26 -3
  44. package/types/components/lcb-block/types.d.ts +5 -0
  45. package/types/components/lcb-filter/api.d.ts +49 -0
  46. package/types/components/lcb-filter/components/ActionView/index.vue.d.ts +34 -0
  47. package/types/components/lcb-filter/components/ComponentGroup/index.vue.d.ts +32 -0
  48. package/types/components/lcb-filter/components/ComponentGroup/type.d.ts +5 -0
  49. package/types/components/lcb-filter/components/FilterSelect/index.vue.d.ts +41 -0
  50. package/types/components/lcb-filter/components/FilterSelect/type.d.ts +2 -0
  51. package/types/components/lcb-filter/components/FilterSlider/index.vue.d.ts +36 -0
  52. package/types/components/lcb-filter/components/FilterSlider/types.d.ts +2 -0
  53. package/types/components/lcb-filter/components/SelectTagView/index.vue.d.ts +39 -0
  54. package/types/components/lcb-filter/components/TagSelect/index.vue.d.ts +39 -0
  55. package/types/components/lcb-filter/components/TagSelect/type.d.ts +4 -0
  56. package/types/components/lcb-filter/components/TreeSelect/index.vue.d.ts +41 -0
  57. package/types/components/lcb-filter/components/TreeSelect/type.d.ts +2 -0
  58. package/types/components/lcb-filter/hooks/useSelect.d.ts +25 -0
  59. package/types/components/lcb-filter/lcb-filter.vue.d.ts +57 -0
  60. package/types/components/lcb-filter/types.d.ts +17 -0
  61. package/types/components/lcb-grid/types.d.ts +1 -1
  62. package/types/components/lcb-img-nav/lcb-img-nav.vue.d.ts +1 -1
  63. package/types/components/lcb-img-nav/types.d.ts +1 -1
  64. package/types/components/lcb-nav/types.d.ts +2 -2
  65. package/types/components/lcb-user-order/lcb-user-order.vue.d.ts +62 -0
  66. package/types/components/lcb-user-order/types.d.ts +50 -0
  67. package/types/components/lcb-user-top/lcb-user-top.vue.d.ts +92 -0
  68. package/types/components/lcb-user-top/types.d.ts +24 -0
package/action.d.ts ADDED
@@ -0,0 +1,28 @@
1
+ export interface ActionView {
2
+ title: string
3
+ icon?: string
4
+ link: string
5
+ url?: string
6
+ }
7
+ export type IResData<T> = {
8
+ code: number
9
+ msg: string
10
+ data: T
11
+ }
12
+
13
+ export interface LcbGlobal {
14
+ http: {
15
+ get<T>(url: string, query?: Record<string, any> | undefined): Promise<IResData<T>>
16
+ post<T>(
17
+ url: string,
18
+ data?: Record<string, any> | undefined,
19
+ query?: Record<string, any> | undefined,
20
+ ): Promise<IResData<T>>
21
+ }
22
+ }
23
+
24
+ global {
25
+ interface Uni {
26
+ $lcb: LcbGlobal
27
+ }
28
+ }
@@ -1,4 +1,4 @@
1
- import { ActionView } from 'global'
1
+ import { ActionView } from 'action'
2
2
 
3
3
  export interface LcbBannerProps {
4
4
  items?: Partial<ActionView>[]
@@ -45,7 +45,7 @@ import { LcbBannerListProps } from './types'
45
45
  import { computed } from 'vue'
46
46
  import { LcbBannerProps } from '../lcb-banner/types'
47
47
  defineOptions({
48
- name: 'LcbBannerList',
48
+ name: 'LcbBannerBlock',
49
49
  options: {
50
50
  addGlobalClass: true,
51
51
  virtualHost: true,
@@ -1,5 +1,5 @@
1
1
  import { LcbBlockProps } from '../lcb-block/types'
2
- import { ActionView } from 'global'
2
+ import { ActionView } from 'action'
3
3
  export interface LcbBannerListProps extends LcbBlockProps {
4
4
  items?: Partial<ActionView>[]
5
5
  /** 风格 1.顶部title 2.底部title */
@@ -14,7 +14,12 @@
14
14
  borderRadius: transformValueUnit(radius),
15
15
  color,
16
16
  backgroundColor,
17
+ backgroundImage: backgroundImage ? `url('${backgroundImage}')` : '',
18
+ backgroundRepeat,
19
+ backgroundPosition,
20
+ backgroundSize,
17
21
  fontSize: transformValueUnit(fontSize),
22
+ boxShadow,
18
23
  }"
19
24
  :class="{
20
25
  card,
@@ -28,8 +33,20 @@
28
33
  <script setup lang="ts">
29
34
  import { LcbBlockProps } from './types'
30
35
  import { transformValueUnit } from '../../utils/transform'
36
+ defineOptions({
37
+ name: 'LcbBlock',
38
+ options: {
39
+ addGlobalClass: true,
40
+ virtualHost: true,
41
+ styleIsolation: 'shared',
42
+ },
43
+ })
31
44
 
32
- withDefaults(defineProps<LcbBlockProps>(), {})
45
+ withDefaults(defineProps<LcbBlockProps>(), {
46
+ backgroundSize: 'cover',
47
+ backgroundRepeat: 'no-repeat',
48
+ backgroundPosition: `top center`,
49
+ } as LcbBlockProps)
33
50
  </script>
34
51
  <style lang="scss" scoped>
35
52
  .card {
@@ -2,6 +2,7 @@ export interface LcbBlockProps {
2
2
  marginTop?: number
3
3
  marginBottom?: number
4
4
  backgroundColor?: string
5
+ backgroundImage?: string
5
6
  paddingTop?: number
6
7
  paddingBottom?: number
7
8
  color?: string
@@ -14,4 +15,8 @@ export interface LcbBlockProps {
14
15
  paddingRight?: number
15
16
  marginLeft?: number
16
17
  marginRight?: number
18
+ backgroundRepeat?: 'repeat' | 'repeat-x' | 'repeat-y' | 'no-repeat'
19
+ backgroundSize?: string
20
+ backgroundPosition?: string
21
+ boxShadow?: string
17
22
  }
@@ -0,0 +1,56 @@
1
+ import { Option } from './types'
2
+ export interface LcbFilterResult {
3
+ btnComponent: BtnComponent
4
+ filterTags: FilterTags
5
+ filterComponent: FilterComponent[]
6
+ }
7
+
8
+ export interface FilterComponent {
9
+ fitlerName?: string
10
+ component: string
11
+ defaultValue?: string
12
+ defaultName?: string
13
+ valueName: string
14
+ componentProps: ComponentProps3
15
+ }
16
+
17
+ interface ComponentProps3 {
18
+ mode?: 'multiple' | 'single'
19
+ apiPath?: string
20
+ options?: Option[]
21
+ componentList?: ComponentList[]
22
+ }
23
+
24
+ export interface ComponentList {
25
+ fitlerName: string
26
+ component: string
27
+ valueName: string
28
+ defaultValue?: string | string[] | number[]
29
+ componentProps: ComponentProps
30
+ }
31
+
32
+ export interface FilterTags {
33
+ component: string
34
+ valueName: string
35
+ defaultValue?: string
36
+ defaultName?: string
37
+ componentProps: ComponentProps
38
+ }
39
+
40
+ export interface ComponentProps {
41
+ mode?: 'multiple' | 'single'
42
+ max: number
43
+ min: number
44
+ apiPath: string
45
+ options: Option[]
46
+ unit?: string
47
+ }
48
+
49
+ interface BtnComponent {
50
+ postRequest: string
51
+ }
52
+
53
+ export const getFilterDetail = (val: string) =>
54
+ uni.$lcb.http.post<LcbFilterResult>('/pageDecoration/filter/detail', {
55
+ pageFilterType: val,
56
+ })
@@ -0,0 +1,32 @@
1
+ <template>
2
+ <view class="action-view flex justify-center items-center">
3
+ <wd-button type="info" @click="emits('cancel')" :disabled="disabled">清空</wd-button>
4
+ <wd-button type="primary" custom-class="flex-1" @click="emits('submit')">查看房屋</wd-button>
5
+ </view>
6
+ </template>
7
+
8
+ <script setup lang="ts">
9
+ defineProps({
10
+ disabled: {
11
+ type: Boolean,
12
+ },
13
+ })
14
+ const emits = defineEmits(['cancel', 'submit'])
15
+ </script>
16
+ <style lang="scss" scoped>
17
+ .action-view {
18
+ width: 100%;
19
+ height: 118rpx;
20
+ background: #ffffff;
21
+ box-shadow: 0rpx 0rpx 6rpx 0rpx rgba(0, 0, 0, 0.04);
22
+ gap: 50rpx;
23
+ padding: 20rpx 52rpx;
24
+ box-sizing: border-box;
25
+ :deep(.wd-button) {
26
+ height: 100%;
27
+ line-height: 100%;
28
+ font-size: 30rpx;
29
+ border-radius: 40rpx;
30
+ }
31
+ }
32
+ </style>
@@ -0,0 +1,77 @@
1
+ <template>
2
+ <view class="px-5 pt-2 pb-4 bg-#fafafa max-h-70vh overflow-y-auto box-border">
3
+ <view v-for="child in componentList" :key="child.valueName" class="mb-12rpx">
4
+ <view class="lcb-filter__group-title mt2">
5
+ {{ child.fitlerName }}
6
+ <view v-if="child.componentProps.mode === 'multiple'" class="!text-22rpx">可多选</view>
7
+ </view>
8
+ <view class="grid grid-cols-4 gap-22rpx" v-if="child.component === 'tagSelect'">
9
+ <TagSelect v-bind="child.componentProps" v-model="innerFilter[child.valueName]" />
10
+ </view>
11
+ <FilterSlider
12
+ v-if="child.component === 'slider'"
13
+ v-bind="child.componentProps"
14
+ v-model="innerFilter[child.valueName]"
15
+ />
16
+ </view>
17
+ </view>
18
+ <ActionView :disabled="disabled" @cancel="onCancel" @submit="onSubmit" />
19
+ </template>
20
+
21
+ <script setup lang="ts">
22
+ import { computed, ref } from 'vue'
23
+ import { ComponentGroupProps } from './type'
24
+ import FilterSlider from '../FilterSlider/index.vue'
25
+ import TagSelect from '../TagSelect/index.vue'
26
+ import ActionView from '../ActionView/index.vue'
27
+ const props = defineProps<ComponentGroupProps>()
28
+ const emits = defineEmits(['submit'])
29
+ const innerFilter = ref<Record<string, any>>({})
30
+ props.componentList?.forEach((item) => {
31
+ innerFilter.value[item.valueName] = props.filter?.[item.valueName]
32
+ })
33
+ const disabled = computed(() => {
34
+ const list = (props.componentList || []).filter((item) => {
35
+ if (item.component === 'slider') {
36
+ return (
37
+ item.componentProps.min === innerFilter.value[item.valueName][0] &&
38
+ item.componentProps.max === innerFilter.value[item.valueName][1]
39
+ )
40
+ } else {
41
+ return !innerFilter.value[item.valueName]
42
+ }
43
+ })
44
+ return list.length === (props.componentList || [])?.length
45
+ })
46
+
47
+ const onCancel = () => {
48
+ props.componentList?.forEach((key) => {
49
+ if (key.component === 'slider') {
50
+ innerFilter.value[key.valueName] = key.defaultValue
51
+ } else {
52
+ innerFilter.value[key.valueName] = key.defaultValue
53
+ }
54
+ })
55
+ }
56
+ const onSubmit = () => {
57
+ emits('submit', innerFilter.value)
58
+ }
59
+ </script>
60
+ <style lang="scss" scoped>
61
+ .lcb-filter {
62
+ &__group-title {
63
+ font-size: 30rpx;
64
+ color: #333;
65
+ font-weight: 500;
66
+ margin-bottom: 24rpx;
67
+ display: flex;
68
+ align-items: center;
69
+
70
+ > view {
71
+ font-size: 24rpx;
72
+ color: #999999;
73
+ margin-left: 20rpx;
74
+ }
75
+ }
76
+ }
77
+ </style>
@@ -0,0 +1,6 @@
1
+ import { ComponentList } from 'components/lcb-filter/api'
2
+
3
+ export interface ComponentGroupProps {
4
+ componentList?: ComponentList[]
5
+ filter?: Record<string, string>
6
+ }
@@ -0,0 +1,60 @@
1
+ <template>
2
+ <view class="max-h-60vh overflow-y-auto">
3
+ <view
4
+ v-for="item in options"
5
+ :key="`${item.value}`"
6
+ @click="onItemClick(item)"
7
+ class="filter-select flex justify-between items-center"
8
+ :class="getChecked(item) ? 'filter-select__choose' : ''"
9
+ >
10
+ {{ item.label }}
11
+ <wd-icon name="check" custom-class="choose_icon" v-if="model === item.value" />
12
+ </view>
13
+ </view>
14
+ </template>
15
+
16
+ <script setup lang="ts">
17
+ import { FilterSelectProps } from './type'
18
+ import useSelect from '../../hooks/useSelect'
19
+ import { watch, watchEffect } from 'vue'
20
+ const props = defineProps<FilterSelectProps>()
21
+ const model = defineModel<string | string[]>()
22
+ const modelTitle = defineModel<string>('title')
23
+ const { onItemClick, options, getChecked } = useSelect(props, { model })
24
+ const emits = defineEmits(['submit'])
25
+ watchEffect(() => {
26
+ modelTitle.value = options.value?.find((v) => v.value === model.value)?.label
27
+ })
28
+ watch(
29
+ () => model.value,
30
+ (val) => {
31
+ emits('submit')
32
+ },
33
+ )
34
+ </script>
35
+ <style lang="scss" scoped>
36
+ @import '@tplc/wot/components/common/abstracts/variable';
37
+ .choose_icon {
38
+ color: $-color-theme;
39
+ font-size: $-cell-arrow-size;
40
+ }
41
+ .filter-select {
42
+ padding: 30rpx 40rpx;
43
+ font-size: $-cell-title-fs;
44
+ position: relative;
45
+ &__choose {
46
+ color: $-color-theme;
47
+ // 透明背景颜色
48
+ &::after {
49
+ content: '';
50
+ position: absolute;
51
+ top: 0;
52
+ left: 0;
53
+ width: 100%;
54
+ height: 100%;
55
+ opacity: 0.05;
56
+ background-color: $-color-theme;
57
+ }
58
+ }
59
+ }
60
+ </style>
@@ -0,0 +1,3 @@
1
+ import { FilterItemProps } from '../../types'
2
+
3
+ export interface FilterSelectProps extends FilterItemProps {}
@@ -0,0 +1,63 @@
1
+ <template>
2
+ <view>
3
+ <wd-slider hide-label :max="max" :min="min" v-model="innerValue" @dragend="onDragend" />
4
+ <view class="grid grid-cols-4 gap-4 mt-2">
5
+ <SelectTagView
6
+ v-for="item in options"
7
+ :key="item.label"
8
+ :title="item.label"
9
+ :custom="item.value === 'custom'"
10
+ :checked="getChecked(item.value)"
11
+ @click="onItemClick(item.value)"
12
+ />
13
+ </view>
14
+ </view>
15
+ </template>
16
+
17
+ <script setup lang="ts">
18
+ import { FilterSliderProps } from './types'
19
+ import SelectTagView from '../SelectTagView/index.vue'
20
+ import { ref, watch } from 'vue'
21
+
22
+ const props = defineProps<FilterSliderProps>()
23
+ const model = defineModel<number[]>()
24
+ const innerValue = ref<number[]>()
25
+ const onItemClick = (value) => {
26
+ if (Array.isArray(value)) {
27
+ if (value[1]) {
28
+ innerValue.value = value
29
+ } else {
30
+ innerValue.value = [value[0], value[0]]
31
+ }
32
+ }
33
+ }
34
+ watch(
35
+ () => model.value,
36
+ (val) => {
37
+ if (val?.length === 1) {
38
+ innerValue.value = [val[0], val[0]]
39
+ } else {
40
+ innerValue.value = val
41
+ }
42
+ },
43
+ { immediate: true },
44
+ )
45
+ const onDragend = () => {
46
+ if (innerValue.value?.[0] === props.max && innerValue.value?.[1] === props.max) {
47
+ model.value = [innerValue.value?.[0]]
48
+ } else {
49
+ model.value = innerValue.value
50
+ }
51
+ }
52
+
53
+ const getChecked = (value) => {
54
+ if (Array.isArray(value) && innerValue.value) {
55
+ if (value[1]) {
56
+ return innerValue.value[0] === value[0] && innerValue.value[1] === value[1]
57
+ } else {
58
+ return innerValue.value[0] === value[0] && innerValue.value[1] === value[0]
59
+ }
60
+ }
61
+ }
62
+ </script>
63
+ <style lang="scss" scoped></style>
@@ -0,0 +1,3 @@
1
+ import { ComponentProps } from '../../api'
2
+
3
+ export interface FilterSliderProps extends ComponentProps {}
@@ -0,0 +1,42 @@
1
+ <template>
2
+ <view
3
+ class="select-tag"
4
+ :class="[{ 'select-tag-checked': checked, 'select-tag-small': size === 'small' }]"
5
+ >
6
+ {{ title }}
7
+ </view>
8
+ </template>
9
+
10
+ <script setup lang="ts">
11
+ defineProps<{ title: string; checked?: boolean; size?: 'small' | 'normal' }>()
12
+ </script>
13
+ <style lang="scss" scoped>
14
+ @import '@tplc/wot/components/common/abstracts/variable';
15
+ .select-tag {
16
+ width: 150rpx;
17
+ height: 56rpx;
18
+ background: #f5f5f7;
19
+ border-radius: 53rpx;
20
+ font-size: 24rpx;
21
+ color: #333333;
22
+ line-height: 56rpx;
23
+ overflow: hidden;
24
+ text-overflow: ellipsis;
25
+ white-space: nowrap;
26
+ padding: 0 6rpx;
27
+ box-sizing: border-box;
28
+ text-align: center;
29
+ margin-bottom: 16rpx;
30
+ &-checked {
31
+ background: $-color-theme;
32
+ color: #ffffff;
33
+ }
34
+ &-small {
35
+ width: 112rpx !important;
36
+ height: 42rpx !important;
37
+ border-radius: 21rpx !important;
38
+ line-height: 42rpx !important;
39
+ margin-bottom: 0rpx !important;
40
+ }
41
+ }
42
+ </style>
@@ -0,0 +1,151 @@
1
+ <template>
2
+ <view v-for="item in options" :key="`${item.value}`" @click="onItemClick(item)">
3
+ <template v-if="item.custom">
4
+ <view
5
+ class="select-tag"
6
+ @click.stop="onCustomClick(item)"
7
+ :class="{
8
+ 'select-tag-checked': showInput || getChecked(item),
9
+ }"
10
+ >
11
+ <view v-if="showInput" class="flex justify-center items-center">
12
+ <input
13
+ type="number"
14
+ class="text-24rpx min-w-5"
15
+ focus
16
+ v-model="inputValue"
17
+ @input="onInput(item, $event)"
18
+ @blur="onBlur(item)"
19
+ @confirm="onConfirm"
20
+ />
21
+ </view>
22
+ <template v-else>
23
+ <view v-if="item.value" class="text-22rpx leading-none">
24
+ <view @click.stop="onCustomClick(item, true)">{{ item.label }}</view>
25
+ <view class="text-16rpx mt-4rpx">自定义</view>
26
+ </view>
27
+ <view v-else>自定义</view>
28
+ </template>
29
+ </view>
30
+ </template>
31
+ <SelectTagView
32
+ :title="item.label"
33
+ :checked="getChecked(item)"
34
+ :custom="item.value === 'custom'"
35
+ :size="size"
36
+ v-else
37
+ />
38
+ </view>
39
+ </template>
40
+
41
+ <script setup lang="ts">
42
+ import { TagSelectProps } from './type'
43
+ import useSelect from '../../hooks/useSelect'
44
+ import { ref, watchEffect, nextTick } from 'vue'
45
+ import SelectTagView from '../SelectTagView/index.vue'
46
+ import { Option } from '../../types'
47
+ const props = defineProps<TagSelectProps>()
48
+ const model = defineModel<string | string[]>()
49
+ const modelTitle = defineModel<string>('title')
50
+ const showInput = ref(false)
51
+ const inputValue = ref('')
52
+ const { options, onItemClick, getChecked } = useSelect(props, { model })
53
+ watchEffect(() => {
54
+ modelTitle.value = options.value?.find((v) => v.value === model.value)?.label
55
+ })
56
+ const onCustomClick = (item: Option, edit = false) => {
57
+ if (item.value && !edit) {
58
+ onItemClick(item)
59
+ } else {
60
+ inputValue.value = `${item.value}`
61
+ if (props.mode !== 'multiple') {
62
+ model.value = undefined
63
+ }
64
+ showInput.value = true
65
+ }
66
+ }
67
+ const onBlur = (item: Option) => {
68
+ if (inputValue.value) {
69
+ item.label = inputValue.value + item.unit
70
+ item.value = inputValue.value
71
+ onItemClick(item)
72
+ } else {
73
+ item.value = ''
74
+ if (props.mode !== 'multiple') {
75
+ model.value = undefined
76
+ }
77
+ }
78
+ showInput.value = false
79
+ }
80
+ const onConfirm = () => {
81
+ showInput.value = false
82
+ }
83
+ const onInput = (item: Option, e) => {
84
+ if (item.max && parseInt(e.detail.value) > item.max) {
85
+ uni.showToast({
86
+ title: item.unit + '数最多输入 ' + item.max,
87
+ icon: 'none',
88
+ })
89
+ nextTick(() => {
90
+ inputValue.value = item.max + ''
91
+ })
92
+ } else if (item.min && parseInt(e.detail.value) < item.min) {
93
+ uni.showToast({
94
+ title: item.unit + '数最少输入 ' + item.min,
95
+ icon: 'none',
96
+ })
97
+ nextTick(() => {
98
+ inputValue.value = item.min + ''
99
+ })
100
+ }
101
+ }
102
+ </script>
103
+ <style lang="scss" scoped>
104
+ @import '@tplc/wot/components/common/abstracts/variable';
105
+ .choose_icon {
106
+ color: $-color-theme;
107
+ font-size: $-cell-arrow-size;
108
+ }
109
+ .filter-select {
110
+ font-size: $-cell-title-fs;
111
+ position: relative;
112
+ &__choose {
113
+ color: $-color-theme;
114
+ // 透明背景颜色
115
+ &::after {
116
+ content: '';
117
+ position: absolute;
118
+ top: 0;
119
+ left: 0;
120
+ width: 100%;
121
+ height: 100%;
122
+ opacity: 0.05;
123
+ background-color: $-color-theme;
124
+ }
125
+ }
126
+ }
127
+ .select-tag {
128
+ width: 150rpx;
129
+ height: 56rpx;
130
+ background: #f5f5f7;
131
+ border-radius: 53rpx;
132
+ font-size: 24rpx;
133
+ color: #333333;
134
+ line-height: 56rpx;
135
+ overflow: hidden;
136
+ text-overflow: ellipsis;
137
+ white-space: nowrap;
138
+ padding: 0 12rpx;
139
+ box-sizing: border-box;
140
+ text-align: center;
141
+ display: flex;
142
+ justify-content: center;
143
+ align-items: center;
144
+ flex-direction: column;
145
+ margin-bottom: 16rpx;
146
+ &-checked {
147
+ background: $-color-theme;
148
+ color: #ffffff;
149
+ }
150
+ }
151
+ </style>
@@ -0,0 +1,5 @@
1
+ import { FilterItemProps } from '../../types'
2
+
3
+ export interface TagSelectProps extends FilterItemProps {
4
+ size?: 'small' | 'normal'
5
+ }