jyj-components 1.0.2 → 1.0.3

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.
@@ -98,53 +98,159 @@ var _require = __webpack_require__(1),
98
98
  getAds = _require.getAds;
99
99
 
100
100
  module.exports = {
101
- restoreAdState: function restoreAdState() {
101
+ // 检查并重置每日数据
102
+ checkAndResetDaily: function checkAndResetDaily() {
102
103
  var slotId = this.properties.slotId;
103
104
  var type = this.properties.type;
104
- var adIndexKey = 'adIndex_' + slotId + '_' + type;
105
- var adShowCountKey = 'adShowCount_' + slotId + '_' + type;
105
+ var dateKey = 'adDate_' + slotId + '_' + type;
106
106
 
107
- var savedIndex = wx.getStorageSync(adIndexKey) || 0;
108
- var savedShowCount = wx.getStorageSync(adShowCountKey) || 0;
107
+ var today = new Date().toDateString();
108
+ var savedDate = wx.getStorageSync(dateKey);
109
109
 
110
- this.setData({
111
- currentAdIndex: savedIndex,
112
- currentAdShowCount: savedShowCount
113
- });
110
+ // 如果日期不同,重置所有数据
111
+ if (savedDate !== today) {
112
+ var customAdIndexKey = 'customAdIndex_' + slotId + '_' + type;
113
+ var customAdShowCountKey = 'customAdShowCount_' + slotId + '_' + type;
114
+
115
+ wx.setStorageSync(dateKey, today);
116
+ wx.setStorageSync(customAdIndexKey, 1); // 自有广告从索引1开始
117
+ wx.setStorageSync(customAdShowCountKey, 0);
118
+
119
+ return true; // 表示已重置
120
+ }
121
+
122
+ return false; // 表示未重置
123
+ },
124
+ restoreAdState: function restoreAdState() {
125
+ // 检查并重置每日数据
126
+ this.checkAndResetDaily();
114
127
  },
115
128
  saveAdState: function saveAdState() {
116
129
  var slotId = this.properties.slotId;
117
130
  var type = this.properties.type;
118
- var adIndexKey = 'adIndex_' + slotId + '_' + type;
119
- var adShowCountKey = 'adShowCount_' + slotId + '_' + type;
131
+ var customAdIndexKey = 'customAdIndex_' + slotId + '_' + type;
132
+ var customAdShowCountKey = 'customAdShowCount_' + slotId + '_' + type;
133
+
134
+ // 只保存自有广告的状态(索引>0)
135
+ if (this.data.currentAdIndex > 0) {
136
+ wx.setStorageSync(customAdIndexKey, this.data.currentAdIndex);
137
+ wx.setStorageSync(customAdShowCountKey, this.data.currentAdShowCount);
138
+ }
139
+ },
140
+
141
+
142
+ // 检查微信广告是否失败(只在内存中,不持久化)
143
+ isWxAdFailed: function isWxAdFailed() {
144
+ return this.data.wxAdFailed || false;
145
+ },
146
+
147
+
148
+ // 标记微信广告失败(只在内存中,不持久化)
149
+ markWxAdFailed: function markWxAdFailed() {
150
+ this.setData({
151
+ wxAdFailed: true
152
+ });
153
+ },
154
+
155
+
156
+ // 检查所有自有广告是否都达到上限
157
+ isAllCustomAdsReachedLimit: function isAllCustomAdsReachedLimit() {
158
+ var ads = this.data.ads;
159
+ if (!ads || ads.length <= 1) return true; // 只有微信广告或没有广告
160
+
161
+ var currentIndex = this.data.currentAdIndex;
162
+ var showCount = this.data.currentAdShowCount;
163
+
164
+ // 如果当前不是自有广告,返回false
165
+ if (currentIndex === 0) return false;
166
+
167
+ // 找到最后一个有效的自有广告索引
168
+ var lastValidAdIndex = -1;
169
+ for (var i = ads.length - 1; i >= 1; i--) {
170
+ if (ads[i][this.properties.type] !== undefined) {
171
+ lastValidAdIndex = i;
172
+ break;
173
+ }
174
+ }
175
+
176
+ // 如果没有有效的自有广告,返回true
177
+ if (lastValidAdIndex === -1) return true;
178
+
179
+ // 如果当前索引已经是最后一个有效广告,且达到展示上限,返回true
180
+ if (currentIndex === lastValidAdIndex) {
181
+ var ad = ads[currentIndex];
182
+ var maxShowCount = ad.showCount || 1;
183
+ return showCount >= maxShowCount;
184
+ }
120
185
 
121
- wx.setStorageSync(adIndexKey, this.data.currentAdIndex);
122
- wx.setStorageSync(adShowCountKey, this.data.currentAdShowCount);
186
+ return false;
123
187
  },
124
188
  loadNextAd: function loadNextAd() {
125
189
  var ads = this.data.ads;
126
190
  if (!ads || ads.length === 0) return;
127
191
 
192
+ // 检查并重置每日数据
193
+ this.checkAndResetDaily();
194
+
128
195
  var currentIndex = this.data.currentAdIndex;
129
196
  var showCount = this.data.currentAdShowCount;
130
197
 
131
- var currentAd = ads[currentIndex % ads.length];
198
+ // 如果是微信广告(索引0)且未失败,直接加载微信广告
199
+ if (currentIndex === 0 && !this.isWxAdFailed()) {
200
+ var wxAd = ads[0];
201
+ if (wxAd && wxAd[this.properties.type] !== undefined) {
202
+ this.setData({ currentAd: wxAd });
203
+ return;
204
+ } else {
205
+ // 微信广告没有配置,标记为失败,切换到自有广告
206
+ this.markWxAdFailed();
207
+ currentIndex = 1;
208
+ showCount = 0;
209
+ }
210
+ }
211
+
212
+ // 如果微信广告失败,从自有广告开始
213
+ if (currentIndex === 0 && this.isWxAdFailed()) {
214
+ // 从存储中恢复自有广告的状态
215
+ var slotId = this.properties.slotId;
216
+ var type = this.properties.type;
217
+ var customAdIndexKey = 'customAdIndex_' + slotId + '_' + type;
218
+ var customAdShowCountKey = 'customAdShowCount_' + slotId + '_' + type;
219
+
220
+ currentIndex = wx.getStorageSync(customAdIndexKey) || 1;
221
+ showCount = wx.getStorageSync(customAdShowCountKey) || 0;
222
+ }
223
+
224
+ // 如果没有自有广告,不展示任何广告
225
+ if (ads.length <= 1) {
226
+ return;
227
+ }
132
228
 
133
- var maxShowCount = currentAd.showCount || 1;
229
+ // 检查所有自有广告是否都达到上限
230
+ if (this.isAllCustomAdsReachedLimit()) {
231
+ return;
232
+ }
233
+
234
+ // 处理自有广告的展示次数限制
235
+ var ad = ads[currentIndex];
236
+ var maxShowCount = ad.showCount || 1;
237
+
238
+ // 如果当前自有广告达到展示上限,切换到下一个
134
239
  if (showCount >= maxShowCount) {
135
240
  currentIndex = currentIndex + 1;
136
241
  showCount = 0;
137
- this.setData({
138
- currentAdIndex: currentIndex,
139
- currentAdShowCount: showCount
140
- });
141
- this.saveAdState();
142
- }
143
242
 
144
- var ad = ads[currentIndex % ads.length];
145
- this.setData({ currentAd: ad });
243
+ // 如果超出广告列表范围,说明所有广告都达到上限
244
+ if (currentIndex >= ads.length) {
245
+ return;
246
+ }
247
+
248
+ ad = ads[currentIndex];
249
+ }
146
250
 
251
+ // 检查当前广告是否有配置
147
252
  if (ad[this.properties.type] === undefined) {
253
+ // 没有配置,跳过并尝试下一个
148
254
  this.setData({
149
255
  currentAdIndex: currentIndex + 1,
150
256
  currentAdShowCount: 0
@@ -154,8 +260,11 @@ module.exports = {
154
260
  return;
155
261
  }
156
262
 
263
+ // 设置当前广告
157
264
  this.setData({
158
- currentAdShowCount: showCount + 1
265
+ currentAd: ad,
266
+ currentAdIndex: currentIndex,
267
+ currentAdShowCount: showCount
159
268
  });
160
269
  this.saveAdState();
161
270
  },
@@ -179,8 +288,22 @@ module.exports = {
179
288
  this.triggerEvent('adLoad', e.detail || {});
180
289
  }
181
290
  this.report('load');
291
+
292
+ // 只有自有广告(索引>0)才增加展示计数
293
+ if (this.data.currentAdIndex > 0) {
294
+ var showCount = this.data.currentAdShowCount;
295
+ this.setData({
296
+ currentAdShowCount: showCount + 1
297
+ });
298
+ this.saveAdState();
299
+ }
182
300
  },
183
301
  adError: function adError(e) {
302
+ // 如果是微信广告(索引0)失败,标记为失败状态
303
+ if (this.data.currentAdIndex === 0) {
304
+ this.markWxAdFailed();
305
+ }
306
+
184
307
  if (e === 'undefined') {
185
308
  this.triggerEvent('adError', { msg: 'ad adError' });
186
309
  } else {
@@ -222,7 +345,13 @@ module.exports = {
222
345
  ads = _context.sent;
223
346
 
224
347
  this.setData({ ads: ads });
225
- this.restoreAdState();
348
+
349
+ // 每次初始化时,总是从微信广告开始(索引0)
350
+ this.setData({
351
+ currentAdIndex: 0,
352
+ currentAdShowCount: 0
353
+ });
354
+
226
355
  this.loadNextAd();
227
356
 
228
357
  case 7:
@@ -312,7 +441,8 @@ Component({
312
441
  ads: [],
313
442
  currentAd: {},
314
443
  currentAdIndex: 0,
315
- currentAdShowCount: 0
444
+ currentAdShowCount: 0,
445
+ wxAdFailed: false // 微信广告失败标记(仅内存,不持久化)
316
446
  },
317
447
  lifetimes: {
318
448
  attached: function () {
@@ -340,6 +470,18 @@ Component({
340
470
  }()
341
471
  },
342
472
  methods: {
473
+ checkAndResetDaily: function checkAndResetDaily() {
474
+ return adBase.checkAndResetDaily.call(this);
475
+ },
476
+ isWxAdFailed: function isWxAdFailed() {
477
+ return adBase.isWxAdFailed.call(this);
478
+ },
479
+ markWxAdFailed: function markWxAdFailed() {
480
+ adBase.markWxAdFailed.call(this);
481
+ },
482
+ isAllCustomAdsReachedLimit: function isAllCustomAdsReachedLimit() {
483
+ return adBase.isAllCustomAdsReachedLimit.call(this);
484
+ },
343
485
  restoreAdState: function restoreAdState() {
344
486
  adBase.restoreAdState.call(this);
345
487
  },
@@ -356,7 +498,8 @@ Component({
356
498
  adBase.adLoad.call(this, e);
357
499
  },
358
500
  adError: function adError(e) {
359
- adBase.adError.call(this, e);
501
+ adBase.adError.call(this, e); // 先标记失败
502
+ this.loadNextAd(); // 再切换广告
360
503
  },
361
504
  adOpenMiniProgram: function adOpenMiniProgram() {
362
505
  adBase.adOpenMiniProgram.call(this);
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/mixins/ad-base.js","webpack:///./src/request.js","webpack:///./src/ad-banner/index.js"],"names":["require","getAds","module","exports","restoreAdState","slotId","properties","type","adIndexKey","adShowCountKey","savedIndex","wx","getStorageSync","savedShowCount","setData","currentAdIndex","currentAdShowCount","saveAdState","setStorageSync","data","loadNextAd","ads","length","currentIndex","showCount","currentAd","maxShowCount","ad","undefined","report","actionType","source","adId","id","time","Date","getTime","request","url","method","success","fail","adLoad","e","triggerEvent","msg","detail","adError","adOpenMiniProgram","appId","appid","path","navigateToMiniProgram","err","console","error","initAds","pendingRequests","requestCache","Promise","resolve","requestPromise","reject","res","statusCode","Error","errMsg","complete","adBase","Component","String","value","lifetimes","attached","call","methods"],"mappings":";;QAAA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;;;;;eClFiBA,mBAAOA,CAACA,CAAeA,C;IAAjCC,M,YAAAA,M;;AAEPC,OAAOC,OAAP,GAAiB;AACfC,gBADe,4BACE;AACf,QAAMC,SAAS,KAAKC,UAAL,CAAgBD,MAA/B;AACA,QAAME,OAAO,KAAKD,UAAL,CAAgBC,IAA7B;AACA,QAAMC,0BAAwBH,MAAxB,SAAkCE,IAAxC;AACA,QAAME,kCAAgCJ,MAAhC,SAA0CE,IAAhD;;AAEA,QAAMG,aAAaC,GAAGC,cAAH,CAAkBJ,UAAlB,KAAiC,CAApD;AACA,QAAMK,iBAAiBF,GAAGC,cAAH,CAAkBH,cAAlB,KAAqC,CAA5D;;AAEA,SAAKK,OAAL,CAAa;AACXC,sBAAgBL,UADL;AAEXM,0BAAoBH;AAFT,KAAb;AAID,GAdc;AAgBfI,aAhBe,yBAgBD;AACZ,QAAMZ,SAAS,KAAKC,UAAL,CAAgBD,MAA/B;AACA,QAAME,OAAO,KAAKD,UAAL,CAAgBC,IAA7B;AACA,QAAMC,0BAAwBH,MAAxB,SAAkCE,IAAxC;AACA,QAAME,kCAAgCJ,MAAhC,SAA0CE,IAAhD;;AAEAI,OAAGO,cAAH,CAAkBV,UAAlB,EAA8B,KAAKW,IAAL,CAAUJ,cAAxC;AACAJ,OAAGO,cAAH,CAAkBT,cAAlB,EAAkC,KAAKU,IAAL,CAAUH,kBAA5C;AACD,GAxBc;AA0BfI,YA1Be,wBA0BF;AACX,QAAMC,MAAM,KAAKF,IAAL,CAAUE,GAAtB;AACA,QAAI,CAACA,GAAD,IAAQA,IAAIC,MAAJ,KAAe,CAA3B,EAA8B;;AAE9B,QAAIC,eAAe,KAAKJ,IAAL,CAAUJ,cAA7B;AACA,QAAIS,YAAY,KAAKL,IAAL,CAAUH,kBAA1B;;AAEA,QAAMS,YAAYJ,IAAIE,eAAeF,IAAIC,MAAvB,CAAlB;;AAEA,QAAMI,eAAeD,UAAUD,SAAV,IAAuB,CAA5C;AACA,QAAIA,aAAaE,YAAjB,EAA+B;AAC7BH,qBAAeA,eAAe,CAA9B;AACAC,kBAAY,CAAZ;AACA,WAAKV,OAAL,CAAa;AACXC,wBAAgBQ,YADL;AAEXP,4BAAoBQ;AAFT,OAAb;AAIA,WAAKP,WAAL;AACD;;AAED,QAAMU,KAAKN,IAAIE,eAAeF,IAAIC,MAAvB,CAAX;AACA,SAAKR,OAAL,CAAa,EAACW,WAAWE,EAAZ,EAAb;;AAEA,QAAIA,GAAG,KAAKrB,UAAL,CAAgBC,IAAnB,MAA6BqB,SAAjC,EAA4C;AAC1C,WAAKd,OAAL,CAAa;AACXC,wBAAgBQ,eAAe,CADpB;AAEXP,4BAAoB;AAFT,OAAb;AAIA,WAAKC,WAAL;AACA,WAAKG,UAAL;AACA;AACD;;AAED,SAAKN,OAAL,CAAa;AACXE,0BAAoBQ,YAAY;AADrB,KAAb;AAGA,SAAKP,WAAL;AACD,GA/Dc;AAiEfY,QAjEe,kBAiERC,UAjEQ,EAiEI;AACjB,QAAMzB,SAAS,KAAKC,UAAL,CAAgBD,MAA/B;AACA,QAAME,OAAO,KAAKD,UAAL,CAAgBC,IAA7B;AACA,QAAMwB,SAAS,KAAKZ,IAAL,CAAUM,SAAV,CAAoBM,MAAnC;AACA,QAAMC,OAAO,KAAKb,IAAL,CAAUM,SAAV,CAAoBQ,EAAjC;AACA,QAAMC,OAAO,IAAIC,IAAJ,GAAWC,OAAX,EAAb;AACAzB,OAAG0B,OAAH,CAAW;AACTC,iEAAyDjC,MAAzD,cAAwEE,IAAxE,gBAAuFwB,MAAvF,oBAA4GD,UAA5G,cAA+HE,IAA/H,cAA4IE,IADnI;AAETK,cAAQ,KAFC;AAGTC,aAHS,qBAGC,CAAE,CAHH;AAITC,UAJS,kBAIF,CAAE;AAJA,KAAX;AAMD,GA7Ec;AA+EfC,QA/Ee,kBA+ERC,CA/EQ,EA+EL;AACR,QAAIA,MAAM,WAAV,EAAuB;AACrB,WAAKC,YAAL,CAAkB,SAAlB,EAA6B,EAACC,KAAK,QAAN,EAA7B;AACD,KAFD,MAEO;AACL,WAAKD,YAAL,CAAkB,QAAlB,EAA4BD,EAAEG,MAAF,IAAY,EAAxC;AACD;AACD,SAAKjB,MAAL,CAAY,MAAZ;AACD,GAtFc;AAwFfkB,SAxFe,mBAwFPJ,CAxFO,EAwFJ;AACT,QAAIA,MAAM,WAAV,EAAuB;AACrB,WAAKC,YAAL,CAAkB,SAAlB,EAA6B,EAACC,KAAK,YAAN,EAA7B;AACD,KAFD,MAEO;AACL,WAAKD,YAAL,CAAkB,SAAlB,EAA6BD,CAA7B;AACD;AACF,GA9Fc;AAgGfK,mBAhGe,+BAgGK;AAAA;;AAClB,QAAMrB,KAAK,KAAKR,IAAL,CAAUM,SAArB;AACA,QAAMwB,QAAQtB,GAAG,KAAKrB,UAAL,CAAgBC,IAAnB,EAAyB2C,KAAzB,IAAkC,EAAhD;AACA,QAAMC,OAAOxB,GAAG,KAAKrB,UAAL,CAAgBC,IAAnB,EAAyB4C,IAAzB,IAAiC,EAA9C;AACA,QAAIF,KAAJ,EAAW;AACTtC,SAAGyC,qBAAH,CAAyB;AACvBH,eAAOA,KADgB;AAEvBE,cAAMA,IAFiB;AAGvBX,iBAAS,mBAAM;AACb,gBAAKI,YAAL,CAAkB,mBAAlB,EAAuC,EAACK,YAAD,EAAQE,UAAR,EAAvC;AACD,SALsB;AAMvBV,cAAM,cAACY,GAAD,EAAS;AACbC,kBAAQC,KAAR,CAAc,SAAd,EAAyBF,GAAzB;AACD;AARsB,OAAzB;AAUD;AACD,SAAKxB,MAAL,CAAY,OAAZ;AACD,GAjHc;AAmHT2B,SAnHS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoHPnD,oBApHO,GAoHE,KAAKC,UAAL,CAAgBD,MApHlB;AAAA;AAAA,qBAqHKJ,OAAOI,MAAP,CArHL;;AAAA;AAqHPgB,iBArHO;;AAsHb,mBAAKP,OAAL,CAAa,EAACO,QAAD,EAAb;AACA,mBAAKjB,cAAL;AACA,mBAAKgB,UAAL;;AAxHa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,CAAjB,C;;;;;;;;;ACFA,IAAMqC,kBAAkB,EAAxB;AACA,IAAMC,eAAe,EAArB;;AAEA,IAAMzD,SAAS,SAATA,MAAS,CAACI,MAAD,EAAY;AACzB,MAAIqD,aAAarD,MAAb,CAAJ,EAA0B;AACxB,WAAOsD,QAAQC,OAAR,CAAgBF,aAAarD,MAAb,CAAhB,CAAP;AACD;;AAED,MAAIoD,gBAAgBpD,MAAhB,CAAJ,EAA6B;AAC3B,WAAOoD,gBAAgBpD,MAAhB,CAAP;AACD;;AAED,MAAMwD,iBAAiB,IAAIF,OAAJ,CAAY,UAACC,OAAD,EAAUE,MAAV,EAAqB;AACtDnD,OAAG0B,OAAH,CAAW;AACTC,iEAAyDjC,MADhD;AAETkC,cAAQ,KAFC;AAGTC,eAAS,iBAACuB,GAAD,EAAS;AAChB,YAAIA,IAAIC,UAAJ,KAAmB,GAAnB,IAA0BD,IAAI5C,IAAlC,EAAwC;AACtCuC,uBAAarD,MAAb,IAAuB0D,IAAI5C,IAAJ,CAASA,IAAhC;AACAyC,kBAAQG,IAAI5C,IAAJ,CAASA,IAAjB;AACD,SAHD,MAGO;AACL2C,iBAAO,IAAIG,KAAJ,gCAAmBF,IAAIC,UAAvB,WAAuCD,IAAIG,MAA3C,CAAP;AACD;AACF,OAVQ;AAWTzB,YAAM,cAACY,GAAD,EAAS;AACbS,eAAOT,GAAP;AACD,OAbQ;AAcTc,gBAAU,oBAAM;AACd,eAAOV,gBAAgBpD,MAAhB,CAAP;AACD;AAhBQ,KAAX;AAkBD,GAnBsB,CAAvB;;AAqBAoD,kBAAgBpD,MAAhB,IAA0BwD,cAA1B;AACA,SAAOA,cAAP;AACD,CAhCD;;AAkCA3D,OAAOC,OAAP,GAAiB;AACfF;AADe,CAAjB,C;;;;;;;;;;;ACrCA,IAAMmE,SAASpE,mBAAOA,CAACA,CAAsBA,CAA7C;;AAEAqE,UAAU;AACR/D,cAAY;AACVD,YAAQiE,MADE;AAEV/D,UAAM;AACJA,YAAM+D,MADF;AAEJC,aAAO;AAFH;AAFI,GADJ;AAQRpD,QAAM;AACJE,SAAK,EADD;AAEJI,eAAW,EAFP;AAGJV,oBAAgB,CAHZ;AAIJC,wBAAoB;AAJhB,GARE;AAcRwD,aAAW;AACHC,YADG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAEDL,OAAOZ,OAAP,CAAekB,IAAf,CAAoB,IAApB,CAFC;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,GAdH;AAmBRC,WAAS;AACPvE,kBADO,4BACU;AACfgE,aAAOhE,cAAP,CAAsBsE,IAAtB,CAA2B,IAA3B;AACD,KAHM;AAIPzD,eAJO,yBAIO;AACZmD,aAAOnD,WAAP,CAAmByD,IAAnB,CAAwB,IAAxB;AACD,KANM;AAOPtD,cAPO,wBAOM;AACXgD,aAAOhD,UAAP,CAAkBsD,IAAlB,CAAuB,IAAvB;AACD,KATM;AAUP7C,UAVO,kBAUAC,UAVA,EAUY;AACjBsC,aAAOvC,MAAP,CAAc6C,IAAd,CAAmB,IAAnB,EAAyB5C,UAAzB;AACD,KAZM;AAaPY,UAbO,kBAaAC,CAbA,EAaG;AACRyB,aAAO1B,MAAP,CAAcgC,IAAd,CAAmB,IAAnB,EAAyB/B,CAAzB;AACD,KAfM;AAgBPI,WAhBO,mBAgBCJ,CAhBD,EAgBI;AACTyB,aAAOrB,OAAP,CAAe2B,IAAf,CAAoB,IAApB,EAA0B/B,CAA1B;AACD,KAlBM;AAmBPK,qBAnBO,+BAmBa;AAClBoB,aAAOpB,iBAAP,CAAyB0B,IAAzB,CAA8B,IAA9B;AACD;AArBM;AAnBD,CAAV,E","file":"ad-banner\\index.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n","const {getAds} = require('../request.js')\r\n\r\nmodule.exports = {\r\n restoreAdState() {\r\n const slotId = this.properties.slotId\r\n const type = this.properties.type\r\n const adIndexKey = `adIndex_${slotId}_${type}`\r\n const adShowCountKey = `adShowCount_${slotId}_${type}`\r\n\r\n const savedIndex = wx.getStorageSync(adIndexKey) || 0\r\n const savedShowCount = wx.getStorageSync(adShowCountKey) || 0\r\n\r\n this.setData({\r\n currentAdIndex: savedIndex,\r\n currentAdShowCount: savedShowCount\r\n })\r\n },\r\n\r\n saveAdState() {\r\n const slotId = this.properties.slotId\r\n const type = this.properties.type\r\n const adIndexKey = `adIndex_${slotId}_${type}`\r\n const adShowCountKey = `adShowCount_${slotId}_${type}`\r\n\r\n wx.setStorageSync(adIndexKey, this.data.currentAdIndex)\r\n wx.setStorageSync(adShowCountKey, this.data.currentAdShowCount)\r\n },\r\n\r\n loadNextAd() {\r\n const ads = this.data.ads\r\n if (!ads || ads.length === 0) return\r\n\r\n let currentIndex = this.data.currentAdIndex\r\n let showCount = this.data.currentAdShowCount\r\n\r\n const currentAd = ads[currentIndex % ads.length]\r\n\r\n const maxShowCount = currentAd.showCount || 1\r\n if (showCount >= maxShowCount) {\r\n currentIndex = currentIndex + 1\r\n showCount = 0\r\n this.setData({\r\n currentAdIndex: currentIndex,\r\n currentAdShowCount: showCount\r\n })\r\n this.saveAdState()\r\n }\r\n\r\n const ad = ads[currentIndex % ads.length]\r\n this.setData({currentAd: ad})\r\n\r\n if (ad[this.properties.type] === undefined) {\r\n this.setData({\r\n currentAdIndex: currentIndex + 1,\r\n currentAdShowCount: 0\r\n })\r\n this.saveAdState()\r\n this.loadNextAd()\r\n return\r\n }\r\n\r\n this.setData({\r\n currentAdShowCount: showCount + 1\r\n })\r\n this.saveAdState()\r\n },\r\n\r\n report(actionType) {\r\n const slotId = this.properties.slotId\r\n const type = this.properties.type\r\n const source = this.data.currentAd.source\r\n const adId = this.data.currentAd.id\r\n const time = new Date().getTime()\r\n wx.request({\r\n url: `https://wxgo.adwke.com/api/miniapp/report?slotId=${slotId}&type=${type}&source=${source}&actionType=${actionType}&adId=${adId}&time=${time}`,\r\n method: 'GET',\r\n success() {},\r\n fail() {}\r\n })\r\n },\r\n\r\n adLoad(e) {\r\n if (e === 'undefined') {\r\n this.triggerEvent('adClose', {msg: '广告加载成功'})\r\n } else {\r\n this.triggerEvent('adLoad', e.detail || {})\r\n }\r\n this.report('load')\r\n },\r\n\r\n adError(e) {\r\n if (e === 'undefined') {\r\n this.triggerEvent('adError', {msg: 'ad adError'})\r\n } else {\r\n this.triggerEvent('adError', e)\r\n }\r\n },\r\n\r\n adOpenMiniProgram() {\r\n const ad = this.data.currentAd\r\n const appId = ad[this.properties.type].appid || ''\r\n const path = ad[this.properties.type].path || ''\r\n if (appId) {\r\n wx.navigateToMiniProgram({\r\n appId: appId,\r\n path: path,\r\n success: () => {\r\n this.triggerEvent('adOpenMiniProgram', {appId, path})\r\n },\r\n fail: (err) => {\r\n console.error('跳转小程序失败', err)\r\n }\r\n })\r\n }\r\n this.report('click')\r\n },\r\n\r\n async initAds() {\r\n const slotId = this.properties.slotId\r\n const ads = await getAds(slotId)\r\n this.setData({ads})\r\n this.restoreAdState()\r\n this.loadNextAd()\r\n }\r\n}\r\n","const pendingRequests = {}\r\nconst requestCache = {}\r\n\r\nconst getAds = (slotId) => {\r\n if (requestCache[slotId]) {\r\n return Promise.resolve(requestCache[slotId])\r\n }\r\n\r\n if (pendingRequests[slotId]) {\r\n return pendingRequests[slotId]\r\n }\r\n\r\n const requestPromise = new Promise((resolve, reject) => {\r\n wx.request({\r\n url: `https://wxgo.adwke.com/api/miniapp/getads?slotId=${slotId}`,\r\n method: 'GET',\r\n success: (res) => {\r\n if (res.statusCode === 200 && res.data) {\r\n requestCache[slotId] = res.data.data\r\n resolve(res.data.data)\r\n } else {\r\n reject(new Error(`请求失败: ${res.statusCode} - ${res.errMsg}`))\r\n }\r\n },\r\n fail: (err) => {\r\n reject(err)\r\n },\r\n complete: () => {\r\n delete pendingRequests[slotId]\r\n }\r\n })\r\n })\r\n\r\n pendingRequests[slotId] = requestPromise\r\n return requestPromise\r\n}\r\n\r\nmodule.exports = {\r\n getAds\r\n}\r\n","const adBase = require('../mixins/ad-base.js')\r\n\r\nComponent({\r\n properties: {\r\n slotId: String,\r\n type: {\r\n type: String,\r\n value: 'banner'\r\n }\r\n },\r\n data: {\r\n ads: [],\r\n currentAd: {},\r\n currentAdIndex: 0,\r\n currentAdShowCount: 0\r\n },\r\n lifetimes: {\r\n async attached() {\r\n await adBase.initAds.call(this)\r\n }\r\n },\r\n methods: {\r\n restoreAdState() {\r\n adBase.restoreAdState.call(this)\r\n },\r\n saveAdState() {\r\n adBase.saveAdState.call(this)\r\n },\r\n loadNextAd() {\r\n adBase.loadNextAd.call(this)\r\n },\r\n report(actionType) {\r\n adBase.report.call(this, actionType)\r\n },\r\n adLoad(e) {\r\n adBase.adLoad.call(this, e)\r\n },\r\n adError(e) {\r\n adBase.adError.call(this, e)\r\n },\r\n adOpenMiniProgram() {\r\n adBase.adOpenMiniProgram.call(this)\r\n }\r\n }\r\n})\r\n"],"sourceRoot":""}
1
+ {"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/mixins/ad-base.js","webpack:///./src/request.js","webpack:///./src/ad-banner/index.js"],"names":["require","getAds","module","exports","checkAndResetDaily","slotId","properties","type","dateKey","today","Date","toDateString","savedDate","wx","getStorageSync","customAdIndexKey","customAdShowCountKey","setStorageSync","restoreAdState","saveAdState","data","currentAdIndex","currentAdShowCount","isWxAdFailed","wxAdFailed","markWxAdFailed","setData","isAllCustomAdsReachedLimit","ads","length","currentIndex","showCount","lastValidAdIndex","i","undefined","ad","maxShowCount","loadNextAd","wxAd","currentAd","report","actionType","source","adId","id","time","getTime","request","url","method","success","fail","adLoad","e","triggerEvent","msg","detail","adError","adOpenMiniProgram","appId","appid","path","navigateToMiniProgram","err","console","error","initAds","pendingRequests","requestCache","Promise","resolve","requestPromise","reject","res","statusCode","Error","errMsg","complete","adBase","Component","String","value","lifetimes","attached","call","methods"],"mappings":"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","file":"ad-banner\\index.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n","const {getAds} = require('../request.js')\r\n\r\nmodule.exports = {\r\n // 检查并重置每日数据\r\n checkAndResetDaily() {\r\n const slotId = this.properties.slotId\r\n const type = this.properties.type\r\n const dateKey = `adDate_${slotId}_${type}`\r\n\r\n const today = new Date().toDateString()\r\n const savedDate = wx.getStorageSync(dateKey)\r\n\r\n // 如果日期不同,重置所有数据\r\n if (savedDate !== today) {\r\n const customAdIndexKey = `customAdIndex_${slotId}_${type}`\r\n const customAdShowCountKey = `customAdShowCount_${slotId}_${type}`\r\n\r\n wx.setStorageSync(dateKey, today)\r\n wx.setStorageSync(customAdIndexKey, 1) // 自有广告从索引1开始\r\n wx.setStorageSync(customAdShowCountKey, 0)\r\n\r\n return true // 表示已重置\r\n }\r\n\r\n return false // 表示未重置\r\n },\r\n\r\n restoreAdState() {\r\n // 检查并重置每日数据\r\n this.checkAndResetDaily()\r\n },\r\n\r\n saveAdState() {\r\n const slotId = this.properties.slotId\r\n const type = this.properties.type\r\n const customAdIndexKey = `customAdIndex_${slotId}_${type}`\r\n const customAdShowCountKey = `customAdShowCount_${slotId}_${type}`\r\n\r\n // 只保存自有广告的状态(索引>0)\r\n if (this.data.currentAdIndex > 0) {\r\n wx.setStorageSync(customAdIndexKey, this.data.currentAdIndex)\r\n wx.setStorageSync(customAdShowCountKey, this.data.currentAdShowCount)\r\n }\r\n },\r\n\r\n // 检查微信广告是否失败(只在内存中,不持久化)\r\n isWxAdFailed() {\r\n return this.data.wxAdFailed || false\r\n },\r\n\r\n // 标记微信广告失败(只在内存中,不持久化)\r\n markWxAdFailed() {\r\n this.setData({\r\n wxAdFailed: true\r\n })\r\n },\r\n\r\n // 检查所有自有广告是否都达到上限\r\n isAllCustomAdsReachedLimit() {\r\n const ads = this.data.ads\r\n if (!ads || ads.length <= 1) return true // 只有微信广告或没有广告\r\n\r\n const currentIndex = this.data.currentAdIndex\r\n const showCount = this.data.currentAdShowCount\r\n\r\n // 如果当前不是自有广告,返回false\r\n if (currentIndex === 0) return false\r\n\r\n // 找到最后一个有效的自有广告索引\r\n let lastValidAdIndex = -1\r\n for (let i = ads.length - 1; i >= 1; i--) {\r\n if (ads[i][this.properties.type] !== undefined) {\r\n lastValidAdIndex = i\r\n break\r\n }\r\n }\r\n\r\n // 如果没有有效的自有广告,返回true\r\n if (lastValidAdIndex === -1) return true\r\n\r\n // 如果当前索引已经是最后一个有效广告,且达到展示上限,返回true\r\n if (currentIndex === lastValidAdIndex) {\r\n const ad = ads[currentIndex]\r\n const maxShowCount = ad.showCount || 1\r\n return showCount >= maxShowCount\r\n }\r\n\r\n return false\r\n },\r\n\r\n loadNextAd() {\r\n const ads = this.data.ads\r\n if (!ads || ads.length === 0) return\r\n\r\n // 检查并重置每日数据\r\n this.checkAndResetDaily()\r\n\r\n let currentIndex = this.data.currentAdIndex\r\n let showCount = this.data.currentAdShowCount\r\n\r\n // 如果是微信广告(索引0)且未失败,直接加载微信广告\r\n if (currentIndex === 0 && !this.isWxAdFailed()) {\r\n const wxAd = ads[0]\r\n if (wxAd && wxAd[this.properties.type] !== undefined) {\r\n this.setData({currentAd: wxAd})\r\n return\r\n } else {\r\n // 微信广告没有配置,标记为失败,切换到自有广告\r\n this.markWxAdFailed()\r\n currentIndex = 1\r\n showCount = 0\r\n }\r\n }\r\n\r\n // 如果微信广告失败,从自有广告开始\r\n if (currentIndex === 0 && this.isWxAdFailed()) {\r\n // 从存储中恢复自有广告的状态\r\n const slotId = this.properties.slotId\r\n const type = this.properties.type\r\n const customAdIndexKey = `customAdIndex_${slotId}_${type}`\r\n const customAdShowCountKey = `customAdShowCount_${slotId}_${type}`\r\n\r\n currentIndex = wx.getStorageSync(customAdIndexKey) || 1\r\n showCount = wx.getStorageSync(customAdShowCountKey) || 0\r\n }\r\n\r\n // 如果没有自有广告,不展示任何广告\r\n if (ads.length <= 1) {\r\n return\r\n }\r\n\r\n // 检查所有自有广告是否都达到上限\r\n if (this.isAllCustomAdsReachedLimit()) {\r\n return\r\n }\r\n\r\n // 处理自有广告的展示次数限制\r\n let ad = ads[currentIndex]\r\n const maxShowCount = ad.showCount || 1\r\n\r\n // 如果当前自有广告达到展示上限,切换到下一个\r\n if (showCount >= maxShowCount) {\r\n currentIndex = currentIndex + 1\r\n showCount = 0\r\n\r\n // 如果超出广告列表范围,说明所有广告都达到上限\r\n if (currentIndex >= ads.length) {\r\n return\r\n }\r\n\r\n ad = ads[currentIndex]\r\n }\r\n\r\n // 检查当前广告是否有配置\r\n if (ad[this.properties.type] === undefined) {\r\n // 没有配置,跳过并尝试下一个\r\n this.setData({\r\n currentAdIndex: currentIndex + 1,\r\n currentAdShowCount: 0\r\n })\r\n this.saveAdState()\r\n this.loadNextAd()\r\n return\r\n }\r\n\r\n // 设置当前广告\r\n this.setData({\r\n currentAd: ad,\r\n currentAdIndex: currentIndex,\r\n currentAdShowCount: showCount\r\n })\r\n this.saveAdState()\r\n },\r\n\r\n report(actionType) {\r\n const slotId = this.properties.slotId\r\n const type = this.properties.type\r\n const source = this.data.currentAd.source\r\n const adId = this.data.currentAd.id\r\n const time = new Date().getTime()\r\n wx.request({\r\n url: `https://wxgo.adwke.com/api/miniapp/report?slotId=${slotId}&type=${type}&source=${source}&actionType=${actionType}&adId=${adId}&time=${time}`,\r\n method: 'GET',\r\n success() {},\r\n fail() {}\r\n })\r\n },\r\n\r\n adLoad(e) {\r\n if (e === 'undefined') {\r\n this.triggerEvent('adClose', {msg: '广告加载成功'})\r\n } else {\r\n this.triggerEvent('adLoad', e.detail || {})\r\n }\r\n this.report('load')\r\n\r\n // 只有自有广告(索引>0)才增加展示计数\r\n if (this.data.currentAdIndex > 0) {\r\n const showCount = this.data.currentAdShowCount\r\n this.setData({\r\n currentAdShowCount: showCount + 1\r\n })\r\n this.saveAdState()\r\n }\r\n },\r\n\r\n adError(e) {\r\n // 如果是微信广告(索引0)失败,标记为失败状态\r\n if (this.data.currentAdIndex === 0) {\r\n this.markWxAdFailed()\r\n }\r\n\r\n if (e === 'undefined') {\r\n this.triggerEvent('adError', {msg: 'ad adError'})\r\n } else {\r\n this.triggerEvent('adError', e)\r\n }\r\n },\r\n\r\n adOpenMiniProgram() {\r\n const ad = this.data.currentAd\r\n const appId = ad[this.properties.type].appid || ''\r\n const path = ad[this.properties.type].path || ''\r\n if (appId) {\r\n wx.navigateToMiniProgram({\r\n appId: appId,\r\n path: path,\r\n success: () => {\r\n this.triggerEvent('adOpenMiniProgram', {appId, path})\r\n },\r\n fail: (err) => {\r\n console.error('跳转小程序失败', err)\r\n }\r\n })\r\n }\r\n this.report('click')\r\n },\r\n\r\n async initAds() {\r\n const slotId = this.properties.slotId\r\n const ads = await getAds(slotId)\r\n this.setData({ads})\r\n\r\n // 每次初始化时,总是从微信广告开始(索引0)\r\n this.setData({\r\n currentAdIndex: 0,\r\n currentAdShowCount: 0\r\n })\r\n\r\n this.loadNextAd()\r\n }\r\n}\r\n","const pendingRequests = {}\r\nconst requestCache = {}\r\n\r\nconst getAds = (slotId) => {\r\n if (requestCache[slotId]) {\r\n return Promise.resolve(requestCache[slotId])\r\n }\r\n\r\n if (pendingRequests[slotId]) {\r\n return pendingRequests[slotId]\r\n }\r\n\r\n const requestPromise = new Promise((resolve, reject) => {\r\n wx.request({\r\n url: `https://wxgo.adwke.com/api/miniapp/getads?slotId=${slotId}`,\r\n method: 'GET',\r\n success: (res) => {\r\n if (res.statusCode === 200 && res.data) {\r\n requestCache[slotId] = res.data.data\r\n resolve(res.data.data)\r\n } else {\r\n reject(new Error(`请求失败: ${res.statusCode} - ${res.errMsg}`))\r\n }\r\n },\r\n fail: (err) => {\r\n reject(err)\r\n },\r\n complete: () => {\r\n delete pendingRequests[slotId]\r\n }\r\n })\r\n })\r\n\r\n pendingRequests[slotId] = requestPromise\r\n return requestPromise\r\n}\r\n\r\nmodule.exports = {\r\n getAds\r\n}\r\n","const adBase = require('../mixins/ad-base.js')\r\n\r\nComponent({\r\n properties: {\r\n slotId: String,\r\n type: {\r\n type: String,\r\n value: 'banner'\r\n }\r\n },\r\n data: {\r\n ads: [],\r\n currentAd: {},\r\n currentAdIndex: 0,\r\n currentAdShowCount: 0,\r\n wxAdFailed: false // 微信广告失败标记(仅内存,不持久化)\r\n },\r\n lifetimes: {\r\n async attached() {\r\n await adBase.initAds.call(this)\r\n }\r\n },\r\n methods: {\r\n checkAndResetDaily() {\r\n return adBase.checkAndResetDaily.call(this)\r\n },\r\n isWxAdFailed() {\r\n return adBase.isWxAdFailed.call(this)\r\n },\r\n markWxAdFailed() {\r\n adBase.markWxAdFailed.call(this)\r\n },\r\n isAllCustomAdsReachedLimit() {\r\n return adBase.isAllCustomAdsReachedLimit.call(this)\r\n },\r\n restoreAdState() {\r\n adBase.restoreAdState.call(this)\r\n },\r\n saveAdState() {\r\n adBase.saveAdState.call(this)\r\n },\r\n loadNextAd() {\r\n adBase.loadNextAd.call(this)\r\n },\r\n report(actionType) {\r\n adBase.report.call(this, actionType)\r\n },\r\n adLoad(e) {\r\n adBase.adLoad.call(this, e)\r\n },\r\n adError(e) {\r\n adBase.adError.call(this, e) // 先标记失败\r\n this.loadNextAd(); // 再切换广告\r\n },\r\n adOpenMiniProgram() {\r\n adBase.adOpenMiniProgram.call(this)\r\n }\r\n }\r\n})\r\n"],"sourceRoot":""}
@@ -98,53 +98,159 @@ var _require = __webpack_require__(1),
98
98
  getAds = _require.getAds;
99
99
 
100
100
  module.exports = {
101
- restoreAdState: function restoreAdState() {
101
+ // 检查并重置每日数据
102
+ checkAndResetDaily: function checkAndResetDaily() {
102
103
  var slotId = this.properties.slotId;
103
104
  var type = this.properties.type;
104
- var adIndexKey = 'adIndex_' + slotId + '_' + type;
105
- var adShowCountKey = 'adShowCount_' + slotId + '_' + type;
105
+ var dateKey = 'adDate_' + slotId + '_' + type;
106
106
 
107
- var savedIndex = wx.getStorageSync(adIndexKey) || 0;
108
- var savedShowCount = wx.getStorageSync(adShowCountKey) || 0;
107
+ var today = new Date().toDateString();
108
+ var savedDate = wx.getStorageSync(dateKey);
109
109
 
110
- this.setData({
111
- currentAdIndex: savedIndex,
112
- currentAdShowCount: savedShowCount
113
- });
110
+ // 如果日期不同,重置所有数据
111
+ if (savedDate !== today) {
112
+ var customAdIndexKey = 'customAdIndex_' + slotId + '_' + type;
113
+ var customAdShowCountKey = 'customAdShowCount_' + slotId + '_' + type;
114
+
115
+ wx.setStorageSync(dateKey, today);
116
+ wx.setStorageSync(customAdIndexKey, 1); // 自有广告从索引1开始
117
+ wx.setStorageSync(customAdShowCountKey, 0);
118
+
119
+ return true; // 表示已重置
120
+ }
121
+
122
+ return false; // 表示未重置
123
+ },
124
+ restoreAdState: function restoreAdState() {
125
+ // 检查并重置每日数据
126
+ this.checkAndResetDaily();
114
127
  },
115
128
  saveAdState: function saveAdState() {
116
129
  var slotId = this.properties.slotId;
117
130
  var type = this.properties.type;
118
- var adIndexKey = 'adIndex_' + slotId + '_' + type;
119
- var adShowCountKey = 'adShowCount_' + slotId + '_' + type;
131
+ var customAdIndexKey = 'customAdIndex_' + slotId + '_' + type;
132
+ var customAdShowCountKey = 'customAdShowCount_' + slotId + '_' + type;
133
+
134
+ // 只保存自有广告的状态(索引>0)
135
+ if (this.data.currentAdIndex > 0) {
136
+ wx.setStorageSync(customAdIndexKey, this.data.currentAdIndex);
137
+ wx.setStorageSync(customAdShowCountKey, this.data.currentAdShowCount);
138
+ }
139
+ },
140
+
141
+
142
+ // 检查微信广告是否失败(只在内存中,不持久化)
143
+ isWxAdFailed: function isWxAdFailed() {
144
+ return this.data.wxAdFailed || false;
145
+ },
146
+
147
+
148
+ // 标记微信广告失败(只在内存中,不持久化)
149
+ markWxAdFailed: function markWxAdFailed() {
150
+ this.setData({
151
+ wxAdFailed: true
152
+ });
153
+ },
154
+
155
+
156
+ // 检查所有自有广告是否都达到上限
157
+ isAllCustomAdsReachedLimit: function isAllCustomAdsReachedLimit() {
158
+ var ads = this.data.ads;
159
+ if (!ads || ads.length <= 1) return true; // 只有微信广告或没有广告
160
+
161
+ var currentIndex = this.data.currentAdIndex;
162
+ var showCount = this.data.currentAdShowCount;
120
163
 
121
- wx.setStorageSync(adIndexKey, this.data.currentAdIndex);
122
- wx.setStorageSync(adShowCountKey, this.data.currentAdShowCount);
164
+ // 如果当前不是自有广告,返回false
165
+ if (currentIndex === 0) return false;
166
+
167
+ // 找到最后一个有效的自有广告索引
168
+ var lastValidAdIndex = -1;
169
+ for (var i = ads.length - 1; i >= 1; i--) {
170
+ if (ads[i][this.properties.type] !== undefined) {
171
+ lastValidAdIndex = i;
172
+ break;
173
+ }
174
+ }
175
+
176
+ // 如果没有有效的自有广告,返回true
177
+ if (lastValidAdIndex === -1) return true;
178
+
179
+ // 如果当前索引已经是最后一个有效广告,且达到展示上限,返回true
180
+ if (currentIndex === lastValidAdIndex) {
181
+ var ad = ads[currentIndex];
182
+ var maxShowCount = ad.showCount || 1;
183
+ return showCount >= maxShowCount;
184
+ }
185
+
186
+ return false;
123
187
  },
124
188
  loadNextAd: function loadNextAd() {
125
189
  var ads = this.data.ads;
126
190
  if (!ads || ads.length === 0) return;
127
191
 
192
+ // 检查并重置每日数据
193
+ this.checkAndResetDaily();
194
+
128
195
  var currentIndex = this.data.currentAdIndex;
129
196
  var showCount = this.data.currentAdShowCount;
130
197
 
131
- var currentAd = ads[currentIndex % ads.length];
198
+ // 如果是微信广告(索引0)且未失败,直接加载微信广告
199
+ if (currentIndex === 0 && !this.isWxAdFailed()) {
200
+ var wxAd = ads[0];
201
+ if (wxAd && wxAd[this.properties.type] !== undefined) {
202
+ this.setData({ currentAd: wxAd });
203
+ return;
204
+ } else {
205
+ // 微信广告没有配置,标记为失败,切换到自有广告
206
+ this.markWxAdFailed();
207
+ currentIndex = 1;
208
+ showCount = 0;
209
+ }
210
+ }
211
+
212
+ // 如果微信广告失败,从自有广告开始
213
+ if (currentIndex === 0 && this.isWxAdFailed()) {
214
+ // 从存储中恢复自有广告的状态
215
+ var slotId = this.properties.slotId;
216
+ var type = this.properties.type;
217
+ var customAdIndexKey = 'customAdIndex_' + slotId + '_' + type;
218
+ var customAdShowCountKey = 'customAdShowCount_' + slotId + '_' + type;
219
+
220
+ currentIndex = wx.getStorageSync(customAdIndexKey) || 1;
221
+ showCount = wx.getStorageSync(customAdShowCountKey) || 0;
222
+ }
132
223
 
133
- var maxShowCount = currentAd.showCount || 1;
224
+ // 如果没有自有广告,不展示任何广告
225
+ if (ads.length <= 1) {
226
+ return;
227
+ }
228
+
229
+ // 检查所有自有广告是否都达到上限
230
+ if (this.isAllCustomAdsReachedLimit()) {
231
+ return;
232
+ }
233
+
234
+ // 处理自有广告的展示次数限制
235
+ var ad = ads[currentIndex];
236
+ var maxShowCount = ad.showCount || 1;
237
+
238
+ // 如果当前自有广告达到展示上限,切换到下一个
134
239
  if (showCount >= maxShowCount) {
135
240
  currentIndex = currentIndex + 1;
136
241
  showCount = 0;
137
- this.setData({
138
- currentAdIndex: currentIndex,
139
- currentAdShowCount: showCount
140
- });
141
- this.saveAdState();
142
- }
143
242
 
144
- var ad = ads[currentIndex % ads.length];
145
- this.setData({ currentAd: ad });
243
+ // 如果超出广告列表范围,说明所有广告都达到上限
244
+ if (currentIndex >= ads.length) {
245
+ return;
246
+ }
146
247
 
248
+ ad = ads[currentIndex];
249
+ }
250
+
251
+ // 检查当前广告是否有配置
147
252
  if (ad[this.properties.type] === undefined) {
253
+ // 没有配置,跳过并尝试下一个
148
254
  this.setData({
149
255
  currentAdIndex: currentIndex + 1,
150
256
  currentAdShowCount: 0
@@ -154,8 +260,11 @@ module.exports = {
154
260
  return;
155
261
  }
156
262
 
263
+ // 设置当前广告
157
264
  this.setData({
158
- currentAdShowCount: showCount + 1
265
+ currentAd: ad,
266
+ currentAdIndex: currentIndex,
267
+ currentAdShowCount: showCount
159
268
  });
160
269
  this.saveAdState();
161
270
  },
@@ -179,8 +288,22 @@ module.exports = {
179
288
  this.triggerEvent('adLoad', e.detail || {});
180
289
  }
181
290
  this.report('load');
291
+
292
+ // 只有自有广告(索引>0)才增加展示计数
293
+ if (this.data.currentAdIndex > 0) {
294
+ var showCount = this.data.currentAdShowCount;
295
+ this.setData({
296
+ currentAdShowCount: showCount + 1
297
+ });
298
+ this.saveAdState();
299
+ }
182
300
  },
183
301
  adError: function adError(e) {
302
+ // 如果是微信广告(索引0)失败,标记为失败状态
303
+ if (this.data.currentAdIndex === 0) {
304
+ this.markWxAdFailed();
305
+ }
306
+
184
307
  if (e === 'undefined') {
185
308
  this.triggerEvent('adError', { msg: 'ad adError' });
186
309
  } else {
@@ -222,7 +345,13 @@ module.exports = {
222
345
  ads = _context.sent;
223
346
 
224
347
  this.setData({ ads: ads });
225
- this.restoreAdState();
348
+
349
+ // 每次初始化时,总是从微信广告开始(索引0)
350
+ this.setData({
351
+ currentAdIndex: 0,
352
+ currentAdShowCount: 0
353
+ });
354
+
226
355
  this.loadNextAd();
227
356
 
228
357
  case 7:
@@ -324,7 +453,8 @@ Component({
324
453
  currentAd: {},
325
454
  currentAdIndex: 0,
326
455
  currentAdShowCount: 0,
327
- isshow: false
456
+ isshow: false,
457
+ wxAdFailed: false // 微信广告失败标记(仅内存,不持久化)
328
458
  },
329
459
  lifetimes: {
330
460
  attached: function () {
@@ -355,6 +485,18 @@ Component({
355
485
  }()
356
486
  },
357
487
  methods: {
488
+ checkAndResetDaily: function checkAndResetDaily() {
489
+ return adBase.checkAndResetDaily.call(this);
490
+ },
491
+ isWxAdFailed: function isWxAdFailed() {
492
+ return adBase.isWxAdFailed.call(this);
493
+ },
494
+ markWxAdFailed: function markWxAdFailed() {
495
+ adBase.markWxAdFailed.call(this);
496
+ },
497
+ isAllCustomAdsReachedLimit: function isAllCustomAdsReachedLimit() {
498
+ return adBase.isAllCustomAdsReachedLimit.call(this);
499
+ },
358
500
  restoreAdState: function restoreAdState() {
359
501
  adBase.restoreAdState.call(this);
360
502
  },
@@ -371,7 +513,8 @@ Component({
371
513
  adBase.adLoad.call(this, e);
372
514
  },
373
515
  adError: function adError(e) {
374
- adBase.adError.call(this, e);
516
+ adBase.adError.call(this, e); // 先标记失败
517
+ this.loadNextAd(); // 再切换广告
375
518
  },
376
519
  adOpenMiniProgram: function adOpenMiniProgram() {
377
520
  adBase.adOpenMiniProgram.call(this);
@@ -416,8 +559,8 @@ Component({
416
559
  this.interstitialAd.destroy();
417
560
  this.interstitialAd = null;
418
561
  }
419
- this.loadNextAd();
420
- this.loadInterstitial();
562
+ // this.loadNextAd()
563
+ // this.loadInterstitial()
421
564
  },
422
565
  handleClose: function handleClose() {
423
566
  this.setData({ isshow: false });