mirror of
https://gitee.com/niucloud-team/niucloud.git
synced 2025-12-12 18:02:47 +00:00
up
This commit is contained in:
parent
d8f1246d44
commit
8dda9f6989
@ -196,6 +196,8 @@ onLaunch((data: any) => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// 控制弹窗展示
|
||||||
|
uni.setStorageSync('isOnLoad', true); // 存储是页面是否加载完成的状态
|
||||||
})
|
})
|
||||||
|
|
||||||
onShow(() => {
|
onShow(() => {
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
<view class="diy-group" id="componentList">
|
<view class="diy-group" id="componentList">
|
||||||
<top-tabbar v-if="data.global && Object.keys(data.global).length && data.global.topStatusBar && data.global.topStatusBar.isShow"
|
<top-tabbar v-if="data.global && Object.keys(data.global).length && data.global.topStatusBar && data.global.topStatusBar.isShow"
|
||||||
:scrollBool="diyGroup.componentsScrollBool.TopTabbar" ref="topTabbarRef" :data="data.global" />
|
:scrollBool="diyGroup.componentsScrollBool.TopTabbar" ref="topTabbarRef" :data="data.global" />
|
||||||
|
<pop-ads v-if="data.global && Object.keys(data.global).length && data.global.popWindow && data.global.popWindow.show" ref="popAbsRef" :data="data.global" />
|
||||||
<view v-for="(component, index) in data.value" :key="component.id"
|
<view v-for="(component, index) in data.value" :key="component.id"
|
||||||
@click="diyStore.changeCurrentIndex(index, component)"
|
@click="diyStore.changeCurrentIndex(index, component)"
|
||||||
:class="diyGroup.getComponentClass(index,component)" :style="component.pageStyle">
|
:class="diyGroup.getComponentClass(index,component)" :style="component.pageStyle">
|
||||||
@ -117,6 +118,7 @@
|
|||||||
<template v-if="component.componentName == 'FormFile'">
|
<template v-if="component.componentName == 'FormFile'">
|
||||||
<diy-form-file ref="diyFormFileRef" :component="component" :global="data.global" :index="index" />
|
<diy-form-file ref="diyFormFileRef" :component="component" :global="data.global" :index="index" />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<template v-if="diyStore.mode == '' && data.global && data.global.bottomTabBarSwitch">
|
<template v-if="diyStore.mode == '' && data.global && data.global.bottomTabBarSwitch">
|
||||||
@ -127,13 +129,13 @@
|
|||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import topTabbar from '@/components/top-tabbar/top-tabbar.vue'
|
import topTabbar from '@/components/top-tabbar/top-tabbar.vue'
|
||||||
|
import popAds from '@/components/pop-ads/pop-ads.vue'
|
||||||
|
|
||||||
import { useDiyGroup } from './useDiyGroup'
|
import { useDiyGroup } from './useDiyGroup'
|
||||||
import useDiyStore from '@/app/stores/diy';
|
import useDiyStore from '@/app/stores/diy';
|
||||||
import { ref, getCurrentInstance } from 'vue';
|
import { ref, getCurrentInstance } from 'vue';
|
||||||
|
|
||||||
const props = defineProps(['data']);
|
const props = defineProps(['data']);
|
||||||
|
|
||||||
const instance: any = getCurrentInstance();
|
const instance: any = getCurrentInstance();
|
||||||
const getFormRef = () => {
|
const getFormRef = () => {
|
||||||
return {
|
return {
|
||||||
|
|||||||
@ -20,3 +20,10 @@ export function getTabbarList(params: Record<string, any>) {
|
|||||||
export function getShareInfo(params: Record<string, any>) {
|
export function getShareInfo(params: Record<string, any>) {
|
||||||
return request.get('diy/share', params)
|
return request.get('diy/share', params)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取个人资料表单
|
||||||
|
*/
|
||||||
|
export function getMemberFormRecord() {
|
||||||
|
return request.get('diy/form/member_record')
|
||||||
|
}
|
||||||
|
|||||||
@ -14,6 +14,13 @@ export function addFormRecord(params: Record<string, any>) {
|
|||||||
return request.post('diy/form/record', params)
|
return request.post('diy/form/record', params)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 提交表单数据 【编辑】
|
||||||
|
*/
|
||||||
|
export function editFormRecord(params: Record<string, any>) {
|
||||||
|
return request.put('diy/form/record', params)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取表单填写结果信息
|
* 获取表单填写结果信息
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -97,14 +97,14 @@ export function getCashoutAccountInfo(data: AnyObject) {
|
|||||||
/**
|
/**
|
||||||
* 获取首条提现账户信息
|
* 获取首条提现账户信息
|
||||||
*/
|
*/
|
||||||
export function getFirstCashoutAccountInfo(data: AnyObject) {
|
export function getFirstCashOutAccountInfo(data: AnyObject) {
|
||||||
return request.get('member/cashout_account/firstinfo', data)
|
return request.get('member/cashout_account/firstinfo', data)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取提现账户列表
|
* 获取提现账户列表
|
||||||
*/
|
*/
|
||||||
export function getCashoutAccountList(data: AnyObject) {
|
export function getCashOutAccountList(data: AnyObject) {
|
||||||
return request.get(`member/cashout_account`, data)
|
return request.get(`member/cashout_account`, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -251,7 +251,6 @@ const fixedStyle = computed(() => {
|
|||||||
// #endif
|
// #endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fixedStyleBg.value = false;
|
fixedStyleBg.value = false;
|
||||||
if (props.scrollBool == 1) {
|
if (props.scrollBool == 1) {
|
||||||
let str = diyComponent.value.fixedBgColor || "";
|
let str = diyComponent.value.fixedBgColor || "";
|
||||||
|
|||||||
@ -14,9 +14,12 @@
|
|||||||
<view class="detail-two-content">
|
<view class="detail-two-content">
|
||||||
<view class="detail-two-content-label">{{ diyComponent.field.name }}</view>
|
<view class="detail-two-content-label">{{ diyComponent.field.name }}</view>
|
||||||
<view class="detail-two-content-value flex w-[80%] justify-end">
|
<view class="detail-two-content-value flex w-[80%] justify-end">
|
||||||
<view v-for="(item,index) in diyComponent.field.value" :key="index">{{ item.text }}
|
<view v-for="(item,index) in diyComponent.field.value" :key="index">
|
||||||
|
<text>{{ item.text }}</text>
|
||||||
<text v-if="index !== diyComponent.field.value.length - 1">、</text>
|
<text v-if="index !== diyComponent.field.value.length - 1">、</text>
|
||||||
</view>
|
</view>
|
||||||
|
<text v-if="!diyComponent.field.value || !diyComponent.field.value.length">{{ t('notHave') }}</text>
|
||||||
|
<text v-if="diyComponent.isShowArrow" class="iconfont iconfanhui1 text-[#888] !text-[20rpx] ml-[10rpx]"></text>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
@ -17,6 +17,7 @@
|
|||||||
<text>{{ diyComponent.field.value.start.date }}</text>
|
<text>{{ diyComponent.field.value.start.date }}</text>
|
||||||
<text v-if="diyComponent.field.value.start.date && diyComponent.field.value.end.date">-</text>
|
<text v-if="diyComponent.field.value.start.date && diyComponent.field.value.end.date">-</text>
|
||||||
<text>{{ diyComponent.field.value.end.date }}</text>
|
<text>{{ diyComponent.field.value.end.date }}</text>
|
||||||
|
<text v-if="diyComponent.isShowArrow" class="iconfont iconfanhui1 text-[#888] !text-[20rpx] ml-[10rpx]"></text>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
@ -9,7 +9,10 @@
|
|||||||
<view class="base-layout-two" v-if="diyGlobal.completeLayout == 'style-2'">
|
<view class="base-layout-two" v-if="diyGlobal.completeLayout == 'style-2'">
|
||||||
<view class="detail-two-content">
|
<view class="detail-two-content">
|
||||||
<text class="detail-two-content-label">{{ diyComponent.field.name }}</text>
|
<text class="detail-two-content-label">{{ diyComponent.field.name }}</text>
|
||||||
<view class="detail-two-content-value w-[80%]">{{ diyComponent.field.value.date }}</view>
|
<view class="detail-two-content-value w-[80%]">
|
||||||
|
<text>{{ diyComponent.field.value.date || t('notHave') }}</text>
|
||||||
|
<text v-if="diyComponent.isShowArrow" class="iconfont iconfanhui1 text-[#888] !text-[20rpx] ml-[10rpx]"></text>
|
||||||
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
@ -9,7 +9,10 @@
|
|||||||
<view class="base-layout-two" v-if="diyGlobal.completeLayout == 'style-2'">
|
<view class="base-layout-two" v-if="diyGlobal.completeLayout == 'style-2'">
|
||||||
<view class="detail-two-content">
|
<view class="detail-two-content">
|
||||||
<view>{{ diyComponent.field.name }}</view>
|
<view>{{ diyComponent.field.name }}</view>
|
||||||
<view class="detail-two-content-value w-[80%]">{{ diyComponent.field.value }}</view>
|
<view class="detail-two-content-value w-[80%]">
|
||||||
|
<text>{{ diyComponent.field.value || t('notHave') }}</text>
|
||||||
|
<text v-if="diyComponent.isShowArrow" class="iconfont iconfanhui1 text-[#888] !text-[20rpx] ml-[10rpx]"></text>
|
||||||
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
@ -14,9 +14,10 @@
|
|||||||
<view class="base-layout-two" v-if="diyGlobal.completeLayout == 'style-2'">
|
<view class="base-layout-two" v-if="diyGlobal.completeLayout == 'style-2'">
|
||||||
<view class="detail-two-content">
|
<view class="detail-two-content">
|
||||||
<text class="detail-two-content-label">{{ diyComponent.field.name }}</text>
|
<text class="detail-two-content-label">{{ diyComponent.field.name }}</text>
|
||||||
<view class="detail-one-content-value">
|
<view class="detail-two-content-value">
|
||||||
<text>{{ formattedIdentity }}</text>
|
<text>{{ formattedIdentity || t('notHave') }}</text>
|
||||||
<text v-if="diyComponent.field.privacyProtection" class="ml-[20rpx] text-[var(--primary-color)]" @click="viewPrivacy">{{ t('diyForm.view') }}</text>
|
<text v-if="diyComponent.field.privacyProtection && formattedIdentity" class="ml-[20rpx] text-[var(--primary-color)]" @click="viewPrivacy">{{ t('diyForm.view') }}</text>
|
||||||
|
<text v-if="diyComponent.isShowArrow" class="iconfont iconfanhui1 text-[#888] !text-[20rpx] ml-[10rpx]"></text>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
@ -13,10 +13,13 @@
|
|||||||
<view class="base-layout-two" v-if="diyGlobal.completeLayout == 'style-2'">
|
<view class="base-layout-two" v-if="diyGlobal.completeLayout == 'style-2'">
|
||||||
<view class="detail-two-content">
|
<view class="detail-two-content">
|
||||||
<text class="detail-two-content-label">{{ diyComponent.field.name }}</text>
|
<text class="detail-two-content-label">{{ diyComponent.field.name }}</text>
|
||||||
<view class="flex flex-wrap w-[80%] justify-end">
|
<view class="flex items-center w-[80%] justify-end">
|
||||||
<view class="relative w-[180rpx] !h-[180rpx] mr-[16rpx] mb-[16rpx] " v-for="(item,index) in diyComponent.field.value" :key="index">
|
<div class="flex flex-wrap justify-end gap-[10rpx]">
|
||||||
<image class="w-[100%] h-[100%]" :src="img(item)" @click="handleImg(item,index)" mode="aspectFill"/>
|
<view class="relative image-item w-[180rpx] !h-[180rpx] gap-[16rpx]" v-for="(item,index) in diyComponent.field.value" :key="index">
|
||||||
</view>
|
<image class="w-[100%] h-[100%]" :src="img(item)" @click.stop="handleImg(item,index)" mode="aspectFill"/>
|
||||||
|
</view>
|
||||||
|
</div>
|
||||||
|
<text v-if="diyComponent.isShowArrow" class="iconfont iconfanhui1 text-[#888] !text-[20rpx] ml-[10rpx]"></text>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
@ -9,7 +9,8 @@
|
|||||||
<view class="base-layout-two" v-if="diyGlobal.completeLayout == 'style-2'">
|
<view class="base-layout-two" v-if="diyGlobal.completeLayout == 'style-2'">
|
||||||
<view class="detail-two-content">
|
<view class="detail-two-content">
|
||||||
<view>{{ diyComponent.field.name }}</view>
|
<view>{{ diyComponent.field.name }}</view>
|
||||||
<view class="detail-two-content-value w-[80%]">{{ diyComponent.field.value }}</view>
|
<view class="detail-two-content-value w-[80%]">{{ diyComponent.field.value || t('notHave') }}</view>
|
||||||
|
<text v-if="diyComponent.isShowArrow" class="iconfont iconfanhui1 text-[#888] !text-[20rpx] ml-[10rpx]"></text>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
@ -13,8 +13,9 @@
|
|||||||
<view class="detail-two-content">
|
<view class="detail-two-content">
|
||||||
<text class="detail-two-content-label">{{ diyComponent.field.name }}</text>
|
<text class="detail-two-content-label">{{ diyComponent.field.name }}</text>
|
||||||
<view class="detail-two-content-value">
|
<view class="detail-two-content-value">
|
||||||
<text>{{ formattedPhoneNumber }}</text>
|
<text>{{ formattedPhoneNumber || t('notHave') }}</text>
|
||||||
<text v-if="diyComponent.field.privacyProtection" class="ml-[20rpx] text-[var(--primary-color)]" @click="viewPrivacy">{{ t('diyForm.view') }}</text>
|
<text v-if="diyComponent.field.privacyProtection && formattedPhoneNumber" class="ml-[20rpx] text-[var(--primary-color)]" @click="viewPrivacy">{{ t('diyForm.view') }}</text>
|
||||||
|
<text v-if="diyComponent.isShowArrow" class="iconfont iconfanhui1 text-[#888] !text-[20rpx] ml-[10rpx]"></text>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
@ -9,7 +9,10 @@
|
|||||||
<view class="base-layout-two" v-if="diyGlobal.completeLayout == 'style-2'">
|
<view class="base-layout-two" v-if="diyGlobal.completeLayout == 'style-2'">
|
||||||
<view class="detail-two-content">
|
<view class="detail-two-content">
|
||||||
<text class="detail-two-content-label">{{ diyComponent.field.name }}</text>
|
<text class="detail-two-content-label">{{ diyComponent.field.name }}</text>
|
||||||
<view class="detail-two-content-value w-[80%]">{{ diyComponent.field.value }}</view>
|
<view class="detail-two-content-value w-[80%]">
|
||||||
|
<text>{{ diyComponent.field.value || t('notHave') }}</text>
|
||||||
|
<text v-if="diyComponent.isShowArrow" class="iconfont iconfanhui1 text-[#888] !text-[20rpx] ml-[10rpx]"></text>
|
||||||
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
@ -9,7 +9,11 @@
|
|||||||
<view class="base-layout-two" v-if="diyGlobal.completeLayout == 'style-2'">
|
<view class="base-layout-two" v-if="diyGlobal.completeLayout == 'style-2'">
|
||||||
<view class="detail-two-content">
|
<view class="detail-two-content">
|
||||||
<text class="detail-two-content-label">{{ diyComponent.field.name }}</text>
|
<text class="detail-two-content-label">{{ diyComponent.field.name }}</text>
|
||||||
<view class="detail-two-content-value w-[80%]" v-for="(item,index) in diyComponent.field.value" :key="index">{{ item.text }}</view>
|
<view class="flex items-center justify-end">
|
||||||
|
<view class="detail-two-content-value w-[80%]" v-for="(item,index) in diyComponent.field.value" :key="index">{{ item.text }}</view>
|
||||||
|
<text v-if="!diyComponent.field.value || !diyComponent.field.value.length">{{ t('notHave') }}</text>
|
||||||
|
<text v-if="diyComponent.isShowArrow" class="iconfont iconfanhui1 text-[#888] !text-[20rpx] ml-[10rpx]"></text>
|
||||||
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
@ -21,8 +21,9 @@
|
|||||||
// 表单提交组件
|
// 表单提交组件
|
||||||
import { ref, computed, watch, onMounted, nextTick, getCurrentInstance } from 'vue';
|
import { ref, computed, watch, onMounted, nextTick, getCurrentInstance } from 'vue';
|
||||||
import useDiyStore from '@/app/stores/diy';
|
import useDiyStore from '@/app/stores/diy';
|
||||||
import { img, redirect, getValidTime, deepClone } from '@/utils/common';
|
import { img, redirect, getValidTime, deepClone, getToken } from '@/utils/common';
|
||||||
import { addFormRecord } from '@/app/api/diy_form';
|
import { useLogin } from "@/hooks/useLogin";
|
||||||
|
import { addFormRecord, editFormRecord } from '@/app/api/diy_form';
|
||||||
|
|
||||||
const props = defineProps(['component', 'index', 'global']);
|
const props = defineProps(['component', 'index', 'global']);
|
||||||
const diyStore = useDiyStore();
|
const diyStore = useDiyStore();
|
||||||
@ -205,7 +206,7 @@ const getFormComponent = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const repeat = ref(false)
|
const repeat = ref(false)
|
||||||
|
let currPage: any = getCurrentPages()[getCurrentPages().length - 1];
|
||||||
const submit = () => {
|
const submit = () => {
|
||||||
if (diyStore.mode === 'decorate') return
|
if (diyStore.mode === 'decorate') return
|
||||||
|
|
||||||
@ -240,6 +241,17 @@ const submit = () => {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 填写万能表单需要检测登录
|
||||||
|
if (!getToken()) {
|
||||||
|
useLogin().setLoginBack({
|
||||||
|
url: '/app/pages/index/diy_form',
|
||||||
|
param: {
|
||||||
|
form_id: diyStore.id
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!allPass) return;
|
if (!allPass) return;
|
||||||
|
|
||||||
if (repeat.value) return
|
if (repeat.value) return
|
||||||
@ -259,14 +271,31 @@ const submit = () => {
|
|||||||
relate_id: '' // todo 关联业务id,需要考虑如何传入
|
relate_id: '' // todo 关联业务id,需要考虑如何传入
|
||||||
}
|
}
|
||||||
|
|
||||||
addFormRecord(data).then((res: any) => {
|
let api = addFormRecord;
|
||||||
|
if(uni.getStorageSync('personalFormRecordId')){
|
||||||
|
api = editFormRecord;
|
||||||
|
data.record_id = uni.getStorageSync('personalFormRecordId');
|
||||||
|
}else{
|
||||||
|
data.record_id = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
api(data).then((res: any) => {
|
||||||
uni.removeStorageSync('diyFormStorage_' + diyStore.id)
|
uni.removeStorageSync('diyFormStorage_' + diyStore.id)
|
||||||
// 跳转到 表单提交结果页面
|
uni.removeStorageSync('personalFormRecordId')
|
||||||
redirect({
|
if (currPage.route == 'app/pages/member/personal_form') {
|
||||||
url: '/app/pages/index/diy_form_result',
|
// 个人资料
|
||||||
param: { record_id: res.data, form_id: diyStore.id },
|
redirect({
|
||||||
mode: 'redirectTo'
|
url: '/app/pages/member/personal',
|
||||||
})
|
mode: 'redirectTo'
|
||||||
|
})
|
||||||
|
}else {
|
||||||
|
// 跳转到 表单提交结果页面
|
||||||
|
redirect({
|
||||||
|
url: '/app/pages/index/diy_form_result',
|
||||||
|
param: { record_id: res.data, form_id: diyStore.id },
|
||||||
|
mode: 'redirectTo'
|
||||||
|
})
|
||||||
|
}
|
||||||
repeat.value = false
|
repeat.value = false
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
repeat.value = false
|
repeat.value = false
|
||||||
@ -294,7 +323,6 @@ const getFormSComponentsData = (data: any) => {
|
|||||||
validTime: getValidTime(5), // 缓存数据有效期为5分钟
|
validTime: getValidTime(5), // 缓存数据有效期为5分钟
|
||||||
components: []
|
components: []
|
||||||
};
|
};
|
||||||
|
|
||||||
data.forEach((item: any) => {
|
data.forEach((item: any) => {
|
||||||
// 只存表单组件 -- 用于直接保存
|
// 只存表单组件 -- 用于直接保存
|
||||||
if (item.componentType == 'diy_form' && item.componentName != 'FormSubmit' && item.field.cache) {
|
if (item.componentType == 'diy_form' && item.componentName != 'FormSubmit' && item.field.cache) {
|
||||||
|
|||||||
@ -50,6 +50,7 @@
|
|||||||
import { ref, computed, watch, onMounted } from 'vue';
|
import { ref, computed, watch, onMounted } from 'vue';
|
||||||
import useDiyStore from '@/app/stores/diy';
|
import useDiyStore from '@/app/stores/diy';
|
||||||
import { img, timeStampTurnTime, timeTurnTimeStamp } from '@/utils/common';
|
import { img, timeStampTurnTime, timeTurnTimeStamp } from '@/utils/common';
|
||||||
|
|
||||||
const props = defineProps(['component', 'index', 'global']);
|
const props = defineProps(['component', 'index', 'global']);
|
||||||
const diyStore = useDiyStore();
|
const diyStore = useDiyStore();
|
||||||
const formData: any = ref({
|
const formData: any = ref({
|
||||||
|
|||||||
@ -9,7 +9,10 @@
|
|||||||
<view class="base-layout-two" v-if="diyGlobal.completeLayout == 'style-2'">
|
<view class="base-layout-two" v-if="diyGlobal.completeLayout == 'style-2'">
|
||||||
<view class="detail-two-content">
|
<view class="detail-two-content">
|
||||||
<view>{{ diyComponent.field.name }}</view>
|
<view>{{ diyComponent.field.name }}</view>
|
||||||
<view class="detail-two-content-value w-[80%]">{{ diyComponent.field.value }}</view>
|
<view class="detail-two-content-value w-[80%]">
|
||||||
|
<text>{{ diyComponent.field.value || t('notHave') }}</text>
|
||||||
|
<text v-if="diyComponent.isShowArrow" class="iconfont iconfanhui1 text-[#888] !text-[20rpx] ml-[10rpx]"></text>
|
||||||
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
@ -17,6 +17,7 @@
|
|||||||
<text>{{ diyComponent.field.value.start.date }}</text>
|
<text>{{ diyComponent.field.value.start.date }}</text>
|
||||||
<text v-if="diyComponent.field.value.start.date && diyComponent.field.value.end.date"> -</text>
|
<text v-if="diyComponent.field.value.start.date && diyComponent.field.value.end.date"> -</text>
|
||||||
<text>{{ diyComponent.field.value.end.date }}</text>
|
<text>{{ diyComponent.field.value.end.date }}</text>
|
||||||
|
<text v-if="diyComponent.isShowArrow" class="iconfont iconfanhui1 text-[#888] !text-[20rpx] ml-[10rpx]"></text>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
@ -9,7 +9,10 @@
|
|||||||
<view class="base-layout-two" v-if="diyGlobal.completeLayout == 'style-2'">
|
<view class="base-layout-two" v-if="diyGlobal.completeLayout == 'style-2'">
|
||||||
<view class="detail-two-content">
|
<view class="detail-two-content">
|
||||||
<text class="detail-two-content-label">{{ diyComponent.field.name }}</text>
|
<text class="detail-two-content-label">{{ diyComponent.field.name }}</text>
|
||||||
<view class="detail-two-content-value w-[80%]">{{ diyComponent.field.value }}</view>
|
<view class="detail-two-content-value w-[80%]">
|
||||||
|
<text>{{ diyComponent.field.value || t('notHave') }}</text>
|
||||||
|
<text v-if="diyComponent.isShowArrow" class="iconfont iconfanhui1 text-[#888] !text-[20rpx] ml-[10rpx]"></text>
|
||||||
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
@ -28,18 +28,26 @@
|
|||||||
<button class="bg-[#FFB4B1] !text-[#fff] h-[80rpx] leading-[80rpx] rounded-[100rpx] text-[26rpx] font-500" hover-class="none" v-else-if="friendsInfo.status == -1">{{ t('close') }}</button>
|
<button class="bg-[#FFB4B1] !text-[#fff] h-[80rpx] leading-[80rpx] rounded-[100rpx] text-[26rpx] font-500" hover-class="none" v-else-if="friendsInfo.status == -1">{{ t('close') }}</button>
|
||||||
<button class="botton-color !text-[#fff] h-[80rpx] leading-[80rpx] rounded-[100rpx] text-[26rpx] font-500" hover-class="none" v-else :loading="operateLoading" @click="save">{{ friendsInfo.config.pay_button_name ? friendsInfo.config.pay_button_name : t('payGenerously') }}</button>
|
<button class="botton-color !text-[#fff] h-[80rpx] leading-[80rpx] rounded-[100rpx] text-[26rpx] font-500" hover-class="none" v-else :loading="operateLoading" @click="save">{{ friendsInfo.config.pay_button_name ? friendsInfo.config.pay_button_name : t('payGenerously') }}</button>
|
||||||
</view>
|
</view>
|
||||||
<view class="mt-[20rpx] flex items-baseline justify-center text-[var(--text-color-light9)]" @click="redirect({url: '/app/pages/index/index'})">
|
<view class="px-[10px] flex justify-between items-center text-[var(--text-color-light9)] mt-[20rpx] ">
|
||||||
<text class="text-[24rpx] mr-[6rpx]">返回首页</text>
|
<view class="flex items-baseline justify-between text-[var(--text-color-light9)]" @click="redirect({url: '/app/pages/index/index'})">
|
||||||
</view>
|
<text class="text-[24rpx] mr-[6rpx]">返回首页</text>
|
||||||
|
</view>
|
||||||
|
<view class="flex-shrink-0" @click="handleMessage" v-if="friendsInfo.config.pay_explain_switch">
|
||||||
|
<text class="mr-[8rpx] text-[24rpx]">{{ friendsInfo.config.pay_explain_title }}</text>
|
||||||
|
<text class="nc-iconfont nc-icon-jichuxinxiV6xx text-[26rpx] "></text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
<view class="card-template sidebar-margin mb-[var(--top-m)]" v-if="friendsInfo.config.pay_info_switch">
|
<view class="card-template sidebar-margin mb-[var(--top-m)]" v-if="friendsInfo.config.pay_info_switch">
|
||||||
<template v-if="JSON.stringify(friendsInfo.trade_info) !== '[]' && friendsInfo.trade_info.item_list.length">
|
<template v-if="JSON.stringify(friendsInfo.trade_info) !== '[]' && friendsInfo.trade_info.item_list.length">
|
||||||
<view class="flex justify-between items-center mb-[30rpx]">
|
<view class="flex justify-between items-center mb-[30rpx]">
|
||||||
<view class="text-[30rpx] text-[#333] font-500">{{ t('helpPayInfo') }}</view>
|
<view class="text-[30rpx] text-[#333] font-500">{{ t('helpPayInfo') }}</view>
|
||||||
<view class="flex-shrink-0" @click="handleMessage" v-if="friendsInfo.config.pay_explain_switch">
|
<!-- <view class="flex-shrink-0" @click="handleMessage" v-if="friendsInfo.config.pay_explain_switch">
|
||||||
<text class="mr-[8rpx] text-[24rpx]">{{ friendsInfo.config.pay_explain_title }}</text>
|
<text class="mr-[8rpx] text-[24rpx]">{{ friendsInfo.config.pay_explain_title }}</text>
|
||||||
<text class="nc-iconfont nc-icon-jichuxinxiV6xx text-[26rpx]"></text>
|
<text class="nc-iconfont nc-icon-jichuxinxiV6xx text-[26rpx]"></text>
|
||||||
</view>
|
</view> -->
|
||||||
</view>
|
</view>
|
||||||
<view class="border-0 border-solid border-b-[1rpx] border-[#f6f6f6] mb-[20rpx]">
|
<view class="border-0 border-solid border-b-[1rpx] border-[#f6f6f6] mb-[20rpx]">
|
||||||
<view v-for="(item, index) in friendsInfo.trade_info.item_list" class="flex justify-between" :class="{' mb-[34rpx]': (index + 1) != friendsInfo.trade_info.length }">
|
<view v-for="(item, index) in friendsInfo.trade_info.item_list" class="flex justify-between" :class="{' mb-[34rpx]': (index + 1) != friendsInfo.trade_info.length }">
|
||||||
@ -90,7 +98,6 @@ import { topTabar } from '@/utils/topTabbar';
|
|||||||
import { getFriendspayInfo } from '@/app/api/friendspay'
|
import { getFriendspayInfo } from '@/app/api/friendspay'
|
||||||
import Message from '@/app/pages/friendspay/components/message.vue'
|
import Message from '@/app/pages/friendspay/components/message.vue'
|
||||||
import { useLogin } from '@/hooks/useLogin'
|
import { useLogin } from '@/hooks/useLogin'
|
||||||
import { onPageScroll } from '@dcloudio/uni-app';
|
|
||||||
|
|
||||||
/********* 自定义头部 - start ***********/
|
/********* 自定义头部 - start ***********/
|
||||||
const topTabarObj = topTabar()
|
const topTabarObj = topTabar()
|
||||||
|
|||||||
@ -25,7 +25,7 @@
|
|||||||
<view class="px-[20rpx] box-border">
|
<view class="px-[20rpx] box-border">
|
||||||
<button class="bg-[#FFB4B1] !text-[#fff] h-[80rpx] leading-[80rpx] rounded-[100rpx] text-[26rpx] font-500" hover-class="none" v-if="friendsInfo.status == 2">{{ t('finish') }}</button>
|
<button class="bg-[#FFB4B1] !text-[#fff] h-[80rpx] leading-[80rpx] rounded-[100rpx] text-[26rpx] font-500" hover-class="none" v-if="friendsInfo.status == 2">{{ t('finish') }}</button>
|
||||||
<button class="bg-[#FFB4B1] !text-[#fff] h-[80rpx] leading-[80rpx] rounded-[100rpx] text-[26rpx] font-500" hover-class="none" v-else-if="friendsInfo.status == -1">{{ t('close') }}</button>
|
<button class="bg-[#FFB4B1] !text-[#fff] h-[80rpx] leading-[80rpx] rounded-[100rpx] text-[26rpx] font-500" hover-class="none" v-else-if="friendsInfo.status == -1">{{ t('close') }}</button>
|
||||||
<button class="botton-color !text-[#fff] h-[80rpx] leading-[80rpx] rounded-[100rpx] text-[26rpx] font-500" hover-class="none" v-else :loading="operateLoading" @click="openShareFn">{{ friendsInfo.config.pay_type_name ? friendsInfo.config.pay_type_name : t('friendPay') }}</button>
|
<button class="button-color !text-[#fff] h-[80rpx] leading-[80rpx] rounded-[100rpx] text-[26rpx] font-500" hover-class="none" v-else :loading="operateLoading" @click="openShareFn">{{ friendsInfo.config.pay_type_name ? friendsInfo.config.pay_type_name : t('friendPay') }}</button>
|
||||||
</view>
|
</view>
|
||||||
<view class="mt-[20rpx] flex items-baseline justify-center text-[var(--text-color-light9)]" v-if="friendsInfo.status == 2 && JSON.stringify(friendsInfo.trade_info) !== '[]' && friendsInfo.trade_info.detail_url" @click="redirect({url: friendsInfo.trade_info.detail_url })">
|
<view class="mt-[20rpx] flex items-baseline justify-center text-[var(--text-color-light9)]" v-if="friendsInfo.status == 2 && JSON.stringify(friendsInfo.trade_info) !== '[]' && friendsInfo.trade_info.detail_url" @click="redirect({url: friendsInfo.trade_info.detail_url })">
|
||||||
<text class="text-[24rpx] mr-[6rpx]">查看订单</text>
|
<text class="text-[24rpx] mr-[6rpx]">查看订单</text>
|
||||||
@ -95,7 +95,6 @@ import useMemberStore from '@/stores/member'
|
|||||||
import { topTabar } from '@/utils/topTabbar';
|
import { topTabar } from '@/utils/topTabbar';
|
||||||
import sharePoster from '@/components/share-poster/share-poster.vue'
|
import sharePoster from '@/components/share-poster/share-poster.vue'
|
||||||
import Message from '@/app/pages/friendspay/components/message.vue'
|
import Message from '@/app/pages/friendspay/components/message.vue'
|
||||||
import { onPageScroll } from '@dcloudio/uni-app';
|
|
||||||
|
|
||||||
/********* 自定义头部 - start ***********/
|
/********* 自定义头部 - start ***********/
|
||||||
const topTabarObj = topTabar()
|
const topTabarObj = topTabar()
|
||||||
@ -270,7 +269,7 @@ const openShareFn = ()=>{
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.botton-color{
|
.button-color{
|
||||||
background: linear-gradient( 94deg, #FB7939 0%, #FE120E 99%), #EF000C;
|
background: linear-gradient( 94deg, #FB7939 0%, #FE120E 99%), #EF000C;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@ -48,7 +48,7 @@ import diyGroup from '@/addon/components/diy/group/index.vue'
|
|||||||
const { setShare } = useShare()
|
const { setShare } = useShare()
|
||||||
|
|
||||||
const diy = useDiyForm({
|
const diy = useDiyForm({
|
||||||
needLogin: true // 检测登录
|
needLogin: false // 检测登录
|
||||||
})
|
})
|
||||||
|
|
||||||
const diyGroupRef = ref(null)
|
const diyGroupRef = ref(null)
|
||||||
|
|||||||
@ -27,8 +27,8 @@ import { ref, nextTick } from 'vue';
|
|||||||
import { useDiy } from '@/hooks/useDiy'
|
import { useDiy } from '@/hooks/useDiy'
|
||||||
import { redirect } from '@/utils/common';
|
import { redirect } from '@/utils/common';
|
||||||
import { useShare } from '@/hooks/useShare'
|
import { useShare } from '@/hooks/useShare'
|
||||||
|
|
||||||
import diyGroup from '@/addon/components/diy/group/index.vue'
|
import diyGroup from '@/addon/components/diy/group/index.vue'
|
||||||
|
|
||||||
const { setShare } = useShare()
|
const { setShare } = useShare()
|
||||||
|
|
||||||
uni.hideTabBar() // 隐藏tabbar
|
uni.hideTabBar() // 隐藏tabbar
|
||||||
|
|||||||
@ -33,8 +33,8 @@
|
|||||||
import tabbarJson from '@/tabbar.json'
|
import tabbarJson from '@/tabbar.json'
|
||||||
import zh from '@/locale/zh-Hans.json'
|
import zh from '@/locale/zh-Hans.json'
|
||||||
import en from '@/locale/en.json'
|
import en from '@/locale/en.json'
|
||||||
import {onPageScroll} from "@dcloudio/uni-app";
|
|
||||||
import TopTabbar from "@/components/top-tabbar/top-tabbar.vue";
|
import TopTabbar from "@/components/top-tabbar/top-tabbar.vue";
|
||||||
|
|
||||||
import { language } from '@/locale'
|
import { language } from '@/locale'
|
||||||
|
|
||||||
uni.hideTabBar()
|
uni.hideTabBar()
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="w-screen h-screen bg-[var(--page-bg-color)]" :style="themeColor()">
|
<view class="w-screen h-screen bg-[var(--page-bg-color)]" :style="themeColor()">
|
||||||
<mescroll-body ref="mescrollRef" @init="mescrollInit" :down="{ use: false }" @up="getCashoutAccountListFn">
|
<mescroll-body ref="mescrollRef" @init="mescrollInit" :down="{ use: false }" @up="getCashOutAccountListFn">
|
||||||
<!-- 多嵌套一层是为了微信小程序兼容 -->
|
<!-- 多嵌套一层是为了微信小程序兼容 -->
|
||||||
<view class="sidebar-margin my-[var(--top-m)] rounded-[var(--rounded-big)] overflow-hidden"
|
<view class="sidebar-margin my-[var(--top-m)] rounded-[var(--rounded-big)] overflow-hidden"
|
||||||
v-for="(item, index) in accountList" :key="index">
|
v-for="(item, index) in accountList" :key="index">
|
||||||
@ -35,7 +35,7 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref } from 'vue'
|
import { ref } from 'vue'
|
||||||
import { redirect, img } from '@/utils/common'
|
import { redirect, img } from '@/utils/common'
|
||||||
import { getCashoutAccountList, deleteCashoutAccount } from '@/app/api/member'
|
import { getCashOutAccountList, deleteCashoutAccount } from '@/app/api/member'
|
||||||
import MescrollBody from '@/components/mescroll/mescroll-body/mescroll-body.vue'
|
import MescrollBody from '@/components/mescroll/mescroll-body/mescroll-body.vue'
|
||||||
import useMescroll from '@/components/mescroll/hooks/useMescroll.js'
|
import useMescroll from '@/components/mescroll/hooks/useMescroll.js'
|
||||||
import { onPageScroll, onReachBottom, onLoad } from '@dcloudio/uni-app'
|
import { onPageScroll, onReachBottom, onLoad } from '@dcloudio/uni-app'
|
||||||
@ -53,7 +53,7 @@ onLoad((data: any) => {
|
|||||||
data.mode && (mode.value = data.mode)
|
data.mode && (mode.value = data.mode)
|
||||||
})
|
})
|
||||||
|
|
||||||
const getCashoutAccountListFn = (mescroll: any) => {
|
const getCashOutAccountListFn = (mescroll: any) => {
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
let data: object = {
|
let data: object = {
|
||||||
page: mescroll.num,
|
page: mescroll.num,
|
||||||
@ -61,7 +61,7 @@ const getCashoutAccountListFn = (mescroll: any) => {
|
|||||||
account_type: accountType.value
|
account_type: accountType.value
|
||||||
};
|
};
|
||||||
|
|
||||||
getCashoutAccountList(data).then((res: any) => {
|
getCashOutAccountList(data).then((res: any) => {
|
||||||
const newArr = (res.data.data as Array<Object>);
|
const newArr = (res.data.data as Array<Object>);
|
||||||
//设置列表数据
|
//设置列表数据
|
||||||
if (mescroll.num == 1) {
|
if (mescroll.num == 1) {
|
||||||
|
|||||||
@ -40,6 +40,15 @@
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</scroll-view>
|
</scroll-view>
|
||||||
|
<u-popup ref="popupRef" :show="show" mode="center" @close="show = false" :round="30" zIndex="99999" :safeAreaInsetBottom="false">
|
||||||
|
<view class="bg-[#fff] flex flex-col justify-between w-[610rpx] h-[306rpx] rounded-[30rpx] box-border px-[40rpx] pt-[70rpx] pb-[40rpx] relative overflow-hidden">
|
||||||
|
<view class="flex-center mb-[80rpx] text-[#333]">确定要删除该地址吗?</view>
|
||||||
|
<view class="flex-between-center">
|
||||||
|
<view class="w-[250rpx] h-[66rpx] rounded-full bg-[#eee] flex-center text-[26rpx] font-500 text-[#333]" @click="show = false">取消</view>
|
||||||
|
<view class="w-[250rpx] h-[66rpx] rounded-full primary-btn-bg flex-center text-[26rpx] font-500 text-[#fff]" @click="saveDelete">确定</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</u-popup>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -112,14 +121,23 @@ const selectAddress = (data: any) => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
const show = ref(false)
|
||||||
|
const deleteIndex = ref(0)
|
||||||
|
|
||||||
const deleteAddressFn = (index: any) => {
|
const deleteAddressFn = (index: any) => {
|
||||||
const data: any = addressList.value[index]
|
deleteIndex.value = index
|
||||||
deleteAddress(data.id).then(() => {
|
show.value = true
|
||||||
addressList.value.splice(index, 1)
|
// deleteAddress(data.id).then(() => {
|
||||||
}).catch()
|
// addressList.value.splice(index, 1)
|
||||||
|
// }).catch()
|
||||||
|
}
|
||||||
|
const saveDelete = ()=>{
|
||||||
|
const data: any = addressList.value[deleteIndex.value ]
|
||||||
|
deleteAddress(data.id).then(() => {
|
||||||
|
addressList.value.splice(deleteIndex.value, 1)
|
||||||
|
show.value = false
|
||||||
|
}).catch()
|
||||||
}
|
}
|
||||||
|
|
||||||
const setDefault = (index: any) => {
|
const setDefault = (index: any) => {
|
||||||
const data: any = addressList.value[index]
|
const data: any = addressList.value[index]
|
||||||
if (data.is_default) return
|
if (data.is_default) return
|
||||||
|
|||||||
@ -142,7 +142,7 @@ import { ref, reactive, watch, computed } from 'vue'
|
|||||||
import { t } from '@/locale'
|
import { t } from '@/locale'
|
||||||
import { moneyFormat, redirect, getToken, img, deepClone, getWinxinOpenId } from '@/utils/common'
|
import { moneyFormat, redirect, getToken, img, deepClone, getWinxinOpenId } from '@/utils/common'
|
||||||
import useMemberStore from '@/stores/member'
|
import useMemberStore from '@/stores/member'
|
||||||
import { cashOutConfig, cashOutApply, getFirstCashoutAccountInfo, getCashoutAccountInfo } from '@/app/api/member'
|
import { cashOutConfig, cashOutApply, getFirstCashOutAccountInfo, getCashoutAccountInfo } from '@/app/api/member'
|
||||||
import { onLoad, onShow } from '@dcloudio/uni-app'
|
import { onLoad, onShow } from '@dcloudio/uni-app'
|
||||||
|
|
||||||
const pageLoading = ref(true)
|
const pageLoading = ref(true)
|
||||||
@ -296,7 +296,7 @@ const alipayLoading = ref(false)
|
|||||||
const alipayAccountInfo: any = ref(null)
|
const alipayAccountInfo: any = ref(null)
|
||||||
const getAlipayAccountInfo = () => {
|
const getAlipayAccountInfo = () => {
|
||||||
const data = { account_type: 'alipay', account_id: 0 }
|
const data = { account_type: 'alipay', account_id: 0 }
|
||||||
let request = getFirstCashoutAccountInfo
|
let request = getFirstCashOutAccountInfo
|
||||||
|
|
||||||
if (query.type && query.type == 'alipay' && query.account_id) {
|
if (query.type && query.type == 'alipay' && query.account_id) {
|
||||||
request = getCashoutAccountInfo
|
request = getCashoutAccountInfo
|
||||||
@ -322,7 +322,7 @@ const bankLoading = ref(false)
|
|||||||
const bankAccountInfo: any = ref(null)
|
const bankAccountInfo: any = ref(null)
|
||||||
const getBankAccountInfo = () => {
|
const getBankAccountInfo = () => {
|
||||||
const data = { account_type: 'bank', account_id: 0 }
|
const data = { account_type: 'bank', account_id: 0 }
|
||||||
let request = getFirstCashoutAccountInfo
|
let request = getFirstCashOutAccountInfo
|
||||||
|
|
||||||
if (query.type && query.type == 'bank' && query.account_id) {
|
if (query.type && query.type == 'bank' && query.account_id) {
|
||||||
request = getCashoutAccountInfo
|
request = getCashoutAccountInfo
|
||||||
@ -349,7 +349,7 @@ const wechatCodeLoading = ref(false)
|
|||||||
const wechatCodeInfo: any = ref(null)
|
const wechatCodeInfo: any = ref(null)
|
||||||
const getWechatCodeInfo = () => {
|
const getWechatCodeInfo = () => {
|
||||||
const data = { account_type: 'wechat_code', account_id: 0 }
|
const data = { account_type: 'wechat_code', account_id: 0 }
|
||||||
let request = getFirstCashoutAccountInfo
|
let request = getFirstCashOutAccountInfo
|
||||||
|
|
||||||
if (query.type && query.type == 'wechat_code' && query.account_id) {
|
if (query.type && query.type == 'wechat_code' && query.account_id) {
|
||||||
request = getCashoutAccountInfo
|
request = getCashoutAccountInfo
|
||||||
|
|||||||
@ -16,8 +16,7 @@
|
|||||||
<text class="text-[#333] w-[200rpx]">{{ t('cashOutNo') }}</text>
|
<text class="text-[#333] w-[200rpx]">{{ t('cashOutNo') }}</text>
|
||||||
<text class="text-[#333]">{{ cashOutInfo.cash_out_no }}</text>
|
<text class="text-[#333]">{{ cashOutInfo.cash_out_no }}</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="flex justify-between text-[28rpx] mt-[34rpx] leading-[32rpx]"
|
<view class="flex justify-between text-[28rpx] mt-[34rpx] leading-[32rpx]" v-if="Number(cashOutInfo.service_money)">
|
||||||
v-if="Number(cashOutInfo.service_money)">
|
|
||||||
<text class="text-[#333] w-[200rpx]">{{ t('serviceMoney') }}</text>
|
<text class="text-[#333] w-[200rpx]">{{ t('serviceMoney') }}</text>
|
||||||
<text class="text-[#333]">¥{{ cashOutInfo.service_money }}</text>
|
<text class="text-[#333]">¥{{ cashOutInfo.service_money }}</text>
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
@ -0,0 +1,55 @@
|
|||||||
|
<template>
|
||||||
|
<view :style="themeColor()" class="my-[var(--top-m)] sidebar-margin overflow-hidden card-template py-[12rpx] px-[26rpx]" >
|
||||||
|
<view v-show="!loading" class="diy-template-wrap">
|
||||||
|
<diy-group ref="diyGroupRef" :data="diyFormData" />
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { ref, reactive, onMounted } from 'vue';
|
||||||
|
import diyGroup from '@/addon/components/diy/group/index.vue'
|
||||||
|
|
||||||
|
const props = defineProps(['data', 'completeLayout']);
|
||||||
|
const loading = ref(true);
|
||||||
|
const diyFormData: any = reactive({
|
||||||
|
global: {},
|
||||||
|
value: []
|
||||||
|
})
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
diyFormData.global.completeLayout = props.completeLayout || 'style-1';
|
||||||
|
if (props.data.formField) {
|
||||||
|
|
||||||
|
props.data.formField.forEach((item: any) => {
|
||||||
|
let comp = {
|
||||||
|
id: item.field_key,
|
||||||
|
componentName: item.field_type,
|
||||||
|
pageStyle: '',
|
||||||
|
viewFormDetail: true, // 查看表单详情标识
|
||||||
|
isShowArrow: true, // 是否显示箭头
|
||||||
|
field: {
|
||||||
|
name: item.field_name,
|
||||||
|
value: item.field_value,
|
||||||
|
required: item.field_required,
|
||||||
|
unique: item.field_unique,
|
||||||
|
privacyProtection: item.privacy_protection,
|
||||||
|
},
|
||||||
|
margin: {
|
||||||
|
top: 0,
|
||||||
|
bottom: 0,
|
||||||
|
both: 0
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
try {
|
||||||
|
comp.field.value = JSON.parse(item.field_value)
|
||||||
|
} catch (error) {
|
||||||
|
comp.field.value = item.field_value
|
||||||
|
}
|
||||||
|
|
||||||
|
diyFormData.value.push(comp);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
loading.value = false;
|
||||||
|
})
|
||||||
|
</script>
|
||||||
@ -25,7 +25,6 @@
|
|||||||
import { ref, computed, nextTick } from 'vue';
|
import { ref, computed, nextTick } from 'vue';
|
||||||
import { useDiy } from '@/hooks/useDiy'
|
import { useDiy } from '@/hooks/useDiy'
|
||||||
import { useShare } from '@/hooks/useShare'
|
import { useShare } from '@/hooks/useShare'
|
||||||
|
|
||||||
import { redirect } from '@/utils/common';
|
import { redirect } from '@/utils/common';
|
||||||
import diyGroup from '@/addon/components/diy/group/index.vue'
|
import diyGroup from '@/addon/components/diy/group/index.vue'
|
||||||
import useMemberStore from '@/stores/member'
|
import useMemberStore from '@/stores/member'
|
||||||
|
|||||||
@ -110,10 +110,16 @@
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="empty-page" v-if="!loading && (!list || !list.length)">
|
<view class="" v-if="!loading && (!list || !list.length)">
|
||||||
<image class="img" :src="img('static/resource/images/empty.png')" mode="aspectFill" />
|
<!-- #ifdef MP -->
|
||||||
<text class="desc">暂无会员等级</text>
|
<top-tabbar :data="topTabbarDataEmpty" />
|
||||||
</view>
|
<!-- #endif -->
|
||||||
|
<view class="empty-page" >
|
||||||
|
<image class="img" :src="img('static/resource/images/empty.png')" mode="aspectFill" />
|
||||||
|
<text class="desc">暂无会员等级</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -136,6 +142,16 @@ const levelIndex = ref(0); //当前等级的索引
|
|||||||
/********* 自定义头部 - start ***********/
|
/********* 自定义头部 - start ***********/
|
||||||
const topTabarObj = topTabar()
|
const topTabarObj = topTabar()
|
||||||
let topTabbarData = topTabarObj.setTopTabbarParam({ title: '会员等级' })
|
let topTabbarData = topTabarObj.setTopTabbarParam({ title: '会员等级' })
|
||||||
|
let topTabbarDataEmpty =ref({
|
||||||
|
title: '会员等级',
|
||||||
|
topStatusBar: {
|
||||||
|
style: 'style-1',
|
||||||
|
bgColor: '#fff',
|
||||||
|
rollBgColor: '#333',
|
||||||
|
textColor: '#333',
|
||||||
|
rollTextColor: '#333'
|
||||||
|
}
|
||||||
|
})
|
||||||
/********* 自定义头部 - end ***********/
|
/********* 自定义头部 - end ***********/
|
||||||
|
|
||||||
onShow(() => {
|
onShow(() => {
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="w-full h-screen bg-page personal-wrap overflow-hidden" v-if="info" :style="themeColor()">
|
<view class="w-full min-h-screen bg-page personal-wrap !pb-[20rpx]" v-if="info" :style="themeColor()">
|
||||||
|
|
||||||
<view class="my-[var(--top-m)] sidebar-margin overflow-hidden card-template py-[20rpx]">
|
<view class="my-[var(--top-m)] sidebar-margin overflow-hidden card-template py-[20rpx]">
|
||||||
<u-cell-group :border="false" class="cell-group">
|
<u-cell-group :border="false" class="cell-group">
|
||||||
<u-cell :title="t('headimg')" :titleStyle="{'font-size': '28rpx'}" :is-link="true">
|
<u-cell :title="t('headimg')" :titleStyle="{'font-size': '28rpx'}" :is-link="true">
|
||||||
@ -40,6 +39,11 @@
|
|||||||
</u-cell-group>
|
</u-cell-group>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
|
<!-- 商品的万能表单信息 -->
|
||||||
|
<view @click="redirect({ url: '/app/pages/member/personal_form', param: { form_id: info.form_id, form_record_id: info.form_record_id} })" >
|
||||||
|
<personal-form-detail class="personal-form" :data="personalFormData" completeLayout="style-2" v-if="personalFormData && Object.keys(personalFormData).length"/>
|
||||||
|
</view>
|
||||||
|
|
||||||
<!-- 修改昵称 -->
|
<!-- 修改昵称 -->
|
||||||
<u-popup class="popup-type" :safeAreaInsetBottom="false" round="var(--rounded-big)" :show="updateNickname.modal" mode="center" @close="updateNickname.modal = false">
|
<u-popup class="popup-type" :safeAreaInsetBottom="false" round="var(--rounded-big)" :show="updateNickname.modal" mode="center" @close="updateNickname.modal = false">
|
||||||
<view class="w-[620rpx] popup-common pb-[40rpx]" @touchmove.prevent.stop>
|
<view class="w-[620rpx] popup-common pb-[40rpx]" @touchmove.prevent.stop>
|
||||||
@ -77,6 +81,8 @@ import { img, redirect, mobileConceal } from '@/utils/common'
|
|||||||
import { modifyMember } from '@/app/api/member'
|
import { modifyMember } from '@/app/api/member'
|
||||||
import { fetchBase64Image, uploadImage } from '@/app/api/system'
|
import { fetchBase64Image, uploadImage } from '@/app/api/system'
|
||||||
import { onLoad } from '@dcloudio/uni-app'
|
import { onLoad } from '@dcloudio/uni-app'
|
||||||
|
import { getMemberFormRecord } from '@/app/api/diy'
|
||||||
|
import personalFormDetail from '@/app/pages/member/components/personal_form_detail.vue'
|
||||||
|
|
||||||
const memberStore = useMemberStore()
|
const memberStore = useMemberStore()
|
||||||
const info = computed(() => memberStore.info)
|
const info = computed(() => memberStore.info)
|
||||||
@ -103,6 +109,14 @@ const bindNickname = (e: any) => {
|
|||||||
updateNickname.value = e.detail.value
|
updateNickname.value = e.detail.value
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let personalFormData = ref(null)
|
||||||
|
const getMemberFormRecordFn = () => {
|
||||||
|
getMemberFormRecord().then((res: any) => {
|
||||||
|
personalFormData.value = res.data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
getMemberFormRecordFn()
|
||||||
|
|
||||||
const updateNicknameConfirm = () => {
|
const updateNicknameConfirm = () => {
|
||||||
if (uni.$u.test.isEmpty(updateNickname.value)) {
|
if (uni.$u.test.isEmpty(updateNickname.value)) {
|
||||||
uni.showToast({ title: t('nicknamePlaceholder'), icon: 'none' });
|
uni.showToast({ title: t('nicknamePlaceholder'), icon: 'none' });
|
||||||
@ -265,4 +279,25 @@ page {
|
|||||||
.personal-wrap .u-cell--clickable {
|
.personal-wrap .u-cell--clickable {
|
||||||
background-color: transparent !important;
|
background-color: transparent !important;
|
||||||
}
|
}
|
||||||
|
.personal-form{
|
||||||
|
::v-deep .draggable-element {
|
||||||
|
&:last-of-type{
|
||||||
|
.detail-two-content{
|
||||||
|
margin-bottom: 0 !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.detail-two-content{
|
||||||
|
padding-top: 32rpx !important;
|
||||||
|
padding-bottom: 32rpx !important;
|
||||||
|
margin-bottom: 0 !important;
|
||||||
|
& > view{
|
||||||
|
width: 72% !important;
|
||||||
|
.image-item{
|
||||||
|
width: 136rpx !important;
|
||||||
|
height: 136rpx !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
151
uni-app/src/app/pages/member/personal_form.vue
Normal file
151
uni-app/src/app/pages/member/personal_form.vue
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
<template>
|
||||||
|
<view :style="themeColor()">
|
||||||
|
|
||||||
|
<loading-page :loading="diy.getLoading()"></loading-page>
|
||||||
|
|
||||||
|
<view v-show="requestData.status == 1 && requestData.error && requestData.error.length === 0 && !diy.getLoading()">
|
||||||
|
|
||||||
|
<!-- 自定义模板渲染 -->
|
||||||
|
<view class="diy-template-wrap bg-index" :style="diy.pageStyle()">
|
||||||
|
|
||||||
|
<diy-group ref="diyGroupRef" :data="diy.data" />
|
||||||
|
|
||||||
|
</view>
|
||||||
|
|
||||||
|
</view>
|
||||||
|
<view class="w-screen h-screen flex flex-col " v-if="requestData.error && requestData.error.length > 0">
|
||||||
|
<view class="flex-1 flex flex-col items-center pt-[180rpx] px-[60rpx]" v-for="(item, index) in requestData.error.slice(0, 1)" :key="index">
|
||||||
|
<text class="nc-iconfont nc-icon-tanhaoV6mm text-[#ccc] mb-[30rpx] !text-[100rpx]"></text>
|
||||||
|
<view class="text-[38rpx] font-bold mt-3">{{ item.title }}</view>
|
||||||
|
<view class="p-[30rpx] mt-10 w-full ">
|
||||||
|
<view class="flex w-full">
|
||||||
|
<view class="w-[30%] text-[#999] text-left">{{ item.type }}</view>
|
||||||
|
<view class="w-[70%] text-left">{{ item.desc }}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="pb-[260rpx]">
|
||||||
|
<button class="w-[380rpx] !border-0 h-[80rpx] text-[28rpx] text-[#333] !bg-[#f2f2f2] flex-center font-500 rounded-[20rpx]" :plain="true" @click="finishFn">{{ t('close') }}</button>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- #ifdef MP-WEIXIN -->
|
||||||
|
<!-- 小程序隐私协议 -->
|
||||||
|
<wx-privacy-popup ref="wxPrivacyPopupRef"></wx-privacy-popup>
|
||||||
|
<!-- #endif -->
|
||||||
|
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { ref, nextTick, computed } from 'vue';
|
||||||
|
import { useDiyForm } from '@/hooks/useDiyForm'
|
||||||
|
import { useShare } from '@/hooks/useShare'
|
||||||
|
import { onLoad, onUnload } from '@dcloudio/uni-app'
|
||||||
|
import { img, redirect } from '@/utils/common';
|
||||||
|
import { t } from '@/locale'
|
||||||
|
import diyGroup from '@/addon/components/diy/group/index.vue'
|
||||||
|
import { getFormRecord } from '@/app/api/diy_form'
|
||||||
|
|
||||||
|
const { setShare } = useShare()
|
||||||
|
|
||||||
|
const diy = useDiyForm({
|
||||||
|
needLogin: true // 检测登录
|
||||||
|
})
|
||||||
|
|
||||||
|
onLoad((data: any) => {
|
||||||
|
if(data.form_record_id) {
|
||||||
|
uni.setStorageSync('personalFormRecordId', data.form_record_id)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
onUnload(()=>{
|
||||||
|
uni.removeStorageSync('personalFormRecordId')
|
||||||
|
})
|
||||||
|
|
||||||
|
const diyGroupRef = ref(null)
|
||||||
|
|
||||||
|
const wxPrivacyPopupRef: any = ref(null)
|
||||||
|
|
||||||
|
const requestData = computed(() => {
|
||||||
|
return diy.requestData;
|
||||||
|
})
|
||||||
|
|
||||||
|
const finishFn = () => {
|
||||||
|
redirect({
|
||||||
|
url: '/app/pages/index/index',
|
||||||
|
mode: 'reLaunch'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
diy.onLoad((data: any) => {
|
||||||
|
let share = data.share ? data.share : null;
|
||||||
|
setShare(share);
|
||||||
|
diyGroupRef.value?.refresh();
|
||||||
|
|
||||||
|
getFormRecord({
|
||||||
|
record_id: data.form_record_id
|
||||||
|
}).then((res: any) => {
|
||||||
|
let formDetailData = {}
|
||||||
|
if(res.data && res.data.recordsFieldList){
|
||||||
|
res.data.recordsFieldList.forEach((item: any) => {
|
||||||
|
formDetailData[item.field_key] = item.field_value;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
diy.data.value.forEach((item: any) => {
|
||||||
|
if(formDetailData[item.id]){
|
||||||
|
try {
|
||||||
|
item.field.value = JSON.parse(formDetailData[item.id])
|
||||||
|
} catch (e) {
|
||||||
|
item.field.value = formDetailData[item.id]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}).catch(() => {
|
||||||
|
})
|
||||||
|
// #ifdef MP
|
||||||
|
nextTick(() => {
|
||||||
|
if (wxPrivacyPopupRef.value) wxPrivacyPopupRef.value.proactive();
|
||||||
|
})
|
||||||
|
// #endif
|
||||||
|
});
|
||||||
|
|
||||||
|
// 监听页面显示
|
||||||
|
diy.onShow((data: any) => {
|
||||||
|
let share = data.share ? data.share : null;
|
||||||
|
if (share) {
|
||||||
|
setShare(share);
|
||||||
|
}
|
||||||
|
diyGroupRef.value?.refresh();
|
||||||
|
// #ifdef MP
|
||||||
|
nextTick(() => {
|
||||||
|
if (wxPrivacyPopupRef.value) wxPrivacyPopupRef.value.proactive();
|
||||||
|
})
|
||||||
|
// #endif
|
||||||
|
});
|
||||||
|
|
||||||
|
// 监听页面隐藏
|
||||||
|
diy.onHide();
|
||||||
|
|
||||||
|
// 监听页面卸载
|
||||||
|
diy.onUnload();
|
||||||
|
|
||||||
|
// 监听滚动事件
|
||||||
|
diy.onPageScroll()
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
@import '@/styles/diy.scss';
|
||||||
|
</style>
|
||||||
|
<style lang="scss">
|
||||||
|
.diy-template-wrap {
|
||||||
|
/* #ifdef MP */
|
||||||
|
.child-diy-template-wrap {
|
||||||
|
::v-deep .diy-group {
|
||||||
|
> .draggable-element.top-fixed-diy {
|
||||||
|
display: block !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* #endif */
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@ -53,7 +53,7 @@
|
|||||||
<view class="w-[14.28%] flex flex-col justify-center items-center">
|
<view class="w-[14.28%] flex flex-col justify-center items-center">
|
||||||
<view v-if="filteredDate(item)"
|
<view v-if="filteredDate(item)"
|
||||||
class="w-[74rpx] h-[92rpx] bg-[#f4f4f4] text-[var(--text-color-light6)] box-border py-[10rpx] rounded-[8rpx] flex flex-col items-center"
|
class="w-[74rpx] h-[92rpx] bg-[#f4f4f4] text-[var(--text-color-light6)] box-border py-[10rpx] rounded-[8rpx] flex flex-col items-center"
|
||||||
:class="{'sigin-bg !text-[#fff]': isVerDate(item),'!bg-[#f9f9f9] border-[1rpx] !text-[var(--text-color-light9)] border-[#f5f5f5] border-solid': !isVerDate(item) && item < state.curDate && (state.curMonth + 1) == (new Date().getMonth() + 1) ,'mb-[20rpx]':isCurrentDate(item),'mb-[30rpx]':!isCurrentDate(item)}"
|
:class="{'sign-bg !text-[#fff]': isVerDate(item),'!bg-[#f9f9f9] border-[1rpx] !text-[var(--text-color-light9)] border-[#f5f5f5] border-solid': !isVerDate(item) && item < state.curDate && (state.curMonth + 1) == (new Date().getMonth() + 1) ,'mb-[20rpx]':isCurrentDate(item),'mb-[30rpx]':!isCurrentDate(item)}"
|
||||||
@click="getDayPackFn(item)">
|
@click="getDayPackFn(item)">
|
||||||
<text class="text-[24rpx] leading-[28rpx] mb-[6rpx]">{{ filteredDate(item) }}</text>
|
<text class="text-[24rpx] leading-[28rpx] mb-[6rpx]">{{ filteredDate(item) }}</text>
|
||||||
<view v-if="filteredDate(item)" class="flex items-center justufy-center">
|
<view v-if="filteredDate(item)" class="flex items-center justufy-center">
|
||||||
@ -76,7 +76,7 @@
|
|||||||
<view class="w-[14.28%] flex flex-col justify-center items-center mb-[30rpx]">
|
<view class="w-[14.28%] flex flex-col justify-center items-center mb-[30rpx]">
|
||||||
<view v-if="filteredDate(item)"
|
<view v-if="filteredDate(item)"
|
||||||
class="w-[74rpx] h-[92rpx] bg-[#F6FAFF] text-[var(--text-color-light6)] box-border py-[10rpx] rounded-[8rpx] flex flex-col items-center"
|
class="w-[74rpx] h-[92rpx] bg-[#F6FAFF] text-[var(--text-color-light6)] box-border py-[10rpx] rounded-[8rpx] flex flex-col items-center"
|
||||||
:class="{'sigin-bg !text-[#fff]': isVerDate(item) && active ,'!bg-[#FDFDFD] border-[1rpx] border-[#F0F4FA] border-solid': !isVerDate(item) && item < state.curDate && (state.curMonth + 1) == (new Date().getMonth() + 1) && state.curYear == new Date().getFullYear() ,'mb-[20rpx]':isCurrentDate(item),'mb-[30rpx]':!isCurrentDate(item)}"
|
:class="{'sign-bg !text-[#fff]': isVerDate(item) && active ,'!bg-[#FDFDFD] border-[1rpx] border-[#F0F4FA] border-solid': !isVerDate(item) && item < state.curDate && (state.curMonth + 1) == (new Date().getMonth() + 1) && state.curYear == new Date().getFullYear() ,'mb-[20rpx]':isCurrentDate(item),'mb-[30rpx]':!isCurrentDate(item)}"
|
||||||
@click="getDayPackFn(item)">
|
@click="getDayPackFn(item)">
|
||||||
<text class="text-[24rpx] leading-[28rpx] mb-[6rpx]">{{ filteredDate(item) }}</text>
|
<text class="text-[24rpx] leading-[28rpx] mb-[6rpx]">{{ filteredDate(item) }}</text>
|
||||||
<view v-if="filteredDate(item)" class="flex items-center justufy-center">
|
<view v-if="filteredDate(item)" class="flex items-center justufy-center">
|
||||||
@ -488,7 +488,7 @@ const topStyle = computed(() => {
|
|||||||
background-color: rgba(102, 102, 102, 0.4);
|
background-color: rgba(102, 102, 102, 0.4);
|
||||||
}
|
}
|
||||||
|
|
||||||
.sigin-bg {
|
.sign-bg {
|
||||||
background: linear-gradient(90deg, #FFA359 0%, #FF5426 100%), #F2F2F2;
|
background: linear-gradient(90deg, #FFA359 0%, #FF5426 100%), #F2F2F2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -68,6 +68,10 @@ watch(() => prop.areaId, (nval, oval) => {
|
|||||||
data.province && (selected.province = data.province)
|
data.province && (selected.province = data.province)
|
||||||
data.city && (selected.city = data.city)
|
data.city && (selected.city = data.city)
|
||||||
data.district && (selected.district = data.district)
|
data.district && (selected.district = data.district)
|
||||||
|
if (data.city == undefined && data.province && data.district) {
|
||||||
|
selected.city = data.district
|
||||||
|
selected.district=null
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
|
|||||||
@ -148,6 +148,10 @@ const getPhoneNumber = (e: any) => {
|
|||||||
let msg = '用户未授权隐私权限';
|
let msg = '用户未授权隐私权限';
|
||||||
uni.showToast({ title: msg, icon: 'none' })
|
uni.showToast({ title: msg, icon: 'none' })
|
||||||
}
|
}
|
||||||
|
if (e.detail.errno == 112) {
|
||||||
|
let msg = `隐私协议中未声明,获取手机号失败`;
|
||||||
|
uni.showToast({ title: msg, icon: 'none' })
|
||||||
|
}
|
||||||
if (e.detail.errMsg == "getPhoneNumber:fail user deny") {
|
if (e.detail.errMsg == "getPhoneNumber:fail user deny") {
|
||||||
let msg = '用户拒绝获取手机号码';
|
let msg = '用户拒绝获取手机号码';
|
||||||
uni.showToast({ title: msg, icon: 'none' })
|
uni.showToast({ title: msg, icon: 'none' })
|
||||||
|
|||||||
@ -38,6 +38,15 @@ import { getPayInfo, pay } from '@/app/api/pay'
|
|||||||
import { img, redirect, isWeixinBrowser, moneyFormat } from '@/utils/common'
|
import { img, redirect, isWeixinBrowser, moneyFormat } from '@/utils/common'
|
||||||
import wechat from '@/utils/wechat'
|
import wechat from '@/utils/wechat'
|
||||||
|
|
||||||
|
const prop = defineProps({
|
||||||
|
ignorePay: {
|
||||||
|
type: Array,
|
||||||
|
default () {
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
// #ifdef H5
|
// #ifdef H5
|
||||||
if (isWeixinBrowser()) wechat.init();
|
if (isWeixinBrowser()) wechat.init();
|
||||||
// #endif
|
// #endif
|
||||||
@ -186,7 +195,6 @@ const open = (tradeType: string, tradeId: number, payReturn: string = '', scene:
|
|||||||
getPayInfo(tradeType, tradeId, obj).then((res: any) => {
|
getPayInfo(tradeType, tradeId, obj).then((res: any) => {
|
||||||
|
|
||||||
let { data } = res
|
let { data } = res
|
||||||
payInfo.value = data
|
|
||||||
|
|
||||||
if (uni.$u.test.isEmpty(data)) {
|
if (uni.$u.test.isEmpty(data)) {
|
||||||
uni.showToast({ title: t('pay.notObtainedInfo'), icon: 'none' })
|
uni.showToast({ title: t('pay.notObtainedInfo'), icon: 'none' })
|
||||||
@ -196,6 +204,12 @@ const open = (tradeType: string, tradeId: number, payReturn: string = '', scene:
|
|||||||
toPayResult()
|
toPayResult()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
payInfo.value = data
|
||||||
|
if(prop.ignorePay) {
|
||||||
|
data.pay_type_list = data.pay_type_list.filter((item: any) => {
|
||||||
|
return !prop.ignorePay.includes(item.key)
|
||||||
|
})
|
||||||
|
}
|
||||||
type.value = data.pay_type_list[0] ? data.pay_type_list[0].key : ''
|
type.value = data.pay_type_list[0] ? data.pay_type_list[0].key : ''
|
||||||
show.value = true
|
show.value = true
|
||||||
repeat.value = false
|
repeat.value = false
|
||||||
|
|||||||
84
uni-app/src/components/pop-ads/pop-ads.vue
Normal file
84
uni-app/src/components/pop-ads/pop-ads.vue
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
<template>
|
||||||
|
<view @touchmove.prevent.stop class="share-popup">
|
||||||
|
<u-popup :show="adsPopShow" mode="center" @close="adsPopupClose" overlayOpacity="0.3" bgColor="transparent">
|
||||||
|
<view @touchmove.prevent.stop class="flex flex-col items-center" v-if="data && data.imgUrl">
|
||||||
|
<image :src="img(data.imgUrl)" :style="popWindowStyle()" @click="diyStore.toRedirect(data.link)"/>
|
||||||
|
<text @click="adsPopupClose" class="mt-[50rpx] nc-iconfont nc-icon-cuohaoV6xx1 !text-[50rpx] text-[#fff]"></text>
|
||||||
|
</view>
|
||||||
|
</u-popup>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { ref, computed, onMounted, nextTick } from 'vue';
|
||||||
|
import { redirect, img } from '@/utils/common';
|
||||||
|
import useDiyStore from '@/app/stores/diy';
|
||||||
|
const diyStore = useDiyStore();
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
data: {
|
||||||
|
type: Object,
|
||||||
|
default: {}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const data = computed(() => {
|
||||||
|
return props.data.popWindow;
|
||||||
|
})
|
||||||
|
|
||||||
|
const adsPopShow = ref(false);
|
||||||
|
onMounted(() => {
|
||||||
|
nextTick(() => {
|
||||||
|
if (data.value.count == 'always'){
|
||||||
|
uni.removeStorageSync(data.value.id + '_pop_window_count');
|
||||||
|
}
|
||||||
|
if (uni.getStorageSync('isOnLoad')){
|
||||||
|
adsPopupShow()
|
||||||
|
uni.removeStorageSync('isOnLoad')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
const popWindowStyle =() => {
|
||||||
|
// 做大展示宽高
|
||||||
|
const MAX_WIDTH = 290;
|
||||||
|
const MAX_HEIGHT = 410;
|
||||||
|
// 参照宽高
|
||||||
|
const REFER_WIDTH = 290;
|
||||||
|
const REFER_HEIGHT = 290;
|
||||||
|
|
||||||
|
const scale = data.value.imgHeight / data.value.imgWidth;
|
||||||
|
let width, height;
|
||||||
|
if (scale <= REFER_HEIGHT / REFER_WIDTH) {
|
||||||
|
width = MAX_WIDTH;
|
||||||
|
height = width * scale;
|
||||||
|
} else {
|
||||||
|
height = MAX_HEIGHT;
|
||||||
|
width = height / scale;
|
||||||
|
}
|
||||||
|
|
||||||
|
return `height:${height * 2}rpx;width:${width * 2}rpx;`;
|
||||||
|
}
|
||||||
|
|
||||||
|
const adsPopupShow = () => {
|
||||||
|
// 装修模式下刷新
|
||||||
|
if (diyStore.mode == 'decorate' || !data.value.show) return false
|
||||||
|
const popWindowCount = uni.getStorageSync(data.value.id + '_pop_window_count');
|
||||||
|
if (popWindowCount === 'always' || popWindowCount == '') {
|
||||||
|
adsPopShow.value = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const adsPopupClose = () => {
|
||||||
|
adsPopShow.value = false;
|
||||||
|
uni.setStorageSync(data.value.id + '_pop_window_count', data.value.count);
|
||||||
|
}
|
||||||
|
|
||||||
|
// onBeforeUnmount(()=>{
|
||||||
|
// uni.removeStorageSync(data.value.id + '_pop_window_count');
|
||||||
|
// })
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
|
||||||
|
</style>
|
||||||
@ -71,7 +71,7 @@ const props = defineProps({
|
|||||||
type: Object,
|
type: Object,
|
||||||
default: {}
|
default: {}
|
||||||
},
|
},
|
||||||
copyUrl: { // 例 "/wap/addon/shop_fenxiao/pages/goods"
|
copyUrl: { // 例 "/wap/addon/shop/pages/goods"
|
||||||
type: String,
|
type: String,
|
||||||
default: ''
|
default: ''
|
||||||
},
|
},
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<template v-if="tabbarShow && tabbar && Object.keys(tabbar).length">
|
<template v-if="tabbar && Object.keys(tabbar).length">
|
||||||
<u-tabbar :value="value" zIndex="9999" :fixed="true" :placeholder="true" :safeAreaInsetBottom="true" :inactive-color="tabbar.value.textColor" :active-color="tabbar.value.textHoverColor" :border="props.border" class="custom-tabbar">
|
<u-tabbar :value="value" zIndex="9999" :fixed="true" :placeholder="true" :safeAreaInsetBottom="true" :inactive-color="tabbar.value.textColor" :active-color="tabbar.value.textHoverColor" :border="props.border" class="custom-tabbar">
|
||||||
<template v-for="item in tabbar.value.list">
|
<template v-for="item in tabbar.value.list">
|
||||||
<u-tabbar-item class="py-[5rpx]" :custom-style="{'background-color': tabbar.value.backgroundColor}" :text="item.text" :icon="img(value == item.link.url ? item.iconSelectPath : item.iconPath)" :name="item.link.url" v-if="tabbar.value.type == 1" @click="itemBtn(item.link.url)"></u-tabbar-item>
|
<u-tabbar-item class="py-[5rpx]" :custom-style="{'background-color': tabbar.value.backgroundColor}" :text="item.text" :icon="img(value == item.link.url ? item.iconSelectPath : item.iconPath)" :name="item.link.url" v-if="tabbar.value.type == 1" @click="itemBtn(item.link.url)"></u-tabbar-item>
|
||||||
@ -15,7 +15,6 @@
|
|||||||
import { reactive, computed, watch, nextTick, getCurrentInstance } from 'vue'
|
import { reactive, computed, watch, nextTick, getCurrentInstance } from 'vue'
|
||||||
import { redirect, currRoute, currShareRoute, img } from '@/utils/common'
|
import { redirect, currRoute, currShareRoute, img } from '@/utils/common'
|
||||||
import useConfigStore from '@/stores/config'
|
import useConfigStore from '@/stores/config'
|
||||||
import useSystemStore from '@/stores/system'
|
|
||||||
import { cloneDeep } from 'lodash-es'
|
import { cloneDeep } from 'lodash-es'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
@ -48,10 +47,6 @@ if (!addon && configStore.addon) {
|
|||||||
|
|
||||||
const tabbar: any = reactive({})
|
const tabbar: any = reactive({})
|
||||||
|
|
||||||
const tabbarShow = computed(() => {
|
|
||||||
return currRoute() != '/app/pages/index/tabbar'
|
|
||||||
})
|
|
||||||
|
|
||||||
const setTabbar = () => {
|
const setTabbar = () => {
|
||||||
let list = cloneDeep(useConfigStore().tabbarList);
|
let list = cloneDeep(useConfigStore().tabbarList);
|
||||||
if (list.length == 1) {
|
if (list.length == 1) {
|
||||||
|
|||||||
@ -192,7 +192,7 @@ defineExpose({
|
|||||||
}
|
}
|
||||||
|
|
||||||
.privacy-desc {
|
.privacy-desc {
|
||||||
font-size: 28rpx;
|
font-size: 24rpx;
|
||||||
color: #555;
|
color: #555;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
@ -210,15 +210,15 @@ defineExpose({
|
|||||||
|
|
||||||
.privacy-button-btn {
|
.privacy-button-btn {
|
||||||
color: #FFF;
|
color: #FFF;
|
||||||
font-size: 30rpx;
|
font-size: 24rpx;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
line-height: 80rpx;
|
width: 180rpx;
|
||||||
|
line-height: 66rpx;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
height: 80rpx;
|
height: 66rpx;
|
||||||
border-radius: 10rpx;
|
border-radius: 16rpx;
|
||||||
border: none;
|
border: none;
|
||||||
background: #07c160;
|
background: #07c160;
|
||||||
flex: 1;
|
|
||||||
margin-right: 30rpx;
|
margin-right: 30rpx;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
@ -233,7 +233,7 @@ defineExpose({
|
|||||||
}
|
}
|
||||||
|
|
||||||
.bg-agree {
|
.bg-agree {
|
||||||
margin-right: 0rpx;
|
// margin-right: 0rpx;
|
||||||
}
|
}
|
||||||
.privacy-popup-wrap {
|
.privacy-popup-wrap {
|
||||||
padding-bottom: constant(safe-area-inset-bottom);
|
padding-bottom: constant(safe-area-inset-bottom);
|
||||||
|
|||||||
@ -115,6 +115,11 @@ export function useDiy(params: any = {}) {
|
|||||||
let sources = JSON.parse(requestData.value); // todo diy的结构应该后台处理好,前端就不需要再转换了
|
let sources = JSON.parse(requestData.value); // todo diy的结构应该后台处理好,前端就不需要再转换了
|
||||||
|
|
||||||
diyData.global = sources.global;
|
diyData.global = sources.global;
|
||||||
|
// 用于区分微页面之间弹窗的id
|
||||||
|
if (diyData.global.popWindow && diyData.global.popWindow.show) {
|
||||||
|
diyData.global.popWindow.id = requestData.id;
|
||||||
|
}
|
||||||
|
|
||||||
diyData.value = sources.value;
|
diyData.value = sources.value;
|
||||||
diyData.value.forEach((item: any, index) => {
|
diyData.value.forEach((item: any, index) => {
|
||||||
item.pageStyle = '';
|
item.pageStyle = '';
|
||||||
|
|||||||
@ -79,6 +79,9 @@ export function useDiyForm(params: any = {}) {
|
|||||||
loading.value = false;
|
loading.value = false;
|
||||||
}
|
}
|
||||||
// #endif
|
// #endif
|
||||||
|
if (option.form_record_id) {
|
||||||
|
requestData.form_record_id = option.form_record_id;
|
||||||
|
}
|
||||||
|
|
||||||
form_id.value = option.form_id || '';
|
form_id.value = option.form_id || '';
|
||||||
// if (name.value == '') name.value = option.name || '';
|
// if (name.value == '') name.value = option.name || '';
|
||||||
@ -117,15 +120,15 @@ export function useDiyForm(params: any = {}) {
|
|||||||
if (!form_id.value) return; // 空值情况下不调用接口
|
if (!form_id.value) return; // 空值情况下不调用接口
|
||||||
|
|
||||||
// 填写万能表单需要检测登录
|
// 填写万能表单需要检测登录
|
||||||
if (needLogin.value && !getToken()) {
|
// if (needLogin.value && !getToken()) {
|
||||||
useLogin().setLoginBack({
|
// useLogin().setLoginBack({
|
||||||
url: '/app/pages/index/diy_form',
|
// url: '/app/pages/index/diy_form',
|
||||||
param: {
|
// param: {
|
||||||
form_id: form_id.value
|
// form_id: form_id.value
|
||||||
}
|
// }
|
||||||
})
|
// })
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
|
|
||||||
getDiyFormInfo({
|
getDiyFormInfo({
|
||||||
form_id: form_id.value,
|
form_id: form_id.value,
|
||||||
|
|||||||
@ -323,8 +323,8 @@ export function useLogin() {
|
|||||||
scopes: params.scopes
|
scopes: params.scopes
|
||||||
}).then((res: any) => {
|
}).then((res: any) => {
|
||||||
uni.setStorageSync('wechat_login_back', true) // 微信公众号手动授权登录回调标识
|
uni.setStorageSync('wechat_login_back', true) // 微信公众号手动授权登录回调标识
|
||||||
location.replace(res.data.url);
|
// location.replace(res.data.url);
|
||||||
// location.href = res.data.url
|
location.href = res.data.url
|
||||||
})
|
})
|
||||||
|
|
||||||
// #endif
|
// #endif
|
||||||
|
|||||||
@ -4,7 +4,7 @@ import { sendSms } from '@/app/api/system'
|
|||||||
|
|
||||||
export function useSendSms(smsRef: any) {
|
export function useSendSms(smsRef: any) {
|
||||||
const tips = ref(t('getSmsCode'))
|
const tips = ref(t('getSmsCode'))
|
||||||
const seconds = 90
|
const seconds = 60
|
||||||
const changeText = 'X' + t('smsCodeChangeText')
|
const changeText = 'X' + t('smsCodeChangeText')
|
||||||
|
|
||||||
const canGetCode = computed(() => {
|
const canGetCode = computed(() => {
|
||||||
|
|||||||
@ -9,9 +9,6 @@ const t = (message: string) => {
|
|||||||
// #endif
|
// #endif
|
||||||
// #ifdef MP
|
// #ifdef MP
|
||||||
route = '/' + (getCurrentInstance()?.root.ctx.$scope.__route__ || useSystemStore().currRoute)
|
route = '/' + (getCurrentInstance()?.root.ctx.$scope.__route__ || useSystemStore().currRoute)
|
||||||
if (route == '/app/pages/index/tabbar' && useSystemStore().currTabbar && useSystemStore().currTabbar.path) {
|
|
||||||
route = useSystemStore().currTabbar.path
|
|
||||||
}
|
|
||||||
// #endif
|
// #endif
|
||||||
const file = language.getFileKey(route)
|
const file = language.getFileKey(route)
|
||||||
const key = `${ file.fileKey }.${ message }`
|
const key = `${ file.fileKey }.${ message }`
|
||||||
|
|||||||
@ -31,6 +31,7 @@
|
|||||||
"pages.member.detailed_account": "流水明细",
|
"pages.member.detailed_account": "流水明细",
|
||||||
"pages.member.index": "",
|
"pages.member.index": "",
|
||||||
"pages.member.personal": "个人资料",
|
"pages.member.personal": "个人资料",
|
||||||
|
"pages.member.personal_form": "个人资料",
|
||||||
"pages.member.contact": "客服",
|
"pages.member.contact": "客服",
|
||||||
"pages.pay.browser": "支付",
|
"pages.pay.browser": "支付",
|
||||||
"pages.pay.result": "",
|
"pages.pay.result": "",
|
||||||
@ -41,5 +42,140 @@
|
|||||||
"pages.verify.record": "核销记录",
|
"pages.verify.record": "核销记录",
|
||||||
"pages.friendspay.share": "找朋友帮忙付",
|
"pages.friendspay.share": "找朋友帮忙付",
|
||||||
"pages.friendspay.money": "",
|
"pages.friendspay.money": "",
|
||||||
"pages.webview.index": ""
|
"pages.webview.index": "",
|
||||||
|
"tourism.pages.way.list": "线路列表",
|
||||||
|
"tourism.pages.way.detail": "线路详情",
|
||||||
|
"tourism.pages.way.order": "线路订单",
|
||||||
|
"tourism.pages.hotel.list": "酒店列表",
|
||||||
|
"tourism.pages.hotel.detail": "酒店详情",
|
||||||
|
"tourism.pages.hotel.order": "酒店订单",
|
||||||
|
"tourism.pages.scenic.list": "景点列表",
|
||||||
|
"tourism.pages.scenic.detail": "景点详情",
|
||||||
|
"tourism.pages.scenic.order": "景点订单",
|
||||||
|
"tourism.pages.order.list": "旅游订单",
|
||||||
|
"tourism.pages.order.detail": "订单详情",
|
||||||
|
"tourism.pages.verify.index": "核销",
|
||||||
|
"tourism.pages.verify.record": "核销记录",
|
||||||
|
"tourism.pages.verify.detail": "核销详情",
|
||||||
|
"vipcard.pages.verify.index": "核销",
|
||||||
|
"vipcard.pages.verify.record": "核销记录",
|
||||||
|
"vipcard.pages.verify.detail": "核销详情",
|
||||||
|
"vipcard.pages.order.payment": "订单结算",
|
||||||
|
"vipcard.pages.order.list": "订单列表",
|
||||||
|
"vipcard.pages.order.my_reserved": "我的预约",
|
||||||
|
"vipcard.pages.order.my_reserved_detail": "我的预约详情",
|
||||||
|
"vipcard.pages.order.my_card": "我的卡项",
|
||||||
|
"vipcard.pages.order.detail": "订单详情",
|
||||||
|
"vipcard.pages.service.list": "项目列表",
|
||||||
|
"vipcard.pages.card.list": "卡项列表",
|
||||||
|
"vipcard.pages.card.detail": "卡项详情",
|
||||||
|
"recharge.pages.recharge": "充值",
|
||||||
|
"recharge.pages.recharge_record": "充值记录",
|
||||||
|
"recharge.pages.recharge_record_detail": "充值记录详情",
|
||||||
|
"shop.pages.goods.search": "搜索",
|
||||||
|
"shop.pages.goods.cart": "购物车",
|
||||||
|
"shop.pages.goods.collect": "商品收藏",
|
||||||
|
"shop.pages.goods.browse": "我的足迹",
|
||||||
|
"shop.pages.goods.category": "商品分类",
|
||||||
|
"shop.pages.goods.detail": "商品详情",
|
||||||
|
"shop.pages.goods.list": "商品列表",
|
||||||
|
"shop.pages.goods.rank": "排行榜",
|
||||||
|
"shop.pages.member.index": "个人中心",
|
||||||
|
"shop.pages.member.my_coupon": "我的优惠券",
|
||||||
|
"shop.pages.order.list": "订单列表",
|
||||||
|
"shop.pages.order.detail": "订单详情",
|
||||||
|
"shop.pages.order.payment": "待付款订单",
|
||||||
|
"shop.pages.evaluate.order_evaluate": "商品评价",
|
||||||
|
"shop.pages.evaluate.order_evaluate_view": "商品评价",
|
||||||
|
"shop.pages.evaluate.list": "评价列表",
|
||||||
|
"shop.pages.coupon.list": "优惠券列表",
|
||||||
|
"shop.pages.coupon.detail": "优惠券详情",
|
||||||
|
"shop.pages.discount.list": "限时折扣",
|
||||||
|
"shop.pages.refund.list": "退款列表",
|
||||||
|
"shop.pages.refund.detail": "退款详情",
|
||||||
|
"shop.pages.refund.apply": "申请退款",
|
||||||
|
"shop.pages.refund.edit_apply": "编辑退款信息",
|
||||||
|
"shop.pages.refund.log": "协商记录",
|
||||||
|
"shop.pages.point.index": "积分商城",
|
||||||
|
"shop.pages.point.list": "积分商品列表",
|
||||||
|
"shop.pages.point.detail": "积分商品详情",
|
||||||
|
"shop.pages.point.payment": "待付款订单",
|
||||||
|
"shop.pages.point.order_list": "积分兑换记录",
|
||||||
|
"shop.pages.newcomer.list": "新人专享",
|
||||||
|
"cms.pages.list": "资讯中心",
|
||||||
|
"cms.pages.detail": "文章详情",
|
||||||
|
"shop_fenxiao.pages.index": "分销中心",
|
||||||
|
"shop_fenxiao.pages.zone": "分销专区",
|
||||||
|
"shop_fenxiao.pages.level": "分销商等级",
|
||||||
|
"shop_fenxiao.pages.child_fenxiao": "分销商",
|
||||||
|
"shop_fenxiao.pages.goods": "分销商品",
|
||||||
|
"shop_fenxiao.pages.team": "我的团队",
|
||||||
|
"shop_fenxiao.pages.ranking_list": "排行榜",
|
||||||
|
"shop_fenxiao.pages.agent_list": "渠道代理",
|
||||||
|
"shop_fenxiao.pages.bill": "账单",
|
||||||
|
"shop_fenxiao.pages.order": "分销订单",
|
||||||
|
"shop_fenxiao.pages.order_detail": "订单详情",
|
||||||
|
"shop_fenxiao.pages.apply": "分销商申请",
|
||||||
|
"shop_fenxiao.pages.task_rewards": "任务奖励",
|
||||||
|
"shop_fenxiao.pages.task_detail": "任务奖励详情",
|
||||||
|
"shop_fenxiao.pages.task_rewards_detail": "任务奖励明细",
|
||||||
|
"shop_fenxiao.pages.sale": "销售奖励",
|
||||||
|
"shop_fenxiao.pages.sale_detail": "销售奖励详情",
|
||||||
|
"shop_fenxiao.pages.sale_ranking": "销售奖励排行榜",
|
||||||
|
"shop_fenxiao.pages.promote_code": "分享海报",
|
||||||
|
"shop_giftcard.pages.index": "礼品卡首页",
|
||||||
|
"shop_giftcard.pages.list": "礼品卡列表",
|
||||||
|
"shop_giftcard.pages.detail": "加载中",
|
||||||
|
"shop_giftcard.pages.order_list": "礼品卡订单列表",
|
||||||
|
"shop_giftcard.pages.order_detail": "礼品卡订单详情",
|
||||||
|
"shop_giftcard.pages.member": "我的",
|
||||||
|
"shop_giftcard.pages.my_card_list": "我的卡包",
|
||||||
|
"shop_giftcard.pages.card_bag": "我的卡包",
|
||||||
|
"shop_giftcard.pages.activate": "卡密激活",
|
||||||
|
"shop_giftcard.pages.receive_list": "收到的礼品卡",
|
||||||
|
"shop_giftcard.pages.give_list": "送出的礼品卡",
|
||||||
|
"shop_giftcard.pages.give_detail": "送出礼品卡详情",
|
||||||
|
"shop_giftcard.pages.give": "礼品卡赠送",
|
||||||
|
"shop_giftcard.pages.receive_info": "领取礼品卡",
|
||||||
|
"shop_giftcard.pages.use_card": "礼品卡使用",
|
||||||
|
"shop_giftcard.pages.use_goods_select": "选择兑换商品",
|
||||||
|
"shop_giftcard.pages.payment": "待付款订单",
|
||||||
|
"shop.pages.pay.index": "待支付",
|
||||||
|
"shop.pages.pay.result": "",
|
||||||
|
"shop_fenxiao.pages.promote": "邀请好友",
|
||||||
|
"shop_fenxiao.pages.team_dividend": "团队分红",
|
||||||
|
"o2o.pages.address.edit": "编辑地址",
|
||||||
|
"o2o.pages.address.index": "地址",
|
||||||
|
"o2o.pages.goods.category": "项目分类",
|
||||||
|
"o2o.pages.goods.detail": "项目详情",
|
||||||
|
"o2o.pages.goods.list": "项目列表",
|
||||||
|
"o2o.pages.index": "首页",
|
||||||
|
"o2o.pages.master.statistics.index": "技师中心",
|
||||||
|
"o2o.pages.master.task.add": "师傅报单",
|
||||||
|
"o2o.pages.master.task.detail": "任务详情",
|
||||||
|
"o2o.pages.master.task.list": "任务列表",
|
||||||
|
"o2o.pages.master.task.refund": "查看退款",
|
||||||
|
"o2o.pages.master.task.show": "报单详情",
|
||||||
|
"o2o.pages.member.index": "个人中心",
|
||||||
|
"o2o.pages.order.detail": "订单详情",
|
||||||
|
"o2o.pages.order.list": "订单列表",
|
||||||
|
"o2o.pages.order.payment": "订单结算",
|
||||||
|
"o2o.pages.refund.apply": "申请退款",
|
||||||
|
"o2o.pages.refund.detail": "退款详情",
|
||||||
|
"o2o.pages.refund.list": "退款列表",
|
||||||
|
"o2o.pages.refund.log": "协商记录",
|
||||||
|
"o2o.pages.technician.detail": "技师详情",
|
||||||
|
"o2o.pages.technician.list": "技师列表",
|
||||||
|
"shop_giftcard.pages.member_give_info": "送出礼品卡详情",
|
||||||
|
"shop_giftcard.pages.give_info": "领取礼品卡",
|
||||||
|
"sow_community.pages.index": "种草社区",
|
||||||
|
"sow_community.pages.search": "搜索",
|
||||||
|
"sow_community.pages.image.detail": "内容详情",
|
||||||
|
"sow_community.pages.video.detail": "内容详情",
|
||||||
|
"sow_community.pages.member": "个人主页",
|
||||||
|
"sow_community.pages.create": "发布内容",
|
||||||
|
"sow_community.pages.follow": "关注列表",
|
||||||
|
"sow_community.pages.sow_show": "种草秀",
|
||||||
|
"sow_community.pages.topic_list": "话题列表",
|
||||||
|
"template_flower_industry.pages.goods.list": "商品列表"
|
||||||
}
|
}
|
||||||
@ -142,5 +142,6 @@
|
|||||||
"o2o.soldOut": "已售",
|
"o2o.soldOut": "已售",
|
||||||
"o2o.orderNo": "订单号",
|
"o2o.orderNo": "订单号",
|
||||||
"o2o.actualPayment": "实付款",
|
"o2o.actualPayment": "实付款",
|
||||||
"o2o.orderDetail": "详情"
|
"o2o.orderDetail": "详情",
|
||||||
|
"notHave": "无"
|
||||||
}
|
}
|
||||||
@ -16,12 +16,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"path": "app/pages/index/tabbar",
|
|
||||||
"style": {
|
|
||||||
"navigationStyle": "custom"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"path": "app/pages/auth/index",
|
"path": "app/pages/auth/index",
|
||||||
"style": {
|
"style": {
|
||||||
@ -307,6 +301,16 @@
|
|||||||
},
|
},
|
||||||
"needLogin": true
|
"needLogin": true
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"path": "personal_form",
|
||||||
|
"style": {
|
||||||
|
// #ifndef H5
|
||||||
|
"navigationStyle": "custom",
|
||||||
|
// #endif
|
||||||
|
"navigationBarTitleText": "%pages.member.personal_form%"
|
||||||
|
},
|
||||||
|
"needLogin": true
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"path": "point",
|
"path": "point",
|
||||||
"style": {
|
"style": {
|
||||||
@ -385,9 +389,6 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pagePath": "app/pages/index/nosite"
|
"pagePath": "app/pages/index/nosite"
|
||||||
},
|
|
||||||
{
|
|
||||||
"pagePath": "app/pages/index/tabbar"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|||||||
@ -61,24 +61,20 @@ const useMemberStore = defineStore('member', {
|
|||||||
// if (useConfigStore().login.is_auth_register) {
|
// if (useConfigStore().login.is_auth_register) {
|
||||||
uni.setStorageSync('autoLoginLock', true) // todo 普通账号退出登录,在进行三方账号登录不会自动登录
|
uni.setStorageSync('autoLoginLock', true) // todo 普通账号退出登录,在进行三方账号登录不会自动登录
|
||||||
// }
|
// }
|
||||||
|
let clearStorage = () =>{
|
||||||
|
removeToken()
|
||||||
|
uni.removeStorageSync('wap_member_info');
|
||||||
|
// uni.removeStorageSync('openid');
|
||||||
|
uni.removeStorageSync('unionid');
|
||||||
|
uni.removeStorageSync('isBindMobile');
|
||||||
|
uni.removeStorageSync('nickname');
|
||||||
|
uni.removeStorageSync('avatar');
|
||||||
|
isRedirect && redirect({ url: '/app/pages/index/index', mode: 'switchTab' })
|
||||||
|
}
|
||||||
logout().then(() => {
|
logout().then(() => {
|
||||||
removeToken()
|
clearStorage()
|
||||||
uni.removeStorageSync('wap_member_info');
|
|
||||||
// uni.removeStorageSync('openid');
|
|
||||||
uni.removeStorageSync('unionid');
|
|
||||||
uni.removeStorageSync('isBindMobile');
|
|
||||||
uni.removeStorageSync('nickname');
|
|
||||||
uni.removeStorageSync('avatar');
|
|
||||||
isRedirect && redirect({ url: '/app/pages/index/index', mode: 'switchTab' })
|
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
removeToken()
|
clearStorage()
|
||||||
uni.removeStorageSync('wap_member_info');
|
|
||||||
// uni.removeStorageSync('openid');
|
|
||||||
uni.removeStorageSync('unionid');
|
|
||||||
uni.removeStorageSync('isBindMobile');
|
|
||||||
uni.removeStorageSync('nickname');
|
|
||||||
uni.removeStorageSync('avatar');
|
|
||||||
isRedirect && redirect({ url: '/app/pages/index/index', mode: 'switchTab' })
|
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
// 一键绑定手机号
|
// 一键绑定手机号
|
||||||
|
|||||||
@ -15,11 +15,12 @@ interface System {
|
|||||||
menuButtonInfo: any, // 如果是小程序,获取右上角胶囊的尺寸信息
|
menuButtonInfo: any, // 如果是小程序,获取右上角胶囊的尺寸信息
|
||||||
shareCallback: any, // 分享回调
|
shareCallback: any, // 分享回调
|
||||||
defaultPositionAddress: any,
|
defaultPositionAddress: any,
|
||||||
diyAddressInfo: any // 定位信息
|
diyAddressInfo: any, // 定位信息
|
||||||
currTabbar: {
|
currTabbar: {
|
||||||
path: string,
|
path: string,
|
||||||
query: object
|
query: object
|
||||||
}
|
},
|
||||||
|
isAddCartRecommend: boolean // 是否添加购物车推荐
|
||||||
}
|
}
|
||||||
|
|
||||||
const useSystemStore = defineStore('system', {
|
const useSystemStore = defineStore('system', {
|
||||||
@ -46,7 +47,8 @@ const useSystemStore = defineStore('system', {
|
|||||||
currTabbar: {
|
currTabbar: {
|
||||||
path: '',
|
path: '',
|
||||||
query: {}
|
query: {}
|
||||||
}
|
},
|
||||||
|
isAddCartRecommend: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
actions: {
|
actions: {
|
||||||
|
|||||||
@ -144,11 +144,13 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
.detail-two-content{
|
.detail-two-content{
|
||||||
padding: 0rpx 10rpx;
|
// padding: 0rpx 10rpx;
|
||||||
|
line-height: 1;
|
||||||
font-size: 28rpx;
|
font-size: 28rpx;
|
||||||
margin-bottom: 34rpx;
|
margin-bottom: 34rpx;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
.detail-two-content-label{
|
.detail-two-content-label{
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -158,6 +160,7 @@
|
|||||||
word-break: break-word;
|
word-break: break-word;
|
||||||
white-space: pre-wrap;
|
white-space: pre-wrap;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
@font-face {
|
@font-face {
|
||||||
font-family: "nc-iconfont"; /* Project id 4567203 */
|
font-family: "nc-iconfont"; /* Project id 4567203 */
|
||||||
src: url('//at.alicdn.com/t/c/font_4567203_7mppfs5063j.woff2?t=1740450888842') format('woff2'),
|
src: url('//at.alicdn.com/t/c/font_4567203_90bek9j2oeh.woff2?t=1750242885299') format('woff2'),
|
||||||
url('//at.alicdn.com/t/c/font_4567203_7mppfs5063j.woff?t=1740450888842') format('woff'),
|
url('//at.alicdn.com/t/c/font_4567203_90bek9j2oeh.woff?t=1750242885299') format('woff'),
|
||||||
url('//at.alicdn.com/t/c/font_4567203_7mppfs5063j.ttf?t=1740450888842') format('truetype');
|
url('//at.alicdn.com/t/c/font_4567203_90bek9j2oeh.ttf?t=1750242885299') format('truetype');
|
||||||
}
|
}
|
||||||
|
|
||||||
.nc-iconfont {
|
.nc-iconfont {
|
||||||
@ -13,6 +13,386 @@
|
|||||||
-moz-osx-font-smoothing: grayscale;
|
-moz-osx-font-smoothing: grayscale;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.nc-icon-qianV6xx:before {
|
||||||
|
content: "\e784";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-mimaV6xx:before {
|
||||||
|
content: "\e8a6";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-yanzhengmaV6xx:before {
|
||||||
|
content: "\e8a7";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-bianjiV6xx2:before {
|
||||||
|
content: "\e8a4";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-fenxiangV6mm-1:before {
|
||||||
|
content: "\e89c";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-a-Group1036V6xx:before {
|
||||||
|
content: "\e77b";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-shanchu-yuangaiV6xx:before {
|
||||||
|
content: "\e6eb";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-hezuogonghuoshangV6xx:before {
|
||||||
|
content: "\e88b";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-hezuodianpu:before {
|
||||||
|
content: "\e85b";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-gongyingshangxitong:before {
|
||||||
|
content: "\e852";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-shangchengxitong:before {
|
||||||
|
content: "\e858";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-fenzhangshezhi:before {
|
||||||
|
content: "\e843";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-xuanpinpingtai:before {
|
||||||
|
content: "\e845";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-a-Maskgroup:before {
|
||||||
|
content: "\e840";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-fenzhangguanli:before {
|
||||||
|
content: "\e84b";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-gongyingshangdingdan:before {
|
||||||
|
content: "\e84d";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-gongyingshangshangpin:before {
|
||||||
|
content: "\e84e";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-shuaxinV6mm2:before {
|
||||||
|
content: "\e889";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-yitiaohuo:before {
|
||||||
|
content: "\e888";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-shangchengdingdan:before {
|
||||||
|
content: "\e837";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-shangchengshangpin:before {
|
||||||
|
content: "\e83f";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-gouwudaiV6xx1:before {
|
||||||
|
content: "\e886";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-dianpuV6xx1:before {
|
||||||
|
content: "\e880";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-youhuiquanV6xx2:before {
|
||||||
|
content: "\e87a";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-yinhangka2:before {
|
||||||
|
content: "\e83e";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-huiyuantixian:before {
|
||||||
|
content: "\e839";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-a-Financing-tworongzi2:before {
|
||||||
|
content: "\e825";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-a-Weixin-marketweixindianshang:before {
|
||||||
|
content: "\e821";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-a-Repairbianji:before {
|
||||||
|
content: "\e818";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-a-Diskcipan:before {
|
||||||
|
content: "\e81c";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-a-Historylishijilu:before {
|
||||||
|
content: "\e81b";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-a-Deliveryjiaohuo:before {
|
||||||
|
content: "\e81a";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-dianpuV6xx:before {
|
||||||
|
content: "\e871";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-Frame:before {
|
||||||
|
content: "\e816";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-zhifujianshu1:before {
|
||||||
|
content: "\e815";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-jiagoushuliang:before {
|
||||||
|
content: "\e814";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-xiadanshu:before {
|
||||||
|
content: "\e813";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-shangpinliulanliang:before {
|
||||||
|
content: "\e812";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-fenxiaodengji:before {
|
||||||
|
content: "\e807";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-fenxiaoguanli:before {
|
||||||
|
content: "\e809";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-dianzimiandan:before {
|
||||||
|
content: "\e806";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-fenxiaodingdan:before {
|
||||||
|
content: "\e804";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-fenxiaoshang:before {
|
||||||
|
content: "\e808";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-hexiaoyuan:before {
|
||||||
|
content: "\e805";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-shangpintongji:before {
|
||||||
|
content: "\e80a";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-fenxiaogaikuang:before {
|
||||||
|
content: "\e802";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-fenxiaoshangpin:before {
|
||||||
|
content: "\e801";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-yingyongliebiao:before {
|
||||||
|
content: "\e80b";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-huodongliebiao:before {
|
||||||
|
content: "\e80c";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-hexiaojilu:before {
|
||||||
|
content: "\e80d";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-piliangfahuo:before {
|
||||||
|
content: "\e80e";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-fenxiaoshezhi:before {
|
||||||
|
content: "\e80f";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-dianpu:before {
|
||||||
|
content: "\e800";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-caozuorizhi1:before {
|
||||||
|
content: "\e7ef";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-dingdanliebiao:before {
|
||||||
|
content: "\e7f0";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-hexiaoguanli:before {
|
||||||
|
content: "\e7ee";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-fapiaoguanli:before {
|
||||||
|
content: "\e7ed";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-dingdanshezhi:before {
|
||||||
|
content: "\e7ea";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-huiyuanbiaoqian:before {
|
||||||
|
content: "\e7eb";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-huishouzhan:before {
|
||||||
|
content: "\e7db";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-jiesuanzhanghu:before {
|
||||||
|
content: "\e7f1";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-guanliyuan1:before {
|
||||||
|
content: "\e7e6";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-huiyuanliebiao:before {
|
||||||
|
content: "\e7da";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-shangpinfenlei:before {
|
||||||
|
content: "\e7dd";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-jiaoseguanli:before {
|
||||||
|
content: "\e7e3";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-shangpinliebiao:before {
|
||||||
|
content: "\e7e8";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-shangpinpingjia:before {
|
||||||
|
content: "\e7e9";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-dianpushezhi:before {
|
||||||
|
content: "\e7e7";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-sucaiguanli1:before {
|
||||||
|
content: "\e7f2";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-tixianjilu:before {
|
||||||
|
content: "\e7e4";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-xiaopiaodayin:before {
|
||||||
|
content: "\e7f3";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-shangjiadizhiku:before {
|
||||||
|
content: "\e7e1";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-shujudaochu:before {
|
||||||
|
content: "\e7de";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-shangpincanshu:before {
|
||||||
|
content: "\e7e0";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-tuikuanweiquan:before {
|
||||||
|
content: "\e7f4";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-weiyemian:before {
|
||||||
|
content: "\e7f5";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-shouyezhuangxiu:before {
|
||||||
|
content: "\e7d9";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-xianshizhekou:before {
|
||||||
|
content: "\e7d8";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-youhuiquan:before {
|
||||||
|
content: "\e7d7";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-zichangaikuang:before {
|
||||||
|
content: "\e7d6";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-yunfeimoban:before {
|
||||||
|
content: "\e7f6";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-daifukuandingdan:before {
|
||||||
|
content: "\e7fa";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-cangkushangpinshuliang:before {
|
||||||
|
content: "\e7f9";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-daishouhuodingdan:before {
|
||||||
|
content: "\e7f8";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-tuikuan:before {
|
||||||
|
content: "\e7f7";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-tuikuandingdan:before {
|
||||||
|
content: "\e7fb";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-chushoushangpinshuliang:before {
|
||||||
|
content: "\e7fc";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-daifahuodingdan:before {
|
||||||
|
content: "\e7fd";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-dingdanliang:before {
|
||||||
|
content: "\e7fe";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-xiaoshoue:before {
|
||||||
|
content: "\e7ff";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-paihangbangV6xx1:before {
|
||||||
|
content: "\e7e2";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-bangdanguanliV6xx:before {
|
||||||
|
content: "\e86d";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-bangdanshezhiV6xx:before {
|
||||||
|
content: "\e86e";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-zhuanzhangV6xx-1:before {
|
||||||
|
content: "\e86a";
|
||||||
|
}
|
||||||
|
|
||||||
|
.nc-icon-qingliV6xx:before {
|
||||||
|
content: "\e865";
|
||||||
|
}
|
||||||
|
|
||||||
.nc-icon-liebiao-xiV6xx1:before {
|
.nc-icon-liebiao-xiV6xx1:before {
|
||||||
content: "\e863";
|
content: "\e863";
|
||||||
}
|
}
|
||||||
|
|||||||
@ -665,7 +665,7 @@ export function setThemeColor (path: string) {
|
|||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// 设置插件应用的主色调发生错误,若不存在则使用最后有效的主色调
|
// 设置插件应用的主色调发生错误,若不存在则使用最后有效的主色调
|
||||||
if(!current_theme_color && theme_color_list && theme_color_list.length>0){
|
if(!current_theme_color && theme_color_list && Object.keys(theme_color_list).length > 0){
|
||||||
currTheme = theme_color_list.app || Object.values(theme_color_list)[0];
|
currTheme = theme_color_list.app || Object.values(theme_color_list)[0];
|
||||||
configStore.themeColor = themeColorToHex(currTheme.theme)
|
configStore.themeColor = themeColorToHex(currTheme.theme)
|
||||||
uni.setStorageSync('current_theme_color', JSON.stringify(themeColorToHex(currTheme.theme)));
|
uni.setStorageSync('current_theme_color', JSON.stringify(themeColorToHex(currTheme.theme)));
|
||||||
@ -674,7 +674,7 @@ export function setThemeColor (path: string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}else if (!current_theme_color && theme_color_list && theme_color_list.length>0) {
|
}else if (!current_theme_color && theme_color_list && Object.keys(theme_color_list).length > 0) {
|
||||||
currTheme = theme_color_list.app || Object.values(theme_color_list)[0]
|
currTheme = theme_color_list.app || Object.values(theme_color_list)[0]
|
||||||
configStore.themeColor = themeColorToHex(currTheme.theme)
|
configStore.themeColor = themeColorToHex(currTheme.theme)
|
||||||
uni.setStorageSync("current_theme_color", JSON.stringify(themeColorToHex(currTheme.theme)))
|
uni.setStorageSync("current_theme_color", JSON.stringify(themeColorToHex(currTheme.theme)))
|
||||||
|
|||||||
@ -2,10 +2,7 @@ import { language } from '@/locale'
|
|||||||
import { checkNeedLogin } from '@/utils/auth'
|
import { checkNeedLogin } from '@/utils/auth'
|
||||||
import { redirect, getToken, getSiteId,currRoute, setThemeColor } from '@/utils/common'
|
import { redirect, getToken, getSiteId,currRoute, setThemeColor } from '@/utils/common'
|
||||||
import { memberLog } from '@/app/api/auth'
|
import { memberLog } from '@/app/api/auth'
|
||||||
import useConfigStore from "@/stores/config";
|
|
||||||
import { useShare } from '@/hooks/useShare'
|
import { useShare } from '@/hooks/useShare'
|
||||||
import tabbarJson from '@/tabbar.json'
|
|
||||||
import useSystemStore from '@/stores/system'
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 页面跳转拦截器
|
* 页面跳转拦截器
|
||||||
@ -42,9 +39,6 @@ export const redirectInterceptor = (route: { path: string, query: object }) => {
|
|||||||
pre_route: getCurrentPages()[0]?.route
|
pre_route: getCurrentPages()[0]?.route
|
||||||
})
|
})
|
||||||
|
|
||||||
// #ifdef MP
|
|
||||||
toTabbar(route)
|
|
||||||
// #endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -94,10 +88,6 @@ export const launchInterceptor = () => {
|
|||||||
|
|
||||||
// 添加会员访问日志
|
// 添加会员访问日志
|
||||||
if (getToken()) memberLog({ route: launch.path, params: JSON.stringify(launch.query || {}), pre_route: '' })
|
if (getToken()) memberLog({ route: launch.path, params: JSON.stringify(launch.query || {}), pre_route: '' })
|
||||||
|
|
||||||
// #ifdef MP
|
|
||||||
toTabbar(launch)
|
|
||||||
// #endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -123,17 +113,3 @@ const loadShare = () => {
|
|||||||
if (!shareWhiteList.includes(currRoute() || '')) setShare()
|
if (!shareWhiteList.includes(currRoute() || '')) setShare()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 跳转到tabbar
|
|
||||||
*/
|
|
||||||
const toTabbar = (route: { path: string, query: object }) => {
|
|
||||||
if (tabbarJson.includes(route.path)) {
|
|
||||||
useSystemStore().$patch((state) => {
|
|
||||||
state.currTabbar = route
|
|
||||||
})
|
|
||||||
uni.switchTab({
|
|
||||||
url: '/app/pages/index/tabbar'
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user