Commit bc0fc281 authored by tao.huang's avatar tao.huang

feat: tabar

parent 17185812
<template>
<view class="brand-container">
<view class="content">
<!-- 品牌故事内容 -->
<text>品牌故事内容</text>
</view>
</view>
</template>
<script setup>
// 品牌故事组件逻辑
</script>
<style lang="scss" scoped>
.brand-container {
padding: 20rpx;
.content {
padding-bottom: 100rpx;
}
}
</style>
<template>
<view class="home-container">
<view class="content">
<!-- 首页内容 -->
<text>首页内容</text>
</view>
</view>
</template>
<script setup>
// 首页组件逻辑
</script>
<style lang="scss" scoped>
.home-container {
padding: 20rpx;
.content {
padding-bottom: 100rpx;
}
}
</style>
<template>
<view class="integral-container">
<view class="content">
<!-- 积分服务内容 -->
<text>积分服务内容</text>
</view>
</view>
</template>
<script setup>
// 积分服务组件逻辑
</script>
<style lang="scss" scoped>
.integral-container {
padding: 20rpx;
.content {
padding-bottom: 100rpx;
}
}
</style>
<template>
<view class="my-container">
<view class="content">
<!-- 我的页面内容 -->
<text>我的页面内容</text>
</view>
</view>
</template>
<script setup>
// 我的页面组件逻辑
</script>
<style lang="scss" scoped>
.my-container {
padding: 20rpx;
.content {
padding-bottom: 100rpx;
}
}
</style>
<template>
<view class="tab-bar">
<view
v-for="(item, index) in tabList"
:key="index"
class="tab-item"
:class="{ active: currentIndex === index }"
@click="handleTabClick(index, item)"
>
<image :src="currentIndex === index ? item.selectedIconPath : item.iconPath" class="tab-icon" />
<text class="tab-text" :class="{ active: currentIndex === index }">{{ item.text }}</text>
</view>
</view>
</template>
<script setup>
import { ref } from 'vue'
const props = defineProps({
tabList: {
type: Array,
default: () => [
{
text: '首页',
iconPath: '/static/tabBar/icon_tab_home_normal.png',
selectedIconPath: '/static/tabBar/icon_tab_home_selected.png'
},
{
text: '品牌故事',
iconPath: '/static/tabBar/icon_tab_brand_normal.png',
selectedIconPath: '/static/tabBar/icon_tab_brand_selected.png'
},
{
text: '积分服务',
iconPath: '/static/tabBar/icon_tab_gift_normal.png',
selectedIconPath: '/static/tabBar/icon_tab_gift_selected.png'
},
{
text: '我的',
iconPath: '/static/tabBar/icon_tab_person_normal.png',
selectedIconPath: '/static/tabBar/icon_tab_person_selected.png'
}
]
}
})
const emit = defineEmits(['tabClick'])
const currentIndex = ref(0)
const handleTabClick = (index, item) => {
currentIndex.value = index
emit('tabClick', { index, item })
}
</script>
<style lang="scss" scoped>
.tab-bar {
position: fixed;
bottom: 0;
left: 0;
right: 0;
height: 100rpx;
background-color: #ffffff;
display: flex;
justify-content: space-around;
align-items: center;
box-shadow: 0 -2rpx 10rpx rgba(0, 0, 0, 0.05);
.tab-item {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100%;
.tab-icon {
width: 48rpx;
height: 48rpx;
margin-bottom: 4rpx;
}
.tab-text {
font-size: 24rpx;
color: #666;
&.active {
color: #007AFF;
}
}
}
}
</style>
\ No newline at end of file
......@@ -5,58 +5,14 @@
"style": {
"navigationBarTitleText": "首页"
}
},
{
"path" : "pages/brand/brand",
"style" :
{
"navigationBarTitleText" : "品牌"
}
},
{
"path" : "pages/integral/integral",
"style" :
{
"navigationBarTitleText" : "积分"
}
},
{
"path" : "pages/my/my",
"style" :
{
"navigationBarTitleText" : "我的"
}
}
],
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "uni-app",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
},
"tabBar": {
"color": "#999999",
"selectedColor": "#FF0000",
"backgroundColor": "#FFFFFF",
"borderStyle": "black",
"list": [
{
"pagePath": "pages/index/index",
"text": "首页"
},
{
"pagePath": "pages/brand/brand",
"text": "品牌"
},
{
"pagePath": "pages/integral/integral",
"text": "积分"
},
{
"pagePath": "pages/my/my",
"text": "我的"
}
]
"backgroundColor": "#F8F8F8",
"navigationStyle": "custom"
},
"uniIdRouter": {}
}
<template>
<view>
</view>
</template>
<script setup>
</script>
<style>
</style>
<template>
<view class="content">
<image class="logo" src="/static/logo.png"></image>
<view class="text-area">
<text class="title">{{title}}</text>
<textarea name="" id="" cols="30" rows="10"></textarea>
</view>
<view class="container">
<Home v-if="curTabIndex == 0"></Home>
<Brand v-if="curTabIndex == 1"></Brand>
<Integral v-if="curTabIndex == 2"></Integral>
<My v-if="curTabIndex == 3"></My>
<TabBar @tabClick="handleTabClick" />
</view>
</template>
<script>
import TabBar from '@/components/TabBar.vue'
import Home from '@/components/Home.vue';
import Brand from '@/components/Brand.vue';
import Integral from '@/components/Integral.vue';
import My from '@/components/My.vue';
export default {
data() {
return {
title: 'Hello'
curTabIndex: 0
};
},
onLoad() {},
methods: {
handleTabClick({
index,
item
}) {
console.log('Tab clicked:', index, item)
// 这里可以根据index或item进行相应的页面跳转或其他操作
this.curTabIndex = index
}
},
onLoad() {
components: {
TabBar,
Home,
Brand,
Integral,
My
}
};
</script>
},
methods: {
<style lang="scss" scoped>
.container {
min-height: 100vh;
background-color: #f5f5f5;
.content {
padding-bottom: 100rpx; // 为底部TabBar留出空间
}
}
</script>
<style>
.content {
display: flex;
flex-direction: column;
......@@ -51,4 +77,4 @@
font-size: 36rpx;
color: #8f8f94;
}
</style>
</style>
\ No newline at end of file
<template>
<view>
</view>
</template>
<script setup>
</script>
<style>
</style>
<template>
<view>
</view>
</template>
<script setup>
</script>
<style>
</style>
{"version":3,"names":["TabBar","home","brand","integral","my","_sfc_main","data","curTabIndex","onLoad","methods","handleTabClick","_ref","index","item","common_vendor","__f__","components","wx","createPage","MiniProgramPage"],"sources":["index.vue","index.vue?type=page"],"sourcesContent":["<template>\r\n\t<view class=\"container\">\r\n\t\t<home v-if=\"curTabIndex == 0\"></home>\n\t\t<brand v-if=\"curTabIndex == 1\"></brand>\n\t\t<integral v-if=\"curTabIndex == 2\"></integral>\n\t\t<my v-if=\"curTabIndex == 3\"></my>\r\n\t\t<TabBar @tabClick=\"handleTabClick\" />\r\n\t</view>\r\n</template>\r\n\r\n<script>\r\n\timport TabBar from '@/components/TabBar.vue'\r\n\timport home from '@/components/main/home.vue';\n\timport brand from '@/components/main/brand.vue';\n\timport integral from '@/components/main/integral.vue';\n\timport my from '@/components/main/my.vue';\r\n\r\n\texport default {\r\n\t\tdata() {\r\n\t\t\treturn {\r\n\t\t\t\tcurTabIndex: 0\r\n\t\t\t};\r\n\t\t},\r\n\t\tonLoad() {},\r\n\t\tmethods: {\r\n\t\t\thandleTabClick({\r\n\t\t\t\tindex,\r\n\t\t\t\titem\r\n\t\t\t}) {\r\n\t\t\t\tconsole.log('Tab clicked:', index, item)\r\n\t\t\t\t// 这里可以根据index或item进行相应的页面跳转或其他操作\r\n\t\t\t\tthis.data.curTabIndex = index\r\n\t\t\t}\r\n\t\t},\r\n\t\tcomponents: {\r\n\t\t\tTabBar,\n\t\t\thome,\n\t\t\tbrand,\n\t\t\tintegral,\n\t\t\tmy\r\n\t\t}\r\n\t};\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n\t.container {\r\n\t\tmin-height: 100vh;\r\n\t\tbackground-color: #f5f5f5;\r\n\r\n\t\t.content {\r\n\t\t\tpadding-bottom: 100rpx; // 为底部TabBar留出空间\r\n\t\t}\r\n\t}\r\n\r\n\t.content {\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: column;\r\n\t\talign-items: center;\r\n\t\tjustify-content: center;\r\n\t}\r\n\r\n\t.logo {\r\n\t\theight: 200rpx;\r\n\t\twidth: 200rpx;\r\n\t\tmargin-top: 200rpx;\r\n\t\tmargin-left: auto;\r\n\t\tmargin-right: auto;\r\n\t\tmargin-bottom: 50rpx;\r\n\t}\r\n\r\n\t.text-area {\r\n\t\tdisplay: flex;\r\n\t\tjustify-content: center;\r\n\t}\r\n\r\n\t.title {\r\n\t\tfont-size: 36rpx;\r\n\t\tcolor: #8f8f94;\r\n\t}\r\n</style>","import MiniProgramPage from '/Users/huangtao/Duiba/project/20250528_FHQ1/pages/index/index.vue'\nwx.createPage(MiniProgramPage)"],"mappings":";;;;AAWC,IAAKA,MAAA,GAAU,SAAVA,OAAA;EAAA,OAAqB;AAAA;AAC1B,IAAOC,IAAA,GAAM,SAANA,KAAA;EAAA,OAAiB;AAAA;AACxB,IAAOC,KAAA,GAAO,SAAPA,MAAA;EAAA,OAAkB;AAAA;AACzB,IAAAC,QAAA,GAAiB,SAAjBA,SAAA;EAAA,OAA4B;AAAA;AAC5B,IAAKC,EAAA,GAAM,SAANA,GAAA;EAAA,OAAiB;AAAA;AAEtB,IAAKC,SAAA,GAAU;EACdC,IAAA,WAAAA,KAAA,EAAO;IACN,OAAO;MACNC,WAAA,EAAa;IAAA;EAEd;EACDC,MAAA,WAAAA,OAAA,EAAS,CAAE;EACXC,OAAA,EAAS;IACRC,cAAA,WAAAA,eAAAC,IAAA,EAGG;MAAA,IAFFC,KAAA,GAAAD,IAAA,CAAAC,KAAA;QACAC,IAAA,GAAAF,IAAA,CAAAE,IAAA;MAEAC,aAAA,CAAAF,KAAA,CAAAG,KAAA,uCAAY,gBAAgBH,KAAA,EAAOC,IAAI;MAEvC,KAAKP,IAAA,CAAKC,WAAA,GAAcK,KAAA;IACzB;EACA;EACDI,UAAA,EAAY;IACXhB,MAAA,EAAAA,MAAA;IACAC,IAAA,EAAAA,IAAA;IACAC,KAAA,EAAAA,KAAA;IACAC,QAAA,EAAAA,QAAA;IACAC,EAAA,EAAAA;EACD;;;;;;;;;;;;;;;;;;;;;;;;ACvCFa,EAAA,CAAGC,UAAA,CAAWC,eAAe","ignoreList":[]}
\ No newline at end of file
{"version":3,"file":"app.js","sources":["App.vue","main.js"],"sourcesContent":["<script>\r\n\texport default {\r\n\t\tonLaunch: function() {\r\n\t\t\tconsole.log('App Launch')\r\n\t\t},\r\n\t\tonShow: function() {\r\n\t\t\tconsole.log('App Show')\r\n\t\t},\r\n\t\tonHide: function() {\r\n\t\t\tconsole.log('App Hide')\r\n\t\t}\r\n\t}\r\n</script>\r\n\r\n<style>\r\n\t/*每个页面公共css */\r\n</style>\n","import App from \"./App\";\r\n\r\n// #ifndef VUE3\r\nimport Vue from \"vue\";\r\nimport \"./uni.promisify.adaptor\";\r\n\r\nimport { api } from \"@/api/index.js\";\r\n\r\n// 全局挂载后使用\r\nVue.prototype.$api = api;\r\n\r\nVue.config.productionTip = false;\r\nApp.mpType = \"app\";\r\n\r\nconst app = new Vue({\r\n ...App,\r\n});\r\napp.$mount();\r\n// #endif\r\n\r\n// #ifdef VUE3\r\nimport { createSSRApp } from \"vue\";\r\nexport function createApp() {\r\n const app = createSSRApp(App);\r\n return {\r\n app,\r\n };\r\n}\r\n// #endif\r\n"],"names":["uni","createSSRApp","App"],"mappings":";;;;;;;;;AACC,MAAK,YAAU;AAAA,EACd,UAAU,WAAW;AACpBA,kBAAAA,MAAA,MAAA,OAAA,gBAAY,YAAY;AAAA,EACxB;AAAA,EACD,QAAQ,WAAW;AAClBA,kBAAAA,MAAY,MAAA,OAAA,gBAAA,UAAU;AAAA,EACtB;AAAA,EACD,QAAQ,WAAW;AAClBA,kBAAAA,MAAY,MAAA,OAAA,iBAAA,UAAU;AAAA,EACvB;AACD;ACWM,SAAS,YAAY;AAC1B,QAAM,MAAMC,2BAAaC,SAAG;AAC5B,SAAO;AAAA,IACL;AAAA,EACJ;AACA;;;"}
\ No newline at end of file
{"version":3,"file":"app.js","sources":["App.vue","main.js"],"sourcesContent":["<script>\r\n\texport default {\r\n\t\tonLaunch: function() {\r\n\t\t\tconsole.log('App Launch')\r\n\t\t},\r\n\t\tonShow: function() {\r\n\t\t\tconsole.log('App Show')\r\n\t\t},\r\n\t\tonHide: function() {\r\n\t\t\tconsole.log('App Hide')\r\n\t\t}\r\n\t}\r\n</script>\r\n\r\n<style>\r\n\t/*每个页面公共css */\r\n</style>\n","import App from \"./App\";\r\n\r\n// #ifndef VUE3\r\nimport Vue from \"vue\";\r\nimport \"./uni.promisify.adaptor\";\r\n\r\nimport { api } from \"@/api/index.js\";\r\n\r\n// 全局挂载后使用\r\nVue.prototype.$api = api;\r\n\r\nVue.config.productionTip = false;\r\nApp.mpType = \"app\";\r\n\r\nconst app = new Vue({\r\n ...App,\r\n});\r\napp.$mount();\r\n// #endif\r\n\r\n// #ifdef VUE3\r\nimport { createSSRApp } from \"vue\";\r\nexport function createApp() {\r\n const app = createSSRApp(App);\r\n return {\r\n app,\r\n };\r\n}\r\n// #endif\r\n"],"names":["uni","createSSRApp","App"],"mappings":";;;;;;AACC,MAAK,YAAU;AAAA,EACd,UAAU,WAAW;AACpBA,kBAAAA,MAAA,MAAA,OAAA,gBAAY,YAAY;AAAA,EACxB;AAAA,EACD,QAAQ,WAAW;AAClBA,kBAAAA,MAAY,MAAA,OAAA,gBAAA,UAAU;AAAA,EACtB;AAAA,EACD,QAAQ,WAAW;AAClBA,kBAAAA,MAAY,MAAA,OAAA,iBAAA,UAAU;AAAA,EACvB;AACD;ACWM,SAAS,YAAY;AAC1B,QAAM,MAAMC,2BAAaC,SAAG;AAC5B,SAAO;AAAA,IACL;AAAA,EACJ;AACA;;;"}
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
{"version":3,"file":"Brand.js","sources":["/Users/huangtao/Duiba/project/20250528_FHQ1/components/Brand.vue?type=component"],"sourcesContent":["import Component from '/Users/huangtao/Duiba/project/20250528_FHQ1/components/Brand.vue'\nwx.createComponent(Component)"],"names":[],"mappings":";;;;;;;;;;;AACA,GAAG,gBAAgB,SAAS;"}
\ No newline at end of file
{"version":3,"file":"Home.js","sources":["/Users/huangtao/Duiba/project/20250528_FHQ1/components/Home.vue?type=component"],"sourcesContent":["import Component from '/Users/huangtao/Duiba/project/20250528_FHQ1/components/Home.vue'\nwx.createComponent(Component)"],"names":[],"mappings":";;;;;;;;;;;AACA,GAAG,gBAAgB,SAAS;"}
\ No newline at end of file
{"version":3,"file":"Integral.js","sources":["/Users/huangtao/Duiba/project/20250528_FHQ1/components/Integral.vue?type=component"],"sourcesContent":["import Component from '/Users/huangtao/Duiba/project/20250528_FHQ1/components/Integral.vue'\nwx.createComponent(Component)"],"names":[],"mappings":";;;;;;;;;;;AACA,GAAG,gBAAgB,SAAS;"}
\ No newline at end of file
{"version":3,"file":"My.js","sources":["/Users/huangtao/Duiba/project/20250528_FHQ1/components/My.vue?type=component"],"sourcesContent":["import Component from '/Users/huangtao/Duiba/project/20250528_FHQ1/components/My.vue'\nwx.createComponent(Component)"],"names":[],"mappings":";;;;;;;;;;;AACA,GAAG,gBAAgB,SAAS;"}
\ No newline at end of file
{"version":3,"file":"TabBar.js","sources":["components/TabBar.vue","/Users/huangtao/Duiba/project/20250528_FHQ1/components/TabBar.vue?type=component"],"sourcesContent":["<template>\n <view class=\"tab-bar\">\n <view\n v-for=\"(item, index) in tabList\"\n :key=\"index\"\n class=\"tab-item\"\n :class=\"{ active: currentIndex === index }\"\n @click=\"handleTabClick(index, item)\"\n >\n <image :src=\"currentIndex === index ? item.selectedIconPath : item.iconPath\" class=\"tab-icon\" />\n <text class=\"tab-text\" :class=\"{ active: currentIndex === index }\">{{ item.text }}</text>\n </view>\n </view>\n</template>\n\n<script setup>\nimport { ref } from 'vue'\n\nconst props = defineProps({\n tabList: {\n type: Array,\n default: () => [\n {\n text: '首页',\n iconPath: '/static/tabBar/icon_tab_home_normal.png',\n selectedIconPath: '/static/tabBar/icon_tab_home_selected.png'\n },\n {\n text: '品牌故事',\n iconPath: '/static/tabBar/icon_tab_brand_normal.png',\n selectedIconPath: '/static/tabBar/icon_tab_brand_selected.png'\n },\n {\n text: '积分服务',\n iconPath: '/static/tabBar/icon_tab_gift_normal.png',\n selectedIconPath: '/static/tabBar/icon_tab_gift_selected.png'\n },\n {\n text: '我的',\n iconPath: '/static/tabBar/icon_tab_person_normal.png',\n selectedIconPath: '/static/tabBar/icon_tab_person_selected.png'\n }\n ]\n }\n})\n\nconst emit = defineEmits(['tabClick'])\n\nconst currentIndex = ref(0)\n\nconst handleTabClick = (index, item) => {\n currentIndex.value = index\n emit('tabClick', { index, item })\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.tab-bar {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n height: 100rpx;\n background-color: #ffffff;\n display: flex;\n justify-content: space-around;\n align-items: center;\n box-shadow: 0 -2rpx 10rpx rgba(0, 0, 0, 0.05);\n \n .tab-item {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n \n .tab-icon {\n width: 48rpx;\n height: 48rpx;\n margin-bottom: 4rpx;\n }\n \n .tab-text {\n font-size: 24rpx;\n color: #666;\n \n &.active {\n color: #007AFF;\n }\n }\n }\n}\n</style> ","import Component from '/Users/huangtao/Duiba/project/20250528_FHQ1/components/TabBar.vue'\nwx.createComponent(Component)"],"names":["ref"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CA,UAAM,OAAO;AAEb,UAAM,eAAeA,cAAG,IAAC,CAAC;AAE1B,UAAM,iBAAiB,CAAC,OAAO,SAAS;AACtC,mBAAa,QAAQ;AACrB,WAAK,YAAY,EAAE,OAAO,KAAI,CAAE;AAAA,IAClC;;;;;;;;;;;;;;;;;;ACpDA,GAAG,gBAAgB,SAAS;"}
\ No newline at end of file
{"version":3,"file":"Brand.js","sources":["/Users/huangtao/Duiba/project/20250528_FHQ1/components/main/Brand.vue?type=component"],"sourcesContent":["import Component from '/Users/huangtao/Duiba/project/20250528_FHQ1/components/main/Brand.vue'\nwx.createComponent(Component)"],"names":[],"mappings":";;;;;;;;;;;AACA,GAAG,gBAAgB,SAAS;"}
\ No newline at end of file
{"version":3,"file":"Home.js","sources":["/Users/huangtao/Duiba/project/20250528_FHQ1/components/main/Home.vue?type=component"],"sourcesContent":["import Component from '/Users/huangtao/Duiba/project/20250528_FHQ1/components/main/Home.vue'\nwx.createComponent(Component)"],"names":[],"mappings":";;;;;;;;;;;AACA,GAAG,gBAAgB,SAAS;"}
\ No newline at end of file
{"version":3,"file":"Integral.js","sources":["/Users/huangtao/Duiba/project/20250528_FHQ1/components/main/Integral.vue?type=component"],"sourcesContent":["import Component from '/Users/huangtao/Duiba/project/20250528_FHQ1/components/main/Integral.vue'\nwx.createComponent(Component)"],"names":[],"mappings":";;;;;;;;;;;AACA,GAAG,gBAAgB,SAAS;"}
\ No newline at end of file
{"version":3,"file":"My.js","sources":["/Users/huangtao/Duiba/project/20250528_FHQ1/components/main/My.vue?type=component"],"sourcesContent":["import Component from '/Users/huangtao/Duiba/project/20250528_FHQ1/components/main/My.vue'\nwx.createComponent(Component)"],"names":[],"mappings":";;;;;;;;;;;AACA,GAAG,gBAAgB,SAAS;"}
\ No newline at end of file
{"version":3,"file":"index.js","sources":["pages/index/index.vue","pages/index/index.vue?type=page"],"sourcesContent":["<template>\r\n\t<view class=\"content\">\r\n\t\t<image class=\"logo\" src=\"/static/logo.png\"></image>\r\n\t\t<view class=\"text-area\">\r\n\t\t\t<text class=\"title\">{{title}}</text>\n\t\t\t\n\t\t\t<textarea name=\"\" id=\"\" cols=\"30\" rows=\"10\"></textarea>\r\n\t\t</view>\r\n\t</view>\r\n</template>\r\n\r\n<script>\r\n\texport default {\r\n\t\tdata() {\r\n\t\t\treturn {\r\n\t\t\t\ttitle: 'Hello'\r\n\t\t\t}\r\n\t\t},\r\n\t\tonLoad() {\r\n\r\n\t\t},\r\n\t\tmethods: {\r\n\r\n\t\t}\r\n\t}\r\n</script>\r\n\r\n<style>\r\n\t.content {\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: column;\r\n\t\talign-items: center;\r\n\t\tjustify-content: center;\r\n\t}\r\n\r\n\t.logo {\r\n\t\theight: 200rpx;\r\n\t\twidth: 200rpx;\r\n\t\tmargin-top: 200rpx;\r\n\t\tmargin-left: auto;\r\n\t\tmargin-right: auto;\r\n\t\tmargin-bottom: 50rpx;\r\n\t}\r\n\r\n\t.text-area {\r\n\t\tdisplay: flex;\r\n\t\tjustify-content: center;\r\n\t}\r\n\r\n\t.title {\r\n\t\tfont-size: 36rpx;\r\n\t\tcolor: #8f8f94;\r\n\t}\r\n</style>\n","import MiniProgramPage from '/Users/huangtao/Duiba/project/20250528_FHQ1/pages/index/index.vue'\nwx.createPage(MiniProgramPage)"],"names":[],"mappings":";;;AAYC,MAAK,YAAU;AAAA,EACd,OAAO;AACN,WAAO;AAAA,MACN,OAAO;AAAA,IACR;AAAA,EACA;AAAA,EACD,SAAS;AAAA,EAER;AAAA,EACD,SAAS,CAET;AACD;;;;;;;;ACvBD,GAAG,WAAW,eAAe;"}
\ No newline at end of file
{"version":3,"file":"index.js","sources":["pages/index/index.vue","pages/index/index.vue?type=page"],"sourcesContent":["<template>\r\n\t<view class=\"container\">\r\n\t\t<Home v-if=\"curTabIndex == 0\"></Home>\r\n\t\t<Brand v-if=\"curTabIndex == 1\"></Brand>\r\n\t\t<Integral v-if=\"curTabIndex == 2\"></Integral>\r\n\t\t<My v-if=\"curTabIndex == 3\"></My>\r\n\t\t<TabBar @tabClick=\"handleTabClick\" />\r\n\t</view>\r\n</template>\r\n\r\n<script>\r\n\timport TabBar from '@/components/TabBar.vue'\r\n\timport Home from '@/components/Home.vue';\r\n\timport Brand from '@/components/Brand.vue';\r\n\timport Integral from '@/components/Integral.vue';\r\n\timport My from '@/components/My.vue';\r\n\r\n\texport default {\r\n\t\tdata() {\r\n\t\t\treturn {\r\n\t\t\t\tcurTabIndex: 0\r\n\t\t\t};\r\n\t\t},\r\n\t\tonLoad() {},\r\n\t\tmethods: {\r\n\t\t\thandleTabClick({\r\n\t\t\t\tindex,\r\n\t\t\t\titem\r\n\t\t\t}) {\r\n\t\t\t\tconsole.log('Tab clicked:', index, item)\r\n\t\t\t\t// 这里可以根据index或item进行相应的页面跳转或其他操作\r\n\t\t\t\tthis.curTabIndex = index\r\n\t\t\t}\r\n\t\t},\r\n\t\tcomponents: {\r\n\t\t\tTabBar,\r\n\t\t\tHome,\r\n\t\t\tBrand,\r\n\t\t\tIntegral,\r\n\t\t\tMy\r\n\t\t}\r\n\t};\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n\t.container {\r\n\t\tmin-height: 100vh;\r\n\t\tbackground-color: #f5f5f5;\r\n\r\n\t\t.content {\r\n\t\t\tpadding-bottom: 100rpx; // 为底部TabBar留出空间\r\n\t\t}\r\n\t}\r\n\r\n\t.content {\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: column;\r\n\t\talign-items: center;\r\n\t\tjustify-content: center;\r\n\t}\r\n\r\n\t.logo {\r\n\t\theight: 200rpx;\r\n\t\twidth: 200rpx;\r\n\t\tmargin-top: 200rpx;\r\n\t\tmargin-left: auto;\r\n\t\tmargin-right: auto;\r\n\t\tmargin-bottom: 50rpx;\r\n\t}\r\n\r\n\t.text-area {\r\n\t\tdisplay: flex;\r\n\t\tjustify-content: center;\r\n\t}\r\n\r\n\t.title {\r\n\t\tfont-size: 36rpx;\r\n\t\tcolor: #8f8f94;\r\n\t}\r\n</style>","import MiniProgramPage from '/Users/huangtao/Duiba/project/20250528_FHQ1/pages/index/index.vue'\nwx.createPage(MiniProgramPage)"],"names":["uni"],"mappings":";;AAWC,MAAK,SAAU,MAAW;AAC1B,aAAa,MAAW;AACxB,MAAK,QAAS,MAAW;AACzB,MAAO,WAAU,MAAW;AAC5B,MAAO,KAAI,MAAW;AAEtB,MAAK,YAAU;AAAA,EACd,OAAO;AACN,WAAO;AAAA,MACN,aAAa;AAAA;EAEd;AAAA,EACD,SAAS;AAAA,EAAE;AAAA,EACX,SAAS;AAAA,IACR,eAAe;AAAA,MACd;AAAA,MACA;AAAA,IACD,GAAG;AACFA,oBAAA,MAAA,MAAA,OAAA,+BAAY,gBAAgB,OAAO,IAAI;AAEvC,WAAK,cAAc;AAAA,IACpB;AAAA,EACA;AAAA,EACD,YAAY;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;;;;;;;;;;;;;;;;;;;;;;;;ACvCF,GAAG,WAAW,eAAe;"}
\ No newline at end of file
......@@ -3,9 +3,6 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const common_vendor = require("./common/vendor.js");
if (!Math) {
"./pages/index/index.js";
"./pages/brand/brand.js";
"./pages/integral/integral.js";
"./pages/my/my.js";
}
const _sfc_main = {
onLaunch: function() {
......
{
"pages": [
"pages/index/index",
"pages/brand/brand",
"pages/integral/integral",
"pages/my/my"
"pages/index/index"
],
"window": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "uni-app",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
},
"tabBar": {
"color": "#999999",
"selectedColor": "#FF0000",
"backgroundColor": "#FFFFFF",
"borderStyle": "black",
"list": [
{
"pagePath": "pages/index/index",
"text": "首页"
},
{
"pagePath": "pages/brand/brand",
"text": "品牌"
},
{
"pagePath": "pages/integral/integral",
"text": "积分"
},
{
"pagePath": "pages/my/my",
"text": "我的"
}
]
"backgroundColor": "#F8F8F8",
"navigationStyle": "custom"
},
"usingComponents": {}
}
\ No newline at end of file
"use strict";
const _imports_0 = "/static/logo.png";
exports._imports_0 = _imports_0;
//# sourceMappingURL=../../.sourcemap/mp-weixin/common/assets.js.map
......@@ -354,8 +354,8 @@ const E = function() {
E.prototype = {
_id: 1,
on: function(name, callback, ctx) {
var e = this.e || (this.e = {});
(e[name] || (e[name] = [])).push({
var e2 = this.e || (this.e = {});
(e2[name] || (e2[name] = [])).push({
fn: callback,
ctx,
_id: this._id
......@@ -382,8 +382,8 @@ E.prototype = {
return this;
},
off: function(name, event) {
var e = this.e || (this.e = {});
var evts = e[name];
var e2 = this.e || (this.e = {});
var evts = e2[name];
var liveEvents = [];
if (evts && event) {
for (var i = evts.length - 1; i >= 0; i--) {
......@@ -394,7 +394,7 @@ E.prototype = {
}
liveEvents = evts;
}
liveEvents.length ? e[name] = liveEvents : delete e[name];
liveEvents.length ? e2[name] = liveEvents : delete e2[name];
return this;
}
};
......@@ -2074,6 +2074,47 @@ function setCurrentRenderingInstance(instance) {
instance && instance.type.__scopeId || null;
return prev;
}
const COMPONENTS = "components";
function resolveComponent(name, maybeSelfReference) {
return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name;
}
function resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) {
const instance = currentRenderingInstance || currentInstance;
if (instance) {
const Component2 = instance.type;
if (type === COMPONENTS) {
const selfName = getComponentName(
Component2,
false
);
if (selfName && (selfName === name || selfName === camelize(name) || selfName === capitalize(camelize(name)))) {
return Component2;
}
}
const res = (
// local registration
// check instance[type] first which is resolved for options API
resolve(instance[type] || Component2[type], name) || // global registration
resolve(instance.appContext[type], name)
);
if (!res && maybeSelfReference) {
return Component2;
}
if (warnMissing && !res) {
const extra = type === COMPONENTS ? `
If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.` : ``;
warn$1(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`);
}
return res;
} else {
warn$1(
`resolve${capitalize(type.slice(0, -1))} can only be used in render() or setup().`
);
}
}
function resolve(registry, name) {
return registry && (registry[name] || registry[camelize(name)] || registry[capitalize(camelize(name))]);
}
const INITIAL_WATCHER_VALUE = {};
function watch(source, cb, options) {
if (!isFunction(cb)) {
......@@ -4962,6 +5003,135 @@ function getCreateApp() {
return my[method];
}
}
function vOn(value, key) {
const instance = getCurrentInstance();
const ctx = instance.ctx;
const extraKey = typeof key !== "undefined" && (ctx.$mpPlatform === "mp-weixin" || ctx.$mpPlatform === "mp-qq" || ctx.$mpPlatform === "mp-xhs") && (isString(key) || typeof key === "number") ? "_" + key : "";
const name = "e" + instance.$ei++ + extraKey;
const mpInstance = ctx.$scope;
if (!value) {
delete mpInstance[name];
return name;
}
const existingInvoker = mpInstance[name];
if (existingInvoker) {
existingInvoker.value = value;
} else {
mpInstance[name] = createInvoker(value, instance);
}
return name;
}
function createInvoker(initialValue, instance) {
const invoker = (e2) => {
patchMPEvent(e2);
let args = [e2];
if (instance && instance.ctx.$getTriggerEventDetail) {
if (typeof e2.detail === "number") {
e2.detail = instance.ctx.$getTriggerEventDetail(e2.detail);
}
}
if (e2.detail && e2.detail.__args__) {
args = e2.detail.__args__;
}
const eventValue = invoker.value;
const invoke = () => callWithAsyncErrorHandling(patchStopImmediatePropagation(e2, eventValue), instance, 5, args);
const eventTarget = e2.target;
const eventSync = eventTarget ? eventTarget.dataset ? String(eventTarget.dataset.eventsync) === "true" : false : false;
if (bubbles.includes(e2.type) && !eventSync) {
setTimeout(invoke);
} else {
const res = invoke();
if (e2.type === "input" && (isArray(res) || isPromise(res))) {
return;
}
return res;
}
};
invoker.value = initialValue;
return invoker;
}
const bubbles = [
// touch事件暂不做延迟,否则在 Android 上会影响性能,比如一些拖拽跟手手势等
// 'touchstart',
// 'touchmove',
// 'touchcancel',
// 'touchend',
"tap",
"longpress",
"longtap",
"transitionend",
"animationstart",
"animationiteration",
"animationend",
"touchforcechange"
];
function patchMPEvent(event, instance) {
if (event.type && event.target) {
event.preventDefault = NOOP;
event.stopPropagation = NOOP;
event.stopImmediatePropagation = NOOP;
if (!hasOwn(event, "detail")) {
event.detail = {};
}
if (hasOwn(event, "markerId")) {
event.detail = typeof event.detail === "object" ? event.detail : {};
event.detail.markerId = event.markerId;
}
if (isPlainObject(event.detail) && hasOwn(event.detail, "checked") && !hasOwn(event.detail, "value")) {
event.detail.value = event.detail.checked;
}
if (isPlainObject(event.detail)) {
event.target = extend({}, event.target, event.detail);
}
}
}
function patchStopImmediatePropagation(e2, value) {
if (isArray(value)) {
const originalStop = e2.stopImmediatePropagation;
e2.stopImmediatePropagation = () => {
originalStop && originalStop.call(e2);
e2._stopped = true;
};
return value.map((fn) => (e3) => !e3._stopped && fn(e3));
} else {
return value;
}
}
function vFor(source, renderItem) {
let ret;
if (isArray(source) || isString(source)) {
ret = new Array(source.length);
for (let i = 0, l = source.length; i < l; i++) {
ret[i] = renderItem(source[i], i, i);
}
} else if (typeof source === "number") {
if (!Number.isInteger(source)) {
warn(`The v-for range expect an integer value but got ${source}.`);
return [];
}
ret = new Array(source);
for (let i = 0; i < source; i++) {
ret[i] = renderItem(i + 1, i, i);
}
} else if (isObject(source)) {
if (source[Symbol.iterator]) {
ret = Array.from(source, (item, i) => renderItem(item, i, i));
} else {
const keys = Object.keys(source);
ret = new Array(keys.length);
for (let i = 0, l = keys.length; i < l; i++) {
const key = keys[i];
ret[i] = renderItem(source[key], key, i);
}
}
} else {
ret = [];
}
return ret;
}
const o = (value, key) => vOn(value, key);
const f = (source, renderItem) => vFor(source, renderItem);
const e = (target, ...sources) => extend(target, ...sources);
const t = (val) => toDisplayString(val);
function createApp$1(rootComponent, rootProps = null) {
rootComponent && (rootComponent.mpType = "app");
......@@ -5101,8 +5271,8 @@ function tryCatch(fn) {
return function() {
try {
return fn.apply(fn, arguments);
} catch (e) {
console.error(e);
} catch (e2) {
console.error(e2);
}
};
}
......@@ -5284,8 +5454,8 @@ function promisify$1(name, fn) {
if (hasCallback(args)) {
return wrapperReturnValue(name, invokeApi(name, fn, args, rest));
}
return wrapperReturnValue(name, handlePromise(new Promise((resolve, reject) => {
invokeApi(name, fn, extend(args, { success: resolve, fail: reject }), rest);
return wrapperReturnValue(name, handlePromise(new Promise((resolve2, reject) => {
invokeApi(name, fn, extend(args, { success: resolve2, fail: reject }), rest);
})));
};
}
......@@ -5566,7 +5736,7 @@ let enabled;
function normalizePushMessage(message) {
try {
return JSON.parse(message);
} catch (e) {
} catch (e2) {
}
return message;
}
......@@ -5606,7 +5776,7 @@ function invokeGetPushCidCallbacks(cid2, errMsg) {
getPushCidCallbacks.length = 0;
}
const API_GET_PUSH_CLIENT_ID = "getPushClientId";
const getPushClientId = defineAsyncApi(API_GET_PUSH_CLIENT_ID, (_, { resolve, reject }) => {
const getPushClientId = defineAsyncApi(API_GET_PUSH_CLIENT_ID, (_, { resolve: resolve2, reject }) => {
Promise.resolve().then(() => {
if (typeof enabled === "undefined") {
enabled = false;
......@@ -5615,7 +5785,7 @@ const getPushClientId = defineAsyncApi(API_GET_PUSH_CLIENT_ID, (_, { resolve, re
}
getPushCidCallbacks.push((cid2, errMsg) => {
if (cid2) {
resolve({ cid: cid2 });
resolve2({ cid: cid2 });
} else {
reject(errMsg);
}
......@@ -5684,9 +5854,9 @@ function promisify(name, api) {
if (isFunction(options.success) || isFunction(options.fail) || isFunction(options.complete)) {
return wrapperReturnValue(name, invokeApi(name, api, options, rest));
}
return wrapperReturnValue(name, handlePromise(new Promise((resolve, reject) => {
return wrapperReturnValue(name, handlePromise(new Promise((resolve2, reject) => {
invokeApi(name, api, extend({}, options, {
success: resolve,
success: resolve2,
fail: reject
}), rest);
})));
......@@ -6293,13 +6463,13 @@ function initRuntimeSocket(hosts, port, id) {
}
const SOCKET_TIMEOUT = 500;
function tryConnectSocket(host2, port, id) {
return new Promise((resolve, reject) => {
return new Promise((resolve2, reject) => {
const socket = index.connectSocket({
url: `ws://${host2}:${port}/${id}`,
multiple: true,
// 支付宝小程序 是否开启多实例
fail() {
resolve(null);
resolve2(null);
}
});
const timer = setTimeout(() => {
......@@ -6307,19 +6477,19 @@ function tryConnectSocket(host2, port, id) {
code: 1006,
reason: "connect timeout"
});
resolve(null);
resolve2(null);
}, SOCKET_TIMEOUT);
socket.onOpen((e) => {
socket.onOpen((e2) => {
clearTimeout(timer);
resolve(socket);
resolve2(socket);
});
socket.onClose((e) => {
socket.onClose((e2) => {
clearTimeout(timer);
resolve(null);
resolve2(null);
});
socket.onError((e) => {
socket.onError((e2) => {
clearTimeout(timer);
resolve(null);
resolve2(null);
});
});
}
......@@ -6414,7 +6584,7 @@ function formatMessage(type, args) {
type,
args: formatArgs(args)
};
} catch (e) {
} catch (e2) {
}
return {
type,
......@@ -6442,7 +6612,7 @@ function formatArg(arg, depth = 0) {
case "object":
try {
return formatObject(arg, depth);
} catch (e) {
} catch (e2) {
return {
type: "object",
value: {
......@@ -7732,6 +7902,11 @@ const createSubpackageApp = initCreateSubpackageApp();
}
exports._export_sfc = _export_sfc;
exports.createSSRApp = createSSRApp;
exports.e = e;
exports.f = f;
exports.index = index;
exports.o = o;
exports.ref = ref;
exports.resolveComponent = resolveComponent;
exports.t = t;
//# sourceMappingURL=../../.sourcemap/mp-weixin/common/vendor.js.map
"use strict";
const common_vendor = require("../common/vendor.js");
const _sfc_main = {
__name: "Brand",
setup(__props) {
return (_ctx, _cache) => {
return {};
};
}
};
const Component = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-ccdca2da"]]);
wx.createComponent(Component);
//# sourceMappingURL=../../.sourcemap/mp-weixin/components/Brand.js.map
{
"component": true,
"usingComponents": {}
}
\ No newline at end of file
<view class="brand-container data-v-ccdca2da"><view class="content data-v-ccdca2da"><text class="data-v-ccdca2da">品牌故事内容</text></view></view>
\ No newline at end of file
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
* 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.brand-container.data-v-ccdca2da {
padding: 20rpx;
}
.brand-container .content.data-v-ccdca2da {
padding-bottom: 100rpx;
}
\ No newline at end of file
"use strict";
const common_vendor = require("../common/vendor.js");
const _sfc_main = {
__name: "Home",
setup(__props) {
return (_ctx, _cache) => {
return {};
};
}
};
const Component = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-66361d43"]]);
wx.createComponent(Component);
//# sourceMappingURL=../../.sourcemap/mp-weixin/components/Home.js.map
{
"component": true,
"usingComponents": {}
}
\ No newline at end of file
<view class="home-container data-v-66361d43"><view class="content data-v-66361d43"><text class="data-v-66361d43">首页内容</text></view></view>
\ No newline at end of file
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
* 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.home-container.data-v-66361d43 {
padding: 20rpx;
}
.home-container .content.data-v-66361d43 {
padding-bottom: 100rpx;
}
\ No newline at end of file
"use strict";
const common_vendor = require("../common/vendor.js");
const _sfc_main = {
__name: "Integral",
setup(__props) {
return (_ctx, _cache) => {
return {};
};
}
};
const Component = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-6b39c053"]]);
wx.createComponent(Component);
//# sourceMappingURL=../../.sourcemap/mp-weixin/components/Integral.js.map
{
"component": true,
"usingComponents": {}
}
\ No newline at end of file
<view class="integral-container data-v-6b39c053"><view class="content data-v-6b39c053"><text class="data-v-6b39c053">积分服务内容</text></view></view>
\ No newline at end of file
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
* 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.integral-container.data-v-6b39c053 {
padding: 20rpx;
}
.integral-container .content.data-v-6b39c053 {
padding-bottom: 100rpx;
}
\ No newline at end of file
"use strict";
const common_vendor = require("../common/vendor.js");
const _sfc_main = {
__name: "My",
setup(__props) {
return (_ctx, _cache) => {
return {};
};
}
};
const Component = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-5e0d8f88"]]);
wx.createComponent(Component);
//# sourceMappingURL=../../.sourcemap/mp-weixin/components/My.js.map
{
"component": true,
"usingComponents": {}
}
\ No newline at end of file
<view class="my-container data-v-5e0d8f88"><view class="content data-v-5e0d8f88"><text class="data-v-5e0d8f88">我的页面内容</text></view></view>
\ No newline at end of file
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
* 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.my-container.data-v-5e0d8f88 {
padding: 20rpx;
}
.my-container .content.data-v-5e0d8f88 {
padding-bottom: 100rpx;
}
\ No newline at end of file
"use strict";
const common_vendor = require("../common/vendor.js");
const _sfc_main = {
__name: "TabBar",
props: {
tabList: {
type: Array,
default: () => [
{
text: "首页",
iconPath: "/static/tabBar/icon_tab_home_normal.png",
selectedIconPath: "/static/tabBar/icon_tab_home_selected.png"
},
{
text: "品牌故事",
iconPath: "/static/tabBar/icon_tab_brand_normal.png",
selectedIconPath: "/static/tabBar/icon_tab_brand_selected.png"
},
{
text: "积分服务",
iconPath: "/static/tabBar/icon_tab_gift_normal.png",
selectedIconPath: "/static/tabBar/icon_tab_gift_selected.png"
},
{
text: "我的",
iconPath: "/static/tabBar/icon_tab_person_normal.png",
selectedIconPath: "/static/tabBar/icon_tab_person_selected.png"
}
]
}
},
emits: ["tabClick"],
setup(__props, { emit: __emit }) {
const emit = __emit;
const currentIndex = common_vendor.ref(0);
const handleTabClick = (index, item) => {
currentIndex.value = index;
emit("tabClick", { index, item });
};
return (_ctx, _cache) => {
return {
a: common_vendor.f(__props.tabList, (item, index, i0) => {
return {
a: currentIndex.value === index ? item.selectedIconPath : item.iconPath,
b: common_vendor.t(item.text),
c: currentIndex.value === index ? 1 : "",
d: index,
e: currentIndex.value === index ? 1 : "",
f: common_vendor.o(($event) => handleTabClick(index, item), index)
};
})
};
};
}
};
const Component = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-89ca1f91"]]);
wx.createComponent(Component);
//# sourceMappingURL=../../.sourcemap/mp-weixin/components/TabBar.js.map
{
"component": true,
"usingComponents": {}
}
\ No newline at end of file
<view class="tab-bar data-v-89ca1f91"><view wx:for="{{a}}" wx:for-item="item" wx:key="d" class="{{['tab-item', 'data-v-89ca1f91', item.e && 'active']}}" bindtap="{{item.f}}"><image src="{{item.a}}" class="tab-icon data-v-89ca1f91"/><text class="{{['tab-text', 'data-v-89ca1f91', item.c && 'active']}}">{{item.b}}</text></view></view>
\ No newline at end of file
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
* 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.tab-bar.data-v-89ca1f91 {
position: fixed;
bottom: 0;
left: 0;
right: 0;
height: 100rpx;
background-color: #ffffff;
display: flex;
justify-content: space-around;
align-items: center;
box-shadow: 0 -2rpx 10rpx rgba(0, 0, 0, 0.05);
}
.tab-bar .tab-item.data-v-89ca1f91 {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100%;
}
.tab-bar .tab-item .tab-icon.data-v-89ca1f91 {
width: 48rpx;
height: 48rpx;
margin-bottom: 4rpx;
}
.tab-bar .tab-item .tab-text.data-v-89ca1f91 {
font-size: 24rpx;
color: #666;
}
.tab-bar .tab-item .tab-text.active.data-v-89ca1f91 {
color: #007AFF;
}
\ No newline at end of file
"use strict";
const common_vendor = require("../../common/vendor.js");
const _sfc_main = {
__name: "Brand",
setup(__props) {
return (_ctx, _cache) => {
return {};
};
}
};
const Component = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-6f8ffbeb"]]);
wx.createComponent(Component);
//# sourceMappingURL=../../../.sourcemap/mp-weixin/components/main/Brand.js.map
{
"navigationBarTitleText": "品牌",
"component": true,
"usingComponents": {}
}
\ No newline at end of file
<view class="brand-container data-v-6f8ffbeb"><view class="content data-v-6f8ffbeb"><text class="data-v-6f8ffbeb">品牌故事内容</text></view></view>
\ No newline at end of file
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
* 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.brand-container.data-v-6f8ffbeb {
padding: 20rpx;
}
.brand-container .content.data-v-6f8ffbeb {
padding-bottom: 100rpx;
}
\ No newline at end of file
"use strict";
const common_vendor = require("../../common/vendor.js");
const _sfc_main = {
__name: "Home",
setup(__props) {
return (_ctx, _cache) => {
return {};
};
}
};
const Component = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-e2af6427"]]);
wx.createComponent(Component);
//# sourceMappingURL=../../../.sourcemap/mp-weixin/components/main/Home.js.map
{
"component": true,
"usingComponents": {}
}
\ No newline at end of file
<view class="home-container data-v-e2af6427"><view class="content data-v-e2af6427"><text class="data-v-e2af6427">首页内容</text></view></view>
\ No newline at end of file
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
* 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.home-container.data-v-e2af6427 {
padding: 20rpx;
}
.home-container .content.data-v-e2af6427 {
padding-bottom: 100rpx;
}
\ No newline at end of file
"use strict";
const common_vendor = require("../../common/vendor.js");
const _sfc_main = {
__name: "Integral",
setup(__props) {
return (_ctx, _cache) => {
return {};
};
}
};
const Component = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-3b5415d6"]]);
wx.createComponent(Component);
//# sourceMappingURL=../../../.sourcemap/mp-weixin/components/main/Integral.js.map
{
"navigationBarTitleText": "积分",
"component": true,
"usingComponents": {}
}
\ No newline at end of file
<view class="integral-container data-v-3b5415d6"><view class="content data-v-3b5415d6"><text class="data-v-3b5415d6">积分服务内容</text></view></view>
\ No newline at end of file
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
* 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.integral-container.data-v-3b5415d6 {
padding: 20rpx;
}
.integral-container .content.data-v-3b5415d6 {
padding-bottom: 100rpx;
}
\ No newline at end of file
"use strict";
const common_vendor = require("../../common/vendor.js");
const _sfc_main = {
__name: "My",
setup(__props) {
return (_ctx, _cache) => {
return {};
};
}
};
const Component = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-fefbaedb"]]);
wx.createComponent(Component);
//# sourceMappingURL=../../../.sourcemap/mp-weixin/components/main/My.js.map
{
"navigationBarTitleText": "我的",
"component": true,
"usingComponents": {}
}
\ No newline at end of file
<view class="my-container data-v-fefbaedb"><view class="content data-v-fefbaedb"><text class="data-v-fefbaedb">我的页面内容</text></view></view>
\ No newline at end of file
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
* 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.my-container.data-v-fefbaedb {
padding: 20rpx;
}
.my-container .content.data-v-fefbaedb {
padding-bottom: 100rpx;
}
\ No newline at end of file
"use strict";
const common_vendor = require("../../common/vendor.js");
const _sfc_main = {};
function _sfc_render(_ctx, _cache) {
return {};
}
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render]]);
wx.createPage(MiniProgramPage);
//# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/brand/brand.js.map
<view></view>
\ No newline at end of file
"use strict";
const common_vendor = require("../../common/vendor.js");
const common_assets = require("../../common/assets.js");
const TabBar = () => "../../components/TabBar.js";
const Home = () => "../../components/Home.js";
const Brand = () => "../../components/Brand.js";
const Integral = () => "../../components/Integral.js";
const My = () => "../../components/My.js";
const _sfc_main = {
data() {
return {
title: "Hello"
curTabIndex: 0
};
},
onLoad() {
},
methods: {}
methods: {
handleTabClick({
index,
item
}) {
common_vendor.index.__f__("log", "at pages/index/index.vue:30", "Tab clicked:", index, item);
this.curTabIndex = index;
}
},
components: {
TabBar,
Home,
Brand,
Integral,
My
}
};
if (!Array) {
const _component_Home = common_vendor.resolveComponent("Home");
const _component_Brand = common_vendor.resolveComponent("Brand");
const _component_Integral = common_vendor.resolveComponent("Integral");
const _component_My = common_vendor.resolveComponent("My");
const _component_TabBar = common_vendor.resolveComponent("TabBar");
(_component_Home + _component_Brand + _component_Integral + _component_My + _component_TabBar)();
}
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return {
a: common_assets._imports_0,
b: common_vendor.t($data.title)
};
return common_vendor.e({
a: $data.curTabIndex == 0
}, $data.curTabIndex == 0 ? {} : {}, {
b: $data.curTabIndex == 1
}, $data.curTabIndex == 1 ? {} : {}, {
c: $data.curTabIndex == 2
}, $data.curTabIndex == 2 ? {} : {}, {
d: $data.curTabIndex == 3
}, $data.curTabIndex == 3 ? {} : {}, {
e: common_vendor.o($options.handleTabClick)
});
}
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render]]);
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-1cf27b2a"]]);
wx.createPage(MiniProgramPage);
//# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/index/index.js.map
{
"navigationBarTitleText": "首页",
"usingComponents": {}
"usingComponents": {
"tab-bar": "../../components/TabBar",
"home": "../../components/Home",
"brand": "../../components/Brand",
"integral": "../../components/Integral",
"my": "../../components/My"
}
}
\ No newline at end of file
<view class="content"><image class="logo" src="{{a}}"></image><view class="text-area"><text class="title">{{b}}</text><textarea name="" id="" cols="30" rows="10"></textarea></view></view>
\ No newline at end of file
<view class="container data-v-1cf27b2a"><home wx:if="{{a}}" class="data-v-1cf27b2a" u-i="1cf27b2a-0" bind:__l="__l"></home><brand wx:if="{{b}}" class="data-v-1cf27b2a" u-i="1cf27b2a-1" bind:__l="__l"></brand><integral wx:if="{{c}}" class="data-v-1cf27b2a" u-i="1cf27b2a-2" bind:__l="__l"></integral><my wx:if="{{d}}" class="data-v-1cf27b2a" u-i="1cf27b2a-3" bind:__l="__l"></my><tab-bar class="data-v-1cf27b2a" bindtabClick="{{e}}" u-i="1cf27b2a-4" bind:__l="__l"/></view>
\ No newline at end of file
.content {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
* 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.container.data-v-1cf27b2a {
min-height: 100vh;
background-color: #f5f5f5;
}
.logo {
height: 200rpx;
width: 200rpx;
margin-top: 200rpx;
margin-left: auto;
margin-right: auto;
margin-bottom: 50rpx;
.container .content.data-v-1cf27b2a {
padding-bottom: 100rpx;
}
.text-area {
display: flex;
justify-content: center;
.content.data-v-1cf27b2a {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.title {
font-size: 36rpx;
color: #8f8f94;
}
.logo.data-v-1cf27b2a {
height: 200rpx;
width: 200rpx;
margin-top: 200rpx;
margin-left: auto;
margin-right: auto;
margin-bottom: 50rpx;
}
.text-area.data-v-1cf27b2a {
display: flex;
justify-content: center;
}
.title.data-v-1cf27b2a {
font-size: 36rpx;
color: #8f8f94;
}
\ No newline at end of file
"use strict";
const common_vendor = require("../../common/vendor.js");
const _sfc_main = {};
function _sfc_render(_ctx, _cache) {
return {};
}
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render]]);
wx.createPage(MiniProgramPage);
//# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/integral/integral.js.map
"use strict";
const common_vendor = require("../../common/vendor.js");
const _sfc_main = {};
function _sfc_render(_ctx, _cache) {
return {};
}
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render]]);
wx.createPage(MiniProgramPage);
//# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/my/my.js.map
<view></view>
\ No newline at end of file
......@@ -19,7 +19,7 @@
},
"compileType": "miniprogram",
"libVersion": "3.4.10",
"appid": "touristappid",
"appid": "wx1f110fcec1d6adc4",
"projectname": "20250528_FHQ1",
"condition": {},
"editorSetting": {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment