添加充值功能、优化内容
This commit is contained in:
10
env/.env
vendored
10
env/.env
vendored
@ -9,18 +9,10 @@ VITE_APP_PUBLIC_BASE=/
|
|||||||
|
|
||||||
# 登录页面
|
# 登录页面
|
||||||
VITE_LOGIN_URL = '/pages/login/login'
|
VITE_LOGIN_URL = '/pages/login/login'
|
||||||
# 第一个请求地址
|
|
||||||
VITE_SERVER_BASEURL = 'https://76458.com'
|
|
||||||
|
|
||||||
VITE_UPLOAD_BASEURL = 'https://76458.com/upload'
|
|
||||||
|
|
||||||
# h5是否需要配置代理
|
# h5是否需要配置代理
|
||||||
VITE_APP_PROXY=true
|
VITE_APP_PROXY=true
|
||||||
VITE_APP_PROXY_PREFIX = '/storeapi'
|
VITE_APP_PROXY_PREFIX = '/storeapi'
|
||||||
|
|
||||||
# 第二个请求地址 (目前alova中可以使用)
|
# 第二个请求地址 (目前alova中可以使用)
|
||||||
VITE_SERVER_BASEURL = 'https://76458.com'
|
# VITE_SERVER_BASEURL = 'https://76458.com'
|
||||||
|
|
||||||
# 上传图片请求地址
|
|
||||||
VITE_UPLOAD_BASEURL = 'https://76458.com/storeapi/upload/image'
|
|
||||||
VITE_UPLOAD_IMAGE_URL = 'https://76458.com/'
|
|
||||||
11
env/.env.development
vendored
11
env/.env.development
vendored
@ -1,6 +1,17 @@
|
|||||||
# 变量必须以 VITE_ 为前缀才能暴露给外部读取
|
# 变量必须以 VITE_ 为前缀才能暴露给外部读取
|
||||||
NODE_ENV = 'development'
|
NODE_ENV = 'development'
|
||||||
|
VITE_NODE_ENV = 'development'
|
||||||
|
|
||||||
# 是否去除console 和 debugger
|
# 是否去除console 和 debugger
|
||||||
VITE_DELETE_CONSOLE = false
|
VITE_DELETE_CONSOLE = false
|
||||||
# 是否开启sourcemap
|
# 是否开启sourcemap
|
||||||
VITE_SHOW_SOURCEMAP = true
|
VITE_SHOW_SOURCEMAP = true
|
||||||
|
|
||||||
|
# 请求地址
|
||||||
|
VITE_SERVER_BASEURL = 'https://76458.com'
|
||||||
|
# 图片上传路径
|
||||||
|
VITE_UPLOAD_BASEURL = 'https://76458.com/upload'
|
||||||
|
|
||||||
|
# 上传图片请求地址
|
||||||
|
VITE_UPLOAD_BASEURL = 'https://76458.com/storeapi/upload/image'
|
||||||
|
VITE_UPLOAD_IMAGE_URL = 'https://76458.com/'
|
||||||
13
env/.env.production
vendored
13
env/.env.production
vendored
@ -1,6 +1,17 @@
|
|||||||
# 变量必须以 VITE_ 为前缀才能暴露给外部读取
|
# 变量必须以 VITE_ 为前缀才能暴露给外部读取
|
||||||
NODE_ENV = 'development'
|
NODE_ENV = 'production'
|
||||||
|
VITE_NODE_ENV = 'production'
|
||||||
|
|
||||||
# 是否去除console 和 debugger
|
# 是否去除console 和 debugger
|
||||||
VITE_DELETE_CONSOLE = true
|
VITE_DELETE_CONSOLE = true
|
||||||
# 是否开启sourcemap
|
# 是否开启sourcemap
|
||||||
VITE_SHOW_SOURCEMAP = false
|
VITE_SHOW_SOURCEMAP = false
|
||||||
|
|
||||||
|
# 请求地址
|
||||||
|
VITE_SERVER_BASEURL = 'https://76458.com'
|
||||||
|
# 图片上传路径
|
||||||
|
VITE_UPLOAD_BASEURL = 'https://76458.com/upload'
|
||||||
|
|
||||||
|
# 上传图片请求地址
|
||||||
|
VITE_UPLOAD_BASEURL = 'https://76458.com/storeapi/upload/image'
|
||||||
|
VITE_UPLOAD_IMAGE_URL = 'https://76458.com/'
|
||||||
@ -109,6 +109,7 @@ export interface IEditRoomParams {
|
|||||||
price?: number
|
price?: number
|
||||||
hours?: number
|
hours?: number
|
||||||
other_describe?: string
|
other_describe?: string
|
||||||
|
weight?: number
|
||||||
}
|
}
|
||||||
export function editRoom(data: IEditRoomParams) {
|
export function editRoom(data: IEditRoomParams) {
|
||||||
return http.Post('/storeapi/store/editRoom', data)
|
return http.Post('/storeapi/store/editRoom', data)
|
||||||
@ -225,3 +226,53 @@ export function getStoreIncomeList(data: IGetStoreIncomeListParams) {
|
|||||||
export function scanVerifyCoupon(qr_sn: string, store_id: number) {
|
export function scanVerifyCoupon(qr_sn: string, store_id: number) {
|
||||||
return http.Post<any>('/storeapi/group/cancelCode', { qr_sn, store_id })
|
return http.Post<any>('/storeapi/group/cancelCode', { qr_sn, store_id })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 充值活动列表
|
||||||
|
*/
|
||||||
|
export function getRechargeActivityList(data: {store_id}) {
|
||||||
|
return http.Post<any>('/storeapi/Store/rechargeLists', data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加充值活动
|
||||||
|
*/
|
||||||
|
export interface IAddRechargeActivityParams {
|
||||||
|
store_id: number
|
||||||
|
title: string
|
||||||
|
price: number
|
||||||
|
gift_price: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export function addRechargeActivity(data: IAddRechargeActivityParams) {
|
||||||
|
return http.Post('/storeapi/Store/addRecharge', data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 编辑充值活动
|
||||||
|
*/
|
||||||
|
export interface IEditRechargeActivityParams {
|
||||||
|
id: number
|
||||||
|
store_id: number
|
||||||
|
title: string
|
||||||
|
price: number
|
||||||
|
gift_price: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export function editRechargeActivity(data: IEditRechargeActivityParams) {
|
||||||
|
return http.Post('/storeapi/Store/editRecharge', data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除充值活动
|
||||||
|
*/
|
||||||
|
export function deleteRechargeActivity(id: number) {
|
||||||
|
return http.Post('/storeapi/Store/delRecharge', { id })
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 充值活动状态
|
||||||
|
*/
|
||||||
|
export function toggleRechargeActivityStatus(data: {store_id: number, state: number}) {
|
||||||
|
return http.Post('/storeapi/Store/operateRecharge', data)
|
||||||
|
}
|
||||||
281
src/bundle/recharge/recharge.vue
Normal file
281
src/bundle/recharge/recharge.vue
Normal file
@ -0,0 +1,281 @@
|
|||||||
|
<route lang="jsonc" type="page">{
|
||||||
|
"needLogin": true,
|
||||||
|
"layout": "default",
|
||||||
|
"style": {
|
||||||
|
"navigationStyle": "custom",
|
||||||
|
"navigationBarBackgroundColor": "#fff"
|
||||||
|
}
|
||||||
|
}</route>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<view class="pb-40rpx">
|
||||||
|
<!-- 创建充值活动 -->
|
||||||
|
<wd-popup v-model="showRechargePopup" lock-scroll custom-style="border-radius: 16rpx;" position="center" @close="Recharge.handleCancel">
|
||||||
|
<view class="w-592rpx pb-36rpx">
|
||||||
|
<view class="text-36rpx text-[#121212] leading-50rpx text-center mt-34rpx">创建充值活动</view>
|
||||||
|
|
||||||
|
<view class="mt-54rpx">
|
||||||
|
<view class="flex items-center justify-center">
|
||||||
|
<view class="font-400 text-30rpx text-[#606266] mr-44rpx">名称</view>
|
||||||
|
<view class="">
|
||||||
|
<wd-input v-model="form.title" type="text" placeholder="输入套餐名称" inputmode="numeric" no-border
|
||||||
|
custom-class="!bg-[#F6F7F8] !rounded-16rpx"
|
||||||
|
custom-input-class="!px-32rpx !h-72rpx !w-408rpx"/>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="mt-20rpx">
|
||||||
|
<view class="flex items-center justify-center">
|
||||||
|
<view class="font-400 text-30rpx text-[#606266] mr-44rpx">充值</view>
|
||||||
|
<view class="">
|
||||||
|
<wd-input v-model="form.price" type="text" placeholder="输入充值金额" inputmode="numeric" no-border
|
||||||
|
custom-class="!bg-[#F6F7F8] !rounded-16rpx"
|
||||||
|
custom-input-class="!px-32rpx !h-72rpx !w-408rpx"/>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="mt-20rpx">
|
||||||
|
<view class="flex items-center justify-center">
|
||||||
|
<view class="font-400 text-30rpx text-[#606266] mr-44rpx">赠送</view>
|
||||||
|
<view>
|
||||||
|
<wd-input v-model="form.gift_price" type="text" placeholder="输入赠送金额" inputmode="numeric" no-border
|
||||||
|
custom-class="!bg-[#F6F7F8] !rounded-16rpx"
|
||||||
|
custom-input-class="!px-32rpx !h-72rpx !w-408rpx"/>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="flex items-center justify-center mt-58rpx">
|
||||||
|
<view class="w-240rpx h-80rpx text-center leading-80rpx text-32rpx text-[#303133] rounded-8rpx bg-[#F6F7F8] mr-30rpx" @click="Recharge.handleCancel">取消</view>
|
||||||
|
<view class="w-240rpx h-80rpx text-center leading-80rpx text-32rpx text-[#fff] rounded-8rpx bg-[#4C9F44]" @click="Recharge.handleAdd">确定</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</wd-popup>
|
||||||
|
|
||||||
|
<navbar title="充值活动" custom-class='!bg-[#F6F7F9]'></navbar>
|
||||||
|
|
||||||
|
<view class="mt-64rpx" v-if="list.length == 0">
|
||||||
|
<view class="flex justify-center">
|
||||||
|
<wd-img :src="`${OSS}images/store/recharge/image1.png`" width="362rpx" height="292rpx"></wd-img>
|
||||||
|
</view>
|
||||||
|
<view class="mt-18rpx font-400 text-28rpx leading-40rpx text-center">暂无活动</view>
|
||||||
|
|
||||||
|
<view class="font-bold text-30rpx leading-42rpx bg-[#4C9F44] text-#fff rounded-8rpx mx-60rpx h-90rpx leading-90rpx text-center mt-50rpx" @click="showRechargePopup = true">
|
||||||
|
创建充值活动
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="bg-white rounded-16rpx mt-20rpx mx-30rpx px-32rpx py-44rpx" v-if="list.length > 0">
|
||||||
|
<view class="flex items-center justify-between">
|
||||||
|
<view>
|
||||||
|
<view class="text-40rpx leading-36rpx text-[#171B2E] font-bold mb-22rpx">门店充值活动</view>
|
||||||
|
<wd-switch v-model="rechargeStatus" size="36rpx" active-color="#4C9F44" @change="Recharge.handleToggle"/>
|
||||||
|
</view>
|
||||||
|
<view>
|
||||||
|
<wd-img :src="`${OSS}images/store/recharge/image2.png`" width="354rpx" height="152rpx"></wd-img>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="mt-20rpx">
|
||||||
|
<view class="" v-for="(item, index) in list" :key="item.id">
|
||||||
|
<view class="text-26rpx leading-38rpx text-[#909399]">{{ item.title }}</view>
|
||||||
|
<view class="flex items-center justify-between mt-12rpx">
|
||||||
|
<view class="">充值{{ item.price }}赠送{{ item.gift_price }}</view>
|
||||||
|
<view class="font-400 text-26rpx leading-36rpx text-[#606266]">
|
||||||
|
<text @click="Recharge.handleDelete(item.id)">删除</text>
|
||||||
|
<wd-divider vertical />
|
||||||
|
<text @click="Recharge.handleEdit(item)">修改</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view v-if="index !== list.length - 1" class="h-2rpx bg-[#F6F6F6] my-22rpx"></view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="flex items-center justify-center mt-100rpx">
|
||||||
|
<view class="w-630rpx h-90rpx text-center leading-90rpx text-32rpx text-[#fff] rounded-46rpx bg-[#4C9F44]" @click="showRechargePopup = true">新增</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 取消订单 -->
|
||||||
|
<wd-message-box selector="wd-message-box-slot"></wd-message-box>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { router } from '@/utils/tools'
|
||||||
|
import { useStoreStore } from '@/store'
|
||||||
|
import { amount } from '@/utils/test'
|
||||||
|
import { useMessage, useToast } from 'wot-design-uni'
|
||||||
|
import { getRechargeActivityList, addRechargeActivity, editRechargeActivity, deleteRechargeActivity, toggleRechargeActivityStatus } from '@/api/store'
|
||||||
|
|
||||||
|
const OSS = inject('OSS')
|
||||||
|
const useStore = useStoreStore()
|
||||||
|
const toast = useToast()
|
||||||
|
const message = useMessage('wd-message-box-slot')
|
||||||
|
|
||||||
|
// 充值活动状态
|
||||||
|
const rechargeStatus = ref<boolean>(false) // 充值活动开启状态
|
||||||
|
const list = ref<Array<any>>([]) // 茶室列表
|
||||||
|
|
||||||
|
|
||||||
|
const showRechargePopup = ref<boolean>(false)
|
||||||
|
|
||||||
|
// 表单
|
||||||
|
const form = ref({
|
||||||
|
title: '', // 套餐名称
|
||||||
|
price: '', // 充值金额
|
||||||
|
gift_price: '', // 赠送金额
|
||||||
|
})
|
||||||
|
const rechargeId = ref<number>(0)
|
||||||
|
|
||||||
|
onLoad((args) => {
|
||||||
|
Recharge.handleInit()
|
||||||
|
})
|
||||||
|
|
||||||
|
const Recharge = {
|
||||||
|
/**
|
||||||
|
* 获取已添加的充值套餐
|
||||||
|
*/
|
||||||
|
handleInit: async () => {
|
||||||
|
const res = await getRechargeActivityList({
|
||||||
|
store_id: useStore.defaultStore.id,
|
||||||
|
})
|
||||||
|
|
||||||
|
rechargeStatus.value = res.recharge_state == 1 ? true : false
|
||||||
|
list.value = res.recharge
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建充值活动
|
||||||
|
*/
|
||||||
|
handleAdd: async () => {
|
||||||
|
if (!form.value.title) {
|
||||||
|
toast.show('请输入名称')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!amount(form.value.price)) {
|
||||||
|
toast.show('请输入正确的充值金额')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!amount(form.value.gift_price)) {
|
||||||
|
toast.show('请输入正确的充值赠送金额')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
toast.loading({
|
||||||
|
loadingType: 'ring',
|
||||||
|
loadingColor: '#4C9F44',
|
||||||
|
msg: '充值中...'
|
||||||
|
})
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (rechargeId.value === 0) {
|
||||||
|
await addRechargeActivity({
|
||||||
|
store_id: useStore.defaultStore.id,
|
||||||
|
title: form.value.title,
|
||||||
|
price: Number(form.value.price),
|
||||||
|
gift_price: Number(form.value.gift_price),
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
await editRechargeActivity({
|
||||||
|
id: rechargeId.value,
|
||||||
|
store_id: useStore.defaultStore.id,
|
||||||
|
title: form.value.title,
|
||||||
|
price: Number(form.value.price),
|
||||||
|
gift_price: Number(form.value.gift_price),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
toast.close()
|
||||||
|
Recharge.handleInit()
|
||||||
|
Recharge.handleCancel()
|
||||||
|
return true
|
||||||
|
} catch (error) {
|
||||||
|
toast.close()
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 编辑充值活动
|
||||||
|
*/
|
||||||
|
handleEdit: (item) => {
|
||||||
|
showRechargePopup.value = true
|
||||||
|
rechargeId.value = item.id
|
||||||
|
form.value = {
|
||||||
|
title: item.title,
|
||||||
|
price: item.price,
|
||||||
|
gift_price: item.gift_price,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除充值活动
|
||||||
|
*/
|
||||||
|
handleDelete: async (id) => {
|
||||||
|
message.confirm({
|
||||||
|
title: '确定删除活动?',
|
||||||
|
msg: '删除活动后无法恢复,是否删除',
|
||||||
|
confirmButtonText: '确定',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
cancelButtonProps: {
|
||||||
|
customClass: '!bg-[#F6F7F8] !text-[#303133] !text-32rpx !leading-44rpx !rounded-8rpx',
|
||||||
|
},
|
||||||
|
confirmButtonProps: {
|
||||||
|
customClass: '!bg-[#4C9F44] !text-[#fff] !text-32rpx !leading-44rpx !rounded-8rpx',
|
||||||
|
}
|
||||||
|
}).then(async (res) => {
|
||||||
|
// 点击确认按钮回调事件
|
||||||
|
if (res.action == 'confirm') {
|
||||||
|
await deleteRechargeActivity(id)
|
||||||
|
Recharge.handleInit()
|
||||||
|
}
|
||||||
|
}).catch(() => {
|
||||||
|
// 点击取消按钮回调事件
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 切换充值活动状态
|
||||||
|
*/
|
||||||
|
handleToggle: async (item) => {
|
||||||
|
await toggleRechargeActivityStatus({
|
||||||
|
store_id: useStore.defaultStore.id,
|
||||||
|
state: item.value ? 1 : 0,
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 取消创建充值活动
|
||||||
|
*/
|
||||||
|
handleCancel: () => {
|
||||||
|
showRechargePopup.value = false
|
||||||
|
rechargeId.value = 0
|
||||||
|
form.value = {
|
||||||
|
title: '',
|
||||||
|
price: '',
|
||||||
|
gift_price: '',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
page {
|
||||||
|
background-color: $cz-page-background;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datetime-picker {
|
||||||
|
:deep() {
|
||||||
|
.wd-cell {
|
||||||
|
background-color: transparent !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@ -91,7 +91,7 @@
|
|||||||
<view class="mt-32rpx">
|
<view class="mt-32rpx">
|
||||||
<view class="font-bold text-32rpx text-[#303133] leading-44rpx">门店图片</view>
|
<view class="font-bold text-32rpx text-[#303133] leading-44rpx">门店图片</view>
|
||||||
<view class="mt-32rpx">
|
<view class="mt-32rpx">
|
||||||
<wd-upload :header="{'token': token}" :file-list="fileList" image-mode="aspectFill" :limit="9" multiple :action="action"
|
<!-- <wd-upload :header="{'token': token}" :file-list="fileList" image-mode="aspectFill" :limit="9" multiple :action="action"
|
||||||
@change="EditStore.handleUploadFile">
|
@change="EditStore.handleUploadFile">
|
||||||
<view
|
<view
|
||||||
class="border-2rpx border-dashed border-[#E5E5E5] w-184rpx h-184rpx flex flex-col items-center justify-center rounded-16rpx">
|
class="border-2rpx border-dashed border-[#E5E5E5] w-184rpx h-184rpx flex flex-col items-center justify-center rounded-16rpx">
|
||||||
@ -101,6 +101,16 @@
|
|||||||
</view>
|
</view>
|
||||||
<view class="font-400 text-26rpx leading-36rpx text-#303133">添加图片</view>
|
<view class="font-400 text-26rpx leading-36rpx text-#303133">添加图片</view>
|
||||||
</view>
|
</view>
|
||||||
|
</wd-upload> -->
|
||||||
|
<wd-upload :header="{'token': token}" v-model:file-list="fileList" image-mode="aspectFill" :limit="9" multiple :action="action" >
|
||||||
|
<view
|
||||||
|
class="border-2rpx border-dashed border-[#E5E5E5] w-184rpx h-184rpx flex flex-col items-center justify-center rounded-16rpx">
|
||||||
|
<view class="">
|
||||||
|
<wd-img width="64rpx" height="64rpx" :src="`${OSS}icon/icon_upload.png`"
|
||||||
|
mode="aspectFill" />
|
||||||
|
</view>
|
||||||
|
<view class="font-400 text-26rpx leading-36rpx text-#303133">添加图片</view>
|
||||||
|
</view>
|
||||||
</wd-upload>
|
</wd-upload>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@ -117,7 +127,7 @@
|
|||||||
import { toast } from '@/utils/toast'
|
import { toast } from '@/utils/toast'
|
||||||
import { getStoreDetails, editStoreInfo } from '@/api/store'
|
import { getStoreDetails, editStoreInfo } from '@/api/store'
|
||||||
import { useStoreStore } from '@/store'
|
import { useStoreStore } from '@/store'
|
||||||
import { router } from '@/utils/tools'
|
import { router, removeImageUrlPrefix } from '@/utils/tools'
|
||||||
|
|
||||||
const OSS = inject('OSS')
|
const OSS = inject('OSS')
|
||||||
const useStore = useStoreStore()
|
const useStore = useStoreStore()
|
||||||
@ -236,25 +246,25 @@
|
|||||||
/**
|
/**
|
||||||
* 图片选择/删除
|
* 图片选择/删除
|
||||||
*/
|
*/
|
||||||
handleUploadFile: ({ fileList: files }) => {
|
// handleUploadFile: ({ fileList: files }) => {
|
||||||
let url = ''
|
// let url = ''
|
||||||
let name = ''
|
// let name = ''
|
||||||
let response = null
|
// let response = null
|
||||||
|
|
||||||
const res = files.map(item => {
|
// const res = files.map(item => {
|
||||||
if (item.response) {
|
// if (item.response) {
|
||||||
response = JSON.parse(item.response)
|
// response = JSON.parse(item.response)
|
||||||
url = response.data.url
|
// url = response.data.url
|
||||||
name = response.data.name
|
// name = response.data.name
|
||||||
}
|
// }
|
||||||
return {
|
// return {
|
||||||
name: name || item.name,
|
// name: name || item.name,
|
||||||
url: url || item.url
|
// url: url || item.url
|
||||||
}
|
// }
|
||||||
})
|
// })
|
||||||
|
|
||||||
EditStore.fileList = res
|
// EditStore.fileList = res
|
||||||
},
|
// },
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 保存门店信息
|
* 保存门店信息
|
||||||
@ -290,12 +300,7 @@
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
form.value.image_arr = EditStore.fileList.map(item => {
|
form.value.image_arr = removeImageUrlPrefix(fileList.value)
|
||||||
if (typeof item.url === 'string') {
|
|
||||||
return item.url.replace(import.meta.env.VITE_UPLOAD_IMAGE_URL, '')
|
|
||||||
}
|
|
||||||
return item.url
|
|
||||||
})
|
|
||||||
|
|
||||||
form.value.image = form.value.image_arr[0]
|
form.value.image = form.value.image_arr[0]
|
||||||
form.value.id = useStore.defaultStore.id
|
form.value.id = useStore.defaultStore.id
|
||||||
|
|||||||
@ -40,13 +40,19 @@
|
|||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view >
|
<view >
|
||||||
<!-- 使用说明 -->
|
<!-- 其他说明 -->
|
||||||
<view class="bg-white rounded-16rpx py-26rpx px-30rpx mt-24rpx mx-30rpx">
|
<view class="bg-white rounded-16rpx py-26rpx px-30rpx mt-24rpx mx-30rpx">
|
||||||
<view class="text-[#303133] text-32rpx leading-44rpx font-bold mb-24rpx">使用说明</view>
|
<view class="text-[#303133] text-32rpx leading-44rpx font-bold mb-24rpx">其他说明</view>
|
||||||
<view class="">
|
<view class="">
|
||||||
<rich-text :nodes="teaRoom.textarea1"></rich-text>
|
<rich-text :nodes="teaRoom.textarea1"></rich-text>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
|
<!-- 其他说明 -->
|
||||||
|
<view class="bg-white rounded-16rpx py-26rpx px-30rpx mt-24rpx mx-30rpx">
|
||||||
|
<view class="text-[#303133] text-32rpx leading-44rpx font-bold mb-24rpx">起订时间</view>
|
||||||
|
<view class="text-[26rpx] text-[#606266] leading-36rpx">{{ teaRoom?.room?.hours }}小时起订</view>
|
||||||
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@ -63,7 +69,14 @@
|
|||||||
|
|
||||||
// 包间内容
|
// 包间内容
|
||||||
const roomId = ref<number>(0) // 门店ID
|
const roomId = ref<number>(0) // 门店ID
|
||||||
const teaRoom = ref<any>({})
|
const teaRoom = ref<any>({
|
||||||
|
room: {
|
||||||
|
price: 0,
|
||||||
|
sold: 0,
|
||||||
|
title: '',
|
||||||
|
hours: 0
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
onLoad((args) => {
|
onLoad((args) => {
|
||||||
roomId.value = Number(args.id)
|
roomId.value = Number(args.id)
|
||||||
@ -79,7 +92,7 @@
|
|||||||
console.log("🚀 ~ res:", res)
|
console.log("🚀 ~ res:", res)
|
||||||
teaRoom.value = res.details
|
teaRoom.value = res.details
|
||||||
console.log("🚀 ~ teaRoom.value:", teaRoom.value)
|
console.log("🚀 ~ teaRoom.value:", teaRoom.value)
|
||||||
swiperList.value = teaRoom.value.img_arr
|
swiperList.value = teaRoom.value.room.room_arr
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
177
src/bundle/user/recharge-detail.vue
Normal file
177
src/bundle/user/recharge-detail.vue
Normal file
@ -0,0 +1,177 @@
|
|||||||
|
<route lang="jsonc" type="page">{
|
||||||
|
"layout": "default",
|
||||||
|
"style": {
|
||||||
|
"navigationStyle": "custom",
|
||||||
|
"navigationBarBackgroundColor": "#fff"
|
||||||
|
}
|
||||||
|
}</route>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<view>
|
||||||
|
<navbar title="订单详情" custom-class='!bg-[#fff]'></navbar>
|
||||||
|
|
||||||
|
<view class="mt-38rpx">
|
||||||
|
<view class="flex flex-col items-center justify-center">
|
||||||
|
<view class="font-bold text-30rpx leading-42rpx text-[#303133]">门店充值1000送500</view>
|
||||||
|
<view class="mt-18rpx text-40rpx leading-56rpx text-[#303133]">¥1000.00</view>
|
||||||
|
<view class="flex items-center mt-8rpx">
|
||||||
|
<wd-img :src="`${OSS}icon/icon_pay_success.png`" width="28rpx" height="28rpx"></wd-img>
|
||||||
|
<view class="text-26rpx leading-36rpx text-[#606266] ml-12rpx">充值成功</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="mt-112rpx text-28rpx leading-40rpx text-[#606266] px-30rpx">
|
||||||
|
<view class="flex items-center justify-between">
|
||||||
|
<view>充值门店</view>
|
||||||
|
<view>茶址.24小时智能茶室(中新店)</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="flex items-center justify-between mt-24rpx">
|
||||||
|
<view>用户昵称</view>
|
||||||
|
<view>茶址.24小时智能茶室(中新店)</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="flex items-center justify-between mt-24rpx">
|
||||||
|
<view>手机</view>
|
||||||
|
<view>茶址.24小时智能茶室(中新店)</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="flex items-center justify-between mt-24rpx">
|
||||||
|
<view>充值金额</view>
|
||||||
|
<view>¥1000</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="flex items-center justify-between mt-24rpx">
|
||||||
|
<view>赠金</view>
|
||||||
|
<view>¥1000</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="h-2rpx bg-[#E5E5E5] mt-12rpx mb-32rpx"></view>
|
||||||
|
|
||||||
|
<view class="flex items-center justify-between">
|
||||||
|
<view>订单编号</view>
|
||||||
|
<view>
|
||||||
|
<view>
|
||||||
|
<text>11</text>
|
||||||
|
<wd-divider vertical />
|
||||||
|
<text class="text-[#4C9F44]" @click="copy(1)">复制</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="flex items-center justify-between mt-24rpx">
|
||||||
|
<view>交易方式</view>
|
||||||
|
<view>微信支付</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="flex items-center justify-between mt-24rpx">
|
||||||
|
<view>创建时间</view>
|
||||||
|
<view>微信支付</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="flex items-center justify-between mt-24rpx">
|
||||||
|
<view>付款时间</view>
|
||||||
|
<view>微信支付</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { router } from '@/utils/tools'
|
||||||
|
import { toTimes, copy } from '@/utils/tools'
|
||||||
|
import { getStoreMemberList } from '@/api/store'
|
||||||
|
import { onPageScroll, onReachBottom } from '@dcloudio/uni-app'
|
||||||
|
import useMescroll from "@/uni_modules/mescroll-uni/hooks/useMescroll.js"
|
||||||
|
import { useStoreStore } from '@/store'
|
||||||
|
|
||||||
|
const OSS = inject('OSS')
|
||||||
|
const useStore = useStoreStore()
|
||||||
|
|
||||||
|
// mescroll
|
||||||
|
const { mescrollInit, downCallback, getMescroll } = useMescroll(onPageScroll, onReachBottom) // 调用mescroll的hook
|
||||||
|
const downOption = {
|
||||||
|
auto: true
|
||||||
|
}
|
||||||
|
const upOption = {
|
||||||
|
auto: true,
|
||||||
|
textNoMore: '~ 已经到底啦 ~', //无更多数据的提示
|
||||||
|
}
|
||||||
|
const list = ref<Array<any>>([]) // 茶室列表
|
||||||
|
|
||||||
|
// 日期过滤
|
||||||
|
const value = ref<number>(Date.now())
|
||||||
|
|
||||||
|
onLoad((args) => {
|
||||||
|
})
|
||||||
|
|
||||||
|
const RechargeDetail = {
|
||||||
|
/**
|
||||||
|
* 分页加载
|
||||||
|
* @param mescroll
|
||||||
|
*/
|
||||||
|
upCallback: (mescroll) => {
|
||||||
|
// 需要留一下数据为空的时候显示的空数据图标内容
|
||||||
|
// const filter = {
|
||||||
|
// page: mescroll.num,
|
||||||
|
// size: mescroll.size,
|
||||||
|
// store_id: useStore.defaultStore.id,
|
||||||
|
// }
|
||||||
|
|
||||||
|
// getStoreMemberList(filter).then((res) => {
|
||||||
|
// const curPageData = res.list || [] // 当前页数据
|
||||||
|
// if(mescroll.num == 1) list.value = [] // 第一页需手动制空列表
|
||||||
|
// list.value = list.value.concat(curPageData) //追加新数据
|
||||||
|
// mescroll.endSuccess(curPageData.length, Boolean(res.more))
|
||||||
|
// }).catch(() => {
|
||||||
|
mescroll.endErr() // 请求失败, 结束加载
|
||||||
|
// })
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 确认日期
|
||||||
|
* @param date
|
||||||
|
*/
|
||||||
|
handleConfirmDate: (date: {value: number}) => {
|
||||||
|
list.value = []
|
||||||
|
getMescroll().resetUpScroll();
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 跳转用户详情
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
handleToDetail: (id) => {
|
||||||
|
uni.$on('refreshUserDetail', () => {
|
||||||
|
uni.$off('refreshUserDetail')
|
||||||
|
list.value = []
|
||||||
|
getMescroll().resetUpScroll()
|
||||||
|
})
|
||||||
|
router.navigateTo(`/bundle/user/user-detail?id=${id}`)
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 搜索
|
||||||
|
*/
|
||||||
|
handleSearch: () => {
|
||||||
|
list.value = []
|
||||||
|
getMescroll().resetUpScroll()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
page {
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datetime-picker {
|
||||||
|
:deep() {
|
||||||
|
.wd-cell {
|
||||||
|
background-color: transparent !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
155
src/bundle/user/recharge-list.vue
Normal file
155
src/bundle/user/recharge-list.vue
Normal file
@ -0,0 +1,155 @@
|
|||||||
|
<route lang="jsonc" type="page">{
|
||||||
|
"layout": "default",
|
||||||
|
"style": {
|
||||||
|
"navigationStyle": "custom",
|
||||||
|
"navigationBarBackgroundColor": "#fff"
|
||||||
|
}
|
||||||
|
}</route>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<view>
|
||||||
|
<navbar title="充值明细" custom-class='!bg-[#F6F7F8]'></navbar>
|
||||||
|
|
||||||
|
<view class="">
|
||||||
|
<view class="flex items-center">
|
||||||
|
<view class="font-bold text-[#303133] datetime-picker">
|
||||||
|
<wd-datetime-picker v-model="value" :maxDate="Date.now()" type="year-month" @confirm="RechargeList.handleConfirmDate"></wd-datetime-picker>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="flex items-center font-400 text-24rpx leading-34rpx text-[#606266] mx-30rpx">
|
||||||
|
<view class="mr-130rpx">充值¥2000.46</view>
|
||||||
|
<view class="">赠金¥500.00</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="mx-30rpx mt-20rpx">
|
||||||
|
<mescroll-body ref="mescrollItem0" @init="mescrollInit" @down="downCallback" @up="RechargeList.upCallback" :down="downOption" :up="upOption">
|
||||||
|
<view class="bg-white rounded-16rpx px-30rpx py-28rpx mb-20rpx" @click="router.navigateTo(`/bundle/user/recharge-detail?id=1`)">
|
||||||
|
<!-- <view class="bg-white rounded-16rpx px-30rpx py-28rpx mb-20rpx" @click="router.navigateTo(`/bundle/user/recharge-detail?id=${item.id}`)" v-for="item in list" :key="item.id"> -->
|
||||||
|
<view class="flex items-center justify-between">
|
||||||
|
<view class="font-bold text-30rpx text-[#303133] leading-42rpx">门店充值1000送500</view>
|
||||||
|
<view class="flex items-center">
|
||||||
|
<view class="text-[#FF5951] font-bold text-30rpx leading-42rpx">+1000.00</view>
|
||||||
|
<view class="">
|
||||||
|
<wd-icon name="arrow-right" size="32rpx" color="#666"></wd-icon>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="mt-12rpx text-24rpx leading-34rpx text-[#606266] flex items-center">
|
||||||
|
<view class="w-300rpx mr-52rpx">客户昵称:茶址客户昵称</view>
|
||||||
|
<view class="w-240rpx">手机:13585423654</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="mt-12rpx text-24rpx leading-34rpx text-[#F29747] flex items-center">
|
||||||
|
<view class="w-300rpx mr-52rpx">充值金额:¥1000</view>
|
||||||
|
<view class="w-240rpx">赠金:¥500</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="mt-12rpx text-24rpx leading-34rpx text-[#909399]">
|
||||||
|
充值时间:2025-08-05 19:09:52
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</mescroll-body>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { router } from '@/utils/tools'
|
||||||
|
import { toTimes, copy } from '@/utils/tools'
|
||||||
|
import { getStoreMemberList } from '@/api/store'
|
||||||
|
import { onPageScroll, onReachBottom } from '@dcloudio/uni-app'
|
||||||
|
import useMescroll from "@/uni_modules/mescroll-uni/hooks/useMescroll.js"
|
||||||
|
import { useStoreStore } from '@/store'
|
||||||
|
|
||||||
|
const OSS = inject('OSS')
|
||||||
|
const useStore = useStoreStore()
|
||||||
|
|
||||||
|
// mescroll
|
||||||
|
const { mescrollInit, downCallback, getMescroll } = useMescroll(onPageScroll, onReachBottom) // 调用mescroll的hook
|
||||||
|
const downOption = {
|
||||||
|
auto: true
|
||||||
|
}
|
||||||
|
const upOption = {
|
||||||
|
auto: true,
|
||||||
|
textNoMore: '~ 已经到底啦 ~', //无更多数据的提示
|
||||||
|
}
|
||||||
|
const list = ref<Array<any>>([]) // 茶室列表
|
||||||
|
|
||||||
|
// 日期过滤
|
||||||
|
const value = ref<number>(Date.now())
|
||||||
|
|
||||||
|
onLoad((args) => {
|
||||||
|
})
|
||||||
|
|
||||||
|
const RechargeList = {
|
||||||
|
/**
|
||||||
|
* 分页加载
|
||||||
|
* @param mescroll
|
||||||
|
*/
|
||||||
|
upCallback: (mescroll) => {
|
||||||
|
// 需要留一下数据为空的时候显示的空数据图标内容
|
||||||
|
// const filter = {
|
||||||
|
// page: mescroll.num,
|
||||||
|
// size: mescroll.size,
|
||||||
|
// store_id: useStore.defaultStore.id,
|
||||||
|
// }
|
||||||
|
|
||||||
|
// getStoreMemberList(filter).then((res) => {
|
||||||
|
// const curPageData = res.list || [] // 当前页数据
|
||||||
|
// if(mescroll.num == 1) list.value = [] // 第一页需手动制空列表
|
||||||
|
// list.value = list.value.concat(curPageData) //追加新数据
|
||||||
|
// mescroll.endSuccess(curPageData.length, Boolean(res.more))
|
||||||
|
// }).catch(() => {
|
||||||
|
mescroll.endErr() // 请求失败, 结束加载
|
||||||
|
// })
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 确认日期
|
||||||
|
* @param date
|
||||||
|
*/
|
||||||
|
handleConfirmDate: (date: {value: number}) => {
|
||||||
|
list.value = []
|
||||||
|
getMescroll().resetUpScroll();
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 跳转用户详情
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
handleToDetail: (id) => {
|
||||||
|
uni.$on('refreshUserDetail', () => {
|
||||||
|
uni.$off('refreshUserDetail')
|
||||||
|
list.value = []
|
||||||
|
getMescroll().resetUpScroll()
|
||||||
|
})
|
||||||
|
router.navigateTo(`/bundle/user/user-detail?id=${id}`)
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 搜索
|
||||||
|
*/
|
||||||
|
handleSearch: () => {
|
||||||
|
list.value = []
|
||||||
|
getMescroll().resetUpScroll()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
page {
|
||||||
|
background-color: $cz-page-background;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datetime-picker {
|
||||||
|
:deep() {
|
||||||
|
.wd-cell {
|
||||||
|
background-color: transparent !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@ -7,9 +7,77 @@
|
|||||||
}</route>
|
}</route>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<view>
|
<view class="user-list-bg">
|
||||||
<view>
|
<view class="user-list-bg w-[100%] sticky top-0 left-0 z-50">
|
||||||
<navbar title="用户列表" custom-class="!bg-[transparent]"></navbar>
|
<wd-navbar safeAreaInsetTop :bordered="false" custom-style="background-color: transparent !important;">
|
||||||
|
<template #left>
|
||||||
|
<view class="flex items-center" @click="router.navigateBack()">
|
||||||
|
<view class=" mt-4rpx">
|
||||||
|
<wd-icon name="thin-arrow-left" size="30rpx"></wd-icon>
|
||||||
|
</view>
|
||||||
|
<view class="text-[#303133] text-36rpx ml-24rpx leading-48rpx">客户列表</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
</wd-navbar>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="mt-12rpx">
|
||||||
|
<view class="relative flex justify-center">
|
||||||
|
<wd-img :src="`${OSS}images/store/user/image4.png`" width="690rpx" height="280rpx"></wd-img>
|
||||||
|
<view class="absolute left-50% top-50% -translate-x-1/2 -translate-y-1/2 w-full">
|
||||||
|
<view>
|
||||||
|
<view class="flex items-center justify-between px-30rpx">
|
||||||
|
<view class="ml-48rpx">
|
||||||
|
<view class="font-500 text-30rpx leading-42rpx text-[#121212]">门店预充值(未消费)</view>
|
||||||
|
<view class="mt-6rpx text-24rpx leading-34rpx text-[#7B8290]">{{ useStore.defaultStore.name }}</view>
|
||||||
|
</view>
|
||||||
|
<view class="relative mt-20rpx" @click="router.navigateTo('/bundle/user/recharge-list')">
|
||||||
|
<wd-img :src="`${OSS}images/store/user/image5.png`" width="178rpx" height="50rpx"></wd-img>
|
||||||
|
<view class="absolute left-50% top-50% -translate-x-1/2 -translate-y-1/2 flex justify-center items-center w-full">
|
||||||
|
<view class="font-400 text-26rpx text-[#333] mt-[-8rpx]">充值明细</view>
|
||||||
|
<view class="mt-[-12rpx]">
|
||||||
|
<wd-icon name="arrow-right" size="32rpx" color="#666"></wd-icon>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="text-[#7B4FE1] flex items-center ml-78rpx mt-30rpx">
|
||||||
|
<view class="flex flex-col items-center justify-center mr-100rpx">
|
||||||
|
<view class="font-bold text-32rpx leading-44rpx">150,000.00</view>
|
||||||
|
<view class="mt-12rpx font-400 text-28rpx leading-40rpx">实际充值(元)</view>
|
||||||
|
</view>
|
||||||
|
<view class="flex flex-col items-center justify-center">
|
||||||
|
<view class="font-bold text-32rpx leading-44rpx">10,000.00</view>
|
||||||
|
<view class="mt-12rpx font-400 text-28rpx leading-40rpx">赠金(元)</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="mt-40rpx">
|
||||||
|
<view class="font-bold text-32rpx leading-44rpx mx-30rpx">客户信息</view>
|
||||||
|
<view class="search-box relative">
|
||||||
|
<wd-search placeholder="搜索客户信息" cancel-txt="搜索" placeholder-left hide-cancel custom-input-class="!h-72rpx !pr-160rpx" v-model="keywords" light >
|
||||||
|
</wd-search>
|
||||||
|
<view
|
||||||
|
class="absolute top-1/2 -translate-y-1/2 right-34rpx w-142rpx h-64rpx leading-64rpx text-center rounded-32rpx bg-#4C9F44 text-#fff font-400 text-32rpx"
|
||||||
|
@click="UserList.handleSearch">
|
||||||
|
搜索
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="flex items-center mx-30rpx">
|
||||||
|
<view
|
||||||
|
class="mr-12rpx bg-white rounded-12rpx w-132rpx h-56rpx text-center leading-50rpx font-400 text-28rpx leading-40rpx text-[#303133] border-2rpx border-solid border-[#fff]"
|
||||||
|
:class="{active: item.type === currentTab }"
|
||||||
|
v-for="item in menuTab" :key="item.type"
|
||||||
|
@click="UserList.handleChangeTab(item.type)">
|
||||||
|
{{ item.name }}
|
||||||
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view>
|
<view>
|
||||||
@ -66,7 +134,13 @@
|
|||||||
textNoMore: '~ 已经到底啦 ~', //无更多数据的提示
|
textNoMore: '~ 已经到底啦 ~', //无更多数据的提示
|
||||||
}
|
}
|
||||||
const list = ref<Array<any>>([]) // 茶室列表
|
const list = ref<Array<any>>([]) // 茶室列表
|
||||||
|
const keywords = ref<string>('') // 搜索关键词
|
||||||
|
const menuTab = ref([
|
||||||
|
{type: 'all', name: '全部'},
|
||||||
|
{type: 'recharge', name: '充值卡'},
|
||||||
|
{type: 'vip', name: '会员卡'},
|
||||||
|
])
|
||||||
|
const currentTab = ref<string>('all')
|
||||||
|
|
||||||
onLoad((args) => {
|
onLoad((args) => {
|
||||||
})
|
})
|
||||||
@ -78,20 +152,20 @@
|
|||||||
*/
|
*/
|
||||||
upCallback: (mescroll) => {
|
upCallback: (mescroll) => {
|
||||||
// 需要留一下数据为空的时候显示的空数据图标内容
|
// 需要留一下数据为空的时候显示的空数据图标内容
|
||||||
const filter = {
|
// const filter = {
|
||||||
page: mescroll.num,
|
// page: mescroll.num,
|
||||||
size: mescroll.size,
|
// size: mescroll.size,
|
||||||
store_id: useStore.defaultStore.id,
|
// store_id: useStore.defaultStore.id,
|
||||||
}
|
// }
|
||||||
|
|
||||||
getStoreMemberList(filter).then((res) => {
|
// getStoreMemberList(filter).then((res) => {
|
||||||
const curPageData = res.list || [] // 当前页数据
|
// const curPageData = res.list || [] // 当前页数据
|
||||||
if(mescroll.num == 1) list.value = [] // 第一页需手动制空列表
|
// if(mescroll.num == 1) list.value = [] // 第一页需手动制空列表
|
||||||
list.value = list.value.concat(curPageData) //追加新数据
|
// list.value = list.value.concat(curPageData) //追加新数据
|
||||||
mescroll.endSuccess(curPageData.length, Boolean(res.more))
|
// mescroll.endSuccess(curPageData.length, Boolean(res.more))
|
||||||
}).catch(() => {
|
// }).catch(() => {
|
||||||
mescroll.endErr() // 请求失败, 结束加载
|
mescroll.endErr() // 请求失败, 结束加载
|
||||||
})
|
// })
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -103,7 +177,6 @@
|
|||||||
uni.$off('refreshUserDetail')
|
uni.$off('refreshUserDetail')
|
||||||
list.value = []
|
list.value = []
|
||||||
getMescroll().resetUpScroll()
|
getMescroll().resetUpScroll()
|
||||||
|
|
||||||
})
|
})
|
||||||
router.navigateTo(`/bundle/user/user-detail?id=${id}`)
|
router.navigateTo(`/bundle/user/user-detail?id=${id}`)
|
||||||
},
|
},
|
||||||
@ -116,6 +189,23 @@
|
|||||||
uni.makePhoneCall({
|
uni.makePhoneCall({
|
||||||
phoneNumber: phone
|
phoneNumber: phone
|
||||||
})
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 切换tab
|
||||||
|
*/
|
||||||
|
handleChangeTab: (type: string) => {
|
||||||
|
currentTab.value = type
|
||||||
|
list.value = []
|
||||||
|
getMescroll().resetUpScroll()
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 搜索
|
||||||
|
*/
|
||||||
|
handleSearch: () => {
|
||||||
|
list.value = []
|
||||||
|
getMescroll().resetUpScroll()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
@ -124,4 +214,26 @@
|
|||||||
page {
|
page {
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.user-list-bg {
|
||||||
|
background-color: $cz-page-background;
|
||||||
|
background-image: url(#{$OSS}images/store/user/image3.png);
|
||||||
|
background-size: 100%;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-box {
|
||||||
|
:deep() {
|
||||||
|
.wd-search {
|
||||||
|
background: transparent !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.active {
|
||||||
|
border-radius: 12rpx;
|
||||||
|
border: 2rpx solid #4C9F44;
|
||||||
|
background-color: #F0F6EF;
|
||||||
|
color: #4C9F44;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@ -59,24 +59,29 @@
|
|||||||
|
|
||||||
<!-- 菜单栏 -->
|
<!-- 菜单栏 -->
|
||||||
<view class="flex justify-between mt-40rpx">
|
<view class="flex justify-between mt-40rpx">
|
||||||
<view class="flex flex-col justify-center items-center w-[25%]" @click="showScanMenu = true">
|
<view class="flex flex-col justify-center items-center w-[20%]" @click="showScanMenu = true">
|
||||||
<wd-img width="90rpx" height="90rpx" :src="`${OSS}images/store/home/image3.png`" mode="aspectFit" />
|
<wd-img width="90rpx" height="90rpx" :src="`${OSS}images/store/home/image3.png`" mode="aspectFit" />
|
||||||
<view class="font-400 text-24rpx text-[#303133] leading-34rpx">扫码验券</view>
|
<view class="font-400 text-24rpx text-[#303133] leading-34rpx">扫码验券</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view class="flex flex-col justify-center items-center w-[25%]" @click="router.navigateTo('/bundle/finance/finance')">
|
<view class="flex flex-col justify-center items-center w-[20%]" @click="router.navigateTo('/bundle/finance/finance')">
|
||||||
<wd-img width="90rpx" height="90rpx" :src="`${OSS}images/store/home/image4.png`" mode="aspectFit" />
|
<wd-img width="90rpx" height="90rpx" :src="`${OSS}images/store/home/image4.png`" mode="aspectFit" />
|
||||||
<view class="font-400 text-24rpx text-[#303133] leading-34rpx">财务管理</view>
|
<view class="font-400 text-24rpx text-[#303133] leading-34rpx">财务管理</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view class="flex flex-col justify-center items-center w-[25%]">
|
<view class="flex flex-col justify-center items-center w-[20%]">
|
||||||
<wd-img width="90rpx" height="90rpx" :src="`${OSS}images/store/home/image5.png`" mode="aspectFit" @click="router.navigateTo('/bundle/setmeal/setmeal')" />
|
<wd-img width="90rpx" height="90rpx" :src="`${OSS}images/store/home/image5.png`" mode="aspectFit" @click="router.navigateTo('/bundle/setmeal/setmeal')" />
|
||||||
<view class="font-400 text-24rpx text-[#303133] leading-34rpx">套餐管理</view>
|
<view class="font-400 text-24rpx text-[#303133] leading-34rpx">套餐管理</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view class="flex flex-col justify-center items-center w-[25%]" @click="router.navigateTo('/bundle/user/user-list')">
|
<view class="flex flex-col justify-center items-center w-[20%]" @click="router.navigateTo('/bundle/user/user-list')">
|
||||||
<wd-img width="90rpx" height="90rpx" :src="`${OSS}images/store/home/image6.png`" mode="aspectFit" />
|
<wd-img width="90rpx" height="90rpx" :src="`${OSS}images/store/home/image6.png`" mode="aspectFit" />
|
||||||
<view class="font-400 text-24rpx text-[#303133] leading-34rpx">用户列表</view>
|
<view class="font-400 text-24rpx text-[#303133] leading-34rpx">客户列表</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="flex flex-col justify-center items-center w-[20%]" @click="router.navigateTo('/bundle/recharge/recharge')">
|
||||||
|
<wd-img width="90rpx" height="90rpx" :src="`${OSS}images/store/home/image8.png`" mode="aspectFit" />
|
||||||
|
<view class="font-400 text-24rpx text-[#303133] leading-34rpx">充值活动</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
|
|||||||
@ -89,23 +89,24 @@
|
|||||||
handleToLogin: async () => {
|
handleToLogin: async () => {
|
||||||
// TODO 如果是edit的话就是修改手机号
|
// TODO 如果是edit的话就是修改手机号
|
||||||
if (!testMobile(model.mobile)) {
|
if (!testMobile(model.mobile)) {
|
||||||
toast.info('请输入正确的账号')
|
toast.show('请输入正确的账号')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!model.passowrd) {
|
if (!model.passowrd) {
|
||||||
toast.info('请输入密码')
|
toast.show('请输入密码')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
uni.showLoading({
|
toast.loading({
|
||||||
title: '登录中...'
|
loadingType: 'ring',
|
||||||
|
loadingColor: '#4C9F44',
|
||||||
|
msg: '登录中...'
|
||||||
})
|
})
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
const res = await userStore.mobileLogin(model.mobile, model.passowrd, 1, 1, 1)
|
const res = await userStore.mobileLogin(model.mobile, model.passowrd, 1, 1, 1)
|
||||||
uni.hideLoading()
|
toast.close()
|
||||||
|
|
||||||
// 这里记录用户账号密码,下次自动填充
|
// 这里记录用户账号密码,下次自动填充
|
||||||
uni.setStorageSync('loginMobile', model.mobile)
|
uni.setStorageSync('loginMobile', model.mobile)
|
||||||
@ -116,11 +117,9 @@
|
|||||||
router.reLaunch('/pages/index/index')
|
router.reLaunch('/pages/index/index')
|
||||||
}, 1000)
|
}, 1000)
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
toast.info('登录失败,请稍后重试')
|
toast.close()
|
||||||
uni.hideLoading()
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
<route lang="jsonc" type="page">{
|
<route lang="jsonc" type="page">{
|
||||||
"layout": "tabbar",
|
"layout": "tabbar",
|
||||||
|
"needLogin": true,
|
||||||
"style": {
|
"style": {
|
||||||
"navigationStyle": "custom"
|
"navigationStyle": "custom"
|
||||||
}
|
}
|
||||||
@ -67,7 +68,7 @@
|
|||||||
</view>
|
</view>
|
||||||
<view class="mb-16rpx flex items-center text-24rpx text-[#606266] leading-40rpx">
|
<view class="mb-16rpx flex items-center text-24rpx text-[#606266] leading-40rpx">
|
||||||
<text class="w-140rpx">门店ID:</text>
|
<text class="w-140rpx">门店ID:</text>
|
||||||
<text class="flex-1 text-[#000]">{{ storeInfo.id }}</text>
|
<text class="flex-1 text-[#000]">{{ storeInfo.id > 0 ? storeInfo.id : '-'}}</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="mb-16rpx flex items-center text-24rpx text-[#606266] leading-40rpx">
|
<view class="mb-16rpx flex items-center text-24rpx text-[#606266] leading-40rpx">
|
||||||
<text class="w-140rpx">门店地址:</text>
|
<text class="w-140rpx">门店地址:</text>
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
<!-- 使用 type="home" 属性设置首页,其他页面不需要设置,默认为page -->
|
<!-- 使用 type="home" 属性设置首页,其他页面不需要设置,默认为page -->
|
||||||
<route lang="jsonc">{
|
<route lang="jsonc">{
|
||||||
|
"needLogin": true,
|
||||||
"layout": "tabbar",
|
"layout": "tabbar",
|
||||||
"style": {
|
"style": {
|
||||||
// 'custom' 表示开启自定义导航栏,默认 'default'
|
// 'custom' 表示开启自定义导航栏,默认 'default'
|
||||||
|
|||||||
@ -80,6 +80,8 @@
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!-- 团购视频 -->
|
<!-- 团购视频 -->
|
||||||
<!-- <view class="mt-28rpx">
|
<!-- <view class="mt-28rpx">
|
||||||
<view class="mb-28rpx flex items-center">
|
<view class="mb-28rpx flex items-center">
|
||||||
@ -122,20 +124,47 @@
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="text-26rpx text-[#9CA3AF] font-400 leading-36rpx">
|
<view class="text-26rpx text-[#9CA3AF] font-400 leading-36rpx">
|
||||||
可添加1张图片
|
可添加1-9张图片
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="flex flex-wrap items-center gap-16rpx">
|
<view class="flex flex-wrap items-center gap-16rpx">
|
||||||
<wd-upload
|
<wd-upload
|
||||||
:header="{'token': token}"
|
:header="{'token': token}"
|
||||||
:file-list="fileList"
|
v-model:file-list="fileList"
|
||||||
:limit="1"
|
:limit="9"
|
||||||
|
multiple
|
||||||
image-mode="scaleToFill"
|
image-mode="scaleToFill"
|
||||||
:action="action"
|
:action="action">
|
||||||
@success="RoomDetail.handleUploadSuccess">
|
|
||||||
</wd-upload>
|
</wd-upload>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
|
<!-- 排序 -->
|
||||||
|
<view class="mt-28rpx add-textarea">
|
||||||
|
<view class="flex items-center justify-between mb-20rpx">
|
||||||
|
<view class="mr-10rpx text-32rpx text-[#303133] font-bold leading-44rpx">
|
||||||
|
包间排序
|
||||||
|
</view>
|
||||||
|
<view class="text-24rpx text-[#9CA3AF] font-400 leading-34rpx">
|
||||||
|
数字越大排名越靠前
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<wd-input v-model="form.weight" no-border placeholder="请输入包间排序" :maxlength="10"
|
||||||
|
custom-class="!bg-[#F6F7F8] !rounded-16rpx !px-28rpx !py-20rpx" />
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 推荐人数 -->
|
||||||
|
<view class="mt-28rpx add-textarea">
|
||||||
|
<view class="flex items-center justify-between mb-20rpx">
|
||||||
|
<view class="mr-10rpx text-32rpx text-[#303133] font-bold leading-44rpx">
|
||||||
|
推荐人数
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<wd-input v-model="form.people_number" no-border placeholder="推荐人数1-5人" :maxlength="10"
|
||||||
|
custom-class="!bg-[#F6F7F8] !rounded-16rpx !px-28rpx !py-20rpx" />
|
||||||
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<!-- 规格与价格 -->
|
<!-- 规格与价格 -->
|
||||||
@ -397,7 +426,7 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { getRoomDetails, getRoomLabelList, handleCreateTag, handleDeleteTag, editRoom } from '@/api/store'
|
import { getRoomDetails, getRoomLabelList, handleCreateTag, handleDeleteTag, editRoom } from '@/api/store'
|
||||||
import { updateUserInfo } from '@/api/user'
|
import { updateUserInfo } from '@/api/user'
|
||||||
import { router } from '@/utils/tools'
|
import { router, removeImageUrlPrefix } from '@/utils/tools'
|
||||||
import { toast } from '@/utils/toast'
|
import { toast } from '@/utils/toast'
|
||||||
import { useStoreStore } from '@/store'
|
import { useStoreStore } from '@/store'
|
||||||
|
|
||||||
@ -431,12 +460,15 @@
|
|||||||
// 表单
|
// 表单
|
||||||
const form = reactive({
|
const form = reactive({
|
||||||
title: '',
|
title: '',
|
||||||
image: '',
|
image_arr: [] as string[],
|
||||||
|
img: '',
|
||||||
tags: [] as string[],
|
tags: [] as string[],
|
||||||
price: '',
|
price: '',
|
||||||
hours: '',
|
hours: '',
|
||||||
video: null as any,
|
video: null as any,
|
||||||
other_describe: '',
|
other_describe: '',
|
||||||
|
weight: 0,
|
||||||
|
people_number: ''
|
||||||
})
|
})
|
||||||
const tags = ref<Array<{ id: number, label_name: string, index: number }>>([])
|
const tags = ref<Array<{ id: number, label_name: string, index: number }>>([])
|
||||||
const roomLabelId = ref<string>('')
|
const roomLabelId = ref<string>('')
|
||||||
@ -455,21 +487,25 @@
|
|||||||
*/
|
*/
|
||||||
handleGetRoomDetails: async () => {
|
handleGetRoomDetails: async () => {
|
||||||
const res = await getRoomDetails(roomId.value)
|
const res = await getRoomDetails(roomId.value)
|
||||||
fileList.value = [{url: res.details.room.img, name: res.details.room.img }]
|
|
||||||
|
fileList.value =res.details.room.room_arr.map((url: string) => ({
|
||||||
|
url,
|
||||||
|
}))
|
||||||
roomLabelId.value = res.details.room.label_id
|
roomLabelId.value = res.details.room.label_id
|
||||||
|
|
||||||
form.title = res.details.room.title
|
form.title = res.details.room.title
|
||||||
form.image = res.details.room.img
|
form.img = res.details.room.img
|
||||||
form.price = res.details.room.price.toString()
|
form.price = res.details.room.price.toString()
|
||||||
form.hours = res.details.room.hours.toString()
|
form.hours = res.details.room.hours.toString()
|
||||||
form.other_describe = res.details.room.other_describe || ''
|
form.other_describe = res.details.room.other_describe || ''
|
||||||
|
form.weight = res.details.room.weight || 0
|
||||||
|
form.people_number = res.details.room.people_number || ''
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取包间标签列表
|
* 获取包间标签列表
|
||||||
*/
|
*/
|
||||||
handleGetRoomLabels: async () => {
|
handleGetRoomLabels: async () => {
|
||||||
|
|
||||||
const res = await getRoomLabelList(useStore.defaultStore.id)
|
const res = await getRoomLabelList(useStore.defaultStore.id)
|
||||||
availableTags.value = res.list
|
availableTags.value = res.list
|
||||||
|
|
||||||
@ -494,8 +530,6 @@
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log("🚀 ~ availableTags.value:", availableTags.value)
|
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -514,23 +548,6 @@
|
|||||||
showTagSelectPopup.value = true
|
showTagSelectPopup.value = true
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
|
||||||
* 上传图片
|
|
||||||
*/
|
|
||||||
handleUploadSuccess: async (e: any) => {
|
|
||||||
try {
|
|
||||||
const response = JSON.parse(e.file.response)
|
|
||||||
if (response.code) {
|
|
||||||
const avatarUrl = response.data.url
|
|
||||||
form.image = avatarUrl
|
|
||||||
} else {
|
|
||||||
throw new Error('上传失败')
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
toast.info('上传失败')
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 关闭选择标签弹窗
|
* 关闭选择标签弹窗
|
||||||
*/
|
*/
|
||||||
@ -712,8 +729,8 @@
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!form.image) {
|
if (fileList.value.length === 0) {
|
||||||
toast.info('请上传团购图片')
|
toast.info('请上传包间图片')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -727,14 +744,18 @@
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const imgArr = removeImageUrlPrefix(fileList.value)
|
||||||
let params = {
|
let params = {
|
||||||
id: roomId.value,
|
id: roomId.value,
|
||||||
img: form.image.replace(import.meta.env.VITE_UPLOAD_IMAGE_URL, ''),
|
img: imgArr[0],
|
||||||
|
img_arr: imgArr.join(','),
|
||||||
title: form.title,
|
title: form.title,
|
||||||
label_id: tags.value.map(tag => tag.id).join(','),
|
label_id: tags.value.map(tag => tag.id).join(','),
|
||||||
price: Number(form.price),
|
price: Number(form.price),
|
||||||
hours: Number(form.hours),
|
hours: Number(form.hours),
|
||||||
other_describe: form.other_describe,
|
other_describe: form.other_describe,
|
||||||
|
weight: Number(form.weight),
|
||||||
|
people_number: form.people_number
|
||||||
}
|
}
|
||||||
|
|
||||||
uni.showLoading({
|
uni.showLoading({
|
||||||
@ -745,13 +766,13 @@
|
|||||||
await editRoom(params)
|
await editRoom(params)
|
||||||
uni.hideLoading()
|
uni.hideLoading()
|
||||||
toast.info('修改成功')
|
toast.info('修改成功')
|
||||||
router.navigateBack(1, 500)
|
// router.navigateBack(1, 500)
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
toast.info('修改失败,请稍后重试')
|
toast.info('修改失败,请稍后重试')
|
||||||
uni.hideLoading()
|
uni.hideLoading()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
<route lang="jsonc" type="page">{
|
<route lang="jsonc" type="page">{
|
||||||
"layout": "tabbar",
|
"layout": "tabbar",
|
||||||
|
"needLogin": true,
|
||||||
"style": {
|
"style": {
|
||||||
"navigationStyle": "custom"
|
"navigationStyle": "custom"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
import Decimal from 'decimal.js'
|
import Decimal from 'decimal.js'
|
||||||
import { allowedNodeEnvironmentFlags } from 'process'
|
import { allowedNodeEnvironmentFlags } from 'process'
|
||||||
import { toast } from './toast'
|
import { toast } from './toast'
|
||||||
|
import { isArray } from 'wot-design-uni/components/common/util';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 页面跳转方法
|
* 页面跳转方法
|
||||||
@ -158,3 +159,20 @@ export function getCurrentDate() {
|
|||||||
return `${year}-${month}-${day}`;
|
return `${year}-${month}-${day}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 格式化上传图片的URL,去除前缀
|
||||||
|
* @param file 上传图片文件列表
|
||||||
|
* @returns 去除前缀后的图片URL列表
|
||||||
|
*/
|
||||||
|
export function removeImageUrlPrefix(file: any) {
|
||||||
|
const fileList = file.map(item => {
|
||||||
|
if (item.response) {
|
||||||
|
const response = JSON.parse(item.response)
|
||||||
|
if (response.code) {
|
||||||
|
return response.data.uri.replace(import.meta.env.VITE_UPLOAD_IMAGE_URL, '')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return item.url.replace(import.meta.env.VITE_UPLOAD_IMAGE_URL, '')
|
||||||
|
})
|
||||||
|
return fileList
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user