# Conflicts:
#	.env
This commit is contained in:
zjf committed 2026-05-07 12:09:51 +08:00
commit 2f7a9d55a2
23 files changed
+345 -203

No files matched your search

+5 -5
View File
@@ -19,16 +19,16 @@ VITE_OAUTH2_APP_CLIENT='mini:mini'
# --------------------------- 开发环境 api地址 ----------------------------------
# VITE_APP_DEV_SERVICE = https://stgl.pj.gov.cn/api # 域名线上
#VITE_APP_DEV_SERVICE = http://59.202.170.152:81/api # 信创线上
# VITE_APP_DEV_SERVICE = http://192.168.101.174:9999 # 邓-本地
VITE_APP_DEV_SERVICE = http://127.0.0.1:9999 # 邓-本地
VITE_APP_DEV_SERVICE = https://dzc-test-1.fy.takin.cc # 邓-本地
# VITE_APP_DEV_SERVICE = http://127.0.0.1:9999 # 邓-本地
# VITE_APP_DEV_SERVICE = http://123.157.250.162:8089/api # 测试线上
# --------------------------- 开发环境 图片访问基础地址 ---------------------------
# VITE_IMAGE_DEV_PATH = https://stgl.pj.gov.cn/api # 域名线上
#VITE_IMAGE_DEV_PATH = http://59.202.170.152:81/api # 信创线上
# VITE_IMAGE_DEV_PATH = http://192.168.101.174:9999 # 邓-本地
VITE_IMAGE_DEV_PATH = http://127.0.0.1:9999
#VITE_IMAGE_DEV_PATH = http://123.157.250.162:8089/api # 测试线上
VITE_IMAGE_DEV_PATH = https://dzc-test-1.fy.takin.cc # 邓-本地
#VITE_IMAGE_DEV_PATH = http://127.0.0.1:9999
# VITE_IMAGE_DEV_PATH = http://123.157.250.162:8089/api # 测试线上
# --------------------------- 生产环境 api地址 ----------------------------------
VITE_APP_PROD_SERVICE = https://stgl.pj.gov.cn/api # 域名线上
+10 -1
View File
@@ -53,6 +53,7 @@ const tabbar: TabbarItem[] = [
launchParam: ["coopMerchant"],
auth: ["user"],
},
// 在线商城(商品展示)
{
pagePath: "pages/tabbar/onlineShop",
text: "在线商城",
@@ -69,6 +70,14 @@ const tabbar: TabbarItem[] = [
launchParam: ["prosperityShop"],
auth: ["user"],
},
{
pagePath: "pages/tabbar/prosperityShopMchList",
text: "共富商城",
iconPath: "/static/tabbar/prosperity-shop.png",
selectedIconPath: "/static/tabbar/prosperity-shop-select.png",
launchParam: ["prosperityShopMchList"],
auth: ["user"],
},
{
pagePath: "pages/tabbar/cabinet",
text: "智能柜",
@@ -114,7 +123,7 @@ const tabbar: TabbarItem[] = [
text: "我的",
iconPath: "/static/tabbar/my.png",
selectedIconPath: "/static/tabbar/my-select.png",
launchParam: ["canteen", "selfMerchant", "onlineShop", "coopMerchant", "integrated", "prosperityShop"],
launchParam: ["canteen", "selfMerchant", "onlineShop", "coopMerchant", "integrated", "prosperityShop", "prosperityShopMchList"],
auth: ["user", "merchant", "doorAdmin"],
},
]
+13
View File
@@ -51,6 +51,13 @@
"disableScroll": true
}
},
{
"path": "pages/tabbar/prosperityShopMchList",
"style": {
"navigationBarTitleText": "共富商城",
"disableScroll": true
}
},
{
"path": "pages/tabbar/coopMerchant",
"style": {
@@ -688,6 +695,12 @@
"iconPath": "",
"selectedIconPath": ""
},
{
"pagePath": "pages/tabbar/prosperityShopMchList",
"text": "",
"iconPath": "",
"selectedIconPath": ""
},
{
"pagePath": "pages/tabbar/cabinet",
"text": "",
+19 -2
View File
@@ -20,10 +20,21 @@ const doVisibleQrcode = () => {
<template>
<view class="coupon-item">
<!-- 左侧主体 -->
<view class="coupon-left">
<view class="coupon-left relative">
<view class="size-140rpx rounded-8rpx flex-row-center flex-shrink-0 bg-#f0f0f0 m-r-10rpx">
<image class="size-110rpx" src="/static/icon/act_cancel.png" mode="aspectFill" />
</view>
<view class="absolute top-0rpx right-80rpx">
<!-- 未使用 -->
<view v-if="detail.actStatus == 1"
class="iconfont icon-weishiyong absolute font-size-80rpx! color-blue" />
<!-- 已使用 -->
<view v-if="detail.actStatus == 2"
class="iconfont icon-weishiyong1 absolute font-size-80rpx! color-#cccccc" />
<!-- 已过期 -->
<view v-if="detail.actStatus == 3"
class="iconfont icon-yiguoqi absolute font-size-80rpx! color-#cccccc" />
</view>
<view class="info-box">
<view class="price-row">
<view v-if="detail.faceValue" class="flex items-center">
@@ -49,7 +60,9 @@ const doVisibleQrcode = () => {
</view>
<!-- 右侧按钮 -->
<view class="coupon-right">
<view class="action-btn" @tap="doVisibleQrcode">核销码</view>
<view v-if="detail.actStatus == 1" class="action-btn" @tap="doVisibleQrcode">核销码</view>
<view v-if="detail.actStatus == 2" class="action-btn disabled">已使用</view>
<view v-if="detail.actStatus == 3" class="action-btn disabled">已过期</view>
</view>
</view>
</template>
@@ -194,5 +207,9 @@ const doVisibleQrcode = () => {
padding: 10rpx 24rpx;
border-radius: 30rpx;
font-weight: 500;
&.disabled {
background: #cccccc;
}
}
</style>
+19 -2
View File
@@ -20,9 +20,20 @@ const doVisibleQrcode = () => {
<template>
<view class="coupon-item">
<!-- 左侧主体 -->
<view class="coupon-left">
<view class="coupon-left relative">
<image class="size-140rpx rounded-8rpx flex-shrink-0 m-r-10rpx bg-#f0f0f0" src="/static/icon/act_coupon.png"
mode="aspectFill" />
<view class="absolute top-0rpx right-80rpx">
<!-- 未使用 -->
<view v-if="detail.status == 1" class="iconfont icon-weishiyong absolute font-size-80rpx! color-blue" />
<!-- 已使用 -->
<view v-if="detail.status == 2"
class="iconfont icon-weishiyong1 absolute font-size-80rpx! color-#cccccc" />
<!-- 已过期 -->
<view v-if="detail.status == 3" class="iconfont icon-yiguoqi absolute font-size-80rpx! color-#cccccc" />
<!-- 已核销 -->
<view v-if="detail.status == 4" class="iconfont icon-yiguoqi absolute font-size-80rpx! color-#cccccc" />
</view>
<view class="info-box">
<view class="price-row">
<view v-if="detail.faceValue" class="flex items-center">
@@ -48,7 +59,9 @@ const doVisibleQrcode = () => {
</view>
<!-- 右侧按钮 -->
<view class="coupon-right">
<view class="action-btn" @tap="doVisibleQrcode">核销码</view>
<view v-if="detail.status == 1" class="action-btn" @tap="doVisibleQrcode">核销码</view>
<view v-if="detail.status == 2" class="action-btn disabled">已使用</view>
<view v-if="detail.status == 3" class="action-btn disabled">已过期</view>
</view>
</view>
</template>
@@ -193,5 +206,9 @@ const doVisibleQrcode = () => {
padding: 10rpx 24rpx;
border-radius: 30rpx;
font-weight: 500;
&.disabled {
background: #cccccc;
}
}
</style>
-2
View File
@@ -19,8 +19,6 @@
</view>
<view class="absolute bottom-40 left-60 text-28 bg-#eeeeee44 c-#fff px-2 rounded-full">限量领取 先领先得</view>
</view>
<view class="card relative rounded-lb-0! rounded-rb-0! w-full activity-sr-card overflow-hidden"
v-if="state.actType == 'COUPON_ACT' && state.actDetail.uniqueCode === '1qRgFo'">
<image class="w-full block" src="/static/page/act_li_quan.jpg" mode="widthFix" />
+11 -29
View File
@@ -56,6 +56,7 @@ const toDetail = async (v: any) => {
if (isLogin) {
if (v.supType && v.supType == "10") return router.jump("/pages/merchant/brandDetail", { parentId: v.id })
if (v.supType && v.supType == "20") return router.jump("/pages/merchant/detail", { id: v.id })
if (v.supType && v.supType == "50") return router.jump("/pages/merchant/brandDetail", { parentId: v.id })
uni.showToast({ title: "合作商家类型未知", icon: "none" })
}
}
@@ -63,37 +64,16 @@ const toDetail = async (v: any) => {
<template>
<crud-layout bg="/static/page/blue-bg.png">
<z-paging
ref="pageRef"
height="100%"
:fixed="false"
v-model="pageHook.list"
:default-page-size="10"
safe-area-inset-bottom
:loading-more-enabled="true"
:show-scrollbar="false"
@query="query"
:auto-clean-list-when-reload="false"
:auto-scroll-to-top-when-reload="false"
@scroll="pageHook.scroll"
>
<z-paging ref="pageRef" height="100%" :fixed="false" v-model="pageHook.list" :default-page-size="10"
safe-area-inset-bottom :loading-more-enabled="true" :show-scrollbar="false" @query="query"
:auto-clean-list-when-reload="false" :auto-scroll-to-top-when-reload="false" @scroll="pageHook.scroll">
<template #top>
<view class="h-30rpx" />
<view class="flex w-full">
<tm-input
class="flex-1"
v-model="state.pa.name"
type="text"
height="72"
minHeight="72"
fontSize="28"
:showClear="true"
:focus="false"
placeholder="请输入商家名称"
style="border: 4rpx solid #0779fd; border-radius: 14rpx"
:focus-highlight="false"
color="#ECF4F9"
>
<tm-input class="flex-1" v-model="state.pa.name" type="text" height="72" minHeight="72"
fontSize="28" :showClear="true" :focus="false" placeholder="请输入商家名称"
style="border: 4rpx solid #0779fd; border-radius: 14rpx" :focus-highlight="false"
color="#ECF4F9">
<template v-slot:rightIcon>
<tm-button class="mr-1 px-3 py-26rpx text-30rpx!" size="xs" @click="search">搜 索</tm-button>
</template>
@@ -119,7 +99,9 @@ const toDetail = async (v: any) => {
<view class="second-text-28 ml-1">{{ v.phone }}</view>
</view>
</view>
<tm-tag class="max-w-160rpx" size="xs">{{ v.deptName.length > 5 ? v.deptName.substring(0, 5) + "..." : v.deptName }}</tm-tag>
<tm-tag class="max-w-160rpx" size="xs">{{ v.deptName.length > 5 ? v.deptName.substring(0, 5)
+ "..." :
v.deptName }}</tm-tag>
</view>
<view class="second-text-24">
<view v-if="v.jobTime != ',,'" class="second-text-28">营业时间:</view>
+20 -4
View File
@@ -24,16 +24,22 @@ const moduleList = [
},
{
pagePath: "/pages/tabbar/onlineShop",
text: "在线商城",
text: "在线商城(商品展示)",
iconPath: "/static/tabbar/online-shop-select.png",
launchParam: "onlineShop",
},
{
pagePath: "/pages/tabbar/prosperityShop",
text: "共富商城",
text: "共富商城(店铺商品模式)",
iconPath: "/static/tabbar/prosperity-shop-select.png",
launchParam: "prosperityShop",
},
{
pagePath: "/pages/tabbar/prosperityShopMchList",
text: "共富商城(商家模式)",
iconPath: "/static/tabbar/prosperity_shop_mch_list.png",
launchParam: "prosperityShopMchList",
},
{
pagePath: "/pages/tabbar/cabinet",
text: "智能柜",
@@ -90,6 +96,10 @@ const jumpByParam = async () => {
uni.setStorageSync("launchParam", launchParam)
uni.switchTab({ url: "/pages/tabbar/prosperityShop" })
break
case "prosperityShopMchList": // 共富商城(商家模式)
uni.setStorageSync("launchParam", launchParam)
uni.switchTab({ url: "/pages/tabbar/prosperityShopMchList" })
break
default:
uni.hideTabBar()
break
@@ -120,6 +130,10 @@ const jumpByParam = async () => {
uni.setStorageSync("launchParam", launchParam)
return uni.reLaunch({ url: "/pages/tabbar/prosperityShop" })
}
if (launchParam === "prosperityShopMchList") {
uni.setStorageSync("launchParam", launchParam)
return uni.reLaunch({ url: "/pages/tabbar/prosperityShopMchList" })
}
if (launchParam === "coopMerchant") {
uni.setStorageSync("launchParam", launchParam)
return uni.reLaunch({ url: "/pages/tabbar/coopMerchant" })
@@ -147,8 +161,10 @@ const doModuleJump = (item: any) => {
<view class="w-full h-full flex-col-center">
<tm-sheet v-if="isDevEnv()" :margin="[0]">
<view class="flex-row items-center justify-center flex-wrap">
<view class="w-half flex justify-center py-2 rounded-1" v-for="(item, index) in moduleList" :key="index">
<view class="w-half text-center rounded-1 active:bg-#e8e8e8 duration-200" @tap="doModuleJump(item)">
<view class="w-half flex justify-center py-2 rounded-1" v-for="(item, index) in moduleList"
:key="index">
<view class="w-half text-center rounded-1 active:bg-#e8e8e8 duration-200"
@tap="doModuleJump(item)">
<image class="w-80 h-80 px-2 pt-2" :src="item.iconPath" />
<tm-text font-size="32">{{ item.text }}</tm-text>
</view>
+26 -1
View File
@@ -9,20 +9,29 @@
<div v-for="item in services" :key="item.name" class="service-item" @click="goPage(item)">
<div class="service-icon-wrapper">
<image :src="item.icon" class="service-icon" />
<view v-if="item.name === 'todo' && todoCount > 0" class="badge">{{ todoCount > 99 ? "99+" : todoCount }}</view>
<view v-if="item.name === 'todo' && todoCount > 0" class="badge">{{ todoCount > 99 ? "99+" :
todoCount }}</view>
</div>
<div class="service-label">{{ item.label }}</div>
</div>
</div>
</div>
</div>
<view class="position-absolute bottom-20rpx left-0 right-0 second-text-26 text-center">
<text>联系热线:</text>
<text @click="doPhone('18367908152')">18367908152</text>
&nbsp;
<text @click="doPhone('15657370065')">15657370065</text>
</view>
</crud-layout>
</template>
<script setup lang="ts">
import { onLoad } from "@dcloudio/uni-app"
import { ref, onMounted } from "vue"
import integratedApi from "@/sheep/api/integrated"
import { hooks } from "@@/index"
const todoCount = ref(0)
@@ -109,6 +118,11 @@ function goPage(item) {
uni.navigateTo({ url: item.url })
}
}
// 联系客服
const doPhone = (phone: string) => {
hooks.useMakePhoneCall(phone)
}
</script>
<style scoped lang="less">
@@ -119,6 +133,7 @@ function goPage(item) {
margin: 32rpx 24rpx 0 24rpx;
padding: 0 0 8rpx 0;
}
.integrated-title {
font-size: 38rpx;
font-weight: bold;
@@ -127,6 +142,7 @@ function goPage(item) {
padding: 36rpx 0 24rpx 0;
letter-spacing: 2rpx;
}
.service-container-card {
background: #fff;
border-radius: 24rpx;
@@ -134,17 +150,20 @@ function goPage(item) {
margin: 24rpx;
padding-bottom: 32rpx;
}
.service-container {
padding: 32rpx 0 0 0;
background: transparent;
border-radius: 16rpx;
}
.service-grid {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
padding: 0 24rpx;
}
.service-item {
width: 25%;
margin-bottom: 40rpx;
@@ -153,10 +172,12 @@ function goPage(item) {
align-items: center;
transition: transform 0.2s;
}
.service-item:hover {
transform: translateY(-6rpx) scale(1.06);
box-shadow: 0 2rpx 12rpx rgba(25, 118, 210, 0.08);
}
.service-icon-wrapper {
position: relative;
margin-bottom: 14rpx;
@@ -195,19 +216,23 @@ function goPage(item) {
0% {
transform: scale(1);
}
50% {
transform: scale(1.1);
}
100% {
transform: scale(1);
}
}
.service-label {
font-size: 28rpx;
color: #333;
text-align: center;
letter-spacing: 1rpx;
}
body {
background: #f5f6fa;
}
+22 -64
View File
@@ -1,20 +1,9 @@
<template>
<crud-layout bg="/static/page/blue-bg.png">
<z-paging
ref="pageRef"
height="100%"
:fixed="false"
v-model="pageHook.list"
:default-page-size="10"
safe-area-inset-bottom
:loading-more-enabled="true"
:show-scrollbar="false"
@query="query"
:auto-clean-list-when-reload="false"
:auto-scroll-to-top-when-reload="false"
@scroll="pageHook.scroll"
:auto="false"
>
<z-paging ref="pageRef" height="100%" :fixed="false" v-model="pageHook.list" :default-page-size="10"
safe-area-inset-bottom :loading-more-enabled="true" :show-scrollbar="false" @query="query"
:auto-clean-list-when-reload="false" :auto-scroll-to-top-when-reload="false" @scroll="pageHook.scroll"
:auto="false">
<template #top>
<view class="flex justify-between items-center my-1">
<tm-text font-size="40" color="#0779FD" class="font-bold">欢迎选购</tm-text>
@@ -25,23 +14,13 @@
</view>
</view>
<view class="w-full flex items-center">
<tm-input
class="flex-1"
v-model="state.params.keyword"
type="text"
height="72"
minHeight="72"
fontSize="28"
:showClear="true"
:focus="false"
placeholder="请输入商品名称"
style="border: 4rpx solid #0779fd; border-radius: 14rpx"
:focus-highlight="false"
color="#ECF4F9"
@clear="inputClear"
>
<tm-input class="flex-1" v-model="state.params.keyword" type="text" height="72" minHeight="72"
fontSize="28" :showClear="true" :focus="false" placeholder="请输入商品名称"
style="border: 4rpx solid #0779fd; border-radius: 14rpx" :focus-highlight="false"
color="#ECF4F9" @clear="inputClear">
<template v-slot:rightIcon>
<tm-button class="mr-1 px-3 py-26rpx text-30rpx!" size="xs" @click="searchProduct">搜 索</tm-button>
<tm-button class="mr-1 px-3 py-26rpx text-30rpx!" size="xs" @click="searchProduct">搜
索</tm-button>
</template>
</tm-input>
<tm-badge bg-color="red" :offset="[8, 4]" :label="cartStore.totalCount">
@@ -56,29 +35,18 @@
<view
class="mr-2 sub-text-28 py-1 px-2 rounded-1 bg-#fff border border-solid border-transparent whitespace-nowrap"
:class="{ 'bg-#0779FD22! c-#0779FD! border-#0779FD33!': state.params.categoryId === v.id }"
v-for="(v, i) in state.categaryList"
:key="i"
@tap="changeCategary(v.id)"
>
v-for="(v, i) in state.categaryList" :key="i" @tap="changeCategary(v.id)">
{{ v.name }}
</view>
</view>
</scroll-view>
</template>
<Waterfall
:list="pageHook.list"
:gutter="10"
:breakpoints="{
1800: { rowPerView: 4 },
1400: { rowPerView: 3 },
975: { rowPerView: 2 },
}"
:hasAroundGutter="false"
backgroundColor="#ffffff00"
:crossOrigin="false"
:animationCancel="false"
>
<Waterfall :list="pageHook.list" :gutter="10" :breakpoints="{
1800: { rowPerView: 4 },
1400: { rowPerView: 3 },
975: { rowPerView: 2 },
}" :hasAroundGutter="false" backgroundColor="#ffffff00" :crossOrigin="false" :animationCancel="false">
<template #default="{ item, url, index }">
<view class="card" @click="goDetail(item)">
<LazyImg class="rounded-2" :url="filePath(item.picUrl)" />
@@ -96,26 +64,16 @@
</template>
</Waterfall>
<tm-drawer
title="切换超市"
:showClose="true"
:showFooter="true"
size="50%"
v-model:show="state.shopDrawerShow"
:duration="100"
zIndex="1200"
>
<tm-drawer title="切换超市" :showClose="true" :showFooter="true" size="50%" v-model:show="state.shopDrawerShow"
:duration="100" zIndex="1200">
<tm-radio-group v-model="state.curMerchantRadioId" direction="column">
<tm-radio
v-for="(item, index) in state.merchantList"
:key="index"
<tm-radio v-for="(item, index) in state.merchantList" :key="index"
class="w-full flex items-center p-2 rounded-3"
:class="[state.curMerchantRadioId == item.id ? 'bg-#e8e8e8' : '']"
:value="item.id"
>
:class="[state.curMerchantRadioId == item.id ? 'bg-#e8e8e8' : '']" :value="item.id">
<template v-slot:label="checked">
<view class="flex items-center">
<image class="size-80rpx rounded-2 mr-2" :src="filePath(item.logoPic)" mode="aspectFill" />
<image class="size-80rpx rounded-2 mr-2" :src="filePath(item.logoPic)"
mode="aspectFill" />
<tm-text font-size="30">{{ item.name }}</tm-text>
</view>
</template>
+1 -1
View File
@@ -106,7 +106,7 @@ const doRefund = (v: any) => {
<view>
<text>下单时间</text>
<text class="ml-10rpx">{{ hooks.useTime(v.createTime, "{y}-{m}-{d} {h}:{i}:{s}")
}}</text>
}}</text>
</view>
<view>{{ hooks.useEnum("hardwareRefundStatusEnum", v.refundStatus) }}</view>
</view>
+19 -35
View File
@@ -1,39 +1,18 @@
<template>
<crud-layout bg="/static/page/blue-bg.png">
<z-paging
ref="pageRef"
height="100%"
:fixed="false"
v-model="pageHook.list"
:default-page-size="10"
safe-area-inset-bottom
:loading-more-enabled="true"
:show-scrollbar="false"
@query="query"
:auto-clean-list-when-reload="false"
:auto-scroll-to-top-when-reload="false"
@scroll="pageHook.scroll"
>
<z-paging ref="pageRef" height="100%" :fixed="false" v-model="pageHook.list" :default-page-size="10"
safe-area-inset-bottom :loading-more-enabled="true" :show-scrollbar="false" @query="query"
:auto-clean-list-when-reload="false" :auto-scroll-to-top-when-reload="false" @scroll="pageHook.scroll">
<template #top>
<view class="flex justify-between items-center my-1">
<tm-text font-size="40" color="#0779FD" class="font-bold">共富商城</tm-text>
<tm-text font-size="30" color="#0779FD">优质商户,品质商品,欢迎联系购买</tm-text>
</view>
<view class="w-full flex items-center mb-2">
<tm-input
class="flex-1"
v-model="state.params.keyword"
type="text"
height="72"
minHeight="72"
fontSize="28"
:showClear="true"
:focus="false"
placeholder="请输入超市名称"
style="border: 4rpx solid #0779fd; border-radius: 14rpx"
:focus-highlight="false"
color="#ECF4F9"
>
<tm-input class="flex-1" v-model="state.params.keyword" type="text" height="72" minHeight="72"
fontSize="28" :showClear="true" :focus="false" placeholder="请输入超市名称"
style="border: 4rpx solid #0779fd; border-radius: 14rpx" :focus-highlight="false"
color="#ECF4F9">
<template v-slot:rightIcon>
<tm-button class="mr-1 px-3 py-26rpx text-30rpx!" size="xs" @click="search">搜 索</tm-button>
</template>
@@ -57,7 +36,8 @@
<view class="card p-20rpx mb-20rpx" v-for="(v, i) in pageHook.list" :key="i" @tap="toDetail(v)">
<view class="flex">
<image class="w-160rpx h-160rpx bg-#eeeeee rounded-12rpx" :src="filePath(v.images)" mode="aspectFill" />
<image class="w-160rpx h-160rpx bg-#eeeeee rounded-12rpx" :src="filePath(v.images)"
mode="aspectFill" />
<view class="ml-20rpx flex-1 overflow-hidden">
<view class="sub-text-32 truncate">{{ v.name }}</view>
<view class="second-text-26 flex justify-between my-6rpx">
@@ -75,13 +55,17 @@
</view>
<scroll-view scroll-x>
<view class="flex mt-2">
<view class="w-180rpx flex-col items-center mr-20rpx" v-for="(pV, pI) in v.featuredProducts" :key="pI">
<image class="size-180rpx rounded-12rpx bg-#eeeeee" :src="filePath(pV.coverImage)" mode="aspectFill" />
<view class="w-180rpx flex-col items-center mr-20rpx" v-for="(pV, pI) in v.featuredProducts"
:key="pI">
<image class="size-180rpx rounded-12rpx bg-#eeeeee" :src="filePath(pV.coverImage)"
mode="aspectFill" />
<view class="w-full mt-4rpx sub-text-24 truncate">{{ pV.title }}</view>
<view class="w-full flex justify-between">
<text class="text-26 color-red!">
<text class="text-22rpx">¥</text>
<text>{{ pV.priceType == "1" ? displayPrice(pV.minPrice, "") : displayPrice(pV.spuPrice, "") }}</text>
<text>{{ pV.priceType == "1" ? displayPrice(pV.minPrice, "") :
displayPrice(pV.spuPrice, "")
}}</text>
</text>
<!-- <text class="second-text-24 line-through">
<template v-if="pV.priceType == '2'">
@@ -148,10 +132,10 @@ const search = () => {
const doPhone = async (item: string) => {
if (isEmpty(item)) return uni.showToast({ title: "该商户没有预留电话", icon: "none" })
if ((await getAppInfo()) == APPENV.ZZD) {
;(window as any).dd
; (window as any).dd
.callPhone({ phoneNum: item.trim() })
.then((res) => {})
.catch((err) => {})
.then((res) => { })
.catch((err) => { })
return
}
if ((await getAppInfo()) == APPENV.SH) {
+131
View File
@@ -0,0 +1,131 @@
<script setup lang="ts">
import { ref, reactive } from "vue"
import { onLoad, onShow } from "@dcloudio/uni-app"
import { merchantApi } from "@@/api"
import { hooks, router } from "@@/index"
import { filePath } from "@@/utils/file"
import zTabs from "@@/components/other/z-tabs/z-tabs.vue"
const pageRef = ref<any>(null)
const state = reactive<any>({
pa: {
pagesize: 10,
// 0-其他食堂
// 1-自营食堂
// 2-合作商家
// 3-自营商家
// 4-第三方应用
// 5-共富商城(助农)
type: "5",
name: "",
catgoryId: null,
},
tabs: [{ id: null, name: "全部", disabled: false }],
})
const pageHook = hooks.usePage(pageRef, merchantApi.page, null, "data.records")
const query = (page: number, pagesize: number) => {
pageHook.startPage(page, pagesize, false, state.pa)
}
onLoad(async () => {
const app = getApp()
app._initTabbar()
try {
const res: any = await merchantApi.selectCatgory({ current: 1, size: 99999 })
if (res.code == 0) {
state.tabs = state.tabs.concat(res.data)
} else {
state.tabs = [{ id: null, name: "全部", disabled: false }]
}
} catch (error: any) {
uni.showToast({ title: error, icon: "none" })
}
})
onShow(() => {
pageRef.value && pageRef.value.reload(false)
})
const search = () => {
pageRef.value && pageRef.value.reload(true)
}
const doTab = (e: any) => {
const target = state.tabs[e]
state.pa.catgoryId = target.id
pageRef.value.reload(true)
}
const toDetail = async (v: any) => {
const isLogin = await hooks.useCheckLogin()
if (isLogin) {
if (!v.supType) {
router.jump("/pages/merchant/detail", { id: v.id })
return
}
if (v.supType && v.supType == "10") return router.jump("/pages/merchant/brandDetail", { parentId: v.id })
if (v.supType && v.supType == "20") return router.jump("/pages/merchant/detail", { id: v.id })
uni.showToast({ title: "合作商家类型未知", icon: "none" })
}
}
</script>
<template>
<crud-layout bg="/static/page/blue-bg.png">
<z-paging ref="pageRef" height="100%" :fixed="false" v-model="pageHook.list" :default-page-size="10"
safe-area-inset-bottom :loading-more-enabled="true" :show-scrollbar="false" @query="query"
:auto-clean-list-when-reload="false" :auto-scroll-to-top-when-reload="false" @scroll="pageHook.scroll">
<template #top>
<view class="h-30rpx" />
<view class="flex w-full">
<tm-input class="flex-1" v-model="state.pa.name" type="text" height="72" minHeight="72"
fontSize="28" :showClear="true" :focus="false" placeholder="请输入商家名称"
style="border: 4rpx solid #0779fd; border-radius: 14rpx" :focus-highlight="false"
color="#ECF4F9">
<template v-slot:rightIcon>
<tm-button class="mr-1 px-3 py-26rpx text-30rpx!" size="xs" @click="search">搜 索</tm-button>
</template>
</tm-input>
</view>
<view class="bg-white rounded-16rpx px-20rpx my-20rpx">
<z-tabs :list="state.tabs" @change="doTab" />
</view>
</template>
<view class="flex-row card p-20rpx m-b-20rpx" v-for="(v, i) in pageHook.list" :key="i" @tap="toDetail(v)">
<image class="w-180rpx h-180rpx rounded-12rpx my-auto" :src="filePath(v.logoPic)" mode="aspectFill" />
<view class="flex-1 flex-col m-l-20rpx">
<view class="sub-text-34">
<text class="mr-2">{{ v.name }}</text>
<!-- <tm-tag v-if="v.supType == '10' && Number(v.mchCount) > 0" size="xs" skin="thin">共{{ v.mchCount }}家</tm-tag> -->
</view>
<view class="m-t-10rpx">
<view class="flex justify-between items-center">
<view class="flex-1">
<view v-if="v.phone" class="flex items-center">
<image class="w-24rpx h-24rpx" src="@/static/page/phone.svg" />
<view class="second-text-28 ml-1">{{ v.phone }}</view>
</view>
</view>
<tm-tag class="max-w-160rpx" size="xs">{{ v.deptName.length > 5 ? v.deptName.substring(0, 5)
+ "..." :
v.deptName }}</tm-tag>
</view>
<view class="second-text-24">
<view v-if="v.jobTime != ',,'" class="second-text-28">营业时间:</view>
<view>{{ v.jobTime?.split(",")[0] ? "早:" + v.jobTime?.split(",")[0] : "" }}</view>
<view>{{ v.jobTime?.split(",")[1] ? "中:" + v.jobTime?.split(",")[1] : "" }}</view>
<view>{{ v.jobTime?.split(",")[2] ? "晚:" + v.jobTime?.split(",")[2] : "" }}</view>
</view>
<view v-if="v.addressDes" class="second-text-28">
<image class="w-24rpx h-24rpx" src="@/static/page/address.svg" />
<text class="ml-1">地址:</text>
<text class="m-l-10rpx">{{ v.addressDes }}</text>
</view>
</view>
</view>
</view>
</z-paging>
</crud-layout>
</template>
+3 -14
View File
@@ -36,20 +36,9 @@ const toDetail = async (v: any) => {
<template>
<crud-layout bg="/static/page/blue-bg.png">
<z-paging
ref="pageRef"
height="100%"
:fixed="false"
v-model="pageHook.list"
:default-page-size="10"
safe-area-inset-bottom
:loading-more-enabled="true"
:show-scrollbar="false"
@query="query"
:auto-clean-list-when-reload="false"
:auto-scroll-to-top-when-reload="false"
@scroll="pageHook.scroll"
>
<z-paging ref="pageRef" height="100%" :fixed="false" v-model="pageHook.list" :default-page-size="10"
safe-area-inset-bottom :loading-more-enabled="true" :show-scrollbar="false" @query="query"
:auto-clean-list-when-reload="false" :auto-scroll-to-top-when-reload="false" @scroll="pageHook.scroll">
<view class="h-20rpx" />
<view class="flex-row card p-20rpx m-b-20rpx" v-for="(v, i) in pageHook.list" :key="i" @tap="toDetail(v)">
<image class="w-180rpx h-180rpx rounded-12rpx" :src="filePath(v.logoPic)" mode="aspectFill" />
+2 -12
View File
@@ -47,18 +47,8 @@
<tm-button @click="show = true">继续跳转</tm-button>
</view>
<tm-modal
v-model:show="show"
:overlayClick="false"
title="注意"
position="bottom"
height="auto"
:showCancel="true"
cancelText="取消"
confirmText="继续访问"
@confirm="thirdAppJump()"
@cancel="show = false"
>
<tm-modal v-model:show="show" :overlayClick="false" title="注意" position="bottom" height="auto"
:showCancel="true" cancelText="取消" confirmText="继续访问" @confirm="thirdAppJump()" @cancel="show = false">
<tm-text font-size="30" color="#999999">
您即将离开智慧后勤应用并跳转到第三方应用,请注意个人隐私和账号财产安全。您通过第三方服务页面主动提供给第三方商户的个人信息,相关信息保护责任由第三方商户承担。
</tm-text>
+1 -1
View File
@@ -154,7 +154,7 @@ const doTransferMoney = (v: any) => {
<view class="second-text-50">
<text v-if="v.cardNumber" class="iconfont icon-fuzhi"
@tap.stop="hooks.useCopy(v.cardNumber)" />
<text v-if="v.walletTypeUniqueCode != '2'" class="m-l-20rpx iconfont icon-erweima"
<text v-if="v.walletTypeUniqueCode == '1'" class="m-l-20rpx iconfont icon-erweima"
@tap.stop="doPreviewQrCode(v)" />
</view>
</view>
+5 -10
View File
@@ -1,18 +1,10 @@
<template>
<view class="tabbar">
<view
class="tabbar-item"
:class="{ active: activeTab === 'home' }"
@tap="goHome"
>
<view class="tabbar-item" :class="{ active: activeTab === 'home' }" @tap="goHome">
<image src="/static/icons/home.png" class="tabbar-icon" />
<text>首页</text>
</view>
<view
class="tabbar-item"
:class="{ active: activeTab === 'mine' }"
@tap="goMine"
>
<view class="tabbar-item" :class="{ active: activeTab === 'mine' }" @tap="goMine">
<image src="/static/icons/mine.png" class="tabbar-icon" />
<text>我的</text>
</view>
@@ -45,6 +37,7 @@ function goMine() {
border-top: 1px solid #eee;
z-index: 999;
}
.tabbar-item {
flex: 1;
display: flex;
@@ -54,11 +47,13 @@ function goMine() {
color: #888;
font-size: 24rpx;
}
.tabbar-icon {
width: 48rpx;
height: 48rpx;
margin-bottom: 4rpx;
}
.tabbar-item.active {
color: #1777FF;
}
@@ -1,27 +1,17 @@
<template>
<tm-modal
:show="show"
:overlayClick="false"
position="bottom"
:showCancel="showCancel"
title="您的设备需要验证"
height="650rpx"
zIndex="999"
cancelText="取消"
confirmText="确认"
@confirm=""
@cancel=""
@close="close"
>
<tm-modal :show="show" :overlayClick="false" position="bottom" :showCancel="showCancel" title="您的设备需要验证"
height="650rpx" zIndex="999" cancelText="取消" confirmText="确认" @confirm="" @cancel="" @close="close">
<tm-form ref="formRef" v-model="form" :rules="formRules" direction="vertical">
<tm-form-item name="mobilePhone" label="手机号">
<tm-input v-model.trim="form.mobilePhone" :maxlength="11" placeholder="请输入手机号" />
</tm-form-item>
<view class="h-10rpx" />
<tm-form-item name="code" label="验证码">
<tm-input v-model.trim="form.code" :maxlength="6" placeholder="请输入验证码" :disabled="form.mobilePhone.length != 11">
<tm-input v-model.trim="form.code" :maxlength="6" placeholder="请输入验证码"
:disabled="form.mobilePhone.length != 11">
<template v-slot:right>
<tm-button class="ml-1 px-2" color="primary" size="m" @click="getCode" :disabled="state.codeBtnDisabled">
<tm-button class="ml-1 px-2" color="primary" size="m" @click="getCode"
:disabled="state.codeBtnDisabled">
<text>获取验证码</text><text v-if="state.isTiming">{{ state.countDown }} s</text>
</tm-button>
</template>
+1 -1
View File
@@ -75,7 +75,7 @@ const actUserReceiveEnum = {
"1": "活动不在进行中",
"2": "活动不存在",
"3": "活动未开启",
"4": "用户参加活动已达上限",
"4": "已领取,核销码在我的礼券中",
"5": "用户不能参加此活动",
"6": "其他错误",
"99": "用户可以参加活动",
+31 -3
View File
@@ -1,9 +1,9 @@
@font-face {
font-family: "iconfont";
/* Project id 4740692 */
src: url('//at.alicdn.com/t/c/font_4740692_dlzhw41ofij.woff2?t=1731448556379') format('woff2'),
url('//at.alicdn.com/t/c/font_4740692_dlzhw41ofij.woff?t=1731448556379') format('woff'),
url('//at.alicdn.com/t/c/font_4740692_dlzhw41ofij.ttf?t=1731448556379') format('truetype');
src: url('//at.alicdn.com/t/c/font_4740692_uwg9mtj0d0p.woff2?t=1770172172940') format('woff2'),
url('//at.alicdn.com/t/c/font_4740692_uwg9mtj0d0p.woff?t=1770172172940') format('woff'),
url('//at.alicdn.com/t/c/font_4740692_uwg9mtj0d0p.ttf?t=1770172172940') format('truetype');
}
.iconfont {
@@ -14,6 +14,34 @@
-moz-osx-font-smoothing: grayscale;
}
.icon-yiguoqi:before {
content: "\e642";
}
.icon-weishiyong:before {
content: "\e60c";
}
.icon-weishiyong1:before {
content: "\e623";
}
.icon-icon-phone:before {
content: "\e657";
}
.icon-saoyisao:before {
content: "\e658";
}
.icon-wode:before {
content: "\f0b4";
}
.icon-a-kefu3x:before {
content: "\e62e";
}
.icon-fuzhi:before {
content: "\e8b0";
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB