diff --git a/uni-app/src/App.vue b/uni-app/src/App.vue
index 352ffd556..cfc2b7fd1 100644
--- a/uni-app/src/App.vue
+++ b/uni-app/src/App.vue
@@ -12,9 +12,18 @@ onLaunch((data: any) => {
// 添加初始化拦截器
launchInterceptor()
+ const systemStore = useSystemStore()
+
+ // 初始化全局数据
+ const initGlobalData = () => {
+ systemStore.systemInfo = uni.getSystemInfoSync();
+ systemStore.getMenuButtonInfoFn()
+ }
+
+ initGlobalData()
// #ifdef H5
- uni.getSystemInfoSync().platform == 'ios' && (uni.setStorageSync('initUrl', location.href))
+ systemStore.systemInfo.platform == 'ios' && (uni.setStorageSync('initUrl', location.href))
// 传输给后台数据
window.parent.postMessage(JSON.stringify({
@@ -38,12 +47,15 @@ onLaunch((data: any) => {
type: 'appOnReady',
message: '加载完成'
}), '*');
+ // 更新全局数据
+ initGlobalData()
}
} catch (e) {
console.log('uni-app App.vue 接受数据错误', e)
}
}, false);
+
try {
uni.hideTabBar() // 隐藏tabbar
} catch (e) {
@@ -79,7 +91,7 @@ onLaunch((data: any) => {
// #endif
// 获取初始化数据信息
- useSystemStore().getInitFn(async() => {
+ useSystemStore().getInitFn(async () => {
const configStore = useConfigStore()
diff --git a/uni-app/src/addon/components/diy-form-detail/index.vue b/uni-app/src/addon/components/diy-form-detail/index.vue
index e0e902ea6..ffdd6df3d 100644
--- a/uni-app/src/addon/components/diy-form-detail/index.vue
+++ b/uni-app/src/addon/components/diy-form-detail/index.vue
@@ -9,6 +9,7 @@
import { ref, reactive, onMounted } from 'vue';
import diyGroup from '@/addon/components/diy/group/index.vue'
import { getFormRecord } from '@/app/api/diy_form';
+import { deepClone } from '@/utils/common'
const props = defineProps(['record_id', 'completeLayout']);
const emits = defineEmits(['callback'])
@@ -17,20 +18,21 @@ const diyFormData: any = reactive({
global: {},
value: []
})
-
onMounted(() => {
getFormRecord({
record_id: props.record_id
}).then((res: any) => {
diyFormData.global.completeLayout = props.completeLayout || 'style-1';
- if (res.data.recordsFieldList) {
+ let recordsFieldList = deepClone(res.data.recordsFieldList)
+ if (recordsFieldList) {
- res.data.recordsFieldList.forEach((item: any) => {
+ recordsFieldList.forEach((item: any) => {
let comp = {
id: item.field_key,
componentName: item.field_type,
pageStyle: '',
viewFormDetail: true, // 查看表单详情标识
+ componentIsShow: true,
field: {
name: item.field_name,
value: item.handle_field_value,
@@ -47,7 +49,7 @@ onMounted(() => {
diyFormData.value.push(comp);
})
}
- emits('callback', res.data.recordsFieldList)
+ emits('callback', recordsFieldList)
loading.value = false;
}).catch(() => {
loading.value = false;
diff --git a/uni-app/src/addon/components/diy-form/index.vue b/uni-app/src/addon/components/diy-form/index.vue
index a32becf60..05aa0fbd1 100644
--- a/uni-app/src/addon/components/diy-form/index.vue
+++ b/uni-app/src/addon/components/diy-form/index.vue
@@ -1,8 +1,21 @@
-
-
+
+
+
+
+
+
+
+ {{ item.title }}
+
+
+ {{ item.type }}
+ {{ item.desc }}
+
+
+
@@ -30,12 +43,12 @@ const diyFormData: any = reactive({})
onMounted(() => {
diy.getData(() => {
diyFormData.status = diy.data.status;
- if (diyFormData.status) {
+ if (diyFormData.status && requestData.value.error.length == 0) {
diyFormData.title = diy.data.title;
diyFormData.global = diy.data.global;
if (diyFormData.global) {
diyFormData.global.topStatusBar.isShow = false; // 顶部导航栏强制隐藏
- diyFormData.global.bottomTabBarSwitch = false; // 底部导航强制隐藏
+ diyFormData.global.bottomTabBar.isShow = false; // 底部导航强制隐藏
}
let value: any = [];
if (props.form_border == 'none') {
@@ -47,7 +60,7 @@ onMounted(() => {
value.push(item);
}
})
- diyFormData.value = value;
+ diyFormData.value = deepClone(value);
diyFormData.componentRefs = null;
diyGroupRef.value?.refresh();
watchFormData();
@@ -95,6 +108,7 @@ const watchFormData = () => {
const verify = () => {
if (!diyFormData.status) return true;
if (!diyFormData.value) return true;
+ if (!requestData.value || requestData.value.error?.length > 0) return true;
let allPass = true; // 是否全部通过验证
let componentRefs = diyGroupRef.value.getFormRef().componentRefs;
diff --git a/uni-app/src/addon/components/diy/group/index.vue b/uni-app/src/addon/components/diy/group/index.vue
index b3e393a80..c6f65ff74 100644
--- a/uni-app/src/addon/components/diy/group/index.vue
+++ b/uni-app/src/addon/components/diy/group/index.vue
@@ -1,127 +1,130 @@
+ :scrollBool="diyGroup.componentsScrollBool.TopTabbar" ref="topTabbarRef" :data="data.global" />
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
@@ -130,7 +133,6 @@
diff --git a/uni-app/src/app/components/diy/member-info/index.vue b/uni-app/src/app/components/diy/member-info/index.vue
index 028fcc97d..5fc394530 100644
--- a/uni-app/src/app/components/diy/member-info/index.vue
+++ b/uni-app/src/app/components/diy/member-info/index.vue
@@ -79,7 +79,7 @@ const diyComponent = computed(() => {
}
})
const warpCss = computed(() => {
- var style = '';
+ let style = '';
if (diyComponent.value.componentStartBgColor) {
if (diyComponent.value.componentStartBgColor && diyComponent.value.componentEndBgColor) style += `background:linear-gradient(${ diyComponent.value.componentGradientAngle },${ diyComponent.value.componentStartBgColor },${ diyComponent.value.componentEndBgColor });`;
else style += 'background-color:' + diyComponent.value.componentStartBgColor + ';';
@@ -194,11 +194,6 @@ const clickAvatar = () => {
}
// #endif
}
-let menuButtonInfo: any = {};
-// 如果是小程序,获取右上角胶囊的尺寸信息,避免导航栏右侧内容与胶囊重叠(支付宝小程序非本API,尚未兼容)
-// #ifdef MP-WEIXIN || MP-BAIDU || MP-TOUTIAO || MP-QQ
-menuButtonInfo = uni.getMenuButtonBoundingClientRect();
-// #endif
diff --git a/uni-app/src/app/pages/auth/resetpwd.vue b/uni-app/src/app/pages/auth/resetpwd.vue
index 2bb530b53..2b232cebf 100644
--- a/uni-app/src/app/pages/auth/resetpwd.vue
+++ b/uni-app/src/app/pages/auth/resetpwd.vue
@@ -7,9 +7,9 @@
{{ t('findPassword') }}
- {{ t('findPasswordTip') }}
+ {{ t('findPasswordTip') }}
-
+
-
+
-
+
-
+
{
- return Object.keys(menuButtonInfo).length ? pxToRpx(Number(menuButtonInfo.height)) + pxToRpx(menuButtonInfo.top) + pxToRpx(8) + 'rpx' : 'auto'
+ return Object.keys(systemStore.menuButtonInfo).length ? pxToRpx(Number(systemStore.menuButtonInfo.height)) + pxToRpx(systemStore.menuButtonInfo.top) + pxToRpx(8) + 'rpx' : 'auto'
})
const formData = reactive({
mobile: '',
diff --git a/uni-app/src/app/pages/index/index.vue b/uni-app/src/app/pages/index/index.vue
index c55cad877..27e869ef0 100644
--- a/uni-app/src/app/pages/index/index.vue
+++ b/uni-app/src/app/pages/index/index.vue
@@ -15,6 +15,7 @@
+
@@ -40,7 +41,7 @@ const diy = useDiy({
const diyGroupRef = ref(null)
const wxPrivacyPopupRef: any = ref(null)
-
+const collectTipRef: any = ref(null)
// 监听页面加载
diy.onLoad();
@@ -57,9 +58,11 @@ diy.onShow((data: any) => {
let share = data.share ? JSON.parse(data.share) : null;
setShare(share);
diyGroupRef.value?.refresh();
+
// #ifdef MP
nextTick(() => {
if (wxPrivacyPopupRef.value) wxPrivacyPopupRef.value.proactive();
+ if (collectTipRef.value) collectTipRef.value.show();
})
// #endif
});
diff --git a/uni-app/src/app/pages/member/address_edit.vue b/uni-app/src/app/pages/member/address_edit.vue
index 47bfaca42..cc024ba83 100644
--- a/uni-app/src/app/pages/member/address_edit.vue
+++ b/uni-app/src/app/pages/member/address_edit.vue
@@ -44,15 +44,25 @@
+
@@ -115,7 +125,7 @@ onLoad((data: any) => {
}
formData.value.address = data.name;
getAddress(data.latng);
- var tempArr = getQueryVariable('latng').split(',');
+ const tempArr = getQueryVariable('latng').split(',');
formData.value.lat = tempArr[0];
formData.value.lng = tempArr[1];
}
@@ -277,7 +287,7 @@ const chooseLocation = () => {
// #endif
// #ifdef H5
- var urlencode = formData.value;
+ const urlencode = formData.value;
uni.setStorageSync('addressInfo', urlencode);
let backurl = location.origin + location.pathname + '?source=' + source.value;
if (isSelectMap.value) {
@@ -310,16 +320,36 @@ const getAddress = (latlng: any) => {
}
const getQueryVariable = (variable: any) => {
- var query = window.location.search.substring(1);
- var vars = query.split('&');
- for (var i = 0; i < vars.length; i++) {
- var pair = vars[i].split('=');
+ const query = window.location.search.substring(1);
+ const vars = query.split('&');
+ for (let i = 0; i < vars.length; i++) {
+ const pair = vars[i].split('=');
if (pair[0] == variable) {
return pair[1];
}
}
return false;
}
+const loadingchoosegAddress = ref(false)
+const choosegAddress = () =>{
+ loadingchoosegAddress.value = true
+ uni.chooseAddress({
+ success(res) {
+ console.log(7744)
+ loadingchoosegAddress.value = false
+ // 将地址信息格式化为“名字-手机号-地址(详细地址)”
+ // const formattedAddress = `${res.userName}-${res.telNumber}-${res.provinceName}${res.cityName}${res.countyName}${res.detailInfoNew || res.detailInfo}`;
+ console.log(res)
+ formData.value.name = res.userName
+ formData.value.mobile = res.telNumber
+ formData.value.area = res.provinceName + res.cityName + res.countyName
+ formData.value.address = res.detailInfo
+ },
+ fail(err) {
+ loadingchoosegAddress.value = false
+ }
+ });
+}
diff --git a/uni-app/src/app/pages/member/balance.vue b/uni-app/src/app/pages/member/balance.vue
index ab9c3a66e..84a74c89e 100644
--- a/uni-app/src/app/pages/member/balance.vue
+++ b/uni-app/src/app/pages/member/balance.vue
@@ -136,13 +136,6 @@ onShow(() => {
}
})
-
-// 获取系统状态栏的高度
-let menuButtonInfo: any = {};
-// 如果是小程序,获取右上角胶囊的尺寸信息,避免导航栏右侧内容与胶囊重叠(支付宝小程序非本API,尚未兼容)
-// #ifdef MP-WEIXIN || MP-BAIDU || MP-TOUTIAO || MP-QQ
-menuButtonInfo = uni.getMenuButtonBoundingClientRect();
-// #endif
const headerStyle = computed(() => {
return {
backgroundImage: 'url(' + img('static/resource/images/member/balance_bg.png') + ') ',
@@ -154,14 +147,14 @@ const headerStyle = computed(() => {
const mescrollTop = computed(() => {
if ((cashOutConfigObj.is_open == 1 || rechargeConfigObj.is_use == 1)) {
- if (Object.keys(menuButtonInfo).length) {
- return (pxToRpx(Number(menuButtonInfo.height)) + pxToRpx(menuButtonInfo.top) + pxToRpx(8) + 700) + 'rpx'
+ if (Object.keys(systemStore.menuButtonInfo).length) {
+ return (pxToRpx(Number(systemStore.menuButtonInfo.height)) + pxToRpx(systemStore.menuButtonInfo.top) + pxToRpx(8) + 700) + 'rpx'
} else {
return '718rpx'
}
} else {
- if (Object.keys(menuButtonInfo).length) {
- return (pxToRpx(Number(menuButtonInfo.height)) + pxToRpx(menuButtonInfo.top) + pxToRpx(8) + 632) + 'rpx'
+ if (Object.keys(systemStore.menuButtonInfo).length) {
+ return (pxToRpx(Number(systemStore.menuButtonInfo.height)) + pxToRpx(systemStore.menuButtonInfo.top) + pxToRpx(8) + 632) + 'rpx'
} else {
return '650rpx'
}
diff --git a/uni-app/src/app/pages/member/commission.vue b/uni-app/src/app/pages/member/commission.vue
index fae2afdfa..ee9e8d4e9 100644
--- a/uni-app/src/app/pages/member/commission.vue
+++ b/uni-app/src/app/pages/member/commission.vue
@@ -77,9 +77,11 @@ import useMescroll from '@/components/mescroll/hooks/useMescroll.js';
import { onPageScroll, onReachBottom } from '@dcloudio/uni-app';
import { topTabar } from '@/utils/topTabbar'
import selectDate from '@/components/select-date/select-date.vue';
+import useSystemStore from "@/stores/system";
const { downCallback, mescrollInit, getMescroll } = useMescroll(onPageScroll, onReachBottom);
const memberStore = useMemberStore();
+const systemStore = useSystemStore()
const info = computed(() => memberStore.info)
// 提现
const applyCashOut = () => {
@@ -92,12 +94,6 @@ const topTabarObj = topTabar()
let param = topTabarObj.setTopTabbarParam({ title: '我的佣金', topStatusBar: { bgColor: '#fff', textColor: '#333' } })
/********* 自定义头部 - end ***********/
- // 获取系统状态栏的高度
-let menuButtonInfo: any = {};
-// 如果是小程序,获取右上角胶囊的尺寸信息,避免导航栏右侧内容与胶囊重叠(支付宝小程序非本API,尚未兼容)
-// #ifdef MP-WEIXIN || MP-BAIDU || MP-TOUTIAO || MP-QQ
-menuButtonInfo = uni.getMenuButtonBoundingClientRect();
-// #endif
const headerStyle = computed(() => {
return {
backgroundImage: 'url(' + img('static/resource/images/member/commission/commission_bg.png') + ') ',
@@ -108,7 +104,7 @@ const headerStyle = computed(() => {
})
// 16为自定头部的padding-bottom
const mescrollTop = computed(() => {
- return Object.keys(menuButtonInfo).length ? (Number(menuButtonInfo.height) * 2 + menuButtonInfo.top * 2 + 470 + 16) + 'rpx' : '470rpx'
+ return Object.keys(systemStore.menuButtonInfo).length ? (Number(systemStore.menuButtonInfo.height) * 2 + systemStore.menuButtonInfo.top * 2 + 470 + 16) + 'rpx' : '470rpx'
})
//来源类型
@@ -173,7 +169,7 @@ const confirmFn = (data: any) => {
+
diff --git a/uni-app/src/app/pages/member/personal_form.vue b/uni-app/src/app/pages/member/personal_form.vue
index 5d95a97d2..78dc44997 100644
--- a/uni-app/src/app/pages/member/personal_form.vue
+++ b/uni-app/src/app/pages/member/personal_form.vue
@@ -95,6 +95,9 @@ diy.onLoad((data: any) => {
if(formDetailData[item.id]){
try {
item.field.value = JSON.parse(formDetailData[item.id])
+ if (item.componentName=="FormNumber" || item.componentName=="FormIdentity") {
+ item.field.value = String(formDetailData[item.id])
+ }
} catch (e) {
item.field.value = formDetailData[item.id]
}
diff --git a/uni-app/src/app/pages/member/point.vue b/uni-app/src/app/pages/member/point.vue
index 5b3521d29..25fad58c4 100644
--- a/uni-app/src/app/pages/member/point.vue
+++ b/uni-app/src/app/pages/member/point.vue
@@ -106,29 +106,25 @@ import { t } from '@/locale'
import { redirect, img, pxToRpx } from '@/utils/common';
import { getMemberAccountPointcount, getTaskPoint } from '@/app/api/member';
import { topTabar } from '@/utils/topTabbar'
+import useSystemStore from "@/stores/system";
/********* 自定义头部 - start ***********/
const topTabarObj = topTabar()
let param = topTabarObj.setTopTabbarParam({ title: '我的积分' })
/********* 自定义头部 - end ***********/
-// 获取系统状态栏的高度
-let menuButtonInfo: any = {};
-// 如果是小程序,获取右上角胶囊的尺寸信息,避免导航栏右侧内容与胶囊重叠(支付宝小程序非本API,尚未兼容)
-// #ifdef MP-WEIXIN || MP-BAIDU || MP-TOUTIAO || MP-QQ
-menuButtonInfo = uni.getMenuButtonBoundingClientRect();
-// #endif
+const systemStore = useSystemStore()
const headerStyle = computed(() => {
return {
backgroundImage: 'url(' + img('static/resource/images/member/point/point_bg.png') + ') ',
backgroundSize: 'cover',
backgroundRepeat: 'no-repeat',
backgroundPosition: 'bottom',
- // paddingTop:Object.keys(menuButtonInfo).length?(Number(menuButtonInfo.height) * 2 + menuButtonInfo.top * 2 + 77)+'rpx':'77rpx',
+ // paddingTop:Object.keys(systemStore.menuButtonInfo).length?(Number(systemStore.menuButtonInfo.height) * 2 + systemStore.menuButtonInfo.top * 2 + 77)+'rpx':'77rpx',
}
})
const topStyle = computed(() => {
- let style = Object.keys(menuButtonInfo).length ? (pxToRpx(Number(menuButtonInfo.height)) + pxToRpx(menuButtonInfo.top) + 50) + 'rpx;' : '50rpx'
+ let style = Object.keys(systemStore.menuButtonInfo).length ? (pxToRpx(Number(systemStore.menuButtonInfo.height)) + pxToRpx(systemStore.menuButtonInfo.top) + 50) + 'rpx;' : '50rpx'
return style
})
diff --git a/uni-app/src/app/pages/member/sign_in.vue b/uni-app/src/app/pages/member/sign_in.vue
index 82c3c0ce1..f6c5080ae 100644
--- a/uni-app/src/app/pages/member/sign_in.vue
+++ b/uni-app/src/app/pages/member/sign_in.vue
@@ -247,6 +247,7 @@ import { onLoad } from '@dcloudio/uni-app'
import { getSignInfo, getSignConfig, setSign, getDayPack } from '@/app/api/member'
import useMemberStore from '@/stores/member'
import { topTabar } from '@/utils/topTabbar'
+import useSystemStore from "@/stores/system";
const state = reactive({
dataCount: [], //当月所有天数
@@ -462,23 +463,18 @@ const filteredDate = (date: any) => {
return date > 0 ? date : ''
}
-// 获取系统状态栏的高度
-let menuButtonInfo: any = {};
-// 如果是小程序,获取右上角胶囊的尺寸信息,避免导航栏右侧内容与胶囊重叠(支付宝小程序非本API,尚未兼容)
-// #ifdef MP-WEIXIN || MP-BAIDU || MP-TOUTIAO || MP-QQ
-menuButtonInfo = uni.getMenuButtonBoundingClientRect();
-// #endif
+const systemStore = useSystemStore()
/********* 自定义头部 - start ***********/
const topTabarObj = topTabar()
let topTabbarData = topTabarObj.setTopTabbarParam({ title: '我的签到' })
/********* 自定义头部 - end ***********/
const headStyle = computed(() => {
- let style = pxToRpx(Number(menuButtonInfo.height) + menuButtonInfo.top + 8) + 382 + 'rpx;'
+ let style = pxToRpx(Number(systemStore.menuButtonInfo.height) + systemStore.menuButtonInfo.top + 8) + 382 + 'rpx;'
return style
})
const topStyle = computed(() => {
- let style = pxToRpx(Number(menuButtonInfo.height) + menuButtonInfo.top + 8) + 50 + 'rpx;'
+ let style = pxToRpx(Number(systemStore.menuButtonInfo.height) + systemStore.menuButtonInfo.top + 8) + 50 + 'rpx;'
return style
})
diff --git a/uni-app/src/app/pages/setting/index.vue b/uni-app/src/app/pages/setting/index.vue
index 056b37579..ec6db49c2 100644
--- a/uni-app/src/app/pages/setting/index.vue
+++ b/uni-app/src/app/pages/setting/index.vue
@@ -14,7 +14,7 @@
-
+
diff --git a/uni-app/src/app/pages/verify/index.vue b/uni-app/src/app/pages/verify/index.vue
index 7b73b4c23..eb7f36098 100644
--- a/uni-app/src/app/pages/verify/index.vue
+++ b/uni-app/src/app/pages/verify/index.vue
@@ -156,7 +156,7 @@ const scanCode = () => {
let isLoading = false;
const confirm = () => {
- var reg = /[\S]+/;
+ const reg = /[\S]+/;
if (!reg.test(verify_code.value)) {
uni.showToast({
title: '请输入核销码',
diff --git a/uni-app/src/app/pages/verify/record.vue b/uni-app/src/app/pages/verify/record.vue
index 2810a5a30..ec11facf4 100644
--- a/uni-app/src/app/pages/verify/record.vue
+++ b/uni-app/src/app/pages/verify/record.vue
@@ -39,7 +39,7 @@
核销员
- {{ item.member ? item.member.nickname : '--' }}
+ {{ (item.is_admin == 1 ? '后台核销' : item.member?.nickname) || '--' }}
diff --git a/uni-app/src/app/stores/diy.ts b/uni-app/src/app/stores/diy.ts
index 19401a76d..ded888b41 100644
--- a/uni-app/src/app/stores/diy.ts
+++ b/uni-app/src/app/stores/diy.ts
@@ -12,7 +12,7 @@ interface Diy {
title: string,
pageStartBgColor: string, // 页面背景颜色(开始)
pageEndBgColor: string, // 页面背景颜色(结束)
- bottomTabBarSwitch: boolean, // 底部导航开关
+ bottomTabBar: any, // 底部导航
bgUrl: string
},
// 组件集合
@@ -20,7 +20,8 @@ interface Diy {
topFixedStatus: string, // 置顶组件的状态
scrollTop: number,
topTabarHeight: number,
- componentRefs: any
+ componentRefs: any,
+ imageAdsSameScreen: any // 图片广告, 是否设置沉浸式
}
const useDiyStore = defineStore('diy', {
@@ -34,14 +35,18 @@ const useDiyStore = defineStore('diy', {
title: "",
pageStartBgColor: '', // 页面背景颜色(开始)
pageEndBgColor: '', // 页面背景颜色(结束)
- bottomTabBarSwitch: true,
+ bottomTabBar: {
+ control: true, // 是否允许展示编辑
+ isShow: true, // 是否显示
+ },
bgUrl: ''
},
value: [], // 组件集合
topFixedStatus: 'home', // 顶部 置顶组件状态,home:展示首页数据、diy:展示置顶组件定义的子页面
scrollTop: 0, // 滚动位置
topTabarHeight: 0,
- componentRefs: null
+ componentRefs: null,
+ imageAdsSameScreen: false
}
},
getters: {},
@@ -49,7 +54,7 @@ const useDiyStore = defineStore('diy', {
// 初始化
init() {
// #ifdef H5
- var data = JSON.stringify({
+ const data = JSON.stringify({
type: 'init',
load: true
});
@@ -68,6 +73,7 @@ const useDiyStore = defineStore('diy', {
if (this.value) {
this.value.forEach((item, index) => {
item.pageStyle = '';
+ item.componentIsShow = true // 是否显示
if (item.pageStartBgColor) {
if (item.pageStartBgColor && item.pageEndBgColor) item.pageStyle += `background:linear-gradient(${ item.pageGradientAngle },${ item.pageStartBgColor },${ item.pageEndBgColor });`;
else item.pageStyle += 'background-color:' + item.pageStartBgColor + ';';
@@ -118,7 +124,7 @@ const useDiyStore = defineStore('diy', {
// 减少重复请求
if (this.currentIndex == index) return;
this.currentIndex = index;
- var data = JSON.stringify({
+ const data = JSON.stringify({
type: 'change',
index,
component: toRaw(component)
diff --git a/uni-app/src/components/area-select/area-select.vue b/uni-app/src/components/area-select/area-select.vue
index 91e4279c9..50133bacd 100644
--- a/uni-app/src/components/area-select/area-select.vue
+++ b/uni-app/src/components/area-select/area-select.vue
@@ -15,18 +15,20 @@
{{ selected.district.name }}
请选择
+
-
-
-
- {{ item.name }}
+
+
+
+ {{ item.name }}
-
- {{ item.name }}
+
+ {{ item.name }}
-
- {{ item.name }}
+
+ {{ item.name }}
+
@@ -34,7 +36,7 @@
+
+
\ No newline at end of file
diff --git a/uni-app/src/components/barrage/barrage-item.vue b/uni-app/src/components/barrage/barrage-item.vue
new file mode 100644
index 000000000..964733d4a
--- /dev/null
+++ b/uni-app/src/components/barrage/barrage-item.vue
@@ -0,0 +1,107 @@
+@ -1,108 +0,0 @@
+
+
+
+
+ {{ data.nickname }}
+ {{ data.time }}下单
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/uni-app/src/components/barrage/container.vue b/uni-app/src/components/barrage/container.vue
new file mode 100644
index 000000000..784de781e
--- /dev/null
+++ b/uni-app/src/components/barrage/container.vue
@@ -0,0 +1,176 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/uni-app/src/components/bind-mobile/bind-mobile.vue b/uni-app/src/components/bind-mobile/bind-mobile.vue
index cebb776b9..8ed26d9b4 100644
--- a/uni-app/src/components/bind-mobile/bind-mobile.vue
+++ b/uni-app/src/components/bind-mobile/bind-mobile.vue
@@ -128,7 +128,12 @@ const handleBind = () => {
loading.value = true
const request = info.value ? bindMobile : mobileLogin;
-
+ if(uni.getStorageSync('avatar') && uni.getStorageSync('nickname') && uni.getStorageSync('openid') && uni.getStorageSync('unionid')){
+ formData.avatar = uni.getStorageSync('avatar')
+ formData.nickname = uni.getStorageSync('nickname')
+ formData.openid = uni.getStorageSync('openid')
+ formData.unionid = uni.getStorageSync('unionid')
+ }
request(formData).then((res: any) => {
if (info.value) {
memberStore.getMemberInfo()
diff --git a/uni-app/src/components/collect-tip/collect-tip.vue b/uni-app/src/components/collect-tip/collect-tip.vue
new file mode 100644
index 000000000..1f403335d
--- /dev/null
+++ b/uni-app/src/components/collect-tip/collect-tip.vue
@@ -0,0 +1,83 @@
+
+
+
+
+ 点击 添加到我的小程序
微信首页下拉即可快速访问店铺
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/uni-app/src/components/easy-image/easy-image.vue b/uni-app/src/components/easy-image/easy-image.vue
new file mode 100644
index 000000000..5760925d7
--- /dev/null
+++ b/uni-app/src/components/easy-image/easy-image.vue
@@ -0,0 +1,175 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/uni-app/src/components/easy-image/fail.png b/uni-app/src/components/easy-image/fail.png
new file mode 100644
index 000000000..f8e221ba6
Binary files /dev/null and b/uni-app/src/components/easy-image/fail.png differ
diff --git a/uni-app/src/components/easy-image/loading.png b/uni-app/src/components/easy-image/loading.png
new file mode 100644
index 000000000..a51e53502
Binary files /dev/null and b/uni-app/src/components/easy-image/loading.png differ
diff --git a/uni-app/src/components/firework-effect/README.md b/uni-app/src/components/firework-effect/README.md
new file mode 100644
index 000000000..8b194ac20
--- /dev/null
+++ b/uni-app/src/components/firework-effect/README.md
@@ -0,0 +1,253 @@
+# 🎆 简单烟花特效组件
+
+一个轻量级的uni-app烟花特效组件,专注于提供最佳的用户体验。
+
+## 📁 组件结构
+
+```
+firework-effect/
+├── firework-effect.vue # 主要的烟花特效组件
+├── simple-firework.vue # 简单烟花特效组件
+└── README.md # 说明文档
+```
+
+## ✨ 特效特点
+
+### 🎇 简单烟花 (simple-firework)
+- 从底部发射,空中爆炸成彩色粒子
+- 自动发射,可定义持续时间
+- **不阻挡用户操作** - 设置了 `pointer-events: none`
+- **自动停止** - 默认30秒,可自定义
+- **无黑色阴影** - 使用透明背景
+- **兼容性最好** - 使用传统Canvas API
+
+### 🧧 红包雨 (red-packet-rain)
+- **新增功能** ⭐
+- 从屏幕顶部飘落的红包雨效果
+- **点击获得金额** - 点击红包显示随机金额提示
+- **不阻挡用户操作** - 设置了 `pointer-events: none`,不会挡住底部按钮
+- **自定义时间** - 可设置持续时间
+- **自定义密度** - 可调节红包数量
+- **自定义速度** - 可调节下落速度
+- **自定义大小** - 可设置红包大小范围
+- **自定义金额** - 可设置金额范围
+- **精美动画** - 金额提示有向上飘动的动画效果
+- **自动绘制红包** - 无需图片资源,自动绘制精美红包
+
+## 🎯 使用方法
+
+### 1. 基本使用
+
+```vue
+
+
+
+
+
+
+
+
+
+```
+
+### 2. API 说明
+
+#### FireworkEffect 组件
+
+**Props:**
+- `duration`: 特效持续时间(毫秒),默认30000(30秒)
+- `noTrail`: 是否禁用拖尾效果(避免黑色阴影),默认true
+- `redPacketImages`: 红包图片数组,如:`['/static/images/hongbao1.png']`
+- `redPacketUseImages`: 是否使用图片模式,默认false(使用绘制模式)
+- `redPacketDensity`: 红包密度(每次生成数量),默认3
+- `redPacketSpeed`: 红包下落速度,默认2
+- `redPacketMinSize`: 红包最小大小(px),默认60
+- `redPacketMaxSize`: 红包最大大小(px),默认100
+- `redPacketMinAmount`: 红包最小金额,默认0.01
+- `redPacketMaxAmount`: 红包最大金额,默认10.00
+- `redPacketClickable`: 是否可点击红包,默认true
+
+**方法:**
+- `handleShowEffect(params)`: 显示特效
+ - `params.type`: 特效类型
+ - `'simple-firework'`: 简单烟花特效
+ - `'red-packet-rain'` 或 `'hongbao'`: 红包雨特效
+ - `params.duration`: 自定义持续时间(可选)
+### 🚫 解决黑色阴影问题
+
+如果您看到黑色阴影,请确保:
+
+1. **设置 `no-trail="true"`**(默认已启用)
+2. **避免使用拖尾效果**,这会产生半透明覆盖
+
+```vue
+
+
+
+
+
+```
+
+### 📋 注意事项
+
+1. 确保页面有足够的渲染性能
+2. 在低端设备上可能需要减少粒子数量
+3. 长时间运行建议定期清理资源
+4. 某些小程序平台可能对 Canvas API 有限制
+5. **只支持 `simple-firework` 类型**,不会阻挡用户操作
+
+### 🎁 红包雨详细配置
+
+#### 方式一:使用自定义图片
+
+```vue
+
+
+
+ :red-packet-min-size="100"
+ :red-packet-max-size="150"
+ :red-packet-min-amount="1.0"
+ :red-packet-max-amount="100.0"
+ :red-packet-density="6"
+ :red-packet-speed="1.5"
+ :red-packet-clickable="true"
+ >
+
+```
+
+#### 方式二:使用代码绘制(默认)
+
+```vue
+
+
+
+ :red-packet-min-size="80"
+ :red-packet-max-size="120"
+ :red-packet-min-amount="0.1"
+ :red-packet-max-amount="50.0"
+ :red-packet-density="4"
+ :red-packet-speed="2.5"
+ :red-packet-clickable="true"
+ >
+
+```
+
+#### 方式三:使用网络图片
+
+```vue
+
+
+
+
+```
+
+### 🖼️ 红包图片要求
+
+#### 图片格式
+- **PNG**(推荐,支持透明背景)
+- **JPG/JPEG**
+- **WebP**
+
+#### 尺寸建议
+- **推荐尺寸**: 200x160px(宽高比5:4)
+- **最小尺寸**: 100x80px
+- **最大尺寸**: 400x320px
+
+#### 文件大小
+- **建议**: 小于100KB
+- **最大**: 不超过500KB
+
+#### 图片准备步骤
+1. 将红包图片放在 `uni-app/public/static/images/` 目录
+2. 文件命名建议:`hongbao1.png`, `hongbao2.png` 等
+3. 确保图片背景透明(PNG格式)
+4. 图片内容应该是完整的红包设计
+
+### 📏 红包大小控制
+
+```vue
+
+:red-packet-min-size="60"
+:red-packet-max-size="80"
+
+
+:red-packet-min-size="80"
+:red-packet-max-size="120"
+
+
+:red-packet-min-size="120"
+:red-packet-max-size="180"
+
+
+:red-packet-min-size="150"
+:red-packet-max-size="200"
+```
+
+### 🎯 红包点击功能
+
+- **点击检测**: 自动检测用户点击的红包
+- **金额显示**: 显示随机金额(在设定范围内)
+- **动画效果**: 金额提示向上飘动并淡出
+- **防重复**: 已点击的红包变为半透明,不可重复点击
+- **响应式**: 支持触摸和鼠标点击
+
+### 🔧 兼容性
+
+- 支持 Vue 2 和 Vue 3
+- 支持 uni-app 各平台(H5、小程序、App)
+- 使用传统 Canvas API,兼容性最佳
diff --git a/uni-app/src/components/firework-effect/firework-effect.vue b/uni-app/src/components/firework-effect/firework-effect.vue
new file mode 100644
index 000000000..02549af66
--- /dev/null
+++ b/uni-app/src/components/firework-effect/firework-effect.vue
@@ -0,0 +1,155 @@
+
+
+
+
+
+
+
diff --git a/uni-app/src/components/firework-effect/red-packet-rain.vue b/uni-app/src/components/firework-effect/red-packet-rain.vue
new file mode 100644
index 000000000..937a32d7e
--- /dev/null
+++ b/uni-app/src/components/firework-effect/red-packet-rain.vue
@@ -0,0 +1,682 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 福
+
+
+
+
+
+
+
+
+
+ +¥{{ tip.amount }}
+ {{ tip.label }}
+
+
+
+
+
+
+
+
diff --git a/uni-app/src/components/firework-effect/simple-firework.vue b/uni-app/src/components/firework-effect/simple-firework.vue
new file mode 100644
index 000000000..7cf738f3c
--- /dev/null
+++ b/uni-app/src/components/firework-effect/simple-firework.vue
@@ -0,0 +1,378 @@
+
+
+
+
+
+
+
+
+
diff --git a/uni-app/src/components/information-filling/information-filling.vue b/uni-app/src/components/information-filling/information-filling.vue
index a8832ce19..3f77eb32c 100644
--- a/uni-app/src/components/information-filling/information-filling.vue
+++ b/uni-app/src/components/information-filling/information-filling.vue
@@ -20,13 +20,13 @@
-
+
-
-
+
+
-
-
+
+
diff --git a/uni-app/src/components/mescroll/mescroll-uni/wxs/renderjs.js b/uni-app/src/components/mescroll/mescroll-uni/wxs/renderjs.js
index 207f38857..9eeff4cce 100644
--- a/uni-app/src/components/mescroll/mescroll-uni/wxs/renderjs.js
+++ b/uni-app/src/components/mescroll/mescroll-uni/wxs/renderjs.js
@@ -3,7 +3,7 @@
// https://uniapp.dcloud.io/frame?id=renderjs
// 与wxs的me实例一致
-var me = {}
+const me = {};
// 初始化window对象的touch事件 (仅初始化一次)
if(window && !window.$mescrollRenderInit){
@@ -19,20 +19,20 @@ if(window && !window.$mescrollRenderInit){
window.addEventListener('touchmove', function(e){
if (me.disabled()) return;
if (me.getScrollTop() > 0) return; // 需在顶部下拉,才禁止bounce
-
- var curPoint = me.getPoint(e); // 当前点
- var moveY = curPoint.y - me.startPoint.y; // 和起点比,移动的距离,大于0向下拉,小于0向上拉
+
+ const curPoint = me.getPoint(e); // 当前点
+ const moveY = curPoint.y - me.startPoint.y; // 和起点比,移动的距离,大于0向下拉,小于0向上拉
// 向下拉
if (moveY > 0) {
// 可下拉的条件
if (!me.isDownScrolling && !me.optDown.isLock && (!me.isUpScrolling || (me.isUpScrolling && me.isUpBoth))) {
// 只有touch在mescroll的view上面,才禁止bounce
- var el = e.target;
- var isMescrollTouch = false;
- while (el && el.tagName && el.tagName !== 'UNI-PAGE-BODY' && el.tagName != "BODY") {
- var cls = el.classList;
- if (cls && cls.contains('mescroll-render-touch')) {
+ let el = e.target;
+ let isMescrollTouch = false;
+ while (el && el.tagName && el.tagName !== 'UNI-PAGE-BODY' && el.tagName != "BODY") {
+ const cls = el.classList;
+ if (cls && cls.contains('mescroll-render-touch')) {
isMescrollTouch = true
break;
}
diff --git a/uni-app/src/components/music/music-container.vue b/uni-app/src/components/music/music-container.vue
new file mode 100644
index 000000000..da0a6df06
--- /dev/null
+++ b/uni-app/src/components/music/music-container.vue
@@ -0,0 +1,436 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/uni-app/src/components/online-service/online-service.vue b/uni-app/src/components/online-service/online-service.vue
new file mode 100644
index 000000000..72f4c70b3
--- /dev/null
+++ b/uni-app/src/components/online-service/online-service.vue
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
diff --git a/uni-app/src/components/pay/pay.vue b/uni-app/src/components/pay/pay.vue
index bad269c34..15f4c6986 100644
--- a/uni-app/src/components/pay/pay.vue
+++ b/uni-app/src/components/pay/pay.vue
@@ -44,6 +44,10 @@ const prop = defineProps({
default () {
return []
}
+ },
+ reformat: {
+ type: String,
+ default: ''
}
})
@@ -165,6 +169,7 @@ const confirmPay = () => {
uni.$on('checkIsReturnAfterPayment', () => {
const data = uni.getStorageSync('paymenting')
if (uni.getStorageSync('paymenting')) {
+
redirect({
url: '/app/pages/pay/result',
param: {
@@ -220,8 +225,18 @@ const open = (tradeType: string, tradeId: number, payReturn: string = '', scene:
}
const emits = defineEmits(['close', 'confirm'])
+
const toPayResult = () => {
emits('confirm')
+ // console.log(prop.reformat)
+ if(prop.reformat){
+ redirect({
+ url: prop.reformat,
+ mode: 'redirectTo'
+ })
+ return
+ }
+
redirect({
url: '/app/pages/pay/result',
param: { trade_type: payInfo.value?.trade_type, trade_id: payInfo.value?.trade_id },
@@ -237,7 +252,8 @@ const handleClose = () => {
}
defineExpose({
- open
+ open,
+ payInfo
})
diff --git a/uni-app/src/components/share-popup/share-popup.vue b/uni-app/src/components/share-popup/share-popup.vue
index 7f7149bcf..dd04b5c87 100644
--- a/uni-app/src/components/share-popup/share-popup.vue
+++ b/uni-app/src/components/share-popup/share-popup.vue
@@ -23,7 +23,7 @@
@@ -45,6 +45,7 @@