feat:迁移
This commit is contained in:
1 parent
d87d1b5f8d
commit
3f4e389b33
63 files changed
+502
-108
No files matched your search
@@ -17,15 +17,16 @@ VITE_PWD_ENC_KEY='pigxpigxpigxpigx'
|
||||
VITE_OAUTH2_APP_CLIENT='mini:mini'
|
||||
|
||||
# --------------------------- start 开发环境 start ----------------------------------
|
||||
# VITE_APP_DEV_SERVICE = https://www.zianxin.com/api
|
||||
VITE_APP_DEV_SERVICE = http://localhost:9999
|
||||
#VITE_APP_DEV_SERVICE = https://rj4jv5rwqs.by.takin.cc
|
||||
# VITE_APP_DEV_SERVICE = https://stgl.pj.gov.cn/api
|
||||
# VITE_APP_DEV_SERVICE = http://localhost:9999
|
||||
VITE_APP_DEV_SERVICE = https://rj4jv5rwqs.by.takin.cc
|
||||
|
||||
VITE_IMAGE_DEV_PATH = http://localhost:9999
|
||||
# VITE_IMAGE_DEV_PATH = http://localhost:9999
|
||||
VITE_IMAGE_DEV_PATH = https://stgl.pj.gov.cn/api
|
||||
# VITE_IMAGE_DEV_PATH = https://rj4jv5rwqs.by.takin.cc
|
||||
# ----------------------------- end 开发环境 end ------------------------------------
|
||||
|
||||
# --------------------------- start 生产环境 start ----------------------------------
|
||||
VITE_APP_PROD_SERVICE = https://www.zianxin.com/api
|
||||
VITE_APP_PROD_IMAGE = https://www.zianxin.com/api
|
||||
VITE_APP_PROD_SERVICE = https://stgl.pj.gov.cn/api
|
||||
VITE_APP_PROD_IMAGE = https://stgl.pj.gov.cn/api
|
||||
# ----------------------------- end 生产环境 end ------------------------------------
|
||||
@@ -458,6 +458,18 @@
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"root": "pages/common",
|
||||
"pages": [
|
||||
{
|
||||
"path": "content",
|
||||
"style": {
|
||||
"navigationBarTitleText": "内容(文章等等)",
|
||||
"disableScroll": true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"globalStyle": {
|
||||
|
||||
@@ -5,6 +5,7 @@ import { isEmpty } from "radash"
|
||||
|
||||
import { hooks, router } from "@@/index"
|
||||
import { boxesApi } from "@@/api"
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
|
||||
import { filePath } from "@/sheep/utils/file"
|
||||
|
||||
@@ -64,7 +65,7 @@ onShow(() => {
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<crud-layout title="餐桌列表" bg="/static/page/blue-bg.png">
|
||||
<crud-layout title="餐桌列表" :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<z-paging ref="pageRef" height="100%" :fixed="false" v-model="pageHook.list" :default-page-size="999"
|
||||
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">
|
||||
|
||||
@@ -2,9 +2,12 @@
|
||||
import { reactive, nextTick } from "vue"
|
||||
import { onLoad, onShow } from "@dcloudio/uni-app"
|
||||
import { isEmpty } from "radash"
|
||||
|
||||
import { hooks, router } from "@@/index"
|
||||
import { merchantApi, foodApi, payApi, orderApi } from "@@/api"
|
||||
import { filePath } from "@@/utils/file"
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
|
||||
import ProductRow from "./components/product-row.vue"
|
||||
import ProductCart from "./components/product-cart.vue"
|
||||
import ProductTotal from "./components/product-total.vue"
|
||||
@@ -232,7 +235,7 @@ const doFood = () => {
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<crud-layout mainIsScroll tabBarType="just-flot-back" bg="/static/page/blue-bg.png">
|
||||
<crud-layout mainIsScroll tabBarType="just-flot-back" :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<tm-sticky>
|
||||
<swiper class="w-100vw h-30vh" circular :indicator-dots="true" indicator-active-color="#0779FD"
|
||||
indicator-color="#ffffff" :autoplay="true">
|
||||
|
||||
@@ -3,11 +3,13 @@ import { ref, reactive, computed } from "vue"
|
||||
import { onLoad, onShow } from "@dcloudio/uni-app"
|
||||
import { isEmpty } from "radash"
|
||||
import dayjs from "dayjs"
|
||||
|
||||
import { hooks, router } from "@@/index"
|
||||
import { foodApi } from "@@/api"
|
||||
import zTabs from "@@/components/other/z-tabs/z-tabs.vue"
|
||||
import CustomWaterfallsFlow from "@@/components/other/custom-waterfalls-flow/custom-waterfalls-flow.vue"
|
||||
import { filePath } from "@@/utils/file"
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
|
||||
const menus = {
|
||||
tabs: [
|
||||
@@ -91,7 +93,7 @@ const doProduct = (v: any) => {
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<crud-layout title="每日菜谱" navBgColor="#1777FF" navBgTitleColor="white" bg="/static/page/blue-bg.png">
|
||||
<crud-layout title="每日菜谱" navBgColor="#1777FF" navBgTitleColor="white" :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<z-paging ref="pageRef" height="100%" :fixed="false" v-model="pageHook.list" :default-page-size="8"
|
||||
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">
|
||||
|
||||
@@ -2,9 +2,11 @@
|
||||
import { reactive } from "vue"
|
||||
import { onLoad, onShow } from "@dcloudio/uni-app"
|
||||
import { isEmpty } from "radash"
|
||||
|
||||
import { productApi } from "@@/api"
|
||||
import { filePath } from "@@/utils/file"
|
||||
import { hooks } from "@@/index"
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
|
||||
const state = reactive<any>({
|
||||
detailId: null,
|
||||
@@ -32,7 +34,7 @@ const getDetail = async () => {
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<crud-layout title="菜品详情" tabBarType="just-flot-back" bg="/static/page/blue-bg.png">
|
||||
<crud-layout title="菜品详情" tabBarType="just-flot-back" :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<view v-if="state.detail">
|
||||
<image class="w-100vw" :src="filePath(state.detail.picUrl)" mode="widthFix" />
|
||||
<view class="p-x-15rpx">
|
||||
|
||||
@@ -6,6 +6,8 @@ import PlateNum from "@@/components/tongtong-plate/plate-number.vue";
|
||||
import { hooks, router } from "@@/index"
|
||||
import { userCarApi } from "@@/api"
|
||||
import { serviceEnum } from "@/sheep/constant"
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
import { filePath } from "@@/utils/file"
|
||||
|
||||
const { carTypeEnum } = serviceEnum
|
||||
|
||||
@@ -80,7 +82,7 @@ const doSubmit = async () => {
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<crud-layout title="申请车辆" bg="/static/page/blue-bg.png">
|
||||
<crud-layout title="申请车辆" :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<view class="h-30rpx" />
|
||||
<view class="card p-x-30rpx p-y-40rpx">
|
||||
<tm-form ref="applyFormRef" v-model="applyForm" :rules="applyFormRules" direction="vertical">
|
||||
|
||||
@@ -5,6 +5,7 @@ import { onLoad, onShow } from "@dcloudio/uni-app"
|
||||
import { hooks, router } from "@@/index"
|
||||
import { userCarApi } from "@@/api"
|
||||
import { serviceEnum } from "@/sheep/constant"
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
|
||||
import { filePath } from "@@/utils/file"
|
||||
|
||||
@@ -37,7 +38,7 @@ const doApply = () => {
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<crud-layout title="我的车辆" bg="/static/page/blue-bg.png">
|
||||
<crud-layout title="我的车辆" :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<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">
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive } from "vue"
|
||||
import { onShow, onLoad } from "@dcloudio/uni-app"
|
||||
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
import { filePath } from "@@/utils/file"
|
||||
|
||||
import { userAgreementRichText } from './user-agreement.rich'
|
||||
import { privacyPolicyRichText } from './privacy-policy.rich'
|
||||
|
||||
const state = reactive<any>({
|
||||
id: null,
|
||||
title: '',
|
||||
|
||||
})
|
||||
|
||||
onLoad((options: any) => {
|
||||
state.id = options.id
|
||||
state.title = options.title
|
||||
})
|
||||
|
||||
const switchRich = (type: string) => {
|
||||
let text = ""
|
||||
switch (type) {
|
||||
case 'user-agreement':
|
||||
state.id = 'user-agreement'
|
||||
text = userAgreementRichText
|
||||
break
|
||||
case 'privacy-policy':
|
||||
text = privacyPolicyRichText
|
||||
break
|
||||
}
|
||||
return text
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<crud-layout mainIsScroll :title="state.title" :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<view class="h-30rpx" />
|
||||
<view class="sub-text-24" style="line-height: 1.6 !important;" v-html="switchRich(state.id)"></view>
|
||||
</crud-layout>
|
||||
</template>
|
||||
@@ -0,0 +1,86 @@
|
||||
export const privacyPolicyRichText = `
|
||||
<p><strong>浦江县机关事务智慧后勤一体化平台隐私政策</strong></p>
|
||||
<p><strong>最后更新日期:2025-01-27</strong></p>
|
||||
<p> 【浙江资安信信息科技有限公司】(以下简称“我们”)非常重视您的个人信息和隐私保护。本《隐私政策》(以下简称“本政策”)旨在向您说明我们在您使用“浦江县机关事务智慧后勤一体化平台”(以下简称“本应用”)时,如何收集、使用、存储、共享和保护您的个人信息,以及您享有的权利。</p>
|
||||
<p> 请您在使用本应用前仔细阅读并充分理解本政策的全部内容。一旦您勾选“同意”或实际使用本应用,即表示您已理解并同意本政策。</p>
|
||||
<br />
|
||||
<p><strong>一、我们如何收集和使用您的个人信息</strong></p>
|
||||
|
||||
<p><strong>(一)账号注册与登录</strong></p>
|
||||
<p> 为向您提供账号密码登录及相关服务,我们可能收集以下信息:</p>
|
||||
<p>1. 注册信息:如手机号码、工号、邮箱、姓名/昵称等;</p>
|
||||
<p>2. 登录信息:账号、密码(以不可逆方式加密存储)、登录时间、登录 IP、设备信息(设备型号、操作系统、应用版本号等)。</p>
|
||||
<p>3. 通讯录:仅在您主动授权后,我们才会收集您的通讯录信息,用于拨打客服电话。</p>
|
||||
<p>4. 短信:为您创建和管理用户账号,验证您的身份,保障账号安全,并提供登录、找回密码等基础功能。</p>
|
||||
<p> 收集目的:为您创建和管理用户账号,验证您的身份,保障账号安全,并提供登录、找回密码等基础功能。</p>
|
||||
|
||||
<p><strong>(二)订单与就餐信息</strong></p>
|
||||
<p> 在您使用本应用进行菜品浏览、下单、预定和消费记录查询时,我们可能收集:</p>
|
||||
<p>1. 订单信息:菜品名称、数量、金额、下单时间、取餐时间、取餐窗口/食堂名称等;</p>
|
||||
<p>2. 消费记录:消费金额、余额变化、充值记录等。</p>
|
||||
<p> 收集目的:为您提供下单、支付、订单查询、消费记录统计等服务,并在去标识化或统计层面用于改善食堂菜品结构和服务质量。</p>
|
||||
|
||||
<p><strong>(三)客服与反馈</strong></p>
|
||||
<p> 当您通过客服通道或意见反馈功能与我们联系时,我们可能收集:</p>
|
||||
<p>1. 您提供的联系方式:如手机号、邮箱、姓名等;</p>
|
||||
<p>2. 反馈内容:文字描述、图片、时间等。</p>
|
||||
<p> 收集目的:与您沟通处理问题,提供客户服务,并改进我们的产品和服务。</p>
|
||||
|
||||
<p><strong>(四)日志信息与安全</strong></p>
|
||||
<p> 为保障系统安全和运营稳定,我们可能收集:</p>
|
||||
<p>1. 操作日志:功能点击记录、错误日志、崩溃记录等;</p>
|
||||
<p>2. 基本网络信息:IP 地址、网络类型、运营商信息等。</p>
|
||||
<p> 收集目的:用于故障排查、性能优化,以及保障交易和账号安全,进行风险控制与防攻击监测。</p>
|
||||
|
||||
<p><strong>(五)可选权限与信息收集</strong></p>
|
||||
<p> 根据实际功能设计,本应用可能在获得您授权后使用以下可选权限(示例):</p>
|
||||
<p>1. 相机/相册权限:用于上传头像、反馈图片等;</p>
|
||||
<p>2. 通知权限:用于向您推送订单状态变更、系统公告等信息。</p>
|
||||
<p> 若您拒绝授权上述可选权限,可能导致相关功能无法使用,但不影响您使用账号密码登录和基础就餐功能(如适用)。</p>
|
||||
|
||||
<p><strong>二、我们如何使用 Cookie 或同类技术(如有)</strong></p>
|
||||
<p> 为提升您的使用体验,本应用可能使用 Cookie 或本地存储技术,用于记录您的登录状态、统计分析访问情况并优化产品功能。您可以通过设备或浏览器设置管理或删除 Cookie,但禁用 Cookie 可能影响部分功能的使用体验。</p>
|
||||
<br />
|
||||
|
||||
<p><strong>三、我们如何共享、转让和公开披露个人信息</strong></p>
|
||||
<br />
|
||||
<p><strong>(一)共享</strong></p>
|
||||
<p> 我们不会向任何公司、组织和个人共享您的个人信息,但以下情况除外:</p>
|
||||
<p>1. 事先获得您的明确同意或授权;</p>
|
||||
<p>2. 为实现必要功能,向为我们提供支付结算、短信/邮件发送、云存储等服务的第三方合作伙伴共享必要信息,且我们会督促其严格履行保密和安全义务;</p>
|
||||
<p>3. 根据法律法规规定,或行政、司法机关依法提出的要求。</p>
|
||||
|
||||
<p><strong>(二)转让</strong></p>
|
||||
<p> 我们不会将您的个人信息转让给任何公司、组织和个人,但以下情况除外:</p>
|
||||
<p>1. 获取您的明确同意;</p>
|
||||
<p>2. 因公司合并、分立、重组或资产转让等原因,如涉及个人信息转让,我们会要求新的持有方继续受本政策约束,否则将重新取得您的授权同意。</p>
|
||||
|
||||
<p><strong>(三)公开披露</strong></p>
|
||||
<p> 我们不会公开披露您的个人信息,除非:</p>
|
||||
<p>1. 获得您的明确授权同意;</p>
|
||||
<p>2. 基于法律法规或强制性行政、司法要求需要公开披露时,我们将在法律允许范围内尽可能通知您。</p>
|
||||
|
||||
<p><strong>四、我们如何存储及保护您的个人信息</strong></p>
|
||||
<p> 1. 存储地点:我们在中华人民共和国境内收集和产生的个人信息,原则上存储于境内。若因业务需要确需向境外提供,我们将遵守法律法规要求并另行取得您的授权。</p>
|
||||
<p> 2. 存储期限:我们仅在达到本政策所述目的所必需的期限内保留您的个人信息,超过期限后将删除或匿名化处理,法律法规另有规定的除外。</p>
|
||||
<p> 3. 安全措施:我们采用加密、去标识化等技术手段保护个人信息,建立权限控制机制并定期开展安全培训和风险评估,防止个人信息泄露、损毁或丢失。</p>
|
||||
<p> 4. 安全事件处置:如不幸发生个人信息安全事件,我们将按照法律法规要求及时告知您事件基本情况、可能影响、已采取或将要采取的措施,并向相关监管部门报告。</p>
|
||||
<br />
|
||||
|
||||
<p><strong>五、您的权利</strong></p>
|
||||
<p> 在法律法规允许范围内,您对自己的个人信息享有查询与访问、更正与补充、删除、撤回同意和账号注销等权利。您可以通过应用内功能或联系客服等方式行使上述权利。</p>
|
||||
<br />
|
||||
<p><strong>六、未成年人个人信息保护</strong></p>
|
||||
<p> 1. 若您是未成年人用户,应在监护人监护、指导下使用本应用,并在同意本政策前请监护人仔细阅读本政策。</p>
|
||||
<p> 2. 如您是监护人,请确保您所监护的未成年人在您的指导下使用本应用,并帮助其正确理解和行使在本政策项下的权利。</p>
|
||||
<p> 3. 如您认为我们在未取得监护人同意的情况下收集了未成年人的个人信息,请及时联系我们,我们将尽快删除相关数据。</p>
|
||||
<br />
|
||||
<p><strong>七、本隐私政策的更新</strong></p>
|
||||
<p> 我们可能会根据业务发展、法律法规变化等对本政策进行更新。政策更新后,我们将在本应用内以显著方式提示您,必要时会再次征得您的同意。在更新生效后继续使用本应用,即视为您同意受更新后的政策约束。</p>
|
||||
<br />
|
||||
<p><strong>八、如何联系我们</strong></p>
|
||||
<p> 如您对本政策或个人信息保护相关事宜有任何问题、意见或建议,可通过以下方式联系:</p>
|
||||
<p> 运营者:资安信信息科技有限公司</p>
|
||||
<p> 开发者:资安信信息科技有限公司</p>
|
||||
<p> 联系电话:15557321501</p>
|
||||
`
|
||||
@@ -0,0 +1,84 @@
|
||||
export const userAgreementRichText = `
|
||||
<p><strong>食堂 APP 用户协议</strong></p>
|
||||
<p><strong>最后更新日期:2025-01-23</strong></p>
|
||||
<p> 欢迎使用“食堂 APP”(以下简称“本应用”)。本应用由【公司名称】(以下简称“我们”)运营和管理。在注册成为本应用用户之前,请务必认真阅读并充分理解本《用户协议》(以下简称“本协议”)。一旦您勾选“同意”或实际使用本应用,即视为您已阅读、理解并同意接受本协议的全部内容。</p>
|
||||
<p> 本应用仅供单位内部使用的食堂管理工具,不面向社会公众开放。用户均为单位在职员工(成年人),不涉及未成年人。应用用于提供单位内部工作和生活服务,由单位内部食堂提供手机订餐、内部消费记录及餐卡管理服务,不包含任何可能吸引未成年人或有不良引导的内容。</p>
|
||||
<br />
|
||||
|
||||
|
||||
<p><strong>一、账号注册与使用</strong></p>
|
||||
<p> 1. 您需通过手机号码/工号/邮箱等方式注册本应用账号,并设置登录密码。您应保证所提供信息真实、准确、合法、有效,如信息变更应及时更新。</p>
|
||||
<p> 2. 您不得以虚假信息、冒用他人身份信息等方式注册账号,不得恶意注册多个账号。</p>
|
||||
<p> 3. 账号仅限本人使用,您应妥善保管账号与密码,不得向任何第三方透露或转让、出借、出租。</p>
|
||||
<p> 4. 因您保管不当或个人原因导致账号、密码泄露及由此引发的任何损失,由您自行承担。</p>
|
||||
<p> 5. 若发现任何未授权使用您的账号或账号安全漏洞的情况,应立即通知我们,以便我们采取相应措施。</p>
|
||||
<br />
|
||||
<p><strong>二、服务内容</strong></p>
|
||||
<p> 1. 本应用为食堂场景提供的综合服务平台,主要功能包括但不限于:</p>
|
||||
<p>(1)食堂菜品浏览与信息查询;</p>
|
||||
<p>(2)菜品预定、下单与订单管理;</p>
|
||||
<p>(3)消费记录查询、充值记录查询;</p>
|
||||
<p>(4)就餐评价与反馈;</p>
|
||||
<p>(5)公告通知、活动信息展示等。</p>
|
||||
<p> 2. 我们有权根据业务需要对服务内容进行增加、变更或取消,并在合理范围内通过公告、应用内提示等方式进行说明。</p>
|
||||
<p> 3. 部分服务可能需要网络支持或依赖第三方服务提供商,对于因网络故障、第三方系统异常等非我们原因导致的服务中断或延迟,我们不承担相关责任。</p>
|
||||
<br />
|
||||
<p><strong>三、用户行为规范</strong></p>
|
||||
<p> 1. 您在使用本应用过程中不得从事以下行为:</p>
|
||||
<p>(1)违反宪法和法律法规的行为;</p>
|
||||
<p>(2)发布、传播任何违法、暴力、淫秽、色情、赌博、恐怖或其他不良信息;</p>
|
||||
<p>(3)侵犯他人知识产权、个人信息、隐私权、名誉权等合法权益的行为;</p>
|
||||
<p>(4)利用本应用从事任何可能对网络安全造成危害的行为,包括但不限于传播病毒、恶意代码、攻击服务器等;</p>
|
||||
<p>(5)对本应用进行反向工程、反汇编、反编译等;</p>
|
||||
<p>(6)未经许可利用本应用进行广告、营销、垃圾信息发送等。</p>
|
||||
<p> 2. 您应对自己账号下的一切行为及其后果承担全部责任。</p>
|
||||
<p> 3. 若您违反本协议约定,我们有权采取包括但不限于限制功能、冻结或注销账号、删除违法内容、向有关部门报告等措施。</p>
|
||||
<br />
|
||||
<p><strong>四、订单与消费</strong></p>
|
||||
<p> 1. 您在本应用中通过账号下单即视为向食堂发出消费请求,应仔细核对菜品信息、数量、价格等内容。</p>
|
||||
<p> 2. 下单成功后,具体供餐规则以食堂实际管理制度及页面提示为准。部分场景下订单可能需要在指定时间前取消,否则视为正常消费。</p>
|
||||
<p> 3. 若出现缺菜、临时断货等情况,我们将根据食堂实际运营情况为您提供同价位或相近价位替代方案,或进行退款处理。</p>
|
||||
<p> 4. 对于因您个人原因(如迟到、不按规定取餐等)造成的菜品浪费或无法正常就餐的情况,由您自行承担相应后果。</p>
|
||||
<br />
|
||||
<p><strong>五、费用与支付</strong></p>
|
||||
<p> 1. 本应用可能涉及账户余额充值、在线支付等功能,您应确保支付账户具有合法来源和充足余额。</p>
|
||||
<p> 2. 支付环节可能由第三方支付机构提供服务,您应遵守其相关协议与规则。</p>
|
||||
<p> 3. 对于技术问题、网络延迟等原因导致的支付异常,我们会协助排查并与支付机构或食堂方协调处理,但不对第三方支付服务自身问题承担责任。</p>
|
||||
<p> 4. 如因系统故障等非用户原因造成重复扣费,我们将核实后协助办理退款。</p>
|
||||
<br />
|
||||
<p><strong>六、个人信息与隐私保护</strong></p>
|
||||
<p> 1. 我们将按照《隐私政策》收集、使用、存储和保护您的个人信息。</p>
|
||||
<p> 2. 在您使用账号密码登录本应用时,我们会收集必要的登录信息用于身份验证和安全风控。</p>
|
||||
<p> 3. 除法律法规另有规定或经您明示授权外,我们不会向无关第三方披露您的个人信息。</p>
|
||||
<p> 4. 有关个人信息的详细规则,请查阅本应用内展示的《隐私政策》。</p>
|
||||
<br />
|
||||
<p><strong>七、知识产权</strong></p>
|
||||
<p> 1. 本应用及相关服务中包含的所有内容,包括但不限于界面设计、图标、文字、图片、音视频、代码、文档等的知识产权均归我们或相关权利人所有。</p>
|
||||
<p> 2. 未经我们或相关权利人事先书面许可,您不得以任何形式对上述内容进行复制、修改、传播、展示、出售或用于其他商业用途。</p>
|
||||
<p> 3. 您在使用本应用过程中创作并上传的合法内容,其知识产权归您或原权利人所有,但您理解并同意授予我们在法律允许范围内的非独占性、可撤销的许可,以用于本应用的展示和运营。</p>
|
||||
<br />
|
||||
<p><strong>八、第三方服务</strong></p>
|
||||
<p> 1. 本应用可能包含指向第三方网站、应用或服务的链接或接入第三方组件。</p>
|
||||
<p> 2. 您使用第三方服务时,应遵守第三方的服务条款和隐私政策,与第三方之间的权利义务由您与第三方自行承担。</p>
|
||||
<br />
|
||||
<p><strong>九、服务变更、中断与终止</strong></p>
|
||||
<p> 1. 我们有权基于业务调整、政策变更、不可抗力等原因,对本应用的部分或全部服务进行变更、中断或终止。</p>
|
||||
<p> 2. 在合理范围内,我们会通过公告、应用内通知等方式提前告知您。</p>
|
||||
<p> 3. 因不可抗力造成的服务中断或数据丢失等后果,我们在法律允许范围内免责。</p>
|
||||
<br />
|
||||
<p><strong>十、未成年人使用条款</strong></p>
|
||||
<p> 1. 若您为未成年人,应在监护人监护、指导下阅读本协议并使用本应用。</p>
|
||||
<p> 2. 未成年人在使用本应用的同时也应提高自我保护意识,合理安排就餐与消费。</p>
|
||||
<br />
|
||||
<p><strong>十一、适用法律与争议解决</strong></p>
|
||||
<p> 1. 本协议的订立、执行与解释及争议的解决,适用中华人民共和国大陆地区法律。</p>
|
||||
<p> 2. 因本协议或使用本应用服务引起的任何争议,双方应首先友好协商解决;协商不成的,任一方可向【公司住所地】有管辖权的人民法院提起诉讼。</p>
|
||||
<br />
|
||||
<p><strong>十二、条款的变更与更新</strong></p>
|
||||
<p> 1. 我们有权根据业务发展和法律法规变化适时修改本协议内容,并在应用内进行公告或提示。</p>
|
||||
<p> 2. 变更后的协议一经公布即生效。如您不同意变更内容,应立即停止使用本应用;若您继续使用本应用,即视为您接受修改后的协议。</p>
|
||||
<br />
|
||||
<p><strong>十三、联系方式</strong></p>
|
||||
<p> 如您对本协议有任何疑问、意见或投诉,可通过以下方式联系我们:</p>
|
||||
<p> 联系电话:15557321501</p>
|
||||
`
|
||||
@@ -5,6 +5,7 @@ import { isEmpty } from "radash"
|
||||
|
||||
import { hooks, router } from "@@/index"
|
||||
import { faceApi } from "@@/api"
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
|
||||
import { filePath } from "@@/utils/file"
|
||||
|
||||
@@ -77,7 +78,7 @@ const doSubmit = async () => {
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<crud-layout :title="state.detailId ? '修改人脸' : '人脸上传'" bg="/static/page/blue-bg.png">
|
||||
<crud-layout :title="state.detailId ? '修改人脸' : '人脸上传'" :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<view class="h-30rpx" />
|
||||
<view class="card px-30rpx py-40rpx">
|
||||
<tm-form ref="applyFormRef" v-model="applyForm" :rules="applyFormRules" direction="vertical">
|
||||
|
||||
@@ -4,6 +4,7 @@ import { onShow } from "@dcloudio/uni-app"
|
||||
|
||||
import { hooks, router } from "@@/index"
|
||||
import { faceApi } from "@@/api"
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
|
||||
import { filePath } from "@@/utils/file"
|
||||
|
||||
@@ -47,7 +48,7 @@ const doDel = (id: string) => {
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<crud-layout title="人脸管理" bg="/static/page/blue-bg.png">
|
||||
<crud-layout title="人脸管理" :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<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">
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<crud-layout title="通知公告" bg="/static/page/blue-bg.png">
|
||||
<crud-layout title="通知公告" :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<view class="notice-detail">
|
||||
<view class="detail-header">
|
||||
<view class="title">
|
||||
@@ -34,6 +34,9 @@
|
||||
<script setup lang="ts">
|
||||
import { computed, ref } from "vue"
|
||||
import { onLoad } from "@dcloudio/uni-app"
|
||||
|
||||
import { filePath } from "@@/utils/file"
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
import { actCancel, actComApi, noticeApi } from "@/sheep/api"
|
||||
|
||||
const noticeId = ref("")
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<crud-layout title="通知公告" bg="/static/page/blue-bg.png">
|
||||
<crud-layout title="通知公告" :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<view class="notice-container">
|
||||
<view class="notice-list">
|
||||
<view v-if="noticeList.length === 0" class="empty-tip"> 暂无公告 </view>
|
||||
@@ -41,6 +41,9 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, onMounted } from "vue"
|
||||
|
||||
import { filePath } from "@@/utils/file"
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
import { noticeApi } from "@/sheep/api"
|
||||
|
||||
const noticeList = ref<any[]>([])
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<crud-layout title="详情" mainIsScroll bg="/static/page/blue-bg.png">
|
||||
<crud-layout title="详情" mainIsScroll :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<view v-if="detail.id">
|
||||
<view class="h-20rpx" />
|
||||
<tm-alert v-if="alertListType2[detail.checkStatus] && detail.type == '2'" :showClose="false" skin="normal"
|
||||
@@ -78,6 +78,9 @@
|
||||
<script setup lang="ts">
|
||||
import { ref } from "vue"
|
||||
import { onLoad } from "@dcloudio/uni-app"
|
||||
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
import { filePath } from "@@/utils/file"
|
||||
import { invitationApi } from "@/sheep/api"
|
||||
|
||||
const alertListType2 = {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<crud-layout bg="/static/page/blue-bg.png">
|
||||
<crud-layout :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<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">
|
||||
@@ -23,11 +23,11 @@
|
||||
marginTop: '10rpx',
|
||||
border: '1px solid transparent',
|
||||
}" :badge-style="{
|
||||
// whiteSpace: 'nowrap',
|
||||
// position: 'relative',
|
||||
// top: '-14rpx',
|
||||
// left: '-72rpx',
|
||||
}" @change="onTabChange" />
|
||||
// whiteSpace: 'nowrap',
|
||||
// position: 'relative',
|
||||
// top: '-14rpx',
|
||||
// left: '-72rpx',
|
||||
}" @change="onTabChange" />
|
||||
</view>
|
||||
|
||||
<view class="bg-white rounded-16rpx px-20rpx">
|
||||
@@ -110,6 +110,9 @@
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive } from "vue"
|
||||
import { onShow } from "@dcloudio/uni-app"
|
||||
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
import { filePath } from "@@/utils/file"
|
||||
import { hooks, router } from "@@/index"
|
||||
import zTabs from "@@/components/other/z-tabs/z-tabs.vue"
|
||||
import { invitationApi } from "@/sheep/api"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<crud-layout mainIsScroll bg="/static/page/blue-bg.png">
|
||||
<crud-layout mainIsScroll :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<view class="h-20rpx" />
|
||||
<tm-sheet :margin="[0]">
|
||||
<tm-alert :border="['2']" :borderColor="['#89c0ff']" :darkBorderColor="['#3b5066']">访客邀约请填写以下信息</tm-alert>
|
||||
@@ -65,6 +65,9 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import { reactive, ref } from "vue"
|
||||
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
import { filePath } from "@@/utils/file"
|
||||
import { invitationApi } from "@/sheep/api/index"
|
||||
import TimeRangePicker from "@/sheep/components/time-range-picker.vue"
|
||||
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
import { reactive, ref, computed } from "vue"
|
||||
import { onLoad, onShow } from "@dcloudio/uni-app"
|
||||
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
import { filePath } from "@@/utils/file"
|
||||
import uqrcode from "@@/utils/uqrcode"
|
||||
|
||||
import { applyApi } from "@@/api"
|
||||
@@ -53,10 +55,10 @@ const doViewQrcode = async () => {
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<crud-layout tabBarType="just-flot-back" bg="/static/page/blue-bg.png">
|
||||
<crud-layout tabBarType="just-flot-back" :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<view class="h-30rpx"></view>
|
||||
<view class="size-full relative">
|
||||
<image class="w-650rpx h-1030rpx p-10rpx rounded-12rpx" src="/static/icon/birthday_coupon.jpg"
|
||||
<image class="w-650rpx h-1030rpx p-10rpx rounded-12rpx" :src="filePath(SERVICE_IMAGE.birthdayCoupon)"
|
||||
mode="aspectFit" />
|
||||
<view class="z-100 size-120px absolute left-20rpx top-600rpx flex-row-center bg-white p-20rpx rounded-12rpx"
|
||||
@tap="doViewQrcode">
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<crud-layout mainIsScroll bg="/static/page/blue-bg.png">
|
||||
<crud-layout mainIsScroll :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<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">
|
||||
@@ -50,7 +50,10 @@
|
||||
<script setup lang="ts">
|
||||
import { actCancel } from "@/sheep/api"
|
||||
import { reactive, ref } from "vue"
|
||||
|
||||
import zTabs from "@@/components/other/z-tabs/z-tabs.vue"
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
import { filePath } from "@@/utils/file"
|
||||
import { hooks } from "@/sheep"
|
||||
|
||||
const tabs = [
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<crud-layout mainIsScroll tabBarType="just-flot-back" bg="/static/page/blue-bg.png">
|
||||
<crud-layout mainIsScroll tabBarType="just-flot-back" :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<tm-sticky>
|
||||
<swiper class="w-100vw h-30vh" circular :indicator-dots="true" indicator-active-color="#0779FD"
|
||||
indicator-color="#ffffff" :autoplay="true">
|
||||
@@ -122,6 +122,7 @@ import { isEmpty } from "radash"
|
||||
import { hooks, router } from "@@/index"
|
||||
import { foodApi, merchantApi, orderApi, payApi, shopApi } from "@@/api"
|
||||
import { filePath } from "@@/utils/file"
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
// import ProductRow from "./components/product-row.vue"
|
||||
// import ProductCart from "./components/product-cart.vue"
|
||||
// import ProductTotal from "./components/product-total.vue"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<crud-layout title="活动详情" mainIsScroll bg="/static/page/blue-bg.png">
|
||||
<crud-layout title="活动详情" mainIsScroll :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<view v-if="state.actId" class="px-16rpx py-32rpx">
|
||||
<view v-if="state.actType == 'CANCEL_ACT'"
|
||||
class="card rounded-lb-0! rounded-rb-0! w-full h-400rpx relative activity-card overflow-hidden">
|
||||
@@ -88,7 +88,8 @@ import { onLoad } from "@dcloudio/uni-app"
|
||||
|
||||
import { actCancel, actComApi, actCouponApi, userApi } from "@/sheep/api"
|
||||
import { hooks, router } from "@/sheep"
|
||||
import { serviceEnum, storageConstant } from "@@/constant"
|
||||
import { serviceEnum, storageConstant, SERVICE_IMAGE } from "@@/constant"
|
||||
import { filePath } from "@@/utils/file"
|
||||
|
||||
import ModifyUser from "@@/components/modify-user.vue"
|
||||
|
||||
|
||||
@@ -3,6 +3,8 @@ import { reactive, ref, computed } from "vue"
|
||||
import { onLoad, onShow } from "@dcloudio/uni-app"
|
||||
|
||||
import { router } from "@/sheep"
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
import { filePath } from "@@/utils/file"
|
||||
|
||||
import uqrcode from "@@/utils/uqrcode"
|
||||
import * as CryptoJS from "crypto-js"
|
||||
@@ -141,7 +143,7 @@ const genVerificationCode = async (params: Record<string, any>) => {
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<crud-layout title="我参加的活动" mainIsScroll bg="/static/page/blue-bg.png">
|
||||
<crud-layout title="我参加的活动" mainIsScroll :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<z-paging ref="pageRef" height="100%" :fixed="false" v-model="dynamicPageHook.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"
|
||||
|
||||
@@ -5,6 +5,7 @@ import { isEmpty } from "radash"
|
||||
|
||||
import { hooks, router } from "@@/index"
|
||||
import { orderApi, refundApi } from "@@/api"
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
|
||||
import { filePath } from "@@/utils/file"
|
||||
|
||||
@@ -68,7 +69,7 @@ const doCancelRefund = async () => {
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<crud-layout title="订单详情" mainIsScroll bg="/static/page/blue-bg.png">
|
||||
<crud-layout title="订单详情" mainIsScroll :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<view class="flex-row-center m-t-30rpx"
|
||||
v-if="state.detail.orderStatus === '5' && ['2', '7'].includes(state.detail.orderType)">
|
||||
<view class="flex-row-center bg-white w-550rpx rounded-16rpx">
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<crud-layout :title="scanPayState.mchName" bg="/static/page/blue-bg.png">
|
||||
<crud-layout :title="scanPayState.mchName" :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<view class="h-screen flex flex-col">
|
||||
<tm-sheet :margin="[0, 10]" class="flex flex-row">
|
||||
<span class="text-2xl text-[#333] mr-8rpx line-height-normal">¥</span>
|
||||
@@ -33,6 +33,7 @@
|
||||
<script setup lang="ts">
|
||||
import { ref, computed, reactive } from "vue"
|
||||
import { onLoad, onShow } from "@dcloudio/uni-app"
|
||||
|
||||
import payApi from "@@/api/pay"
|
||||
import { merchantApi, orderApi, walletApi } from "@/sheep/api"
|
||||
import { hooks } from "@@/index"
|
||||
@@ -42,6 +43,7 @@ import { displayPrice, storePrice } from "@/sheep/utils/format-money"
|
||||
import { usePayStore } from "@/sheep/stores/pay"
|
||||
import { isEmpty } from "radash"
|
||||
import NumberKeyboard from "@/sheep/components/number-keyboard.vue"
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
|
||||
const loading = ref(false)
|
||||
const scanPayState = reactive({
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<crud-layout title="转账" mainIsScroll bg="/static/page/blue-bg.png">
|
||||
<crud-layout title="转账" mainIsScroll :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<view class="h-20rpx"></view>
|
||||
<view class="p-32rpx card flex items-center justify-between">
|
||||
<view class="flex items-center">
|
||||
@@ -71,6 +71,7 @@ import { hooks, router } from "@@/index"
|
||||
import { filePath } from "@/sheep/utils/file"
|
||||
import { storePrice } from "@/sheep/utils/format-money"
|
||||
import { usePayStore } from "@/sheep/stores/pay"
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
|
||||
const payStore = usePayStore()
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<crud-layout mainIsScroll bg="/static/page/blue-bg.png">
|
||||
<crud-layout mainIsScroll :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<view class="h-40rpx"></view>
|
||||
<view class="card flex justify-between items-center mb-16rpx mx-20rpx p-32rpx" v-for="item in categoryList"
|
||||
:key="item.id">
|
||||
@@ -65,6 +65,7 @@ import NodeTree from "@/sheep/components/node-tree.vue"
|
||||
import { useCategaryManage } from "./use-categary-manage"
|
||||
import { hooks } from "@@/index"
|
||||
import { filePath } from "@/sheep/utils/file"
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
|
||||
const categaryFormDrawer = ref(false)
|
||||
const form = reactive<any>({
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
<template>
|
||||
<tm-drawer z-index="800" v-model:show="modelValue" showClose title="购物车" size="80%" bgColor="#ECF4F9" @close="doClose">
|
||||
<tm-drawer z-index="800" v-model:show="modelValue" showClose title="购物车" size="80%" bgColor="#ECF4F9"
|
||||
@close="doClose">
|
||||
<view v-if="totPrice > 0" class="flex-row card px-15rpx py-25rpx mb-20rpx" v-for="(v, i) in cartList" :key="i">
|
||||
<image class="size-160rpx rounded-12rpx mr-20rpx bg-#eeeeee" :src="filePath(v.productPic)" mode="aspectFill" />
|
||||
<image class="size-160rpx rounded-12rpx mr-20rpx bg-#eeeeee" :src="filePath(v.productPic)"
|
||||
mode="aspectFill" />
|
||||
<view class="flex-1 overflow-hidden">
|
||||
<view class="sub-text-30 truncate">{{ v.productName }}</view>
|
||||
<view class="second-text-26 show-line">单位 {{ v.unit }}</view>
|
||||
@@ -14,12 +16,12 @@
|
||||
<view class="flex-row justify-between items-center">
|
||||
<view
|
||||
class="flex-row-center size-40rpx rounded-full border-1px border-solid border-color-#0094ff"
|
||||
@tap.stop="removeProductCount(v.productId, merchantId)"
|
||||
>
|
||||
@tap.stop="removeProductCount(v.productId, merchantId)">
|
||||
<view class="iconfont icon-a--" />
|
||||
</view>
|
||||
<view class="sub-text-28 m-x-20rpx">{{ v.productCount }}</view>
|
||||
<view class="flex-row-center size-40rpx rounded-full bg-#0094ff" @tap.stop="addProductCount(v.productId, merchantId)">
|
||||
<view class="flex-row-center size-40rpx rounded-full bg-#0094ff"
|
||||
@tap.stop="addProductCount(v.productId, merchantId)">
|
||||
<view class="font-size-40rpx color-white iconfont icon-a-" />
|
||||
</view>
|
||||
</view>
|
||||
@@ -28,7 +30,7 @@
|
||||
</view>
|
||||
|
||||
<view v-else class="flex-col justify-center items-center pt-300rpx">
|
||||
<image src="@/static/page/cart_empty.png" class="size-350rpx" />
|
||||
<image :src="filePath(SERVICE_IMAGE.carEmpty)" class="size-350rpx" />
|
||||
<text class="sub-text-32 font-bold">购物车空空如也</text>
|
||||
</view>
|
||||
|
||||
@@ -38,9 +40,12 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import { filePath } from "@/sheep/utils/file"
|
||||
import useCartBuy from "../use-cart-buy"
|
||||
import { SERVICE_IMAGE } from "@/sheep/constant/index"
|
||||
import { hooks } from "@/sheep"
|
||||
|
||||
import useCartBuy from "../use-cart-buy"
|
||||
|
||||
|
||||
const modelValue = defineModel("modelValue", { default: false })
|
||||
const props = defineProps({
|
||||
merchantId: {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<crud-layout title="共富商城" mainIsScroll bg="/static/page/blue-bg.png">
|
||||
<crud-layout title="共富商城" mainIsScroll :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<swiper class="w-full h-500rpx" circular :indicator-dots="true" indicator-active-color="#0779FD"
|
||||
indicator-color="#ffffff" :autoplay="true">
|
||||
<swiper-item v-for="(v, i) in goodsDetail.carouselImages?.split(',')" :key="i">
|
||||
@@ -87,6 +87,8 @@ import { computed, reactive } from "vue"
|
||||
import { prosperityShopApi } from "@/sheep/api"
|
||||
import { filePath } from "@/sheep/utils/file"
|
||||
import { displayPrice } from "@/sheep/utils/format-money"
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
|
||||
import ProductTotal from "./components/product-total.vue"
|
||||
import ProductSku from "./components/product-sku.vue"
|
||||
import ProductCart from "./components/product-cart.vue"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<crud-layout title="" mainIsScroll bg="/static/page/blue-bg.png">
|
||||
<crud-layout title="" mainIsScroll :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<view class="h-30rpx" />
|
||||
<tm-form @submit="onsubmit" v-model="form" :rules="rules" direction="horizontal">
|
||||
<view class="card p-20rpx mb-20rpx">
|
||||
@@ -153,11 +153,13 @@
|
||||
<script setup lang="ts">
|
||||
import { reactive, ref, watch } from "vue"
|
||||
import { hooks } from "@@/index"
|
||||
|
||||
import { prosperityShopApi } from "@/sheep/api"
|
||||
import ShopCategaryPicker from "@/sheep/components/shop-categary-picker.vue"
|
||||
import { onLoad } from "@dcloudio/uni-app"
|
||||
import { filePath } from "@/sheep/utils/file"
|
||||
import { displayPrice, storePrice } from "@/sheep/utils/format-money"
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
|
||||
const form = reactive<any>({
|
||||
id: "",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<crud-layout mainIsScroll bg="/static/page/blue-bg.png">
|
||||
<crud-layout mainIsScroll :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<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">
|
||||
@@ -98,11 +98,14 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import { reactive, ref } from "vue"
|
||||
|
||||
import { prosperityShopApi } from "@/sheep/api"
|
||||
import { hooks } from "@/sheep"
|
||||
import { filePath } from "@/sheep/utils/file"
|
||||
import { onLoad, onShow } from "@dcloudio/uni-app"
|
||||
import { displayPrice } from "@/sheep/utils/format-money"
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
|
||||
import { useGoodsManage } from "./use-goods-manage"
|
||||
|
||||
const state = reactive<any>({
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<crud-layout title="共富商城" mainIsScroll bg="/static/page/blue-bg.png">
|
||||
<crud-layout title="共富商城" mainIsScroll :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<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">
|
||||
@@ -72,9 +72,11 @@
|
||||
import { hooks } from "@/sheep"
|
||||
import { prosperityShopApi } from "@/sheep/api"
|
||||
import { reactive, ref } from "vue"
|
||||
|
||||
import { filePath } from "@/sheep/utils/file"
|
||||
import { onLoad } from "@dcloudio/uni-app"
|
||||
import { displayPrice } from "@/sheep/utils/format-money"
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
|
||||
const state = reactive<any>({
|
||||
params: {
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
<template>
|
||||
<crud-layout title="结算" mainIsScroll bg="/static/page/blue-bg.png">
|
||||
<crud-layout title="结算" mainIsScroll :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<view class="h-20rpx" />
|
||||
<view class="bg-#FFA61Ecc color-#fff px-16rpx py-8rpx text-28rpx rounded-2">温馨提示:当天的订单预计明天开始配送</view>
|
||||
|
||||
<tm-sticky-header>
|
||||
<view class="h-20rpx" />
|
||||
<view class="card p-20rpx">
|
||||
<view class="prefix_title text-36rpx mb-16rpx">自提点</view>
|
||||
<view class="prefix_title text-36rpx mb-16rpx">自提点</view>
|
||||
<view class="flex-row items-center justify-between" @click="onPickupPoint">
|
||||
<view v-if="curPickup.id" class="sub-text-30 mb-16rpx flex items-center">
|
||||
<image class="size-80rpx rounded-1 mr-16rpx" :src="filePath(curPickup.logo)" />
|
||||
@@ -29,7 +29,8 @@
|
||||
<view class="card p-20rpx mb-20rpx">
|
||||
<view class="prefix_title text-36rpx mb-16rpx">我的购买</view>
|
||||
<view v-if="totalCount > 0" class="flex-row mb-20rpx" v-for="(v, i) in cartList" :key="i">
|
||||
<image class="size-140rpx rounded-12rpx mr-20rpx bg-#eeeeee" :src="filePath(v.productPic)" mode="aspectFill" />
|
||||
<image class="size-140rpx rounded-12rpx mr-20rpx bg-#eeeeee" :src="filePath(v.productPic)"
|
||||
mode="aspectFill" />
|
||||
<view class="flex-1 overflow-hidden">
|
||||
<view class="sub-text-30 truncate">{{ v.productName }}</view>
|
||||
<view class="flex justify-between items-center">
|
||||
@@ -51,36 +52,30 @@
|
||||
<view class="second-text-36 color-#f63a36!">¥ {{ hooks.useMoney(totPrice) }}</view>
|
||||
<view class="sub-text-28">共{{ totalCount }}件</view>
|
||||
</view>
|
||||
<view class="bg-#0094ff px-60rpx py-20rpx text-center rounded-full sub-text-32 color-white!" @tap.stop="submitOrder">提交订单</view>
|
||||
<view class="bg-#0094ff px-60rpx py-20rpx text-center rounded-full sub-text-32 color-white!"
|
||||
@tap.stop="submitOrder">提交订单</view>
|
||||
</view>
|
||||
</template>
|
||||
</crud-layout>
|
||||
|
||||
<tm-drawer v-model:show="state.showDrawer" title="选择自提点" :showClose="true" :showFooter="false" size="86%" bgColor="#F3FAFF">
|
||||
<z-paging
|
||||
ref="pageRef"
|
||||
height="100%"
|
||||
v-model="pageHook.list"
|
||||
:default-page-size="10"
|
||||
safe-area-inset-bottom
|
||||
:loading-more-enabled="true"
|
||||
@query="query"
|
||||
:auto-clean-list-when-reload="false"
|
||||
:auto-scroll-to-top-when-reload="false"
|
||||
@scroll="pageHook.scroll"
|
||||
:show-loading-more-no-more-view="false"
|
||||
>
|
||||
<tm-drawer v-model:show="state.showDrawer" title="选择自提点" :showClose="true" :showFooter="false" size="86%"
|
||||
bgColor="#F3FAFF">
|
||||
<z-paging ref="pageRef" height="100%" v-model="pageHook.list" :default-page-size="10" safe-area-inset-bottom
|
||||
:loading-more-enabled="true" @query="query" :auto-clean-list-when-reload="false"
|
||||
:auto-scroll-to-top-when-reload="false" @scroll="pageHook.scroll" :show-loading-more-no-more-view="false">
|
||||
<view class="h-100rpx"></view>
|
||||
<tm-radio-group v-model="state.curPickupId" direction="column" @change="radioChange">
|
||||
<view class="card p-16rpx">
|
||||
<tm-radio v-for="(v, i) in pageHook.list" :key="i" class="w-full h-full px-16rpx" :value="v.id">
|
||||
<template v-slot:label="checked">
|
||||
<view class="flex items-center mb-8rpx">
|
||||
<image class="size-140rpx rounded-12rpx mr-16rpx" :src="filePath(v.logo)" mode="aspectFill" />
|
||||
<image class="size-140rpx rounded-12rpx mr-16rpx" :src="filePath(v.logo)"
|
||||
mode="aspectFill" />
|
||||
<view class="flex-1 overflow-hidden">
|
||||
<view class="sub-text-30 truncate">{{ v.name }}</view>
|
||||
<view class="sub-text-26">{{ v.phone }}</view>
|
||||
<view class="sub-text-24" v-for="(item, index) in JSON.parse(v.businessHoursJson)" :key="index">
|
||||
<view class="sub-text-24" v-for="(item, index) in JSON.parse(v.businessHoursJson)"
|
||||
:key="index">
|
||||
<text>{{ item.title }}:</text>
|
||||
<text>{{ item.startTime }} ~ </text>
|
||||
<text>{{ item.endTime }}</text>
|
||||
@@ -89,7 +84,8 @@
|
||||
</view>
|
||||
<tm-text class="mx-20rpx mb-8rpx">地址:{{ v.detailAddress || "暂无" }}</tm-text>
|
||||
<tm-collapse v-if="v.introduction" @click.stop>
|
||||
<tm-collapse-item :name="i" title="简介" titleFontSize="28" activeColor="#000" titleHeight="40" :showBottomLine="false">
|
||||
<tm-collapse-item :name="i" title="简介" titleFontSize="28" activeColor="#000"
|
||||
titleHeight="40" :showBottomLine="false">
|
||||
<tm-text>{{ v.introduction }}</tm-text>
|
||||
<template #right>
|
||||
<text class="second-text-24">展开</text>
|
||||
@@ -107,11 +103,13 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import { computed, reactive, ref } from "vue"
|
||||
|
||||
import { hooks } from "@/sheep"
|
||||
import useCartBuy from "./use-cart-buy"
|
||||
import { filePath } from "@/sheep/utils/file"
|
||||
import { onLoad } from "@dcloudio/uni-app"
|
||||
import { walletApi } from "@/sheep/api"
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
|
||||
const { cartList, totPrice, totalCount, getShopCart, doBuy } = useCartBuy()
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<crud-layout title="共富商城" mainIsScroll bg="/static/page/blue-bg.png" @scroll="onScroll">
|
||||
<crud-layout title="共富商城" mainIsScroll :bg="filePath(SERVICE_IMAGE.blueBg)" @scroll="onScroll">
|
||||
<view class="w-full h-400rpx relative">
|
||||
<image :src="filePath(mchDetail.images)" class="w-full h-full bg-#eeeeee" mode="aspectFill" />
|
||||
<view class="absolute w-full h-full top-0 left-0" :style="filterStyle"></view>
|
||||
@@ -102,6 +102,8 @@ import { prosperityShopApi } from "@/sheep/api"
|
||||
import { filePath } from "@/sheep/utils/file"
|
||||
import treeToList from "@/sheep/utils/tree-to-list"
|
||||
import { displayPrice } from "@/sheep/utils/format-money"
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
|
||||
import useShopDetailScroll from "./use-shop-detail-scroll"
|
||||
import useCartBuy from "./use-cart-buy"
|
||||
import ProductTotal from "./components/product-total.vue"
|
||||
|
||||
@@ -5,6 +5,7 @@ import { onHide, onShow } from "@dcloudio/uni-app"
|
||||
import { router } from "@@/index"
|
||||
import { noticeApi, appApi } from "@@/api/index"
|
||||
import { getAppInfo } from "@@/utils/app"
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
import { filePath } from "@@/utils/file"
|
||||
import { useTabbarStore } from "@@/stores/tabbar"
|
||||
|
||||
@@ -92,7 +93,7 @@ const getAppMenuList = async () => {
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<crud-layout title="智慧后勤系统" bg="/static/page/blue-bg.png">
|
||||
<crud-layout title="智慧后勤系统" :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<view class="h-20rpx" />
|
||||
<swiper class="w-full h-280rpx rounded-16rpx overflow-hidden" circular :indicator-dots="true"
|
||||
indicator-active-color="#0779FD" indicator-color="#ffffff" :autoplay="true">
|
||||
@@ -120,8 +121,8 @@ const getAppMenuList = async () => {
|
||||
<view
|
||||
class="h-100rpx flex justify-between items-center p-x-16rpx p-y-20rpx border-b-1 border-color-#f0f0f0"
|
||||
v-for="(v, idx) in group" :key="idx">
|
||||
<view class="flex-1 sub-text-26 font-normal!">{{ v.title }}</view>
|
||||
<view class="w-250rpx second-text-24">{{ v.createTime }}</view>
|
||||
<view class="flex-1 sub-text-26 font-normal! truncate">{{ v.title }}</view>
|
||||
<view class="w-250rpx second-text-24 m-l-10rpx">{{ v.createTime }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</swiper-item>
|
||||
|
||||
@@ -4,6 +4,8 @@ import { onShow } from "@dcloudio/uni-app"
|
||||
import { constant, router } from "@@/index"
|
||||
import { userApi, miniPlatformApi } from "@@/api"
|
||||
import { getAppInfo } from "@@/utils/app"
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
import { filePath } from "@@/utils/file"
|
||||
|
||||
import AffirmCheck from "@/sheep/components/common/affirm-check.vue"
|
||||
import AffirmModal from "@/sheep/components/common/affirm-modal.vue"
|
||||
@@ -57,7 +59,7 @@ const minAppGetphone = async (e) => {
|
||||
uni.setStorageSync(constant.storageConstant.USERINFO, userData)
|
||||
uni.hideLoading()
|
||||
uni.showToast({ title: "登录成功", icon: "success" })
|
||||
router.jump("/pages/tabbar/canteen", {}, 3)
|
||||
router.jump("/pages/root/dashboard", {}, 3)
|
||||
} catch (error) {
|
||||
console.error("登录错误", error);
|
||||
}
|
||||
@@ -79,7 +81,7 @@ const affirmConfirm = () => {
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<crud-layout title="登录" bg="/static/page/blue-bg.png">
|
||||
<crud-layout title="登录" :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<view class="h-30rpx" />
|
||||
|
||||
<view class="flex-col-center m-t-160rpx">
|
||||
|
||||
@@ -3,6 +3,8 @@ import { ref, reactive } from "vue"
|
||||
import { onLoad, onShow } from "@dcloudio/uni-app"
|
||||
import { constant, router } from "@@/index"
|
||||
import { userApi } from "@@/api"
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
import { filePath } from "@@/utils/file"
|
||||
|
||||
import AffirmCheck from "@/sheep/components/common/affirm-check.vue"
|
||||
import AffirmModal from "@/sheep/components/common/affirm-modal.vue"
|
||||
@@ -69,7 +71,7 @@ const doSubmit = async () => {
|
||||
} as GlobalSetting.RememberUser)
|
||||
uni.hideLoading()
|
||||
uni.showToast({ title: "登录成功", icon: "none" })
|
||||
router.jump("/pages/tabbar/canteen", {}, 3)
|
||||
router.jump("/pages/root/dashboard", {}, 3)
|
||||
}
|
||||
|
||||
const disposeLogin = () => {
|
||||
@@ -92,7 +94,7 @@ const affirmModalConfirm = () => {
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<crud-layout title="账号密码登录" bg="/static/page/blue-bg.png">
|
||||
<crud-layout title="账号密码登录" :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<view class="h-30rpx" />
|
||||
<view class="card p-x-30rpx p-y-40rpx">
|
||||
<tm-form ref="applyFormRef" v-model="applyForm" :rules="applyFormRules" direction="vertical">
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<crud-layout bg="/static/page/blue-bg.png">
|
||||
<crud-layout :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<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">
|
||||
|
||||
@@ -6,6 +6,7 @@ import dayjs from "dayjs"
|
||||
import { hooks, router, constant } from "@@/index"
|
||||
import { accessStatsApi, merchantApi } from "@@/api"
|
||||
import { filePath } from "@@/utils/file"
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
|
||||
const state = reactive<any>({
|
||||
pa: {
|
||||
@@ -42,7 +43,7 @@ const toDetail = async (v: any) => {
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<crud-layout title="食堂" bg="/static/page/blue-bg.png">
|
||||
<crud-layout title="食堂" :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<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">
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<crud-layout title="喜好分析" bg="/static/page/blue-bg.png">
|
||||
<crud-layout title="喜好分析" :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<z-paging ref="pageRef" height="100%" :fixed="false" 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" hide-empty-view>
|
||||
@@ -80,9 +80,12 @@
|
||||
<script setup lang="ts">
|
||||
import { onLoad } from "@dcloudio/uni-app"
|
||||
import { ref } from "vue"
|
||||
|
||||
import qiunDataCharts from "@/components/qiun-data-charts/qiun-data-charts.vue"
|
||||
import { totalApi } from "@/sheep/api"
|
||||
import { hooks } from "@/sheep"
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
import { filePath } from "@@/utils/file"
|
||||
|
||||
const pieChartData = ref({})
|
||||
const areaChartData = ref({})
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
<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"
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
|
||||
const pageRef = ref<any>(null)
|
||||
const state = reactive<any>({
|
||||
@@ -61,7 +63,7 @@ const toDetail = async (v: any) => {
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<crud-layout title="合作商家" bg="/static/page/blue-bg.png">
|
||||
<crud-layout title="合作商家" :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<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">
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<crud-layout title="我的" mainIsScroll bg="/static/page/blue-bg.png">
|
||||
<crud-layout title="我的" mainIsScroll :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<template #main-top>
|
||||
<view class="flex items-center py-24rpx px-40rpx" @tap="doUserArea">
|
||||
<view class="flex items-center" v-if="state.userInfo?.sysUser?.userId">
|
||||
@@ -78,6 +78,7 @@ import { getAppInfo } from "@@/utils/app"
|
||||
import { hooks, router, constant } from "@@/index"
|
||||
import { accessStatsApi, actCancelApi, userApi } from "@@/api"
|
||||
import { APPENV } from "@/sheep/constant"
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
|
||||
import ModifyUser from "@@/components/modify-user.vue"
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ import { hooks, router } from "@@/index"
|
||||
import { orderApi } from "@@/api"
|
||||
|
||||
import { filePath } from "@@/utils/file"
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
|
||||
import { useTabbarStore } from "@@/stores/tabbar"
|
||||
|
||||
@@ -77,7 +78,7 @@ const doRefund = (v: any) => {
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<crud-layout title="订单" bg="/static/page/blue-bg.png">
|
||||
<crud-layout title="订单" :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<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">
|
||||
@@ -104,7 +105,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>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<crud-layout title="共富商城" bg="/static/page/blue-bg.png">
|
||||
<crud-layout title="共富商城" :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<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">
|
||||
@@ -76,8 +76,10 @@ import { prosperityShopApi } from "@/sheep/api"
|
||||
import { onLoad } from "@dcloudio/uni-app"
|
||||
import { isEmpty } from "radash"
|
||||
import { reactive, ref } from "vue"
|
||||
|
||||
import { filePath } from "@@/utils/file"
|
||||
import { displayPrice } from "@/sheep/utils/format-money"
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
|
||||
const state = reactive<any>({
|
||||
params: {
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
<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"
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
|
||||
const pageRef = ref<any>(null)
|
||||
const state = reactive<any>({
|
||||
@@ -69,7 +71,7 @@ const toDetail = async (v: any) => {
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<crud-layout title="共富商家" bg="/static/page/blue-bg.png">
|
||||
<crud-layout title="共富商家" :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<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">
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
<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 { SERVICE_IMAGE } from "@@/constant/index"
|
||||
|
||||
const pageRef = ref<any>(null)
|
||||
const state = reactive<any>({
|
||||
@@ -34,7 +36,7 @@ const toDetail = async (v: any) => {
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<crud-layout title="自营商家" bg="/static/page/blue-bg.png">
|
||||
<crud-layout title="自营商家" :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<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">
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<crud-layout mainIsScroll bg="/static/page/blue-bg.png">
|
||||
<crud-layout mainIsScroll :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<view class="w-full text-center mt-20">
|
||||
<image src="@/static/page/happy-mall.png" class="rounded-full w-1/3" mode="widthFix" />
|
||||
<image :src="filePath(SERVICE_IMAGE.happyMall)" class="rounded-full w-1/3" mode="widthFix" />
|
||||
<view>美好商城</view>
|
||||
<view class="h-100rpx" />
|
||||
<tm-button @click="show = true">继续跳转</tm-button>
|
||||
@@ -18,8 +18,11 @@
|
||||
<script setup lang="ts">
|
||||
import { ref } from "vue"
|
||||
import { onLoad } from "@dcloudio/uni-app"
|
||||
|
||||
import { hooks, router } from "@@/index"
|
||||
import { merchantApi } from "@@/api"
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
import { filePath } from "@@/utils/file"
|
||||
|
||||
const show = ref(false)
|
||||
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
import { ref, reactive } from "vue"
|
||||
import { onLoad, onShow } from "@dcloudio/uni-app"
|
||||
import { isEmpty } from "radash"
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
import { filePath } from "@@/utils/file"
|
||||
|
||||
import { hooks } from "@@/index"
|
||||
import { walletApi } from "@@/api"
|
||||
@@ -43,7 +45,7 @@ const doTab = (e: any) => {
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<crud-layout title="饭卡" bg="/static/page/blue-bg.png">
|
||||
<crud-layout title="饭卡" :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<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">
|
||||
|
||||
@@ -5,6 +5,7 @@ import uqrcode from "@@/utils/uqrcode"
|
||||
|
||||
import { hooks, router } from "@@/index"
|
||||
import { walletApi } from "@@/api"
|
||||
import { SERVICE_IMAGE } from "@@/constant/index"
|
||||
|
||||
import { filePath } from "@@/utils/file"
|
||||
import { usePayStore } from "@/sheep/stores/pay"
|
||||
@@ -139,7 +140,7 @@ const doTransferMoney = (v: any) => {
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<crud-layout title="我的钱包" bg="/static/page/blue-bg.png">
|
||||
<crud-layout title="我的钱包" :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<z-paging ref="pageRef" height="100%" :fixed="false" v-model="pageHook.list" :default-page-size="5"
|
||||
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">
|
||||
|
||||
@@ -4,19 +4,21 @@ import { onLoad, onShow } from "@dcloudio/uni-app"
|
||||
import { isEmpty } from "radash"
|
||||
|
||||
import { hooks, constant } from "@@/index"
|
||||
import { walletApi, payApi } from "@@/api"
|
||||
import { walletApi, payApi, miniPlatformApi, type MiniPayDto } from "@@/api"
|
||||
import { SERVICE_IMAGE, storageConstant } from "@@/constant/index"
|
||||
import { filePath } from "@@/utils/file"
|
||||
import { getMiniUniqueCode } from "@@/utils/mini-tool"
|
||||
|
||||
const data = {
|
||||
payType: [
|
||||
// { text: "模拟支付", disabled: false, type: "0", value: "mock" },
|
||||
{ text: "微信支付", disabled: false, type: "1", value: "wx_pub" },
|
||||
// { text: "支付宝支付", disabled: false, type: "2", value: "alipay_wap" },
|
||||
{ text: "微信支付", disabled: false, type: "0", value: "WECHAT" },
|
||||
// { text: "支付宝支付", disabled: false, type: "1", value: "ALI_PAY" },
|
||||
],
|
||||
}
|
||||
|
||||
const state = reactive<any>({
|
||||
walletId: null,
|
||||
currentPayType: "1",
|
||||
currentPayType: "0",
|
||||
currentRecharge: 0,
|
||||
userInfo: {},
|
||||
detail: {},
|
||||
@@ -65,15 +67,21 @@ const doPay = async () => {
|
||||
const targetRecharge = state.rechargeList[state.currentRecharge]
|
||||
const targetPayType = data.payType[state.currentPayType]
|
||||
if (isEmpty(targetRecharge)) throw new Error()
|
||||
|
||||
// const _pa = {
|
||||
// payPrice: targetRecharge.payPrice,
|
||||
// walletId: state.walletId,
|
||||
// packageId: targetRecharge.id,
|
||||
// }
|
||||
// const { data: createData, code: createCode }: any = await walletApi.recharge(_pa)
|
||||
// if (createCode != 0) throw new Error()
|
||||
|
||||
const uniqueCode = await getMiniUniqueCode(false)
|
||||
console.log("uniqueCode:", uniqueCode);
|
||||
const payParams: MiniPayDto = {
|
||||
bizType: "MINI_APP_WALLET_RECHARGE",
|
||||
bizId: targetRecharge.id,
|
||||
miniPlatformType: targetPayType.value,
|
||||
openId: uniqueCode,
|
||||
}
|
||||
const { data: createData, code: createCode }: any = await miniPlatformApi.miniPay(payParams)
|
||||
if (createCode != 0) throw new Error()
|
||||
const paymentResult = await uni.requestPayment({
|
||||
provider: 'wxpay',
|
||||
...createData?.miniAppPayParams ?? {},
|
||||
});
|
||||
console.log("paymentResult:", paymentResult);
|
||||
getDetail()
|
||||
uni.hideLoading()
|
||||
uni.showToast({ title: "充值成功", icon: "none" })
|
||||
@@ -86,7 +94,7 @@ const doPay = async () => {
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<crud-layout title="充值" bg="/static/page/blue-bg.png">
|
||||
<crud-layout title="充值" :bg="filePath(SERVICE_IMAGE.blueBg)">
|
||||
<view class="h-30rpx" />
|
||||
<view class="flex-row items-center justify-between h-120rpx p-x-30rpx bg-#222222 rounded-20rpx">
|
||||
<view class="flex-row items-center">
|
||||
|
||||
@@ -18,6 +18,7 @@ export { default as maintenanceApi } from "./maintenance"
|
||||
export { default as meetingRoomApi } from "./meeting-room"
|
||||
export { default as merchantApi } from "./merchant"
|
||||
export { default as miniPlatformApi } from "./mini-platform"
|
||||
export * from "./mini-platform"
|
||||
export { default as noticeApi } from "./notice"
|
||||
export { default as orderApi } from "./order"
|
||||
export { default as payApi } from "./pay"
|
||||
|
||||
@@ -1,11 +1,25 @@
|
||||
import request from "@/sheep/utils/request"
|
||||
|
||||
type AutoAdminLoginDto = {
|
||||
export type AutoAdminLoginDto = {
|
||||
miniPlatformType?: string
|
||||
phoneCode?: string
|
||||
userCode?: string
|
||||
}
|
||||
|
||||
export type GetUniqueCodeDto = {
|
||||
miniPlatformType?: string
|
||||
code: string
|
||||
userId?: string
|
||||
}
|
||||
|
||||
export type MiniPayDto = {
|
||||
bizType: "MINI_APP_WALLET_RECHARGE"
|
||||
bizId: string
|
||||
miniPlatformType: string
|
||||
amount?: number
|
||||
openId: string
|
||||
}
|
||||
|
||||
export default {
|
||||
autoAdminLogin: (data: AutoAdminLoginDto) =>
|
||||
request({
|
||||
@@ -13,4 +27,18 @@ export default {
|
||||
method: "POST",
|
||||
data,
|
||||
}),
|
||||
|
||||
getUniqueCode: (data: GetUniqueCodeDto) =>
|
||||
request({
|
||||
url: "/third/third-mini-app-oath/get-unique",
|
||||
method: "POST",
|
||||
data,
|
||||
}),
|
||||
|
||||
miniPay: (data: MiniPayDto) =>
|
||||
request({
|
||||
url: "/third/third-mini-app-pay/app/pay",
|
||||
method: "POST",
|
||||
data,
|
||||
}),
|
||||
}
|
||||
@@ -35,7 +35,7 @@ defineExpose({
|
||||
|
||||
<template>
|
||||
<view>
|
||||
<view v-if="showPhoneText" class="w-full second-text-26 text-center mb-16rpx mt-80rpx" @tap="doServiceText">
|
||||
<view v-if="showPhoneText" class="w-full second-text-26 text-center mb-2 mt-10" @tap="doServiceText">
|
||||
<text>联系热线</text>
|
||||
</view>
|
||||
<tm-drawer :show="state.showModal" title="联系热线" size="30%" position="bottom" @close="state.showModal = false">
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<node-tree v-model="selectedNodeId" :node-data="categoryTree" @currentNode="currentNode" />
|
||||
<view v-if="categoryTree.length === 0" class="text-center text-#888 py-40rpx">暂无数据</view>
|
||||
</view>
|
||||
<view class="px-20rpx py-16rpx flex justify-between sticky bottom-0 bg-white">
|
||||
<view class="px-20rpx py-2 flex justify-between sticky bottom-0 bg-white">
|
||||
<tm-button skin="thin" block @click="emit('cancel')">取消</tm-button>
|
||||
|
||||
<tm-button block :disabled="!selectedNode" @click="onConfirm">确定</tm-button>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
{{ item.time.slice(0, 5) }}
|
||||
</tm-button>
|
||||
</view>
|
||||
<view class="px-20rpx py-16rpx flex justify-between">
|
||||
<view class="px-20rpx py-2 flex justify-between">
|
||||
<tm-button skin="thin" block @click="emit('cancel')">取消</tm-button>
|
||||
|
||||
<tm-button block @click="onConfirm">确定</tm-button>
|
||||
|
||||
@@ -3,3 +3,5 @@ export { default as serviceEnum } from "./service-enum"
|
||||
export { default as storageConstant } from "./storage-constant"
|
||||
|
||||
export { default as APPENV } from "./app-env"
|
||||
|
||||
export * from "./service-image"
|
||||
@@ -0,0 +1,10 @@
|
||||
export const SERVICE_IMAGE = {
|
||||
// 宁波银行
|
||||
happyMall: "/admin/sys-file/oss/file?fileName=11a0f8629aa44cbfbfa28448632141b2.png",
|
||||
// 空购物车
|
||||
carEmpty: "/admin/sys-file/oss/file?fileName=76c9a53b13a24b52995714ba9399d141.png",
|
||||
// 蓝色背景
|
||||
blueBg: "/admin/sys-file/oss/file?fileName=ab8823b0abb045a7b9ce7a52d91eea8f.png",
|
||||
// 生日海报
|
||||
birthdayCoupon: "/admin/sys-file/oss/file?fileName=d723089fccec4f598e86459e8899b0de.jpg",
|
||||
}
|
||||
@@ -6,4 +6,5 @@ export default {
|
||||
VERSION_OBJ: "version_obj",
|
||||
USER_SETTING: "user_setting",
|
||||
REMEMBER_USER: "remember_user",
|
||||
UNIQUE_CODE: "unique_code",
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
import { storageConstant } from "@/sheep/constant/index"
|
||||
import { miniPlatformApi } from "@/sheep/api"
|
||||
|
||||
import { getAppInfo } from "./app"
|
||||
|
||||
// 获取小程序唯一编码
|
||||
export async function getMiniUniqueCode(forceGet = false) {
|
||||
let uniqueCode = uni.getStorageSync(storageConstant.UNIQUE_CODE)
|
||||
if (uniqueCode && !forceGet) {
|
||||
return uniqueCode
|
||||
}
|
||||
const appEnv = await getAppInfo()
|
||||
try {
|
||||
const res = await uni.login({
|
||||
provider: "weixin",
|
||||
})
|
||||
if (!res?.code) {
|
||||
throw new Error("登录失败")
|
||||
}
|
||||
const { data, code }: any = await miniPlatformApi.getUniqueCode({
|
||||
miniPlatformType: appEnv,
|
||||
code: res.code,
|
||||
})
|
||||
if (code != 0 || !data) {
|
||||
throw new Error("获取小程序唯一编码失败")
|
||||
}
|
||||
uniqueCode = data
|
||||
uni.setStorageSync(storageConstant.UNIQUE_CODE, uniqueCode)
|
||||
return uniqueCode || ""
|
||||
} catch (error) {
|
||||
if (uniqueCode) {
|
||||
return uniqueCode
|
||||
} else {
|
||||
uni.removeStorageSync(storageConstant.UNIQUE_CODE)
|
||||
}
|
||||
console.log("获取小程序唯一编码失败", error)
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 89 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 93 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 1.6 MiB |
Binary file not shown.
|
Before Width: | Height: | Size: 109 KiB |
Reference in new issue
Block a user