From 24b8f2afa92ce7bbe490185ecbab869c460b798b Mon Sep 17 00:00:00 2001
From: Jacob <hlnie@tohours.com>
Date: 星期五, 23 十月 2026 13:21:57 +0800
Subject: [PATCH] Merge branch 'dev' into sit
---
docs/zone-page.md | 368 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 368 insertions(+), 0 deletions(-)
diff --git a/docs/zone-page.md b/docs/zone-page.md
new file mode 100644
index 0000000..a026340
--- /dev/null
+++ b/docs/zone-page.md
@@ -0,0 +1,368 @@
+# 娲诲姩涓撳尯椤甸潰 `pages/zone/index` 閫昏緫璇存槑
+
+> 浠g爜浣嶇疆锛歚pages/zone/index.vue`锛堢害 1670 琛岋級
+> 涓昏瀛愮粍浠讹細`components/yueyangZone/index.vue`銆乣pages/goods_block/index.vue`銆乣components/home`銆乣components/popCoupon`銆乣components/popVideo`銆乣components/personalAndShareCoupon`銆乣components/task`銆乣components/popNewuser`
+> 鎵�鏈夋帴鍙h姹傚墠缂�锛歚{HTTP_REQUEST_URL}/api/front/`锛坄utils/request.js`锛宍HTTP_REQUEST_URL` 鏉ヨ嚜 `config/app`锛�
+
+---
+
+## 1. 椤甸潰瀹氫綅
+
+娲诲姩涓撳尯鑱氬悎椤碉紝鏍规嵁鍚庣杩斿洖鐨� `zoneType` 娓叉煋涓夌瀹屽叏涓嶅悓鐨勫舰鎬侊細
+
+| zoneType | 褰㈡�� | 鍏抽敭鐗瑰緛 |
+|---|---|---|
+| `6` | 鎮﹀吇璞嗗厬鎹笓鍖� | 浜ょ粰 `<yueyangZone>` 缁勪欢娓叉煋锛氭偊鍏昏眴浣欓銆佸埜鍏戞崲鍗$墖銆佸厬鎹㈠尯閫夐」鍗� + 鍟嗗搧鍒楄〃 |
+| `7` | 鍒嗗尯鏍囩鍨嬩笓鍖� | 椤堕儴妯悜鏍囩鍚搁《 + 鍒嗗尯鍥�/鍒嗗尯鍟嗗搧锛屾爣绛句笌椤甸潰婊氬姩鍙屽悜鑱斿姩 |
+| 鍏朵粬锛坄3`銆乣8` 绛夛級 | 閫氱敤娲诲姩涓撳尯 | 澶村浘 + 瀵屾枃鏈�/瑙嗛锛坺oneType 8锛�+ 宸ュ叿鏍忥紙缁煎悎/浠锋牸/绛涢�夛級+ 鐎戝竷娴佸晢鍝佸垪琛� + 涓婃媺鍔犺浇 |
+
+妯℃澘鍒嗘敮锛�
+
+```15:20:pages/zone/index.vue
+ <yueyangZone ref=yueyangZoneRef v-if="isYueyangZone" :zoneInfo="info" :careBeanRate="careBeanRate"
+ style="position: relative;z-index: 2;" @goLottery="goLottery" :relationKey="relationKey"></yueyangZone>
+ <view v-if="isYueyangZone" class="detail-btn" @click="goDetail">
+ <text>娑堣�楁槑缁�</text>
+ </view>
+ <view v-else>
+```
+
+```1492:1498:pages/zone/index.vue
+ if (res.data.zoneType == 6) {
+ that.setYueyangZone()
+ } else {
+ if (that.info.zoneType == 7) {
+ that.resetPartitionTabs(that.info.partitionTabList)
+ that.homeTop = that.getHomeTop(0.4)
+ }
+```
+
+---
+
+## 2. 鍏ュ彛鍙傛暟
+
+`/pages/zone/index?id=涓撳尯ID`
+
+| 鍙傛暟 | 鍙栧�兼潵婧� | 浣滅敤 |
+|---|---|---|
+| `id` | URL / scene 瑙f瀽缁撴灉 | 涓撳尯 ID锛宍getZoneDetail` 鐨勪富鍙傛暟 |
+| `cateId` | URL / scene | 浠呭瓨鍏� `this.cateId`锛屽綋鍓嶆湭鍙備笌璇锋眰 |
+| `relationKey` | URL / scene / 濂藉弸鍒搁摼鎺� | **浠呮偊鍏讳笓鍖虹敓鏁�**锛屾寚瀹氶粯璁ら�変腑鐨勫厬鎹㈠尯鏍囩 |
+| `shareToken` | URL / scene | 濂藉弸鍒稿垎浜� token锛宍friendCouponShareToken`锛屽弬涓庡埜鍖呰鎯呭叆鍙� |
+| `spread` | URL | 鍒嗛攢浜� ID |
+| `scene` | 灏忕▼搴忕爜 | 璧� scene 瑙f瀽鍒嗘敮锛坄finishSceneParam` 浜嬩欢 / `zone_scene` 缂撳瓨锛� |
+| `couponZone` | URL | 鍊间负 `'false'` 鏃跺埜鍖呯浉鍏冲叆鍙傜洿鎺ヨ繑鍥� `{}` |
+
+鍙傛暟璇诲彇锛�
+
+```714:719:pages/zone/index.vue
+ let options = currPage.options;
+ this.relationKey = options.relationKey;
+ this.id = options.id;
+ this.cateId = options.cateId;
+ this.friendCouponShareToken = options.shareToken
+ this.urlOption = options
+```
+
+scene 鍒嗘敮锛坄options.scene`锛夛細
+- 鍛戒腑缂撳瓨 `zone_scene` + `zone_scene_param` 鈫� 鐩存帴 `JSON.parse` 鍙� `id / shareToken / cateId / relationKey`锛�
+- 鏈懡涓� 鈫� `uni.$once('finishSceneParam')` 绛夎В鏋愮粨鏋滐紝骞跺啓缂撳瓨銆�
+
+```728:772:pages/zone/index.vue
+ if (options.scene) {
+ if (this.$Cache.get('zone_scene') && this.$Cache.get('zone_scene') == options.scene && this.$Cache.get(
+ 'zone_scene_param')) {
+```
+
+---
+
+## 3. 鍚姩鏃跺簭
+
+```
+onLoad
+ 鈹溾攢 uni.removeStorageSync('zoneTab') 娓呯┖鎮﹀吇鏍囩缂撳瓨
+ 鈹溾攢 uni.getWindowInfo / getMenuButtonBoundingClientRect 鈫� 璁$畻 marTop锛坔eader 楂樺害锛�
+ 鈹斺攢 鐩戝惉 careBeanRate銆丅ELONG_READY 绛�
+onShow
+ 鈹溾攢 璇诲彇椤甸潰鍙傛暟锛坕d / relationKey / shareToken / cateId / scene锛�
+ 鈹溾攢 checkUnionId() 鈫� 绛� unionId锛圲PDATE_LOGINSTATUS锛�
+ 鈹� 鈹斺攢 onGetUnion() 鈫� 宸茬櫥褰� onLoadFn()锛涙湭鐧诲綍 toLogin() + loginFlSuccess 鍥炶皟
+ 鈹斺攢 绛夊緟 careBeanRate锛坲pdateCareBeanRate锛夈�乥elong锛圔ELONG_READY锛�
+ 鈹斺攢 belongInfoReadyFn 鈫� checkLoginFn锛堝煁鐐� yy_pageView + hideLoading锛�
+
+onLoadFn
+ 鈹溾攢 handsCoupon() 妫�鏌ュ彲鎵嬪姩棰嗗彇鍒革紙GET hands/coupon/check锛�
+ 鈹斺攢 getZoneDetail() 涓撳尯璇︽儏锛堟牳蹇冿級
+ 鈹溾攢 updateZoneShareMenu() 鍒嗕韩鑿滃崟鏄鹃殣
+ 鈹溾攢 zoneType==6 鈫� setYueyangZone()
+ 鈹溾攢 zoneType==7 鈫� resetPartitionTabs(partitionTabList)
+ 鈹溾攢 鍏朵粬 鈫� getGoodList() 鍒嗛〉鍟嗗搧 + validAlert() 鍊掕鏃�
+ 鈹斺攢 $nextTick 鈫� hasSign() + couponPackVisit()
+```
+
+```1114:1133:pages/zone/index.vue
+ checkUnionId() {
+ let that = this;
+ if (that.$store.getters.unionId) { //鍒濆鍖栨暟鎹帴鍙ogin璇锋眰瀹屾瘯绗竴娆ogin杩斿洖浜唘nionId
+ that.onGetUnion();
+ } else {
+ uni.$once('UPDATE_LOGINSTATUS', that.onGetUnion);
+ }
+ },
+ onGetUnion() {
+ let that = this;
+ if (that.$store.getters.isLogin) {
+ that.onLoadFn();
+ } else {
+ toLogin(that);
+ that.loginBackFn = function () {
+ that.onLoadFn();
+ }
+ uni.$once('loginFlSuccess', that.registerFn);
+ }
+ },
+```
+
+`onLoad` 浼氭竻鎺夋偊鍏绘爣绛剧紦瀛橈細
+
+```658:659:pages/zone/index.vue
+ onLoad(options) {
+ uni.removeStorageSync('zoneTab')
+```
+
+---
+
+## 4. 涓夌褰㈡�佺殑璇︾粏閫昏緫
+
+### 4.1 鎮﹀吇璞嗗厬鎹笓鍖猴紙zoneType = 6锛�
+
+椤甸潰鍙仛銆屽彇鏁� + 杞彂銆嶏紝UI 涓庝氦浜掑叏鍦� `components/yueyangZone/index.vue`銆�
+
+**椤甸潰渚э細**
+
+```1207:1219:pages/zone/index.vue
+ setYueyangZone() {
+ // 鎮﹀吇涓撳尯澶勭悊
+ let that = this
+ this.isYueyangZone = true
+ this.$nextTick(() => {
+ that.getUserBean()
+ // 鑾峰彇涓撳尯浼樻儬鍒�
+ getZoneCoupon(that.info.id).then(res => {
+ const couponData = res.data
+ that.getCouponCount(couponData, 0)
+ })
+ })
+ },
+```
+
+`getCouponCount` 閫掑綊閫愬紶鍒告煡鍙敤鏁伴噺锛岄亶鍘嗗畬鍚庤皟鐢ㄥ瓙缁勪欢 `resetCoupons`锛�
+
+```1190:1206:pages/zone/index.vue
+ getCouponCount(couponData, index) {
+ if (!couponData[index]) {
+ this.$refs.yueyangZoneRef.resetCoupons(couponData)
+ return
+ }
+ let that = this
+ getZoneCouponCount({
+ couponId: couponData[index].id
+ }).then(res => {
+ let coupons = couponData
+ coupons.splice(index, 1, {
+ ...couponData[index],
+ ...res.data
+ })
+ that.getCouponCount(coupons, index + 1)
+ })
+ },
+```
+
+**瀛愮粍浠朵晶锛�**
+
+- 鎮﹀吇璞嗕綑棰濓細`resetCareBean(res2.data.totalCareBeans)`锛屾潵鑷� `GET user/careBean`锛�
+- 鍒稿崱鐗囷細`couponList`锛堟帴鍙� `zone/coupon/list/{id}`锛夛紝鐐瑰嚮銆岀珛鍗冲厬鎹€�嶁啋 `exchangeCoupon` 鈫� `POST zone/coupon/exchange`锛�
+- 鍏戞崲鍖洪�夐」鍗★細`couponProductTabs = JSON.parse(couponList[0].couponProductTabs)`锛�**鏍囩鏁版嵁鏉ヨ嚜绗竴寮犲埜鐨勫瓧娈�**锛�
+- 鍟嗗搧锛歚switchTab` 鏃舵寜 `tab.productIds` 璋� `GET products`锛坄ids` + `page=1&limit=100&zoneId`锛夈��
+
+**鏍囩榛樿閫変腑浼樺厛绾э細**
+
+```145:161:components/yueyangZone/index.vue
+ const zoneTab = uni.getStorageSync('zoneTab')
+ let index = 0
+ if (that.relationKey) {
+ index = couponProductTabs.findIndex(item => item.relationKey == that.relationKey)
+ } else if (zoneTab) {
+ index = couponProductTabs.findIndex(item => item.relationKey == zoneTab)
+ if (index == -1) {
+ index = zoneTab
+ }
+ } else if(that.userInfo.level<3 && couponProductTabs[1]){
+ // 闈炶嚮浜細鍛�
+ index=1
+ }
+ if (index == -1) {
+ index = 0
+ }
+ that.switchTab(couponProductTabs[index], index)
+```
+
+1. URL `relationKey` 鍛戒腑 鈫� 璇ユ爣绛撅紱
+2. 鏈湴缂撳瓨 `zoneTab`锛坄uni.setStorageSync('zoneTab', tab.relationKey || index)`锛夆啋 鍏堟寜 `relationKey` 鍖归厤锛屽尮閰嶄笉鍒版妸缂撳瓨鍊煎綋绱㈠紩锛�
+3. 闈炶嚮浜細鍛橈紙`userInfo.level < 3`锛変笖瀛樺湪绗� 2 涓爣绛� 鈫� 绱㈠紩 1锛�
+4. 鍏滃簳 鈫� 绱㈠紩 0銆�
+
+> 娉ㄦ剰锛歚onLoad` 浼� `removeStorageSync('zoneTab')`锛屾墍浠ョ紦瀛樺彧鍦ㄣ�岄〉闈㈡湭閿�姣佸啀娆� onShow銆嶆椂鏈夋晥銆�
+
+**鍙�氳繃鍦板潃鍙傛暟鎺у埗閫変腑鏍囩**锛歚?id=xx&relationKey=yyy`锛屽�煎繀椤绘槸 `couponProductTabs[].relationKey`锛堟帴鍙h繑鍥烇紝浠g爜鏃犵‖缂栫爜锛夛紝鍖归厤澶辫触闈欓粯鍥為��鍒扮 0 涓爣绛俱��
+
+銆屾秷鑰楁槑缁嗐�嶆寜閽� 鈫� `/pages/consumption/index?zoneId=xx`锛堣椤电敤 `GET care/bean/consume/record/list`锛夈��
+
+### 4.2 鍒嗗尯鏍囩鍨嬩笓鍖猴紙zoneType = 7锛�
+
+- 鏍囩鏁版嵁锛歚info.partitionTabList`锛岀敱 `resetPartitionTabs` 鍒嗘垚鍓� 4 涓紙`tagList`锛夊拰鍓╀綑锛坄restList`锛屻�屾洿澶氥�嶄笅鎷夊睍寮�锛夛細
+
+```1392:1398:pages/zone/index.vue
+ resetPartitionTabs(partitionTabs) {
+ let that = this
+ that.partitionList = partitionTabs
+ that.tagList = partitionTabs.slice(0, 4)
+ that.restList = partitionTabs.slice(4)
+ that.scheduleSetAllScrollTop()
+ },
+```
+
+- 鍟嗗搧涓�娆℃�ф媺鍙栵細鎶婃墍鏈夊垎鍖� `productIds` 鍚堝苟鍚庤姹� `GET products`锛坄limit=100`锛夛紝缁撴灉鎸� `id` 瀛樺叆 `partitionProject` 鏄犲皠锛屾ā鏉夸腑 `v-if="partitionProject[gitem.id]"` 鎵嶆覆鏌擄紱
+- 鏍囩 鈫� 婊氬姩鍙屽悜鑱斿姩锛�
+ - `setAllScrollTop()` 鐢� `createSelectorQuery` 閲忓嚭姣忎釜 `#partition-item_i` 鐨勭粷瀵瑰亸绉诲瓨鍏� `allTop`锛�
+ - `changeTag(idx)` 鈫� `scrollToTarget()` 婊氬埌閿氱偣锛屾湡闂� `isScrollingByTag = true` 鎶戝埗鍙嶅悜鑱斿姩锛�
+ - `onPageScroll` 鈫� `checkScrollIndex()`锛�50ms 鑺傛祦锛夆啋 `updateCurrentIndexByScroll()` 鍙嶇畻 `currentIndex`锛�
+ - 鍒嗗尯鍥� `@load="onPartitionImageLoad"` 瑙﹀彂閲嶆柊閲忛珮锛堝浘鐗囨拺楂樹細鏀瑰彉閿氱偣锛夈��
+- `currentIndex === -1` 琛ㄧず銆屽叏閮ㄣ�嶏紝婊氬姩鍒伴《閮ㄣ��
+
+### 4.3 閫氱敤娲诲姩涓撳尯锛堝叾浠� zoneType锛�
+
+- 宸ュ叿鏍忥細`toolbarArr = [缁煎悎(salesOrder), 浠锋牸(priceOrder, asc/desc 鍙垏鎹�), 绛涢��(filter)]`锛宍changeToolbar` 閲嶇疆鍒嗛〉鍚庨噸鏂拌姹傦紱
+- 绛涢�夊脊绐楋細鐐广�岀瓫閫夈�嶁啋 `getAllCategory()` 鈫� `categoryList` 鈫� 澶氶�� `selectMenu` / 娓呯┖ / 纭畾 `menuSubmit`锛坄where.cateIds = where.cid = 閫変腑 id 涓瞏锛夛紱
+- 鍟嗗搧鍒嗛〉锛歚where = {page, limit: 20, cateIds, cid}`锛宍getGoodList()` 杩藉姞锛宍onReachBottom` 瑙﹀簳鍔犺浇锛宍loadend` 缁堟锛�
+- 鎺掑簭鍏ュ弬锛歚where[value] = sort`锛堝 `priceOrder: 'desc'`锛夈��
+
+---
+
+## 5. 鎺ュ彛娓呭崟
+
+璇锋眰灏佽锛歚api/store.js`銆乣api/user.js`锛岀粺涓� `request.get/post`锛屽ぇ閮ㄥ垎甯� `noAuth: true`锛堟父瀹㈠彲璁块棶锛夈��
+
+| 璋冪敤鏂规硶 | HTTP + 璺緞锛堢浉瀵� `/api/front/`锛� | 瀹氫箟浣嶇疆 | 瑙﹀彂鏃舵満 | 鍏抽敭鐢ㄩ�� |
+|---|---|---|---|---|
+| `getZoneDetail(id, params)` | `GET store/zone/detail/{id}` | `api/store.js:213` | `onLoadFn`锛堟牳蹇冨叆鍙o級 | 杩斿洖 `info`锛氫笓鍖哄悕绉�/澶村浘/`zoneType`/`shareSwitch`/`shareTitle`/`shareImage`/`expireTime`/`startTime`/`partitionTabList`/`couponPackStatus`/`mdayId`/`ruleTitleText`鈥� |
+| `getProductslist(where)` | `GET products` | `api/store.js:94` | 閫氱敤涓撳尯鍟嗗搧鍒嗛〉锛泎oneType 7 鎸� ids 鎵归噺锛涙偊鍏讳笓鍖哄垏鏍囩 | 鍟嗗搧鍒楄〃锛坄list` / `page` / `totalPage`锛� |
+| `getCategoryList()` | `GET category` | `api/store.js:84` | `onShow`銆佺偣銆岀瓫閫夈�� | 绛涢�夊脊绐楀垎绫绘爲 `categoryList` |
+| `checkSign({zoneId})` | `GET store/zone/check/sign` | `api/store.js:239` | `getZoneDetail` 鍚� | zoneType 3 鍒ゆ柇鏄惁宸茬鍒帮紝鏈鍒板脊绐楁嫤鎴� |
+| `getZoneCoupon(zoneId)` | `GET zone/coupon/list/{id}` | `api/store.js:278` | `setYueyangZone` | 鎮﹀吇涓撳尯鍙厬鎹㈠埜鍒楄〃锛堝惈 `couponProductTabs`锛� |
+| `getZoneCouponCount({couponId})` | `GET zone/coupon/user/count` | `api/store.js:284` | 鍒稿垪琛ㄨ繑鍥炲悗閫愬紶閫掑綊 | 姣忓紶鍒哥殑 `usableCount` |
+| `couponExchange({couponId, zoneId})` | `POST zone/coupon/exchange` | `api/store.js:296` | 瀛愮粍浠剁偣銆岀珛鍗冲厬鎹€�嶁啋銆岀‘瀹氥�� | 鎮﹀吇璞嗗厬鎹㈠埜 |
+| `couponPackSharelink({activityId})` | `POST coupon-pack/share-link?activityId={id}` | `api/store.js:312` | 濂藉弸鍒稿垎浜紙`onShareAppMessage` 鍒嗘敮锛� | 杩斿洖 `shareToken` / `path` / `shareCoverImage` |
+| `getUserBean()` | `GET user/careBean` | `api/user.js:10` | 鎮﹀吇涓撳尯 `setYueyangZone` | `totalCareBeans` 鎮﹀吇璞嗕綑棰� |
+| `handsCoupon()` | `GET hands/coupon/check` | `api/user.js:494` | `onLoadFn` | 妫�鏌ュ苟鑷姩棰嗗彇鎵嬪姩瀵煎叆鍒� |
+
+### 宸插鍏ヤ絾褰撳墠鏈娇鐢ㄧ殑鎺ュ彛
+
+| 鏂规硶 | 璺緞 | 璇存槑 |
+|---|---|---|
+| `getZoneGoodList` | `GET store/zone/product/list/{id}` | 椤甸潰 import 浜嗕絾浠庢湭璋冪敤锛屽晢鍝佺粺涓�璧� `getProductslist` |
+| `couponPackVisit` | `POST coupon-pack/visit` | 琚〉闈㈠悓鍚嶆柟娉� `couponPackVisit()`锛�1404 琛岋級閬斀锛屽疄闄呮湭鍙戣姹傦紱鍒稿寘鐘舵�佸畬鍏ㄥ彇鑷俊 `getZoneDetail` 鐨� `info.couponPackStatus` |
+
+---
+
+## 6. 鍒嗕韩閫昏緫
+
+- 鍒ゅ畾锛歚isZoneShareEnabled()`锛屽埜鍖呮ā寮忎笅浼樺厛鐢� `couponPackStatus.zoneShareSwitch`锛屽惁鍒欑敤 `info.shareSwitch`锛屼弗鏍� `=== 1`锛�
+
+```875:893:pages/zone/index.vue
+ isZoneShareEnabled() {
+ if (this.info.couponPackStatus && this.info.couponPackStatus.issued) {
+ return Number(this.info.couponPackStatus.zoneShareSwitch) === 1
+ }
+ return Number(this.info.shareSwitch) === 1;
+ },
+ updateZoneShareMenu() {
+ // #ifdef MP
+ if (this.id && !this.isZoneShareEnabled()) {
+ wx.hideShareMenu({
+ menus: ['shareAppMessage']
+ });
+```
+
+- `updateZoneShareMenu` 璋冪敤鐐癸細`getZoneDetail` 鎴愬姛銆乣catch`銆乣onShow`锛坄String(info.id) !== String(id)` 鏃跺厛缃� `shareSwitch = 0`锛夈��
+- `onShareAppMessage` 涓夋潯鍒嗘敮锛�
+ 1. 濂藉弸鍒稿垎浜紙`isCouponShare` 鎴� `couponType == 2 && canShareFriendCoupon()`锛夆啋 `buildCouponShareConfig()`锛堣皟鍒嗕韩閾炬帴鎺ュ彛锛屾爣棰樸�屽ソ鍙嬩笓浜紭鎯犲埜銆嶏級锛�
+ 2. `!isZoneShareEnabled()` 鈫� `return {}`锛堜笉鑷畾涔夊唴瀹癸級锛�
+ 3. 鏅�氫笓鍖哄垎浜� 鈫� `path = /pages/zone/index?id=xx&spread=xx&couponZone=false` + 褰掑睘鍙傛暟锛屾爣棰� `info.shareTitle`锛屽浘 `info.shareImage`銆�
+- 鍩嬬偣锛歚yy_contentPageShare`銆乣yy_pageView`銆乣yy_marketPageClick`锛坄addTrack` 涓哄叏灞� mixin锛夈��
+
+---
+
+## 7. 鍒稿寘灞曠ず锛坈ouponPackStatus锛�
+
+`getZoneDetail` 鍚� `couponPackVisit()` 瑙f瀽 `info.couponPackStatus`锛�
+
+- `autoIssueOnZoneView == 1`锛堣繘涓撳尯鑷姩鍙戝埜锛夛細
+ - 璁剧疆鍒稿浘鐗囷紙`friendCouponShortImage` / `selfCouponShortImage` / 鈥︼紝鏈夐粯璁ゅ�煎厹搴曪級銆乣stockEmpty`銆乣couponBannerShow`锛�
+ - `friendCoupon && selfCoupon` 鈫� `couponType = 2`锛堝甫鍒嗕韩鐨勫弻鍒革級锛沗shareUnavailable == false && selfCoupon` 鈫� `couponType = 3`锛堜笉甯﹀垎浜級锛�
+ - `activityId = selfCoupon.activityId`锛堝ソ鍙嬪埜鍒嗕韩鐢級锛�
+ - `productShareSwitch = couponPackStatus.productShareSwitch`锛�
+ - 寮圭獥 `personalAndShareCouponRef.show(info, friendCouponShareToken)`銆�
+- `autoIssueOnZoneView == 0`锛堟帴鍙i�佸埜灞曠ず妯″紡锛夛細`couponDisplayShow = displayLayout != 'NONE'`锛�
+ - `SINGLE_CENTER` 鈫� `couponType = 3`锛宍centerCoupon = displayCoupons[0]`锛�
+ - `DOUBLE_SIDE` 鈫� `couponType = 2`锛屾寜 `position` 鎷嗘垚 `leftCoupon` / `rightCoupon`銆�
+- 鍒哥姸鎬佹枃妗堬細`selfStatus`锛�0 宸插埌璐� / 1 宸蹭娇鐢� / 2 宸插け鏁堬級锛沗friendStatus` / `displayStatus`锛坄WAIT_USE` / `USED` / `EXPIRED` / `NOT_STARTED`锛夛紱8.8 / 1.8 鍏冨埜鍚勬湁鐙珛鍥剧墖銆�
+- 濂藉弸鍒稿垎浜寜閽� `canShareFriendCoupon()`锛歚friendStatus` 闈炵┖涓斾笉鍦� `['RECEIVED','USED','EXPIRED']`锛汬5 绔彁绀恒�岃鍦ㄥ井淇″皬绋嬪簭涓垎浜粰濂藉弸銆嶃��
+- 寮圭獥鍏抽棴鍥炶皟 `showOtherPop()` 鈫� 鍙脊涓�娆℃柊浜哄脊绐� `popNewuserRef`銆�
+
+---
+
+## 8. 鍏朵粬鑳藉姏
+
+| 鑳藉姏 | 閫昏緫 |
+|---|---|
+| 鍊掕鏃� | `validAlert(info)` 鈫� `countdownTimer(time, 'start'/'end', token)`锛涙湭寮�濮嬫樉绀恒�屽悗寮�鍚�嶏紝宸插紑濮嬫樉绀恒�屽悗缁撴潫銆嶏紝鐢� `countdownToken` 浣滃簾鏃у畾鏃跺櫒閾撅紱`expireTime` 涓� `{digits, unit}` 鏁扮粍 |
+| 绛惧埌鏍¢獙 | `hasSign()`锛歾oneType 3 鍏� `checkSign`锛屾湭绛惧埌寮圭獥鎷︽埅锛涘惁鍒欙紙涓� `isFirst`锛夊脊 `popVideoRef`锛堟椿鍔ㄨ棰戯級 |
+| 娲诲姩瑙嗛 | zoneType 8 涓旀湁 `uploadVideo`锛歚videoControls` 鎺у埗娴锋姤/鎾斁锛宍bindZoneVideoPlay` 鐢� `createVideoContext` 鎾斁 |
+| 瀵屾枃鏈� | zoneType 8 涓� `info.info` 鈫� `rich-text` |
+| 鎶藉 | `info.isLottery && info.lotteryBanner` 鈫� `goLottery()`锛岃烦 webview `${WEB_ACTIVITY_BASE}/acmall_lottery/index.html`锛堝甫 token/unionId/mdayId锛夛紝鏈櫥褰曞厛鐧诲綍 |
+| 瑙勫垯璇存槑 | `info.ruleTitleText && info.ruleContentText` 鈫� 鐐瑰浘鎵撳紑 `personalAndShareCouponRuleRef` |
+| 瑙嗛寮圭獥鍏抽棴 | `handleClosePopVideo()` 鈫� 鏄剧ず `popCoupon` 涓� `isFirst = false` |
+| 杩斿洖 | `returns()`锛歚uni.$emit('returnEvent')` + `navigateBack`锛沗returnShow` 鎺у埗杩斿洖鎸夐挳鏄鹃殣锛堥〉闈㈡爤闀垮害 > 1锛� |
+| 鎮﹀吇璞嗘眹鐜� | `careBeanRate` 鏉ヨ嚜 `store.getters.careBeanRate`锛坄updateCareBeanRate` 浜嬩欢锛夛紝閫忎紶缁� `GoodBlock` |
+
+---
+
+## 9. 鍏抽敭鐘舵�佸瓧娈甸�熸煡
+
+| 瀛楁 | 鍚箟 |
+|---|---|
+| `info` | 涓撳尯璇︽儏锛坄getZoneDetail` 鍏ㄩ噺锛� |
+| `isYueyangZone` | 鏄惁鎮﹀吇涓撳尯锛坺oneType 6锛� |
+| `zoneType` | 涓撳尯褰㈡�侊細6 鎮﹀吇 / 7 鍒嗗尯鏍囩 / 3 闇�绛惧埌 / 8 瑙嗛+瀵屾枃鏈� |
+| `shareSwitch` / `couponPackStatus.zoneShareSwitch` | 涓撳尯鍒嗕韩寮�鍏筹紙1 鍙垎浜級 |
+| `productShareSwitch` | 浼犵粰鍟嗗搧鍗$殑鍒嗕韩寮�鍏筹紙鍏堝彇 `res.data.shareSwitch`锛屽埜鍖呮ā寮忎笅琚� `couponPackStatus.productShareSwitch` 瑕嗙洊锛� |
+| `partitionList` / `partitionProject` / `currentIndex` / `allTop` | zoneType 7 鐨勫垎鍖烘暟鎹�佸晢鍝佹槧灏勩�佸綋鍓嶆爣绛俱�侀敋鐐瑰亸绉� |
+| `where` / `goodList` / `loadend` / `activeTabIndex` | 閫氱敤涓撳尯鍒嗛〉鏉′欢銆佸垪琛ㄣ�佹槸鍚﹀姞杞藉畬銆佸綋鍓嶆帓搴� |
+| `couponType` / `couponBannerShow` / `couponDisplayShow` / `stockEmpty` | 鍒稿寘灞曠ず褰㈡�佹帶鍒� |
+| `friendStatus` / `selfStatus` / `activityId` / `friendCouponShareToken` | 濂藉弸鍒哥姸鎬佷笌鍒嗕韩鍑瘉 |
+| `isCouponShare` | 鏈鍒嗕韩鏄惁涓哄ソ鍙嬪埜鍒嗕韩 |
+
+---
+
+## 10. 宸茬煡闂涓庢敞鎰忕偣
+
+1. `couponPackVisit` / `getZoneGoodList` 涓や釜 import 鏈湡姝d娇鐢紙鍓嶈�呰鍚屽悕鏂规硶閬斀锛夛紝鍒稿寘鐘舵�佸畬鍏ㄤ緷璧� `getZoneDetail` 杩斿洖锛岃嫢鍚庣鏀逛负鐙珛鎺ュ彛闇�琛ヨ皟鐢ㄣ��
+2. `productShareSwitch` 浼氳璧嬪�间袱娆★紙1505 琛� `res.data.shareSwitch` 鈫� 1450 琛屽埜鍖呮ā寮忚鐩栵級锛屽埜鍖呭紑鍚椂浠ュ悗鑰呬负鍑嗐��
+3. 鎮﹀吇涓撳尯鍟嗗搧鍗$殑 `share-switch` 鐢ㄧ殑鏄� `zoneInfo.shareSwitch`锛岃�岄�氱敤涓撳尯鐢ㄧ殑鏄� `productShareSwitch`锛屼袱鑰呮潵婧愪笉鍚屻��
+4. `activeTab`锛堝瓙缁勪欢锛夊垵濮嬪�煎瓧绗︿覆 `'5'`锛岃�� `switchTab` 鍐欏叆鏁板瓧绱㈠紩锛屾ā鏉跨敤 `==` 瀹芥澗姣旇緝锛屾爣绛炬暟 鈮� 6 鏃剁 5 涓爣绛句細璇珮浜��
+5. `zoneTab` 缂撳瓨鍚屾椂鍙兘瀛� `relationKey` 鎴栫储寮曚袱绉嶈涔夛紝涓斾负鍏ㄥ眬 key锛岃法涓撳尯澶嶇敤鏃跺彲鑳介�変腑閿欒鏍囩锛坄onLoad` 浼氭竻闄や竴娆★紝浣嗘湭瀹屽叏闅旂锛夈��
+6. `relationKey` 涓� `0` / `''` 鏃舵槸 falsy锛岀涓�浼樺厛绾т細琚烦杩囷紱`userInfo` 鏈氨缁椂 `userInfo.level < 3` 涓� false锛岄潪浼氬憳鍏滃簳澶辨晥銆�
+7. `couponProductTabs` 渚濊禆 `couponList[0].couponProductTabs`锛岃В鏋愬け璐ヤ細璧� `catch` 缃┖锛屾暣鍧楁爣绛炬爮涓庡晢鍝佸垪琛ㄦ秷澶便��
+8. `cateId` 鍙傛暟鍙祴鍊间笉浣跨敤锛沗getZoneDetail` 鍏ュ弬閲� `where.zoneId` 琚啓浜嗕袱娆★紙1636/1637 琛岋級锛屽疄闄呬互 `info.id` 涓哄噯銆�
+9. zoneType 7 鐨勯敋鐐逛緷璧栧浘鐗囧姞杞藉畬鎴愶紙`onPartitionImageLoad`锛変笌 `scheduleSetAllScrollTop` 鐨� 150ms 闃叉姈锛屽浘鐗囪緝澶氱殑涓撳尯棣栧睆鑱斿姩鍙兘鏈変竴甯у亸宸��
--
Gitblit v1.4.0