greenPro/unpackage/dist/dev/mp-weixin/pages/template/tabbar/tabbar.js

272 lines
8.1 KiB
JavaScript
Raw Normal View History

2024-06-02 14:51:29 +00:00
"use strict";
const common_vendor = require("../../../common/vendor.js");
const mediaItem = () => "./news-item.js";
const MAX_CACHE_DATA = 100;
const MAX_CACHE_PAGE = 3;
const newsData = {
data0: {
"datetime": "40分钟前",
"article_type": 0,
"title": "uni-app行业峰会频频亮相开发者反响热烈!",
"source": "DCloud",
"comment_count": 639
},
data1: {
"datetime": "一天前",
"article_type": 1,
"title": "DCloud完成B2轮融资uni-app震撼发布!",
"image_url": "https://web-assets.dcloud.net.cn/unidoc/zh/shuijiao-small.jpg",
"source": "DCloud",
"comment_count": 11395
},
data2: {
"datetime": "一天前",
"article_type": 2,
"title": "中国技术界小奇迹HBuilder开发者突破200万",
"image_url": "https://web-assets.dcloud.net.cn/unidoc/zh/muwu-samll.jpg",
"source": "DCloud",
"comment_count": 11395
},
data3: {
"article_type": 3,
"image_list": [{
"url": "https://web-assets.dcloud.net.cn/unidoc/zh/cbd%20-small.jpg",
"width": 563,
"height": 316
}, {
"url": "https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/b4cd3000-517d-11eb-a16f-5b3e54966275.jpg",
"width": 641,
"height": 360
}, {
"url": "https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/b7c7f970-517d-11eb-97b7-0dc4655d6e68.jpg",
"width": 640,
"height": 360
}],
"datetime": "5分钟前",
"title": "uni-app 支持使用 npm 安装第三方包,生态更趋丰富",
"source": "DCloud",
"comment_count": 11
},
data4: {
"datetime": "2小时前",
"article_type": 4,
"title": "uni-app 支持原生小程序自定义组件,更开放、更自由",
"image_url": "https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/b2e201d0-517d-11eb-8a36-ebb87efcf8c0.jpg",
"source": "DCloud",
"comment_count": 69
}
};
const _sfc_main = {
components: {
mediaItem
},
data() {
return {
newsList: [],
cacheTab: [],
tabIndex: 0,
tabBars: [{
name: "关注",
id: "guanzhu"
}, {
name: "推荐",
id: "tuijian"
}, {
name: "体育",
id: "tiyu"
}, {
name: "热点",
id: "redian"
}, {
name: "财经",
id: "caijing"
}, {
name: "娱乐",
id: "yule"
}, {
name: "军事",
id: "junshi"
}, {
name: "历史",
id: "lishi"
}, {
name: "本地",
id: "bendi"
}],
scrollInto: "",
showTips: false,
navigateFlag: false,
pulling: false,
refreshIcon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB5QTFRFcHBw3Nzct7e39vb2ycnJioqK7e3tpqam29vb////D8oK7wAAAAp0Uk5T////////////ALLMLM8AAABxSURBVHja7JVBDoAgDASrjqj//7CJBi90iyYeOHTPMwmFZrHjYyyFYYUy1bwUZqtJIYVxhf1a6u0R7iUvWsCcrEtwJHp8MwMdvh2amHduiZD3rpWId9+BgPd7Cc2LIkPyqvlQvKxKBJ//Qwq/CacAAwDUv0a0YuKhzgAAAABJRU5ErkJggg=="
};
},
onLoad() {
setTimeout(() => {
this.tabBars.forEach((tabBar) => {
this.newsList.push({
data: [],
isLoading: false,
refreshText: "",
loadingText: "加载更多..."
});
});
this.getList(0);
}, 350);
},
methods: {
getList(index) {
let activeTab = this.newsList[index];
let list = [];
for (let i = 1; i <= 10; i++) {
let item = Object.assign({}, newsData["data" + Math.floor(Math.random() * 5)]);
item.id = this.newGuid();
list.push(item);
}
activeTab.data = activeTab.data.concat(list);
},
goDetail(e) {
if (this.navigateFlag) {
return;
}
this.navigateFlag = true;
common_vendor.index.navigateTo({
url: "./detail/detail?title=" + e.title
});
setTimeout(() => {
this.navigateFlag = false;
}, 200);
},
close(index1, index2) {
common_vendor.index.showModal({
content: "是否删除本条信息?",
success: (res) => {
if (res.confirm) {
this.newsList[index1].data.splice(index2, 1);
}
}
});
},
loadMore(e) {
setTimeout(() => {
this.getList(this.tabIndex);
}, 500);
},
ontabtap(e) {
let index = e.target.dataset.current || e.currentTarget.dataset.current;
this.switchTab(index);
},
ontabchange(e) {
let index = e.target.current || e.detail.current;
this.switchTab(index);
},
switchTab(index) {
if (this.newsList[index].data.length === 0) {
this.getList(index);
}
if (this.tabIndex === index) {
return;
}
if (this.newsList[this.tabIndex].data.length > MAX_CACHE_DATA) {
let isExist = this.cacheTab.indexOf(this.tabIndex);
if (isExist < 0) {
this.cacheTab.push(this.tabIndex);
}
}
this.tabIndex = index;
this.scrollInto = this.tabBars[index].id;
if (this.cacheTab.length > MAX_CACHE_PAGE) {
let cacheIndex = this.cacheTab[0];
this.clearTabData(cacheIndex);
this.cacheTab.splice(0, 1);
}
},
clearTabData(e) {
this.newsList[e].data.length = 0;
this.newsList[e].loadingText = "加载更多...";
},
refreshData() {
},
onrefresh(e) {
var tab = this.newsList[this.tabIndex];
if (!tab.refreshFlag) {
return;
}
tab.refreshing = true;
tab.refreshText = "正在刷新...";
setTimeout(() => {
this.refreshData();
this.pulling = true;
tab.refreshing = false;
tab.refreshFlag = false;
tab.refreshText = "已刷新";
setTimeout(() => {
this.pulling = false;
}, 500);
}, 2e3);
},
onpullingdown(e) {
var tab = this.newsList[this.tabIndex];
if (tab.refreshing || this.pulling) {
return;
}
if (Math.abs(e.pullingDistance) > Math.abs(e.viewHeight)) {
tab.refreshFlag = true;
tab.refreshText = "释放立即刷新";
} else {
tab.refreshFlag = false;
tab.refreshText = "下拉可以刷新";
}
},
newGuid() {
let s4 = function() {
return (65536 * (1 + Math.random()) | 0).toString(16).substring(1);
};
return (s4() + s4() + "-" + s4() + "-4" + s4().substr(0, 3) + "-" + s4() + "-" + s4() + s4() + s4()).toUpperCase();
}
}
};
if (!Array) {
const _component_media_item = common_vendor.resolveComponent("media-item");
_component_media_item();
}
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return {
a: common_vendor.f($data.tabBars, (tab, index, i0) => {
return {
a: common_vendor.t(tab.name),
b: common_vendor.n($data.tabIndex == index ? "uni-tab-item-title-active" : ""),
c: tab.id,
d: tab.id,
e: index,
f: common_vendor.o((...args) => $options.ontabtap && $options.ontabtap(...args), tab.id)
};
}),
b: $data.scrollInto,
c: common_vendor.f($data.newsList, (tab, index1, i0) => {
return common_vendor.e({
a: common_vendor.f(tab.data, (newsitem, index2, i1) => {
return {
a: common_vendor.o(($event) => $options.close(index1, index2), newsitem.id),
b: common_vendor.o(($event) => $options.goDetail(newsitem), newsitem.id),
c: "46f8da5b-0-" + i0 + "-" + i1,
d: common_vendor.p({
options: newsitem
}),
e: newsitem.id
};
}),
b: tab.isLoading || tab.data.length > 4
}, tab.isLoading || tab.data.length > 4 ? {
c: common_vendor.t(tab.loadingText)
} : {}, {
d: common_vendor.o(($event) => $options.loadMore(index1), index1),
e: index1
});
}),
d: $data.tabIndex,
e: common_vendor.o((...args) => $options.ontabchange && $options.ontabchange(...args))
};
}
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__file", "E:/xianyu/app/greenPro/pages/template/tabbar/tabbar.nvue"]]);
wx.createPage(MiniProgramPage);