闫增涛
2024-02-23 fdfb3ca757ecd6c396632ed276ff354671d3a7e5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
Component({
  options: {
    addGlobalClass: true,
    multipleSlots: true, // 在组件定义时的选项中启用多slot支持
  },
 
  externalClasses: [
    'title-class',
    'desc-class',
    'num-class',
    'thumb-class',
    'specs-class',
    'price-class',
    'origin-price-class',
    'price-prefix-class',
  ],
 
  relations: {
    '../order-card/index': {
      type: 'ancestor',
      linked(target) {
        this.parent = target;
      },
    },
  },
 
  properties: {
    id: String,
    hidden: {
      // 设置为null代表不做类型转换
      type: null,
      observer(hidden) {
        // null就是代表没有设置,没有设置的话不setData,防止祖先组件触发的setHidden操作被覆盖
        if (hidden !== null) {
          this.setHidden(!!hidden);
        }
      },
    },
    data: Object,
    layout: {
      type: String,
      value: 'horizontal',
    },
    thumbMode: {
      type: String,
      value: 'aspectFill',
    },
    thumbWidth: Number,
    thumbHeight: Number,
    thumbWidthInPopup: Number,
    thumbHeightInPopup: Number,
    priceFill: {
      type: Boolean,
      value: true,
    },
    currency: {
      type: String,
      value: '¥',
    },
    lazyLoad: Boolean,
    centered: Boolean,
    showCart: Boolean,
    pricePrefix: String,
    cartSize: {
      type: Number,
      value: 48,
    },
    cartColor: {
      type: String,
      value: '#FA550F',
    },
    disablePopup: Boolean,
  },
 
  data: {
    hiddenInData: false,
    specsPopup: {
      insert: false,
      show: false,
    },
  },
 
  currentInTapSpecs: false,
 
  lifetimes: {
    ready() {
      const { hidden } = this.properties;
      if (hidden !== null) {
        this.setHidden(!!hidden);
      }
    },
  },
 
  methods: {
    closeSpecsPopup() {
      this.setData({
        'specsPopup.show': false,
      });
      this.triggerEvent('specsclose', { good: this.properties.data });
    },
 
    removeSpecsPopup() {
      this.setData({
        'specsPopup.insert': false,
      });
    },
 
    onClick(e) {
      if (this.currentInTapSpecs) {
        this.currentInTapSpecs = false;
        return;
      }
      this.triggerEvent('click', e.detail);
    },
 
    onClickThumb(e) {
      this.triggerEvent('thumb', e.detail);
    },
 
    onClickTag(e) {
      this.triggerEvent('tag', e.detail);
    },
 
    onClickCart(e) {
      this.triggerEvent('add-cart', e.detail);
    },
 
    setHidden(hidden) {
      this.setData({ hiddenInData: !!hidden });
    },
  },
});