Browse Source

update code

yb 3 tuần trước cách đây
mục cha
commit
1ed83c90d3
100 tập tin đã thay đổi với 8 bổ sung22025 xóa
  1. 2 2
      .gitmodules
  2. 5 5
      .obsidian/workspace.json
  3. 1 0
      yshop/yshop-drink-uniapp
  4. 0 41
      yshop/yshop-drink-uniapp/.gitignore
  5. 0 27
      yshop/yshop-drink-uniapp/.hbuilderx/launch.json
  6. 0 131
      yshop/yshop-drink-uniapp/App.vue
  7. 0 224
      yshop/yshop-drink-uniapp/CLAUDE.md
  8. 0 22
      yshop/yshop-drink-uniapp/api/address.js
  9. 0 169
      yshop/yshop-drink-uniapp/api/api.js
  10. 0 37
      yshop/yshop-drink-uniapp/api/auth.js
  11. 0 31
      yshop/yshop-drink-uniapp/api/coupon.js
  12. 0 14
      yshop/yshop-drink-uniapp/api/due.js
  13. 0 21
      yshop/yshop-drink-uniapp/api/goods.js
  14. 0 34
      yshop/yshop-drink-uniapp/api/market.js
  15. 0 74
      yshop/yshop-drink-uniapp/api/merchant.js
  16. 0 93
      yshop/yshop-drink-uniapp/api/order.js
  17. 0 61
      yshop/yshop-drink-uniapp/api/score.js
  18. 0 76
      yshop/yshop-drink-uniapp/api/user.js
  19. 0 15
      yshop/yshop-drink-uniapp/components/blank/blank.vue
  20. 0 25
      yshop/yshop-drink-uniapp/components/card/card.vue
  21. 0 397
      yshop/yshop-drink-uniapp/components/city-select/city-select.vue
  22. 0 22
      yshop/yshop-drink-uniapp/components/container/container.vue
  23. 0 16
      yshop/yshop-drink-uniapp/components/layout/layout.vue
  24. 0 131
      yshop/yshop-drink-uniapp/components/list-cell/list-cell.vue
  25. 0 20
      yshop/yshop-drink-uniapp/components/logo/logo.vue
  26. 0 347
      yshop/yshop-drink-uniapp/components/modal/modal.vue
  27. 0 220
      yshop/yshop-drink-uniapp/components/space/space.vue
  28. 0 125
      yshop/yshop-drink-uniapp/components/upload-file/upload-file.vue
  29. 0 452
      yshop/yshop-drink-uniapp/components/verification/verification.vue
  30. 0 13
      yshop/yshop-drink-uniapp/config/index.js
  31. 0 2
      yshop/yshop-drink-uniapp/hooks/index.js
  32. 0 8
      yshop/yshop-drink-uniapp/hooks/useGlobalProperties.js
  33. 0 88
      yshop/yshop-drink-uniapp/hooks/usePage.js
  34. 0 150
      yshop/yshop-drink-uniapp/hooks/useWebSocket.js
  35. 0 20
      yshop/yshop-drink-uniapp/index.html
  36. 0 12
      yshop/yshop-drink-uniapp/jsconfig.json
  37. 0 28
      yshop/yshop-drink-uniapp/main.js
  38. 0 449
      yshop/yshop-drink-uniapp/manifest.json
  39. 0 2157
      yshop/yshop-drink-uniapp/package-lock.json
  40. 0 25
      yshop/yshop-drink-uniapp/package.json
  41. 0 443
      yshop/yshop-drink-uniapp/pages.json
  42. 0 240
      yshop/yshop-drink-uniapp/pages/components/pages/address/add.vue
  43. 0 229
      yshop/yshop-drink-uniapp/pages/components/pages/address/address.vue
  44. 0 353
      yshop/yshop-drink-uniapp/pages/components/pages/balance/balance.vue
  45. 0 244
      yshop/yshop-drink-uniapp/pages/components/pages/balance/bill.vue
  46. 0 435
      yshop/yshop-drink-uniapp/pages/components/pages/cart/cart.vue
  47. 0 551
      yshop/yshop-drink-uniapp/pages/components/pages/coupons/coupons.vue
  48. 0 354
      yshop/yshop-drink-uniapp/pages/components/pages/due/detail.vue
  49. 0 296
      yshop/yshop-drink-uniapp/pages/components/pages/due/index.vue
  50. 0 185
      yshop/yshop-drink-uniapp/pages/components/pages/due/orders.vue
  51. 0 396
      yshop/yshop-drink-uniapp/pages/components/pages/login/login.vue
  52. 0 56
      yshop/yshop-drink-uniapp/pages/components/pages/login/logout.vue
  53. 0 650
      yshop/yshop-drink-uniapp/pages/components/pages/menudetail/menudetail.vue
  54. 0 176
      yshop/yshop-drink-uniapp/pages/components/pages/merchant/addCard.vue
  55. 0 199
      yshop/yshop-drink-uniapp/pages/components/pages/merchant/bell.vue
  56. 0 326
      yshop/yshop-drink-uniapp/pages/components/pages/merchant/cash.vue
  57. 0 161
      yshop/yshop-drink-uniapp/pages/components/pages/merchant/cashAccount.vue
  58. 0 417
      yshop/yshop-drink-uniapp/pages/components/pages/merchant/index.vue
  59. 0 220
      yshop/yshop-drink-uniapp/pages/components/pages/merchant/my.vue
  60. 0 573
      yshop/yshop-drink-uniapp/pages/components/pages/merchant/order.vue
  61. 0 552
      yshop/yshop-drink-uniapp/pages/components/pages/merchant/orderDetail.vue
  62. 0 240
      yshop/yshop-drink-uniapp/pages/components/pages/merchant/shopInfo.vue
  63. 0 216
      yshop/yshop-drink-uniapp/pages/components/pages/merchant/wallet.vue
  64. 0 170
      yshop/yshop-drink-uniapp/pages/components/pages/merchant/withdrawal.vue
  65. 0 50
      yshop/yshop-drink-uniapp/pages/components/pages/mine/content.vue
  66. 0 50
      yshop/yshop-drink-uniapp/pages/components/pages/mine/news.vue
  67. 0 245
      yshop/yshop-drink-uniapp/pages/components/pages/mine/userinfo.vue
  68. 0 894
      yshop/yshop-drink-uniapp/pages/components/pages/orders/detail.vue
  69. 0 205
      yshop/yshop-drink-uniapp/pages/components/pages/orders/orders.vue
  70. 0 60
      yshop/yshop-drink-uniapp/pages/components/pages/orders/refund.vue
  71. 0 396
      yshop/yshop-drink-uniapp/pages/components/pages/packages/index.vue
  72. 0 133
      yshop/yshop-drink-uniapp/pages/components/pages/pay/alipay.vue
  73. 0 1041
      yshop/yshop-drink-uniapp/pages/components/pages/pay/pay.vue
  74. 0 119
      yshop/yshop-drink-uniapp/pages/components/pages/remark/remark.vue
  75. 0 183
      yshop/yshop-drink-uniapp/pages/components/pages/scan/scan.vue
  76. 0 126
      yshop/yshop-drink-uniapp/pages/components/pages/scoreproduct/confirm.vue
  77. 0 389
      yshop/yshop-drink-uniapp/pages/components/pages/scoreproduct/detail.vue
  78. 0 338
      yshop/yshop-drink-uniapp/pages/components/pages/scoreproduct/list.vue
  79. 0 182
      yshop/yshop-drink-uniapp/pages/components/pages/scoreproduct/order.vue
  80. 0 288
      yshop/yshop-drink-uniapp/pages/components/pages/scoreproduct/orderDetail.vue
  81. 0 173
      yshop/yshop-drink-uniapp/pages/components/pages/shop/shop.vue
  82. 0 257
      yshop/yshop-drink-uniapp/pages/components/pages/vip/detail.vue
  83. 0 100
      yshop/yshop-drink-uniapp/pages/components/pages/vip/vip.vue
  84. 0 650
      yshop/yshop-drink-uniapp/pages/index/index.vue
  85. 0 1621
      yshop/yshop-drink-uniapp/pages/menu/menu.vue
  86. 0 560
      yshop/yshop-drink-uniapp/pages/mine/mine.vue
  87. 0 206
      yshop/yshop-drink-uniapp/pages/order/order.vue
  88. 0 23
      yshop/yshop-drink-uniapp/static/iconfont/iconfont.css
  89. 0 270
      yshop/yshop-drink-uniapp/static/iconfont/iconfont.scss
  90. BIN
      yshop/yshop-drink-uniapp/static/iconfont/iconfont.ttf
  91. BIN
      yshop/yshop-drink-uniapp/static/iconfont/iconfont.woff
  92. BIN
      yshop/yshop-drink-uniapp/static/iconfont/iconfont.woff2
  93. BIN
      yshop/yshop-drink-uniapp/static/images/001.png
  94. BIN
      yshop/yshop-drink-uniapp/static/images/002.png
  95. BIN
      yshop/yshop-drink-uniapp/static/images/003.png
  96. BIN
      yshop/yshop-drink-uniapp/static/images/100.jpg
  97. BIN
      yshop/yshop-drink-uniapp/static/images/200.jpg
  98. BIN
      yshop/yshop-drink-uniapp/static/images/300.jpg
  99. BIN
      yshop/yshop-drink-uniapp/static/images/back.png
  100. BIN
      yshop/yshop-drink-uniapp/static/images/balance.png

+ 2 - 2
.gitmodules

@@ -5,5 +5,5 @@ url = https://github.com/FanLide/yshop-drink.git
 path = yshop/yshop-drink-vue
 url = https://github.com/FanLide/online-order-vue.git
 [submodule "yshop/yshop-drink-uniapp"]
-path = yshop/yshop-drink-uniapp
-url = https://github.com/FanLide/online-order-uniapp.git
+	path = yshop/yshop-drink-uniapp
+	url = https://github.com/FanLide/online-order-uniapp.git

+ 5 - 5
.obsidian/workspace.json

@@ -183,7 +183,7 @@
       "bases:创建新数据库": false
     }
   },
-  "active": "18265060efc4f04b",
+  "active": "cf8a89fa88ac988b",
   "lastOpenFiles": [
     "yshop/yshop-drink-uniapp/vue.config.js",
     "yshop/yshop-drink-uniapp/utils/util.js",
@@ -198,14 +198,14 @@
     "yshop/yshop-drink-uniapp/utils",
     "yshop/yshop-drink-uniapp/uni_modules/uv-waterfall/readme.md",
     "yshop/yshop-drink-uniapp/uni_modules/uv-waterfall/changelog.md",
-    "yshop/yshop-drink-uniapp/uni_modules/uv-vtabs/readme.md",
-    "yshop/yshop-drink-uniapp/uni_modules/uv-vtabs/changelog.md",
     "yshop/yshop-drink-uniapp/uni_modules/uv-upload/readme.md",
     "yshop/yshop-drink-uniapp/uni_modules/uv-upload/changelog.md",
-    "yshop/yshop-drink-uniapp/uni_modules/uv-ui/readme.md",
-    "yshop/yshop-drink-uniapp/uni_modules/uv-ui/changelog.md",
+    "yshop/yshop-drink-uniapp/uni_modules/uv-vtabs/readme.md",
+    "yshop/yshop-drink-uniapp/uni_modules/uv-vtabs/changelog.md",
     "yshop/yshop-drink-uniapp/uni_modules/uv-ui-tools/readme.md",
     "yshop/yshop-drink-uniapp/uni_modules/uv-ui-tools/changelog.md",
+    "yshop/yshop-drink-uniapp/uni_modules/uv-ui/readme.md",
+    "yshop/yshop-drink-uniapp/uni_modules/uv-ui/changelog.md",
     "yshop/yshop-drink-uniapp/uni_modules/uv-transition/readme.md",
     "yshop/yshop-drink-uniapp/uni_modules/uv-transition/changelog.md",
     "yshop/yshop-drink-uniapp/uni_modules/uv-tooltip/readme.md",

+ 1 - 0
yshop/yshop-drink-uniapp

@@ -0,0 +1 @@
+Subproject commit 55da4cb298e58723fdbf1275b12919768d7b146b

+ 0 - 41
yshop/yshop-drink-uniapp/.gitignore

@@ -1,41 +0,0 @@
-# See https://help.github.com/ignore-files/ for more about ignoring files.
-
-# dependencies
-/node_modules
-
-# testing
-/coverage
-
-# production
-/build
-
-/unpackage
-
-/dist
-
-# misc
-.DS_Store
-.cache
-
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-
-.tmp*
-.svn
-.tags
-*.sublime-*
-sftp-config.json
-logs
-*.log
-.idea*
-.yo-rc.json
-*.swo
-*.swp
-/dist
-/deps
-yarn.lock
-dev-stats.json
-.vscode
-
-.history

+ 0 - 27
yshop/yshop-drink-uniapp/.hbuilderx/launch.json

@@ -1,27 +0,0 @@
-{
-    // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
-    // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数
-    "version" : "0.0",
-    "configurations" : [
-        {
-            "app-plus" : {
-                "launchtype" : "local"
-            },
-            "default" : {
-                "launchtype" : "local"
-            },
-            "mp-weixin" : {
-                "launchtype" : "local"
-            },
-            "type" : "uniCloud"
-        },
-        {
-            "playground" : "standard",
-            "type" : "uni-app:app-ios"
-        },
-        {
-            "playground" : "custom",
-            "type" : "uni-app:app-android"
-        }
-    ]
-}

+ 0 - 131
yshop/yshop-drink-uniapp/App.vue

@@ -1,131 +0,0 @@
-<script setup>
-import { onHide,onLaunch,onShow } from '@dcloudio/uni-app'
-import { storeToRefs } from 'pinia'
-import { useMainStore } from '@/store/store'
-const main = useMainStore()
-import { isWeixin,parseQuery } from '@/utils/util'
-import cookie from '@/utils/cookie'
-import {
-  userAuthSession,
-  wechatAuth
-} from '@/api/auth'
-import { APP_ID } from '@/config'
-
-onLaunch(() => {
-	console.log('App Launch')
-})
-
-onShow(() => {
-   
-	// 检查用户登录情况
-	// #ifdef H5
-	if(isWeixin()){
-	
-		// H5编译的代码
-		// 判断是否是微信浏览器
-		
-		oAuth()
-		//return;
-	}
-	// #endif
-	// #ifdef MP-WEIXIN
-	wechatMiniLogin();
-	// #endif
-})
-
-onHide(() => {
-   console.log('App Hide')
-})
-
-
-
-const wechatMiniLogin = () => {
-	//this.$u.toast('登录中');
-	uni.login({
-		provider: 'weixin'
-	}).then(async (res) => {
-		let data = await userAuthSession({
-			code: res.code
-		});
-		if (data) {
-			console.log('data.openId:',data.openId)
-			main.SET_OPENID(data.openId)
-			if (data.hasOwnProperty('userInfo') && data.accessToken && data.accessToken != '') {
-				main.SET_MEMBER(data.userInfo);
-				main.SET_TOKEN(data.accessToken);
-			}
-		}
-	});
-}
-
-const getAuthUrl = (appId) => {
-	  // #ifdef H5
-	  // #endif
-	  cookie.set('redirect', window.location.href)
-	  const url = `${location.origin}/h5/#/pages/index/index`
-	  cookie.set('index_url',url)
-	  let redirect_uri = encodeURIComponent(url)
-	
-	  const state = 'STATE'
-	  return `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${redirect_uri}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`
- }
- 
-const oAuth = async() => {
-	  const WX_AUTH = 'wx_auth'
-	  return new Promise((resolve, reject) => {
-		     
-		const accessToken = uni.getStorageSync('accessToken');
-		if (cookie.has('wx_auth') && accessToken && main.isLogin) {
-		  reject()
-		  return
-		}
-		const { code } = parseQuery()
-		if (!code) {
-		  //公众号appid
-		  const appid = APP_ID;
-		  location.href = getAuthUrl(appid)
-		  return
-		} else {
-		 auth(code)
-		}
-		resolve()
-	  }).catch(error => {
-		console.log(error)
-	  })
-}
-	
-const auth = async(code) => {
-	console.log('获取微信授权:',code)
-	let data = await wechatAuth({'code':code})
-	cookie.set('wx_auth', code)
-	if (data) {
-		main.SET_OPENID(data.openId)
-		main.SET_MEMBER(data.userInfo);
-		main.SET_TOKEN(data.accessToken);
-		
-		let newParams = cookie.get('params')
-		if(newParams){
-			uni.navigateTo({
-				url: '/pages/components/pages/scan/scan'
-			})
-		}
-	}
-
-}
-
-
-
-
-</script>
-
-<style lang="scss">
-@import '~@/static/style/app.scss';
-//@import 'static/iconfont/iconfont.scss';
-//@import url('./static/style/style.less');
-@import 'static/style/yshop.css';
-
-// /*每个页面公共css */
-// page {
-//   background-color: #f5f5f5;
-// }
-</style>

+ 0 - 224
yshop/yshop-drink-uniapp/CLAUDE.md

@@ -1,224 +0,0 @@
-# YShop Drink UniApp 用户端 - Claude Code 配置
-
-> 2级子项目配置 | 继承自 yshop (1级)
-
-## 项目信息
-
-| 属性 | 值 |
-|------|-----|
-| 项目名称 | yshop-drink-uniapp |
-| 所属项目 | yshop |
-| 项目类型 | mobile (用户端小程序/H5) |
-| 版本 | 3.2.2 |
-| 框架 | UniApp |
-
-## 技术栈
-
-| 技术 | 版本 | 用途 |
-|------|------|------|
-| UniApp | - | 跨端框架 |
-| Vue 3 | - | 核心框架 |
-| Vant | 4.6.2 | 移动端 UI |
-| Pinia | 2.1.6 | 状态管理 |
-| 微信 JSSDK | 1.6.3 | 微信 API |
-
-## 支持平台
-
-- 微信小程序
-- H5
-
-## 项目结构
-
-```
-yshop-drink-uniapp/
-├── api/                       # API 接口
-├── components/                # 公共组件
-├── config/                    # 配置文件
-├── hooks/                     # 组合式函数
-├── pages/                     # 页面
-│   ├── index/                 # 首页 (点餐)
-│   ├── menu/                  # 菜单
-│   ├── order/                 # 订单
-│   ├── mine/                  # 我的
-│   └── components/            # 页面级组件
-├── static/                    # 静态资源
-├── store/                     # Pinia 状态
-├── uni_modules/               # uni_modules 组件
-├── utils/                     # 工具函数
-├── App.vue                    # 根组件
-├── main.js                    # 入口文件
-├── manifest.json              # 应用配置
-├── pages.json                 # 页面配置
-├── uni.scss                   # 全局样式
-└── package.json
-```
-
-## 页面说明
-
-| 页面 | 路径 | 功能 |
-|------|------|------|
-| 首页 | `/pages/index/` | 门店选择、扫码点餐 |
-| 菜单 | `/pages/menu/` | 商品列表、加购物车 |
-| 订单 | `/pages/order/` | 订单列表、订单详情 |
-| 我的 | `/pages/mine/` | 个人中心、余额、优惠券 |
-
-## 开发命令
-
-```bash
-# 安装依赖
-npm install
-
-# 开发 (使用 HBuilderX)
-# 运行 → 运行到小程序模拟器 → 微信开发者工具
-# 运行 → 运行到浏览器 → Chrome
-
-# 发布 (使用 HBuilderX)
-# 发行 → 小程序-微信
-# 发行 → 网站-H5
-```
-
-## 配置文件
-
-### manifest.json
-```json
-{
-  "mp-weixin": {
-    "appid": "wx...",
-    "setting": {
-      "urlCheck": false
-    }
-  },
-  "h5": {
-    "router": {
-      "mode": "hash"
-    }
-  }
-}
-```
-
-### pages.json
-```json
-{
-  "pages": [
-    { "path": "pages/index/index" },
-    { "path": "pages/menu/index" },
-    { "path": "pages/order/index" },
-    { "path": "pages/mine/index" }
-  ],
-  "tabBar": {
-    "list": [...]
-  }
-}
-```
-
-## API 规范
-
-```javascript
-// api/order.js
-import request from '@/utils/request'
-
-// 获取订单列表
-export function getOrderList(data) {
-  return request({
-    url: '/app/order/list',
-    method: 'get',
-    data
-  })
-}
-
-// 创建订单
-export function createOrder(data) {
-  return request({
-    url: '/app/order/create',
-    method: 'post',
-    data
-  })
-}
-```
-
-## 状态管理
-
-```javascript
-// store/modules/cart.js
-import { defineStore } from 'pinia'
-
-export const useCartStore = defineStore('cart', {
-  state: () => ({
-    items: [],
-    shopId: null
-  }),
-
-  getters: {
-    totalCount: (state) => state.items.reduce((sum, item) => sum + item.count, 0),
-    totalPrice: (state) => state.items.reduce((sum, item) => sum + item.price * item.count, 0)
-  },
-
-  actions: {
-    addItem(product) {
-      // ...
-    }
-  },
-
-  persist: true
-})
-```
-
-## UV 组件
-
-项目使用 `uv-ui` 组件库,通过 `uni_modules` 方式引入:
-
-| 组件 | 用途 |
-|------|------|
-| uv-button | 按钮 |
-| uv-cell | 单元格 |
-| uv-popup | 弹出层 |
-| uv-tabs | 标签页 |
-| uv-icon | 图标 |
-| uv-loading-icon | 加载 |
-| uv-navbar | 导航栏 |
-| uv-skeleton | 骨架屏 |
-
-## 核心功能
-
-| 功能 | 说明 |
-|------|------|
-| 扫码点餐 | 扫桌号二维码进入点餐 |
-| 商品浏览 | 按分类查看商品 |
-| 购物车 | 加购、改数量、规格选择 |
-| 下单支付 | 微信支付/余额支付 |
-| 订单查询 | 订单列表、状态跟踪 |
-| 会员中心 | 余额、优惠券、地址 |
-| 充值 | 余额充值 |
-
-## 微信相关
-
-```javascript
-// 微信登录
-uni.login({
-  provider: 'weixin',
-  success: (res) => {
-    // res.code
-  }
-})
-
-// 微信支付
-uni.requestPayment({
-  provider: 'wxpay',
-  orderInfo: payInfo,
-  success: () => {},
-  fail: () => {}
-})
-```
-
-## 注意事项
-
-1. 小程序需要在微信公众平台配置域名白名单
-2. 支付功能需要商户号配置
-3. H5 需要配置 CORS
-
-## 核心文档
-
-| 文档 | 位置 | 内容 |
-|------|------|------|
-| 系统架构 | `../architecture.canvas` | 整体架构图 |
-| 后端 API | Swagger UI | 接口文档 |

+ 0 - 22
yshop/yshop-drink-uniapp/api/address.js

@@ -1,22 +0,0 @@
-import api from './api'
-
-// 删除用户地址 
-export function addressDelete(data) {
-  return api.post(`/address/del/${data.id}`, undefined, { login: true })
-}
-
-// 设置默认地址  
-export function shopGetDistanceFromLocation(data) {
-  return api.post(`/address/getDistanceFromLocation`, data, { login: true })
-}
-
-// 添加或修改地址
-export function getAddressAddAndEdit(data) {
-  return api.post(`/address/addAndEdit`, data, { login: true })
-}
-
-// 用户地址列表 l
-export function addressAll(data) {
-  return api.get(`/address/list`, data, { login: true })
-}
-

+ 0 - 169
yshop/yshop-drink-uniapp/api/api.js

@@ -1,169 +0,0 @@
-// #ifdef H5
-// h5端
-import Fly from 'flyio/dist/npm/fly'
-// #endif
-
-// #ifdef APP-PLUS
-// app端
-import Fly from 'flyio/dist/npm/wx'
-// #endif
-
-// #ifdef MP-WEIXIN
-import Fly from 'flyio/dist/npm/wx'
-// #endif
-
-import { handleLoginFailure } from '@/utils'
-import { isWeixin } from '@/utils/util'
-import { VUE_APP_API_URL,TENANT_ID } from '@/config'
-import cookie from '@/utils/cookie'
-import { replace } from '@/utils/router'
-
-const fly = new Fly()
-fly.config.baseURL = VUE_APP_API_URL
-
-fly.interceptors.response.use(
-  response => {
-     console.log('response0099991:',response)
-    // 定时刷新access-token
-    return response
-  },
-  error => {
-	
-	console.log('response008:',error)
-    if (error.toString() == 'Error: Network Error') {
-      handleLoginFailure()
-      return Promise.reject({ msg: '未登录', toLogin: true })
-    }
-    if (error.status == 401) {
-      handleLoginFailure()
-      return Promise.reject({ msg: '未登录', toLogin: true })
-    }
-    if (error.response.data.status == 5109) {
-      uni.showToast({
-        title: error.response.data.msg,
-        icon: 'none',
-        duration: 2000,
-      })
-    }
-    return Promise.reject(error)
-  }
-)
-
-const defaultOpt = { login: true }
-
-function baseRequest(options) {
-  const token = cookie.get('accessToken')
-  // console.log('--> % token % token:\n', token)
-
-  options.headers = {
-    ...options.headers,
-  }
-
-  // if (options.login === true) {
-  options.headers = {
-    ...options.headers,
-    Authorization: 'Bearer ' + token,
-	 'tenant-id': TENANT_ID,
-  }
-  // }
-
-  // 结构请求需要的参数
-  const { url, params, data, login, ...option } = options
-
-  // 发起请求
-  return fly
-    .request(url, params || data, {
-      ...option,
-    })
-    .then(res => {
-     
-      const data = res.data || {}
-	   //console.log('res.status:',res)
-    console.log('res.code:',res.code)
-	 // #ifdef H5
-	 if (res.data.code == 1004004002) {
-		 if(isWeixin()){
-			const url = cookie.get('index_url')
-			//console.log('redirect_uri:',url)
-			//const url = `${location.origin}/h5/#/pages/index/index`
-			location.href = url
-			return
-		}
-      }
-	  // #endif
-	  
-      if (res.status !== 200) {
-        return Promise.reject({ msg: '请求失败', res, data })
-      }
-
-    
-      if (data.code == 401) {
-        uni.hideLoading()
-        handleLoginFailure()
-        uni.showToast({
-          title: data.msg,
-          icon: 'none',
-          duration: 2000,
-        })
-        return Promise.reject({ msg: data.msg, res, data })
-      }
-
-      if (data.code != 0) {
-        uni.showToast({
-          title: data.msg,
-          icon: 'none',
-          duration: 2000,
-        })
-        return Promise.reject({ data, res })
-      }
-
-
-      return Promise.resolve(data.data, res)
-
-      // if ([401, 403].indexOf(data.status) !== -1) {
-      //   handleLoginFailure()
-      //   return Promise.reject({ msg: res.data.msg, res, data, toLogin: true })
-      // } else if (data.status === 200) {
-      //   return Promise.resolve(data, res)
-      // } else if (data.status == 5101) {
-      //   return Promise.reject({ msg: res.data.msg, res, data })
-      // } else {
-      //   return Promise.reject({ msg: res.data.msg, res, data })
-      // }
-    })
-}
-
-/**
- * http 请求基础类
- * 参考文档 https://www.kancloud.cn/yunye/axios/234845
- *
- */
-const request = ['post', 'put', 'patch'].reduce((request, method) => {
-  /**
-   *
-   * @param url string 接口地址
-   * @param data object get参数
-   * @param options object axios 配置项
-   * @returns {AxiosPromise}
-   */
-  request[method] = (url, data = {}, options = {}) => {
-    console.log(url, data)
-    return baseRequest(Object.assign({ url, data, method }, defaultOpt, options))
-  }
-  return request
-}, {})
-
-;['get', 'delete', 'head'].forEach(method => {
-  /**
-   *
-   * @param url string 接口地址
-   * @param params object get参数
-   * @param options object axios 配置项
-   * @returns {AxiosPromise}
-   */
-  request[method] = (url, params = {}, options = {}) => {
-    return baseRequest(Object.assign({ url, params, method }, defaultOpt, options))
-  }
-})
-
-export default request

+ 0 - 37
yshop/yshop-drink-uniapp/api/auth.js

@@ -1,37 +0,0 @@
-import api from './api'
-
-/**
- * 使用手机 + 验证码登录
- */
-export function userLogin(data) {
-  return api.post('/member/auth/sms-login', data, { login: false })
-}
-
-/**
- * 使用手机 + 验证码登录  member/auth/send-sms-code
- */
-export function smsSend(data) {
-  return api.post('/member/auth/send-sms-code', data, { login: false })
-}
-
-/**
- * 小程序 member/auth/auth-miniapp-login         
- */
-export function userLoginForWechatMini(data) {
-  return api.post('/member/auth/auth-miniapp-login', data, { login: false })
-}
-
-/**
- * userAuthSession   
- */
-export function userAuthSession(data) {
-  return api.post('/member/auth/auth-session', data, { login: false })
-}
-
-/**
- * wechatAuth   
- */
-export function wechatAuth(data) {
-  return api.get('/member/auth/auth-wechat-login', data, { login: false })
-}
-

+ 0 - 31
yshop/yshop-drink-uniapp/api/coupon.js

@@ -1,31 +0,0 @@
-import api from './api'
-
-/**
- * couponReceive
- */
-export function couponReceive(data) {
-  return api.post('/coupon/receive', data, { login: false })
-}
-
-/**
- * couponMine
- */
-export function couponMine(data) {
-  return api.get(`/coupon/my`, data, { login: false })
-}
-
-/**
- * couponIndex let couponCount = (params = {}) => vm.$u.get('/coupon/count', params);
- */
-export function couponIndexApi(data) {
-  return api.get(`/coupon/not`, data, { login: false })
-}
-
-/**
- * couponCount 
- */
-export function couponCount(data) {
-  return api.get(`/coupon/count`, data, { login: false })
-}
-
-

+ 0 - 14
yshop/yshop-drink-uniapp/api/due.js

@@ -1,14 +0,0 @@
-import api from './api'
-
-
-export function getList(data) {
-  return api.get('/due/getList', data, { login: true })
-}
-
-export function getDetail(data) {
-  return api.get('/due/getDetail', data, { login: true })
-}
-
-export function createOrder(data) {
-  return api.post('/due/createOrder', data, { login: true })
-}

+ 0 - 21
yshop/yshop-drink-uniapp/api/goods.js

@@ -1,21 +0,0 @@
-import api from './api'
-
-/**
- * 获得banner列表 
- */
-export function shopNearby(data) {
-  return api.get('/store/nearby', data, { login: false })
-}
-/**
- * 获取首页信息
- */
-export function menuGoods(data) {
-  return api.get('/product/products', data, { login: false })
-}
-
-/**
- * 计算详情 
- */
-export function goodsDetail(data) {
-  return api.get(`/product/detail/${data}`)
-}

+ 0 - 34
yshop/yshop-drink-uniapp/api/market.js

@@ -1,34 +0,0 @@
-import api from './api'
-
-/**
- * shopGetList 
- */
-export function shopGetList(data) {
-  return api.get('/store/list', data, { login: false })
-}
-
-/**
- * shopGetList 
- */
-export function shopGet(data) {
-  return api.get('/order/getShop', data, { login: false })
-}
-
-export function openDesk(data) {
-  return api.get('/order/openDesk', data, { login: false })
-}
-
-
-
-export function menuAds(data) {
-  return api.get('/ad/list', data, { login: false })
-}
-
-export function getNews(data) {
-  return api.get('/news/list', data, { login: false })
-}
-
-export function getNewsDetail(data) {
-  return api.get(`/news/detail/${data}`)
-}
-

+ 0 - 74
yshop/yshop-drink-uniapp/api/merchant.js

@@ -1,74 +0,0 @@
-import api from './api'
-
-/**
- * 基本信息 
- */
-export function getData(data) {
-  return api.get('/merchant/home/getData', data, { login: true })
-}
-
-export function changeStatus(data) {
-  return api.get('/merchant/home/changeStatus', data, { login: true })
-}
-
-export function check(data) {
-  return api.get('/merchant/home/check', data, { login: true })
-}
-
-export function orderList(data) {
-  return api.get('/merchant/order/list', data, { login: true })
-}
-
-export function orderSend(data) {
-  return api.get('/merchant/order/send', data, { login: true })
-}
-
-export function orderTake(data) {
-  return api.get('/merchant/order/take', data, { login: true })
-}
-
-export function orderRefund(data) {
-  return api.get('/merchant/order/refund', data, { login: true })
-}
-
-export function orderDetail(data) {
-  return api.get('/merchant/order/detail', data, { login: true })
-}
-
-export function addCard(data) {
-  return api.post('/merchant/with/addCard', data, { login: true })
-}
-
-export function getCards(data) {
-  return api.get('/merchant/with/getList', data, { login: true })
-}
-
-export function addWith(data) {
-  return api.post('/merchant/with/createWithdrawal', data, { login: true })
-}
-
-export function getRevenue(data) {
-  return api.get('/merchant/with/getRevenue', data, { login: true })
-}
-
-export function updateShop(data) {
-  return api.post('/merchant/home/updateShop', data, { login: true })
-}
-
-export function deleteCard(data) {
-  return api.get('/merchant/with/deleteCard', data, { login: true })
-}
-
-export function withdrawals(data) {
-  return api.get('/merchant/with/withdrawals', data, { login: true })
-}
-
-export function payInfo(data) {
-  return api.get('/pay/merchant/getInfo', data, { login: true })
-}
-
-export function checkBill(data) {
-  return api.get('/store/checkBill', data, { login: true })
-}
-
-

+ 0 - 93
yshop/yshop-drink-uniapp/api/order.js

@@ -1,93 +0,0 @@
-import api from './api'
-
-/**
- * 订单列表  
- */
-export function orderTakeFoods(data) {
-  return api.get('/order/list', data, { login: false })
-}
-
-/**
- * 订单创建  
- */
-export function orderSubmit(data) {
-  return api.post(`/order/create`, data, { login: false })
-}
-
-
-
-/**
- * 订单列表  
- */
-export function orderGetOrders(data) {
-  return api.get(`/order/list`, data, { login: false })
-}
-
-
-/**
- * 计算详情 
- */
-export function orderDetail(data) {
-  return api.get(`/order/detail/${data}`)
-}
-
-
-
-/**
- * 订单收货 
- */
-export function orderReceive(data) {
-  return api.post(`/order/take`, data, { login: false })
-}
-
-/**
- * 订单退款 
- */
-export function orderRefund(data) {
-  return api.post(`/order/refund`, data, { login: false })
-}
-
-
-/**
- * 订单支付 
- */
-export function payUnify(data) {
-  return api.post(`/order/pay`, data, { login: false })
-}
-
-/**
- * getWechatConfig 	
- */
-export function getWechatConfig() {
-  return api.get(`/member/wx-mp/create-jsapi-signature`, { url: location.href }, { login: false })
-}
-
-export function cancelDue(data) {
-  return api.get('/order/cancelDue', data, { login: true })
-}
-
-export function offPay(data) {
-  return api.get('/order/offPay', data, { login: true })
-}
-
-/**
- * 发送购物车消息 
- */
-export function syncCart(data) {
-  return api.post(`/order/sync-cart`, data, { login: false })
-}
-
-export function getShareCart(data) {
-  return api.get('/order/get-share-cart', data, { login: true })
-}
-
-export function getDesk(data) {
-  return api.get('/due/get-desk-info', data, { login: true })
-}
-
-export function getSameCityPrice(data) {
-  return api.post('/order/samecity/price', data, { login: true })
-}
-
-
-

+ 0 - 61
yshop/yshop-drink-uniapp/api/score.js

@@ -1,61 +0,0 @@
-import api from './api'
-
-
-export function scoreAds(data) {
-  return api.get('/score-product/getAds', data, { login: false })
-}
-
-export function scoreCates(data) {
-  return api.get('/score-product/getCate', data, { login: false })
-}
-
-/**
- * 详情 
- */
-export function scoreShopDetail(data) {
-  return api.get('/score-product/detail', data, { login: false })
-}
-/**
- * 列表 
- */
-export function scoreShopIndex(data) {
-  return api.get('/score-product/list', data, { login: false })
-}
-
-/**
- * 提交
- */
-export function scoreShopExchange(data) {
-  return api.post('/score-order/submit', data, { login: false })
-}
-
-/**
- * 订单列表 
- */
-export function scoreShopOrder(data) {
-  return api.get('/score-order/list', data, { login: false })
-}
-
-/**
- * 订单列表 
- */
-export function scoreShopOrderDetail(data) {
-  return api.get('/score-order/detail', data, { login: false })
-}
-
-/**
- * 确认收货
- */
-export function scoreShopReceive(data) {
-  return api.get('/score-order/take', data, { login: false })
-}
-
-
-/**
- * 查询物流 
- */
-export function getLogistic(data) {
-  return api.get('/express/getLogistic', data, { login: false })
-}
-
-

+ 0 - 76
yshop/yshop-drink-uniapp/api/user.js

@@ -1,76 +0,0 @@
-import api from './api'
-
-/**
- * 基本信息 
- */
-export function userGetUserInfo(data) {
-  return api.get('/member/user/get-info', data, { login: true })
-}
-
-/**
- * 获取菜单
- */
-export function mineService(data) {
-  return api.get('/service/list', data, { login: true })
-}
-
-/**
- * 获取内容 
- */
-export function mineServiceContent(data) {
-  return api.get('/service/content', data, { login: true })
-}
-
-
-/**
- * save 
- */
-export function userEdit(data) {
-  return api.post('/member/user/update-nickname', data, { login: true })
-}
-
-
-/**
- * balanceGetBillList 
- */
-export function balanceGetBillList(data) {
-  return api.get('/member/user/getBill', data, { login: true })
-}
-
-
-
-
-/**
- * 充值列表 
- */
-export function balanceGetMoneyList(data) {
-  return api.get('/recharge/getMoneyList', data, { login: true })
-}
-
-/**
- * 充值 
- */
-export function balanceRecharge(data) {
-  return api.post('/member/user/recharge', data, { login: true })
-}
-
-/**
- * getCardList 
- */
-export function getCardList(data) {
-  return api.get('/vip/getList', data, { login: true })
-}
-
-/**
- * getCardDetail 
- */
-export function getCardDetail(data) {
-  return api.get('/vip/getDetail', data, { login: true })
-}
-
-/**
- * 充值 
- */
-export function cardBuy(data) {
-  return api.post('/member/user/buyCard', data, { login: true })
-}

+ 0 - 15
yshop/yshop-drink-uniapp/components/blank/blank.vue

@@ -1,15 +0,0 @@
-<template>
-  <view
-    class="blank"
-    :style="{ height: size + 'px' }"
-  ></view>
-</template>
-
-<script setup>
-import { ref } from 'vue';
-const props = defineProps(['size'])
-const size = ref(props.size)
-</script>
-
-<style lang="less">
-</style>

+ 0 - 25
yshop/yshop-drink-uniapp/components/card/card.vue

@@ -1,25 +0,0 @@
-<template>
-  <view
-    :class="['card', props.class]"
-    :style="{ width: width ? width + 'rpx' : '100%' }"
-  >
-    <slot></slot>
-  </view>
-</template>
-
-<script setup>
-import { ref } from 'vue';
-const props = defineProps(['class', 'width'])
-const className = ref(props.class)
-const width = ref(props.width)
-</script>
-
-<style lang="less">
-.card {
-  width: 100%;
-  background-color: #fff;
-  border-radius: 7.5rpx;
-  box-sizing: border-box;
-  overflow: hidden;
-}
-</style>

+ 0 - 397
yshop/yshop-drink-uniapp/components/city-select/city-select.vue

@@ -1,397 +0,0 @@
-<template>
-  <view>
-    <text
-      class="uni-input"
-      @tap="open"
-    >{{ value }}</text>
-    <uv-popup
-      ref="popup"
-      mode="bottom"
-    >
-      <view class="cityselect">
-        <view class="cityselect-header">
-          <view class="cityselect-title">
-            <text>请选择地址</text>
-          </view>
-          <view class="cityselect-nav">
-            <view
-              class="item"
-              v-if="provinceActive"
-              @tap="changeNav(0)"
-            >
-              <text>{{ provinceActive.name }}</text>
-            </view>
-            <view
-              class="item"
-              v-if="cityActive"
-              @tap="changeNav(1)"
-            >
-              <text>{{ cityActive.name }}</text>
-            </view>
-            <view
-              class="item"
-              v-if="districtActive"
-              @tap="changeNav(2)"
-            >
-              <text>{{ districtActive.name }}</text>
-            </view>
-            <view
-              class="item active"
-              v-else
-            >
-              <text>请选择</text>
-            </view>
-          </view>
-        </view>
-        <view class="cityselect-content">
-          <swiper
-            class="swiper"
-            disable-touch="true"
-            touchable="false"
-            :current="current"
-          >
-            <swiper-item>
-              <scroll-view
-                scroll-y
-                class="cityScroll"
-              >
-                <view>
-                  <view
-                    class="cityselect-item"
-                    v-for="(item, index) in province"
-                    :key="index"
-                    @tap="selectProvince(item, index)"
-                  >
-                    <view
-                      class="cityselect-item-box"
-                      :class="{ active: isProvinceActive(item) }"
-                    >
-                      <text>{{ item.name }}</text>
-                    </view>
-                  </view>
-                </view>
-              </scroll-view>
-            </swiper-item>
-            <swiper-item>
-              <scroll-view
-                scroll-y
-                class="cityScroll"
-              >
-                <view>
-                  <view
-                    class="cityselect-item"
-                    v-for="(item, index) in city"
-                    :key="index"
-                    @tap="selectCity(item, index)"
-                  >
-                    <view
-                      class="cityselect-item-box"
-                      :class="{ active: isCityActive(item) }"
-                    >
-                      <text>{{ item.name }}</text>
-                    </view>
-                  </view>
-                </view>
-              </scroll-view>
-            </swiper-item>
-            <swiper-item>
-              <scroll-view
-                scroll-y
-                class="cityScroll"
-              >
-                <view>
-                  <view
-                    class="cityselect-item"
-                    v-for="(item, index) in district"
-                    :key="index"
-                    @tap="selectDistrict(item, index)"
-                  >
-                    <view
-                      class="cityselect-item-box"
-                      :class="{ active: isDistrictActive(item) }"
-                    >
-                      <text>{{ item.name }}</text>
-                    </view>
-                  </view>
-                </view>
-              </scroll-view>
-            </swiper-item>
-          </swiper>
-        </view>
-      </view>
-    </uv-popup>
-  </view>
-</template>
-
-<script setup>
-
-import { ref, watch,onMounted } from "vue"
-const props = defineProps(['items', 'defaultValue'])
-
-const emit = defineEmits(['callback'])
-
-
-const items = ref(props.items || [])
-// const defaultValue = ref(props.defaultValue)
-// console.log("--> % defaultValue:\n", defaultValue)
-
-const value = ref(props.value || '请选择')
-const province = ref(props.items)
-const provinceActive = ref(null)
-const city = ref([])
-const cityActive = ref(null)
-const district = ref([])
-const districtActive = ref(null)
-const current = ref(0)
-const popup = ref(null)
-
-
-watch(() => props.items, (next) => {
-  province.value = next
-})
-
-watch(() => props.defaultValue, (next) => {
-  console.log("--> % defaultValue % next:\n", next)
-  value.value = `${next.province.name} ${next.city.name} ${next.district.name}`
-  setDefaultValue(items.value, next)
-})
-
-
-onMounted(() => {
-  // setDefaultValue(items, props.defaultValue)
-})
-
-const isProvinceActive = (item) => {
-  return provinceActive.value && item.value == provinceActive.value.value
-}
-
-const isCityActive = (item) => {
-  return cityActive.value && item.value == cityActive.value.value
-}
-
-const isDistrictActive = (item) => {
-  return districtActive.value && item.value == districtActive.value.value
-}
-
-const setDefaultValue = (items, value) => {
-  if (!items || !value) {
-    return
-  }
-  province.value = items
-  items.map(prov => {
-    console.log("--> % setDefaultValue % prov:\n", prov)
-    if (prov.name == value.province.name) {
-      city.value = prov.id
-      provinceActive.value = {
-        value: prov.id,
-        name: value.province.name,
-      }
-      prov.children.map(city => {
-        if (city.name == value.city.name) {
-          district.value = city.children
-          cityActive.value = {
-            value: city.id,
-            name: value.city.name,
-          }
-          city.children.map(district => {
-            if (district.name == value.district.name) {
-              districtActive.value = {
-                value: city.id,
-                name: value.district.name,
-              }
-            }
-          })
-        }
-      })
-    }
-  })
-  console.log(provinceActive.value, cityActive.value, districtActive.value)
-}
-
-const open = () => {
-  province.value = props.items
-  provinceActive.value = null
-  cityActive.value = null
-  districtActive.value = null
-  city.value = []
-  district.value = []
-  current.value = 0
-  popup.value.open()
-
-  setDefaultValue(items.value, props.defaultValue.value)
-}
-
-const changeNav = (index) => {
-  if (index == 0) {
-    provinceActive.value = null
-  }
-  if (index == 1) {
-    cityActive.value = null
-    districtActive.value = null
-  }
-  if (index == 2) {
-    districtActive.value = null
-  }
-  current.value = index
-}
-
-const selectProvince = (selectItem, index) => {
-  provinceActive.value = selectItem
-  city.value = selectItem.children
-  current.value = 1
-}
-
-const selectCity = (selectItem, index) => {
-  cityActive.value = selectItem
-  district.value = selectItem.children
-  current.value = 2
-}
-
-const selectDistrict = (selectItem, index) => {
-  console.log("--> % selectDistrict % selectItem:\n", selectItem)
-  districtActive.value = selectItem
-  value.value = `${provinceActive.value?.name} ${cityActive.value?.name} ${districtActive.value?.name}`
-  console.log({
-    province: {
-      id: provinceActive.value?.id,
-      name: provinceActive.value?.name,
-    },
-    city: {
-      id: cityActive.value?.id,
-      name: cityActive.value?.name,
-    },
-    district: {
-      id: districtActive.value?.id,
-      name: districtActive.value?.name,
-    },
-  })
-  emit('callback', {
-    province: {
-      id: provinceActive.value?.id,
-      name: provinceActive.value?.name,
-    },
-    city: {
-      id: cityActive.value?.id,
-      name: cityActive.value?.name,
-    },
-    district: {
-      id: districtActive.value?.id,
-      name: districtActive.value?.name,
-    },
-  })
-  popup.value.close()
-}
-</script>
-
-<style lang="less">
-.cityselect {
-  width: 100%;
-  height: 75%;
-  background-color: #fff;
-  z-index: 1502;
-  position: relative;
-  padding-bottom: 0;
-  padding-bottom: constant(safe-area-inset-bottom);
-  padding-bottom: env(safe-area-inset-bottom);
-
-  .cityScroll {
-    height: 100%;
-  }
-
-  .swiper {
-    height: 800rpx;
-  }
-}
-
-.cityselect-header {
-  width: 100%;
-  z-index: 1;
-}
-
-.cityselect-title {
-  width: 100%;
-  font-size: 30rpx;
-  text-align: center;
-  height: 95rpx;
-  line-height: 95rpx;
-  position: relative;
-
-  &:cityselect-title:after {
-    height: 1px;
-    position: absolute;
-    z-index: 0;
-    bottom: 0;
-    left: 0;
-    content: '';
-    width: 100%;
-    background-image: linear-gradient(0deg, #ececec 50%, transparent 0);
-  }
-}
-
-.cityselect-nav {
-  width: 100%;
-  padding-left: 20rpx;
-  overflow: hidden;
-  display: flex;
-  align-items: center;
-  justify-content: flex-start;
-
-  .item {
-    font-size: 26rpx;
-    color: #222;
-    display: block;
-    height: 80rpx;
-    line-height: 92rpx;
-    padding: 0 16rpx;
-    position: relative;
-    margin-right: 30rpx;
-    white-space: nowrap;
-    overflow: hidden;
-    text-overflow: ellipsis;
-    max-width: 40%;
-
-    &.active {
-      color: #f23030 !important;
-      border-bottom: 1rpx solid #f23030;
-    }
-  }
-}
-
-.cityselect-content {
-  height: 100%;
-  width: 100%;
-}
-
-.cityselect-item {
-  .cityselect-item-box {
-    display: block;
-    padding: 0 40rpx;
-    position: relative;
-    overflow: hidden;
-    display: -webkit-box;
-    -webkit-line-clamp: 2;
-    -webkit-box-orient: vertical;
-    word-break: break-all;
-    text-overflow: ellipsis;
-    line-height: 64rpx;
-    max-height: 65rpx;
-    font-size: 26rpx;
-    color: #333;
-
-    &.active {
-      color: #f23030 !important;
-    }
-
-    &:after {
-      content: '';
-      height: 1rpx;
-      position: absolute;
-      z-index: 0;
-      bottom: 0;
-      left: 0;
-      width: 100%;
-      background-image: linear-gradient(0deg, #ececec 50%, transparent 0);
-    }
-  }
-}
-</style>

+ 0 - 22
yshop/yshop-drink-uniapp/components/container/container.vue

@@ -1,22 +0,0 @@
-<template>
-  <view :class="['container', min ? 'container-min' : '']">
-    <slot></slot>
-  </view>
-</template>
-
-<script setup>
-import { ref, } from 'vue';
-const props = defineProps(['min'])
-const min = ref(props?.min != undefined)
-</script>
-
-<style lang="less">
-.container {
-  padding: 0 34rpx;
-
-  &-min {
-    padding: 0 10rpx;
-
-  }
-}
-</style>

+ 0 - 16
yshop/yshop-drink-uniapp/components/layout/layout.vue

@@ -1,16 +0,0 @@
-<template>
-  <view class="layout">
-    <slot />
-  </view>
-</template>
-
-<script setup>
-import { ref, defineProps, reactive } from 'vue';
-const props = defineProps(['size'])
-</script>
-
-<style lang="less">
-.layout {
-  min-height: 100%;
-}
-</style>

+ 0 - 131
yshop/yshop-drink-uniapp/components/list-cell/list-cell.vue

@@ -1,131 +0,0 @@
-<template>
-	<view
-		class="tui-cell-class tui-list-cell"
-		:class="{ 'tui-cell-arrow': arrow, 'tui-cell-last': last, 'tui-line-left': lineLeft, 'tui-line-right': lineRight, 'tui-radius': radius }"
-		:hover-class="hover ? 'tui-cell-hover' : ''"
-		:style="{ background: bgcolor, fontSize: size + 'rpx', color: color, padding: padding}"
-		:hover-stay-time="150"
-		@tap="handleClick"
-	>
-		<slot></slot>
-		<image src="/static/images/navigator-1.png" class="arrow" v-if="arrow"></image>
-		<!-- <view class="iconfont iconarrow-right arrow" v-if="arrow"></view> -->
-	</view>
-</template>
-
-<script setup>
-import { ref } from 'vue'
-const props = defineProps ({
-	 //是否有箭头
-	 arrow: {
-	 	type: Boolean,
-	 	default: false
-	 },
-	 //是否有点击效果
-	 hover: {
-	 	type: Boolean,
-	 	default: true
-	 },
-	 //left 30rpx
-	 lineLeft:{
-	 	type: Boolean,
-	 	default: false
-	 },
-	 //right 30rpx
-	 lineRight:{
-	 	type: Boolean,
-	 	default: false
-	 },
-	 padding:{
-	 	type:String,
-	 	default:"26rpx 30rpx"
-	 },
-	 last: {
-	 	type: Boolean,
-	 	default: false //最后一条数据隐藏线条
-	 },
-	 radius:{
-	 	type:Boolean,
-	 	default:false
-	 },
-	 bgcolor: {
-	 	type: String,
-	 	default: "#fff" //背景颜色
-	 },
-	 size: {
-	 	type: Number,
-	 	default: 28 //字体大小
-	 },
-	 color: {
-	 	type: String,
-	 	default: "#5A5B5C" //字体颜色
-	 },
-	 index: {
-	 	type: Number,
-	 	default: 0
-	 }
-})
-const emit = defineEmits(['click'])
-const handleClick = () => {
-	emit('click', {
-		index: props.index
-	});
-}
-
-</script>
-
-<style lang="scss" scoped>
-.tui-list-cell {
-	position: relative;
-	width: 100%;
-	box-sizing: border-box;
-	overflow: hidden;
-	display: flex;
-	align-items: center;
-}
-.tui-radius {
-	border-radius: 12rpx;
-	overflow: hidden;
-}
-
-.tui-cell-hover {
-	background: #f7f7f9 !important;
-}
-
-.tui-list-cell::after {
-	content: '';
-	position: absolute;
-	border-bottom: 2rpx solid #eee;
-	-webkit-transform: scaleY(0.8);
-	transform: scaleY(0.8);
-	bottom: 0;
-	right: 0;
-	left: 0;
-}
-.tui-line-left::after {
-	left: 30rpx !important;
-}
-
-.tui-line-right::after {
-	right: 30rpx !important;
-}
-
-.tui-cell-last::after {
-	border-bottom: 0 !important;
-}
-
-// .arrow {
-// 	font-size: 44rpx;
-// 	line-height: 100%;
-// 	color: $text-color-grey;
-// 	position: relative;
-// 	margin-right: -12rpx;
-// }
-.arrow {
-	width: 50rpx;
-	height: 50rpx;
-	position: relative;
-	margin-right: -10rpx;
-	flex-shrink: 0;
-}
-</style>

+ 0 - 20
yshop/yshop-drink-uniapp/components/logo/logo.vue

@@ -1,20 +0,0 @@
-<template>
-	<view>
-		
-	</view>
-</template>
-
-<script>
-	export default {
-		name:"logo",
-		data() {
-			return {
-				
-			};
-		}
-	}
-</script>
-
-<style lang="less">
-
-</style>

+ 0 - 347
yshop/yshop-drink-uniapp/components/modal/modal.vue

@@ -1,347 +0,0 @@
-<template>
-	<view @touchmove.stop.prevent>
-		<view class="modal-box" :style="{width:props.width,padding:props.padding,borderRadius:props.radius}" :class="[(fadein || props.show)?'modal-normal':'modal-scale',props.show?'modal-show':'']">
-			<view v-if="props.custom">
-				<slot></slot>
-			</view>
-			<view v-else>
-				<view class="modal-title" v-if="props.title">{{props.title}}</view>
-				<view class="modal-content" :class="[props.title?'':'mtop']" :style="{color:props.color,fontSize:props.size+'rpx'}">
-					<slot></slot>
-				</view>
-				<view class="modalBtn-box" :class="[props.button.length!=2?'flex-column':'']">
-					<block v-for="(item,index) in props.button" :key="index">
-						<button class="modal-btn" 
-								:class="[
-										''+(item.type || 'primary')+(item.plain?'-outline':''),
-										props.button.length!=2?'btn-width':'',
-										props.button.length>2?'mbtm':'',
-										props.shape=='circle'?'circle-btn':'',
-										'btn-' + (item.size || 'default'),										
-									]"
-								:hover-class="''+(item.plain?'outline':(item.type || 'primary'))+'-hover'" :data-index="index" @tap="handleClick">{{item.text || "确定"}}</button>
-					</block>
-				</view>
-			</view>
-		</view>
-		<view class="modal-mask" :class="[props.show?'mask-show':'']" @tap="handleClickCancel"></view>
-	</view>
-</template>
-
-<script setup>
-import { ref } from 'vue'
-//const props = defineProps(['show','custom','width','padding','radius','title','content','color','size','shape','button','maskClosable','fadein'])
-const props = defineProps ({
-	 show: {type: Boolean,default: false},
-	 custom: {type: Boolean,default: false},
-	 width: {type: String,default: "84%"},
-	 padding: {type: String,default: "40rpx"},
-	 radius: {type: String,default: "24rpx"},
-	 title: {type: String,default: ""},
-	 content: {type: String,default: ""},
-	 color: {type: String,default: "#999"},
-	 size: {type: Number,default: 28},
-	 shape: {type: String,default: 'square'}, //形状 circle, square
-	 button: {type: Array,
-				default: function() {
-					return [{
-						text: "取消",
-						type: "red",
-						plain: true //是否空心
-					}, {
-						text: "确定",
-						type: "red",
-						plain: false
-					}]
-			}},
-	maskClosable: {type: Boolean,default: true},
-	custom: {type: Boolean,default: false},
-	fadein: {type: Boolean,default: false} //淡入效果,自定义弹框插入input输入框时传true
-})
-
-// const show = ref(props.show)
-// const maskClosable = ref(props.maskClosable)
-const emit = defineEmits(['click','cancel','test'])
-const handleClick = (e) => {
-	if (!props.show) return;
-	const dataset = e.currentTarget.dataset;
-	emit('click', {
-		index: Number(dataset.index)
-	});
-}
-const handleClickCancel = () => {
-	if (!props.maskClosable) return;
-	emit('cancel');
-}
-
-
-
-	
-</script>
-
-<style lang="scss">
-	.modal-box {
-		position: fixed;
-		left: 50%;
-		top: 50%;
-		margin: auto;
-		background: #fff;
-		z-index: 201;
-		transition: all 0.3s ease-in-out;
-		opacity: 0;
-		box-sizing: border-box;
-		visibility: hidden;
-	}
-
-	.modal-scale {
-		transform: translate(-50%, -50%) scale(0);
-	}
-
-	.modal-normal {
-		transform: translate(-50%, -50%) scale(1);
-	}
-
-	.modal-show {
-		opacity: 1;
-		visibility: visible;
-	}
-
-	.modal-mask {
-		position: fixed;
-		top: 0;
-		left: 0;
-		right: 0;
-		bottom: 0;
-		background: rgba(0, 0, 0, 0.6);
-		z-index: 98;
-		transition: all 0.3s ease-in-out;
-		opacity: 0;
-		visibility: hidden;
-	}
-
-	.mask-show {
-		visibility: visible;
-		opacity: 1;
-	}
-
-	.modal-title {
-		text-align: center;
-		font-size: 34rpx;
-		color: #333;
-		padding-top: 20rpx;
-		font-weight: bold;
-	}
-
-	.modal-content {
-		color: #999;
-		font-size: 28rpx;
-		padding-top: 20rpx;
-		padding-bottom: 60rpx;
-	}
-
-	.mtop {
-		margin-top: 30rpx;
-	}
-
-	.mbtm {
-		margin-bottom: 30rpx;
-	}
-
-	.modalBtn-box {
-		width: 100%;
-		display: flex;
-		align-items: center;
-		justify-content: space-between
-	}
-
-	.flex-column {
-		flex-direction: column;
-	}
-
-	.modal-btn {
-		width: 46%;
-		height: 68rpx;
-		line-height: 68rpx;
-		position: relative;
-		border-radius: 60rpx;
-		font-size: 28rpx;
-		overflow: visible;
-		margin-left: 0;
-		margin-right: 0;
-		
-		&.btn-default {
-			font-size: 28rpx;
-		}
-		
-		&.btn-lg {
-			font-size: 32rpx;
-		}
-		
-		&.btn-sm {
-			font-size: 24rpx;
-		}
-	}
-
-	.modal-btn::after {
-		content: "";
-		position: absolute;
-		width: 200%;
-		height: 200%;
-		-webkit-transform-origin: 0 0;
-		transform-origin: 0 0;
-		-webkit-transform: scale(0.5, 0.5);
-		transform: scale(0.5, 0.5);
-		left: 0;
-		top: 0;
-		border-radius: 60rpx;
-	}
-
-	.btn-width {
-		width: 80% !important;
-	}
-
-	.primary {
-		background: #97AF13;
-		color: #fff;
-	}
-
-	.primary-hover {
-		background: #97AF13;
-		color: #e5e5e5;
-	}
-
-	.primary-outline {
-		color: #97AF13;
-		background: none;
-	}
-
-	.primary-outline::after {
-		border: 1px solid #97AF13;
-	}
-
-	.danger {
-		background: #ed3f14;
-		color: #fff;
-	}
-
-	.danger-hover {
-		background: #d53912;
-		color: #e5e5e5;
-	}
-
-	.danger-outline {
-		color: #ed3f14;
-		background: none;
-	}
-
-	.danger-outline::after {
-		border: 1px solid #ed3f14;
-	}
-
-	.red {
-		background: #e41f19;
-		color: #fff;
-	}
-
-	.red-hover {
-		background: #c51a15;
-		color: #e5e5e5;
-	}
-
-	.red-outline {
-		color: #e41f19;
-		background: none;
-	}
-
-	.red-outline::after {
-		border: 1px solid #e41f19;
-	}
-
-	.warning {
-		background: #ff7900;
-		color: #fff;
-	}
-
-	.warning-hover {
-		background: #e56d00;
-		color: #e5e5e5;
-	}
-
-	.warning-outline {
-		color: #ff7900;
-		background: none;
-	}
-
-	.warning-outline::after {
-		border: 1px solid #ff7900;
-	}
-
-	.green {
-		background: #19be6b;
-		color: #fff;
-	}
-
-	.green-hover {
-		background: #16ab60;
-		color: #e5e5e5;
-	}
-
-	.green-outline {
-		color: #19be6b;
-		background: none;
-	}
-
-	.green-outline::after {
-		border: 1px solid #19be6b;
-	}
-
-	.white {
-		background: #fff;
-		color: #333;
-	}
-
-	.white-hover {
-		background: #f7f7f9;
-		color: #666;
-	}
-
-	.white-outline {
-		color: #333;
-		background: none;
-	}
-
-	.white-outline::after {
-		border: 1px solid #333;
-	}
-
-	.gray {
-		background: #ededed;
-		color: #999;
-	}
-
-	.gray-hover {
-		background: #d5d5d5;
-		color: #898989;
-	}
-
-	.gray-outline {
-		color: #999;
-		background: none;
-	}
-
-	.gray-outline::after {
-		border: 1px solid #999;
-	}
-
-	.outline-hover {
-		opacity: 0.6;
-	}
-
-	.circle-btn {
-		border-radius: 40rpx !important;
-	}
-
-	.circle-btn::after {
-		border-radius: 80rpx !important;
-	}
-</style>

+ 0 - 220
yshop/yshop-drink-uniapp/components/space/space.vue

@@ -1,220 +0,0 @@
-<template>
-  <view
-    :class="classObject"
-    :style="[getStyle]"
-  >
-    <slot></slot>
-  </view>
-</template>
-
-<script setup>
-import { ref, watch, onMounted } from "vue"
-const props = defineProps([
-  'direction',
-  'align',
-  'wrap',
-  'justify',
-  'size',
-  'height',
-  'padding',
-  'flex',
-  'border'
-])
-
-console.log("--> % props:\n", props)
-
-
-const classObject = ref({})
-
-const handleClassObject = (props) => {
-  console.log("--> % handleClassObject % props:\n", props.value)
-  let className = 'yshop-space'
-  let direction = props.direction
-  let align = props.align
-  let wrap = props.wrap
-  let justify = props.justify
-  let flex = props.flex
-  let border = props.border
-  if (border) {
-    className += ' yshop-space-border'
-  }
-  if (direction) {
-    className += ` yshop-space-${direction}`
-  }
-  if (wrap) {
-    className += ` yshop-space-${wrap}`
-  }
-  if (align) {
-    className += ` yshop-space-align-${align}`
-  }
-  if (justify) {
-    className += ` yshop-space-justify-${justify}`
-  }
-  console.log("--> % handleClassObject % className:\n", className)
-
-  classObject.value = className
-}
-
-const getStyle = ({
-  size = 6,
-  wrap,
-  height,
-  padding,
-  flex
-}) => {
-  let innerStyle = {}
-  // let size = size.value
-  // let wrap = wrap.value
-  // let height = height.value
-  // let padding = padding.value
-
-  if (height) {
-    innerStyle.height = `${height}rpx`
-  }
-  if (typeof size === 'number') {
-    innerStyle.gap = size + 'px'
-  }
-
-
-  if (wrap) {
-    innerStyle.flexWrap = 'wrap'
-  }
-
-  if (typeof size === 'string') {
-    switch (size) {
-      case 'small':
-        innerStyle.gap = '8rpx'
-        break
-      case 'middle':
-        innerStyle.gap = '16rpx'
-        break
-      case 'large':
-        innerStyle.gap = '24rpx'
-        break
-    }
-  }
-
-
-  if (typeof padding === 'string') {
-    innerStyle.padding = `${padding}rpx`
-  }
-
-  if (Object.prototype.toString.call(padding) === '[object Array]') {
-    if (typeof padding === 'object') {
-      if (padding.length == 1) {
-        innerStyle.padding = `${padding[0]}rpx`
-      }
-      if (padding.length == 2) {
-        innerStyle.padding = `${padding[0]}rpx ${padding[1]}rpx`
-      }
-    }
-  }
-
-  if (Object.prototype.toString.call(size) === '[object Array]') {
-    if (typeof size === 'object') {
-      if (size.length == 1) {
-        innerStyle.gap = `${size[0]}rpx`
-      }
-      if (size.length == 2) {
-        innerStyle.gap = `${size[0]}rpx ${size[1]}rpx`
-      }
-    }
-  }
-
-
-
-  if (flex) {
-    innerStyle.flex = flex
-  }
-
-  return innerStyle
-}
-
-onMounted(() => {
-  handleClassObject(props)
-  getStyle(props)
-})
-
-</script>
-
-<style lang="less">
-space {
-  width: 100%;
-}
-
-.yshop-space {
-  display: flex;
-  width: 100%;
-  flex: 1;
-
-  &-vertical {
-    flex-direction: column;
-  }
-
-  &-align-center {
-    align-items: center;
-  }
-
-  &-align-start {
-    align-items: flex-start;
-  }
-
-  &-align-end {
-    align-items: flex-end;
-  }
-
-  &-justify-center {
-    justify-content: center;
-  }
-
-  &-justify-between {
-    justify-content: space-between;
-  }
-
-  &-justify-around {
-    justify-content: space-around;
-  }
-
-  &-align-end {
-    align-items: flex-end;
-  }
-
-  &-align-baseline {
-    align-items: baseline;
-  }
-
-  &-item:empty {
-    display: none;
-  }
-
-  &-border {
-    border-bottom: 1rpx solid #f9f9f9;
-  }
-}
-
-// #ifdef APP-PLUS
-.yshop-space {
-  &>view {
-    margin-right: 8rpx;
-  }
-
-  &>text {
-    margin-right: 8rpx;
-  }
-
-  &>image {
-    margin-right: 8rpx;
-  }
-
-  .u-tag-wrapper {
-    margin-right: 8rpx;
-  }
-
-  .u-tag {
-    margin-right: 8rpx;
-  }
-
-}
-
-// #endif
-</style>

+ 0 - 125
yshop/yshop-drink-uniapp/components/upload-file/upload-file.vue

@@ -1,125 +0,0 @@
-<template>
-  <uv-upload
-    :fileList="list"
-    name="1"
-    multiple
-    :maxCount="10"
-    @afterRead="afterRead"
-    @delete="handleDeletePic"
-  ></uv-upload>
-</template>
-
-<script setup>
-import { VUE_APP_UPLOAD_URL } from '@/config';
-import { ref } from 'vue';
-
-const props = defineProps(['modelValue'])
-console.log("--> % modelValue:\n", props.modelValue)
-const emit = defineEmits(['update:modelValue'])
-
-const list = ref(props.modelValue)
-
-const handleDeletePic = (event) => {
-  list.value.splice(event.index, 1)
-
-  emit('update:modelValue', list.value)
-}
-
-const afterRead = async (event) => {
-  // 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
-  let lists = [].concat(event.file)
-  let fileListLen = list.value.length
-  lists.map((item) => {
-    list.value.push({
-      ...item,
-      status: 'uploading',
-      message: '上传中'
-    })
-  })
-  for (let i = 0; i < lists.length; i++) {
-    const result = await uploadFilePromise(lists[i].url)
-    console.log("gxs --> % afterRead % result:\n", result)
-    let item = list.value[fileListLen]
-    list.value.splice(fileListLen, 1, Object.assign(item, {
-      status: 'success',
-      message: '',
-      url: result
-    }))
-    fileListLen++
-  }
-  emit('update:modelValue', list.value)
-}
-
-const uploadFilePromise = (url) => {
-  return new Promise((resolve, reject) => {
-    let a = uni.uploadFile({
-      url: VUE_APP_UPLOAD_URL, // 仅为示例,非真实的接口地址
-      filePath: url,
-      name: 'file',
-      formData: {
-        user: 'test'
-      },
-      success: (res) => {
-        console.log("gxs --> % returnnewPromise % res:\n", res)
-        setTimeout(() => {
-          resolve(res.data.data)
-        }, 10)
-      }
-    });
-  })
-}
-
-</script>
-
-<style lang="less">
-.activity {
-
-  &-header {
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-    margin-bottom: 20rpx;
-
-    &-info {
-      display: flex;
-      align-items: flex-end;
-    }
-
-    &-title {
-      line-height: 45rpx;
-      font-size: 32rpx;
-      color: #333333;
-    }
-
-    &-subtitle {
-      margin-left: 10rpx;
-
-      line-height: 33rpx;
-      font-size: 24rpx;
-      color: #EE6D46;
-    }
-
-    &-more {
-      display: flex;
-      align-items: center;
-
-
-      &-info {
-        line-height: 33rpx;
-        font-size: 24rpx;
-        color: #999999;
-      }
-
-      .image {
-        margin-left: 10rpx;
-        display: block;
-        width: 20rpx;
-        height: 20rpx;
-      }
-    }
-
-    &-body {}
-
-  }
-}
-</style>

+ 0 - 452
yshop/yshop-drink-uniapp/components/verification/verification.vue

@@ -1,452 +0,0 @@
-<template>
-  <uv-button
-    round
-    size="mini"
-    block
-    type="primary"
-    @click="startCountdown"
-  >
-    {{ buttonText }}
-  </uv-button>
-</template>
-
-<script setup>
-import {
-  ref,
-  computed,
-  onUnmounted
-} from 'vue'
-import {
-  sendSmsCode
-} from '@/api/auth'
-
-const props = defineProps(['mobile', 'scene'])
-
-const countingDown = ref(false); // 是否正在倒计时
-const countdownSeconds = ref(60); // 倒计时的总秒数
-const timer = ref(null); // 倒计时的总秒数
-
-const buttonText = computed(() => {
-  return countingDown.value ? `${countdownSeconds.value} 秒` : '发送验证码';
-});
-
-const startCountdown = () => {
-  if (!countingDown.value) {
-    countingDown.value = true;
-    handleSendSmsCode()
-  }
-};
-
-
-const handleSendSmsCode = () => {
-  uni.showLoading({
-    title: '发送验证码中'
-  });
-  console.log("gxs --> % handleSendSmsCode % props.mobile:\n", props.mobile)
-  sendSmsCode({
-    "mobile": props.mobile,
-    "scene": props.scene
-  }).then(res => {
-    uni.hideLoading();
-    uni.showToast({
-      icon: 'none',
-      title: '验证码已发送',
-      duration: 2000
-    });
-    timer.value = setInterval(() => {
-      countdownSeconds.value--;
-      console.log("gxs --> % timer % countdownSeconds.value:\n", countdownSeconds.value)
-      if (countdownSeconds.value <= 0) {
-        clearInterval(timer.value);
-        countdownSeconds.value = 60; // 倒计时结束后重置为初始值
-        countingDown.value = false;
-      }
-    }, 1000);
-  }).catch(error => {
-    countingDown.value = false;
-
-  })
-}
-
-onUnmounted(() => {
-  clearInterval(timer.value);
-})
-</script>
-
-<style lang="less">
-.goods {
-  position: relative;
-  padding: 30rpx 0;
-
-  &-card {
-    display: flex;
-    flex-direction: column;
-
-    .goods {
-      &-content {
-        padding: 0 20rpx;
-        display: flex;
-        flex-direction: column;
-      }
-
-      &-info {
-        margin-top: 15rpx;
-      }
-
-      &-thumb {
-        margin-bottom: 15rpx;
-        width: 100%;
-        height: 203rpx;
-
-        &-img {
-          width: 100%;
-          height: 100%;
-          display: block;
-        }
-      }
-
-    }
-  }
-
-  &-header {}
-
-  &-thumb {
-    background: #FAFAFA;
-  }
-
-  &-content {}
-
-  &-storeName {
-    line-height: 40rpx;
-    font-size: 28rpx;
-    font-weight: 500;
-    color: #333333;
-  }
-
-
-
-  &-price {
-    &-row {
-      display: flex;
-      align-items: center;
-
-      .goods-price {}
-    }
-
-    &-primary {
-      line-height: 42rpx;
-      font-size: 30rpx;
-      font-weight: 500;
-      color: #EE6D46;
-    }
-
-    &-default {
-      line-height: 40rpx;
-      font-size: 28rpx;
-      font-weight: 500;
-      color: #333333;
-    }
-
-    &-original {
-      margin-left: 9rpx;
-      line-height: 28rpx;
-      font-size: 20rpx;
-      color: #999999;
-      text-decoration: line-through;
-    }
-
-  }
-
-
-  &-desc {
-    line-height: 33rpx;
-    font-size: 24rpx;
-    color: #999999;
-  }
-
-  &-info {
-    display: flex;
-    align-items: flex-end;
-    justify-content: space-between;
-
-    &-left {}
-
-    &-action {
-      &-btn {}
-
-      &-desc {
-        line-height: 28rpx;
-        font-size: 20rpx;
-        color: #999999;
-      }
-    }
-
-
-  }
-
-  &-image {
-    &-img {}
-  }
-
-  &-list {
-    display: flex;
-    flex-direction: row;
-    padding: 14rpx;
-    box-sizing: border-box;
-    width: 100%;
-
-    .goods {
-      &-thumb {
-        margin-bottom: 0;
-        width: 220rpx;
-        height: 220rpx;
-
-        &-img {
-          width: 100%;
-          height: 100%;
-          display: block;
-        }
-      }
-
-      &-content {
-        padding-right: 40rpx;
-        margin-left: 30rpx;
-        flex: 1;
-        display: flex;
-        flex-direction: column;
-        justify-content: space-between;
-      }
-    }
-
-
-
-    &-model {
-      display: flex;
-
-
-      margin-bottom: 28rpx;
-
-      &-border {
-        display: flex;
-        align-items: center;
-        height: 40rpx;
-        border: 1px solid #CCCCCC;
-        opacity: 1;
-        border-radius: 0rpx;
-        padding: 0 10rpx;
-      }
-
-      &-info {}
-
-      &-label {
-        line-height: 38rpx;
-        font-size: 24rpx;
-        color: #999999;
-        margin-right: 10rpx;
-      }
-
-      &-value {
-        line-height: 38rpx;
-        font-size: 24rpx;
-        color: #333333;
-        margin-right: 10rpx;
-      }
-
-      &-action {
-        width: 11rpx;
-        height: 7rpx;
-      }
-    }
-
-  }
-
-  &-min {
-    .goods {
-      &-thumb {
-        margin-bottom: 0;
-        width: 150rpx;
-        height: 150rpx;
-
-        &-img {
-          width: 100%;
-          height: 100%;
-          display: block;
-        }
-      }
-    }
-  }
-
-  // .goods {
-  //   padding: 16rpx 14rpx;
-
-  //   &-header {
-  //     display: flex;
-  //     align-items: flex-start;
-  //   }
-
-  //   &-thumb {
-
-  //     width: 220rpx;
-  //     height: 220rpx;
-
-  //     &-img {
-  //       width: 100%;
-  //       height: 100%;
-  //       display: block;
-  //     }
-  //   }
-
-  //   &-content {
-  //     margin-top: 24rpx;
-  //     margin-left: 40rpx;
-  //     flex: 1
-  //   }
-
-  //   &-storeName {
-  //     line-height: 40rpx;
-  //     font-size: 28rpx;
-  //     font-weight: 500;
-  //     color: #333333;
-  //     margin-bottom: 35rpx;
-  //   }
-
-  //   &-info {
-  //     display: flex;
-  //     align-items: center;
-  //     justify-content: space-between;
-
-  //     &-left {
-  //       display: flex;
-  //       align-items: flex-end;
-
-  //     }
-
-  //     &-action {
-  //       &-btn {}
-
-  //       &-desc {
-  //         color: #999999;
-  //         font-size: 24rpx;
-  //         line-height: 40rpx;
-  //       }
-  //     }
-
-  //   }
-
-
-  //   &-price {
-  //     &-default {
-  //       line-height: 28rpx;
-  //       font-size: 20rpx;
-  //       color: #999999;
-
-  //     }
-
-  //     &-primary {
-  //       line-height: 42rpx;
-  //       font-size: 30rpx;
-  //       font-weight: 500;
-  //       color: #EE6D46;
-  //       margin-left: 5rpx;
-  //     }
-  //   }
-
-
-
-  //   &-desc {
-  //     color: #999999;
-  //     font-size: 24rpx;
-  //     line-height: 40rpx;
-  //   }
-
-
-  &-model {
-    display: inline-flex;
-    align-items: center;
-    width: auto;
-    height: 40rpx;
-    border: 1px solid #CCCCCC;
-    opacity: 1;
-    border-radius: 0rpx;
-    padding: 0 10rpx;
-
-    margin-bottom: 28rpx;
-
-    &-label {
-      line-height: 38rpx;
-      font-size: 24rpx;
-      color: #999999;
-    }
-
-    &-value {
-      line-height: 38rpx;
-      font-size: 24rpx;
-      color: #333333;
-      margin-right: 10rpx;
-    }
-
-    &-action {
-      width: 11rpx;
-      height: 7rpx;
-    }
-  }
-
-  //   &-model-info {
-  //     display: inline-flex;
-  //     align-items: center;
-  //     width: auto;
-  //     height: 40rpx;
-  //     opacity: 1;
-  //     border-radius: 0rpx;
-  //     margin-bottom: 28rpx;
-
-  //     &-label {
-  //       line-height: 38rpx;
-  //       font-size: 24rpx;
-  //       color: #999999;
-  //     }
-
-  //     &-value {
-  //       line-height: 38rpx;
-  //       font-size: 24rpx;
-  //       color: #333333;
-  //       margin-right: 10rpx;
-  //     }
-
-  //     &-action {
-  //       width: 11rpx;
-  //       height: 7rpx;
-  //     }
-  //   }
-  // }
-}
-
-.buy-progress {
-  display: flex;
-  align-items: center;
-  justify-content: space-between;
-
-  &-info {
-    flex: 1;
-
-    &-desc {
-      color: #999999;
-      font-size: 24rpx;
-      line-height: 32rpx;
-    }
-  }
-
-  &-action {
-    margin-left: 17rpx;
-  }
-}
-
-.buy-num {
-
-  &-info-desc {
-    color: #999999;
-    font-size: 24rpx;
-    line-height: 32rpx;
-  }
-}
-</style>

+ 0 - 13
yshop/yshop-drink-uniapp/config/index.js

@@ -1,13 +0,0 @@
-//export const VUE_APP_API_URL = 'http://127.0.0.1:48081/app-api'
-export const VUE_APP_API_URL = 'https://apidc.yixiang.co/app-api'
-//export const VUE_APP_WS_URL = 'ws://127.0.0.1:48081/infra/ws'
-export const VUE_APP_WS_URL = 'wss://apidc.yixiang.co/infra/ws'
-export const VUE_APP_RESOURCES_URL = 'https://h5.yixiang.co/static'
-export const VUE_APP_UPLOAD_URL = VUE_APP_API_URL + '/infra/file/upload'
-export const APP_ID = 'wxc061dee8806ff712'
-export const TENANT_ID = 1 //租户ID
-export const IS_DEMO = true //是否演示环境
-
-const orderListStatus = {}
-
-

+ 0 - 2
yshop/yshop-drink-uniapp/hooks/index.js

@@ -1,2 +0,0 @@
-export * from './usePage'
-export * from './useGlobalProperties'

+ 0 - 8
yshop/yshop-drink-uniapp/hooks/useGlobalProperties.js

@@ -1,8 +0,0 @@
-// mouse.js
-import { ref, onMounted, onUnmounted, getCurrentInstance } from 'vue'
-import { onReady, onReachBottom } from '@dcloudio/uni-app'
-
-export const useGlobalProperties = () => {
-  const instance = getCurrentInstance()
-  return instance.appContext.app.config.globalProperties
-}

+ 0 - 88
yshop/yshop-drink-uniapp/hooks/usePage.js

@@ -1,88 +0,0 @@
-// mouse.js
-import { ref, onMounted, onUnmounted } from 'vue'
-import { onReady, onReachBottom } from '@dcloudio/uni-app'
-
-export const usePage = getPage => {
-  // 页码,默认为1
-  const page = ref(1)
-
-  // 页大小,默认为10
-  const limit = ref(10)
-
-  // 关键字
-  const keyword = ref('')
-
-  // 类别
-  const type = ref('')
-
-  // 分类ID
-  const sid = ref('')
-
-  // 是否新品,不为空的字符串即可
-  const news = ref('')
-
-  // 是否积分兑换商品
-  const isIntegral = ref('')
-
-  // 到底了
-  const loadend = ref(false)
-
-  // 加载中
-  const loading = ref(false)
-
-  const dataList = ref([])
-
-  const handleGetDataList = async () => {
-    console.log('--> % handleGetDataList % loading:\n', loading.value)
-    console.log('--> % handleGetDataList % loadend:\n', loadend.value)
-    if (loading.value || loadend.value) return
-
-    loading.value = true
-    const products = await getPage({
-      page: page.value,
-      limit: limit.value,
-      keyword: keyword.value,
-      type: type.value,
-      sid: sid.value,
-      news: news.value,
-      isIntegral: isIntegral.value,
-    })
-    console.log('--> % handleGetDataList % products:\n', products)
-    if (products) {
-      if (products.length <= 0) {
-        loadend.value = true
-      }
-      dataList.value = dataList.value.concat(products)
-    }
-    loading.value = false
-  }
-
-  const handleRefresh = () => {
-    loadend.value = false
-    loading.value = false
-    dataList.value = []
-    handleGetDataList()
-  }
-
-  onReady(() => {
-    console.log('onReady')
-    // handleGetDataList()
-  })
-
-  onReachBottom(() => {
-    if (loading.value) return
-    page.value += 1
-  })
-
-  // 通过返回值暴露所管理的状态
-  return {
-    type,
-    dataList,
-    page,
-    limit,
-    keyword,
-    loading,
-    loadend,
-    refresh: handleRefresh,
-  }
-}

+ 0 - 150
yshop/yshop-drink-uniapp/hooks/useWebSocket.js

@@ -1,150 +0,0 @@
-import { onBeforeUnmount, reactive, ref } from 'vue';
-import { VUE_APP_WS_URL } from '@/config';
-import { copyValueToTarget } from '@/utils/util';
-import cookie from '@/utils/cookie';
-
-/**
- * WebSocket 创建 hook
- * @param opt 连接配置
- * @return {{options: *}}
- */
-export function useWebSocket(opt) {
-  const options = reactive({
-    url: VUE_APP_WS_URL + '?token=' + cookie.get('accessToken'), // ws 地址
-    isReconnecting: false, // 正在重新连接
-    reconnectInterval: 3000, // 重连间隔,单位毫秒
-    heartBeatInterval: 5000, // 心跳间隔,单位毫秒
-    pingTimeoutDuration: 1000, // 超过这个时间,后端没有返回pong,则判定后端断线了。
-    heartBeatTimer: null, // 心跳计时器
-    destroy: false, // 是否销毁
-    pingTimeout: null, // 心跳检测定时器
-    reconnectTimeout: null, // 重连定时器ID的属性
-    onConnected: () => {}, // 连接成功时触发
-    onClosed: () => {}, // 连接关闭时触发
-    onMessage: (data) => {}, // 收到消息
-  });
-  const SocketTask = ref(null); // SocketTask 由 uni.connectSocket() 接口创建
-
-  const initEventListeners = () => {
-    // 监听 WebSocket 连接打开事件
-    SocketTask.value.onOpen(() => {
-      console.log('WebSocket 连接成功');
-      // 连接成功时触发
-      options.onConnected();
-      // 开启心跳检查
-      startHeartBeat();
-    });
-    // 监听 WebSocket 接受到服务器的消息事件
-    SocketTask.value.onMessage((res) => {
-      try {
-        if (res.data === 'pong') {
-          // 收到心跳重置心跳超时检查
-          resetPingTimeout();
-        } else {
-          options.onMessage(JSON.parse(res.data));
-        }
-      } catch (error) {
-        console.error(error);
-      }
-    });
-    // 监听 WebSocket 连接关闭事件
-    SocketTask.value.onClose((event) => {
-      // 情况一:实例销毁
-      if (options.destroy) {
-        options.onClosed();
-      } else {
-        // 情况二:连接失败重连
-        // 停止心跳检查
-        stopHeartBeat();
-        // 重连
-        reconnect();
-      }
-    });
-  };
-
-  // 发送消息
-  const sendMessage = (message) => {
-    if (SocketTask.value && !options.destroy) {
-      SocketTask.value.send({ data: message });
-    }
-  };
-  // 开始心跳检查
-  const startHeartBeat = () => {
-    options.heartBeatTimer = setInterval(() => {
-      sendMessage('ping');
-      options.pingTimeout = setTimeout(() => {
-        // 如果在超时时间内没有收到 pong,则认为连接断开
-        reconnect();
-      }, options.pingTimeoutDuration);
-    }, options.heartBeatInterval);
-  };
-  // 停止心跳检查
-  const stopHeartBeat = () => {
-    clearInterval(options.heartBeatTimer);
-    resetPingTimeout();
-  };
-
-  // WebSocket 重连
-  const reconnect = () => {
-    if (options.destroy || !SocketTask.value) {
-      // 如果WebSocket已被销毁或尚未完全关闭,不进行重连
-      return;
-    }
-
-    // 重连中
-    options.isReconnecting = true;
-
-    // 清除现有的重连标志,以避免多次重连
-    if (options.reconnectTimeout) {
-      clearTimeout(options.reconnectTimeout);
-    }
-
-    // 设置重连延迟
-    options.reconnectTimeout = setTimeout(() => {
-      // 检查组件是否仍在运行和WebSocket是否关闭
-      if (!options.destroy) {
-        // 重置重连标志
-        options.isReconnecting = false;
-        // 初始化新的WebSocket连接
-        initSocket();
-      }
-    }, options.reconnectInterval);
-  };
-
-  const resetPingTimeout = () => {
-    if (options.pingTimeout) {
-      clearTimeout(options.pingTimeout);
-      options.pingTimeout = null; // 清除超时ID
-    }
-  };
-
-  const close = () => {
-    options.destroy = true;
-    stopHeartBeat();
-    if (options.reconnectTimeout) {
-      clearTimeout(options.reconnectTimeout);
-    }
-    if (SocketTask.value) {
-      SocketTask.value.close();
-      SocketTask.value = null;
-    }
-  };
-
-  const initSocket = () => {
-    options.destroy = false;
-    copyValueToTarget(options, opt);
-    SocketTask.value = uni.connectSocket({
-      url: options.url,
-      complete: () => {},
-      success: () => {},
-    });
-    initEventListeners();
-  };
-
-  initSocket();
-
-  onBeforeUnmount(() => {
-    close();
-  });
-  return { options,close,SocketTask };
-}

+ 0 - 20
yshop/yshop-drink-uniapp/index.html

@@ -1,20 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="UTF-8" />
-    <script>
-      var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') ||
-        CSS.supports('top: constant(a)'))
-      document.write(
-        '<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
-        (coverSupport ? ', viewport-fit=cover' : '') + '" />')
-    </script>
-    <title></title>
-    <!--preload-links-->
-    <!--app-context-->
-  </head>
-  <body>
-    <div id="app"><!--app-html--></div>
-    <script type="module" src="/main.js"></script>
-  </body>
-</html>

+ 0 - 12
yshop/yshop-drink-uniapp/jsconfig.json

@@ -1,12 +0,0 @@
-{
-  "compilerOptions": {
-    "baseUrl": "./",
-    "paths": {
-      "@/*": ["./*"],
-      "@/api": ["./api"],
-      "@/utils": ["./utils"]
-    }
-  },
-  "exclude": ["node_modules", "dist"],
-  "include": ["/**/*"]
-}

+ 0 - 28
yshop/yshop-drink-uniapp/main.js

@@ -1,28 +0,0 @@
-/*
- * @Author: Gaoxs
- * @Date: 2023-04-07 15:12:06
- * @LastEditors: Gaoxs
- * @Description:
- */
-import util from '@/utils'
-
-import App from './App'
-
-import { createPinia } from 'pinia'
-import { createPersistedState } from 'pinia-plugin-persistedstate'
-
-
-import { createSSRApp } from 'vue'
-
-export function createApp() {
-  const app = createSSRApp(App)
-  app.use(util)
-  //app.use(createPinia())
-  const pinia = createPinia()
-  pinia.use(createPersistedState({ storage: {getItem: uni.getStorageSync,setItem: uni.setStorageSync}}))
-  app.use(pinia)
-  return {
-    app,
-	pinia
-  }
-}

+ 0 - 449
yshop/yshop-drink-uniapp/manifest.json

@@ -1,449 +0,0 @@
-{
-    "name" : "yshop-miniapp",
-    "appid" : "__UNI__ADC0FB0",
-    "description" : "",
-    "versionName" : "1.0.0",
-    "versionCode" : 1,
-    "transformPx" : false,
-    /* 5+App特有相关 */
-    "app-plus" : {
-        "usingComponents" : true,
-        "nvueStyleCompiler" : "uni-app",
-        "compilerVersion" : 3,
-        "splashscreen" : {
-            "alwaysShowBeforeRender" : true,
-            "waiting" : true,
-            "autoclose" : true,
-            "delay" : 0
-        },
-        /* 模块配置 */
-        "modules" : {
-            "Payment" : {},
-            "OAuth" : {}
-        },
-        /* 应用发布信息 */
-        "distribute" : {
-            //必选,JSON对象,云端打包配置
-            "android" : {
-                //可选,JSON对象,Android平台云端打包配置
-                "packagename" : "", //必填,字符串类型,Android包名
-                "keystore" : "", //必填,字符串类型,Android签名证书文件路径
-                "password" : "", //必填,字符串类型,Android签名证书文件的密码
-                "aliasname" : "", //必填,字符串类型,Android签名证书别名
-                "schemes" : "", //可选,字符串类型,参考:https://uniapp.dcloud.io/tutorial/app-android-schemes
-                "abiFilters" : [
-                    //可选,字符串数组类型,参考:https://uniapp.dcloud.io/tutorial/app-android-abifilters
-                    "armeabi-v7a",
-                    "arm64-v8a",
-                    "x86",
-                    "x86_64"
-                ],
-                "permissions" : [
-                    "<uses-feature android:name=\"android.hardware.camera\"/>",
-                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
-                    "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
-                    "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
-                    "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
-                    "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
-                    "<uses-permission android:name=\"android.permission.CAMERA\"/>",
-                    "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
-                    "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
-                    "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
-                    "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
-                    "<uses-permission android:name=\"android.permission.INTERNET\"/>",
-                    "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
-                    "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
-                    "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
-                    "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
-                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
-                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
-                    "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
-                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
-                ],
-                "custompermissions" : false, //可选,Boolean类型,是否自定义Android权限配置
-                "permissionExternalStorage" : {
-                    //可选,JSON对象,Android平台应用启动时申请读写手机存储权限策略
-                    "request" : "always", //必填,字符串类型,申请读写手机存储权限策略,可取值none、once、always
-                    "prompt" : "" //可选,字符串类型,当request设置为always值用户拒绝时弹出提示框上的内容
-                },
-                "permissionPhoneState" : {
-                    //可选,JSON对象,Android平台应用启动时申请读取设备信息权限配置
-                    "request" : "always", //必填,字符串类型,申请读取设备信息权限策略,可取值none、once、always
-                    "prompt" : "" //可选,字符串类型,当request设置为always值用户拒绝时弹出提示框上的内容
-                },
-                "minSdkVersion" : 21, //可选,数字类型,Android平台最低支持版本,参考:https://uniapp.dcloud.io/tutorial/app-android-minsdkversion
-                "targetSdkVersion" : 30, //可选,数字类型,Android平台目标版本,参考:https://uniapp.dcloud.io/tutorial/app-android-targetsdkversion
-                "packagingOptions" : [
-                    //可选,字符串数组类型,Android平台云端打包时build.gradle的packagingOptions配置项
-                    "doNotStrip '*/armeabi-v7a/*.so'",
-                    "merge '**/LICENSE.txt'"
-                ],
-                "jsEngine" : "v8", //可选,字符串类型,uni-app使用的JS引擎,可取值v8、jsc
-                "debuggable" : false, //可选,Boolean类型,是否开启Android调试开关
-                "locale" : "default", //可选,应用的语言
-                "forceDarkAllowed" : false, //可选,Boolean类型,是否强制允许暗黑模式
-                "resizeableActivity" : false, //可选,Boolean类型,是否支持分屏调整窗口大小
-                "hasTaskAffinity" : false, //可选,Boolean类型,是否设置android:taskAffinity
-                "buildFeatures" : {
-                    //(HBuilderX3.5.0+版本支持)可选,JSON对象,Android平台云端打包时build.gradle的buildFeatures配置项  
-                    "dataBinding" : false, //可选,Boolean类型,是否设置dataBinding
-                    "viewBinding" : false //可选,Boolean类型,是否设置viewBinding
-                }
-            },
-            "ios" : {
-                //可选,JSON对象,iOS平台云端打包配置
-                "appid" : "", //必填,字符串类型,iOS平台Bundle ID
-                "mobileprovision" : "", //必填,字符串类型,iOS打包使用的profile文件路径
-                "p12" : "", //必填,字符串类型,iOS打包使用的证书文件路径
-                "password" : "", //必填,字符串类型,iOS打包使用的证书密码
-                "devices" : "iphone", //必填,字符串类型,iOS支持的设备类型,可取值iphone、ipad、universal
-                "urlschemewhitelist" : "baidumap", //可选,字符串类型,应用访问白名单列表,参考:https://uniapp.dcloud.io/tutorial/app-ios-schemewhitelist
-                "urltypes" : "", //可选,字符串类型,参考:https://uniapp.dcloud.io/tutorial/app-ios-schemes
-                "UIBackgroundModes" : "audio", //可选,字符串类型,应用后台运行模式,参考:https://uniapp.dcloud.io/tutorial/app-ios-uibackgroundmodes
-                "frameworks" : [
-                    //可选,字符串数组类型,依赖的系统库,已废弃,推荐使用uni原生插件扩展使用系统依赖库
-                    "CoreLocation.framework"
-                ],
-                "deploymentTarget" : "10.0", //可选,字符串类型,iOS支持的最低版本
-                "privacyDescription" : {
-                    //可选,JSON对象,iOS隐私信息访问的许可描述
-                    "NSPhotoLibraryUsageDescription" : "", //可选,字符串类型,系统相册读取权限描述
-                    "NSPhotoLibraryAddUsageDescription" : "", //可选,字符串类型,系统相册写入权限描述
-                    "NSCameraUsageDescription" : "", //可选,字符串类型,摄像头使用权限描述
-                    "NSMicrophoneUsageDescription" : "", //可选,字符串类型,麦克风使用权限描述
-                    "NSLocationWhenInUseUsageDescription" : "", //可选,字符串类型,运行期访问位置权限描述
-                    "NSLocationAlwaysUsageDescription" : "", //可选,字符串类型,后台运行访问位置权限描述
-                    "NSLocationAlwaysAndWhenInUseUsageDescription" : "", //可选,字符串类型,运行期后后台访问位置权限描述
-                    "NSCalendarsUsageDescription" : "", //可选,字符串类型,使用日历权限描述
-                    "NSContactsUsageDescription" : "", //可选,字符串类型,使用通讯录权限描述
-                    "NSBluetoothPeripheralUsageDescription" : "", //可选,字符串类型,使用蓝牙权限描述
-                    "NSBluetoothAlwaysUsageDescription" : "", //可选,字符串类型,后台使用蓝牙权限描述
-                    "NSSpeechRecognitionUsageDescription" : "", //可选,字符串类型,系统语音识别权限描述
-                    "NSRemindersUsageDescription" : "", //可选,字符串类型,系统提醒事项权限描述
-                    "NSMotionUsageDescription" : "", //可选,字符串类型,使用运动与健康权限描述
-                    "NSHealthUpdateUsageDescription" : "", //可选,字符串类型,使用健康更新权限描述
-                    "NSHealthShareUsageDescription" : "", //可选,字符串类型,使用健康分享权限描述
-                    "NSAppleMusicUsageDescription" : "", //可选,字符串类型,使用媒体资料库权限描述
-                    "NFCReaderUsageDescription" : "", //可选,字符串类型,使用NFC权限描述
-                    "NSHealthClinicalHealthRecordsShareUsageDescription" : "", //可选,字符串类型,访问临床记录权限描述
-                    "NSHomeKitUsageDescription" : "", //可选,字符串类型,访问HomeKit权限描述
-                    "NSSiriUsageDescription" : "", //可选,字符串类型,访问Siri权限描述
-                    "NSFaceIDUsageDescription" : "", //可选,字符串类型,使用FaceID权限描述
-                    "NSLocalNetworkUsageDescription" : "", //可选,字符串类型,访问本地网络权限描述
-                    "NSUserTrackingUsageDescription" : "" //可选,字符串类型,跟踪用户活动权限描述
-                },
-                "idfa" : true, //可选,Boolean类型,是否使用广告标识
-                "capabilities" : {},
-                //可选,JSON对象,应用的能力配置(Capabilities)
-                "CFBundleName" : "HBuilder", //可选,字符串类型,CFBundleName名称
-                "validArchitectures" : [
-                    //可选,字符串数组类型,编译时支持的CPU指令,可取值arm64、arm64e、armv7、armv7s、x86_64
-                    "arm64"
-                ],
-                "pushRegisterMode" : "manual", //可选,使用“Push(消息推送)”模块时申请系统推送权限模式,manual表示调用push相关API时申请,其它值表示应用启动时自动申请
-                "privacyRegisterMode" : "manual", //可选,仅iOS有效,设置为manual表示用户同意隐私政策后才获取idfv,设置为其它值表示应用启动时自动获取
-                "dSYMs" : false
-            },
-            "sdkConfigs" : {
-                //可选,JSON对象,三方SDK相关配置
-                "geolocation" : {
-                    //可选,JSON对象,Geolocation(定位)模块三方SDK配置
-                    "system" : {
-                        //可选,JSON对象,使用系统定位
-                        "__platform__" : [ "ios", "android" ] //可选,字符串数组类型,支持的平台
-                    },
-                    "amap" : {
-                        //可选,JSON对象,使用高德定位SDK配置
-                        "__platform__" : [ "ios", "android" ], //可选,字符串数组类型,支持的平台
-                        "appkey_ios" : "", //必填,字符串类型,iOS平台高德定位appkey
-                        "appkey_android" : "" //必填,字符串类型,Android平台高德定位appkey
-                    },
-                    "baidu" : {
-                        //可选,JSON对象,使用百度定位SDK配置
-                        "__platform__" : [ "ios", "android" ], //可选,字符串数组类型,支持的平台
-                        "appkey_ios" : "", //必填,字符串类型,iOS平台百度定位appkey
-                        "appkey_android" : "" //必填,字符串类型,Android平台百度定位appkey
-                    }
-                },
-                "maps" : {
-                    //可选,JSON对象,Maps(地图)模块三方SDK配置
-                    "amap" : {
-                        //可选,JSON对象,使用高德地图SDK配置
-                        "appkey_ios" : "", //必填,字符串类型,iOS平台高德地图appkey
-                        "appkey_android" : "" //必填,字符串类型,Android平台高德地图appkey
-                    },
-                    "baidu" : {
-                        //可选,JSON对象,使用百度地图SDK配置
-                        "appkey_ios" : "", //必填,字符串类型,iOS平台百度地图appkey
-                        "appkey_android" : "" //必填,字符串类型,Android平台百度地图appkey
-                    },
-                    "google" : {
-                        //可选,JSON对象,使用Google地图SDK配置
-                        "APIKey_ios" : "", //必填,字符串类型,iOS平台Google地图APIKey
-                        "APIKey_android" : "" //必填,字符串类型,Android平台Google地图APIKey
-                    }
-                },
-                "oauth" : {
-                    //可选,JSON对象,使用苹果登录(Sign in with Apple)SDK配置,无配置参数,仅iOS平台支持
-                    "weixin" : {
-                        "appid" : "wx7c84ede33062d1e4",
-                        "UniversalLinks" : "https://yixiang.co/app/"
-                    }
-                },
-                "payment" : {
-                    "weixin" : {
-                        "__platform__" : [ "ios", "android" ],
-                        "appid" : "wx7c84ede33062d1e4",
-                        "UniversalLinks" : "https://yixiang.co/app/"
-                    }
-                },
-                //可选,JSON对象,使用google支付SDK配置,无配置参数,仅Android平台支持
-                "push" : {
-                    //可选,JSON对象,Push(消息推送)模块三方SDK配置
-                    "unipush" : {
-                        //可选,JSON对象,使用UniPush SDK配置,无需手动配置参数,云端打包自动获取配置参数
-                        "icons" : {
-                            //可选,JSON对象,推送图标配置
-                            "push" : {
-                                //可选,JSON对象,Push图标配置
-                                "ldpi" : "", //可选,字符串类型,普通屏设备推送图标路径,分辨率要求48x48
-                                "mdpi" : "", //可选,字符串类型,大屏设备设备推送图标路径,分辨率要求48x48
-                                "hdpi" : "", //可选,字符串类型,高分屏设备推送图标路径,分辨率要求72x72
-                                "xdpi" : "", //可选,字符串类型,720P高分屏设备推送图标路径,分辨率要求96x96
-                                "xxdpi" : "", //可选,字符串类型,1080P高密度屏幕推送图标路径,分辨率要求144x144
-                                "xxxdpi" : "" //可选,字符串类型,4K屏设备推送图标路径,分辨率要求192x192
-                            },
-                            "smal" : {
-                                //可选,JSON对象,Push小图标配置
-                                "ldpi" : "", //可选,字符串类型,普通屏设备推送小图标路径,分辨率要求18x18
-                                "mdpi" : "", //可选,字符串类型,大屏设备设备推送小图标路径,分辨率要求24x24
-                                "hdpi" : "", //可选,字符串类型,高分屏设备推送小图标路径,分辨率要求36x36
-                                "xdpi" : "", //可选,字符串类型,720P高分屏设备推送小图标路径,分辨率要求48x48
-                                "xxdpi" : "", //可选,字符串类型,1080P高密度屏幕推送小图标路径,分辨率要求72x72
-                                "xxxdpi" : "" //可选,字符串类型,4K屏设备推送小图标路径,分辨率要求96x96
-                            }
-                        }
-                    },
-                    "igexin" : {
-                        //可选,JSON对象,使用个推推送SDK配置,**已废弃,推荐使用UniPush,UniPush是个推推送VIP版,功能更强大**
-                        "appid" : "", //必填,字符串类型,个推开放平台申请的appid
-                        "appkey" : "", //必填,字符串类型,个推开放平台申请的appkey
-                        "appsecret" : "", //必填,字符串类型,个推开放平台申请的appsecret
-                        "icons" : {
-                            //可选,JSON对象,推送图标配置
-                            "push" : {
-                                //可选,JSON对象,Push图标配置
-                                "ldpi" : "", //可选,字符串类型,普通屏设备推送图标路径,分辨率要求48x48
-                                "mdpi" : "", //可选,字符串类型,大屏设备设备推送图标路径,分辨率要求48x48
-                                "hdpi" : "", //可选,字符串类型,高分屏设备推送图标路径,分辨率要求72x72
-                                "xdpi" : "", //可选,字符串类型,720P高分屏设备推送图标路径,分辨率要求96x96
-                                "xxdpi" : "", //可选,字符串类型,1080P高密度屏幕推送图标路径,分辨率要求144x144
-                                "xxxdpi" : "" //可选,字符串类型,4K屏设备推送图标路径,分辨率要求192x192
-                            },
-                            "smal" : {
-                                //可选,JSON对象,Push小图标配置
-                                "ldpi" : "", //可选,字符串类型,普通屏设备推送小图标路径,分辨率要求18x18
-                                "mdpi" : "", //可选,字符串类型,大屏设备设备推送小图标路径,分辨率要求24x24
-                                "hdpi" : "", //可选,字符串类型,高分屏设备推送小图标路径,分辨率要求36x36
-                                "xdpi" : "", //可选,字符串类型,720P高分屏设备推送小图标路径,分辨率要求48x48
-                                "xxdpi" : "", //可选,字符串类型,1080P高密度屏幕推送小图标路径,分辨率要求72x72
-                                "xxxdpi" : "" //可选,字符串类型,4K屏设备推送小图标路径,分辨率要求96x96
-                            }
-                        }
-                    }
-                },
-                "share" : {
-                    //可选,JSON对象,Share(分享)模块三方SDK配置
-                    "weixin" : {
-                        //可选,JSON对象,使用微信分享SDK配置
-                        "appid" : "", //必填,字符串类型,微信开放平台申请的appid
-                        "UniversalLinks" : "" //可选,字符串类型,微信开放平台配置的iOS平台通用链接
-                    },
-                    "qq" : {
-                        //可选,JSON对象,使用QQ分享SDK配置
-                        "appid" : "", //必填,字符串类型,QQ开放平台申请的appid
-                        "UniversalLinks" : "" //可选,字符串类型,QQ开放平台配置的iOS平台通用链接
-                    },
-                    "sina" : {
-                        //可选,JSON对象,使用新浪微博分享SDK配置
-                        "appkey" : "", //必填,字符串类型,新浪微博开放平台申请的appid
-                        "redirect_uri" : "", //必填,字符串类型,新浪微博开放平台配置的redirect_uri
-                        "UniversalLinks" : "" //可选,字符串类型,新浪微博开放平台配置的iOS平台通用链接
-                    }
-                },
-                "speech" : {
-                    //可选,JSON对象,Speech(语音识别)模块三方SDK配置
-                    "baidu" : {
-                        //可选,JSON对象,使用百度语音识别SDK配置
-                        "appid" : "", //必填,字符串类型,百度开放平台申请的appid
-                        "apikey" : "", //必填,字符串类型,百度开放平台申请的apikey
-                        "secretkey" : "" //必填,字符串类型,百度开放平台申请的secretkey
-                    }
-                },
-                "statics" : {
-                    //可选,JSON对象,Statistic(统计)模块三方SDK配置
-                    "umeng" : {
-                        //可选,JSON对象,使用友盟统计SDK配置
-                        "appkey_ios" : "", //必填,字符串类型,友盟统计开放平台申请的iOS平台appkey
-                        "channelid_ios" : "", //可选,字符串类型,友盟统计iOS平台的渠道标识
-                        "appkey_android" : "", //必填,字符串类型,友盟统计开放平台申请的Android平台appkey
-                        "channelid_android" : "" //可选,字符串类型,友盟统计Android平台的渠道标识
-                    },
-                    "google" : {
-                        //可选,JSON对象,使用Google Analytics for Firebase配置
-                        "config_ios" : "", //必填,字符串类型,Google Firebase统计开发者后台获取的iOS平台配置文件路径
-                        "config_android" : "" //必填,字符串类型,Google Firebase统计开发者后台获取的Android平台配置文件路径
-                    }
-                },
-                "ad" : {}
-            },
-            //可选,JSON对象,使用互动游戏(变现猫)SDK,无需手动配置,在uni-AD后台申请开通后自动获取配置参数
-            "icons" : {
-                //可选,JSON对象,应用图标相关配置
-                "ios" : {
-                    //可选,JSON对象,iOS平台图标配置 
-                    "appstore" : "", //必填,字符串类型,分辨率1024x1024, 提交app sotre使用的图标路径
-                    "iphone" : {
-                        //可选,JSON对象,iPhone设备图标配置
-                        "app@2x" : "", //可选,字符串类型,分辨率120x120,程序图标路径  
-                        "app@3x" : "", //可选,字符串类型,分辨率180x180,程序图标路径  
-                        "spotlight@2x" : "", //可选,字符串类型,分辨率80x80,Spotlight搜索图标路径
-                        "spotlight@3x" : "", //可选,字符串类型,分辨率120x120,Spotlight搜索图标路径
-                        "settings@2x" : "", //可选,字符串类型,分辨率58x58,Settings设置图标路径
-                        "settings@3x" : "", //可选,字符串类型,分辨率87x87,Settings设置图标路径
-                        "notification@2x" : "", //可选,字符串类型,分辨率40x40,通知栏图标路径
-                        "notification@3x" : "" //可选,字符串类型,分辨率60x60,通知栏图标路径
-                    },
-                    "ipad" : {
-                        //可选,JSON对象,iPad设备图标配置
-                        "app" : "", //可选,字符串类型,分辨率76x76,程序图标图标路径
-                        "app@2x" : "", //可选,字符串类型,分辨率152x152,程序图标图标路径
-                        "proapp@2x" : "", //可选,字符串类型,分辨率167x167,程序图标图标路径
-                        "spotlight" : "", //可选,字符串类型,分辨率40x40,Spotlight搜索图标路径
-                        "spotlight@2x" : "", //可选,字符串类型,分辨率80x80,Spotlight搜索图标路径
-                        "settings" : "", //可选,字符串类型,分辨率29x29,Settings设置图标路径
-                        "settings@2x" : "", //可选,字符串类型,分辨率58x58,Settings设置图标路径
-                        "notification" : "", //可选,字符串类型,分辨率20x20,通知栏图标路径
-                        "notification@2x" : "" //可选,字符串类型,分辨率740x40,通知栏图标路径
-                    }
-                },
-                "android" : {
-                    //可选,JSON对象,Android平台图标配置
-                    "ldpi" : "", //可选,字符串类型,普通屏设备程序图标,分辨率要求48x48,已废弃  
-                    "mdpi" : "", //可选,字符串类型,大屏设备程序图标,分辨率要求48x48,已废弃  
-                    "hdpi" : "", //可选,字符串类型,高分屏设备程序图标,分辨率要求72x72
-                    "xhdpi" : "", //可选,字符串类型,720P高分屏设备程序图标,分辨率要求96x96
-                    "xxhdpi" : "", //可选,字符串类型,1080P高分屏设备程序图标,分辨率要求144x144
-                    "xxxhdpi" : "" //可选,字符串类型,2K屏设备程序图标,分辨率要求192x192
-                }
-            },
-            "splashscreen" : {
-                //可选,JSON对象,启动界面配置
-                "iosStyle" : "common", //可选,字符串类型,iOS平台启动界面样式,可取值common、default、storyboard
-                "ios" : {
-                    //可选,JSON对象,iOS平台启动界面配置 
-                    "storyboard" : "", //可选,字符串类型,自定义storyboard启动界面文件路径,iosStyle值为storyboard时生效
-                    "iphone" : {
-                        //可选,JSON对象,iPhone设备启动图配置,iosStyle值为default时生效
-                        "default" : "", //可选,字符串类型,分辨率320x480,iPhone3(G/GS)启动图片路径,已废弃  
-                        "retina35" : "", //可选,字符串类型,分辨率640x960,3.5英寸设备(iPhone4/4S)启动图片路径,已废弃 
-                        "retina40" : "", //可选,字符串类型,分辨率640x1136,4.0英寸设备(iPhone5/5S)启动图片路径
-                        "retina40l" : "", //可选,字符串类型,分辨率1136x640,4.0英寸设备(iPhone5/5S)横屏启动图片路径
-                        "retina47" : "", //可选,字符串类型,分辨率750x1334,4.7英寸设备(iPhone6/7/8)启动图片路径
-                        "retina47l" : "", //可选,字符串类型,分辨率1334x750,4.7英寸设备(iPhone6/7/8)横屏启动图片路径
-                        "retina55" : "", //可选,字符串类型,分辨率1242x2208,5.5英寸设备(iPhone6/7/8Plus)启动图片路径  
-                        "retina55l" : "", //可选,字符串类型,分辨率2208x1242,5.5英寸设备(iPhone6/7/8Plus)横屏启动图片路径
-                        "iphonex" : "", //可选,字符串类型,分辨率1125x2436,5.8英寸设备(iPhoneX/XS)启动图片路径
-                        "iphonexl" : "", //可选,字符串类型,分辨率2436x1125,5.8英寸设备(iPhoneX/XS)横屏启动图片路径
-                        "portrait-896h@2x" : "", //可选,字符串类型,分辨率828x1792,6.1英寸设备(iPhoneXR)启动图片路径
-                        "landscape-896h@2x" : "", //可选,字符串类型,分辨率1792x828,6.1英寸设备(iPhoneXR)iPhoneXR横屏启动图片路径
-                        "portrait-896h@3x" : "", //可选,字符串类型,分辨率1242x2688,6.5英寸设备(iPhoneXS Max)启动图片路径
-                        "landscape-896h@3x" : "" //可选,字符串类型,分辨率2688x1242,6.5英寸设备(iPhoneXS Max)横屏启动图片路径
-                    },
-                    "ipad" : {
-                        //可选,JSON对象,iPad设备启动图配置,iosStyle值为default时生效
-                        "portrait" : "", //可选,字符串类型,分辨率768x1004,iPad竖屏启动图片路径,已废弃  
-                        "portrait-retina" : "", //可选,字符串类型,分辨率1536x2008,iPad高分屏竖屏启动图片路径,已废弃  
-                        "landscape" : "", //可选,字符串类型,分辨率1024x748,iPad横屏启动图片路径,已废弃   
-                        "landscape-retina" : "", //可选,字符串类型,分辨率2048x1496,iPad高分屏横屏启动图片路径,已废弃  
-                        "portrait7" : "", //可选,字符串类型,分辨率768x1024,9.7/7.9英寸iPad/mini竖屏启动图片路径 
-                        "landscape7" : "", //可选,字符串类型,分辨率1024x768,9.7/7.9英寸iPad/mini横屏启动图片路径
-                        "portrait-retina7" : "", //可选,字符串类型,分辨率1536x2048,9.7/7.9英寸iPad/mini高分屏竖屏图片路径
-                        "landscape-retina7" : "", //可选,字符串类型,分辨率2048x1536,9.7/7.9英寸iPad/mini高分屏横屏启动图片路径
-                        "portrait-1112h@2x" : "", //可选,字符串类型,分辨率1668x2224,10.5英寸iPad Pro竖屏启动图片路径
-                        "landscape-1112h@2x" : "", //可选,字符串类型,分辨率2224x1668,10.5英寸iPad Pro横屏启动图片路径
-                        "portrait-1194h@2x" : "", //可选,字符串类型,分辨率1668x2388,11英寸iPad Pro竖屏启动图片路径
-                        "landscape-1194h@2x" : "", //可选,字符串类型,分辨率2388x1668,11英寸iPad Pro横屏启动图片路径
-                        "portrait-1366h@2x" : "", //可选,字符串类型,分辨率2048x2732,12.9英寸iPad Pro竖屏启动图片路径
-                        "landscape-1366h@2x" : "" //可选,字符串类型,分辨率2732x2048,12.9英寸iPad Pro横屏启动图片路径
-                    }
-                },
-                "androidStyle" : "common", //可选,字符串类型,Android平台启动界面样式,可取值common、default
-                "android" : {
-                    //可选,JSON对象,Android平台启动图片配置, androidStyle值为default时生效
-                    "ldpi" : "", //可选,字符串类型,分辨率320x442,低密度屏幕启动图片路径,已废弃
-                    "mdpi" : "", //可选,字符串类型,分辨率240x282,中密度屏幕启动图片路径,已废弃
-                    "hdpi" : "", //可选,字符串类型,分辨率480x762,高密度屏幕启动图片路径
-                    "xhdpi" : "", //可选,字符串类型,分辨率720x1242,720P高密度屏幕启动图片路径
-                    "xxhdpi" : "" //可选,字符串类型,分辨率1080x1882,1080P高密度屏幕启动图片路径
-                }
-            },
-            "orientation" : [
-                //可选,字符串数组类型,应用支持的横竖屏,**已废弃,使用screenOrientation配置** 
-                "portrait-primary",
-                "portrait-secondary",
-                "landscape-primary",
-                "landscape-secondary"
-            ]
-        }
-    },
-    /* 快应用特有相关 */
-    "quickapp" : {},
-    /* 小程序特有相关 */
-    "mp-weixin" : {
-        "appid" : "wx001e2dc50bf532df",
-        "setting" : {
-            "urlCheck" : false
-        },
-        "usingComponents" : true,
-        "permission" : {
-            "scope.userLocation" : {
-                "desc" : "定位最近的门店"
-            }
-        },
-        "requiredPrivateInfos" : [ "getLocation", "chooseLocation" ]
-    },
-    "mp-alipay" : {
-        "usingComponents" : true
-    },
-    "mp-baidu" : {
-        "usingComponents" : true
-    },
-    "mp-toutiao" : {
-        "usingComponents" : true
-    },
-    "uniStatistics" : {
-        "enable" : false
-    },
-    "vueVersion" : "3",
-    "fallbackLocale" : "zh-Hans",
-    "h5" : {
-        "router" : {
-            "base" : "/h5/"
-        },
-        "sdkConfigs" : {
-            // 使用地图或位置相关功能必须填写其一
-            "maps" : {
-                "bmap" : {
-                    // 百度地图秘钥(HBuilderX 3.99+)http://lbsyun.baidu.com/apiconsole/key#/home
-                    "key" : "m1YRfvvQt9dPVNuPSieTEDgRhZkIznSn"
-                },
-                "qqmap" : {
-                    "key" : "OGABZ-Y5OCF-5UWJ5-N7DHH-VFIG7-DHFEB"
-                }
-            }
-        }
-    }
-}
-/* 模块配置 *//* 应用发布信息 *//* android打包配置 */
-

+ 0 - 2157
yshop/yshop-drink-uniapp/package-lock.json

@@ -1,2157 +0,0 @@
-{
-  "name": "yshop-miniapp",
-  "version": "3.1.1",
-  "lockfileVersion": 3,
-  "requires": true,
-  "packages": {
-    "": {
-      "name": "yshop-miniapp",
-      "version": "3.1.1",
-      "license": "ISC",
-      "dependencies": {
-        "@vant/area-data": "^1.5.0",
-        "add": "^2.0.6",
-        "flyio": "^0.6.14",
-        "jweixin-module": "^1.6.0",
-        "pinia": "^2.1.6",
-        "pinia-plugin-persistedstate": "^4.2.0",
-        "vant": "^4.6.2",
-        "weixin-js-sdk": "^1.6.3",
-        "yarn": "^1.22.19"
-      },
-      "devDependencies": {
-        "pinia-plugin-unistorage": "^0.1.2"
-      }
-    },
-    "node_modules/@ampproject/remapping": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.3.0.tgz",
-      "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
-      "dependencies": {
-        "@jridgewell/gen-mapping": "^0.3.5",
-        "@jridgewell/trace-mapping": "^0.3.24"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/@babel/code-frame": {
-      "version": "7.26.2",
-      "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.26.2.tgz",
-      "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
-      "dependencies": {
-        "@babel/helper-validator-identifier": "^7.25.9",
-        "js-tokens": "^4.0.0",
-        "picocolors": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/code-frame/node_modules/js-tokens": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz",
-      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-    },
-    "node_modules/@babel/compat-data": {
-      "version": "7.26.8",
-      "resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.26.8.tgz",
-      "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==",
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/core": {
-      "version": "7.26.9",
-      "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.26.9.tgz",
-      "integrity": "sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==",
-      "dependencies": {
-        "@ampproject/remapping": "^2.2.0",
-        "@babel/code-frame": "^7.26.2",
-        "@babel/generator": "^7.26.9",
-        "@babel/helper-compilation-targets": "^7.26.5",
-        "@babel/helper-module-transforms": "^7.26.0",
-        "@babel/helpers": "^7.26.9",
-        "@babel/parser": "^7.26.9",
-        "@babel/template": "^7.26.9",
-        "@babel/traverse": "^7.26.9",
-        "@babel/types": "^7.26.9",
-        "convert-source-map": "^2.0.0",
-        "debug": "^4.1.0",
-        "gensync": "^1.0.0-beta.2",
-        "json5": "^2.2.3",
-        "semver": "^6.3.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/babel"
-      }
-    },
-    "node_modules/@babel/core/node_modules/semver": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz",
-      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-      "bin": {
-        "semver": "bin/semver.js"
-      }
-    },
-    "node_modules/@babel/generator": {
-      "version": "7.26.9",
-      "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.26.9.tgz",
-      "integrity": "sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==",
-      "dependencies": {
-        "@babel/parser": "^7.26.9",
-        "@babel/types": "^7.26.9",
-        "@jridgewell/gen-mapping": "^0.3.5",
-        "@jridgewell/trace-mapping": "^0.3.25",
-        "jsesc": "^3.0.2"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-compilation-targets": {
-      "version": "7.26.5",
-      "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz",
-      "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==",
-      "dependencies": {
-        "@babel/compat-data": "^7.26.5",
-        "@babel/helper-validator-option": "^7.25.9",
-        "browserslist": "^4.24.0",
-        "lru-cache": "^5.1.1",
-        "semver": "^6.3.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz",
-      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-      "bin": {
-        "semver": "bin/semver.js"
-      }
-    },
-    "node_modules/@babel/helper-module-imports": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz",
-      "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==",
-      "dependencies": {
-        "@babel/traverse": "^7.25.9",
-        "@babel/types": "^7.25.9"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-module-transforms": {
-      "version": "7.26.0",
-      "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz",
-      "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==",
-      "dependencies": {
-        "@babel/helper-module-imports": "^7.25.9",
-        "@babel/helper-validator-identifier": "^7.25.9",
-        "@babel/traverse": "^7.25.9"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0"
-      }
-    },
-    "node_modules/@babel/helper-string-parser": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
-      "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-validator-identifier": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
-      "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-validator-option": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz",
-      "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==",
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helpers": {
-      "version": "7.26.9",
-      "resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.26.9.tgz",
-      "integrity": "sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==",
-      "dependencies": {
-        "@babel/template": "^7.26.9",
-        "@babel/types": "^7.26.9"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/parser": {
-      "version": "7.26.9",
-      "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.26.9.tgz",
-      "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==",
-      "dependencies": {
-        "@babel/types": "^7.26.9"
-      },
-      "bin": {
-        "parser": "bin/babel-parser.js"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/@babel/standalone": {
-      "version": "7.26.9",
-      "resolved": "https://registry.npmmirror.com/@babel/standalone/-/standalone-7.26.9.tgz",
-      "integrity": "sha512-UTeQKy0kzJwWRe55kT1uK4G9H6D0lS6G4207hCU/bDaOhA5t2aC0qHN6GmID0Axv3OFLNXm27NdqcWp+BXcGtA==",
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/template": {
-      "version": "7.26.9",
-      "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.26.9.tgz",
-      "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==",
-      "dependencies": {
-        "@babel/code-frame": "^7.26.2",
-        "@babel/parser": "^7.26.9",
-        "@babel/types": "^7.26.9"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/traverse": {
-      "version": "7.26.9",
-      "resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.26.9.tgz",
-      "integrity": "sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==",
-      "dependencies": {
-        "@babel/code-frame": "^7.26.2",
-        "@babel/generator": "^7.26.9",
-        "@babel/parser": "^7.26.9",
-        "@babel/template": "^7.26.9",
-        "@babel/types": "^7.26.9",
-        "debug": "^4.3.1",
-        "globals": "^11.1.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/types": {
-      "version": "7.26.9",
-      "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.26.9.tgz",
-      "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==",
-      "dependencies": {
-        "@babel/helper-string-parser": "^7.25.9",
-        "@babel/helper-validator-identifier": "^7.25.9"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@jridgewell/gen-mapping": {
-      "version": "0.3.8",
-      "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
-      "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
-      "dependencies": {
-        "@jridgewell/set-array": "^1.2.1",
-        "@jridgewell/sourcemap-codec": "^1.4.10",
-        "@jridgewell/trace-mapping": "^0.3.24"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/@jridgewell/resolve-uri": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
-      "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/@jridgewell/set-array": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.2.1.tgz",
-      "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/@jridgewell/sourcemap-codec": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
-      "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="
-    },
-    "node_modules/@jridgewell/trace-mapping": {
-      "version": "0.3.25",
-      "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
-      "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
-      "dependencies": {
-        "@jridgewell/resolve-uri": "^3.1.0",
-        "@jridgewell/sourcemap-codec": "^1.4.14"
-      }
-    },
-    "node_modules/@nodelib/fs.scandir": {
-      "version": "2.1.5",
-      "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
-      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
-      "dependencies": {
-        "@nodelib/fs.stat": "2.0.5",
-        "run-parallel": "^1.1.9"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/@nodelib/fs.stat": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
-      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/@nodelib/fs.walk": {
-      "version": "1.2.8",
-      "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
-      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
-      "dependencies": {
-        "@nodelib/fs.scandir": "2.1.5",
-        "fastq": "^1.6.0"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/@nuxt/kit": {
-      "version": "3.15.4",
-      "resolved": "https://registry.npmmirror.com/@nuxt/kit/-/kit-3.15.4.tgz",
-      "integrity": "sha512-dr7I7eZOoRLl4uxdxeL2dQsH0OrbEiVPIyBHnBpA4co24CBnoJoF+JINuP9l3PAM3IhUzc5JIVq3/YY3lEc3Hw==",
-      "dependencies": {
-        "c12": "^2.0.1",
-        "consola": "^3.4.0",
-        "defu": "^6.1.4",
-        "destr": "^2.0.3",
-        "globby": "^14.0.2",
-        "ignore": "^7.0.3",
-        "jiti": "^2.4.2",
-        "klona": "^2.0.6",
-        "knitwork": "^1.2.0",
-        "mlly": "^1.7.4",
-        "ohash": "^1.1.4",
-        "pathe": "^2.0.2",
-        "pkg-types": "^1.3.1",
-        "scule": "^1.3.0",
-        "semver": "^7.6.3",
-        "std-env": "^3.8.0",
-        "ufo": "^1.5.4",
-        "unctx": "^2.4.1",
-        "unimport": "^4.0.0",
-        "untyped": "^1.5.2"
-      },
-      "engines": {
-        "node": ">=18.12.0"
-      }
-    },
-    "node_modules/@sindresorhus/merge-streams": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmmirror.com/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz",
-      "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==",
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/@types/estree": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.6.tgz",
-      "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw=="
-    },
-    "node_modules/@vant/area-data": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmmirror.com/@vant/area-data/-/area-data-1.5.0.tgz",
-      "integrity": "sha512-SWmDhYmWiOgtAgtJqcW7N4XyGgrg/7l6t1+XSgt8BkPp2oOKO1ZUn8+46brLpT/gzRe/v8BtyTLmdBwMamrmQw=="
-    },
-    "node_modules/@vant/popperjs": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmmirror.com/@vant/popperjs/-/popperjs-1.3.0.tgz",
-      "integrity": "sha512-hB+czUG+aHtjhaEmCJDuXOep0YTZjdlRR+4MSmIFnkCQIxJaXLQdSsR90XWvAI2yvKUI7TCGqR8pQg2RtvkMHw=="
-    },
-    "node_modules/@vant/use": {
-      "version": "1.5.2",
-      "resolved": "https://registry.npmmirror.com/@vant/use/-/use-1.5.2.tgz",
-      "integrity": "sha512-CBK61iT568dCHUwFFsErGbW6/5tmrPnZJKGtcSy7Tjcrmws8Ku+YZo7IUFD9Xkj9MfSJ4pfhQ7pU2KouP5Cojg==",
-      "peerDependencies": {
-        "vue": "^3.0.0"
-      }
-    },
-    "node_modules/@vue/compiler-core": {
-      "version": "3.5.13",
-      "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.13.tgz",
-      "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==",
-      "peer": true,
-      "dependencies": {
-        "@babel/parser": "^7.25.3",
-        "@vue/shared": "3.5.13",
-        "entities": "^4.5.0",
-        "estree-walker": "^2.0.2",
-        "source-map-js": "^1.2.0"
-      }
-    },
-    "node_modules/@vue/compiler-core/node_modules/estree-walker": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
-      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
-      "peer": true
-    },
-    "node_modules/@vue/compiler-dom": {
-      "version": "3.5.13",
-      "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz",
-      "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==",
-      "peer": true,
-      "dependencies": {
-        "@vue/compiler-core": "3.5.13",
-        "@vue/shared": "3.5.13"
-      }
-    },
-    "node_modules/@vue/compiler-sfc": {
-      "version": "3.5.13",
-      "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz",
-      "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==",
-      "peer": true,
-      "dependencies": {
-        "@babel/parser": "^7.25.3",
-        "@vue/compiler-core": "3.5.13",
-        "@vue/compiler-dom": "3.5.13",
-        "@vue/compiler-ssr": "3.5.13",
-        "@vue/shared": "3.5.13",
-        "estree-walker": "^2.0.2",
-        "magic-string": "^0.30.11",
-        "postcss": "^8.4.48",
-        "source-map-js": "^1.2.0"
-      }
-    },
-    "node_modules/@vue/compiler-sfc/node_modules/estree-walker": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
-      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
-      "peer": true
-    },
-    "node_modules/@vue/compiler-ssr": {
-      "version": "3.5.13",
-      "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz",
-      "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==",
-      "peer": true,
-      "dependencies": {
-        "@vue/compiler-dom": "3.5.13",
-        "@vue/shared": "3.5.13"
-      }
-    },
-    "node_modules/@vue/devtools-api": {
-      "version": "6.6.4",
-      "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz",
-      "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g=="
-    },
-    "node_modules/@vue/reactivity": {
-      "version": "3.5.13",
-      "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.13.tgz",
-      "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==",
-      "peer": true,
-      "dependencies": {
-        "@vue/shared": "3.5.13"
-      }
-    },
-    "node_modules/@vue/runtime-core": {
-      "version": "3.5.13",
-      "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.13.tgz",
-      "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==",
-      "peer": true,
-      "dependencies": {
-        "@vue/reactivity": "3.5.13",
-        "@vue/shared": "3.5.13"
-      }
-    },
-    "node_modules/@vue/runtime-dom": {
-      "version": "3.5.13",
-      "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz",
-      "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==",
-      "peer": true,
-      "dependencies": {
-        "@vue/reactivity": "3.5.13",
-        "@vue/runtime-core": "3.5.13",
-        "@vue/shared": "3.5.13",
-        "csstype": "^3.1.3"
-      }
-    },
-    "node_modules/@vue/server-renderer": {
-      "version": "3.5.13",
-      "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.13.tgz",
-      "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==",
-      "peer": true,
-      "dependencies": {
-        "@vue/compiler-ssr": "3.5.13",
-        "@vue/shared": "3.5.13"
-      },
-      "peerDependencies": {
-        "vue": "3.5.13"
-      }
-    },
-    "node_modules/@vue/shared": {
-      "version": "3.5.13",
-      "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.13.tgz",
-      "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ=="
-    },
-    "node_modules/acorn": {
-      "version": "8.14.0",
-      "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.14.0.tgz",
-      "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
-      "bin": {
-        "acorn": "bin/acorn"
-      },
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
-    "node_modules/add": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmmirror.com/add/-/add-2.0.6.tgz",
-      "integrity": "sha512-j5QzrmsokwWWp6kUcJQySpbG+xfOBqqKnup3OIk1pz+kB/80SLorZ9V8zHFLO92Lcd+hbvq8bT+zOGoPkmBV0Q=="
-    },
-    "node_modules/ajv": {
-      "version": "6.12.6",
-      "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz",
-      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
-      "dependencies": {
-        "fast-deep-equal": "^3.1.1",
-        "fast-json-stable-stringify": "^2.0.0",
-        "json-schema-traverse": "^0.4.1",
-        "uri-js": "^4.2.2"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/epoberezkin"
-      }
-    },
-    "node_modules/asn1": {
-      "version": "0.2.6",
-      "resolved": "https://registry.npmmirror.com/asn1/-/asn1-0.2.6.tgz",
-      "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
-      "dependencies": {
-        "safer-buffer": "~2.1.0"
-      }
-    },
-    "node_modules/assert-plus": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmmirror.com/assert-plus/-/assert-plus-1.0.0.tgz",
-      "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
-      "engines": {
-        "node": ">=0.8"
-      }
-    },
-    "node_modules/asynckit": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz",
-      "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
-    },
-    "node_modules/aws-sign2": {
-      "version": "0.7.0",
-      "resolved": "https://registry.npmmirror.com/aws-sign2/-/aws-sign2-0.7.0.tgz",
-      "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==",
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/aws4": {
-      "version": "1.12.0",
-      "resolved": "https://registry.npmmirror.com/aws4/-/aws4-1.12.0.tgz",
-      "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg=="
-    },
-    "node_modules/bcrypt-pbkdf": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmmirror.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
-      "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
-      "dependencies": {
-        "tweetnacl": "^0.14.3"
-      }
-    },
-    "node_modules/braces": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz",
-      "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
-      "dependencies": {
-        "fill-range": "^7.1.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/browserslist": {
-      "version": "4.24.4",
-      "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.24.4.tgz",
-      "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==",
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/browserslist"
-        },
-        {
-          "type": "tidelift",
-          "url": "https://tidelift.com/funding/github/npm/browserslist"
-        },
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/ai"
-        }
-      ],
-      "dependencies": {
-        "caniuse-lite": "^1.0.30001688",
-        "electron-to-chromium": "^1.5.73",
-        "node-releases": "^2.0.19",
-        "update-browserslist-db": "^1.1.1"
-      },
-      "bin": {
-        "browserslist": "cli.js"
-      },
-      "engines": {
-        "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
-      }
-    },
-    "node_modules/c12": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmmirror.com/c12/-/c12-2.0.4.tgz",
-      "integrity": "sha512-3DbbhnFt0fKJHxU4tEUPmD1ahWE4PWPMomqfYsTJdrhpmEnRKJi3qSC4rO5U6E6zN1+pjBY7+z8fUmNRMaVKLw==",
-      "dependencies": {
-        "chokidar": "^4.0.3",
-        "confbox": "^0.1.8",
-        "defu": "^6.1.4",
-        "dotenv": "^16.4.7",
-        "giget": "^1.2.4",
-        "jiti": "^2.4.2",
-        "mlly": "^1.7.4",
-        "ohash": "^2.0.4",
-        "pathe": "^2.0.3",
-        "perfect-debounce": "^1.0.0",
-        "pkg-types": "^1.3.1",
-        "rc9": "^2.1.2"
-      },
-      "peerDependencies": {
-        "magicast": "^0.3.5"
-      },
-      "peerDependenciesMeta": {
-        "magicast": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/c12/node_modules/ohash": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmmirror.com/ohash/-/ohash-2.0.6.tgz",
-      "integrity": "sha512-y3n0xHnH5RhTNlu5KvoH1cPKNS3ewteDWjvUXkW5+X/iYYe914zGbixMCr//jEjwn/IgMjfOwDPIpDJ0+ld3tw=="
-    },
-    "node_modules/caniuse-lite": {
-      "version": "1.0.30001701",
-      "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001701.tgz",
-      "integrity": "sha512-faRs/AW3jA9nTwmJBSO1PQ6L/EOgsB5HMQQq4iCu5zhPgVVgO/pZRHlmatwijZKetFw8/Pr4q6dEN8sJuq8qTw==",
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/browserslist"
-        },
-        {
-          "type": "tidelift",
-          "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
-        },
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/ai"
-        }
-      ]
-    },
-    "node_modules/caseless": {
-      "version": "0.12.0",
-      "resolved": "https://registry.npmmirror.com/caseless/-/caseless-0.12.0.tgz",
-      "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
-    },
-    "node_modules/chokidar": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-4.0.3.tgz",
-      "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
-      "dependencies": {
-        "readdirp": "^4.0.1"
-      },
-      "engines": {
-        "node": ">= 14.16.0"
-      },
-      "funding": {
-        "url": "https://paulmillr.com/funding/"
-      }
-    },
-    "node_modules/chownr": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmmirror.com/chownr/-/chownr-2.0.0.tgz",
-      "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/citty": {
-      "version": "0.1.6",
-      "resolved": "https://registry.npmmirror.com/citty/-/citty-0.1.6.tgz",
-      "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==",
-      "dependencies": {
-        "consola": "^3.2.3"
-      }
-    },
-    "node_modules/combined-stream": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz",
-      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
-      "dependencies": {
-        "delayed-stream": "~1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/confbox": {
-      "version": "0.1.8",
-      "resolved": "https://registry.npmmirror.com/confbox/-/confbox-0.1.8.tgz",
-      "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="
-    },
-    "node_modules/consola": {
-      "version": "3.4.0",
-      "resolved": "https://registry.npmmirror.com/consola/-/consola-3.4.0.tgz",
-      "integrity": "sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==",
-      "engines": {
-        "node": "^14.18.0 || >=16.10.0"
-      }
-    },
-    "node_modules/convert-source-map": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz",
-      "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="
-    },
-    "node_modules/core-util-is": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.2.tgz",
-      "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="
-    },
-    "node_modules/csstype": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz",
-      "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
-      "peer": true
-    },
-    "node_modules/dashdash": {
-      "version": "1.14.1",
-      "resolved": "https://registry.npmmirror.com/dashdash/-/dashdash-1.14.1.tgz",
-      "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
-      "dependencies": {
-        "assert-plus": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10"
-      }
-    },
-    "node_modules/debug": {
-      "version": "4.4.0",
-      "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.0.tgz",
-      "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
-      "dependencies": {
-        "ms": "^2.1.3"
-      },
-      "engines": {
-        "node": ">=6.0"
-      },
-      "peerDependenciesMeta": {
-        "supports-color": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/deep-pick-omit": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmmirror.com/deep-pick-omit/-/deep-pick-omit-1.2.1.tgz",
-      "integrity": "sha512-2J6Kc/m3irCeqVG42T+SaUMesaK7oGWaedGnQQK/+O0gYc+2SP5bKh/KKTE7d7SJ+GCA9UUE1GRzh6oDe0EnGw=="
-    },
-    "node_modules/defu": {
-      "version": "6.1.4",
-      "resolved": "https://registry.npmmirror.com/defu/-/defu-6.1.4.tgz",
-      "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="
-    },
-    "node_modules/delayed-stream": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz",
-      "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
-    "node_modules/destr": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmmirror.com/destr/-/destr-2.0.3.tgz",
-      "integrity": "sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ=="
-    },
-    "node_modules/dotenv": {
-      "version": "16.4.7",
-      "resolved": "https://registry.npmmirror.com/dotenv/-/dotenv-16.4.7.tgz",
-      "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==",
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://dotenvx.com"
-      }
-    },
-    "node_modules/ecc-jsbn": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmmirror.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
-      "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
-      "dependencies": {
-        "jsbn": "~0.1.0",
-        "safer-buffer": "^2.1.0"
-      }
-    },
-    "node_modules/electron-to-chromium": {
-      "version": "1.5.109",
-      "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.109.tgz",
-      "integrity": "sha512-AidaH9JETVRr9DIPGfp1kAarm/W6hRJTPuCnkF+2MqhF4KaAgRIcBc8nvjk+YMXZhwfISof/7WG29eS4iGxQLQ=="
-    },
-    "node_modules/entities": {
-      "version": "4.5.0",
-      "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz",
-      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
-      "peer": true,
-      "engines": {
-        "node": ">=0.12"
-      },
-      "funding": {
-        "url": "https://github.com/fb55/entities?sponsor=1"
-      }
-    },
-    "node_modules/escalade": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz",
-      "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/escape-string-regexp": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
-      "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/estree-walker": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-3.0.3.tgz",
-      "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
-      "dependencies": {
-        "@types/estree": "^1.0.0"
-      }
-    },
-    "node_modules/extend": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz",
-      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
-    },
-    "node_modules/extsprintf": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmmirror.com/extsprintf/-/extsprintf-1.3.0.tgz",
-      "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==",
-      "engines": [
-        "node >=0.6.0"
-      ]
-    },
-    "node_modules/fast-deep-equal": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
-      "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
-    },
-    "node_modules/fast-glob": {
-      "version": "3.3.3",
-      "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.3.tgz",
-      "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
-      "dependencies": {
-        "@nodelib/fs.stat": "^2.0.2",
-        "@nodelib/fs.walk": "^1.2.3",
-        "glob-parent": "^5.1.2",
-        "merge2": "^1.3.0",
-        "micromatch": "^4.0.8"
-      },
-      "engines": {
-        "node": ">=8.6.0"
-      }
-    },
-    "node_modules/fast-json-stable-stringify": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
-      "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
-    },
-    "node_modules/fastq": {
-      "version": "1.19.1",
-      "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.19.1.tgz",
-      "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
-      "dependencies": {
-        "reusify": "^1.0.4"
-      }
-    },
-    "node_modules/fill-range": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz",
-      "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
-      "dependencies": {
-        "to-regex-range": "^5.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/flyio": {
-      "version": "0.6.14",
-      "resolved": "https://registry.npmmirror.com/flyio/-/flyio-0.6.14.tgz",
-      "integrity": "sha512-RE2OXE1ZZmcXOKb0jCtGyquHDxpAqHg17CZ8lmQKRfl3x1kP+NBpaQDx4WgN7DNpLJjFnspTzTEQpwRGg6/xaA==",
-      "dependencies": {
-        "request": "^2.85.0"
-      }
-    },
-    "node_modules/forever-agent": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmmirror.com/forever-agent/-/forever-agent-0.6.1.tgz",
-      "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==",
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/form-data": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmmirror.com/form-data/-/form-data-2.3.3.tgz",
-      "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
-      "dependencies": {
-        "asynckit": "^0.4.0",
-        "combined-stream": "^1.0.6",
-        "mime-types": "^2.1.12"
-      },
-      "engines": {
-        "node": ">= 0.12"
-      }
-    },
-    "node_modules/fs-minipass": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmmirror.com/fs-minipass/-/fs-minipass-2.1.0.tgz",
-      "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
-      "dependencies": {
-        "minipass": "^3.0.0"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/fs-minipass/node_modules/minipass": {
-      "version": "3.3.6",
-      "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.3.6.tgz",
-      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
-      "dependencies": {
-        "yallist": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/gensync": {
-      "version": "1.0.0-beta.2",
-      "resolved": "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz",
-      "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/getpass": {
-      "version": "0.1.7",
-      "resolved": "https://registry.npmmirror.com/getpass/-/getpass-0.1.7.tgz",
-      "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
-      "dependencies": {
-        "assert-plus": "^1.0.0"
-      }
-    },
-    "node_modules/giget": {
-      "version": "1.2.5",
-      "resolved": "https://registry.npmmirror.com/giget/-/giget-1.2.5.tgz",
-      "integrity": "sha512-r1ekGw/Bgpi3HLV3h1MRBIlSAdHoIMklpaQ3OQLFcRw9PwAj2rqigvIbg+dBUI51OxVI2jsEtDywDBjSiuf7Ug==",
-      "dependencies": {
-        "citty": "^0.1.6",
-        "consola": "^3.4.0",
-        "defu": "^6.1.4",
-        "node-fetch-native": "^1.6.6",
-        "nypm": "^0.5.4",
-        "pathe": "^2.0.3",
-        "tar": "^6.2.1"
-      },
-      "bin": {
-        "giget": "dist/cli.mjs"
-      }
-    },
-    "node_modules/glob-parent": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz",
-      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
-      "dependencies": {
-        "is-glob": "^4.0.1"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/globals": {
-      "version": "11.12.0",
-      "resolved": "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz",
-      "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/globby": {
-      "version": "14.1.0",
-      "resolved": "https://registry.npmmirror.com/globby/-/globby-14.1.0.tgz",
-      "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==",
-      "dependencies": {
-        "@sindresorhus/merge-streams": "^2.1.0",
-        "fast-glob": "^3.3.3",
-        "ignore": "^7.0.3",
-        "path-type": "^6.0.0",
-        "slash": "^5.1.0",
-        "unicorn-magic": "^0.3.0"
-      },
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/har-schema": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmmirror.com/har-schema/-/har-schema-2.0.0.tgz",
-      "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==",
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/har-validator": {
-      "version": "5.1.5",
-      "resolved": "https://registry.npmmirror.com/har-validator/-/har-validator-5.1.5.tgz",
-      "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
-      "deprecated": "this library is no longer supported",
-      "dependencies": {
-        "ajv": "^6.12.3",
-        "har-schema": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/http-signature": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmmirror.com/http-signature/-/http-signature-1.2.0.tgz",
-      "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
-      "dependencies": {
-        "assert-plus": "^1.0.0",
-        "jsprim": "^1.2.2",
-        "sshpk": "^1.7.0"
-      },
-      "engines": {
-        "node": ">=0.8",
-        "npm": ">=1.3.7"
-      }
-    },
-    "node_modules/ignore": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmmirror.com/ignore/-/ignore-7.0.3.tgz",
-      "integrity": "sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==",
-      "engines": {
-        "node": ">= 4"
-      }
-    },
-    "node_modules/is-extglob": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz",
-      "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-glob": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz",
-      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
-      "dependencies": {
-        "is-extglob": "^2.1.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-number": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz",
-      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
-      "engines": {
-        "node": ">=0.12.0"
-      }
-    },
-    "node_modules/is-typedarray": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmmirror.com/is-typedarray/-/is-typedarray-1.0.0.tgz",
-      "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="
-    },
-    "node_modules/isstream": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmmirror.com/isstream/-/isstream-0.1.2.tgz",
-      "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g=="
-    },
-    "node_modules/jiti": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmmirror.com/jiti/-/jiti-2.4.2.tgz",
-      "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==",
-      "bin": {
-        "jiti": "lib/jiti-cli.mjs"
-      }
-    },
-    "node_modules/js-tokens": {
-      "version": "9.0.1",
-      "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-9.0.1.tgz",
-      "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="
-    },
-    "node_modules/jsbn": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmmirror.com/jsbn/-/jsbn-0.1.1.tgz",
-      "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="
-    },
-    "node_modules/jsesc": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-3.1.0.tgz",
-      "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
-      "bin": {
-        "jsesc": "bin/jsesc"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/json-schema": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmmirror.com/json-schema/-/json-schema-0.4.0.tgz",
-      "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
-    },
-    "node_modules/json-schema-traverse": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
-    },
-    "node_modules/json-stringify-safe": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmmirror.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
-      "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="
-    },
-    "node_modules/json5": {
-      "version": "2.2.3",
-      "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz",
-      "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
-      "bin": {
-        "json5": "lib/cli.js"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/jsprim": {
-      "version": "1.4.2",
-      "resolved": "https://registry.npmmirror.com/jsprim/-/jsprim-1.4.2.tgz",
-      "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
-      "dependencies": {
-        "assert-plus": "1.0.0",
-        "extsprintf": "1.3.0",
-        "json-schema": "0.4.0",
-        "verror": "1.10.0"
-      },
-      "engines": {
-        "node": ">=0.6.0"
-      }
-    },
-    "node_modules/jweixin-module": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npmmirror.com/jweixin-module/-/jweixin-module-1.6.0.tgz",
-      "integrity": "sha512-dGk9cf+ipipHmtzYmKZs5B2toX+p4hLyllGLF6xuC8t+B05oYxd8fYoaRz0T30U2n3RUv8a4iwvjhA+OcYz52w=="
-    },
-    "node_modules/klona": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmmirror.com/klona/-/klona-2.0.6.tgz",
-      "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==",
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/knitwork": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmmirror.com/knitwork/-/knitwork-1.2.0.tgz",
-      "integrity": "sha512-xYSH7AvuQ6nXkq42x0v5S8/Iry+cfulBz/DJQzhIyESdLD7425jXsPy4vn5cCXU+HhRN2kVw51Vd1K6/By4BQg=="
-    },
-    "node_modules/local-pkg": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-1.1.0.tgz",
-      "integrity": "sha512-xbZBuX6gYIWrlLmZG43aAVer4ocntYO09vPy9lxd6Ns8DnR4U7N+IIeDkubinqFOHHzoMlPxTxwo0jhE7oYjAw==",
-      "dependencies": {
-        "mlly": "^1.7.4",
-        "pkg-types": "^1.3.1",
-        "quansync": "^0.2.1"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/antfu"
-      }
-    },
-    "node_modules/lru-cache": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz",
-      "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
-      "dependencies": {
-        "yallist": "^3.0.2"
-      }
-    },
-    "node_modules/lru-cache/node_modules/yallist": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz",
-      "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
-    },
-    "node_modules/magic-string": {
-      "version": "0.30.17",
-      "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.17.tgz",
-      "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==",
-      "dependencies": {
-        "@jridgewell/sourcemap-codec": "^1.5.0"
-      }
-    },
-    "node_modules/merge2": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz",
-      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/micromatch": {
-      "version": "4.0.8",
-      "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz",
-      "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
-      "dependencies": {
-        "braces": "^3.0.3",
-        "picomatch": "^2.3.1"
-      },
-      "engines": {
-        "node": ">=8.6"
-      }
-    },
-    "node_modules/mime-db": {
-      "version": "1.52.0",
-      "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",
-      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/mime-types": {
-      "version": "2.1.35",
-      "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz",
-      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
-      "dependencies": {
-        "mime-db": "1.52.0"
-      },
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/minipass": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmmirror.com/minipass/-/minipass-5.0.0.tgz",
-      "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/minizlib": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmmirror.com/minizlib/-/minizlib-2.1.2.tgz",
-      "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
-      "dependencies": {
-        "minipass": "^3.0.0",
-        "yallist": "^4.0.0"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/minizlib/node_modules/minipass": {
-      "version": "3.3.6",
-      "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.3.6.tgz",
-      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
-      "dependencies": {
-        "yallist": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/mkdirp": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-1.0.4.tgz",
-      "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
-      "bin": {
-        "mkdirp": "bin/cmd.js"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/mlly": {
-      "version": "1.7.4",
-      "resolved": "https://registry.npmmirror.com/mlly/-/mlly-1.7.4.tgz",
-      "integrity": "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==",
-      "dependencies": {
-        "acorn": "^8.14.0",
-        "pathe": "^2.0.1",
-        "pkg-types": "^1.3.0",
-        "ufo": "^1.5.4"
-      }
-    },
-    "node_modules/ms": {
-      "version": "2.1.3",
-      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz",
-      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
-    },
-    "node_modules/nanoid": {
-      "version": "3.3.8",
-      "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.8.tgz",
-      "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==",
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/ai"
-        }
-      ],
-      "peer": true,
-      "bin": {
-        "nanoid": "bin/nanoid.cjs"
-      },
-      "engines": {
-        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
-      }
-    },
-    "node_modules/node-fetch-native": {
-      "version": "1.6.6",
-      "resolved": "https://registry.npmmirror.com/node-fetch-native/-/node-fetch-native-1.6.6.tgz",
-      "integrity": "sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ=="
-    },
-    "node_modules/node-releases": {
-      "version": "2.0.19",
-      "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.19.tgz",
-      "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw=="
-    },
-    "node_modules/nypm": {
-      "version": "0.5.4",
-      "resolved": "https://registry.npmmirror.com/nypm/-/nypm-0.5.4.tgz",
-      "integrity": "sha512-X0SNNrZiGU8/e/zAB7sCTtdxWTMSIO73q+xuKgglm2Yvzwlo8UoC5FNySQFCvl84uPaeADkqHUZUkWy4aH4xOA==",
-      "dependencies": {
-        "citty": "^0.1.6",
-        "consola": "^3.4.0",
-        "pathe": "^2.0.3",
-        "pkg-types": "^1.3.1",
-        "tinyexec": "^0.3.2",
-        "ufo": "^1.5.4"
-      },
-      "bin": {
-        "nypm": "dist/cli.mjs"
-      },
-      "engines": {
-        "node": "^14.16.0 || >=16.10.0"
-      }
-    },
-    "node_modules/oauth-sign": {
-      "version": "0.9.0",
-      "resolved": "https://registry.npmmirror.com/oauth-sign/-/oauth-sign-0.9.0.tgz",
-      "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/ohash": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmmirror.com/ohash/-/ohash-1.1.4.tgz",
-      "integrity": "sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g=="
-    },
-    "node_modules/path-type": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmmirror.com/path-type/-/path-type-6.0.0.tgz",
-      "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==",
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/pathe": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmmirror.com/pathe/-/pathe-2.0.3.tgz",
-      "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="
-    },
-    "node_modules/perfect-debounce": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmmirror.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz",
-      "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="
-    },
-    "node_modules/performance-now": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmmirror.com/performance-now/-/performance-now-2.1.0.tgz",
-      "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="
-    },
-    "node_modules/picocolors": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz",
-      "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
-    },
-    "node_modules/picomatch": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz",
-      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
-      "engines": {
-        "node": ">=8.6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/jonschlinkert"
-      }
-    },
-    "node_modules/pinia": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmmirror.com/pinia/-/pinia-2.3.1.tgz",
-      "integrity": "sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==",
-      "dependencies": {
-        "@vue/devtools-api": "^6.6.3",
-        "vue-demi": "^0.14.10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/posva"
-      },
-      "peerDependencies": {
-        "typescript": ">=4.4.4",
-        "vue": "^2.7.0 || ^3.5.11"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/pinia-plugin-persistedstate": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmmirror.com/pinia-plugin-persistedstate/-/pinia-plugin-persistedstate-4.2.0.tgz",
-      "integrity": "sha512-3buhA7ac+ssbOIx3VRCC8oHkoFwhDM9oHRCjo7nj+O8WUqnW+jRqh7eYT5eS/DNa3H28zp3dYf/nd/Vc8zj8eQ==",
-      "dependencies": {
-        "@nuxt/kit": "^3.14.1592",
-        "deep-pick-omit": "^1.2.1",
-        "defu": "^6.1.4",
-        "destr": "^2.0.3"
-      },
-      "peerDependencies": {
-        "@pinia/nuxt": ">=0.9.0",
-        "pinia": ">=2.3.0"
-      },
-      "peerDependenciesMeta": {
-        "@pinia/nuxt": {
-          "optional": true
-        },
-        "pinia": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/pinia-plugin-unistorage": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmmirror.com/pinia-plugin-unistorage/-/pinia-plugin-unistorage-0.1.2.tgz",
-      "integrity": "sha512-WXit2cGnm5rG6CDTcLSLehNWhyJS/Yq7WEeeXAapZbCnqoPJxlszqg7rT8S+OP47az0h5nlajGo+LuyMxUQ2uw==",
-      "dev": true
-    },
-    "node_modules/pkg-types": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmmirror.com/pkg-types/-/pkg-types-1.3.1.tgz",
-      "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==",
-      "dependencies": {
-        "confbox": "^0.1.8",
-        "mlly": "^1.7.4",
-        "pathe": "^2.0.1"
-      }
-    },
-    "node_modules/postcss": {
-      "version": "8.5.3",
-      "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.3.tgz",
-      "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==",
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/postcss/"
-        },
-        {
-          "type": "tidelift",
-          "url": "https://tidelift.com/funding/github/npm/postcss"
-        },
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/ai"
-        }
-      ],
-      "peer": true,
-      "dependencies": {
-        "nanoid": "^3.3.8",
-        "picocolors": "^1.1.1",
-        "source-map-js": "^1.2.1"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14"
-      }
-    },
-    "node_modules/psl": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmmirror.com/psl/-/psl-1.9.0.tgz",
-      "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag=="
-    },
-    "node_modules/punycode": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.0.tgz",
-      "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/qs": {
-      "version": "6.5.3",
-      "resolved": "https://registry.npmmirror.com/qs/-/qs-6.5.3.tgz",
-      "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==",
-      "engines": {
-        "node": ">=0.6"
-      }
-    },
-    "node_modules/quansync": {
-      "version": "0.2.4",
-      "resolved": "https://registry.npmmirror.com/quansync/-/quansync-0.2.4.tgz",
-      "integrity": "sha512-1p13bC37Po/fOAixPZkZOLttIc51bU0oPYPdL7EDLmMxJ1p3lCryAtgMmVxmI3k3g0OZRKN+Cf1etcFLOwD3Vg==",
-      "funding": [
-        {
-          "type": "individual",
-          "url": "https://github.com/sponsors/antfu"
-        },
-        {
-          "type": "individual",
-          "url": "https://github.com/sponsors/sxzz"
-        }
-      ]
-    },
-    "node_modules/queue-microtask": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz",
-      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ]
-    },
-    "node_modules/rc9": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmmirror.com/rc9/-/rc9-2.1.2.tgz",
-      "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==",
-      "dependencies": {
-        "defu": "^6.1.4",
-        "destr": "^2.0.3"
-      }
-    },
-    "node_modules/readdirp": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-4.1.2.tgz",
-      "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
-      "engines": {
-        "node": ">= 14.18.0"
-      },
-      "funding": {
-        "type": "individual",
-        "url": "https://paulmillr.com/funding/"
-      }
-    },
-    "node_modules/request": {
-      "version": "2.88.2",
-      "resolved": "https://registry.npmmirror.com/request/-/request-2.88.2.tgz",
-      "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
-      "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142",
-      "dependencies": {
-        "aws-sign2": "~0.7.0",
-        "aws4": "^1.8.0",
-        "caseless": "~0.12.0",
-        "combined-stream": "~1.0.6",
-        "extend": "~3.0.2",
-        "forever-agent": "~0.6.1",
-        "form-data": "~2.3.2",
-        "har-validator": "~5.1.3",
-        "http-signature": "~1.2.0",
-        "is-typedarray": "~1.0.0",
-        "isstream": "~0.1.2",
-        "json-stringify-safe": "~5.0.1",
-        "mime-types": "~2.1.19",
-        "oauth-sign": "~0.9.0",
-        "performance-now": "^2.1.0",
-        "qs": "~6.5.2",
-        "safe-buffer": "^5.1.2",
-        "tough-cookie": "~2.5.0",
-        "tunnel-agent": "^0.6.0",
-        "uuid": "^3.3.2"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/reusify": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.1.0.tgz",
-      "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
-      "engines": {
-        "iojs": ">=1.0.0",
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/run-parallel": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz",
-      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ],
-      "dependencies": {
-        "queue-microtask": "^1.2.2"
-      }
-    },
-    "node_modules/safe-buffer": {
-      "version": "5.2.1",
-      "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz",
-      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ]
-    },
-    "node_modules/safer-buffer": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz",
-      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
-    },
-    "node_modules/scule": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmmirror.com/scule/-/scule-1.3.0.tgz",
-      "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g=="
-    },
-    "node_modules/semver": {
-      "version": "7.7.1",
-      "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.1.tgz",
-      "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
-      "bin": {
-        "semver": "bin/semver.js"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/slash": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmmirror.com/slash/-/slash-5.1.0.tgz",
-      "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==",
-      "engines": {
-        "node": ">=14.16"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/source-map-js": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz",
-      "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
-      "peer": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/sshpk": {
-      "version": "1.17.0",
-      "resolved": "https://registry.npmmirror.com/sshpk/-/sshpk-1.17.0.tgz",
-      "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==",
-      "dependencies": {
-        "asn1": "~0.2.3",
-        "assert-plus": "^1.0.0",
-        "bcrypt-pbkdf": "^1.0.0",
-        "dashdash": "^1.12.0",
-        "ecc-jsbn": "~0.1.1",
-        "getpass": "^0.1.1",
-        "jsbn": "~0.1.0",
-        "safer-buffer": "^2.0.2",
-        "tweetnacl": "~0.14.0"
-      },
-      "bin": {
-        "sshpk-conv": "bin/sshpk-conv",
-        "sshpk-sign": "bin/sshpk-sign",
-        "sshpk-verify": "bin/sshpk-verify"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/std-env": {
-      "version": "3.8.0",
-      "resolved": "https://registry.npmmirror.com/std-env/-/std-env-3.8.0.tgz",
-      "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w=="
-    },
-    "node_modules/strip-literal": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmmirror.com/strip-literal/-/strip-literal-3.0.0.tgz",
-      "integrity": "sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==",
-      "dependencies": {
-        "js-tokens": "^9.0.1"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/antfu"
-      }
-    },
-    "node_modules/tar": {
-      "version": "6.2.1",
-      "resolved": "https://registry.npmmirror.com/tar/-/tar-6.2.1.tgz",
-      "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
-      "dependencies": {
-        "chownr": "^2.0.0",
-        "fs-minipass": "^2.0.0",
-        "minipass": "^5.0.0",
-        "minizlib": "^2.1.1",
-        "mkdirp": "^1.0.3",
-        "yallist": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/tinyexec": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmmirror.com/tinyexec/-/tinyexec-0.3.2.tgz",
-      "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="
-    },
-    "node_modules/tinyglobby": {
-      "version": "0.2.12",
-      "resolved": "https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.12.tgz",
-      "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==",
-      "dependencies": {
-        "fdir": "^6.4.3",
-        "picomatch": "^4.0.2"
-      },
-      "engines": {
-        "node": ">=12.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/SuperchupuDev"
-      }
-    },
-    "node_modules/tinyglobby/node_modules/fdir": {
-      "version": "6.4.3",
-      "resolved": "https://registry.npmmirror.com/fdir/-/fdir-6.4.3.tgz",
-      "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==",
-      "peerDependencies": {
-        "picomatch": "^3 || ^4"
-      },
-      "peerDependenciesMeta": {
-        "picomatch": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/tinyglobby/node_modules/picomatch": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.2.tgz",
-      "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/jonschlinkert"
-      }
-    },
-    "node_modules/to-regex-range": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz",
-      "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
-      "dependencies": {
-        "is-number": "^7.0.0"
-      },
-      "engines": {
-        "node": ">=8.0"
-      }
-    },
-    "node_modules/tough-cookie": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmmirror.com/tough-cookie/-/tough-cookie-2.5.0.tgz",
-      "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
-      "dependencies": {
-        "psl": "^1.1.28",
-        "punycode": "^2.1.1"
-      },
-      "engines": {
-        "node": ">=0.8"
-      }
-    },
-    "node_modules/tunnel-agent": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmmirror.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
-      "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
-      "dependencies": {
-        "safe-buffer": "^5.0.1"
-      },
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/tweetnacl": {
-      "version": "0.14.5",
-      "resolved": "https://registry.npmmirror.com/tweetnacl/-/tweetnacl-0.14.5.tgz",
-      "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA=="
-    },
-    "node_modules/ufo": {
-      "version": "1.5.4",
-      "resolved": "https://registry.npmmirror.com/ufo/-/ufo-1.5.4.tgz",
-      "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ=="
-    },
-    "node_modules/unctx": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmmirror.com/unctx/-/unctx-2.4.1.tgz",
-      "integrity": "sha512-AbaYw0Nm4mK4qjhns67C+kgxR2YWiwlDBPzxrN8h8C6VtAdCgditAY5Dezu3IJy4XVqAnbrXt9oQJvsn3fyozg==",
-      "dependencies": {
-        "acorn": "^8.14.0",
-        "estree-walker": "^3.0.3",
-        "magic-string": "^0.30.17",
-        "unplugin": "^2.1.0"
-      }
-    },
-    "node_modules/unicorn-magic": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmmirror.com/unicorn-magic/-/unicorn-magic-0.3.0.tgz",
-      "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==",
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/unimport": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmmirror.com/unimport/-/unimport-4.1.2.tgz",
-      "integrity": "sha512-oVUL7PSlyVV3QRhsdcyYEMaDX8HJyS/CnUonEJTYA3//bWO+o/4gG8F7auGWWWkrrxBQBYOO8DKe+C53ktpRXw==",
-      "dependencies": {
-        "acorn": "^8.14.0",
-        "escape-string-regexp": "^5.0.0",
-        "estree-walker": "^3.0.3",
-        "local-pkg": "^1.0.0",
-        "magic-string": "^0.30.17",
-        "mlly": "^1.7.4",
-        "pathe": "^2.0.3",
-        "picomatch": "^4.0.2",
-        "pkg-types": "^1.3.1",
-        "scule": "^1.3.0",
-        "strip-literal": "^3.0.0",
-        "tinyglobby": "^0.2.11",
-        "unplugin": "^2.2.0",
-        "unplugin-utils": "^0.2.4"
-      },
-      "engines": {
-        "node": ">=18.12.0"
-      }
-    },
-    "node_modules/unimport/node_modules/picomatch": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.2.tgz",
-      "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/jonschlinkert"
-      }
-    },
-    "node_modules/unplugin": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmmirror.com/unplugin/-/unplugin-2.2.0.tgz",
-      "integrity": "sha512-m1ekpSwuOT5hxkJeZGRxO7gXbXT3gF26NjQ7GdVHoLoF8/nopLcd/QfPigpCy7i51oFHiRJg/CyHhj4vs2+KGw==",
-      "dependencies": {
-        "acorn": "^8.14.0",
-        "webpack-virtual-modules": "^0.6.2"
-      },
-      "engines": {
-        "node": ">=18.12.0"
-      }
-    },
-    "node_modules/unplugin-utils": {
-      "version": "0.2.4",
-      "resolved": "https://registry.npmmirror.com/unplugin-utils/-/unplugin-utils-0.2.4.tgz",
-      "integrity": "sha512-8U/MtpkPkkk3Atewj1+RcKIjb5WBimZ/WSLhhR3w6SsIj8XJuKTacSP8g+2JhfSGw0Cb125Y+2zA/IzJZDVbhA==",
-      "dependencies": {
-        "pathe": "^2.0.2",
-        "picomatch": "^4.0.2"
-      },
-      "engines": {
-        "node": ">=18.12.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sxzz"
-      }
-    },
-    "node_modules/unplugin-utils/node_modules/picomatch": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.2.tgz",
-      "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/jonschlinkert"
-      }
-    },
-    "node_modules/untyped": {
-      "version": "1.5.2",
-      "resolved": "https://registry.npmmirror.com/untyped/-/untyped-1.5.2.tgz",
-      "integrity": "sha512-eL/8PlhLcMmlMDtNPKhyyz9kEBDS3Uk4yMu/ewlkT2WFbtzScjHWPJLdQLmaGPUKjXzwe9MumOtOgc4Fro96Kg==",
-      "dependencies": {
-        "@babel/core": "^7.26.0",
-        "@babel/standalone": "^7.26.4",
-        "@babel/types": "^7.26.3",
-        "citty": "^0.1.6",
-        "defu": "^6.1.4",
-        "jiti": "^2.4.1",
-        "knitwork": "^1.2.0",
-        "scule": "^1.3.0"
-      },
-      "bin": {
-        "untyped": "dist/cli.mjs"
-      }
-    },
-    "node_modules/update-browserslist-db": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
-      "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/browserslist"
-        },
-        {
-          "type": "tidelift",
-          "url": "https://tidelift.com/funding/github/npm/browserslist"
-        },
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/ai"
-        }
-      ],
-      "dependencies": {
-        "escalade": "^3.2.0",
-        "picocolors": "^1.1.1"
-      },
-      "bin": {
-        "update-browserslist-db": "cli.js"
-      },
-      "peerDependencies": {
-        "browserslist": ">= 4.21.0"
-      }
-    },
-    "node_modules/uri-js": {
-      "version": "4.4.1",
-      "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz",
-      "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
-      "dependencies": {
-        "punycode": "^2.1.0"
-      }
-    },
-    "node_modules/uuid": {
-      "version": "3.4.0",
-      "resolved": "https://registry.npmmirror.com/uuid/-/uuid-3.4.0.tgz",
-      "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
-      "deprecated": "Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.",
-      "bin": {
-        "uuid": "bin/uuid"
-      }
-    },
-    "node_modules/vant": {
-      "version": "4.6.2",
-      "resolved": "https://registry.npmmirror.com/vant/-/vant-4.6.2.tgz",
-      "integrity": "sha512-6EHCCAGM5a9VVzpBg/wZNPDFmJ8T1a4k29DPNcEMW3X670awW3rnD7+/x3dw+bE17JhhSg49V/+fQwBP2iQkAg==",
-      "dependencies": {
-        "@vant/popperjs": "^1.3.0",
-        "@vant/use": "^1.5.1",
-        "@vue/shared": "^3.0.0"
-      },
-      "peerDependencies": {
-        "vue": "^3.0.0"
-      }
-    },
-    "node_modules/verror": {
-      "version": "1.10.0",
-      "resolved": "https://registry.npmmirror.com/verror/-/verror-1.10.0.tgz",
-      "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
-      "engines": [
-        "node >=0.6.0"
-      ],
-      "dependencies": {
-        "assert-plus": "^1.0.0",
-        "core-util-is": "1.0.2",
-        "extsprintf": "^1.2.0"
-      }
-    },
-    "node_modules/verror/node_modules/extsprintf": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmmirror.com/extsprintf/-/extsprintf-1.4.1.tgz",
-      "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==",
-      "engines": [
-        "node >=0.6.0"
-      ]
-    },
-    "node_modules/vue": {
-      "version": "3.5.13",
-      "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.13.tgz",
-      "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==",
-      "peer": true,
-      "dependencies": {
-        "@vue/compiler-dom": "3.5.13",
-        "@vue/compiler-sfc": "3.5.13",
-        "@vue/runtime-dom": "3.5.13",
-        "@vue/server-renderer": "3.5.13",
-        "@vue/shared": "3.5.13"
-      },
-      "peerDependencies": {
-        "typescript": "*"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/vue-demi": {
-      "version": "0.14.10",
-      "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz",
-      "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
-      "hasInstallScript": true,
-      "bin": {
-        "vue-demi-fix": "bin/vue-demi-fix.js",
-        "vue-demi-switch": "bin/vue-demi-switch.js"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/antfu"
-      },
-      "peerDependencies": {
-        "@vue/composition-api": "^1.0.0-rc.1",
-        "vue": "^3.0.0-0 || ^2.6.0"
-      },
-      "peerDependenciesMeta": {
-        "@vue/composition-api": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/webpack-virtual-modules": {
-      "version": "0.6.2",
-      "resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz",
-      "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ=="
-    },
-    "node_modules/weixin-js-sdk": {
-      "version": "1.6.3",
-      "resolved": "https://registry.npmmirror.com/weixin-js-sdk/-/weixin-js-sdk-1.6.3.tgz",
-      "integrity": "sha512-5jYNtVcxWmgHNqCLSPoX6vXab9G4RPDZx0klX8IsVwGjDTwx/UDmgfF7fkRMGguRpuFv0O7tk1jb+Oay2QiV1w=="
-    },
-    "node_modules/yallist": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
-      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
-    },
-    "node_modules/yarn": {
-      "version": "1.22.19",
-      "resolved": "https://registry.npmmirror.com/yarn/-/yarn-1.22.19.tgz",
-      "integrity": "sha512-/0V5q0WbslqnwP91tirOvldvYISzaqhClxzyUKXYxs07yUILIs5jx/k6CFe8bvKSkds5w+eiOqta39Wk3WxdcQ==",
-      "hasInstallScript": true,
-      "bin": {
-        "yarn": "bin/yarn.js",
-        "yarnpkg": "bin/yarn.js"
-      },
-      "engines": {
-        "node": ">=4.0.0"
-      }
-    }
-  }
-}

+ 0 - 25
yshop/yshop-drink-uniapp/package.json

@@ -1,25 +0,0 @@
-{
-  "name": "yshop-miniapp",
-  "version": "3.2.2",
-  "description": "",
-  "main": "main.js",
-  "scripts": {
-    "test": "echo \"Error: no test specified\" && exit 1"
-  },
-  "author": "",
-  "license": "ISC",
-  "dependencies": {
-    "@vant/area-data": "^1.5.0",
-    "add": "^2.0.6",
-    "flyio": "^0.6.14",
-    "jweixin-module": "^1.6.0",
-    "pinia": "^2.1.6",
-    "pinia-plugin-persistedstate": "^4.2.0",
-    "vant": "^4.6.2",
-    "weixin-js-sdk": "^1.6.3",
-    "yarn": "^1.22.19"
-  },
-  "devDependencies": {
-    "pinia-plugin-unistorage": "^0.1.2"
-  }
-}

+ 0 - 443
yshop/yshop-drink-uniapp/pages.json

@@ -1,443 +0,0 @@
-{
-  "pages": [
-    {
-      "path": "pages/index/index",
-      "style": {
-        "navigationBarTitleText": ""
-      }
-    },
-   
-      {
-            "path" : "pages/menu/menu",
-            "style" :                                                                                    
-            {
-                "navigationBarTitleText": "点餐",
-                "enablePullDownRefresh": true
-            }
-            
-        }
-        ,{
-            "path" : "pages/order/order",
-            "style" :                                                                                    
-            {
-                "navigationBarTitleText": "订单",
-                "enablePullDownRefresh": true
-            }
-            
-        }
-        ,{
-            "path" : "pages/mine/mine",
-            "style" :                                                                                    
-            {
-                "navigationBarTitleText": "我的",
-                "enablePullDownRefresh": true
-            }
-            
-        }
-        // ,{
-        //     "path" : "pages/cart/cart",
-        //     "style" :                                                                                    
-        //     {
-        //         "navigationBarTitleText": "购物车",
-        //         "enablePullDownRefresh": false
-        //     }
-            
-        // }
-    
-],
-	"subPackages": [{
-		"root": "pages/components",
-		"pages": [ {
-				"path": "pages/mine/content",
-				"style": {
-					"navigationBarTitleText": "内容",
-					"navigationBarTextStyle": "black",
-					"navigationBarBackgroundColor": "#ffffff"
-				}
-			}, 
-			{
-					"path": "pages/mine/news",
-					"style": {
-						"navigationBarTitleText": "新闻详情",
-						"navigationBarTextStyle": "black",
-						"navigationBarBackgroundColor": "#ffffff"
-					}
-				
-			},
-			{
-				"path": "pages/pay/pay",
-				"style": {
-					"navigationBarTitleText": "支付",
-					"navigationBarTextStyle": "black",
-					"navigationBarBackgroundColor": "#ffffff"
-				}
-			},
-			{
-				"path": "pages/pay/alipay",
-				"style": {
-					"navigationBarTitleText": "支付宝支付",
-					"navigationBarTextStyle": "black",
-					"navigationBarBackgroundColor": "#ffffff"
-				}
-			},
-			{
-				"path": "pages/remark/remark",
-				"style": {
-					"navigationBarTitleText": "备注",
-					"navigationBarTextStyle": "black",
-					"navigationBarBackgroundColor": "#ffffff"
-				}
-			}, {
-				"path": "pages/packages/index",
-				"style": {
-					"navigationBarTitleText": "可用优惠券",
-					"navigationBarTextStyle": "black",
-					"navigationBarBackgroundColor": "#ffffff",
-					"enablePullDownRefresh": true
-				}
-			 },
-			 {
-				"path": "pages/login/login",
-				"style": {
-					"navigationBarTitleText": "登录",
-					"navigationBarTextStyle": "black",
-					"navigationBarBackgroundColor": "#ffffff"
-				}
-			},
-			{
-				"path": "pages/login/logout",
-				"style": {
-					"navigationBarTitleText": "退出登录"
-				}
-			},
-			{
-				"path": "pages/address/address",
-				"style": {
-					"navigationBarTitleText": "我的地址",
-					"navigationBarTextStyle": "black",
-					"navigationBarBackgroundColor": "#ffffff"
-				}
-			}, {
-				"path": "pages/address/add",
-				"style": {
-					"navigationBarTitleText": "添加地址",
-					"navigationBarTextStyle": "black",
-					"navigationBarBackgroundColor": "#ffffff"
-				}
-			}, {
-				"path": "pages/orders/orders",
-				"style": {
-					"navigationBarTitleText": "历史订单",
-					"navigationBarTextStyle": "black",
-					"navigationBarBackgroundColor": "#ffffff",
-					"enablePullDownRefresh": true,
-					"onReachBottomDistance": 50
-				}
-			}, {
-				"path": "pages/orders/detail",
-				"style": {
-					"navigationBarTitleText": "订单详情",
-					"navigationBarTextStyle": "black",
-					"navigationBarBackgroundColor": "#ffffff"
-				}
-			}, {
-				"path": "pages/coupons/coupons",
-				"style": {
-					"enablePullDownRefresh": true,
-					"navigationBarTitleText": "我的卡券",
-					"navigationBarTextStyle": "black",
-					"navigationBarBackgroundColor": "#ffffff"
-				}
-			}, {
-				"path": "pages/mine/userinfo",
-				"style": {
-					"navigationBarTitleText": "用户信息",
-					"navigationBarTextStyle": "black",
-					"navigationBarBackgroundColor": "#ffffff"
-				}
-			},
-			 {
-				"path": "pages/shop/shop",
-				"style": {
-					"navigationBarTitleText": "店铺",
-					"navigationBarTextStyle": "black",
-					"navigationBarBackgroundColor": "#ffffff"
-				}
-			}, {
-				"path": "pages/balance/bill",
-				"style": {
-					"navigationBarTitleText": "账单",
-					"navigationBarTextStyle": "black",
-					"navigationBarBackgroundColor": "#ffffff"
-				}
-			},{
-                "path": "pages/balance/balance",
-                "style": {
-                    "navigationBarTitleText": "会员储值",
-                    "navigationBarTextStyle": "black",
-                    "navigationBarBackgroundColor": "#ffffff"
-                }
-            }
-		    ,{
-                    "path" : "pages/orders/refund",
-                    "style" :                                                                                    
-					{
-						"navigationBarTitleText": "退款",
-						"enablePullDownRefresh": false
-					}
-                
-            },
-			{
-				"path": "pages/scoreproduct/list",
-				"style": {
-					"navigationBarTitleText": "积分商城",
-					"enablePullDownRefresh": true
-				}
-
-			}, {
-				"path": "pages/scoreproduct/detail",
-				"style": {
-					"navigationBarTitleText": "产品详情",
-					"enablePullDownRefresh": true
-				}
-
-			}, {
-				"path": "pages/scoreproduct/order",
-				"style": {
-					"navigationBarTitleText": "订单列表",
-					"enablePullDownRefresh": true
-				}
-			}, {
-				"path": "pages/scoreproduct/orderDetail",
-				"style": {
-					"navigationBarTitleText": "订单详情",
-					"enablePullDownRefresh": true
-				}
-			}
-            ,{
-                    "path" : "pages/scoreproduct/confirm",
-                    "style" :                                                                                    
-                {
-                    "navigationBarTitleText": "确认",
-                    "enablePullDownRefresh": false
-                }
-                
-                }
-                ,{
-                    "path" : "pages/scan/scan",
-                    "style" :                                                                                    
-                {
-                    "navigationBarTitleText": "扫码点餐",
-                    "enablePullDownRefresh": false
-                }
-                
-                }
-                ,{
-                    "path" : "pages/vip/detail",
-					"style" :                                                                                    
-					{
-						"navigationBarTitleText": "会员卡详情",
-						"enablePullDownRefresh": false
-					}
-                
-                },
-				{
-				    "path" : "pages/vip/vip",
-					"style" :                                                                                    
-					{
-						"navigationBarTitleText": "会员卡列表",
-						"enablePullDownRefresh": false
-					}
-				
-				},
-				{
-                    "path" : "pages/menudetail/menudetail",
-						"style" :                                                                                    
-					{
-						"navigationBarTitleText": "详情",
-						"enablePullDownRefresh": false
-					}
-					
-                },
-				{
-				    "path" : "pages/merchant/index",
-						"style" :                                                                                    
-					{
-						"navigationBarTitleText": "商家中心",
-						"enablePullDownRefresh": false
-					}
-					
-				},
-				{
-				    "path" : "pages/merchant/order",
-						"style" :                                                                                    
-					{
-						"navigationBarTitleText": "订单列表",
-						"enablePullDownRefresh": false
-					}
-					
-				},
-				{
-				    "path" : "pages/merchant/cash",
-						"style" :                                                                                    
-					{
-						"navigationBarTitleText": "提现",
-						"enablePullDownRefresh": false
-					}
-					
-				},
-				{
-				    "path" : "pages/merchant/addCard",
-						"style" :                                                                                    
-					{
-						"navigationBarTitleText": "添加银行卡",
-						"enablePullDownRefresh": false
-					}
-					
-				},
-				{
-				    "path" : "pages/merchant/wallet",
-						"style" :                                                                                    
-					{
-						"navigationBarTitleText": "我的钱包",
-						"enablePullDownRefresh": false
-					}
-					
-				},
-				{
-				    "path" : "pages/merchant/orderDetail",
-						"style" :                                                                                    
-					{
-						"navigationBarTitleText": "我的钱包",
-						"enablePullDownRefresh": false
-					}
-					
-				},
-				{
-				    "path" : "pages/merchant/my",
-						"style" :                                                                                    
-					{
-						"navigationBarTitleText": "我的",
-						"enablePullDownRefresh": false
-					}
-					
-				},
-				{
-				    "path" : "pages/merchant/shopInfo",
-						"style" :                                                                                    
-					{
-						"navigationBarTitleText": "店铺资料",
-						"enablePullDownRefresh": false
-					}
-					
-				},
-				{
-				    "path" : "pages/merchant/cashAccount",
-						"style" :                                                                                    
-					{
-						"navigationBarTitleText": "提现账号",
-						"enablePullDownRefresh": false
-					}
-					
-				},
-				{
-				    "path" : "pages/merchant/withdrawal",
-						"style" :                                                                                    
-					{
-						"navigationBarTitleText": "提现明细",
-						"enablePullDownRefresh": false
-					}
-					
-				},
-				{
-				    "path" : "pages/merchant/bell",
-						"style" :                                                                                    
-					{
-						"navigationBarTitleText": "桌台",
-						"enablePullDownRefresh": false
-					}
-					
-				}
-                ,{
-                    "path" : "pages/due/index",
-                    "style" :                                                                                    
-					{
-						"navigationBarTitleText": "预约",
-						"enablePullDownRefresh": false
-					}
-                
-                },
-				{
-				    "path" : "pages/due/detail",
-				    "style" :                                                                                    
-					{
-						"navigationBarTitleText": "预约详情",
-						"enablePullDownRefresh": false
-					}
-				
-				},
-				{
-				    "path" : "pages/due/orders",
-				    "style" :                                                                                    
-					{
-						"navigationBarTitleText": "预约订单",
-						"enablePullDownRefresh": false
-					}
-				
-				},
-				{
-				    "path" : "pages/cart/cart",
-				    "style" :                                                                                    
-					{
-						"navigationBarTitleText": "购物车",
-						"enablePullDownRefresh": false
-					}
-				
-				}
-            ]
-	}],
-  "globalStyle": {
-    "navigationBarTextStyle": "black",
-    "navigationBarTitleText": " ",
-    "navigationBarBackgroundColor": "#ffffff",
-    "backgroundColor": "#ffffff",
-    "navigationStyle": "custom"
-  },
-  "tabBar": {
-  		"color": "#919293",
-  		"selectedColor": "#000",
-  		"backgroundColor": "#fff",
-  		"borderStyle": "black",
-  		"list": [{
-  				"pagePath": "pages/index/index",
-  				"text": "首页",
-  				"iconPath": "static/images/tabBar/index.png",
-  				"selectedIconPath": "static/images/tabBar/index_selected.png"
-  			},
-  			{
-  				"pagePath": "pages/menu/menu",
-  				"text": "点餐",
-  				"iconPath": "static/images/tabBar/drink.png",
-  				"selectedIconPath": "static/images/tabBar/drink-selected.png"
-  			}
-			// {
-  	// 			"pagePath": "pages/cart/cart",
-  	// 			"text": "购物车",
-  	// 			"iconPath": "static/images/tabBar/cart.png",
-  	// 			"selectedIconPath": "static/images/tabBar/cart-selected.png"
-  	// 		}
-			,{
-  				"pagePath": "pages/order/order",
-  				"text": "订单",
-  				"iconPath": "static/images/tabBar/order.png",
-  				"selectedIconPath": "static/images/tabBar/order-selected.png"
-  			}, {
-  				"pagePath": "pages/mine/mine",
-  				"text": "我的",
-  				"iconPath": "static/images/tabBar/mine.png",
-  				"selectedIconPath": "static/images/tabBar/mine_selected.png"
-  			}
-  		]
-  	},
-  "uniIdRouter": {}
-}

+ 0 - 240
yshop/yshop-drink-uniapp/pages/components/pages/address/add.vue

@@ -1,240 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  left-arrow
-	  @leftClick="$onClickLeft"
-	/>
-	<!-- #endif -->
-	<view class="container">
-		<view class="form-box">
-			<view class="form">
-				<list-cell :hover="false">
-					<view class="form-input">
-						<view class="label">收货人</view>
-						<input class="input" placeholder="请输入收货人" v-model="form.realName" placeholder-class="text-color-assist" />
-					</view>
-				</list-cell>
-				<list-cell :hover="false">
-					<view class="form-input">
-						<view class="label">联系方式</view>
-						<input class="input" placeholder="请输入收货人联系方式" v-model="form.phone" placeholder-class="text-color-assist" />
-					</view>
-				</list-cell>
-				<list-cell :hover="false">
-					<view class="form-input">
-						<view class="label">收货地址</view>
-						<view class="input" @click="chooseLocation">{{form.address ? form.address : '请选择收货地址'}}</view>
-					</view>
-				</list-cell>
-				<list-cell :hover="false">
-					<view class="form-input">
-						<view class="label">详细地址</view>
-						<input class="input" placeholder="请输入收货人详细地址" v-model="form.detail" placeholder-class="text-color-assist" />
-					</view>
-				</list-cell>
-				<list-cell :hover="false">
-					<view class="form-input">
-						<view class="label">默认地址</view>
-						<view class="radio-group">
-							<view class="radio" :class="{'checked': !form.isDefault}" style="margin-right: 10rpx;" @tap="form.isDefault=0">否</view>
-							<view class="radio" :class="{'checked': form.isDefault}" @tap="form.isDefault=1">是</view>
-						</view>
-					</view>
-				</list-cell>
-			</view>
-			<view class="btn-section">
-				<button type="primary" size="default" @tap="save">保存</button>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script setup>
-import {
-  ref,
-  computed
-} from 'vue'
-import { useMainStore } from '@/store/store'
-import { storeToRefs } from 'pinia'
-import { onLoad,onShow } from '@dcloudio/uni-app'
-import { formatDateTime,prePage } from '@/utils/util'
-import {
-  getAddressAddAndEdit
-} from '@/api/address'
-import { IS_DEMO } from '@/config'
-const main = useMainStore()
-const { isLogin,addresses } = storeToRefs(main)
-const title = ref('编辑地址')
-
-const form = ref({
-	realName: '',
-	isDefault: 0,
-	phone: '',
-	address: '',
-	detail: '',
-	latitude: '',
-	longitude: ''
-})
-
-onLoad((option) => {
-	//为了方便演示,这里用本地缓存
-	console.log('option:',option)
-	if (option.id) {
-		form.value = addresses.value.find(item => item.id == option.id)
-	}
-})
-
-const save = async() => {
-	let data = {}
-	if (form.value.hasOwnProperty('id')) {
-		data = await getAddressAddAndEdit(form.value);
-	} else {
-		data = await getAddressAddAndEdit(form.value);
-	}
-	if (data) {
-		setTimeout(function(){
-			uni.navigateBack()
-		}, 2000);
-	}
-}
-
-const chooseLocation = async() => {
-	// #ifdef H5
-	if(IS_DEMO){
-		uni.showToast({
-			title: 'h5地图目前收费,所以演示是固定测试地址啦~',
-			icon: 'none'
-		})
-		form.value.address ='北京市东城区东华门街道西长安街‌‌';
-		form.value.latitude =  '115.7';
-		form.value.longitude =  '39.9';
-		return
-	}	
-	// #endif
-
-
-	uni.chooseLocation({
-		success: function (res) {
-			form.value.address = res.address + ' ' + res.name;
-			form.value.latitude = res.latitude;
-			form.value.longitude = res.longitude;
-			let addArr = parseAddress(res.address)
-			form.value.province = addArr.province
-			form.value.city = addArr.city
-			form.value.district = addArr.district
-		},
-		fail: function(res1) {
-			console.log('chooseLocation:',res)
-		},
-		complete: function(res2) {
-			console.log('chooseLocation:',res2)
-			//console.log('chooseLocation2:',parseAddress(res2.address))
-			
-		},
-		
-	});
-	
-
-
-}
-
-
-
-function parseAddress(address) {
-    let province = '', city = '', district = '';
-    // 处理省份/直辖市
-    const provinceMatch = address.match(/^(.*?(省|自治区|北京市|天津市|上海市|重庆市))/);
-    if (provinceMatch) {
-        province = provinceMatch[1];
-        address = address.substring(province.length);
-        // 如果是直辖市,市级名称与省级相同
-        if (province.endsWith('市')) {
-            city = province;
-        }
-    }
-    // 处理市级(非直辖市情况)
-    if (!city) {
-        const cityMatch = address.match(/^(.*?市)/);
-        if (cityMatch) {
-            city = cityMatch[1];
-            address = address.substring(city.length);
-        }
-    }
-    // 处理区/县
-    const districtMatch = address.match(/^(.*?[区县市])/);
-    if (districtMatch) {
-        district = districtMatch[1];
-    }
-    return { province, city, district };
-}
-
-
-</script>
-
-<style lang="scss" scoped>
-	.form-box {
-		width: 100%;
-		height: 100%;
-		padding: 30rpx;
-		display: flex;
-		flex-direction: column;
-		color: $text-color-base;
-
-		.form-input {
-			display: flex;
-			align-items: center;
-			width: 100%;
-		}
-
-		.label {
-			width: 200rpx;
-			font-size: $font-size-lg;
-			color: $text-color-base;
-			font-weight: 500;
-		}
-
-		.input {
-			flex: 1;
-			display: flex;
-			align-items: center;
-		}
-
-		.radio-group {
-			display: flex;
-			justify-content: flex-start;
-
-			.radio {
-				padding: 10rpx 30rpx;
-				border-radius: 6rpx;
-				border: 2rpx solid $text-color-assist;
-				color: $text-color-assist;
-				font-size: $font-size-base;
-
-				&.checked {
-					background-color: $color-primary;
-					color: $text-color-white;
-					border: 2rpx solid $color-primary;
-				}
-			}
-		}
-
-		.btn-section {
-			flex: 1;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-
-			button {
-				font-size: $font-size-base;
-				height: 90rpx;
-				border-radius: 50rem !important;
-				width: 85%;
-				display: flex;
-				align-items: center;
-				justify-content: center;
-			}
-		}
-	}
-</style>

+ 0 - 229
yshop/yshop-drink-uniapp/pages/components/pages/address/address.vue

@@ -1,229 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  left-arrow
-	  @leftClick="$onClickLeft"
-	/>
-	<!-- #endif -->
-	<view class="container">
-		<view class="main">
-			<uv-empty v-if="addresses.length == 0" mode="address"></uv-empty>
-			<template v-else>
-				<uv-swipe-action>
-					<uv-swipe-action-item class="address-wrapper" :options="swipeOption"
-						@click="handleSwipeClick(address.id)" v-for="(address, index) in addresses" :key="index">
-						<view class="address" @tap="chooseAddress(address)">
-							<view class="left flex-fill overflow-hidden mr-20">
-								<view class="font-size-lg font-weight-bold text-truncate"
-									style="margin-bottom: 10rpx;white-space:normal;">
-									{{ address.address + ' ' + address.detail }}
-								</view>
-								<view class="font-size-sm text-color-assist">
-									{{ address.realName }} {{ address.isDefault ? '默认' : '' }} {{ address.phone }}
-								</view>
-							</view>
-							<image src="/static/images/edit.png" class="edit-icon" @tap.stop="edit(address.id)"></image>
-						</view>
-					</uv-swipe-action-item>
-				</uv-swipe-action>
-			</template>
-		</view>
-		<view class="btn-box">
-			<button type="primary" size="default" @tap="add">新增地址</button>
-		</view>
-	</view>
-</template>
-
-<script setup>
-import {
-  ref,
-  computed
-} from 'vue'
-import { useMainStore } from '@/store/store'
-import { storeToRefs } from 'pinia'
-import { onLoad,onShow } from '@dcloudio/uni-app'
-import { formatDateTime,prePage } from '@/utils/util'
-import {
-  addressAll,
-  addressDelete,
-  shopGetDistanceFromLocation
-} from '@/api/address'
-const main = useMainStore()
-const { isLogin,addresses,store,address } = storeToRefs(main)
-const title = ref('我的地址')
-
-const scene = ref('menu')
-const is_choose = ref(false)
-const swipeOption = ref(
-[{
-	text: '删除',
-	style: {
-		backgroundColor: '#D12E32'
-	}
-}])
-
-onLoad((option) => {
-	console.log('option:',option)
-	is_choose.value = option.is_choose || false
-	scene.value = option.scene || 'menu'
-})
-onShow(() => {
-	init();
-})
-
-const init = async() => {
-	let data = await addressAll();
-	if (data) {
-		main.SET_ADDRESSES(data)
-	}
-}
-const add = () => {
-	uni.navigateTo({
-		url: '/pages/components/pages/address/add'
-	})
-}
-const edit = (id) => {
-	uni.navigateTo({
-		url: '/pages/components/pages/address/add?id=' + id
-	})
-}
-const handleSwipeClick = async(id) => {
-	uni.showModal({
-		title: '提示',
-		content: '确定要删除?',
-		success: async function (res) {
-			if (res.confirm) {
-				let data = await addressDelete({
-					id: id
-				});
-				if (data) {
-					const index = addresses.value.findIndex(item => item.id == id)
-					const newaddresses = JSON.parse(JSON.stringify(addresses.value))
-					newaddresses.splice(index, 1)
-					main.SET_ADDRESSES(newaddresses)
-					if(address.value.id == id){
-						main.SET_ADDRESS({})
-					}
-					uni.showToast({
-						title: '删除成功!',
-						icon: 'success'
-					})
-				}
-			} else if (res.cancel) {
-				console.log('用户点击取消');
-			}
-		}
-	});
-}
-const chooseAddress = async(address) => {
-	if (!is_choose.value) {
-		return;
-	}
-
-	if (scene.value == 'menu' || scene.value == 'pay') {
-		let data = await shopGetDistanceFromLocation({
-			lat: address.latitude,
-			lng: address.longitude,
-			lat2: main.store.lat,
-			lng2: main.store.lng
-		});
-		if (!data) {
-			return;
-		}
-		if (parseFloat(data) > store.value.distance) {
-			uni.showToast({
-				title: '不在配送范围!',
-				icon: 'error'
-			})
-			return;
-		}
-		main.SET_ADDRESS(address)
-		main.SET_ORDER_TYPE('takeout')
-		main.store.far = data
-		main.store.far_text = data + 'km'
-		main.SET_STORE(main.store)
-		main.SET_LOCATION({
-			latitude: address.lat,
-			longitude: address.lng
-		});
-
-		if (scene.value == 'menu') {
-			uni.switchTab({
-				url: '/pages/menu/menu'
-			})
-		} else if (scene.value == 'pay') {
-			uni.navigateBack();
-		}
-	} else if (scene.value == 'scoreShop') {
-		main.SET_ADDRESS(address)
-		uni.navigateBack()
-	}
-}
-
-</script>
-
-<style lang="scss" scoped>
-	.container {
-		width: 100%;
-		height: 100%;
-	}
-
-	.main {
-		width: 100%;
-		padding: 30rpx;
-		display: flex;
-		flex-direction: column;
-		padding-bottom: 100rpx;
-
-		.address-wrapper {
-			margin-bottom: 30rpx;
-		}
-
-		.address {
-			width: 100%;
-			padding: 40rpx 30rpx;
-			background-color: #FFFFFF;
-			display: flex;
-			justify-content: space-between;
-			align-items: center;
-
-			.right {
-				flex: 1;
-				overflow: hidden;
-				display: flex;
-				flex-direction: column;
-			}
-
-			.edit-icon {
-				width: 50rpx;
-				height: 50rpx;
-				flex-shrink: 0;
-			}
-		}
-	}
-
-	.btn-box {
-		height: 100rpx;
-		background-color: #FFFFFF;
-		box-shadow: 0 0 20rpx rgba($color: $text-color-assist, $alpha: 0.1);
-		position: fixed;
-		bottom: 0;
-		left: 0;
-		right: 0;
-		padding: 10rpx 0;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-
-		button {
-			height: 80rpx;
-			width: 80%;
-			border-radius: 50rem !important;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-		}
-	}
-</style>

+ 0 - 353
yshop/yshop-drink-uniapp/pages/components/pages/balance/balance.vue

@@ -1,353 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  left-arrow
-	  @leftClick="$onClickLeft"
-	/>
-	<!-- #endif -->
-	<view class="container bg-white w-100 h-100">
-		<!--协议弹出框-->
-		<uv-popup mode="bottom" :closeable="true" ref="refPopup">
-			<view class="pre-line font-size-sm text-color-assist" style="margin-bottom: 200rpx;padding: 30rpx;">{{ agreement }}</view>
-		</uv-popup>
-
-		<!--轻提示-->
-		<uv-toast ref="uToast"></uv-toast>
-
-		<view style="padding-bottom: 220rpx;">
-			<view class="balance-info d-flex justify-content-between">
-				<view class="flex-fill d-flex flex-column align-items-between justify-content-between">
-					<view class="font-size-sm text-color-base">账户余额(元)</view>
-					<view class="font-size-extra-lg text-color-base font-weight-bold">{{ member.nowMoney }}</view>
-					<view class="font-size-sm text-color-primary" @click="goBill">交易记录</view>
-				</view>
-				<image src="/static/images/balance.png" style="height: 194rpx;" mode="aspectFit"></image>
-			</view>
-
-			<view class="font-size-lg text-color-base font-weight-bold" style="margin-bottom: 20rpx;">储值金额</view>
-
-			<view class="d-flex flex-wrap justify-content-between amounts">
-				<view class="d-flex align-items-center just-content-center amount" 
-					 :class="{'bg-primary text-color-white': item.selected, 'bg-base text-color-base': !item.selected}"
-					  v-for="(item, index) in amounts" :key="index" @tap="handleSelected(index)">
-					<view class="font-size-extra-lg font-weight-bold">{{ parseInt(item.value) }}</view>
-					<view class="font-size-sm font-weight-light">元</view>
-				</view>
-			</view>
-			
-	
-			<view class="font-size-lg text-color-base font-weight-bold mt-5" style="margin-bottom: 20rpx;">支付方式</view>
-			<list-cell last>
-				<view class="d-flex align-items-center justify-content-between w-100" @click="setPayType('weixin')">
-					<view class="iconfont iconwxpay line-height-100 payment-icon" style="color: #7EB73A"></view>
-					<view class="flex-fill">微信支付</view>
-					<view class="iconfont line-height-100 checkbox checked iconradio-button-on" v-if="payType == 'weixin'">
-					</view>
-					<view class="iconfont line-height-100 checkbox iconradio-button-off" v-else></view>
-				</view>
-			</list-cell>
-			<!-- #ifdef H5 -->
-	<!-- 		<list-cell>
-				<view class="d-flex align-items-center justify-content-between w-100" @click="setPayType('alipay')">
-					<view class="iconfont-yshop icon-alipay line-height-100 payment-icon" style="color:#07b4fd" ></view>
-					<view class="flex-fill">支付宝</view>
-					<view class="iconfont line-height-100 checkbox checked iconradio-button-on" v-if="payType == 'alipay'" ></view>
-					<view class="iconfont line-height-100 checkbox iconradio-button-off" v-else ></view>     
-				</view>
-			</list-cell> -->
-			<!-- #endif -->
-		
-
-			<!-- bottom box begin -->
-			<view class="bottom-box position-fixed fixed-bottom w-100 d-flex flex-column bg-white">
-				<view class="protocol font-size-sm d-flex justify-content-start align-items-center">
-					<view
-						class="iconfont line-height-100"
-						@tap="agree = !agree"
-						:class="{ 'iconradio-button-on text-color-primary': agree, 'iconradio-button-off text-color-base': !agree }"
-					></view>
-					<view class="text-color-base">我已阅读并同意</view>
-					<view class="text-color-primary" @click="popup">《储值协议》</view>
-				</view>
-				<button type="primary" class="b" @click="buy">购买</button>
-			</view>
-			<!-- bottom box end -->
-		</view>
-	</view>
-</template>
-
-<script setup>
-import {
-  ref,
-  watch
-} from 'vue'
-import { useMainStore } from '@/store/store'
-import { storeToRefs } from 'pinia'
-import { onLoad,onShow} from '@dcloudio/uni-app'
-import { isWeixin } from '@/utils/util'
-import {
-  balanceGetMoneyList,
-  balanceRecharge
-} from '@/api/user'
-import {
-  payUnify,
-  getWechatConfig
-} from '@/api/order'
-// #ifdef H5
-import * as jweixin from 'weixin-js-sdk'
-// #endif
-const main = useMainStore()
-const { isLogin,member } = storeToRefs(main)
-const title = ref('充值')
-const agree = ref(false)
-const amounts = ref([])
-const show = ref(false)
-const agreement = ref('1. 储值成功后,不可退款,请根据自己的消费情况充值。\n2. 储值余额不可提现,不可转移、转赠。\n3. 储值金额按国家法律、法规开具符合规定的发票,后续凭储值余额消费时,不再开具发票。如需发票请至个人中心联系客服。\n4. 储值不累计会员积分,订单消费时以实际订单支付金额累计会员积分。\n5. 储值余额可在内地线下门店、点餐小程序在线支付使用。')
-const refPopup = ref()
-const payType = ref('weixin')
-
-
-onLoad(() => {
-	getManeyList();
-})	
-
-const getManeyList = async() => {
-	let data = await balanceGetMoneyList();
-	if (data) {
-		amounts.value = data;
-	}
-}
-
-const handleSelected = (index) => {
-	amounts.value.forEach(item => item.selected = false);
-	amounts.value[index].selected = true;
-}
-
-// 更改支付方式
-const setPayType = (paytype) => {
-	payType.value= paytype;
-}
-
-const uToast = ref()
-
-const buy  = async() => {
-	if (agree.value == false) {
-		uToast.value.show({
-			message: '请点击同意储存协议',
-			type: 'success'
-		});
-		return;
-	}
-	let selected = false;
-	let recharge = 0;
-	amounts.value.forEach(item => {
-		if (item.selected == true) {
-			selected = true;
-			recharge = item;
-		}
-	});
-	if (selected == false) {
-		uToast.value.show({
-			message: '请选择充值金额',
-			type: 'error'
-		});
-		return;
-	}
-
-	let resData = await balanceRecharge({
-		rechargeId: recharge.id
-	});
-	if (!resData) {
-		return;
-	}
-	let order = {orderId:resData}
-	
-	if (payType.value == 'weixin') {
-		// 微信支付
-		weixinPay(order);
-	} else if (payType.value == 'alipay') {
-		// 余额支付
-		aliPay(order);
-	} 
-	
-	
-}
-const weixinPay = async(order) => {
-	let from = 'routine'
-	// #ifdef H5
-	from = 'h5'
-	if(isWeixin()){
-		from = 'wechat'
-	}
-	
-	// #endif
-	//let that = this;
-	let data = await payUnify({
-		uni: order.orderId,
-		from: from,
-		paytype: 'weixin'
-	});
-	if (!data) {
-		return;
-	}
-	if (data.trade_type == 'MWEB') {
-		// #ifdef H5
-		// 微信外的H5
-		location.href = data.data;
-		// #endif
-	} else if (data.trade_type == 'JSAPI') {
-
-		// #ifdef MP-WEIXIN
-		uni.requestPayment({
-			provider: 'wxpay',
-			timeStamp: data.data.timeStamp,
-			nonceStr: data.data.nonceStr,
-			package: data.data.package,
-			signType: 'MD5',
-			paySign: data.data.paySign,
-			success: function(res) {
-				uni.switchTab({
-					url: '/pages/mine/mine'
-				});
-			},
-			fail: function(err) {
-				console.log('fail:' + JSON.stringify(err));
-			}
-		});
-		// #endif
-	} else if (data.trade_type == 'W-JSAPI'){
-		//公众号支付
-		let config = await getWechatConfig();
-		console.log('config:',config)
-		if (config) {
-		  jweixin.config({
-				debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
-		        appId: config.appId, // 必填,公众号的唯一标识
-		        timestamp: config.timestamp, // 必填,生成签名的时间戳
-		        nonceStr: config.nonceStr, // 必填,生成签名的随机串
-		        signature: config.signature, // 必填,签名
-		        jsApiList: [
-		          'chooseWXPay'
-		        ] ,
-			 }
-			);
-		  jweixin.ready(function() {
-		   jweixin.chooseWXPay({
-			timestamp: data.data.timeStamp, 
-			nonceStr: data.data.nonceStr, 
-			package:  data.data.package, 
-			signType: 'MD5', 
-			paySign: data.data.paySign, 
-			success: function(res) {
-			 uni.removeStorageSync('cart');
-			 uni.switchTab({
-			  url: '/pages/mine/mine'
-			 });
-			},
-			fail: function(err) {
-			  console.log(res)
-			}
-		   });
-		  });
-		   jweixin.error(function(res) {
-				console.log(res)
-		  });
-		 } else {
-			// console.log(res)
-	  }
-		
-	}
-}
-
-const aliPay = async(order) => {
-
-	// #ifdef H5
-	//let that = this;
-	if(isWeixin()){
-		uni.showToast({
-			title: '请普通浏览器打开进行支付宝支付~',
-			icon: 'none'
-		})
-		return
-	}
-	let data = await payUnify({
-		uni: order.orderId,
-		from: 'h5',
-		paytype: 'alipay'
-	});
-
-  // 支付宝支付,这里只要提交表单
-	let form = data.data
-	const div = document.createElement('formdiv');
-	div.innerHTML = form;
-	document.body.appendChild(div);      
-	document.forms[0].submit();
-
-	// #endif
-
-
-}
-
-// 弹出层
-const popup = () => {
-	refPopup.value.open();
-}
-const goBill = () => {
-	uni.navigateTo({
-		url: '/pages/components/pages/balance/bill?cate=0&type=2'
-	});
-}
-
-	
-
-</script>
-
-<style lang="scss" scoped>
-.container {
-	padding: 0 40rpx;
-}
-
-.balance-info {
-	padding: 50rpx 10rpx;
-
-	view {
-		height: calc(366 / 638 * 340);
-		padding: 10rpx 0;
-	}
-	image {
-		width: 340rpx;
-	}
-}
-
-.amounts {
-	margin-bottom: 40rpx;
-	.amount {
-		width: calc(96% / 3);
-		padding: 50rpx 0;
-		margin-bottom: 20rpx;
-		border-radius: 8rpx;
-	}
-}
-
-.bottom-box {
-	padding: 0 40rpx;
-	box-shadow: 0 0 20rpx rgba(6, 6, 6, 0.1);
-
-	.protocol {
-		padding: 36rpx 0;
-		height: 100rpx;
-		view {
-			margin-right: 10rpx;
-		}
-	}
-
-	button {
-		height: 70rpx;
-		line-height: 70rpx;
-		border-radius: 50rem !important;
-		margin-bottom: 30rpx;
-	}
-}
-</style>

+ 0 - 244
yshop/yshop-drink-uniapp/pages/components/pages/balance/bill.vue

@@ -1,244 +0,0 @@
-<template>
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  left-arrow
-	  @leftClick="$onClickLeft"
-	/>
-	<view>
-		<view class="wrap">
-			<view class="bg-white" v-if="cate == 0">
-				<uv-tabs activeColor="#f29100" ref="tabs" :list="list" :current="current" @change="change" :scrollable="false" swiperWidth="750"></uv-tabs>
-			</view>
-			<view class="bg-white" v-else>
-				<uv-tabs activeColor="#f29100" ref="tabs" :list="list1" :current="current" @change="change" :scrollable="false" swiperWidth="750"></uv-tabs>
-			</view>
-			<swiper class="swiper-box" :current="swiperCurrent" @transition="transition" @animationfinish="animationfinish">
-				
-				<swiper-item class="swiper-item" v-for="(item, index) in orderList" :key="index">
-					<scroll-view scroll-y style="height: 100%;width: 100%;" @scrolltolower="reachBottom">
-						<view class="page-box">
-							<view v-if="item.length == 0">
-								<view class="centre" v-if="loadStatus[index] != 'loading'">
-									<view class="explain">
-										您还没有相关的账单
-										<view class="tips">可以去看看有那些想买的</view>
-									</view>
-									<view class="btn">
-										<navigator open-type="switchTab" url="/pages/menu/menu">随便逛逛</navigator>
-									</view>
-								</view>
-								<view v-else>
-									<uv-load-more :status="loadStatus[index]" bgColor="#f2f2f2"></uv-load-more>
-								</view>
-							</view>
-							<view v-else>
-								<view class="order" v-for="(res, resIndex) in orderList[index]" :key="resIndex">
-									<view class="type">
-										<view>{{res.title}}</view>
-										<view class="ellipsis">{{res.mark}}</view>
-									</view>
-									<view class="total">
-										<view>
-												{{res.pm == 0 ? '-':'+'}}¥{{res.number}}元
-										</view>
-										<view>
-											{{formatDateTime(res.createTime)}}
-										</view>
-									</view>
-								</view>
-								<uv-load-more :status="loadStatus[index]" bgColor="#f2f2f2"></uv-load-more>
-							</view>
-						</view>
-					</scroll-view>
-				</swiper-item>
-			</swiper>
-		</view>
-	</view>
-</template>
-
-<script setup>
-import {
-  ref,
-  watch
-} from 'vue'
-import { useMainStore } from '@/store/store'
-import { storeToRefs } from 'pinia'
-import { onLoad,onShow} from '@dcloudio/uni-app'
-import { formatDateTime } from '@/utils/util'
-import {
-  balanceGetBillList
-} from '@/api/user'
-const main = useMainStore()
-const { isLogin } = storeToRefs(main)
-const title = ref('账单')
-const orderList = ref([[], [], [], []])
-const list = ref([
-				{
-					name: '全部'
-				},
-				{
-					name: '消费'
-				},
-				{
-					name: '充值'
-				},
-				{
-					name: '退款'
-				}
-			]
-)
-const list1 = ref([
-				{
-					name: '全部'
-				},
-				{
-					name: '消费'
-				}
-			]
-)
-const current = ref(0)
-const swiperCurrent = ref(0)
-const tabsHeight =ref(0)
-const dx = ref(0)
-const loadStatus = ref(['loadmore','loadmore','loadmore','loadmore'])
-const page = ref(1)
-const pageSize = ref(20)
-const tabs = ref()
-const cate = ref(0)
-
-onLoad((option) => {
-	console.log('cate:',option)
-	if(option.cate){
-		cate.value = option.cate
-	}
-	if(option.type){
-		swiperCurrent.value = option.type
-	}
-	
-	
-	getBill();
-})
-
-const getBill = async() => {
-	if (loadStatus.value[swiperCurrent.value] == 'loading') {
-		return;
-	}
-	loadStatus.value.splice(swiperCurrent.value,1,"loading")
-	let data = await balanceGetBillList({cate:cate.value,type:swiperCurrent.value,page:page.value,pagesize:pageSize.value});
-	if (page.value == 1 ){
-		orderList.value[swiperCurrent.value] = [];
-	}
-	if (data && data.length > 0) {
-		page.value++;
-		orderList.value[swiperCurrent.value] = orderList.value[swiperCurrent.value].concat(data);
-		
-		loadStatus.value.splice(swiperCurrent.value,1,"loadmore")
-	} else{
-		loadStatus.value.splice(swiperCurrent.value,1,"nomore")
-	}
-}
-const reachBottom = () => {
-	if (loadStatus.value[swiperCurrent.value] == 'nomore') {
-		return;
-	}
-	getBill();
-}
-// tab栏切换
-const change = (e) => {
-	swiperCurrent.value = e.index;
-	page.value = 1;
-}
-const transition = ({ detail: { dx } }) => {
-}
-const animationfinish = ({ detail }) => {
-	swiperCurrent.value = detail.current;
-	current.value = detail.current;
-	page.value = 1;
-	getBill();
-}
-
-
-</script>
-
-<style>
-/* #ifndef H5 */
-page {
-	height: 100%;
-	background-color: #f2f2f2;
-}
-/* #endif */
-</style>
-
-<style lang="scss" scoped>
-	
-.ellipsis {
-  width: 355rpx;
-  white-space: nowrap;
-  overflow: hidden;
-  text-overflow: ellipsis;
-}
-
-.order {
-	width: 710rpx;
-	background-color: #ffffff;
-	margin: 20rpx auto;
-	border-radius: 20rpx;
-	box-sizing: border-box;
-	padding: 20rpx;
-	font-size: 28rpx;
-	
-	.total {
-		display: inline-block;
-		text-align: right;
-		
-		.total-price {
-			font-size: 36rpx;
-		}
-		float: right;
-	}
-	.type {
-		display: inline-block;
-		
-	}
-	
-}
-.centre {
-	text-align: center;
-	margin: 200rpx auto;
-	font-size: 32rpx;
-	image {
-		width: 164rpx;
-		height: 164rpx;
-		border-radius: 50%;
-		margin-bottom: 20rpx;
-	}
-	.tips {
-		font-size: 24rpx;
-		color: #999999;
-		margin-top: 20rpx;
-	}
-	.btn {
-		margin: 80rpx auto;
-		width: 200rpx;
-		border-radius: 32rpx;
-		line-height: 64rpx;
-		color: #ffffff;
-		font-size: 26rpx;
-		background: linear-gradient(270deg, rgba(249, 116, 90, 1) 0%, rgba(255, 158, 1, 1) 100%);
-	}
-}
-.wrap {
-	display: flex;
-	flex-direction: column;
-	height: calc(100vh - var(--window-top));
-	width: 100%;
-}
-.swiper-box {
-	flex: 1;
-}
-.swiper-item {
-	height: 100%;
-}
-</style>
-

+ 0 - 435
yshop/yshop-drink-uniapp/pages/components/pages/cart/cart.vue

@@ -1,435 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  left-arrow
-	  @leftClick="$onClickLeft"
-	/>
-	<!-- #endif -->
-	<view  class="cart-popup">
-		 <view class="top flex justify-between">
-		   <text>我的菜单,已点{{ getCartGoodsNumber }}份(<text style="color:#f56c6c">待下单</text>)</text>
-		    <view class="flex align-center"><uv-icon name="trash" size="20"></uv-icon><text @tap="handleCartClear">清空购物车</text></view>
-		 </view>
-		 <scroll-view class="cart-list" scroll-y>
-		  <view class="wrapper">
-		   <uv-empty mode="car" v-if="cart.length == 0"></uv-empty>
-		   <view class="item" v-for="(item, index) in cart" :key="index">
-			<view class="left">
-				<view class="flex align-center">
-					<view>
-						<image mode="aspectFill" :src="item.image" style="width: 100rpx;height: 100rpx;"></image>
-					</view>
-					<view class="ml-2">
-						<view class="name">{{ item.name }}</view>
-						<view class="props">{{ item.valueStr }}</view>
-						<text class="price"><text class="font-size:16rpx">¥</text>{{ item.price }}</text>
-					</view>
-				</view>
-		<!-- 	 <view class="name">{{ item.name }}</view>
-			 <view class="props">{{ item.valueStr }}</view> -->
-			</view>
-			<!-- <view class="center">
-			 <text>¥{{ item.price }}</text>
-			</view> -->
-			<view class="right">
-			 <button type="default" plain size="mini" class="btn" hover-class="none"
-			  @tap="handleCartItemReduce(index)">
-			  <view class="iconfont iconsami-select"></view>
-			 </button>
-			 <view class="number">{{ item.number }}</view>
-			 <button type="primary" class="btn" size="min" hover-class="none"
-			  @tap="handleCartItemAdd(index)">
-			  <view class="iconfont iconadd-select"></view>
-			 </button>
-			</view>
-		   </view>		
-		  </view>
-		 </scroll-view>
-	 </view>
-	 <view  class="cart-popup" v-for="(cart,index2) in otherCart" :key="index2">
-	 	 <view class="top flex justify-between">
-	 	   <text>{{cart.uname}},已点{{ getCartNumber(cart.content) }}份(<text style="color:#f56c6c">待下单</text>)</text>
-	 	 </view>
-	 	 <scroll-view class="cart-list" scroll-y>
-	 	  <view class="wrapper">
-		  <uv-empty mode="car" v-if="cart.length == 0"></uv-empty>
-	 	   <view class="item" v-for="(item, index) in cart.content" :key="index">
-	 		<view class="left">
-	 		 <view class="name">{{ item.name }}</view>
-	 		 <view class="props">{{ item.valueStr }}</view>
-	 		</view>
-	 		<view class="center">
-	 		 <text>¥{{ item.price }}</text>
-	 		</view>
-	 		<view class="right">
-	 		 <button type="default" plain size="mini" class="btn" hover-class="none"
-	 		  >
-	 		  <view class="iconfont iconsami-select"></view>
-	 		 </button>
-	 		 <view class="number">{{ item.number }}</view>
-	 		 <button type="primary" class="btn" size="min" hover-class="none"
-	 		 >
-	 		  <view class="iconfont iconadd-select"></view>
-	 		 </button>
-	 		</view>
-	 	   </view>		
-	 	  </view>
-	 	 </scroll-view>
-	  </view>
-	 <!--已下单-->
-	 <view  class="cart-popup" v-if="orderData.appDeskOrderVo">
-	 	 <view class="top flex justify-between mb-2" style="background-color: #059825;color: #ffffff;">
-	 	   <text>已下单</text>
-		   <text>桌位:{{orderData.deskNumber}}</text>
-	 	 </view>
-	 	 <scroll-view class="cart-list" scroll-y>
-	 	  <view class="wrapper2">
-			  <view class="item" style="background-color: #fdf6ec;padding: 10rpx 30rpx;margin: 15rpx 0;border-radius: 20rpx;" v-for="(item, index) in orderData.appDeskOrderVo" :key="index">
-					<view class="flex align-center">
-						<view><uv-avatar :src="item.uavatar"></uv-avatar></view>
-						<view class="flex flex-1 justify-between font-size-sm text-color-assist">
-							<view class="flex flex-column ml-2">
-								<text>{{item.unickname}}</text>
-								<text>{{formatDateTime(item.addTime) }}</text>
-							</view>
-						</view>
-					</view>
-					<uv-divider text=""></uv-divider>
-					<view class="flex align-center" v-for="(good,index2) in item.appDeskOrderGoodsVos" :key="index2">
-						<view><image :src="good.image" style="width: 100rpx;height: 100rpx;"></image></view>
-						<view class="flex  flex-1 flex-column ml-2 font-size-sm">
-							<view class="flex justify-between"><text class="font-weight-bolder">{{good.title}}</text><text style="color: #f56c6c;">{{good.spec}}</text></view>
-							<view class="flex justify-between mt-1"><text>¥{{good.price}}</text><text>x{{good.number}}</text></view>
-						</view>
-				</view>
-			</view>		
-	 	  </view>
-	 	 </scroll-view>
-	  </view>
-	 <view class="fixed-bottom flex justify-between align-center bg-white ">
-	 	<view class="mx-2 ont-weight-light">应付:<text class="text-danger">¥{{ getCartGoodsPrice }}</text></view>
-	 	<view><uv-button type="warning" color="#059825" :customStyle="customStyle" size="large" text="去下单" @click="toPay"></uv-button></view>
-	 </view>
-	 <uv-toast ref="uToast"></uv-toast>
-</template>
-
-<script setup>
-import {
-  ref,
-  toRefs,
-  computed
-} from 'vue'
-import {
-  orderDetail,
-  getShareCart,
-  syncCart,
-  getDesk
-} from '@/api/order'
-import { useMainStore } from '@/store/store'
-import { storeToRefs } from 'pinia'
-import { onLoad,onShow,onUnload,onHide} from '@dcloudio/uni-app'
-import { formatDateTime } from '@/utils/util'
-import { useWebSocket } from '@/hooks/useWebSocket'
-const main = useMainStore()
-const { orderType,address, store,location,isLogin,desk,member } = storeToRefs(main)
-const title = ref('购物车')
-const cart = ref([])
-const uToast = ref()
-const orderData = ref({})
-const otherCart = ref([])
-const websocket = ref(null)
-const isReconnecting = ref(false)
-const combinedCart = ref([])
-onShow(() => {
-	cart.value = uni.getStorageSync('cart')
-	//如果是扫描点餐开启websocket
-	if(orderType.value == 'desk'){
-		websocketFun()
-		getOtherCart()
-		detail()
-	}
-	
-})
-
-onUnload(() => {
-	websocket.value?.close()
-})
-onHide(() => {
-	websocket.value?.close()
-})
-
-
-const getCartGoodsNumber = computed(() => { //计算购物车总数
-	if(cart.value.length == 0) {
-		return 0
-	}
-	return cart.value.reduce((acc, cur) => acc + cur.number, 0)
-})
-const getCartGoodsPrice = computed(() =>{ //计算购物车总价
-	if(combinedCart.value.length == 0) {
-		let price0 = cart.value.reduce((acc, cur) => acc + cur.number * cur.price, 0);
-		return parseFloat(price0).toFixed(2);
-	}
-	let price = combinedCart.value.reduce((acc, cur) => acc + cur.number * cur.price, 0);
-	return parseFloat(price).toFixed(2);
-})
-const customStyle = computed(() =>{ 
-	return {
-		  paddingLeft:'60rpx',
-		  paddingRight:'60rpx'
-		}
-})
-
-//获取订单
-const detail =  async() => {
-	let data = await getDesk({deskId:desk.value.id});
-	if(data && data.lastOrderNo){
-		orderData.value = await orderDetail(data.lastOrderNo);
-	}
-	
-}
-
-const getCartNumber = (cart) => {
-	if(cart.length == 0) {
-		return 0
-	}
-	return cart.reduce((acc, cur) => acc + cur.number, 0)
-}
-
-const handleCartItemAdd = (index) => {
-	cart.value[index].number += 1
-	uni.setStorageSync('cart', JSON.parse(JSON.stringify(cart.value)))
-	if(orderType.value == 'desk'){
-		noticeCartInfo({shopId: store.value.id,deskId:desk.value.id,content: cart.value})
-	}
-}
-const handleCartItemReduce = (index) => {
-	if (cart.value[index].number === 1) {
-		cart.value.splice(index, 1)
-	} else {
-		cart.value[index].number -= 1
-	}
-	uni.setStorageSync('cart', JSON.parse(JSON.stringify(cart.value)))
-	if(orderType.value == 'desk'){
-		noticeCartInfo({shopId: store.value.id,deskId:desk.value.id,content: cart.value})
-	}
-}
-const noticeCartInfo = async(cart) => {
-	await syncCart(cart)
-}
-const handleCartClear = () => { //清空购物车
-	uni.showModal({
-		title: '提示',
-		content: '确定清空购物车么',
-		success: ({
-			confirm
-		}) => {
-			if (confirm) {
-				cart.value = []
-				uni.setStorageSync('cart', JSON.parse(JSON.stringify(cart.value)))
-				if(orderType.value == 'desk'){
-					getOtherCart()
-					noticeCartInfo({shopId: store.value.id,deskId:desk.value.id,content: cart.value})
-				}
-			}
-		}
-	})
-}
-const toPay = () => {
-	
-	if(cart.value.length == 0){
-		uToast.value.show({message:'请先去点餐哦',type: 'error'});
-		return;
-	}
-
-	if (!isLogin.value) {
-		uni.navigateTo({
-			url: '/pages/components/pages/login/login'
-		})
-		return
-	} else {
-		if (store.value.status == 0) {
-			uToast.value.show({message:'不在店铺营业时间内',type: 'error'});
-			return;
-		}
-		// 判断当前是否在配送范围内
-		if (orderType.value == 'takeout' && store.value.distance < store.value.far) {
-			uToast.value.show({message:'选中的地址不在配送范围',type: 'error'});
-			return;
-		}
-	
-		uni.showLoading({
-			title: '加载中'
-		})
-		if(combinedCart.value.length > 0){
-			uni.setStorageSync('cart', JSON.parse(JSON.stringify(combinedCart.value)))
-		}else{
-			uni.setStorageSync('cart', JSON.parse(JSON.stringify(cart.value)))
-		}
-		
-
-		uni.navigateTo({
-			url: '/pages/components/pages/pay/pay'
-		})
-	}
-
-	uni.hideLoading()
-}
-const getOtherCart = async() => {
-	let data = await getShareCart({shopId:store.value.id,deskId:desk.value.id})
-	if(data){
-		otherCart.value = data
-		let newOtherCart = []
-		otherCart.value.forEach((item, index) => {
-			item.content.forEach((item2, index2) => {
-				newOtherCart.push(item2);
-			});
-		});
-		combinedCart.value = [...newOtherCart, ...cart.value];
-	}
-}
-const websocketFun = () => {
-	 websocket.value = useWebSocket({
-	    // 连接成功
-	    onConnected: async () => {},
-	    // 收到消息
-	    onMessage: async (data) => {
-		  if(data.type == 'sync-menu-msg'){
-			  let content = JSON.parse(data.content)
-			  console.log('content:',content);
-			  console.log('deskId:',content.deskId);
-			  console.log('cartMsgVoList:',content.cartMsgVoList);
-			  if((store.value.id == content.shopId) && (desk.value.id == content.deskId)){
-				  if(content.uid != member.value.id){
-					  const index = otherCart.value.findIndex(item => {
-					  	return (item.shopId === content.shopId) && (item.deskId === content.deskId) && (item.uid === content.uid)
-					  })
-					  if(index > -1){
-						  otherCart.value[index] = content
-					  }else{
-						  otherCart.value.push(content)
-					  }	  
-					  
-					  let newOtherCart = []
-					  otherCart.value.forEach((item, index) => {
-					  	item.content.forEach((item2, index2) => {
-					  		newOtherCart.push(item2);
-					  	});
-					  });
-					  combinedCart.value = [...newOtherCart, ...combinedCart.value];
-				  }
-			  }
-		  }
-	    },
-	});
-}
-</script>
-
-<style lang="scss" scoped>
-.cart-popup {
-		.top {
-			background-color: $bg-color-primary;
-			//color: $color-primary;
-			color: #5A5B5C;
-			padding: 10rpx 30rpx;
-			font-size: 24rpx;
-			text-align: right;
-		}
-		.cart-list {
-			background-color: #ffffff;
-			width: 100%;
-			overflow: hidden;
-			min-height: 1vh;
-			max-height: 60vh;
-			
-			.wrapper2 {
-				height: 100%;
-				//display: flex;
-				flex-direction: column;
-				padding: 0 10rpx;
-				margin-bottom: 156rpx;
-			}
-	
-			.wrapper {
-				height: 100%;
-				display: flex;
-				flex-direction: column;
-				padding: 0 30rpx;
-				margin-bottom: 100rpx;
-	
-				.item {
-					display: flex;
-					justify-content: space-between;
-					align-items: center;
-					padding: 30rpx 0;
-					position: relative;
-	
-					&::after {
-						content: ' ';
-						position: absolute;
-						bottom: 0;
-						left: 0;
-						width: 100%;
-						background-color: $border-color;
-						height: 2rpx;
-						transform: scaleY(0.6);
-					}
-	
-					.left {
-						flex: 1;
-						display: flex;
-						flex-direction: column;
-						overflow: hidden;
-						margin-right: 30rpx;
-	
-						.name {
-							font-size: $font-size-sm;
-							color: $text-color-base;
-						}
-						.props {
-							color: $text-color-assist;
-							font-size: 24rpx;
-							overflow: hidden;
-							text-overflow: ellipsis;
-							white-space: nowrap;
-						}
-						.price{
-							font-size: $font-size-sm;
-							color: #e45656;
-						}
-					}
-	
-					.center {
-						margin-right: 120rpx;
-						font-size: $font-size-base;
-					}
-	
-					.right {
-						display: flex;
-						align-items: center;
-						justify-content: space-between;
-	
-						.btn {
-							width: 46rpx;
-							height: 46rpx;
-							border-radius: 100%;
-							padding: 0;
-							text-align: center;
-							line-height: 46rpx;
-						}
-	
-						.number {
-							font-size: $font-size-base;
-							width: 46rpx;
-							height: 46rpx;
-							text-align: center;
-							line-height: 46rpx;
-						}
-					}
-				}
-			}
-		}
-	}
-</style>

+ 0 - 551
yshop/yshop-drink-uniapp/pages/components/pages/coupons/coupons.vue

@@ -1,551 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  left-arrow
-	  @leftClick="$onClickLeft"
-	/>
-	<!-- #endif -->
-	<view class="container position-relative w-100 h-100 overflow-hidden">
-		<view class="exchange-box" v-if='current == 4'>
-			<view class="input-box">
-				<uv-search placeholder="请输入兑换码" v-model="exchange_code" @custom="exchange"></uv-search>
-				<!-- <uv-input placeholder="请输入兑换码" v-model="exchange_code" ></uv-input>
-				<button type="primary" @click="exchange">兑换</button> -->
-			</view>
-		</view>
-		<view class="tabbar bg-white mb-1" v-else>
-			<uv-tabs :list="tabs" :current="current" @change="change" keyName="title" :scrollable="false"></uv-tabs>
-		</view>
-		<view class="flex-fill">
-			<scroll-view scroll-y class="coupon-list" @scrolltolower="getCoupons(activeTabIndex)">
-				<view class="wrapper"  v-if="4 != current">
-					<uv-empty v-if="myCoupons.length == 0" mode="list"></uv-empty>
-					<view class="coupon" v-for="(item, index) in myCoupons" :key="index" @tap="openDetailModal(item,index)">
-						<view class="taobao">
-							<view class="ticket">
-								<view class="left">
-									<view class="introduce">
-										<view class="type flex align-center" style="position: relative;">{{ item.title }}
-											<uv-badge shape="horn" :absolute="true" :offset="[0,0]" type="error" :value="getType(item.type)"></uv-badge>
-										</view>
-										<view class="top">
-											<view>
-												满{{item.least}}减{{item.value}}
-											</view>
-										</view>
-										
-										<view class="date u-line-1">{{formatDateTime(item.startTime, 'yyyy-MM-dd')}}-{{formatDateTime(item.endTime, 'yyyy-MM-dd')}}</view>
-									</view>
-								</view>
-								<view class="right">
-									<view class="big">¥<text style="font-size: 40rpx;">{{item.value}}</text></view>
-									<view v-if="item.status == 0" class="use immediate-use" :round="true" @tap="useCouponWith(item)" >立即使用</view>
-									<view v-else class="used">已使用</view>
-								</view>
-							</view>
-						</view>
-					</view>
-				</view>
-				<view class="wrapper" v-if="4 == current">
-					<uv-empty v-if="notCoupons.length == 0" mode="list"></uv-empty>
-					<view class="coupon" v-for="(item, index) in notCoupons" :key="index" @tap="openDetailModal(item,index)">
-						<view class="taobao">
-							<view class="ticket">
-								<view class="left">
-									<view class="introduce">
-										<view class="type flex" >
-										    <text>{{ item.title }}</text>
-											<view style="position: relative;width: 65rpx;">
-												<uv-badge shape="horn" :absolute="true" :offset="[0,0]" type="error"  :value="getType(item.type)"></uv-badge>
-											</view>
-											
-										</view>
-										<view class="top">					
-											<view>
-												满{{item.least}}减{{item.value}}
-											</view>
-										</view>
-										<view class="date u-line-1">{{formatDateTime(item.startTime, 'yyyy-MM-dd')}}-{{formatDateTime(item.endTime, 'yyyy-MM-dd')}}</view>
-									</view>
-								</view>
-								<view class="right" >
-									<view class="big">¥<text style="font-size: 40rpx;">{{item.value}}</text></view>
-									<view  class="use immediate-use" :round="true" v-if="item.isReceive == 0" @tap="receive(item, index)" >立即领取</view>
-									<view v-else class="used immediate-use">已领取</view>
-								</view>
-							</view>
-						</view>
-					</view>
-				</view>
-			</scroll-view>
-		</view>
-		<modal custom :show="detailModalVisible" @cancel="closeDetailModal" width="90%">
-			<view class="modal-content">
-				<view class="d-flex font-size-extra-lg text-color-base just-content-center mb-20">{{ coupon.title }}</view>
-				<view class="d-flex font-size-sm text-color-base mb-20">
-					有效期:{{formatDateTime(coupon.startTime, 'yyyy-MM-dd')}}-{{formatDateTime(coupon.endTime, 'yyyy-MM-dd')}}
-				</view>
-				<view class="d-flex font-size-sm text-color-base mb-20">
-					领取时间:{{formatDateTime(coupon.createTime)}}
-				</view>
-				<view class="d-flex font-size-sm text-color-base mb-20">
-					券价值:满{{ coupon.least }}减{{ coupon.value }}
-				</view>
-				<view class="d-flex font-size-sm text-color-base mb-20" v-if="activeTabIndex == 1">
-					每人限领:{{ coupon.limit }} 张
-				</view>
-				<view class="d-flex font-size-sm text-color-base mb-20">
-					适用范围:{{typeInfo(coupon.type)}}
-				</view>
-				<view class="d-flex font-size-sm text-color-base mb-20">
-					适用店铺:{{coupon.shopName}}
-				</view>
-				<view class="d-flex align-items-center just-content-center">
-					<button type="primary" @tap="closeDetailModal" class="use-coupon-btn">关闭</button>
-				</view>
-				<!-- <view class="d-flex align-items-center just-content-center" v-if="activeTabIndex == 1">
-					<button type="primary" @tap="receive(coupon, couponIndex)" class="use-coupon-btn">立即领取</button>
-				</view> -->
-			</view>
-		</modal>
-		
-		<!--轻提示-->
-		<uv-toast ref="uToast"></uv-toast>
-	</view>
-</template>
-
-<script setup>
-import {
-  ref,
-  watch
-} from 'vue'
-import { useMainStore } from '@/store/store'
-import { storeToRefs } from 'pinia'
-import { onLoad,onShow ,onPullDownRefresh,onHide} from '@dcloudio/uni-app'
-import { formatDateTime,kmUnit } from '@/utils/util'
-import {
-  couponReceive,
-  couponMine,
-  couponIndexApi
-} from '@/api/coupon'
-const main = useMainStore()
-const { isLogin } = storeToRefs(main)
-const title = ref('优惠券')
-
-const tabs = ref([
-	{title: '未使用', page:1, pagesize:10,
-		coupons: []
-	},
-	{title: '已使用', page:1, pagesize:10,
-		coupons: []
-	},
-	{title: '已过期', page:1, pagesize:10,
-		coupons: []
-	}
-])
-const activeTabIndex = ref(0)
-const detailModalVisible = ref(false)
-const coupon = ref({})
-const couponIndex = ref(0)
-const exchange_code = ref('')
-const uToast = ref()
-const myCoupons = ref([])
-const notCoupons = ref([])
-const current = ref(0)
-//const type =
-
-onLoad((option) => {
-	if(!isLogin.value) {
-		uni.navigateTo({url: '/pages/components/pages/login/login'})
-	}
-	
-	if(option.current) {
-		
-		current.value = option.current
-		
-	}
-	console.log('current.value:',current.value)
-})
-onShow(() => {
-	getCoupons(current.value)
-})
-onPullDownRefresh(() => {
-	if(activeTabIndex.value == 0) {
-		myCoupons.value = []
-	}
-	if(activeTabIndex.value == 1) {
-		notCoupons.value = []
-	}
-	tabs.value[activeTabIndex.value].page = 1;
-	getCoupons(activeTabIndex.value)
-})
-watch(activeTabIndex, () => {
-   getCoupons(activeTabIndex.value)
-})
-
-// tab栏切换
-const change = (e) => {
-	current.value = e.index
-	getCoupons()
-}
-
-const getType = (type)=>{
-	if(type == 1){
-		return '自取'
-	}else if(type == 2){
-		return '外卖'
-	}else{
-		return '通用'
-	}
-}
-
-// 兑换
-const exchange = async() => {
-	let data = await couponReceive({code:exchange_code.value});
-	if (data) {
-		uToast.value.show({
-			message: '兑换成功',
-			type: 'success'
-		});
-		tabs.value[0].coupons = [];
-		tabs.value[0].page = 1;
-		getCoupons(0)
-		tabs.value[1].coupons = [];
-		tabs.value[1].page = 1;
-		getCoupons(1)
-	}
-}
-// 使用范围
-const typeInfo = (type) => {
-	if (type == 0) {
-		return '通用'
-	}
-	if (type == 1) {
-		return '自取'
-	}
-	if (type == 2) {
-		return '外卖'
-	}
-}
-const handleTab = (index) => {
-	activeTabIndex.value = index
-}
-const getCoupons = async(type) => {
-	let page = 1;
-	let pagesize = 10;
-	// 我的优惠券
-	let data = [];
-	// 未领优惠券
-	if (type == 4) {
-		notCoupons.value = await couponIndexApi({page:page,pagesize:pagesize});
-	}else{
-		myCoupons.value = await couponMine({page:page,pagesize:pagesize,type:current.value});
-	}
-	uni.stopPullDownRefresh();
-}
-const openDetailModal = (coupon2,index) => {
-	couponIndex.value = index;
-	coupon.value = coupon2
-	detailModalVisible.value = true
-}
-const useCouponWith = (coupon) => {
-	//coupon.value = coupon
-	useCoupon();
-}
-const closeDetailModal = () => {
-	detailModalVisible.value = false
-	coupon.value = {}
-}
-const useCoupon = () => {
-	uni.switchTab({
-		url: '/pages/menu/menu'
-	})
-}
-const showTip1 = () => {
-	uni.showToast({
-		title: '您暂时还没有赠送中卡券哦~',
-		icon: 'none'
-	})
-}
-const showTip2 = () => {
-	uni.showToast({
-		title: '您暂时还没有券码哦~',
-		icon: 'none'
-	})
-}
-// 领取优惠券
-const receive = async(coupon,index) => {
-	let data = await couponReceive({id:coupon.id});
-	if (data) {
-		uToast.value.show({
-			message: '领取成功',
-			type: 'success'
-		});
-		detailModalVisible.value = false
-		
-		getCoupons(4)
-	}
-}
-
-
-</script>
-
-<style lang="scss" scoped>
-/* #ifdef H5 */
-page {
-	height: 100%;
-}
-/* #endif */
-
-.container {
-	display: flex;
-	flex-direction: column;
-}
-
-.exchange-box {
-	flex-shrink: 0;
-	height: 100rpx;
-	background-color: #ffffff;
-	display: flex;
-	flex-direction: column;
-	align-items: center;
-	justify-content: center;
-
-	.input-box {
-		display: flex;
-		align-items: stretch;
-		width: 70%;
-		flex-shrink: 0;
-		input {
-			flex: 1;
-			height: 80rpx;
-			border: 1rpx solid #eee;
-			// border-right: 0;
-			border-radius: 8rpx 0 0 8rpx;
-			// padding: 20rpx;
-			font-size: $font-size-base;
-			color: $text-color-base;
-		}
-		button {
-			border-radius: 0 8rpx 8rpx 0;
-			display: flex;
-			align-items: center;
-		}
-	}
-}
-
-
-
-.bottom-box {
-	height: 80rpx;
-	flex-shrink: 0;
-	.item {
-		padding: 0 20rpx;
-		position: relative;
-		
-		&::after {
-			content: " ";
-			border-right: 1rpx solid $text-color-assist;
-			height: 100%;
-			position: absolute;
-			right: 0;
-			top: 0;
-			transform: scaleX(0.5) scaleY(0.8);
-		}
-		
-		&:nth-last-child(1)::after {
-			border-right: 0;
-		}
-	}
-}
-
-.coupon-list {
-	height: calc(100vh - 120rpx - 200rpx);
-	/* #ifdef H5 */
-	height: calc(100vh - 120rpx - 200rpx - 44px);
-	/* #endif */
-}
-
-.wrapper {
-	padding: 15rpx 20rpx 0px 20rpx;
-	display: flex;
-	flex-direction: column;
-	
-	.coupon {
-		display: flex;
-		flex-direction: column;
-		background-color: #FFFFFF;
-		margin-bottom: 15rpx;
-		//padding: 0 30rpx;
-		border-radius: 6rpx;
-		box-shadow: 0 10rpx 10rpx -10rpx rgba(15, 15, 15, 0.1);
-		position: relative;
-		
-		&::before {
-			content: "";
-			position: absolute;
-			background-color: $bg-color;
-			width: 30rpx;
-			height: 30rpx;
-			bottom: 65rpx;
-			left: -15rpx;
-			border-radius: 100%;
-		}
-		
-		&::after {
-			content: "";
-			position: absolute;
-			background-color: $bg-color;
-			width: 30rpx;
-			height: 30rpx;
-			bottom: 65rpx;
-			right: -15rpx;
-			border-radius: 100%;
-		}
-		
-		.detail {
-			padding: 20rpx 0;
-			position: relative;
-
-		    &::after {
-				content: '';
-				position: absolute;
-				left: 0;
-				right: 0;
-				bottom: 0;
-				border-bottom: 1rpx dashed #c6c6c6;
-				transform: scaleY(0.5);
-			}
-			
-			.coupon-img {
-				width: 150rpx;
-				height: 150rpx;
-				margin-right: 40rpx;
-			}
-		}
-	}
-}
-
-.use-coupon-btn {
-	width: 95%;
-	border-radius: 50rem !important;
-}
-
-
-.taobao {
-	background-color: white;
-	.title {
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		margin-bottom: 20rpx;
-		font-size: 30rpx;
-		.left {
-			display: flex;
-			align-items: center;
-		}
-		.store {
-			font-weight: 500;
-		}
-		.buddha {
-			width: 70rpx;
-			height: 70rpx;
-			border-radius: 10rpx;
-			margin-right: 10rpx;
-		}
-		.entrance {
-			color: $uv-info;
-			border: solid 2rpx $uv-info;
-			line-height: 48rpx;
-			padding: 0 30rpx;
-			background: none;
-			border-radius: 15px;
-		}
-	}
-	.ticket {
-		display: flex;
-		.left {
-			width: 70%;
-			padding: 20rpx;
-			background-color: white;//rgb(255, 245, 244);
-			border-radius: 20rpx;
-			border-right: dashed 2rpx rgb(224, 215, 211);
-			display: flex;
-			.picture {
-				//width: 172rpx;
-				border-radius: 20rpx;
-				width: 190rpx;
-				height: 190rpx;
-			}
-			.introduce {
-				margin-left: 10rpx;
-				.top{
-					color:$uv-warning;
-					font-size: 28rpx;
-					
-				}
-				.type{
-					font-size: 38rpx;
-					color: $uv-info-dark;
-					font-weight: bold;
-					margin-bottom: 10rpx;
-				}
-				.date{
-					margin-top: 10rpx;
-					font-size: 20rpx;
-					color: $uv-info-dark;
-				}
-			}
-		}
-		.right {
-			width: 30%;
-			padding: 40rpx 20rpx;
-			background-color: white;//rgb(255, 245, 244);
-			border-radius: 20rpx;
-			display: flex;
-			flex-direction: column;
-			align-items: center;
-			.big{
-				font-size: 20rpx;
-				font-weight: bold;
-				margin-bottom: 20rpx;
-				color:$uv-warning;
-			}
-			.use {
-				height: auto;
-				padding: 0 20rpx;
-				font-size: 24rpx;
-				border-radius: 40rpx;
-				color: #ffffff!important;
-				background-color: $uv-warning!important;
-				line-height: 40rpx;
-				color: rgb(117, 142, 165);
-				margin-left: 20rpx;
-			}
-			.used {
-				height: auto;
-				padding: 0 20rpx;
-				font-size: 24rpx;
-				border-radius: 40rpx;
-				color: #ffffff!important;
-				background-color: $uv-info-dark!important;
-				line-height: 40rpx;
-				color: rgb(117, 142, 165);
-				margin-left: 20rpx;
-			}
-		}
-		.right_log {
-			text-align: center;
-			width: 30%;
-			padding: 80rpx 0rpx;
-			background-color: white;//rgb(255, 245, 244);
-			border-radius: 20rpx;
-			
-			align-items: center;
-			
-		}
-	}
-}
-</style>

+ 0 - 354
yshop/yshop-drink-uniapp/pages/components/pages/due/detail.vue

@@ -1,354 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  left-arrow
-	  @leftClick="$onClickLeft"
-	/>
-	<!-- #endif -->
-	<view class="" v-if="product.id">
-		<view class="carousel">
-			<swiper indicator-dots circular=true duration="400">
-				<swiper-item class="swiper-item">
-					<view class="image-wrapper">
-						<image :src="product.image" class="loaded"  mode="aspectFill"></image>
-					</view>
-				</swiper-item>
-			</swiper>
-		</view>
-
-		<view class="introduce-section">
-			<text class="title">{{product.title}}</text>
-			<view class="price-box bot-row">
-				<text>桌号:{{product.number}}</text>
-			</view>
-		</view>
-
-		<view class="detail-desc">
-			<view class="font font-weight-bolder">预约时间</view>
-			<view class="mt-3">
-				<uv-tabs :list="dayTime" keyName = "dayStr" @click="click" 	
-				lineColor=""
-				lineHeight="0"
-				:inactiveStyle="{
-					padding:'10rpx 30rpx 10rpx 30rpx',
-					backgroundColor:'#f8f9fa',
-					borderRadius: '15rpx',
-					transform: 'scale(1.05)'
-				}"
-				:activeStyle="{
-					padding:'10rpx 30rpx 10rpx 30rpx',
-					backgroundColor:'#ffcc00',
-					borderRadius: '15rpx',
-					color: '#ffffff',
-					fontWeight: 'bold',
-					transform: 'scale(1.05)'
-				}"></uv-tabs>
-			</view>
-			<view class="flex flex-wrap">
-				<view class="p-2" v-for="(item,i) in dayTime[index].timeRule" :key="i">
-					<uv-button :custom-style="i == selectIndex? customStyle : checkStyle" :disabled="item.status == 1" type ="warning" :plain="true"  :text="item.tag+item.time + (item.status == 1 ? '不可预约' : '')" @click="selectDue(item,i)"></uv-button>
-				</view>
-			</view>
-		</view>
-
-		<!-- 底部操作菜单 -->
-		<view class="fixed-bottom flex bg-white justify-between align-center m-auto due-btn" style="z-index: 997;">
-			<text class="p-3">预约时间:<text class="text-warning">{{msg}}</text></text>
-			<text class="p-3 bg-warning submit-btn" @click="confirm">立即预约</text>
-		</view>
-
-		<uv-toast ref="uToast" />
-		<uv-popup ref="popup" mode="bottom" closeable="true" custom-style="height: 600rpx;">
-			<view class="p-3">
-				<view class="text-center mb-2">预约</view>
-				<uv-form labelPosition="left"  ref="formRef" labelWidth="130rpx">
-					<uv-form-item label="到店时间" borderBottom >
-						<uv-input v-model="form.reachTime" border="none" placeholder="请输入到店时间" @focus="setShow()">
-						</uv-input>
-						<uv-datetime-picker ref="datetimePicker" v-model="value" mode="time" @confirm="confirm2" itemHeight="30">
-						</uv-datetime-picker>
-					</uv-form-item>
-					<uv-form-item label="就餐人数" borderBottom >
-						<uv-input type="number" v-model="form.deskPeople" @input="checkNumber" placeholder="就餐人数1-9之间" border="none">
-						</uv-input>
-					</uv-form-item>
-					<uv-form-item label="姓名" borderBottom >
-						<uv-input v-model="form.realName"  placeholder="请输入姓名" border="none">
-						</uv-input>
-					</uv-form-item>
-					<uv-form-item label="手机号" borderBottom>
-						<uv-input v-model="form.userPhone" border="none" placeholder="请输入手机号">
-						</uv-input>
-					</uv-form-item>
-					<uv-button type="primary" text="提交" customStyle="margin-top: 10px" @click="submit"></uv-button>
-				</uv-form>
-			</view>
-		</uv-popup>
-	</view>
-	<uv-loading-icon v-else></uv-loading-icon>
-</template>
-
-<script setup>
-import {
-  ref,
-  computed,
-  getCurrentInstance
-} from 'vue'
-import { onReachBottom,onLoad,onPullDownRefresh} from '@dcloudio/uni-app'
-import {
-  getDetail,
-  createOrder
-} from '@/api/due'
-import { useMainStore } from '@/store/store'
-import { storeToRefs } from 'pinia'
-import cookie from '@/utils/cookie'
-const main = useMainStore()
-const { isLogin } = storeToRefs(main)
-const { proxy } = getCurrentInstance();
-
-const title = ref("预约详情")
-const specClass = ref('none')
-const product = ref({})
-const form = ref( 
-	{
-		deskId: null,
-		dueTime:null,
-		deskPeople: null,
-		reachTime: '',
-		realName: '',
-		userPhone: ''
-	}
-)
-const dayTime = ref([
-	{
-		timeRule:[]
-	}
-])
-const index = ref(0)
-
-const customStyle = ref(
-	{
-			color: '#3c9cff',
-			borderColor:'#3c9cff'
-	}
-)
-
-const checkStyle = ref({})
-const selectIndex = ref(-1)
-const msg = ref('')
-const popup = ref()
-const formRef = ref()
-
-
-onPullDownRefresh(() => {
-	detail(id.value);
-})
-
-onLoad((options) => {
-   detail(options.id);
-   form.value.deskId = options.id
-})
-
-const datetimePicker = ref()
-const setShow = () =>{
-	datetimePicker.value.open()
-}
-const confirm = () => {
-	popup.value.open()
-}
-
-const confirm2 = (e) =>{
-	form.value.reachTime = e.value	
-}
-
-// 获取商品详情
-const  detail = async(id) => {
-	let data = await getDetail({
-		deskId: id
-	});
-	uni.stopPullDownRefresh();
-	product.value = data;
-	dayTime.value = data.dayTime
-}
-
-const click = (e) => {
-	index.value = e.index
-	selectIndex.value = -1
-}
-
-const selectDue = (item,i) => {
-	selectIndex.value = i
-	
-	msg.value = dayTime.value[index.value].dayStr + ' ' + item.time
-	form.value.dueTime = item.timeDate
-}
-
-const submit = async() =>{
-	if(!isLogin.value) {
-		uni.navigateTo({url: '/pages/components/pages/login/login'})
-	}
-	if(!form.value.dueTime){
-		uni.showToast({
-			icon: 'error',
-			title: '请选择预约时间'
-		})
-		return
-	}
-	
-	if(form.value.deskPeople <= 0 || form.value.deskPeople >= 10){
-		uni.showToast({
-			icon: 'none',
-			title: '就餐人数必须大于0小于10人'
-		})
-		return
-	}
-	
-	
-	if(form.value.reachTime == ''){
-		uni.showToast({
-			icon: 'error',
-			title: '请选择到店时间'
-		})
-		
-		return
-	}
-
-	if(form.value.realName == ''){
-		uni.showToast({
-			icon: 'error',
-			title: '请填写名字'
-		})
-		
-		return
-	}
-	
-	if(form.value.userPhone == ''){
-		uni.showToast({
-			icon: 'error',
-			title: '请填写电话'
-		})
-		return
-	}
-	let data = await createOrder(form.value)
-	// uni.navigateTo({
-	// 	url: '/pages/components/pages/orders/detail?id=' + data
-	// })
-	uni.reLaunch({
-		url: '/pages/components/pages/due/orders'
-	})
-	
-	
-}
-
-
-
-
-
-</script>
-
-<style lang='scss'>
-	.due-btn {
-		width: 700rpx;
-		border-radius: 50rpx;
-		bottom: 20rpx;
-		
-		.submit-btn{
-			 border-top-right-radius: 50rpx;
-			 border-bottom-right-radius: 50rpx;
-			 color: #ffffff;
-		}
-	}
-	.icon-you {
-		color: #888;
-	}
-
-	.carousel {
-		height: 722upx;
-		position: relative;
-
-		swiper {
-			height: 100%;
-		}
-
-		.image-wrapper {
-			width: 100%;
-			height: 100%;
-		}
-
-		.swiper-item {
-			display: flex;
-			justify-content: center;
-			align-content: center;
-			height: 750upx;
-			overflow: hidden;
-
-			image {
-				width: 100%;
-				height: 100%;
-			}
-		}
-
-	}
-
-	/* 标题简介 */
-	.introduce-section {
-		background: #fff;
-		padding: 20upx 30upx;
-
-		.title {
-			font-size: 32upx;
-			color: #555555;
-			height: 50upx;
-			line-height: 50upx;
-			font-weight: bold;
-		}
-
-		.price-box {
-			display: flex;
-			align-items: baseline;
-			height: 64upx;
-			padding: 10upx 0;
-			font-size: 30rpx;
-			color: #5A5B5C;
-		}
-
-		.price {
-			font-size: 35rpx;
-		}
-
-		.bot-row {
-			display: flex;
-			align-items: center;
-
-			text {
-				flex: 1;
-			}
-		}
-	}
-	
-	.btn {
-		height: 100rpx;
-		line-height: 100rpx;
-		border-radius: 100rpx;
-		background: #ffcc00;
-		font-size: 40rpx;
-		color: #fff;
-		margin: 30upx auto 20upx;
-		
-	
-	}
-
-	/*  详情 */
-	.detail-desc {
-		background: #fff;
-		margin-top: 16upx;
-		margin-bottom: 200rpx;
-		padding: 20rpx;
-	}
-
-
-	
-
-</style>

+ 0 - 296
yshop/yshop-drink-uniapp/pages/components/pages/due/index.vue

@@ -1,296 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  left-arrow
-	  @leftClick="$onClickLeft"
-	/>
-	<!-- #endif -->
-	
-	<view v-if="!loading">
-		<view class="nav">
-			<view class="header">
-				<view class="mr-1"><image :src="store.image" style="width:80rpx ; height: 80rpx; "></image></view>
-				<view class="left"  style="">
-					<view class="store-name" @click="selectShop()">
-						<text>{{ store.name }}</text>
-						<view class="iconfont iconarrow-right"></view>
-					</view>
-					<view class="store-location">
-						<text>距离您 {{kmUnit(store.dis)}}</text>
-					</view>
-				</view>
-				<view class="right" v-if="store.status == 1">
-					<view class="dinein active" >
-						<text>预约</text>
-					</view>
-				</view>
-				<view class="right" v-else>
-					<view class="takeout">
-						<text>已歇业</text>
-					</view>
-				</view>
-			</view>
-		</view>
-		<uv-vtabs 
-				:chain="chain"
-				:list="list"
-		
-				@change="change">
-				<uv-vtabs-item>
-					<view 
-						class="item p-2"
-						v-for="(item2,index2) in list2"
-						:key="index2">
-						<view class="item-content flex align-center">
-							<view class="pr-2"><image :src="item2.image ? item2.image:'/static/images/logo.png'" mode="aspectFill" style="width: 200rpx;height: 200rpx;"></image></view>
-							<view>
-								<view class="font-size-medium text-color-base font-size-lg font-weight-bolder">{{item2.title}}</view>
-								<view class="font-size-sm mt-1 text-color-assist">桌号:{{item2.number}}</view>
-								<view class="mt-1"  @click="gopage('/pages/components/pages/due/detail?id='+item2.id)"><uv-button type="warning" shape="circle" size="mini" text="预约"></uv-button></view>
-							</view>
-						</view>
-					</view>
-				</uv-vtabs-item>
-		</uv-vtabs>
-	</view>
-	<view class="loading" v-else>
-		<uv-loading-icon  color="#DA5650" size=40 mode="circle" ></uv-loading-icon>
-		<button type="primary" style="z-index: 3001;position: absolute;top: 650rpx;left:260rpx;" @click="init"
-			v-if="!store.id">定位最近的门店</button>
-	</view>
-	<uv-tabbar :value="value" @change="index=>value = index" activeColor="#059825">
-		<uv-tabbar-item text="预约" icon="home"></uv-tabbar-item>
-		<uv-tabbar-item text="预约订单" icon="order" @click="gopage('/pages/components/pages/due/orders')"></uv-tabbar-item>
-		<uv-tabbar-item text="返回首页" icon="arrow-leftward" @click="gopage2('/pages/index/index')"></uv-tabbar-item>
-	</uv-tabbar>
-</template>
-
-<script setup>
-import {
-  ref,
-  computed
-} from 'vue'
-import { useMainStore } from '@/store/store'
-import { storeToRefs } from 'pinia'
-import { onLoad,onShow ,onPullDownRefresh,onHide} from '@dcloudio/uni-app'
-import { formatDateTime,kmUnit } from '@/utils/util'
-import {
-  getList
-} from '@/api/due'
-import {
-  shopNearby
-} from '@/api/goods'
-const main = useMainStore()
-const { orderType,store,isLogin,location} = storeToRefs(main)
-const title = ref('预约')
-const list = ref([])
-const value = ref(0)
-const chain = ref(false)
-const loading = ref(true) 
-
-
-onLoad(() => {
-	init()
-})
-
-const list2 = computed(() => { //计算购物车总数
-	const _list = list.value[value.value]?.childrens
-	return _list ? _list : []
-})
-
-uni.$on('refreshMenu', () => {
-	// 在这里执行onLoad逻辑
-	init()
-})
-
-const change = (index) =>{
-	value.value = index;
-}
-
-
-const  init = async() => { //页面初始化
-	loading.value = true;
-	let error = {},
-		result = location.value
-	if (!location.value.hasOwnProperty('latitude')) {
-		  uni.getLocation(({
-			 type: 'wgs84',
-			 success: function (res) {
-				result = {
-					latitude: res.latitude,
-					longitude: res.longitude
-				};
-				getShopList(result)
-			 },
-			 fail: function (res) {
-			   uni.showToast({
-			     title: '获取位置失败,请检查是否开启相关权限',
-			     duration: 2000,
-			     icon: 'error'
-			   });
-			   // 默认地为你为北京地址
-			   result = {
-			   	latitude: 39.919990,
-			   	longitude: 116.456270
-			   };
-			   getShopList(result)
-			 },
-			 complete: function (res) {
-			 }
-		}));
-		
-		return
-	}
-	
-	getShopList(result)
-   
-	
-}
-
-const getShopList = async(res) => {
-	if (res) {
-		main.SET_LOCATION(res);
-	
-		let shop_id = 0;
-		if (store.value.id) {
-			shop_id = store.value.id;
-		}
-	
-		let shop = await shopNearby({
-			lat: res.latitude,
-			lng: res.longitude,
-			shop_id: shop_id,
-			kw: ''
-		});
-		if (shop) {
-			// 设置店铺信息
-			main.SET_STORE(shop);
-			let desks = await getList({
-				shopId: shop.id
-			});
-			list.value = desks
-			loading.value = false;
-		}
-	}
-}
-
-const selectShop = () => {
-	uni.navigateTo({
-		url: '/pages/components/pages/shop/shop?type=2'
-	})
-}
-
-const gopage = (url) =>{
-	uni.navigateTo({
-		url
-	})
-}
-const gopage2 = (url) =>{
-	uni.switchTab({
-		url
-	}) 
-
-}
-
-</script>
-
-<style lang="scss" scoped>
-	.nav {
-		width: 100%;
-		//height: 212rpx;
-		height: 140rpx;
-		display: flex;
-		flex-direction: column;
-	
-		.header {
-			width: 100%;
-			display: flex;
-			align-items: center;
-			justify-content: space-between;
-			padding: 20rpx;
-			background-color: #ffffff;
-			height: 140rpx;
-	
-			.left {
-				flex: 1;
-				display: flex;
-				flex-direction: column;
-	
-				.store-name {
-					display: flex;
-					justify-content: flex-start;
-					align-items: center;
-					font-size: $font-size-lg;
-					margin-bottom: 10rpx;
-					.small {
-						font-size: $font-size-sm;
-						color: $text-color-assist;
-					}
-					.iconfont {
-						margin-left: 10rpx;
-						line-height: 100%;
-					}
-				}
-	
-				.store-location {
-					display: flex;
-					justify-content: flex-start;
-					align-items: center;
-					color: $text-color-assist;
-					font-size: $font-size-sm;
-	
-					.iconfont {
-						vertical-align: middle;
-						display: table-cell;
-						color: $color-primary;
-						line-height: 100%;
-					}
-				}
-			}
-	
-			.right {
-				//background-color: $bg-color-grey;
-				border-radius: 38rpx;
-				display: flex;
-				align-items: center;
-				font-size: $font-size-sm;
-				padding: 0 38rpx;
-				color: $text-color-assist;
-	
-				.dinein,
-				.takeout {
-					position: relative;
-					display: flex;
-					align-items: center;
-					&.active {
-						padding: 14rpx 38rpx;
-						color: #ffffff;
-						background-color: $color-primary;
-						//background-color: #5A5B5C;
-						border-radius: 38rpx;
-					}
-				}
-	
-				.takeout {
-					margin-left: 20rpx;
-					height: 100%;
-					flex: 1;
-					padding: 14rpx 0;
-				}
-	
-				.dinein.active {
-					margin-left: -38rpx;
-				}
-	
-				.takeout.active {
-					margin-right: -38rpx;
-				}
-			}
-		}
-	
-
-	}
-	
-</style>

+ 0 - 185
yshop/yshop-drink-uniapp/pages/components/pages/due/orders.vue

@@ -1,185 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  left-arrow
-	  @leftClick="$onClickLeft"
-	/>
-	<!-- #endif -->
-	<view class="container">
-		<view class="orders-list d-flex flex-column w-100" style="padding: 20rpx; padding-bottom: 0;">
-			<view class="order-item" v-for="(item, index) in orders" :key="index" style="margin-bottom: 30rpx;" >
-				<list-cell :hover="false">
-					<view class="w-100 d-flex align-items-center">
-						<view class="flex-fill d-flex flex-column">
-							<view class="font-size-lg text-color-base" style="margin-bottom: 20rpx;">
-								{{ item.shop.name }}
-							</view>
-							<view class="flex align-center">
-								<view class="mr-1">
-									<uv-tags text="预约" plain size="mini" type="error" v-if="item.orderType == 'due'"></uv-tags>
-								</view>
-								<view class="font-size-sm text-color-assist">订单编号:{{ item.orderId }}</view>
-							</view>	
-						</view>
-						<view class="font-size-medium text-color-primary">
-							<text v-if="item.orderType == 'due'">
-								<text v-if="item.dueStatus == 1">预约中</text>
-								<text v-else-if="item.dueStatus == 2">取消预约</text>
-								<text v-else-if="item.dueStatus == 3">预约已完成</text>
-							</text>
-							<text v-else>{{ item.statusDto.title }}</text>
-						</view>
-					</view>
-				</list-cell>
-				<list-cell :hover="false" last>
-					<view class="w-100 d-flex flex-column">
-						<block >
-							<view class="w-100 text-truncate font-size-lg text-color-base" style="margin-bottom: 20rpx;">
-								<view class="flex mb-2">  
-									<image :src="item.appShopDeskVO.image ? item.appShopDeskVO.image:'/static/images/logo.png'" mode="aspectFill" class="image" ></image>
-									<view class="flex flex-column">
-										<view class="font-size-medium mt-1 text-color-base">{{ item.appShopDeskVO.title }}</view>
-										<view class="font-size-sm mt-1">桌号:{{ item.appShopDeskVO.number }}</view>
-										<view class="font-size-sm mt-1">×1  ¥0.00</view>
-									</view>
-								</view>
-							</view>
-						</block>
-						<view class="d-flex justify-content-between align-items-center" style="margin-bottom: 30rpx;">
-							<view class="font-size-sm text-color-assist">
-								{{formatDateTime(item.createTime) }}
-							</view>
-							<view class="d-flex font-size-sm text-color-base align-items-center">
-								<view style="margin-right: 10rpx;">共{{ goodsNum(item.cartInfo) }}件商品,实付</view>
-								<view class="font-size-lg">¥{{ item.payPrice }}</view>
-							</view>
-						</view>
-						<view class="d-flex align-items-center justify-content-end">
-							<view>
-								<button v-if="item.dueStatus == 1" class="left-margin"  plain size="mini" @tap.stop="cancelDueOrder(item.id)">取消预约</button>
-								<button class="left-margin"  plain size="mini" @tap="detail(item.orderId)">订单详情</button>
-							</view>
-						</view>
-					</view>
-				</list-cell>
-			</view>
-		</view>
-		<uv-empty v-if="orders.length == 0" mode="order" text="您暂时还没有订单哦~">
-			<uv-button text="去预定" @click="gopage('/pages/components/pages/due/index')" color="#059825" shape="circle"  customStyle="padding:0 120rpx;margin-top:30rpx"></uv-button>
-		</uv-empty>
-	</view>
-	<uv-tabbar :value="value" @change="index=>value = index" activeColor="#059825">
-		<uv-tabbar-item text="预约" icon="home" @click="gopage('/pages/components/pages/due/index')"></uv-tabbar-item>
-		<uv-tabbar-item text="预约订单" icon="order" @click="gopage('/pages/components/pages/due/orders')"></uv-tabbar-item>
-		<uv-tabbar-item text="返回首页" icon="arrow-leftward" @click="gopage2('/pages/index/index')"></uv-tabbar-item>
-	</uv-tabbar>
-</template>
-
-
-<script setup>
-import {
-  ref,
-  computed
-} from 'vue'
-import { useMainStore } from '@/store/store'
-import { storeToRefs } from 'pinia'
-import { onShow,onLoad,onPullDownRefresh,onReachBottom} from '@dcloudio/uni-app'
-import { formatDateTime,kmUnit } from '@/utils/util'
-import {
-  orderGetOrders,
-  orderReceive,
-  cancelDue
-} from '@/api/order'
-const main = useMainStore()
-const { isLogin } = storeToRefs(main)
-const title = ref('预约订单')
-const value = ref(1)
-const page = ref(1)
-const pageSize = ref(10)
-const orders = ref([])
-
-const current = ref(0)
-const type = ref(-1)
-const orderType = ref('')
-
-const goodsNum = computed(() => { //计算单个饮品添加到购物车的数量
-	return (goods) => {
-		let num = 0;
-		goods.forEach(good => num += parseInt(good.number))
-		return num;
-	}
-})
-
-onLoad((option) => {
-	if(!isLogin.value) {
-		uni.navigateTo({url: '/pages/components/pages/login/login'})
-	}
-	getOrders(false)
-})
-onPullDownRefresh(() => {
-	 getOrders(false)
-})
-onReachBottom(() => {
-	getOrders(false)
-})
-
-const gopage = (url) =>{
-	uni.navigateTo({
-		url
-	})
-}
-const gopage2 = (url) =>{
-	uni.switchTab({
-		url
-	}) 
-
-}
-
-
-const getOrders = async(isRefresh = false) => {
-	uni.showLoading({
-		title: '加载中'
-	})
-	if(isRefresh) {
-		orders.value = []
-		page.value = 1
-	}
-	let ordersData = await orderGetOrders({page:page.value, limit:pageSize.value,orderType:'due'});
-
-	if(ordersData) {
-		orders.value = orders.value.concat(ordersData)
-		page.value += 1
-	}
-	uni.stopPullDownRefresh();
-	uni.hideLoading()
-}
-const detail = (id) => {
-	uni.navigateTo({
-		url: '/pages/components/pages/orders/detail?id=' + id
-	})
-}
-
-
-const cancelDueOrder = async(id) => {
-	let data = await cancelDue({id:id});
-	if (data) {
-		await getOrders(true)
-	}
-}
-	
-
-</script>
-
-<style lang="scss" scoped>
-	.left-margin {
-		margin-left: 10rpx;
-	}
-	.image {
-		width: 130rpx;
-		height: 130rpx;
-		margin-right: 30rpx;
-		border-radius: 8rpx;
-	}
-</style>

+ 0 - 396
yshop/yshop-drink-uniapp/pages/components/pages/login/login.vue

@@ -1,396 +0,0 @@
-<template>
-<!-- 	<layout> -->
-		<!-- #ifdef MP-WEIXIN -->
-		<uv-navbar
-		  :fixed="false"
-		  :title="title"
-		  left-arrow
-		  @leftClick="$onClickLeft"
-		/>
-		<!-- #endif -->
-		<view class="wrap">
-			<view class="top"></view>
-			<view class="content" style="padding-top: 150rpx; padding-bottom: 200rpx;">
-				<view class="flex flex-column align-center">
-					<view><uv-avatar src="https://www.yixiang.co/uploads/20250617/09e3e0bf52bbc1c2ed6822be10647918.png"></uv-avatar></view>
-					<view class="mt-2">yshop意象点餐系统</view>
-				</view>
-				
-			</view>
-			<view class="buttom">
-				<view class="loginType">
-					<!-- #ifdef MP-WEIXIN -->
-					<button type="primary" v-if="isChecked" size="default" class="login-btn" open-type="getPhoneNumber" @getphonenumber="loginForWechatMini">
-					<!-- 	<image src="/static/images/mine/wechat.png"></image> -->
-						手机号快捷登录
-					</button>
-					<button type="primary" v-else size="default" class="login-btn" @tap="check">
-					<!-- 	<image src="/static/images/mine/wechat.png"></image> -->
-						手机号快捷登录
-					</button>
-					<!-- #endif -->
-					
-					<!-- #ifdef H5 -->
-					 <button type="primary"  size="default" class="login-btn" @tap="wxLogin">
-						 微信登录
-					 </button>
-					<!-- #endif -->
-				</view>
-				<view class="hint">
-				<!-- 	<label class="label"> -->
-						<radio value="isChecked" @tap.stop="onChange" />
-						我已经阅读并遵守
-						<text class="link" @tap="serv(29,'用户协议')">《用户协议》</text>与
-							<text class="link"  @tap="serv(30,'隐私政策')">《隐私政策》</text>
-				<!-- 	</label> -->
-				</view>
-			</view>
-			<view class="text-center text-color-assist font-size-sm " style="margin-top: 200rpx;"><text @click="goTo">暂不登录</text></view>
-			<uv-toast ref="uToast"></uv-toast>
-	</view>
-<!-- 	</layout> -->
-</template>
-
-<script setup>
-import {
-  ref,
-  computed
-} from 'vue'
-import { onLoad,onShow} from '@dcloudio/uni-app'
-import { useMainStore } from '@/store/store'
-import {
-  userAuthSession,
-  userLoginForWechatMini,
-  smsSend,
-  userLogin
-} from '@/api/auth'
-import * as util  from '@/utils/util'
-import { mobile as testMobible } from '@/uni_modules/uv-ui-tools/libs/function/test'
-import cookie from '@/utils/cookie'
-import router from '@/utils/router'
-import { APP_ID } from '@/config'
-const main = useMainStore()
-const title = ref('登录')
-const mobile = ref('')
-const captcha = ref('')
-const captchaText = ref('获取验证码')	
-const password = ref('')
-const seconds = ref(60)
-const isChecked = ref(false)
-const openid = ref(main.openid)
-const uToast = ref()
-const uCode = ref()
-
-const captchaStyle = computed(() => {
-  let style = {};
-  if(mobile.value && captchaText.value == '获取验证码') {
-  	style.color = "#fff";
-  	style.backgroundColor = '#f9ae3d';
-  }
-  return style;
-});
-
-onShow(() => {
-   
-	// #ifdef MP-WEIXIN
-	if(!openid.value){
-		wechatMiniLogin();
-	}
-	
-	// #endif
-})
-
-const wechatMiniLogin = () => {
-	//this.$u.toast('登录中');
-	uni.login({
-		provider: 'weixin'
-	}).then(async (res) => {
-		let data = await userAuthSession({
-			code: res.code
-		});
-		if (data) {
-			main.SET_OPENID(data.openId)
-			openid.value = data.openId
-		}
-	});
-}
-
-const check = () => {
-	if(!isChecked.value){
-		uToast.value.show({
-			message: '请勾选下面协议',
-			type: 'error'
-		});
-		return
-	}
-}
-
-const loginForWechatMini = async (e) => {
-	
-	if (e.detail.encryptedData && e.detail.iv) {
-		let data = await userLoginForWechatMini({
-			encryptedData: e.detail.encryptedData,
-			iv: e.detail.iv,
-			openid: openid.value
-		});
-		if (data) {
-			main.SET_MEMBER(data.userInfo);
-			main.SET_TOKEN(data.accessToken);
-			uToast.value.show({
-				title: '登录成功',
-				type: 'success'
-			});
-			setTimeout(function() {
-				router.back()
-			}, 2000);
-		}
-	}
-}
-
-const getCaptcha = async () => {
-			
-	if (testMobible(mobile.value) == false) {
-		uToast.value.show({
-			message: '手机号码格式不对',
-			type: 'error'
-		});
-		return
-	}
-	
-	let data = await smsSend({
-		mobile: mobile.value,
-		scene: 1
-	});		
-	if (data) {
-		uCode.value.start();
-		
-	}
-}
-
-// 验证码开始计时	
-const startCaptcha = () => {
-}
-// 验证码结束
-const endCaptcha = () => {
-	captchaText.value = '获取验证码';
-}
-const changeCapcha = (text)  => {
-	captchaText.value = text;
-}
-
-const wxLogin = () => {
-	if(!isChecked.value){
-		uToast.value.show({
-			message: '请勾选下面协议',
-			type: 'error'
-		});
-		return
-	}
-	if(!util.isWeixin()){
-		uToast.value.show({
-			message: '请微信浏览器打开',
-			type: 'error'
-		});
-		return
-	}
-	const appid = APP_ID;
-	location.href = getAuthUrl(appid)
-}
-
-
-const getAuthUrl = (appId) => {
-	  // #ifdef H5
-	  // #endif
-	  //cookie.set('redirect', window.location.href)
-	  const url = `${location.origin}/h5/#/pages/index/index`
-	  //cookie.set('index_url',url)
-	  let redirect_uri = encodeURIComponent(url)
-	
-	  const state = 'STATE'
-	  return `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${redirect_uri}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`
- }
- 
-
-// 提交
-const submit = () => {
-	if (testMobible(mobile.value) == false) {
-		uToast.value.show({
-			message: '手机号码格式不对',
-			type: 'error'
-		});
-		return
-	}
-	
-	if(!isChecked.value){
-		uToast.value.show({
-			message: '请勾选下面协议',
-			type: 'error'
-		});
-		return
-	}
-	
-	login()
-
-}
-
-// 登录
-const login = async () => {
-	let from = 'routine'
-	// #ifdef H5
-	from = 'h5'
-	if(util.isWeixin()){
-		from = 'wechat'
-	}
-	
-	// #endif
-	let data = await userLogin({
-		mobile: mobile.value,
-		code: captcha.value,
-		from: from,
-		openid: openid.value
-	})
-	if (data) {
-		uni.setStorage({
-			key: 'userinfo',
-			data: data.userInfo
-		});
-		uni.setStorage({
-			key: 'accessToken',
-			data: data.accessToken
-		});
-		main.SET_MEMBER(data.userInfo);
-		main.SET_TOKEN(data.accessToken);
-		uToast.value.show({
-			message: '登录成功',
-			type: 'success'
-		});
-		
-		//let newParams = cookie.get('params')
-		setTimeout(function() {
-			uni.navigateBack();
-		}, 2000);
-	}
-}
-
-const serv = (id,name) => {
-	uni.navigateTo({
-			url: '/pages/components/pages/mine/content?id=' + id + '&name=' + name
-	})
-}
-
-const onChange = () => {
-	isChecked.value = !isChecked.value
-}
-
-const goTo = () => {
-	uni.switchTab({
-		url: '/pages/index/index'
-	}) 
-}
-
-</script>
-
-<style lang="scss" scoped>
-// page {
-// 	min-height: 100%;
-// 	background-color: #ffffff !important; 
-// }
-.wrap {
-	background-color: #ffffff;
-	font-size: 28rpx;
-	position: relative;
-	min-height: 100%;
-	.content {
-		width: 600rpx;
-		margin: 0 auto;
-
-		.title {
-			text-align: left;
-			font-size: 60rpx;
-			font-weight: 500;
-			margin-bottom: 100rpx;
-		}
-		input {
-			text-align: left;
-			margin-bottom: 10rpx;
-			padding-bottom: 6rpx;
-		}
-		.tips {
-			color: $uv-info;
-			margin-bottom: 60rpx;
-			margin-top: 8rpx;
-		}
-		.getCaptcha {
-			background-color: #059825;
-			color: #ffffff;
-			border: none;
-			font-size: 20rpx;
-			padding: 5rpx 0;
-			
-			&::after {
-				border: none;
-			}
-		}
-		.login {
-			background-color: #059825;
-			color: #ffffff;
-			border-radius: 50rem !important;
-			font-size: 26rpx;
-			padding: 8rpx 0;
-			margin-top: 40rpx;
-			&::after {
-				border: none;
-			}
-		}
-		.alternative {
-			color: $uv-tips-color;
-			display: flex;
-			justify-content: space-between;
-			margin-top: 30rpx;
-		}
-	}
-	.buttom {
-		//position: absolute;
-		bottom: 0;
-		//display: flex;
-		//flex-direction: column;
-		//align-items: center;
-		//justify-content: center;
-		.loginType {
-			padding: 30rpx 80rpx;
-			//justify-content:space-between;
-			
-			.login-btn {
-				background-color: #1aad19!important;
-				width: 100%;
-				font-size: 26rpx;
-				border-radius: 50rem !important;
-				display: flex;
-				align-items: center;
-				justify-content: center;
-				padding: 8rpx 0;
-				text-align: center;
-				image {
-					width: 36rpx;
-					height: 30rpx;
-					margin-right: 10rpx;
-					vertical-align: middle;
-				}
-			}
-		}
-		
-		.hint {
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			padding: 20rpx 40rpx;
-			font-size: 20rpx;
-			color: $uv-tips-color;
-			
-			.link {
-				color: $uv-warning;
-			}
-		}
-	}
-}
-</style>

+ 0 - 56
yshop/yshop-drink-uniapp/pages/components/pages/login/logout.vue

@@ -1,56 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-		<uv-navbar
-		  :fixed="false"
-		  :title="title"
-		  left-arrow
-		  @leftClick="$onClickLeft"
-		/>
-		<!-- #endif -->
-		<view class="top">
-			<button type="primary" size="default" class="login-btn" @click="logout">
-				确定退出登录
-			</button>
-			<uv-toast ref="uToast"></uv-toast>
-		</view>
-</template>
-
-<script setup>
-import {
-  ref
-} from 'vue'
-import { useMainStore } from '@/store/store'
-import { storeToRefs } from 'pinia'
-const main = useMainStore()
-const { member,isLogin } = storeToRefs(main)
-const uToast = ref()
-const title = ref('退出')
-
-const logout = () => {
-	uni.removeStorageSync('userinfo');
-	uni.removeStorageSync('accessToken');
-	main.SET_MEMBER({});
-	main.SET_TOKEN('');
-	uToast.value.show({
-		message: '已退出',
-		type: 'success'
-	});
-	setTimeout(function() {
-		uni.redirectTo({
-			url: '/pages/components/pages/login/login',
-		})
-	}, 2000);
-}
-	
-</script>
-
-<style lang="scss" scoped>
-	
-	.top {
-		display: flex; 
-		height: 100%;
-	}
-	button{
-		 margin: auto;
-	}
-</style>

+ 0 - 650
yshop/yshop-drink-uniapp/pages/components/pages/menudetail/menudetail.vue

@@ -1,650 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  left-arrow
-	  @leftClick="$onClickLeft"
-	/>
-	<!-- #endif -->
-	<view class="container">
-		<view>
-			<view>
-			<!-- 	<image src="/static/images/loading.gif"></image> -->
-				<uv-swiper class="bg" height="300" imgMode="aspectFill" keyName="image" :list="listAds" indicatorMode="dot" indicatorStyle="bottom"></uv-swiper>
-			</view>
-			<view style="background-color: #ffffff; padding: 30rpx;">
-				<view>{{ goodDetail.storeName }}</view>
-				<view class="font-small text-light-black mt-1">已售{{ goodDetail.sales }}</view>
-				<view class="mt-1 flex justify-between">
-					<view  style="color:red">¥{{ goodDetail.price }}</view>
-					<view>
-						<view class="btn-group" v-if="goodDetail.stock > 0 && goodDetail.productAttr.length >= 1 && goodDetail.productAttr[0].attrValues != '默认'">
-							<button type="primary" class="btn property_btn"
-								hover-class="none" size="mini"
-								@tap="showGoodDetailModal(goodDetail)">
-								选规格
-							</button>
-							<view class="dot" v-show="goodCartNum(goodDetail.id)">
-								{{ goodCartNum(goodDetail.id) }}</view>
-						</view>
-						<view class="btn-group" v-if="goodDetail.stock > 0 && goodDetail.productAttr.length == 1 && goodDetail.productAttr[0].attrValues == '默认'">
-							<button type="default" v-show="goodCartNum(goodDetail.id)" plain class="btn reduce_btn"
-							 size="mini" hover-class="none" @tap="handleReduceFromCart(item, good)">
-								<view class="iconfont iconsami-select"></view>
-							</button>
-							<view class="number" v-show="goodCartNum(goodDetail.id)">{{ goodCartNum(goodDetail.id) }}</view>
-							<button type="primary" v-show="goodCartNum(goodDetail.id) == 0" class="btn property_btn" size="min" hover-class="none" 
-								@tap="handleAddToCart(goodDetail, 1)">
-								<span class="iconfont iconadd-select"></span>
-								加入购物车
-							</button>
-							<button type="primary" class="btn add_btn" v-show="goodCartNum(goodDetail.id)" size="min" hover-class="none"
-								@tap="handleAddToCart(goodDetail, 1)">
-								<view class="iconfont iconadd-select"></view>
-							</button>
-						</view>
-						<view v-if="goodDetail.stock == 0">已售罄</view>
-					</view>
-				</view>
-				
-			</view>
-			<view style="background-color: #ffffff; padding: 30rpx;margin-top: 10rpx;">
-				<view class="mb-3">商品详情</view>
-				<view style="font-size: 22rpx;"><rich-text :nodes="goodDetail.description"></rich-text></view>
-			</view>
-			
-			<modal :show="goodDetailModalVisible" class="good-detail-modal" color="#5A5B5C" width="90%" custom
-				padding="0rpx" radius="12rpx">
-				<view class="cover">
-					<view class="btn-group">
-						<image src="/static/images/menu/close.png" @tap="closeGoodDetailModal"></image>
-					</view>
-				</view>
-				<scroll-view class="detail" scroll-y>
-				<!-- 	<view v-if="good.image" class="image">
-						<image :src="good.image"></image>
-					</view> -->
-			
-					<view class="wrapper">
-						<view class="basic">
-							<view class="name">{{ good.storeName }}</view>
-							<view class="tips flex justify-between">{{ good.storeInfo }}</view>
-						</view>
-						<view class="properties">
-							<view class="property" v-for="(item, index) in good.productAttr" :key="index">
-								<view class="title">
-									<text class="name">{{ item.attrName }}</text>
-								</view>
-								<view class="values">
-									<view class="value" v-for="(value, key) in item.attrValueArr" :key="key"
-										:class="{'default': value == newValue[index]}"
-										@tap="changePropertyDefault(index, key,false)">
-										{{ value }}
-									</view>
-								</view>
-							</view>
-						</view>
-					</view>
-				</scroll-view>
-				<view class="action">
-					<view class="left">
-						<view class="price">¥{{ good.price }}</view>
-						<view class="props">
-							{{ good.valueStr }}
-						</view>
-					</view>
-					<view class="btn-group">
-						<text style="margin-right: 20rpx;">库存:{{good.stock}} </text>
-						<button type="default" plain class="btn" size="mini" hover-class="none"
-							@tap="handlePropertyReduce">
-							<view class="iconfont iconsami-select"></view>
-						</button>
-						<view class="number">{{ good.number }}</view>
-						<button type="primary" class="btn" size="min" hover-class="none" @tap="handlePropertyAdd">
-							<view class="iconfont iconadd-select"></view>
-						</button>
-					</view>
-				</view>
-				<view class="add-to-cart-btn" @tap="handleAddToCartInModal">
-					<view>加入购物车</view>
-				</view>
-			</modal>
-			
-			<view class="cart-box">
-				<view class="mark">
-					<image src="/static/images/menu/cart.png" class="cart-img" @tap="openCartPopup"></image>
-					<view class="tag">{{ getCartGoodsNumber }}</view>
-				</view>
-				<view class="price">¥{{ getCartGoodsPrice }}</view>
-				<button type="primary" class="pay-btn" @tap="toPay" :disabled="disabledPay">
-					{{ disabledPay ? `差${spread}元起送` : '去结算' }}
-				</button>
-			</view>
-		</view>
-		<uv-toast ref="uToast"></uv-toast>
-	</view>
-</template>
-
-<script setup>
-import {
-  ref,
-  computed
-} from 'vue'
-import { useMainStore } from '@/store/store'
-import { storeToRefs } from 'pinia'
-import { onLoad,onShow } from '@dcloudio/uni-app'
-import { formatDateTime,prePage } from '@/utils/util'
-import {
- goodsDetail
-} from '@/api/goods'
-const main = useMainStore()
-const { orderType, store,isLogin,desk,isScan } = storeToRefs(main)
-const title = ref('详情')
-const listAds = ref([
-
-])
-const goodDetail = ref({})
-const cart = ref([])
-const good= ref({})
-const goodDetailModalVisible = ref(false)
-const newValue = ref([])
-const uToast = ref()
-const goodCartNum = computed(() => { //计算单个饮品添加到购物车的数量
-	return (id) => cart.value.reduce((acc, cur) => {
-		if (cur.id === id) {
-			return acc += cur.number
-		}
-		return acc
-	}, 0)
-})
-const getCartGoodsNumber = computed(() => { //计算购物车总数
-	return cart.value.reduce((acc, cur) => acc + cur.number, 0)
-})
-const getCartGoodsPrice = computed(() =>{ //计算购物车总价
-	let price = cart.value.reduce((acc, cur) => acc + cur.number * cur.price, 0);
-	return parseFloat(price).toFixed(2);
-})
-const disabledPay = computed(() => { //是否达到起送价
-	return orderType.value == 'takeout' && (getCartGoodsPrice.value < parseFloat(store.value.minPrice)) ? true :
-		false
-})
-const spread = computed(() => { //差多少元起送
-	if (orderType.value != 'takeout') return
-	return parseFloat((store.value.minPrice - getCartGoodsPrice.value).toFixed(2))
-})
-
-onLoad((option) => {
-	detail(option.id);
-})
-const detail =  async(id) => {
-	goodDetail.value = await goodsDetail(id);
-	setGoodsDetail(goodDetail.value)
-	listAds.value = goodDetail.value.sliderImage.split(',');
-	cart.value = uni.getStorageSync('cart') || [];
-}
-
-/**
- * 处理商品详情逻辑
- * @param detail
- */
-const setGoodsDetail = (detail) => {
-  goodDetail.value.description = detail.description.replace(
-      /<img /g,
-      "<img style='width:100%;' "
-  );
-}
-
-
-
-const handleAddToCart = (newGood, num) =>{ //添加到购物车
-
-	const index = cart.value.findIndex(item => {
-		if (newGood) {
-			return (item.id === newGood.id) && (item.props_text === good.value.valueStr)
-		} else {
-			return item.id === newGood.id
-		}
-	})
-	if (index > -1) {
-		cart.value[index].number += num
-	} else {
-		cart.value.push({
-			id: newGood.id,
-			cate_id: parseInt(newGood.cateId),
-			name: newGood.storeName,
-			price: newGood.price,
-			number: num,
-			image: newGood.image,
-			valueStr: good.value.valueStr
-		})
-	}
-	uni.setStorageSync('cart', JSON.parse(JSON.stringify(cart.value)))
-}
-
-const handleReduceFromCart = (item, good) => {
-	const index = cart.value.findIndex(item => item.id === good.id)
-	cart.value[index].number -= 1
-	if (cart.value[index].number <= 0) {
-		cart.value.splice(index, 1)
-	}
-	uni.setStorageSync('cart', JSON.parse(JSON.stringify(cart.value)))
-}
-
-const showGoodDetailModal = (newGood) => {
-	//isCartShow.value = true
-	good.value = JSON.parse(JSON.stringify({
-		...newGood,
-		number: 1
-	}))
-	//category.value = JSON.parse(JSON.stringify(item))
-	goodDetailModalVisible.value = true;
-	changePropertyDefault(0, 0,true);
-}
-
-const changePropertyDefault = (index, key, isDefault) => { //改变默认属性值
-	let valueStr = ''
-	
-	if(isDefault){
-		newValue.value = []
-		for(let i = 0;i < good.value.productAttr.length;i++){
-			newValue.value[i] = good.value.productAttr[i].attrValueArr[0]
-		}
-
-
-	}else{
-		newValue.value[index] = good.value.productAttr[index].attrValueArr[key]
-	}
-	valueStr = newValue.value.join(',')
-	
-	let productValue = good.value.productValue[valueStr]
-	if(!productValue) {
-		let skukey = JSON.parse(JSON.stringify(newValue.value))
-		skukey.sort((a, b) => a.localeCompare(b))
-		valueStr = skukey.join(',')
-		productValue = good.value.productValue[valueStr]
-	}
-	good.value.number = 1;
-	good.value.price = parseFloat(productValue.price).toFixed(2);
-	good.value.stock = productValue.stock;
-	good.value.image = productValue.image ? productValue.image : good.value.image;
-	good.value.valueStr = valueStr
-
-}
-
-const handleAddToCartInModal = () => {
-	if (good.value.stock <= 0) {
-		uToast.value.show({message:'商品库存不足',type: 'error'});
-		return;
-	}
-	handleAddToCart(good.value, good.value.number)
-	closeGoodDetailModal()
-}
-
-const closeGoodDetailModal = () => { //关闭饮品详情模态框
-	goodDetailModalVisible.value = false
-	good.value = {}
-}
-const handlePropertyAdd = () => {
-	good.value.number += 1
-}
-const handlePropertyReduce = () => {
-	if (good.value.number === 1) return
-	good.value.number -= 1
-}
-
-const toPay = () => {
-
-	if (!isLogin.value) {
-		uni.navigateTo({
-			url: '/pages/components/pages/login/login'
-		})
-		return
-	} else {
-		if(cart.value.length == 0){
-			uToast.value.show({message:'请先去点餐哦',type: 'error'});
-			return;
-		}
-		if(store.value.status == 0) {
-			uToast.value.show({message:'店铺已经歇业',type: 'error'});
-			return;
-		}
-		if (store.value.status == 0) {
-			uToast.value.show({message:'不在店铺营业时间内',type: 'error'});
-			return;
-		}
-		// 判断当前是否在配送范围内
-		if (orderType.value == 'takeout' && store.value.distance < store.value.far) {
-			uToast.value.show({message:'选中的地址不在配送范围',type: 'error'});
-			return;
-		}
-
-		uni.showLoading({
-			title: '加载中'
-		})
-		uni.setStorageSync('cart', JSON.parse(JSON.stringify(cart.value)))
-
-		uni.navigateTo({
-			url: '/pages/components/pages/pay/pay'
-		})
-	}
-
-	uni.hideLoading()
-}
-
-
-</script>
-
-<style lang="scss">
-.bg {
-	width: 100%;
-	height: 330rpx;
-}
-.btn {
-	padding: 0 50rpx;
-}
-
-.cart-box {
-	position: fixed;
-	bottom: 30rpx;
-	left: 30rpx;
-	right: 30rpx;
-	height: 96rpx;
-	border-radius: 48rpx;
-	box-shadow: 0 0 20rpx rgba(0, 0, 0, 0.2);
-	background-color: #ffffff;
-	display: flex;
-	align-items: center;
-	justify-content: space-between;
-	z-index: 9999;
-
-	.cart-img {
-		width: 96rpx;
-		height: 96rpx;
-		position: relative;
-		margin-top: -48rpx;
-	}
-
-	.pay-btn {
-		height: 100%;
-		padding: 0 30rpx;
-		color: #ffffff;
-		border-radius: 0 50rpx 50rpx 0;
-		display: flex;
-		align-items: center;
-		font-size: $font-size-base;
-	}
-
-	.mark {
-		padding-left: 46rpx;
-		margin-right: 30rpx;
-		position: relative;
-
-		.tag {
-			//background-color: $color-warning;
-			background-color: #ffcc00;;
-			color: $text-color-white;
-			display: flex;
-			justify-content: center;
-			align-items: center;
-			font-size: $font-size-sm;
-			position: absolute;
-			right: -10rpx;
-			top: -50rpx;
-			border-radius: 100%;
-			padding: 4rpx;
-			width: 40rpx;
-			height: 40rpx;
-			opacity: 0.9;
-		}
-	}
-
-	.price {
-		flex: 1;
-		color: $text-color-base;
-	}
-}
-
-
-.btn-group {
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-		position: relative;
-
-		.btn {
-			padding: 0 20rpx;
-			box-sizing: border-box;
-			font-size: $font-size-sm;
-			height: 44rpx;
-			line-height: 44rpx;
-
-			&.property_btn {
-				border-radius: 24rpx;
-			}
-
-			&.add_btn,
-			&.reduce_btn {
-				padding: 0;
-				width: 44rpx;
-				border-radius: 44rpx;
-			}
-		}
-
-		.dot {
-			position: absolute;
-			background-color: #ffffff;
-			border: 1px solid $color-primary;
-			color: $color-primary;
-			font-size: $font-size-sm;
-			width: 36rpx;
-			height: 36rpx;
-			line-height: 36rpx;
-			text-align: center;
-			border-radius: 100%;
-			right: -12rpx;
-			top: -10rpx;
-		}
-
-		.number {
-			width: 44rpx;
-			height: 44rpx;
-			line-height: 44rpx;
-			text-align: center;
-		}
-}
-		
-
-	.good-detail-modal {
-		width: 100%;
-		height: 100%;
-		display: flex;
-		flex-direction: column;
-	
-		.cover {
-			height: 20rpx;
-			display: flex;
-			justify-content: center;
-			align-items: center;
-	
-			.btn-group {
-				position: absolute;
-				right: 10rpx;
-				top: 0rpx;
-				display: flex;
-				align-items: center;
-				justify-content: space-around;
-				z-index: 210;
-				 
-				image {
-					width: 80rpx;
-					height: 80rpx;
-				}
-			}
-		}
-	
-		.detail {
-			width: 100%;
-			min-height: 1vh;
-			max-height: calc(90vh - 320rpx - 80rpx - 120rpx);
-			position: relative;
-	
-			.image {
-				display: flex;
-				justify-content: center;
-				align-items: center;
-				image {
-					width: 260rpx;
-					height: 260rpx;
-				}
-			}
-			.wrapper {
-				width: 100%;
-				height: 100%;
-				overflow: hidden;
-	
-				.basic {
-					padding: 0 20rpx 30rpx;
-					display: flex;
-					flex-direction: column;
-					.name {
-						font-size: $font-size-base;
-						color: $text-color-base;
-						margin-bottom: 10rpx;
-					}
-					.tips {
-						font-size: $font-size-sm;
-						color: $text-color-grey;
-					}
-				}
-	
-				.properties {
-					width: 100%;
-					border-top: 2rpx solid $bg-color-grey;
-					padding: 10rpx 30rpx 0;
-					display: flex;
-					flex-direction: column;
-	
-					.property {
-						width: 100%;
-						display: flex;
-						flex-direction: column;
-						margin-bottom: 30rpx;
-						padding-bottom: -16rpx;
-	
-						.title {
-							width: 100%;
-							display: flex;
-							justify-content: flex-start;
-							align-items: center;
-							margin-bottom: 20rpx;
-	
-							.name {
-								font-size: 26rpx;
-								color: $text-color-base;
-								margin-right: 20rpx;
-							}
-	
-							.desc {
-								flex: 1;
-								font-size: $font-size-sm;
-								color: $color-primary;
-								overflow: hidden;
-								text-overflow: ellipsis;
-								white-space: nowrap;
-							}
-						}
-	
-						.values {
-							width: 100%;
-							display: flex;
-							flex-wrap: wrap;
-	
-							.value {
-								border-radius: 8rpx;
-								background-color: $bg-color-grey;
-								padding: 16rpx 30rpx;
-								font-size: 26rpx;
-								color: $text-color-assist;
-								margin-right: 16rpx;
-								margin-bottom: 16rpx;
-	
-								&.default {
-									background-color: $color-primary;
-									color: $text-color-white;
-								}
-							}
-						}
-					}
-				}
-			}
-		}
-	
-		.action {
-			display: flex;
-			align-items: center;
-			justify-content: space-between;
-			background-color: $bg-color-grey;
-			height: 120rpx;
-			padding: 0 26rpx;
-	
-			.left {
-				flex: 1;
-				display: flex;
-				flex-direction: column;
-				justify-content: center;
-				margin-right: 20rpx;
-				overflow: hidden;
-	
-				.price {
-					font-size: $font-size-lg;
-					color: $text-color-base;
-				}
-	
-				.props {
-					color: $text-color-assist;
-					font-size: 24rpx;
-					width: 100%;
-					overflow: hidden;
-					text-overflow: ellipsis;
-					white-space: nowrap;
-				}
-			}
-			.btn-group {
-				display: flex;
-				align-items: center;
-				justify-content: space-around;
-	
-				.number {
-					font-size: $font-size-base;
-					width: 44rpx;
-					height: 44rpx;
-					line-height: 44rpx;
-					text-align: center;
-				}
-	
-				.btn {
-					padding: 0;
-					font-size: $font-size-base;
-					width: 44rpx;
-					height: 44rpx;
-					line-height: 44rpx;
-					border-radius: 100%;
-				}
-			}
-		}
-	
-		.add-to-cart-btn {
-			display: flex;
-			justify-content: center;
-			align-items: center;
-			background-color: $color-primary;
-			color: $text-color-white;
-			font-size: $font-size-base;
-			height: 80rpx;
-			border-radius: 0 0 12rpx 12rpx;
-		}
-	}		
-		
-
-</style>

+ 0 - 176
yshop/yshop-drink-uniapp/pages/components/pages/merchant/addCard.vue

@@ -1,176 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  left-arrow
-	  @leftClick="$onClickLeft"
-	/>
-	<!-- #endif -->
-	<view class=" p-3">
-		<view class="card">
-			<view class="card_item flex content-center">
-				<view class="left">
-					提现类型 
-				</view>
-				<radio-group  @change="radioChange" >
-					<radio :value="1" :checked="formData.type == 1" />银行卡
-					<radio class="ml-2" :checked="formData.type == 2" :value="2"  />微信
-				</radio-group>
-			</view>
-			<view class="card_item flex content-center">
-				<view class="left">
-					姓名
-				</view>
-				<input class="right" v-model="formData.name" type="text" placeholder="请输入真实姓名">
-			</view>
-			<view class="card_item flex content-center" v-if="formData.type == 1">
-				<view class="left">
-					卡号
-				</view>
-				<input class="right" v-model="formData.bankCode" type="text" placeholder="请输入银行卡卡号">
-			</view>
-			<view class="card_item flex content-center">
-				<view class="left">
-					银行名称
-				</view>
-				<input class="right" v-model="formData.bankName" type="text" placeholder="请输入银行名称">
-			</view>
-			<view class="card_item flex content-center">
-				<view class="left">
-					手机号
-				</view>
-				<input class="right" maxlength="11" type="text" v-model="formData.bankMobile" placeholder="请输入本人手机号">
-			</view>
-		</view>
-		<view class="qrbtn" @click="add">
-			确认
-		</view>
-	</view>
-</template>
-
-<script setup>
-import {
-  ref
-} from 'vue'
-import {
-	addCard
-} from '@/api/merchant'
-import { onLoad} from '@dcloudio/uni-app'
-import { useMainStore } from '@/store/store'
-import { storeToRefs } from 'pinia'
-import { isValidBankCard,validatePhoneNumber } from '@/utils/util'
-const main = useMainStore()
-const { merchartShop } = storeToRefs(main)
-const title = ref('添加提现账号')
-const formData = ref({
-	bankName:'',
-	bankCode:'',
-	name:'',
-	bankMobile:'',
-	shopId: merchartShop.value.id,
-	type:1
-})
-
-const radioChange = (e) => {
-	console.log('eeee:',e.detail.value)
-	formData.value.type = e.detail.value
-	
-}
-
-const add = async() => {
-	if(formData.value.name == ''){
-		uni.showToast({
-			title: '请输入真实姓名',
-			icon: 'error'
-		})
-		return
-	}
-
-	if (formData.value.type == 1 && !isValidBankCard(formData.value.bankCode)){
-		uni.showToast({
-			title: '请输入正确卡号',
-			icon: 'error'
-		})
-		return
-	}
-	if(formData.value.type == 1 && formData.value.bankName == ''){
-		uni.showToast({
-			title: '请输入银行卡名称',
-			icon: 'error'
-		})
-		return
-	}
-	if (!validatePhoneNumber(formData.value.bankMobile)){
-		uni.showToast({
-			title: '请输入正确手机号',
-			icon: 'error'
-		})
-		return
-	}
-	
-	let res = await addCard(formData.value)
-	if(res){
-		uni.navigateBack()
-	}
-	
-}
-	
-	
-</script>
-
-<style lang="scss">
-
-	.title {
-		font-size: 30rpx;
-		font-weight: 600;
-		color: #333333;
-		margin: 16rpx 0 0;
-	}
-
-	.card {
-		padding: 0 40rpx;
-		box-sizing: border-box;
-		background-color: #fff;
-		border-radius: 20rpx;
-		margin: 40rpx 0 100rpx;
-
-		.card_item {
-			padding: 34rpx 0;
-			box-sizing: border-box;
-			border-bottom: 1rpx solid #f5f5f5;
-
-			.left {
-				font-size: 28rpx;
-				color: #333333;
-				width: 140rpx;
-			}
-
-			.btn {
-				width: 158rpx;
-				height: 50rpx;
-				background: #FFFFFF;
-				border-radius: 25rpx;
-				border: 2rpx solid #0CAFFE;
-				font-size: 24rpx;
-				color: #0CAFFE;
-				text-align: center;
-				line-height: 50rpx;
-				margin-top: -10rpx;
-				margin-left: 20rpx;
-			}
-		}
-	}
-
-	.qrbtn {
-		width: 700rpx;
-		height: 98rpx;
-		background: linear-gradient(90deg, #52C2F9 0%, #00ABFF 100%);
-		border-radius: 14rpx;
-		text-align: center;
-		line-height: 98rpx;
-
-		font-size: 32rpx;
-		color: #FFFFFF;
-	}
-</style>

+ 0 - 199
yshop/yshop-drink-uniapp/pages/components/pages/merchant/bell.vue

@@ -1,199 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  left-arrow
-	  @leftClick="$onClickLeft"
-	/>
-	<!-- #endif -->
-	<view class="">
-		<view class="bg-white">
-			<uv-tabs :list="list" @click="handleSelect" :scrollable="false"></uv-tabs>
-		</view> 
-		<view class="pl-2 pr-3 pb-3">
-			<scroll-view scroll-y class="sv" :style="{height:scrollHeight+'px'}" :scroll-top="scrollTop"  @scroll="scroll" @scrolltolower="reachBottom">
-				
-					<view class="" v-for="(item,index) in dataList" :key="index">
-						<view class="py-3 pl-2">{{item.name}}</view>
-						<view class="flex flex-wrap"  v-if="item.childrens.length > 0">
-							<view class="b-width" v-for="(item2,index2) in item.childrens" :key="index2">
-								<view v-if="deskStatus == 'empty'" class="p-3 text-center font-weight-bolder" style="background-color: #909399;color: #ffffff;" @click="detail(item2,'empty')">
-									<view class="p-1">{{item2.number}}</view>
-									<view class="p-1">空闲中</view>
-								</view>
-								<view v-else class="p-3 text-center font-weight-bolder" style="background-color: #059825;color: #ffffff;" @click="detail(item2,'ing')">
-									<view class="p-1">{{item2.number}}</view>
-									<view class="p-1">就餐中</view>
-								</view>
-								<view class="bg-white font-size-sm p-2 text-center">{{formatPast(item2.lastOrderTime)}}</view>
-							</view>
-						</view>
-						<uv-empty text="暂无就餐中数据" v-else  margin-top="20" mode="list"></uv-empty>
-					</view>
-			
-				
-			
-			</scroll-view>
-		<!-- 	<uv-popup ref="popup" @change="change" mode="bottom" custom-style="height: 80%;">
-				<view style="height: 1200rpx;">
-					<text>丙辰中秋,欢饮达旦,大醉,作此篇,兼怀子由。 明月几时有?把酒问青天。
-					不知天上宫阙,今夕是何年。我欲乘风归去,又恐琼楼玉宇,高处不胜寒。起舞弄清影,何似在人间。
-					转朱阁,低绮户,照无眠。不应有恨,何事长向别时圆?人有悲欢离合,月有阴晴圆缺,此事古难全。
-					但愿人长久,千里共婵娟。</text>
-				</view>
-			</uv-popup> -->
-		</view>
-		<uv-tabbar :value="value" @change="index=>value = index" activeColor="#059825">
-			<uv-tabbar-item text="首页" icon="home"></uv-tabbar-item>
-			<uv-tabbar-item text="订单" icon="order" @click="gopage('/pages/components/pages/merchant/order')"></uv-tabbar-item>
-			<uv-tabbar-item text="桌台" icon="bell" @click="gopage('/pages/components/pages/merchant/bell')"></uv-tabbar-item>
-			<uv-tabbar-item text="我的" icon="account" @click="gopage('/pages/components/pages/merchant/my')"></uv-tabbar-item>
-			<uv-tabbar-item text="返回" icon="arrow-leftward" @click="gopage2('/pages/index/index')"></uv-tabbar-item>
-		</uv-tabbar>
-	</view>
-</template>
-
-<script setup>
-import {
-  ref
-} from 'vue'
-import { onShow,onUnload,onLoad,onReady} from '@dcloudio/uni-app'
-import {
-  getList
-} from '@/api/due'
-import { useMainStore } from '@/store/store'
-import { storeToRefs } from 'pinia'
-import { formatPast } from '@/utils/util'
-const main = useMainStore()
-const { merchartShop } = storeToRefs(main)
-const title = ref('桌台')
-const scrollHeight = ref(0)
-const pH = ref(0)
-const scrollTop = ref(-1)
-const dataList = ref([])
-const dx = ref(0)
-const page = ref(1)
-const pageSize = ref(10)
-const lastPage = ref(false)
-const listStatus = ref('loadmore')
-let timer = ref('') 
-let inter = null
-const value = ref(2)
-const deskStatus = ref('empty')
-
-const list = ref( 
-	[{
-		name: '空闲中',
-		value: 'empty'
-	}, {
-		name: '就餐中',
-		value: 'ing'
-	}]
-)
-
-
-onReady(()=>{
-	uni.getSystemInfo({ 
-		success(res) {
-			pH.value = res.windowHeight 
-			let scrollH = uni.createSelectorQuery().select(".sv")
-			scrollH.boundingClientRect(data=>{
-				let pH0 = pH.value
-				scrollHeight.value = pH0 - data.top - 5  
-			}).exec()
-		}
-	})
-})
-
-onLoad(() => {
-	getData()
-	// inter = setInterval(() => {
-	// 	getData()
-	// }, 30000)
-})
-
-onUnload(() => {
-	//clearInterval(inter)
-})
-
-// 滚动到底部
-const reachBottom = () => {
-
-}
-
-const handleSelect = (key) => {
-  deskStatus.value = key.value
-  getData()
-}
-
-const gopage = (url) => {
-	uni.navigateTo({
-		url
-	})
-}
-
-const gopage2 = (url) =>{
-	uni.switchTab({
-		url
-	}) 
-
-}
-
-const getNewPath = (path) => {
-	const tempPath = decodeURIComponent(path);
-	const strList = tempPath.split("?scene=");
-	const scene = encodeURIComponent(strList[1]);
-	const newPath = strList[0] +"?scene=" + scene;
-	
-	return newPath;
-}
-const popup = ref()
-const detail = (desk,type) => {
-	//popup.value.open()
-	//return
-	if(type == 'empty'){
-		main.SET_UID_TYPE('admin')
-		//单号不存在去开台
-	
-		let newPath = 'pages/components/pages/scan/scan?scene=id=' + desk.id + '&number='+desk.number+'&shopId=' + desk.shopId
-		uni.navigateTo({
-			url: '/' + getNewPath(newPath)
-		})
-		
-		
-		//// #ifdef  H5
-		
-		//// #endif
-		
-	}else{
-		uni.navigateTo({
-			url: '/pages/components/pages/orders/detail?id=' + desk.lastOrderNo + '&isMer=1'
-		})
-	}
-	
-}
-
-
-const getData = async() => {
-	let desks = await getList({
-		shopId: merchartShop.value.id,
-		deskStatus: deskStatus.value
-	});
-	
-	dataList.value = desks
-
-}
-
-	
-</script>
-
-<style lang="scss">
-
- .b-width {
-	 width:30%;
-	 margin-left: 20rpx;
-	 margin-top: 20rpx;
- }
-	
-</style>

+ 0 - 326
yshop/yshop-drink-uniapp/pages/components/pages/merchant/cash.vue

@@ -1,326 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  left-arrow
-	  @leftClick="$onClickLeft"
-	/>
-	<!-- #endif -->
-	<view>
-		<view class="card flex content-center justify-between">
-			<view class="">
-				提现至
-			</view>
-			<view class="flex content-center " style="padding: 10rpx 0 0;box-sizing: border-box;" @click="setshow">
-				<!-- <image src="../static/icon13.png" mode=""></image> -->
-				<view class="" style="line-height: 30rpx;margin: 0 10rpx;" v-if='list.length!==0'>
-					{{bankName}}({{lastfour(bankCode)}})
-				</view>
-				<view class="" style="line-height: 30rpx;margin: 0 10rpx;font-size: 26rpx;" v-else>
-					请选择
-				</view>
-				<view class="">
-					<uv-icon name="arrow-right" size="18"></uv-icon>
-				</view>
-			</view>
-		</view>
-		<view class="card_one">
-			<view class="top">
-				提现金额
-			</view>
-			<view class="center flex content-center justify-between">
-				<view class="flex content-center">
-					<text class="one">¥</text>
-					<input class="two" v-model="amount" type="number" placeholder="请输入金额">
-				</view>
-				<view class="thr" @click="selectMony">
-					全部提现
-				</view>
-			</view>
-			<view class="bom">
-				可提现金额 ¥ {{merchartShop.balance}}
-			</view>
-		</view>
-		<view class="qrBtn" @click="goDrawal">
-			确认提现
-		</view>
-		<view class="content">
-			温馨提示: 提现申请发起后,预计在10个工作日内到账。
-		</view>
-
-		<uv-popup  ref="popup" mode="bottom">
-			<view>
-				<view class="popTitle flex content-center justify-between">
-					<view class=""></view>
-					<view class="">请选择提现账号</view>
-					<view class="" @click="gopage('/pages/components/pages/merchant/addCard')">添加</view>
-				</view>
-				<scroll-view scroll-y="true" style="height: 650rpx;">
-					<view class="" v-if="list.length!==0">
-						<view class="popItem flex content-center justify-between align-center" v-for="(item,i) in list" :key="i"
-							@click="selectCard(item.id,item.bankName,item.type,item.type == 1 ? item.bankCode : item.wxCode)">
-							<view class="left flex content-center">
-								<image class='img' src="/static/images/merchant/bank.svg" mode="aspectFill"></image>
-								<view class="">
-									<view class="name">
-										{{item.bankName}}({{lastfour(item.type ==1 ? item.bankCode : item.wxCode)}})
-									</view>
-								</view>
-							</view>
-							<view class="right">
-								<uv-radio-group v-model="checking">
-									<uv-radio  activeColor="red" label="" :name="item.id"></uv-radio>
-								</uv-radio-group>
-							</view>
-						</view>
-					</view>
-					<view class="" v-else>
-						<uv-empty mode="list"></uv-empty>
-					</view>
-				</scroll-view>
-
-			</view>
-		</uv-popup>
-	</view>
-</template>
-
-<script setup>
-import {
-  ref
-} from 'vue'
-import {
-	getCards,
-	addWith
-} from '@/api/merchant'
-import { onLoad} from '@dcloudio/uni-app'
-import { useMainStore } from '@/store/store'
-import { storeToRefs } from 'pinia'
-import { lastfour } from '@/utils/util'
-const main = useMainStore()
-const { merchartShop } = storeToRefs(main)
-const title = ref('提现')
-const bankId = ref(0)
-const bankName = ref('')
-const bankCode = ref('')
-const type = ref(1)
-const list = ref([])
-const amount = ref(0)
-const popup = ref()
-
-onLoad(() => {
-	getList()
-})
-
-const gopage = (url) =>{
-	popup.value.close()
-	uni.navigateTo({
-		url
-	})
-	
-
-}
-
-
-const getList  = async() => {
-	let res = await getCards({shopId:merchartShop.value.id})
-	if(res){
-		list.value = res
-		if(res.length > 0){
-			bankId.value= res[0].id
-			bankName.value = res[0].bankName
-			bankCode.value = res[0].bankCode
-		}
-		
-	}
-}
-
-const setshow = () => {
-	popup.value.open()
-	getList()
-}
-
-const selectCard = (id, name, wtype,code) =>{
-	bankId.value= id 
-	bankName.value = name
-	bankCode.value = code
-	type.value = wtype
-	
-	popup.value.close()
-	
-}
-
-const selectMony = () => {
-	amount.value = merchartShop.value.balance
-}
-
-const goDrawal = async() => {
-	if (amount == '' || amount <= 0) {
-		uni.showToast({
-			title: '没有可提现金额',
-			icon: 'error'
-		})
-		return
-	}
-	let res = await addWith({shopId:merchartShop.value.id,bankId:bankId.value,amount:amount.value,type:type.value});
-	if(res){
-		uni.navigateBack()
-	}
-}
-
-
-</script>
-
-<style lang="scss">
-	.add {
-		padding: 34rpx 40rpx;
-		box-sizing: border-box;
-		margin-right: 20rpx;
-		border-top: 1rpx solid #E4E4E4;
-
-		.left {
-			line-height: 90rpx;
-
-			image {
-				width: 90rpx;
-				height: 90rpx;
-			}
-		}
-	}
-
-	.popItem {
-		padding: 24rpx 40rpx;
-		box-sizing: border-box;
-		margin-right: 20rpx;
-		border-top: 1rpx solid #f3f3f3;
-
-		.head {
-			width: 90rpx;
-			height: 90rpx;
-			border-radius: 50%;
-			margin-right: 14rpx;
-		}
-
-		.left {
-			.name {
-				font-size: 32rpx;
-				color: #333333;
-				margin: 0 0 10rpx 20rpx;
-				line-height: 80rpx;
-			}
-
-			.img {
-				width: 80rpx;
-				height: 80rpx;
-				border-radius: 50%;
-				background-color: #f5f5f5;
-				text-align: center;
-				line-height: 80rpx;
-			}
-
-			.phone {
-				font-size: 28rpx;
-				color: #777777;
-			}
-		}
-
-	}
-
-	.popTitle {
-		text-align: center;
-		margin: 40rpx 0;
-		padding: 0 24rpx;
-		box-sizing: border-box;
-	}
-
-	page {
-		background: #FAFAFA;
-	}
-
-	.qrBtn {
-		width: 700rpx;
-		height: 98rpx;
-		background: #059825;
-		border-radius: 14rpx;
-		text-align: center;
-		line-height: 98rpx;
-		font-size: 32rpx;
-		color: #FFFFFF;
-		margin: 60rpx auto 40rpx;
-	}
-
-	.content {
-		width: 100%;
-		text-align: center;
-		height: 33rpx;
-		font-size: 24rpx;
-		font-weight: 400;
-		color: #AAAAAA;
-		line-height: 33rpx;
-		letter-spacing: 1px;
-		margin: 0 auto;
-	}
-
-
-	.card {
-		width: 700rpx;
-		height: 122rpx;
-		background: #FFFFFF;
-		border-radius: 14rpx;
-		margin: 20rpx auto;
-		padding: 40rpx 24rpx;
-		box-sizing: border-box;
-
-		image {
-			width: 30rpx;
-			height: 30rpx;
-		}
-
-	}
-
-	.card_one {
-		width: 700rpx;
-		height: 296rpx;
-		background: #FFFFFF;
-		border-radius: 14rpx;
-		margin: 0 auto;
-		padding: 32rpx 25rpx;
-		box-sizing: border-box;
-
-		.top {
-			font-size: 28rpx;
-			color: #2F3337;
-		}
-
-		.center {
-			border-bottom: 1rpx solid #EBEBEB;
-			padding: 22rpx 0;
-			box-sizing: border-box;
-			margin: 30rpx 0;
-
-			.one {
-				font-size: 40rpx;
-				color: #2F3337;
-				margin-right: 16rpx;
-			}
-
-			.two {
-				width: 300rpx;
-				height: 50rpx;
-				font-size: 48rpx;
-				color: #2F3337;
-			}
-
-			.thr {
-				font-size: 26rpx;
-				color: #00ABFF;
-				margin-top: 10rpx;
-			}
-		}
-
-		.bom {
-			font-size: 24rpx;
-			color: #777777;
-		}
-	}
-</style>

+ 0 - 161
yshop/yshop-drink-uniapp/pages/components/pages/merchant/cashAccount.vue

@@ -1,161 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  left-arrow
-	  @leftClick="$onClickLeft"
-	/>
-	<!-- #endif -->
-	<view class="p-3">
-		<view class="" v-if="list.length > 0">
-			<view class="card" style="backgroundColor:#6C80FF" v-for="(item,i) in list" :key="i" >
-				<view class="flex content-center justify-between">
-					<view class="left">
-						<view class="top">
-							{{item.bankName}}
-						</view>
-						<view class="bom">
-							
-							{{item.type == 1 ? '银行卡' : '微信账号'}}
-						</view>
-					</view>
-					<view class="right" @click="del(item.id)">
-						解绑
-					</view>
-				</view>
-				<view class="num">
-					{{item.type == 1 ? item.bankCode : "系统自动获取不显示"}}
-				</view>
-			</view>
-		</view>
-		<view class="" v-else>
-			<uv-empty mode="list"></uv-empty>
-		</view>
-
-
-		<view class="addcard flex content-center" @click="gopage('/pages/components/pages/merchant/addCard')">
-			<view class="text">
-				添加账号
-			</view>
-		</view>
-	</view>
-
-
-</template>
-
-<script setup>
-import {
-  ref
-} from 'vue'
-import {
-	getCards,
-	deleteCard
-} from '@/api/merchant'
-import { onLoad} from '@dcloudio/uni-app'
-import { useMainStore } from '@/store/store'
-import { storeToRefs } from 'pinia'
-import { lastfour } from '@/utils/util'
-const main = useMainStore()
-const { merchartShop } = storeToRefs(main)
-const title = ref('提现')
-const list = ref([])
-
-onLoad(() => {
-	getList()
-})
-
-const getList  = async() => {
-	let res = await getCards({shopId:merchartShop.value.id})
-	if(res){
-		list.value = res
-	}
-}
-
-const del = async(id) => {
-	uni.showModal({
-		title: '提示',
-		content: '确定要解绑?',
-		success: async function (res) {
-			if (res.confirm) {
-				let res1 =  await deleteCard({id:id})
-				if(res1){
-					getList()
-				}
-			} else if (res.cancel) {
-			}
-		}
-	});
-}
-
-const gopage = (url) =>{
-	uni.navigateTo({
-		url
-	})
-
-}
-
-</script>
-
-<style lang="scss">
-	.addcard {
-		width: 700rpx;
-		height: 100rpx;
-		background: #059825;
-		border-radius: 20rpx;
-		padding: 30rpx 0rpx 44rpx 250rpx;
-		box-sizing: border-box;
-		position: fixed;
-		bottom: 40rpx;
-		text-align: center;
-		z-index: 999;
-
-		.text {
-			font-size: 28rpx;
-			color: #ffffff;
-			margin-left: 16rpx;
-		}
-	}
-
-	.card {
-		margin-bottom: 20rpx;
-		width: 700rpx;
-		height: 258rpx;
-		border-radius: 20rpx;
-		padding: 40rpx;
-		box-sizing: border-box;
-		position: relative;
-		z-index: 9;
-
-		.num {
-			font-size: 46rpx;
-			color: #FFFFFF;
-			margin-top: 20rpx;
-		}
-
-		.left {
-			.top {
-				font-size: 32rpx;
-				font-weight: 500;
-				color: #FFFFFF;
-			}
-
-			.bom {
-				font-size: 24rpx;
-				color: rgba(255, 255, 255, 0.7);
-			}
-		}
-
-		.right {
-			font-size: 28rpx;
-			width: 125rpx;
-			height: 50rpx;
-			background-color: rgba(255, 255, 255, 0.5);
-			border-radius: 25rpx;
-			text-align: center;
-			line-height: 50rpx;
-			color: #FFFFFF;
-			z-index: 9;
-		}
-	}
-</style>

+ 0 - 417
yshop/yshop-drink-uniapp/pages/components/pages/merchant/index.vue

@@ -1,417 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  left-arrow
-	  @leftClick="$onClickLeft"
-	/>
-	<!-- #endif -->
-	<view class="p-3">
-		<view class="bg-white p-1">
-			<view class="flex content-center">
-				<image class="headimg" :src="shop.image" mode="aspectFill"></image>
-				<view class="title" style="line-height: 62rpx;">
-					{{shop.name}}
-				</view>
-			</view>
-			<view class="yuer">
-				<view class="bgcimg flex justify-between align-center p-3" >
-					<view>
-						<view class="one mb-2">
-							我的余额(元)
-						</view>
-						<view class="two">
-							{{shop.balance}}
-						</view>
-					</view>
-					<view class="align-center">
-						<view class="three flex align-center justify-center mb-3" @click="gopage('/pages/components/pages/merchant/wallet')">
-							<view>余额明细</view> <view class="iconfont iconarrow-right line-height-100"></view>
-						</view>
-						<view class="four"
-							@click="gopage('/pages/components/pages/merchant/cash')">
-							立即提现
-						</view>
-					</view>
-				</view>
-				<view class="yuer_bom flex justify-between ">
-					<view class="flex content-center" v-if="isShow">
-						<image src="/static/images/merchant/on.svg" mode=""></image>
-						<text>营业中</text>
-					</view>
-					<view class="flex content-center" v-else>
-						<image src="/static/images/merchant/off.svg" mode=""></image>
-						<text>停业中</text>
-					</view>
-					<uv-switch v-model="isShow" size="20" @change="change"></uv-switch>
-				</view>
-			</view>
-		</view>
-		<!-- 分类 -->
-		<view class="card flex flex-wrap content-between">
-			<view class="card_item" v-for="(item,i) in orderCountList" :key="i" @click="goOrder(i)">
-				<view class="type" >
-					<uv-badge type="error" max="99" :value="item.type"></uv-badge>
-				</view>
-				<image :src="item.url" mode=""></image>
-				<view class="">
-					{{item.name}}
-				</view>
-			</view>
-		</view>
-		<!-- 今日数据 -->
-		<view class="day_card">
-			<view class="title flex content-center justify-between">
-				<view class="flex content-center">
-					<view class="one">
-						今日数据
-					</view>
-				</view>
-				<view class="flex content-center">
-					<view class="two" style="line-height: 50rpx;margin-left: 20rpx;width: 370rpx;">
-						{{timer}} 实时更新
-					</view>
-					<view class="dayimg">
-						<image style="margin-top: 10rpx;" src="/static/images/merchant/refresh.svg" mode="" @click="getloding"></image>
-					</view>
-				</view>
-			</view>
-			<!-- 数据 -->
-			<view>
-				<uv-grid :border="true" col="2">
-					<uv-grid-item v-for="(item,Index) in gridlist" :key="Index">
-						<view class="grid">
-							<view class="grid_one">
-								{{item.title}}
-							</view>
-							<view class="grid_two">
-								{{item.type}}
-							</view>
-						</view>
-					</uv-grid-item>
-				</uv-grid>
-			</view>
-		</view>
-		<uv-tabbar :value="value" @change="index=>value = index" activeColor="#059825">
-			<uv-tabbar-item text="首页" icon="home"></uv-tabbar-item>
-			<uv-tabbar-item text="订单" icon="order" @click="gopage('/pages/components/pages/merchant/order')"></uv-tabbar-item>
-			<uv-tabbar-item text="桌台" icon="bell" @click="gopage('/pages/components/pages/merchant/bell')"></uv-tabbar-item>
-			<uv-tabbar-item text="我的" icon="account" @click="gopage('/pages/components/pages/merchant/my')"></uv-tabbar-item>
-			<uv-tabbar-item text="返回" icon="arrow-leftward" @click="gopage2('/pages/index/index')"></uv-tabbar-item>
-		</uv-tabbar>
-	</view>
-</template>
-
-<script setup>
-import {
-  ref
-} from 'vue'
-import { onShow,onUnload,onLoad,onHide} from '@dcloudio/uni-app'
-import {
-	getData,
-	changeStatus
-} from '@/api/merchant'
-import { useMainStore } from '@/store/store'
-import { storeToRefs } from 'pinia'
-import { formatDateTime } from '@/utils/util'
-const main = useMainStore()
-const title = ref('商户中心')
-const isShow = ref(true)
-const gridlist = ref([])
-const orderCountList = ref([])
-const shop = ref({})
-const value = ref(0)
-let timer = ref('') 
-let inter = null
-
-onShow(() => {
-	getHomeData()
-	inter = setInterval(() => {
-		getHomeData()
-	}, 6000)
-})
-
-onUnload(() => {
-	console.log('onUnload')
-	clearInterval(inter)
-})
-
-onHide(() => {
-	console.log('onHide')
-  clearInterval(inter)  
-})
-
-
-const getTime = () => {
-	let date = new Date() 
-	let hour = date.getHours()
-	
-	let endHour= new Date(shop.value.endTime).getHours()
-	let startHour = new Date(shop.value.startTime).getHours()
-
-	if(shop.value.status == 1){
-		if (hour >= startHour && hour <= endHour ) {
-			isShow.value = true
-		}else{
-			isShow.value = false
-		}
-	}else{
-		isShow.value = false
-	}
-	
-}
-
-const goOrder = (i) => {
-	uni.navigateTo({
-		url: '/pages/components/pages/merchant/order?index=' + (i + 1)
-	})
-}
-const  change = async() => {
-	let status = 0
-	!isShow.value
-	if(isShow.value){
-		status = 1
-	}
-	let res = await changeStatus({
-		shopId: shop.value.id,
-		status: status
-	})
-	
-}
-
-const gopage = (url) => {
-	uni.navigateTo({
-		url
-	})
-}
-
-const gopage2 = (url) =>{
-	uni.switchTab({
-		url
-	}) 
-
-}
-
-const  getloding = async() => {
-	uni.showLoading({
-		title: '数据加载中...'
-	})
-	getHomeData()
-	uni.hideLoading()
-}
-
-const getHomeData = async() => {
-	let res = await getData()
-	shop.value = res.appStoreShopVO
-	main.SET_MERCHART_SHOP(res.appStoreShopVO)
-	timer.value = formatDateTime(new Date())
-	if (shop.value.status == 1) {
-		isShow.value = true
-	} else {
-		isShow.value = false
-	}
-	getTime()
-	orderCountList.value = [{
-		url: '/static/images/merchant/order01.svg',
-		name: '待出单',
-	    type: res.appOrderCountVO.num01
-	}, {
-		url: '/static/images/merchant/order02.svg',
-		name: '待收货',
-	    type: res.appOrderCountVO.num02
-	}, {
-		url: '/static/images/merchant/order03.svg',
-		name: '已完成',
-		type: res.appOrderCountVO.num03
-	}, {
-		url: '/static/images/merchant/order04.svg',
-		name: '待退款',
-		type: res.appOrderCountVO.num04
-	}, {
-		url: '/static/images/merchant/order05.svg',
-		name: '待支付',
-	    type: res.appOrderCountVO.num05
-	}, {
-		url: '/static/images/merchant/order06.svg',
-		name: '已退款',
-		type: res.appOrderCountVO.num06
-	}, {
-		url: '/static/images/merchant/order07.svg',
-		name: '预约中',
-		type: res.appOrderCountVO.num07
-	}]
-	gridlist.value = [{
-		title: '今日营业额(元)',
-		type: res.appTodayDataVO.num01
-	}, {
-		title: '今日订单(单)',
-		type: res.appTodayDataVO.num02
-	}, {
-		title: '今日访客(人)',
-		type: res.appTodayDataVO.num03
-	}, {
-		title: '今日退单(单)',
-		type: res.appTodayDataVO.num04
-	}]
-
-}
-
-	
-</script>
-
-<style lang="scss">
-	.headimg {
-		width: 62rpx;
-		height: 62rpx;
-		margin-right: 20rpx;
-		border-radius: 50%;
-	}
-
-	.title {
-		font-size: 32rpx;
-		font-weight: 600;
-		color: #333333;
-	}
-
-	.yuer {
-		width: 700rpx;
-		height: 340rpx;
-		margin: 28rpx 0 0rpx;
-
-		.bgcimg {
-			width: 680rpx;
-			height: 250rpx;
-			border-radius: 15rpx;
-			//background: #24eb71;
-			background: linear-gradient(180deg, #25140a 0, #402b16 100%, #402b16 100%) !important;
-			//background: linear-gradient(180deg, #b7edcb 0, #b7edcb 0%, #b7edcb 0%) !important
-
-		}
-
-		.yuer_bom {
-			height: 100rpx;
-			padding: 28rpx 27rpx 0 0;
-			box-sizing: border-box;
-
-			image {
-				width: 36rpx;
-				height: 36rpx;
-				margin-right: 16rpx;
-			}
-
-			font-size: 24rpx;
-			color: #000000;
-		}
-
-		.one {
-			font-size: 28rpx;
-			color: #FFFFFF;
-		}
-
-		.two {
-			font-size: 50rpx;
-			font-weight: 600;
-			color: #FFFFFF;
-		}
-
-		.three {
-			font-size: 22rpx;
-			color: #FFFFFF;
-		}
-
-		.four {
-			width: 188rpx;
-			height: 52rpx;
-			background: #FFFFFF;
-			border-radius: 26rpx;
-			font-size: 22rpx;
-			color: #00ABFF;
-			line-height: 52rpx;
-			text-align: center;
-		}
-	}
-
-	.card {
-		width: 700rpx;
-		background: #FFFFFF;
-		border-radius: 10rpx;
-		padding: 10rpx 0rpx;
-		box-sizing: border-box;
-		margin: 40rpx 0;
-
-		.card_item {
-			position: relative;
-			width: 140rpx;
-			text-align: center;
-			font-size: 24rpx;
-			color: #777777;
-			margin: 16rpx 0;
-
-			image {
-				width: 74rpx;
-				height: 74rpx;
-			}
-
-			.type {
-				font-size: 14rpx;
-				line-height: 26rpx;
-				text-align: center;
-				position: absolute;
-				right: 36rpx;
-				top: 4rpx;
-				z-index: 99;
-			}
-		}
-	}
-
-	.day_card {
-		background-color: #fff;
-		margin-bottom: 40rpx;
-
-		.dayimg {
-			text-align: right;
-			width: 40rpx;
-		}
-
-		.title {
-			padding: 18rpx 30rpx;
-			box-sizing: border-box;
-			border-bottom: 1rpx solid #EBEBEB;
-
-			.one {
-				font-size: 34rpx;
-				color: #000000;
-			}
-
-			.two {
-				font-size: 24rpx;
-				color: #777777;
-				width: 350rpx;
-				height: 34rpx;
-			}
-
-			image {
-				width: 27rpx;
-				height: 34rpx;
-			}
-		}
-	}
-
-	.grid {
-		padding: 20rpx 80rpx;
-		box-sizing: border-box;
-		text-align: center;
-
-		.grid_one {
-			font-size: 26rpx;
-			color: #777777;
-			margin-bottom: 10rpx;
-		}
-
-		.grid_two {
-			font-size: 34rpx;
-			color: #000000;
-		}
-	}
-</style>

+ 0 - 220
yshop/yshop-drink-uniapp/pages/components/pages/merchant/my.vue

@@ -1,220 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  left-arrow
-	  @leftClick="$onClickLeft"
-	/>
-	<!-- #endif -->
-	<view class="p-3">
-		<view class="card">
-			<image class="headimg" :src="merchartShop.image" mode=""></image>
-			<view class="left" @click="gopage('/pages/merchant/shopInfo/shopInfo')">
-				<view class="one flex content-center">
-					<view class="me-text-beyond" style="width: 440rpx;">
-						{{merchartShop.name}}
-					</view>
-				</view>
-				<view class="two flex content-center">
-					<view class="flex content-center" style="margin-right: 20rpx;">
-						<span v-if="isShow">营业中</span>
-						<span v-else>歇业中</span>
-					</view>
-					<view class="flex content-center">
-						营业时间 {{formatDateTime(merchartShop.startTime,'hh:mm')}} - {{formatDateTime(merchartShop.endTime,'hh:mm')}}
-					</view>
-				</view>
-				<view class="four flex flex-column">
-					<view class="" style="margin-right: 20rpx;">
-						地址及电话:{{merchartShop.addressMap + ' ' + merchartShop.address + ' ' + merchartShop.mobile}}
-					</view>
-				</view>
-			</view>
-		</view>
-
-		<view class="card_one">
-			<view class="card_one_item flex content-center line" @click="gopage('/pages/components/pages/merchant/shopInfo')">
-				<image src="/static/images/merchant/myshop.svg" mode=""></image>
-				<view class="text">
-					店铺资料
-				</view>
-			</view>
-			<view class="card_one_item flex content-center line" 
-				@click="gopage('/pages/components/pages/merchant/cashAccount')">
-				<image src="/static/images/merchant/myaccount.svg" mode=""></image>
-				<view class="text">
-					提现账号
-				</view>
-			</view>
-			<view class="card_one_item flex content-center" @click="gopage('/pages/components/pages/merchant/withdrawal')">
-				<image src="/static/images/merchant/mywith.png" mode=""></image>
-				<view class="text">
-					提现明细
-				</view>
-			</view>
-		</view>
-
-		<uv-tabbar :value="value" @change="index=>value = index" activeColor="#059825">
-			<uv-tabbar-item text="首页" icon="home" @click="gopage('/pages/components/pages/merchant/index')"></uv-tabbar-item>
-			<uv-tabbar-item text="订单" icon="order" @click="gopage('/pages/components/pages/merchant/order')"></uv-tabbar-item>
-			<uv-tabbar-item text="桌台" icon="bell" @click="gopage('/pages/components/pages/merchant/bell')"></uv-tabbar-item>
-			<uv-tabbar-item text="我的" icon="account" @click="gopage('/pages/components/pages/merchant/my')"></uv-tabbar-item>
-			<uv-tabbar-item text="返回" icon="arrow-leftward" @click="gopage2('/pages/index/index')"></uv-tabbar-item>
-		</uv-tabbar>
-	</view>
-</template>
-
-<script setup>
-import {
-  ref
-} from 'vue'
-import {
-	getRevenue
-} from '@/api/merchant'
-import { onLoad} from '@dcloudio/uni-app'
-import { useMainStore } from '@/store/store'
-import { storeToRefs } from 'pinia'
-import { formatDateTime } from '@/utils/util'
-const main = useMainStore()
-const { merchartShop } = storeToRefs(main)
-const title = ref('我的')
-const isShow = ref(true)
-const value = ref(3)
-
-const gopage = (url) =>{
-	uni.navigateTo({
-		url
-	})
-
-}
-
-const getTime = () => {
-	let date = new Date() 
-	let hour = date.getHours()
-	
-	let endHour= new Date(merchartShop.value.endTime).getHours()
-	let startHour = new Date(merchartShop.value.startTime).getHours()
-
-	if(merchartShop.value.status == 1){
-		if (hour >= startHour && hour <= endHour ) {
-			isShow.value = true
-		}else{
-			isShow.value = false
-		}
-	}else{
-		isShow.value = false
-	}
-	
-}
-
-getTime()
-
-</script>
-
-<style lang="scss">
-
-	.line {
-		border-bottom: 1rpx solid #f3f3f3;
-	}
-
-
-	.card {
-		position: relative;
-		width: 700rpx;
-		height: 280rpx;
-		border-radius: 20rpx;
-		//background: #24eb71;
-		background: linear-gradient(180deg, #25140a 0, #402b16 100%, #402b16 100%) !important;
-
-		.headimg {
-			width: 124rpx;
-			height: 124rpx;
-			border-radius: 50%;
-			position: absolute;
-			top: 38rpx;
-			left: 40rpx;
-		}
-
-		.left {
-			position: absolute;
-			top: 38rpx;
-			left: 194rpx;
-
-			.one {
-				font-size: 40rpx;
-				font-weight: 500;
-				color: #FFFFFF;
-				line-height: 56rpx;
-
-				image {
-					width: 42rpx;
-					height: 42rpx;
-					margin: 4rpx 0 0 10rpx;
-				}
-			}
-
-			.two {
-				font-size: 24rpx;
-				color: #FFFFFF;
-				margin: 16rpx 0;
-
-				image {
-					width: 30rpx;
-					height: 30rpx;
-					margin-right: 6rpx;
-				}
-			}
-
-			.three {
-				margin: 20rpx 0;
-
-				.three_item {
-					width: 114rpx;
-					height: 44rpx;
-					background: #93DBFF;
-					border-radius: 4rpx;
-					font-size: 24rpx;
-					color: #0075AF;
-					text-align: center;
-					line-height: 44rpx;
-				}
-			}
-
-			.four {
-				font-size: 24rpx;
-				color: #FFFFFF;
-			}
-		}
-	}
-
-	.card_one {
-		border-radius: 14rpx;
-		width: 700rpx;
-		background-color: #fff;
-		padding: 0rpx 40rpx;
-		box-sizing: border-box;
-		margin: 40rpx 0;
-
-		.card_one_item {
-			height: 110rpx;
-			line-height: 110rpx;
-			display: flex;
-			align-items: center;
-
-			image {
-				width: 50rpx;
-				height: 50rpx;
-				margin-right: 20rpx;
-			}
-
-			.text {
-				font-size: 28rpx;
-				color: #333333;
-				line-height: 50rpx;
-				font-weight: 600;
-
-			}
-		}
-	}
-</style>

+ 0 - 573
yshop/yshop-drink-uniapp/pages/components/pages/merchant/order.vue

@@ -1,573 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  left-arrow
-	  @leftClick="$onClickLeft"
-	/>
-	<!-- #endif -->
-	<view>
-		<view>
-			<view class="card_top">
-				<view class="search_card">
-					<view class="search">
-						<uv-search searchIconSize='25' shape="round" @change="getlist(false)" height='60rpx' placeholder="请输入订单号/手机号"
-							:showAction="false" v-model="keyword">
-						</uv-search>
-					</view>
-				</view>
-				<view class="tabs">
-					<uv-tabs :list="tabListType" :current="current2" @change="change2" keyName="name" lineColor="#e45656" :scrollable="false"></uv-tabs>
-					<uv-tabs v-if="orderType != 'due'" @click='tabclick' :current='current' :scrollable = "scrollableOf" lineHeight='6rpx' lineWidth='60rpx' :list="tabList"
-						:activeStyle="{color: '#303133',fontWeight: '600',fontSize:'34rpx'}">
-					</uv-tabs>
-					<uv-tabs v-if="orderType == 'due'" @click='tabclick' :current='current3' :scrollable = "scrollableOf" lineHeight='6rpx' lineWidth='60rpx' :list="tabList2"
-						:activeStyle="{color: '#303133',fontWeight: '600',fontSize:'34rpx'}">
-					</uv-tabs>
-				</view>
-			</view>
-		</view>
-
-		<view class="" v-if="list.length==0">
-			<uv-empty mode="order"></uv-empty>
-		</view>
-		<view class="pad" v-else>
-			<view class="card_item" v-for="(item,i) in list" :key="i">
-				<view class="title flex content-center justify-between">
-					<view class="left flex content-center">
-						<view class="left_num">
-							<span v-if="item.orderType == 'desk' || item.orderType == 'due'">桌号:{{item.deskNumber}}</span>
-							<span v-else>取餐号:{{item.numberId}}</span>
-						</view>
-						<view class="left_text" v-if="item.orderType == 'takein'">自取订单</view>
-						<view class="left_text" v-if="item.orderType == 'takeout'">外卖订单</view>
-						<view class="left_text" v-if="item.orderType == 'desk'">堂食订单</view>
-						<view class="left_text" v-if="item.orderType == 'due'">预约订单</view>
-					</view>
-					<view class="right">
-						<text>{{item.statusDto.title}} </text>
-					</view>
-				</view>
-
-				<view class="content">
-					<view class="content_head flex justify-between">
-						<view class="left flex content-center">
-							<image :src="item.appUserInfoRespVO ? item.appUserInfoRespVO.avatar ? item.appUserInfoRespVO.avatar : '/static/images/mine/default.png' : '/static/images/mine/default.png'" mode="aspectFill"></image>
-							<view class="gray">
-								{{item.appUserInfoRespVO ? item.appUserInfoRespVO.nickname : '此用户已注销'}}
-							</view>
-						</view>
-						<view class="iconfont-yshop icon-mobile"  @click="makePhoneCall(item.userPhone)" style="font-size: 45rpx;margin-right: 40rpx;"></view>
-					</view>
-					<view class="content_item">
-						<text class="gray">下单时间:</text>{{formatDateTime(item.createTime)}}
-					</view>
-					<view class="content_item">
-						<text class="gray">订单编号:</text>{{item.orderId}}
-					</view>
-
-					<view class="content_item flex justify-between  content-center">
-						<view class="">
-							<text class="gray">订单金额:</text><text class="black">¥{{item.payPrice}}</text>
-						</view>
-						<view class="" style="padding-top: 16rpx;box-sizing: border-box;" @click="gopage('/pages/components/pages/merchant/orderDetail?id='+item.id)">
-							<uv-icon name="arrow-right" size="28rpx"></uv-icon>
-						</view>
-					</view>
-					<view class="content_item" v-if="item.refundStatus > 0">
-						<text class="gray">退款原因:</text><text class="orange">{{item.refundReasonWap}}</text>
-					</view>
-
-					<view class="shops" style="max-height: 320}" v-if="item.orderType != 'due'">
-						<view class="gray">
-							商品明细:
-						</view>
-						<view class="shop flex content-center" v-for="(cart,k) in item.cartInfo" :key="k">
-							<image :src="cart.image" mode="aspectFill"></image>
-							<view class="shop_item">
-								<view class="flex justify-between one">
-									<view class="">{{cart.title}}</view>
-									<view class="">¥{{cart.price}}</view>
-								</view>
-								<view class="two">
-									{{cart.spec}}
-								</view>
-								<view class="three">
-									×{{cart.number}}
-								</view>
-							</view>
-						</view>
-					</view>
-					<view class="shops" style="max-height: 320}" v-else>
-						<view class="gray">
-							预约信息:
-						</view>
-						<view class="shop flex content-center">
-							<image :src="item.appShopDeskVO.image" mode="aspectFill"></image>
-							<view class="shop_item">
-								<view class="flex justify-between one">
-									<view class="">{{item.appShopDeskVO.title}}</view>
-									<view class="">¥0.00</view>
-								</view>
-								<view class="two">
-									桌号:{{ item.appShopDeskVO.number }}
-								</view>
-								<view class="three">
-									×1
-								</view>
-							</view>
-						</view>
-					</view>
-					<view class="content_Bom" v-if="item.dueStatus == 1">
-						<view class="jdbtn" @click="cancelDueOrder(item.id)">
-							取消预约
-						</view>
-					</view>
-					<view class="content_Bom" v-if="item.statusDto.type == 1">
-						<view class="jdbtn" @click="doSend(item.id)">
-							出单
-						</view>
-					</view>
-					<view class="content_Bom" v-if="item.statusDto.type == 2">
-						<view class="jdbtn" @click="doTake(item.id)">
-							后台收货
-						</view>
-					</view>
-					<view class="content_Bom" >
-						<view class="jdbtn" @click="refund(item.id,item.payPrice)" v-if="item.statusDto.type == -1">
-							同意退款
-						</view>
-					</view>
-				</view>
-			</view>
-		</view>
-		
-		<uv-modal ref="mymodal" title="确认退款金额" :showCancelButton="true" @confirm="confirm">
-			<view class="flex mt-2">
-				<view class="mr-1">退款金额:</view><view><input v-model="refundMoney" /></view>	
-			</view>
-		</uv-modal>
-		<uv-tabbar :value="value" @change="index=>value = index"  activeColor="#059825">
-			<uv-tabbar-item text="首页" icon="home" @click="gopage('/pages/components/pages/merchant/index')"></uv-tabbar-item>
-			<uv-tabbar-item text="订单" icon="order" @click="gopage('/pages/components/pages/merchant/order')"></uv-tabbar-item>
-			<uv-tabbar-item text="桌台" icon="bell" @click="gopage('/pages/components/pages/merchant/bell')"></uv-tabbar-item>
-			<uv-tabbar-item text="我的" icon="account" @click="gopage('/pages/components/pages/merchant/my')"></uv-tabbar-item>
-			<uv-tabbar-item text="返回" icon="arrow-leftward" @click="gopage2('/pages/index/index')"></uv-tabbar-item>
-		</uv-tabbar>
-	</view>
-</template>
-
-<script setup>
-import {
-  ref
-} from 'vue'
-import {
-	orderList,
-	orderSend,
-	orderTake,
-	orderRefund
-} from '@/api/merchant'
-import {
-  cancelDue
-} from '@/api/order'
-import { onShow,onLoad,onReachBottom} from '@dcloudio/uni-app'
-import { useMainStore } from '@/store/store'
-import { storeToRefs } from 'pinia'
-import { formatDateTime } from '@/utils/util'
-const main = useMainStore()
-const { merchartShop } = storeToRefs(main)
-const title = ref('订单列表')
-const value = ref(1)
-const page = ref(1)
-const pageSize = ref(10)
-const keyword = ref('')
-const orderType = ref('all')
-const scrollableOf = ref(true)
-const tabListType = ref([
-		{
-			type: 'all',
-			name: '全部',
-		},
-		{
-			type: 'takein',
-			name: '自取',
-		}, {
-			type: 'takeout',
-			name: '外卖',
-		}, {
-			type: 'desk',
-			name: '堂食'
-		}, {
-			type: 'due',
-			name: '预约'
-		}]
-)
-const tabList = ref(
-	[{
-		type: -1,
-		name: '全部',
-	}, {
-		type: 0,
-		name: '待出单',
-	}, {
-		type: 1,
-		name: '待收货',
-	}, {
-		type: 2,
-		name: '已完成'
-	}, {
-		type: 3,
-		name: '待退款'
-	}, {
-		type: 4,
-		name: '待支付'
-	}, {
-		type: 5,
-		name: '已退款'
-	}]
-)
-const tabList2 = ref(
-	[{
-		type: 1,
-		name: '预约中',
-	}, {
-		type: 2,
-		name: '已取消',
-	}, {
-		type: 3,
-		name: '已完成',
-	}]
-)
-const current = ref(0)
-const current2 = ref(0)
-const current3 = ref(0)
-const list = ref([])
-const type = ref(-1)
-const refundMoney = ref(0)
-onLoad((e) => {
-	if (e.index) {
-		if(e.index == 7){
-			//current.value = 0
-			type.value = 1
-			current2.value = 3
-			orderType.value = 'due'
-			scrollableOf.value = false
-		}else{
-			current.value = e.index
-			type.value = e.index - 1
-		}
-	}
-	list.value = []
-	getlist()
-})
-
-onReachBottom(() => {
-	page.value++
-	getlist(true)
-})
-
-const makePhoneCall = (mobile) =>{
-	// if(!mobile){
-	// 	uni.showToast({
-	// 		title: '!',
-	// 		icon: 'error'
-	// 	})
-	// }
-	uni.makePhoneCall({
-		phoneNumber: mobile,
-		fail(res) {
-
-		}
-	})
-}
-
-const cancelDueOrder = async(id) => {
-	let data = await cancelDue({id:id});
-	if (data) {
-		page.value = 1
-		getlist()
-	}
-}
-
-
-//出单
-const doSend = async(id) => {
-	let res = await orderSend({id:id})
-	if(res){
-		page.value = 1
-		getlist()
-	}
-}
-
-//收货
-const doTake = async(id) => {
-	let res = await orderTake({id:id})
-	if(res){
-		page.value = 1
-		getlist()
-	}
-}
-
-const confirmId = ref(0)
-//退款
-const mymodal = ref()
-const refund = (id,money) => {
-	refundMoney.value = money
-	confirmId.value = id
-	mymodal.value.open()
-	
-}
-
-const confirm = async() => {
-	let res1 =  await orderRefund({id:confirmId.value,price:refundMoney.value})
-	if(res1){
-		page.value = 1
-		getlist()
-	}
-}
-
-
-const tabclick = (e) => {
-	page.value = 1
-	type.value = e.type
-	keyword .value= ''
-	list.value = []
-	getlist()
-}
-
-const change2 = (e) => {
-	page.value = 1
-	
-	orderType.value = e.type
-	if(e.type == 'due'){
-		scrollableOf.value = false
-		//tabList.value = tabList2.value
-		type.value = 1
-	}else{
-		type.value = -1
-		current.value = 0
-		scrollableOf.value = true
-	}
-	getlist()
-}
-const gopage = (url) =>{
-	uni.navigateTo({
-		url
-	})
-
-}
-
-const gopage2 = (url) =>{
-	uni.switchTab({
-		url
-	}) 
-
-}
-
-const getlist = async(isRefresh = false) => {
-	let ordersData = await orderList({shopId:merchartShop.value.id,page:page.value,
-	 limit:pageSize.value,type:type.value,key:keyword.value,orderType:orderType.value});
-	
-	if(ordersData) {
-		if(isRefresh){
-			if(ordersData.length == 0){
-				uni.showToast({
-					title: '已经到底啦',
-					duration: 2000
-				});
-				return
-			}
-			list.value = list.value.concat(ordersData)
-			page.value += 1
-		}else{
-			list.value = ordersData
-		}
-		
-	}
-}
-
-
-
-
-	
-</script>
-
-<style lang="scss">
-
-	.card_top {
-		// height: 200rpx;
-		background-color: #fff;
-		padding: 0rpx 35rpx 10rpx;
-		box-sizing: border-box;
-
-		.search_card {
-			margin-top: 10rpx;
-			margin-bottom: 10rpx;
-
-			.search {
-				//width: 440rpx;
-				border-radius: 20rpx;
-			}
-
-			.search_btn {
-				width: 209rpx;
-				height: 60rpx;
-				background: #059825;
-				border-radius: 15rpx;
-				text-align: center;
-				line-height: 60rpx;
-				font-size: 28rpx;
-				color: #FFFFFF;
-			}
-		}
-	}
-
-	.pad {
-		margin-top: 3vh;
-		padding: 0rpx 26rpx;
-		box-sizing: border-box;
-
-		.card_item {
-			width: 700rpx;
-			background: #FFFFFF;
-			border-radius: 10rpx;
-			margin: 20rpx 0;
-
-			.title {
-				border-bottom: 1rpx solid #EBEBEB;
-				padding: 14rpx 24rpx;
-				box-sizing: border-box;
-
-				.left {
-					.left_num {
-						padding: 0rpx 12rpx;
-						box-sizing: border-box;
-						background: #059825;
-						border-radius: 10rpx;
-						font-size: 24rpx;
-						font-weight: bolder;
-						color: #FFFFFF;
-						text-align: center;
-						line-height: 64rpx;
-						margin-right: 15rpx;
-					}
-
-					.left_text {
-						font-size: 28rpx;
-						font-weight: bolder;
-						color: #333333;
-						text-align: center;
-						line-height: 64rpx;
-					}
-				}
-
-				.right {
-					font-size: 32rpx;
-					color: #FF9C2E;
-					line-height: 64rpx;
-				}
-			}
-
-			.content {
-				padding: 24rpx;
-				box-sizing: border-box;
-
-				.content_Bom {
-					margin: 20rpx 0 0;
-
-					.jdbtn {
-						margin: 46rpx auto 0;
-						width: 500rpx;
-						height: 66rpx;
-						background: #059825;
-						border-radius: 15rpx;
-						text-align: center;
-						line-height: 66rpx;
-						font-size: 30rpx;
-						color: #FFFFFF;
-					}
-
-				}
-
-				.content_item {
-					font-size: 30rpx;
-					font-weight: 400;
-					color: #333333;
-					margin: 20rpx 0;
-				}
-
-				.orange {
-					font-size: 30rpx;
-					color: #FF9C2E;
-				}
-
-				.gray {
-					font-size: 30rpx;
-					color: #777777;
-				}
-
-				.black {
-					font-size: 32rpx;
-					font-weight: 600;
-					color: #333333;
-				}
-
-				.content_head {
-					.left {
-						image {
-							width: 60rpx;
-							height: 60rpx;
-							border-radius: 50%;
-							margin-right: 20rpx;
-						}
-
-						font-size: 32rpx;
-						font-weight: 600;
-						color: #333333;
-						line-height: 60rpx;
-					}
-				}
-
-				.shops {
-
-					overflow: hidden;
-
-					.shop {
-						margin: 20rpx 0;
-
-						image {
-							width: 122rpx;
-							height: 120rpx;
-							border-radius: 10rpx;
-							margin-right: 20rpx;
-						}
-
-						.shop_item {
-							width: 500rpx;
-
-							.one {
-								font-size: 30rpx;
-								color: #333333;
-							}
-
-							.two {
-								font-size: 24rpx;
-								color: #777777;
-								margin: 6rpx 0;
-							}
-
-							.three {
-								font-size: 24rpx;
-								color: #777777;
-							}
-						}
-					}
-				}
-
-			}
-
-
-		}
-	}
-</style>

+ 0 - 552
yshop/yshop-drink-uniapp/pages/components/pages/merchant/orderDetail.vue

@@ -1,552 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  left-arrow
-	  @leftClick="$onClickLeft"
-	/>
-	<!-- #endif -->
-	<view style="padding-bottom: 120rpx;">
-		<view class="card">
-			<view class="user flex content-center justify-between">
-				<view class="left flex content-center ">
-					<image :src="detail.appUserInfoRespVO ? detail.appUserInfoRespVO.avatar ? detail.appUserInfoRespVO.avatar : '/static/images/mine/default.png' : '/static/images/mine/default.png'" mode="aspectFill"></image>
-					<view class="" style="line-height: 64rpx;">
-						{{detail.appUserInfoRespVO ? detail.appUserInfoRespVO.nickname : '此用已注销'}}
-					</view>
-				</view>
-				<view class="right">
-					<view class="iconfont-yshop icon-mobile"  @click="makePhoneCall(detail.userPhone)" style="font-size: 45rpx;margin-right: 40rpx;"></view>
-				</view>
-			</view>
-
-		</view>
-
-		<view class="order_details">
-			<view class="card_one flex justify-between content-center "  v-if="detail.orderType != 'due'">
-				<view class="" v-if="detail.orderType == 'desk'">
-					桌号:{{detail.deskNumber}}
-				</view>
-				<view class="left" v-else>
-					取餐号:{{detail.numberId}}
-				</view>
-
-				<view class="right">
-					<text>{{detail.statusDto.title}}</text>
-				</view>
-			</view>
-			<view class="card_two flex justify-between content-center" >
-				<view class="left">配送方式:</view>
-				<view class="right"  v-if="detail.orderType == 'takein'">自取</view>
-				<view class="right" v-if="detail.orderType == 'takeout'">外卖</view>
-				<view class="right" v-if="detail.orderType == 'desk'">堂食</view>
-				<view class="right" v-if="detail.orderType == 'due'">预约</view>
-			</view>
-			<view class="card_three">
-				<view class="item flex justify-between content-center" style="border-bottom: 1rpx solid #EBEBEB;">
-					<view class="left">
-						下单时间:
-					</view>
-					<view class="right">
-						{{formatDateTime(detail.createTime)}}
-					</view>
-				</view>
-				<view class="item flex justify-between content-center">
-					<view class="left">
-						订单编号:
-					</view>
-					<view class="right">
-						{{detail.orderId}}
-					</view>
-				</view>
-
-			</view>
-
-
-			
-			
-			<view class="card_four" v-if="detail.orderType != 'due'">
-				<view class="title">
-					商品明细
-				</view>
-				<view class="" v-if="detail.orderType == 'desk'">
-					<view style="text-align: center;color: #f56c6c;margin-top: 10rpx;" v-for="(n,k) in num + 1" :key="k">
-						 <text v-if="n > 1" style="">
-							第{{ n - 1 }}次加菜
-						  </text>
-						  <text v-else style="">
-							首次点菜
-						  </text>
-					
-						<view class="shop flex content-center" v-for="(cart,k) in detail.cartInfo" :key="k">
-							<block v-if="cart.addProductMark == (n-1)">
-								<image :src="cart.image" mode="aspectFill"></image>
-								<view class="shop_item">
-									<view class="flex justify-between  one">
-										<view class="">{{cart.title}}</view>
-										<view class="">¥{{cart.price}}</view>
-									</view>
-									<view class="two">
-										{{cart.spec}}
-									</view>
-									<view class="three">
-										×{{cart.number}}
-									</view>
-								</view>
-							</block>
-						</view>
-					</view>
-				</view>
-				<view class="" v-else>
-					<view class="shop flex content-center" v-for="(cart,k) in detail.cartInfo" :key="k">
-							<image :src="cart.image" mode="aspectFill"></image>
-							<view class="shop_item">
-								<view class="flex justify-between  one">
-									<view class="">{{cart.title}}</view>
-									<view class="">¥{{cart.price}}</view>
-								</view>
-								<view class="two">
-									{{cart.spec}}
-								</view>
-								<view class="three">
-									×{{cart.number}}
-								</view>
-							</view>
-					</view>
-				</view>
-			</view>
-			<view class="card_four" v-else>
-				<view class="title">
-					预约餐桌
-				</view>
-				<view class="">
-					<view class="shop flex content-center">
-							<image :src="detail.appShopDeskVO.image" mode="aspectFill"></image>
-							<view class="shop_item">
-								<view class="flex justify-between  one">
-									<view class="">{{detail.appShopDeskVO.title}}</view>
-									<view class="">¥0.00</view>
-								</view>
-								<view class="two">
-									桌号:{{ detail.appShopDeskVO.number }}
-								</view>
-								<view class="three">
-									×1
-								</view>
-							</view>
-					</view>
-				</view>
-			</view>
-
-			<view class="flex justify-between card_five">
-				<view class="left">备注:</view>
-				<view class="right">{{detail.remark ||'无'}}</view>
-			</view>
-
-			<view class="card_three" v-if="detail.orderType != 'due'">
-				<view class="item1 flex justify-between content-center" style="border-bottom: 1rpx solid #EBEBEB;">
-					<view class="flex content-center left">
-						<image class="quna" src="/static/images/merchant/coupon.png" mode=""></image>抵用券:
-					</view>
-					<view class="right">
-						-¥{{detail.couponPrice}}
-					</view>
-				</view>
-				<view class="item1 flex justify-between content-center">
-					<view class="one">
-						共计:
-					</view>
-					<view class="right">
-						<text class="two" >已优惠¥{{detail.couponPrice}}</text><text
-							class="thr">¥{{detail.payPrice}}</text>
-					</view>
-				</view>
-			</view>
-			<view class="card_three" v-else>
-				<view class="item1 flex justify-between content-center">
-					<view class="one">
-						预约人:
-					</view>
-					<view class="right" style="color: black;">
-					  {{detail.realName}}
-					</view>
-				</view>
-				<view class="item1 flex justify-between content-center">
-					<view class="one">
-						预约时间:
-					</view>
-					<view class="right" style="color: black;">
-					  {{formatDateTime(detail.dueTime)}}
-					</view>
-				</view>
-				<view class="item1 flex justify-between content-center">
-					<view class="one">
-						到达时间:
-					</view>
-					<view class="right" style="color: black;">
-					  {{detail.reachTime}}
-					</view>
-				</view>
-				<view class="item1 flex justify-between content-center">
-					<view class="one">
-						预约桌号:
-					</view>
-					<view class="right" style="color: black;">
-					  {{detail.deskNumber}}
-					</view>
-				</view>
-				<view class="item1 flex justify-between content-center">
-					<view class="one">
-						预留电话:
-					</view>
-					<view class="right" style="color: black;">
-					  {{detail.userPhone}}
-					</view>
-				</view>
-			</view>
-			<view class="card_two flex justify-between content-center" v-if="detail.orderType != 'due'">
-				<view class="left">
-					支付方式:
-				</view>
-				<view class="right">
-					{{detail.statusDto.payType}}
-				</view>
-			</view>
-		</view>
-		<view class="fixed flex content-center" v-if="detail.dueStatus == 1">
-			<view class="btn" @click="cancelDueOrder(detail.id)">
-				取消预约
-			</view>
-		</view>
-		<view class="fixed flex content-center" v-if="detail.statusDto.type == 2">
-			<view class="btn" @click="doTake(detail.id)">
-				后台收货
-			</view>
-		</view>
-		<view class="fixed flex content-center" v-if="detail.statusDto.type == -1">
-			<view class="btn" @click="refund(detail.id,detail.payPrice)">
-				同意退款
-			</view>
-		</view>
-		<view class="fixed flex justify-between content-center" v-if="detail.statusDto.type == 1">
-			<view class="btn" @click="doSend(detail.id)">
-				出单
-			</view>
-		</view>
-		<uv-modal ref="mymodal" title="确认退款金额" :showCancelButton="true" @confirm="confirm">
-			<view class="flex mt-2">
-				<view class="mr-1">退款金额:</view><view><input v-model="refundMoney" /></view>	
-			</view>
-		</uv-modal>
-	</view>
-</template>
-
-<script setup>
-import {
-  ref
-} from 'vue'
-import {
-	orderDetail,
-	orderRefund
-} from '@/api/merchant'
-import {
-  cancelDue
-} from '@/api/order'
-import { onLoad} from '@dcloudio/uni-app'
-import { formatDateTime } from '@/utils/util'
-
-const title = ref('订单详情')
-const detail = ref({statusDto:{}})
-const num = ref(0)
-
-onLoad((e) => {
-	goDetail(e.id)
-})
-
-const goDetail = async(id) => {
-	let res = await orderDetail({id:id})
-	if(res){
-		detail.value = res
-		num.value = res.cartInfo[res.cartInfo.length - 1].addProductMark
-	}
-}
-
-const makePhoneCall = (mobile) =>{
-	uni.makePhoneCall({
-		phoneNumber: mobile,
-		fail(res) {
-		}
-	})
-}
-
-
-const cancelDueOrder = async(id) => {
-	let data = await cancelDue({id:id});
-	if (data) {
-		goDetail(id)
-	}
-}
-
-//出单
-const doSend = async(id) => {
-	let res = await orderSend({id:id})
-	if(res){
-		goDetail(id)
-	}
-}
-
-//收货
-const doTake = async(id) => {
-	let res = await orderTake({id:id})
-	if(res){
-		goDetail(id)
-	}
-}
-const refundMoney = ref(0)
-const confirmId = ref(0)
-
-
-const mymodal = ref()
-const refund = (id,money) => {
-	refundMoney.value = money
-	confirmId.value = id
-	mymodal.value.open()
-	
-}
-
-const confirm = async() => {
-	let res1 =  await orderRefund({id:confirmId.value,price:refundMoney.value})
-	if(res1){
-		goDetail(id)
-	}
-}
-
-</script>
-
-<style lang="scss">
-
-	.fixed {
-		position: fixed;
-		bottom: 0;
-		left: 0;
-		right: 0;
-		background-color: #fff;
-
-		.btn {
-			width: 750rpx;
-			height: 120rpx;
-			background: #059825;
-			text-align: center;
-			line-height: 120rpx;
-			color: #fff;
-			font-size: 28rpx;
-		}
-	}
-
-	.card {
-		width: 100vw;
-		background-color: #fff;
-		padding: 25rpx 34rpx;
-		box-sizing: border-box;
-
-		.black {
-			font-size: 32rpx;
-			color: #333333;
-		}
-
-		.orange {
-			width: 520rpx;
-			font-size: 30rpx;
-			color: #FF9C2E;
-		}
-
-		.user {
-
-			.left {
-				image {
-					width: 60rpx;
-					height: 60rpx;
-					border-radius: 50%;
-					margin-right: 20rpx;
-				}
-
-				font-size: 32rpx;
-				color: #333333;
-			}
-
-			.right {
-				image {
-					width: 60rpx;
-					height: 60rpx;
-					border-radius: 50%;
-				}
-			}
-
-
-		}
-	}
-
-	.order_details {
-		padding: 25rpx 25rpx 200rpx;
-
-		.card_one {
-			background: #FFFFFF;
-			border-radius: 10rpx;
-			padding: 20rpx 30rpx;
-
-			.left {
-				font-size: 40rpx;
-				color: #333333;
-			}
-
-			.right {
-				font-size: 34rpx;
-				color: #FF9C2E;
-				line-height: 50rpx;
-			}
-		}
-
-		.card_two {
-			background: #FFFFFF;
-			border-radius: 10rpx;
-			padding: 20rpx 30rpx;
-			margin: 20rpx 0;
-
-			.left {
-				font-size: 32rpx;
-				color: #333333;
-			}
-
-			.right {
-				font-size: 32rpx;
-				color: #333333;
-			}
-		}
-
-		.card_three {
-			background: #FFFFFF;
-			border-radius: 10rpx;
-			padding: 14rpx 30rpx;
-			margin: 20rpx 0;
-
-			.item1 {
-				padding: 20rpx 0;
-				box-sizing: border-box;
-				text-align: center;
-
-				.quna {
-					width: 35rpx;
-					height: 35rpx;
-					margin-right: 12rpx;
-				}
-
-				.left {
-					font-size: 24rpx;
-					color: #333333;
-				}
-
-				.right {
-					font-size: 34rpx;
-					color: #FB2A57;
-				}
-
-				.one {
-					font-size: 30rpx;
-					color: #333333;
-				}
-
-				.two {
-					font-size: 24rpx;
-					color: #777777;
-				}
-
-				.thr {
-					font-size: 42rpx;
-					color: #333333;
-				}
-			}
-
-			.item {
-				height: 80rpx;
-				line-height: 80rpx;
-
-				.left {
-					font-size: 30rpx;
-					color: #333333;
-				}
-
-				.right {
-					font-size: 32rpx;
-					color: #333333;
-				}
-			}
-
-		}
-
-		.card_four {
-			background: #FFFFFF;
-			border-radius: 10rpx;
-			padding: 24rpx 30rpx;
-			margin: 20rpx 0;
-
-			.title {
-				font-size: 32rpx;
-				border-bottom: 1rpx solid #F2F2F2;
-				color: #232323;
-				padding: 0 0 12rpx;
-				box-sizing: border-box;
-
-
-			}
-
-
-			.shop {
-				margin: 20rpx 0;
-
-				image {
-					width: 122rpx;
-					height: 120rpx;
-					border-radius: 10rpx;
-					margin-right: 20rpx;
-				}
-
-				.shop_item {
-					width: 500rpx;
-
-					.one {
-						font-size: 28rpx;
-						color: #333333;
-					}
-
-					.two {
-						font-size: 24rpx;
-						color: #777777;
-						margin: 6rpx 0;
-					}
-
-					.three {
-						font-size: 24rpx;
-						color: #777777;
-					}
-				}
-			}
-		}
-
-		.card_five {
-			background: #FFFFFF;
-			border-radius: 10rpx;
-			padding: 14rpx 30rpx;
-			margin: 20rpx 0;
-			font-size: 32rpx;
-			color: #333333;
-
-			.right {
-				width: 530rpx;
-			}
-
-		}
-
-	}
-
-</style>

+ 0 - 240
yshop/yshop-drink-uniapp/pages/components/pages/merchant/shopInfo.vue

@@ -1,240 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  left-arrow
-	  @leftClick="$onClickLeft"
-	/>
-	<!-- #endif -->
-	<view style="padding-bottom: 120rpx;" class="p-3">
-		<view class="card">
-			<view class="card_item flex content-center">
-				<view class="left">
-					店铺名称
-				</view>
-				<input class="right" v-model="formData.name" type="text" placeholder="请输入">
-			</view>
-			<view class="card_item flex content-center">
-				<view class="left">
-					店铺电话
-				</view>
-				<input class="right" v-model="formData.mobile" type="text" placeholder="请输入">
-			</view>
-			<view class="card_item flex content-center">
-				<view class="left">
-					地图地址
-				</view>
-				<view class="input" @click="chooseLocation">{{formData.addressMap ? formData.addressMap : '请选择地址'}}</view>
-			</view>
-			<view class="card_item flex content-center">
-				<view class="left">
-					详细地址
-				</view>
-				<input class="right" v-model="formData.address" type="text" placeholder="请输入">
-			</view>
-		</view>
-
-		<view class="card_thr">
-			<view class="card_item flex content-center justify-between line">
-				<view class="left">
-					营业开始时间
-				</view>
-				<view class="flex content-center" @click="setShow(1)">
-					{{formatDateTime(formData.startTime,'hh:mm:ss') || '请选择'}}
-					<uv-icon name="arrow-right" size="20"></uv-icon>
-				</view>
-			</view>
-			<view class="card_item flex  content-center justify-between">
-				<view class="left">
-					营业结束时间
-				</view>
-				<view class="flex content-center" @click="setShow(2)">
-					{{formatDateTime(formData.endTime,'hh:mm:ss') || '请选择'}}
-					<uv-icon name="arrow-right" size="20"></uv-icon>
-				</view>
-			</view>
-		</view>
-		<uv-datetime-picker ref="datetimePicker" @confirm='confirm' v-model="value1" mode="time">
-		</uv-datetime-picker>
-
-		<view class="fixed">
-			<view class="btn" @click="update">
-				保存
-			</view>
-		</view>
-
-	</view>
-</template>
-
-<script setup>
-import {
-  ref
-} from 'vue'
-import {
-	updateShop
-} from '@/api/merchant'
-import { onLoad} from '@dcloudio/uni-app'
-import { useMainStore } from '@/store/store'
-import { storeToRefs } from 'pinia'
-import { formatDateTime } from '@/utils/util'
-const main = useMainStore()
-const { merchartShop } = storeToRefs(main)
-const title = ref('店铺资料')
-const datetimePicker = ref()
-const index = ref(0)
-const value1 = ref(formatDateTime(new Date()))
-
-const formData = ref({
-	id: merchartShop.value.id,
-	name: merchartShop.value.name,
-	mobile: merchartShop.value.mobile,
-	addressMap: merchartShop.value.addressMap,
-	address: merchartShop.value.address,
-	startTime: merchartShop.value.startTime,
-	endTime: merchartShop.value.endTime
-})
-
-const  update = async() =>{
-	let res = await updateShop(formData.value)
-	if(res){
-		main.SET_MERCHART_SHOP(res)
-		uni.navigateBack()
-	}
-}
-
-const setShow = (i) =>{
-	datetimePicker.value.open()
-	index.value = i
-}
-
-const confirm = (e) =>{
-	let myTime =  e.value.split(':')
-	
-	let now = new Date()
-	let nowStr = formatDateTime(now,'yyyy-MM-dd')
-
-	let newTime =nowStr + ' ' + e.value;
-	if(index.value == 1){
-		formData.value.startTime = new Date(newTime)
-	}else{
-		formData.value.endTime = new Date(newTime)
-	}
-
-	
-}
-
-const chooseLocation = async() => {
-	uni.chooseLocation({
-		success: function (res) {
-			formData.value.addressMap = res.address + ' ' + res.name;
-			formData.value.lat= res.latitude;
-			formData.value.lng = res.longitude;
-		},
-		fail: function(res1) {
-		},
-		complete: function(res2) {
-		},
-		
-	});
-}
-
-
-</script>
-
-<style lang="scss">
-	.mlimg {
-		width: 479rpx;
-		height: 280rpx;
-	}
-
-	.fixed {
-		position: fixed;
-		bottom: 0;
-		left: 0;
-		right: 0;
-		background-color: #fff;
-		height: 120rpx;
-
-		.btn {
-			width: 700rpx;
-			height: 98rpx;
-			background: #059825;
-			border-radius: 14rpx;
-			margin: 0 auto;
-			line-height: 98rpx;
-			text-align: center;
-			font-size: 32rpx;
-			color: #FFFFFF;
-		}
-	}
-
-
-	.card {
-		padding: 20rpx 40rpx;
-		box-sizing: border-box;
-		background-color: #fff;
-
-		.title {
-			width: 620rpx;
-			height: 64rpx;
-			background: #A0E0FF;
-			border-radius: 10rpx;
-			text-align: center;
-			font-size: 24rpx;
-			color: #0097E1;
-			line-height: 64rpx;
-		}
-
-		.card_item {
-			padding: 34rpx 0;
-			box-sizing: border-box;
-			border-bottom: 1rpx solid #f5f5f5;
-
-			.left {
-				font-size: 28rpx;
-				color: #333333;
-				width: 140rpx;
-			}
-
-			.yzm {
-				width: 300rpx;
-			}
-
-			.btn {
-				width: 158rpx;
-				height: 50rpx;
-				background: #FFFFFF;
-				border-radius: 25rpx;
-				border: 2rpx solid #0CAFFE;
-				font-size: 24rpx;
-				color: #0CAFFE;
-				text-align: center;
-				line-height: 50rpx;
-				margin-top: -10rpx;
-				margin-left: 20rpx;
-			}
-		}
-	}
-
-
-	.card_thr {
-		padding: 20rpx 40rpx;
-		box-sizing: border-box;
-		background-color: #fff;
-
-		.card_item {
-			padding: 34rpx 0;
-			box-sizing: border-box;
-
-			.left {
-				font-size: 28rpx;
-				color: #333333;
-			}
-		}
-	}
-
-	.line {
-		border-bottom: 1rpx solid #f5f5f5;
-	}
-</style>

+ 0 - 216
yshop/yshop-drink-uniapp/pages/components/pages/merchant/wallet.vue

@@ -1,216 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  left-arrow
-	  @leftClick="$onClickLeft"
-	/>
-	<!-- #endif -->
-	<view class="wallet_box">
-		<view class="card">
-			<view class="head flex content-center">
-				<image :src="merchartShop.image" mode="aspectFill"></image>
-				<view class="">
-					{{merchartShop.name}}
-				</view>
-			</view>
-			<view class="money mt-4">
-				¥{{merchartShop.balance}}
-			</view>
-			<view class="flex justify-between align-center mt-2">
-				<view class="text">
-					可提现余额 <text style="margin: 0 6rpx;">{{merchartShop.balance}}</text>(元)
-				</view>
-				<view class="tix" 
-					@click="gopage('/pages/components/pages/merchant/cash')">
-					去提现
-				</view>
-			</view>
-		</view>
-		<view class="detail">
-			<view class="title flex content-center justify-between">
-				<view class="">
-					收支明细
-				</view>
-			</view>
-			<scroll-view scroll-y="true" style="height: calc(100% - 146rpx);" @scrolltolower='scrolltolower'>
-				<view class="content" v-if="list.length!==0">
-					<view class="item flex content-center justify-between" v-for="(item,i) in list" :key="i">
-						<view class="item_left flex content-center">
-							<view class="">
-								<view class="top" v-if="item.type==1">收入<text class="font-size-sm">({{item.isFinish == 1 ? '已结算' : '待结算'}})</text></view>
-								<view class="top" v-if="item.type==2">支出<text class="font-size-sm">({{item.isFinish == 1 ? '已结算' : '待结算'}})</text></view>
-								<view class="bom">{{formatDateTime(item.createTime)}} {{item.nicnname}}</view>
-							</view>
-						</view>
-						<view class="right" v-if="item.type==1"> +{{item.amount}}</view>
-						<view class="right" v-if="item.type==2"> -{{item.amount}}</view>
-					</view>
-				</view>
-				<view class="" v-else>
-					<uv-empty mode="list"></uv-empty>
-				</view>
-			</scroll-view>
-
-		</view>
-	
-	</view>
-</template>
-
-<script setup>
-import {
-  ref
-} from 'vue'
-import {
-	getRevenue
-} from '@/api/merchant'
-import { onLoad} from '@dcloudio/uni-app'
-import { useMainStore } from '@/store/store'
-import { storeToRefs } from 'pinia'
-import { formatDateTime } from '@/utils/util'
-const main = useMainStore()
-const { merchartShop } = storeToRefs(main)
-const title = ref('我的钱包')
-const list = ref([])
-const page = ref(1)
-const pageSize = ref(10)
-
-onLoad(() => {
-    revenue()
-})
-
-const  revenue = async() =>{
-	let res = await getRevenue({
-		shopId: merchartShop.value.id,
-		pageNo: page.value
-	})
-	list.value = [...list.value,...res]
-}
-
-const gopage = (url) =>{
-	uni.navigateTo({
-		url
-	})
-
-}
-
-const  scrolltolower = async() =>{
-	page.value++
-	revenue()
-}
-</script>
-
-<style lang="scss">
-	.wallet_box {
-		height: 100vh;
-		display: flex;
-		flex-direction: column;
-
-		.card {
-			padding: 30rpx;
-			box-sizing: border-box;
-			width: 700rpx;
-			margin: 0 auto;
-			border-radius: 30rpx;
-			height: 350rpx;
-			background: #059825;
-			.tix {
-				width: 130rpx;
-				height: 50rpx;
-				border-radius: 20rpx ;
-				top: 300rpx;
-				right: 35rpx;
-				background-color: #fff;
-				font-size: 24rpx;
-				color: #00ABFF;
-				text-align: center;
-				line-height: 50rpx;
-			}
-
-			.head {
-				image {
-					width: 60rpx;
-					height: 60rpx;
-					margin-right: 20rpx;
-					border-radius: 50%;
-				}
-
-				color: #fff;
-				font-size: 34rpx;
-				line-height: 60rpx;
-
-			}
-
-			.text {
-				font-size: 28rpx;
-				color: #fff;
-				top: 290rpx;
-				left: 80rpx;
-			}
-
-			.money {
-				font-size: 50rpx;
-				color: #fff;
-			}
-
-
-		}
-
-		.detail {
-			background-color: #fff;
-			border-radius: 40rpx 40rpx 0 0;
-			flex-grow: 1;
-			overflow: hidden;
-
-			.title {
-				font-size: 36rpx;
-				color: #333333;
-				font-weight: 600;
-				padding: 40rpx;
-				box-sizing: border-box;
-			}
-
-	
-
-			.content {
-				padding: 0 40rpx 40rpx;
-				box-sizing: border-box;
-
-				.item {
-					padding: 24rpx 0;
-					border-bottom: 1rpx solid #EBEBEB;
-
-					.right {
-						font-size: 30rpx;
-						color: #18B2FD;
-					}
-
-					.item_left {
-
-						image {
-							width: 80rpx;
-							height: 80rpx;
-							border-radius: 50%;
-							margin-right: 20rpx;
-						}
-
-						.top {
-							font-size: 32rpx;
-							color: #333333;
-						}
-
-						.bom {
-							font-size: 24rpx;
-							color: #777777;
-						}
-
-
-					}
-				}
-			}
-		}
-
-
-	}
-</style>

+ 0 - 170
yshop/yshop-drink-uniapp/pages/components/pages/merchant/withdrawal.vue

@@ -1,170 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  left-arrow
-	  @leftClick="$onClickLeft"
-	/>
-	<!-- #endif -->
-	<view>
-		<view style="margin-top: 350rpx;" v-if="list.length == 0">
-			<uv-empty mode="list"></uv-empty>
-		</view>
-		
-		<view class="" v-for="(item,i) in list" :key="i">
-			<view class="card">
-				<view class="card_item flex justify-between">
-					<view class="left">
-						<view class="top"><text v-if="item.type == 1">银行卡提现</text><text  v-if="item.type == 2">微信提现</text></view>
-						<view class="bom">提现时间:{{formatDateTime(item.createTime)}}</view>
-					</view>
-					<view class="right">
-						<view class="top">
-							{{item.amount}}元
-						</view>
-						<view class="bom" v-if="item.status==0">
-							未审核
-						</view>
-						<view class="bom" v-if="item.status==1">
-							待到账
-						</view>
-						<view class="bom" v-if="item.status==2">
-							审核拒绝
-						</view>
-						<view class="bom" v-if="item.status==3">
-							<text v-if="item.type == 1">已到账</text>
-							<text v-if="item.type == 2">
-								<text style="color:blue" v-if="item.state == 'WAIT_USER_CONFIRM'" @click="confirmMoney(item.id,item.packageInfo)">待确认收款</text>
-								<text v-if="item.state == 'SUCCESS'">已到账</text>
-								<text v-if="item.state == 'FAIL'">转账失败,未到账</text>
-							</text>
-						</view>
-					</view>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-
-<script setup>
-import {
-  ref
-} from 'vue'
-import {
-	withdrawals,
-	payInfo,
-	checkBill
-} from '@/api/merchant'
-import { onLoad,onReachBottom} from '@dcloudio/uni-app'
-import { useMainStore } from '@/store/store'
-import { storeToRefs } from 'pinia'
-import { formatDateTime } from '@/utils/util'
-const main = useMainStore()
-const { merchartShop } = storeToRefs(main)
-const title = ref('提现明细')
-const list = ref([])
-const page = ref(1)
-const pageSize = ref(10)
-
-onLoad(() => {
-	getList()
-})
-
-onReachBottom(() => {
-	page.value++
-	getList()
-})
-
-const getList  = async() => {
-	let res = await withdrawals({
-			shopId: merchartShop.value.id,
-			pageNo: page.value,
-		})
-	if(res){
-		list.value = [...list.value,...res]
-	}
-}
-
-//目前确认这块只做了小程序
-const  confirmMoney = async(id,packageInfo) =>{
-	let res = await payInfo()
-	 // #ifdef MP-WEIXIN
-	 if (wx.canIUse('requestMerchantTransfer')) {
-	   wx.requestMerchantTransfer({
-	     mchId: res.mchId,
-	     appId: res.appid,
-	     package: packageInfo,
-	     success: (res) => {
-	       console.log('success:', res);
-		   setTimeout(function() {
-				checkWxBill(id)
-		   }, 2000);
-	     },
-	     fail: (res) => {
-	       console.log('fail:', res);
-	     },
-	   });
-	 } else {
-	   wx.showModal({
-	     content: '你的微信版本过低,请更新至最新版本。',
-	     showCancel: false,
-	   });
-	 }
-	 // #endif
-	
-}
-
-const checkWxBill = async(id) =>{
-	let res = await checkBill(id)
-	if(res){
-		getList()
-	}
-}
-
-</script>
-
-<style lang="scss">
-	.card {
-		background-color: #fff;
-		padding: 0 40rpx;
-		box-sizing: border-box;
-
-		.card_item {
-			padding: 25rpx 0;
-			box-sizing: border-box;
-			border-bottom: 1rpx solid #EBEBEB;
-
-			.left {
-
-				.top {
-					font-size: 26rpx;
-					font-weight: 600;
-					color: #333333;
-					margin-bottom: 20rpx;
-				}
-
-				.bom {
-					font-size: 24rpx;
-					color: #777777;
-				}
-			}
-
-			.right {
-				.top {
-					font-size: 38rpx;
-					font-weight: 600;
-					color: #f56c6c;
-					margin-bottom: 10rpx;
-				}
-
-				.bom {
-					font-size: 24rpx;
-					color: #777777;
-					text-align: right;
-				}
-			}
-		}
-	}
-</style>

+ 0 - 50
yshop/yshop-drink-uniapp/pages/components/pages/mine/content.vue

@@ -1,50 +0,0 @@
-<template>
-	<layout>
-		<!-- #ifdef MP-WEIXIN -->
-		<uv-navbar
-		  :fixed="false"
-		  :title="title"
-		  left-arrow
-		  @leftClick="$onClickLeft"
-		/>
-		<!-- #endif -->
-		<view>
-			<rich-text :nodes="content"></rich-text>
-		</view>
-	</layout>
-</template>
-
-<script setup>
-import {
-  ref
-} from 'vue'
-import { onLoad,onShow} from '@dcloudio/uni-app'
-import {
-  mineServiceContent
-} from '@/api/user'
-
-
-const title = ref('内容')
-const content = ref('')
-
-onLoad((option) => {
-	if (option.name) {
-		title.value = option.name
-	}
-	if (option.id) {
-		getContent(option.id);
-	}
-})	
-const getContent = async(id) => {
-	let data = await mineServiceContent({id:id});
-	if (data) {
-		content.value = data.content;
-	}
-}
-
-
-</script>
-
-<style lang="scss" scoped>
-	
-</style>

+ 0 - 50
yshop/yshop-drink-uniapp/pages/components/pages/mine/news.vue

@@ -1,50 +0,0 @@
-<template>
-	<layout>
-		<!-- #ifdef MP-WEIXIN -->
-		<uv-navbar
-		  :fixed="false"
-		  :title="title"
-		  left-arrow
-		  @leftClick="$onClickLeft"
-		/>
-		<!-- #endif -->
-		<view style="background-color: #ffffff; padding: 30rpx;">
-			<view class="mb-3">{{ news.title }}</view>
-			<view class="font-small text-light-black mb-3">发布时间:{{ formatDateTime(news.createTime) }}</view>
-			<view><rich-text :nodes="news.content"></rich-text></view>
-		</view>
-	</layout>
-</template>
-
-<script setup>
-import {
-  ref
-} from 'vue'
-import { onLoad,onShow} from '@dcloudio/uni-app'
-import {
-  getNewsDetail
-} from '@/api/market'
-import { formatDateTime } from '@/utils/util'
-
-
-const title = ref('新闻详情')
-const news = ref('')
-
-onLoad((option) => {
-	if (option.id) {
-		getContent(option.id);
-	}
-})	
-const getContent = async(id) => {
-	let data = await getNewsDetail(id);
-	if (data) {
-		news.value = data;
-	}
-}
-
-
-</script>
-
-<style lang="scss" scoped>
-	
-</style>

+ 0 - 245
yshop/yshop-drink-uniapp/pages/components/pages/mine/userinfo.vue

@@ -1,245 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  left-arrow
-	  @leftClick="$onClickLeft"
-	/>
-	<!-- #endif -->
-	<view class="container d-flex flex-column">
-		<view class=" form">
-			<list-cell :hover="false">
-				<view class="form-input w-100 d-flex align-items-center">
-					<view class="label">头像</view>
-					<view class="input flex-fill">
-						<view class="form-input w-100 d-flex align-items-center"  style="position: relative;">
-							<view class="flex user-box align-items-center">
-								<view class="mr-1">
-									<uv-avatar :src="member.avatar" size="60"></uv-avatar>
-								</view>
-								<view v-if="!member.avatar" class="flex-1">
-									<button style="background-color: #059825;color:#fff;" size='mini' open-type="chooseAvatar" @chooseavatar="chooseavatar" type="success">更改头像</button>
-								</view>
-							</view>
-						</view>
-					</view>
-				</view>
-				
-			</list-cell>
-			<list-cell :hover="false">
-				<view class="form-input w-100 d-flex align-items-center">
-					<view class="label">昵称</view>
-					<view class="input flex-fill">
-						<input type="nickname" placeholder="请填写昵称" placeholder-class="text-color-assist font-size-base" 
-						v-model="member.nickname">
-					</view>
-				</view>
-			</list-cell>
-			<list-cell :hover="false">
-				<view class="form-input w-100 d-flex align-items-center" style="position: relative;">
-					<view class="label">手机号码</view>
-					<view class="input flex-fill">
-						<input type="text" v-model="member.mobile" disabled>
-					</view>
-				</view>
-			</list-cell>
-			<list-cell :hover="false">
-				<view class="form-input w-100 d-flex align-items-center">
-					<view class="label">性别</view>
-					<view class="input flex-fill">
-						<view class="radio-group">
-							<view class="radio" :class="{'checked': member.gender == '0'}" style="margin-right: 10rpx;" @tap="member.gender=0">先生</view>
-							<view class="radio" :class="{'checked': member.gender == '1'}" @tap="member.gender=1">女士</view>
-						</view>
-					</view>
-				</view>
-			</list-cell>
-			<list-cell :hover="false" :arrow="!member.birthday">
-				<view class="form-input w-100 d-flex align-items-center">
-					<view class="label">生日</view>
-					<view class="input flex-fill">
-						<picker mode="date" :value="member.birthday" :start="startDate" :end="endDate" @change="handleDateChange">
-							{{member.birthday ? member.birthday : '无'}}
-						</picker>
-					</view>
-				</view>
-			</list-cell>
-			<list-cell :hover="false" last>
-				<view class="form-input w-100 d-flex align-items-center">
-					<view class="label">加入时间</view>
-					<view class="input flex-fill">
-						<input type="text" v-model="member.createTime" disabled>
-					</view>
-				</view>
-			</list-cell>
-		</view>
-		<view class="btn-box d-flex align-items-center  just-content-center mt-2">
-			<button type="primary" class="save-btn" @tap="save">保存</button>
-		</view>
-		<view class="text-color-assist text-center font-size-sm mt-3" @tap="loginout">退出登录</view>
-
-	</view>
-</template>
-
-<script setup>
-import {
-  ref,
-  computed
-} from 'vue'
-import { useMainStore } from '@/store/store'
-import { storeToRefs } from 'pinia'
-import { onLoad,onShow} from '@dcloudio/uni-app'
-import { formatDateTime } from '@/utils/util'
-import {
-  userEdit
-} from '@/api/user'
-import { VUE_APP_UPLOAD_URL,TENANT_ID } from '@/config';
-const main = useMainStore()
-const { openid, lang } = storeToRefs(main)
-
-const title = ref('用户设置')
-//const currentDate = ref('')
-const date = ref('')
-const member = ref({})
-
-onLoad(() => {
-	member.value = main.member;
-	//this.$util
-	member.value.createTime = formatDateTime(member.value.createTime);
-})	
-onShow(() => {
-	date.value = getDate({format: true})
-})
-
-const startDate = computed(() => { 
-	return getDate('start');
-})
-const endDate = computed(() => { 
-	return getDate('end');
-})
-
-const loginout = () => {
-	uni.navigateTo({
-		url: '/pages/components/pages/login/logout'
-	})
-}
-
-const chooseavatar = (e) => {
-	uni.uploadFile({
-		url: VUE_APP_UPLOAD_URL, 
-		filePath: e.detail.avatarUrl,
-		name: 'file',
-		header: {
-			Authorization: 'Bearer ' + member.value.accessToken,
-			lang: lang.value,
-			'content-type': 'application/x-www-form-urlencoded;charset=UTF-8',
-			'tenant-id': TENANT_ID
-		},
-		success(uploadFileResult){
-			if (uploadFileResult) {
-				const upload = JSON.parse(uploadFileResult.data);
-				member.value.avatar = upload.data;
-			}
-		}, 
-		fail(e){
-		}
-	});
-}
-const getDate = (type) => {
-	const date = new Date();
-	let year = date.getFullYear();
-	let month = date.getMonth() + 1;
-	let day = date.getDate();
-
-	if (type === 'start') {
-		year = year - 60;
-	} else if (type === 'end') {
-		year = year + 2;
-	}
-	month = month > 9 ? month : '0' + month;;
-	day = day > 9 ? day : '0' + day;
-	return `${year}-${month}-${day}`;
-}
-const handleDateChange = (e) => {
-	member.value.birthday = e.target.value
-}
-const save = async() => {
-	let data = await userEdit({
-		nickname: member.value.nickname,
-		mobile: member.value.mobile,
-		gender: member.value.gender,
-		birthday: member.value.birthday,
-		avatar: member.value.avatar
-	});
-	if (data) {
-		const member2 = Object.assign(main.member, member.value)
-		main.SET_MEMBER(member2)	
-		uni.showToast({
-			title: '保存成功!',
-			icon: 'success'
-		})
-	}
-	
-}
-	
-</script>
-
-<style lang="scss" scoped>
-page {
-	height: 100%;
-}
-
-.container {
-	padding: 20rpx 30rpx;
-}
-
-.form {
-	border-radius: 8rpx;
-}
-
-.form-input {
-	.label {
-		width: 160rpx;
-		font-size: $font-size-base;
-		color: $text-color-base;
-	}
-	
-	.input {
-	}
-	
-	.radio-group {
-		display: flex;
-		justify-content: flex-start;
-		
-		.radio {
-			padding: 10rpx 30rpx;
-			border-radius: 6rpx;
-			border: 2rpx solid $text-color-assist;
-			color: $text-color-assist;
-			font-size: $font-size-base;
-			
-			&.checked {
-				background-color: $color-primary;
-				color: $text-color-white;
-				border: 2rpx solid $color-primary;
-			}
-		}
-	}
-}
-
-.btn-box {
-	// height: calc((100vh - 40rpx) / 2);
-}
-.save-btn {
-	width: 90%;
-	border-radius: 50rem !important;
-	font-size: $font-size-lg;
-}
-.logout-btn {
-	width: 90%;
-	border-radius: 50rem !important;
-	font-size: $font-size-lg;
-	background-color:rgb(237, 81, 29);
-}
-</style>

+ 0 - 894
yshop/yshop-drink-uniapp/pages/components/pages/orders/detail.vue

@@ -1,894 +0,0 @@
-<template>
-<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  @leftClick="onClickBack"
-	/>
-	<!-- #endif -->
-	<view class="container" style="padding:20rpx;">
-		<view style="padding-bottom: 100rpx;" v-if="orderData.orderType != 'due'">
-			<view class="bg-white">
-				<view class="section">
-					<!-- store info begin -->
-					<list-cell :hover="false">
-						<view class="w-100 d-flex align-items-center">
-							<view class="d-flex align-center w-60">
-								<uv-avatar :src="orderData.shop.image"></uv-avatar>
-								<view class="ml-1 font-weight-bolder w-100 font-size-lg text-color-base text-truncate">{{ orderData.shop.name }}</view>
-							</view>
-							<view class="d-flex justify-content-end align-items-center w-40">
-								<view class="iconfont-yshop icon-mobile"  @click="makePhoneCall(orderData.shop)" style="font-size: 45rpx;margin-right: 40rpx;"></view>
-								<view class="iconfont-yshop icon-location"  @click="openLocation(orderData.shop)" style="font-size: 45rpx;"></view>
-							</view>
-						</view>
-					</list-cell>
-					<!-- store info end -->
-					<list-cell :hover="false" padding="50rpx 20rpx">
-						<view class="w-100 d-flex flex-column">
-							<view class="flex flex-column align-center"  v-if="orderData.orderType == 'desk'">
-								<view><uv-text text="桌号"></uv-text></view>
-								<view><uv-text :text="orderData.deskNumber" :size="30" color="#059825"></uv-text></view>
-							</view>
-							<view class="flex flex-column align-center content-center" v-else>
-									<view class="mb-1"><uv-text text="取餐号"></uv-text></view>
-									<view><uv-text :text="orderData.numberId" :size="30" color="#059825"></uv-text></view>
-							</view>
-							<!-- goods begin -->
-							<view class="w-100 d-flex flex-column position-relative mt-30" style="margin-bottom: -40rpx;">
-								<view class="w-100 d-flex align-items-center mb-40" v-for="(good, index) in orderData.products" :key="index">
-									<view class="d-flex flex-column w-60 overflow-hidden">
-										<view class="font-size-lg text-color-base mb-10 text-truncate">{{ good.title }}</view>
-										<view class="font-size-sm text-color-assist text-truncate">{{ good.spec }}</view>
-									</view>
-									<view class="d-flex w-40 align-items-center justify-content-between pl-30">
-										<view class="font-size-base text-color-base">x{{ good.number }}</view>
-										<view class="font-size-base text-color-base font-weight-bold">¥{{ good.price }}</view>
-									</view>
-								</view>
-							</view>
-							<!-- goods end -->
-						</view>
-					</list-cell>
-				</view>
-				<view class="section">
-					<!-- goods begin -->
-					<list-cell :hover="false" padding="50rpx 20rpx">				
-						<view class="w-100 d-flex flex-column position-relative">
-							<view>
-								<uv-text text="商品明细" :bold="true" :size="16"></uv-text>
-								<uv-divider text="" textPosition="left"></uv-divider>
-							</view>
-							<view  class="cart-popup" v-if="orderData.appDeskOrderVo">
-								 <scroll-view class="cart-list" scroll-y>
-								  <view class="wrapper2">
-										  <view class="item" style="background: linear-gradient(to bottom, #e9f1ee, #fcfcf4);padding: 10rpx 30rpx;margin: 15rpx 0;border-radius: 20rpx;" v-for="(item, index) in orderData.appDeskOrderVo" :key="index">
-												<view class="flex align-center">
-													<view><uv-avatar :src="item.uavatar"></uv-avatar></view>
-													<view class="flex flex-1 justify-between font-size-sm text-color-assist">
-														<view class="flex flex-column ml-2">
-															<text>{{item.unickname}}</text>
-															<text>{{formatDateTime(item.addTime) }}</text>
-														</view>
-														<view v-if="isMer == 1">
-															<text style="color: #9acafc;font-weight: bold;">{{item.uidType == 'user' ? '用户点餐' : '员工帮点'}}</text>
-															<text style="color: #5ac725;">({{item.isOrder == 0 ? '未出餐' : '已出餐'}})</text>
-														</view>
-													</view>
-												</view>
-												<uv-divider :hairline="false" text=""></uv-divider>
-												<view class="flex align-center" v-for="(good,index2) in item.appDeskOrderGoodsVos" :key="index2">
-													<view><image :src="good.image" style="width: 100rpx;height: 100rpx;"></image></view>
-													<view class="flex  flex-1 flex-column ml-2 font-size-sm">
-														<view class="flex justify-between"><text class="font-weight-bolder">{{good.title}}</text><text style="color: #f56c6c;">{{good.spec}}</text></view>
-														<view class="flex justify-between mt-1"><text>¥{{good.price}}</text><text>x{{good.number}}</text></view>
-													</view>
-												</view>
-										  </view>		
-								  </view>
-								 </scroll-view>
-							 </view>
-							 <view v-else>
-								<view class="w-100 d-flex align-items-center mb-40" v-for="(good, index) in orderData.cartInfo" :key="index">
-									<image :src="good.image" mode="aspectFill" class="image"></image>
-									<view class="d-flex flex-column w-60 overflow-hidden">
-										<view class="font-size-lg text-color-base mb-10 text-truncate">{{ good.title }}</view>
-										<view class="font-size-sm text-color-assist text-truncate">{{ good.spec }}</view>
-									</view>
-									<view class="d-flex w-40 align-items-center justify-content-between pl-30">
-										<view class="font-size-base text-color-base">x{{ good.number }}</view>
-										<view class="font-size-base text-color-base font-weight-bold">¥{{ good.price }}</view>
-									</view>
-								</view>
-							</view>
-						</view>
-					</list-cell>
-					<!-- goods end -->
-				</view>
-				<view class="section">
-					<list-cell :hover="false" padding="50rpx 30rpx 20rpx" last>
-						<view class="w-100 d-flex flex-column">
-							<view>
-								<view class="flex align-center">
-									<uv-text text="配送信息" :bold="true" :size="16"></uv-text>
-									<view v-if="orderData.sameCityTaskId != ''">
-										<uv-icon size="18" name="reload" @click="detail(orderData.orderId)"></uv-icon>
-									</view>
-								</view>
-								<uv-divider text="" textPosition="left"></uv-divider>
-							</view>
-							<view class="pay-cell">
-								<view>享用方式</view>
-								<view class="font-weight-bold">
-									<text v-if="orderData.orderType == 'takein'">自取</text>
-									<text v-if="orderData.orderType == 'takeout'">外卖({{orderData.sameCityTaskId != '' ? orderData.expressName: '商家自配送'}})</text>
-									<text v-if="orderData.orderType == 'desk'">堂食</text>
-									<text v-if="orderData.orderType == 'due'">预约</text>
-								</view>
-							</view>
-							<view v-if="orderData.sameCityTaskId != ''">
-								<view class="pay-cell">
-									<view>配送员</view>
-									<view class="font-weight-bold">{{orderData.sameCityDeliveryCourierName ? orderData.sameCityDeliveryCourierName : '--'}}</view>
-								</view>
-								<view class="pay-cell">
-									<view>配送员电话</view>
-									<view class="font-weight-bold">{{orderData.sameCityDeliveryCourierMobile ? orderData.sameCityDeliveryCourierMobile : '--'}}</view>
-								</view>
-								<view class="pay-cell">
-									<view>配送状态</view>
-									<view class="font-weight-bold">{{orderData.sameCityDeliveryStatusDes ? orderData.sameCityDeliveryStatusDes : '--'}}</view>
-								</view>
-								<view class="pay-cell">
-									<view>配送时间</view>
-									<view class="font-weight-bold">{{orderData.sameCityDeliveryTime ? orderData.sameCityDeliveryTime : '--'}}</view>
-								</view>
-								<view class="pay-cell">
-									<view>送达时间</view>
-									<view class="font-weight-bold">{{orderData.sameCityDeliveryExpectFinishTime ? orderData.sameCityDeliveryExpectFinishTime : '--'}}</view>
-								</view>
-							</view>
-							<view v-else>
-								<view class="pay-cell">
-									<view>取餐时间</view>
-									<view class="font-weight-bold">{{orderData.getTime ? formatDateTime(orderData.getTime) : '立即就餐'}}</view>
-								</view>
-								<view class="pay-cell">
-									<view>制作完成时间</view>
-									<view class="font-weight-bold">{{ orderData.deliveryTime ? formatDateTime(orderData.deliveryTime) : '无' }}</view>
-								</view>
-							</view>
-						
-						</view>
-					</list-cell>
-				</view>
-				<view class="section">
-					<list-cell :hover="false" padding="50rpx 20rpx">
-						<view class="w-100 d-flex flex-column">
-							<view>
-								<uv-text text="订单信息" :bold="true" :size="16"></uv-text>
-								<uv-divider text="" textPosition="left"></uv-divider>
-							</view>
-							<view class="pay-cell">
-								<view>订单号</view>
-								<view class="font-weight-bold">{{ orderData.orderId }}</view>
-							</view>
-							<view class="pay-cell">
-								<view>订单状态</view>
-								<view class="font-weight-bold">{{ orderData.statusDto.title }}</view>
-							</view>
-							<view class="pay-cell">
-								<view>下单时间</view>
-								<view class="font-weight-bold">{{ formatDateTime(orderData.createTime )}}</view>
-							</view>
-							<view class="pay-cell">
-								<view>支付方式</view>
-								<view class="font-weight-bold">{{ orderData.statusDto.payType }}</view>
-							</view>
-							<view class="pay-cell">
-								<view>订单金额</view>
-								<view class="font-weight-bold">¥{{ orderData.totalPrice }}</view>
-							</view>
-							<view class="pay-cell" v-if="orderData.orderType == 'takeout'">
-								<view>配送费</view>
-								<view class="font-weight-bold">¥{{ orderData.freightPrice }}</view>
-							</view>
-							<view class="pay-cell">
-								<view>优惠金额</view>
-								<view class="font-weight-bold">-¥{{ orderData.couponPrice }}</view>
-							</view>
-							<view class="pay-cell">
-								<view>折扣金额</view>
-								<view class="font-weight-bold">-¥{{ orderData.deductionPrice }}</view>
-							</view>
-							<view class="pay-cell">
-								<view>实付金额</view>
-								<view class="font-weight-bold">¥{{ orderData.payPrice }}</view>
-							</view>
-							<view class="pay-cell">
-								<view>备注</view>
-								<view class="font-weight-bold">{{ orderData.remark ? orderData.remark : '无' }}</view>
-							</view>
-						</view>
-					</list-cell>
-				</view>
-			</view>
-			<view class="fixed-bottom bg-white p-3">
-				<view v-if="orderData.paid > 0 && orderData.refundStatus == 0" class="flex justify-end ">
-					<view class="mr-1"><uv-button type="success" v-if="orderData.status < 2" :plain="true" size="small" text="确认收到餐" @click="receive(orderData)"></uv-button></view>
-					<view><uv-button type="error" :plain="true" size="small" text="申请退款" @click="refund(orderData)"></uv-button></view>
-			    </view>
-				<view v-if="orderData.paid == 0 && orderData.orderType == 'desk'" class="flex justify-end ">
-					<view class="mr-1"><uv-button type="info"  text="去加餐" @click="addFood(orderData)"></uv-button></view>
-					<view v-if="isMer == 1"><uv-button  color="#059825" text="线下确认收款" @click="offPayOrder(orderData)"></uv-button></view>
-					<view v-else><uv-button  color="#059825" text="去买单" @click="goPay()"></uv-button></view>
-				</view>
-				<view v-if="orderData.paid == 0 && orderData.orderType != 'desk'" class="flex justify-end ">
-					<view><uv-button type="warning"  text="立即支付" @click="goPay()"></uv-button></view>
-				</view>
-			</view>
-			<uv-popup ref="popup" mode="bottom" zIndex='9999' custom-style="height: 400rpx;">
-				<view class="content">
-					<view class="payment">
-						<list-cell last :hover="false"><text>支付方式</text></list-cell>
-						<list-cell>
-							<view class="d-flex align-items-center justify-content-between w-100 disabled"
-								@click="setPayType('yue')">
-								<view class="iconfont iconbalance line-height-100 payment-icon"></view>
-								<view class="flex-fill">余额支付(余额¥{{ member.nowMoney }})</view>
-								<view class="font-size-sm" v-if="member.nowMoney == 0">余额不足</view>
-								<view class="iconfont line-height-100 checkbox checked iconradio-button-on" v-if="payType == 'yue'">
-								</view>
-								<view class="iconfont line-height-100 checkbox iconradio-button-off" v-else></view>
-							</view>
-						</list-cell>
-						<list-cell last>
-							<view class="d-flex align-items-center justify-content-between w-100" @click="setPayType('weixin')">
-								<view class="iconfont iconwxpay line-height-100 payment-icon" style="color: #7EB73A"></view>
-								<view class="flex-fill">微信支付</view>
-								<view class="iconfont line-height-100 checkbox checked iconradio-button-on" v-if="payType == 'weixin'">
-								</view>
-								<view class="iconfont line-height-100 checkbox iconradio-button-off" v-else></view>
-							</view>
-						</list-cell>
-						<list-cell>
-							<view class="flex justify-center  w-100">
-								<view >   
-									<uv-button type="error"  :plain="true" size="normal" text="立即支付" @click="pay(orderData)"></uv-button>
-								</view>
-							</view>
-						</list-cell>
-					</view>
-				</view>
-			</uv-popup>
-		</view>
-		<view style="padding-bottom: 100rpx;" v-else>
-			<view class="bg-white">
-				<view class="section">
-					<!-- store info begin -->
-					<list-cell :hover="false"  v-if="orderData.orderType != 'desk'">
-						<view class="w-100 d-flex align-items-center">
-							<view class="d-flex flex-column w-60">
-								<view class="w-100 font-size-lg text-color-base text-truncate">{{ orderData.shop.name }}</view>
-							</view>
-							<view class="d-flex justify-content-end align-items-center w-40">
-								<view class="iconfont-yshop icon-mobile"  @click="makePhoneCall(orderData.shop)" style="font-size: 45rpx;margin-right: 40rpx;"></view>
-								<view class="iconfont-yshop icon-location"  @click="openLocation(orderData.shop)" style="font-size: 45rpx;"></view>
-							</view>
-						</view>
-					</list-cell>
-					<!-- store info end -->
-					<list-cell :hover="false" padding="50rpx 30rpx">
-						<view class="w-100 d-flex flex-column">
-							<!-- steps begin -->
-							<view class="d-flex just-content-center">
-								<view class="steps d-flex flex-column w-80">
-									<view class="steps__text-column">
-										<view class="steps__text-column-item " :class="{active: orderData.dueStatus == 1}">
-											<view class="steps__column-item-line bg-transparent"></view>
-											<view class="steps__text-column-item-text">预约中</view>
-											<view class="steps__column-item-line"></view>
-										</view>
-										<view class="steps__text-column-item activ"  :class="{active: orderData.dueStatus == 2}">
-											<view class="steps__column-item-line"></view>
-											<view class="steps__text-column-item-text">已取消</view>
-											<view class="steps__column-item-line"></view>
-										</view>
-										<view class="steps__text-column-item" :class="{active: orderData.dueStatus == 3}">
-											<view class="steps__column-item-line"></view>
-											<view class="steps__text-column-item-text">
-												已完成
-											</view>
-											<view class="steps__column-item-line bg-transparent"></view>
-										</view>
-									</view>
-								</view>
-							</view>
-
-							<!-- goods begin -->
-							<view class="w-100 d-flex flex-column position-relative mt-30" style="margin-bottom: -40rpx;">
-								<view class="w-100 d-flex align-items-center mb-40">
-									<view class="d-flex flex-column w-60 overflow-hidden">
-										<view class="font-size-lg text-color-base mb-10 text-truncate">{{ orderData.appShopDeskVO.title }}</view>
-										<view class="font-size-sm text-color-assist text-truncate">桌号:{{ orderData.appShopDeskVO.number }}</view>
-									</view>
-									<view class="d-flex w-40 align-items-center justify-content-between pl-30">
-										<view class="font-size-base text-color-base">x1</view>
-										<view class="font-size-base text-color-base font-weight-bold">¥0.00</view>
-									</view>
-								</view>
-							</view>
-							<!-- goods end -->
-						</view>
-					</list-cell>
-				</view>
-				<view class="section">
-					<list-cell :hover="false" padding="50rpx 30rpx">
-						<view class="w-100 d-flex flex-column">
-							<view class="pay-cell">
-								<view>预约人</view>
-								<view class="font-weight-bold">{{ orderData.realName }}</view>
-							</view>
-							<view class="pay-cell">
-								<view>预约时间</view>
-								<view class="font-weight-bold">{{ formatDateTime(orderData.dueTime) }}</view>
-							</view>
-							<view class="pay-cell">
-								<view>到店时间</view>
-								<view class="font-weight-bold">{{ orderData.reachTime }}</view>
-							</view>
-							<view class="pay-cell">
-								<view>预约桌号</view>
-								<view class="font-weight-bold">{{ orderData.deskNumber }}</view>
-							</view>
-							<view class="pay-cell">
-								<view>就餐人数</view>
-								<view class="font-weight-bold">{{ orderData.deskPeople }}</view>
-							</view>
-							<view class="pay-cell">
-								<view>预留电话</view>
-								<view class="font-weight-bold">{{ orderData.userPhone }}</view>
-							</view>
-						</view>
-					</list-cell>
-					<!-- payment and amount end -->
-				</view>
-				<view class="section">
-					<!-- order info begin -->
-					<list-cell :hover="false" padding="50rpx 30rpx">
-						<view class="w-100 d-flex flex-column">
-							<view class="pay-cell">
-								<view>下单时间</view>
-								<view class="font-weight-bold">{{ formatDateTime(orderData.createTime )}}</view>
-							</view>
-							<view class="pay-cell">
-								<view>订单号</view>
-								<view class="font-weight-bold">{{ orderData.orderId }}</view>
-							</view>
-						</view>
-					</list-cell>
-					<!-- order info end --> 
-				</view>
-				<!-- order other info begin -->
-				<list-cell :hover="false" padding="50rpx 30rpx 20rpx" last v-if="orderData.orderType != 'desk'">
-					<view class="w-100 d-flex flex-column">
-						<view class="pay-cell">
-							<view>享用方式</view>
-							<view class="font-weight-bold">预约到店就餐</view>
-						</view>
-						<view class="pay-cell">
-							<view>备注</view>
-							<view class="font-weight-bold">{{ orderData.remark ? orderData.remark : '无' }}</view>
-						</view>
-					</view>
-				</list-cell>
-				<!-- order other info end -->
-			</view>
-			<view class="fixed-bottom bg-white p-3">
-				<view v-if="orderData.dueStatus == 1" class="flex justify-end ">
-					<view><uv-button type="warning"  text="取消预约" @click="cancelDueOrder(orderData)"></uv-button></view>
-					<view class="ml-1"><uv-button type="error"  text="去点餐" @click="addFood(orderData)"></uv-button></view>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script setup>
-import {
-  ref
-} from 'vue'
-import { onLoad} from '@dcloudio/uni-app'
-import { formatDateTime, isWeixin } from '@/utils/util'
-import {
-  orderDetail,
-  orderReceive,
-  payUnify,
-  getWechatConfig,
-  cancelDue,
-  offPay
-} from '@/api/order'
-import { useMainStore } from '@/store/store'
-import { storeToRefs } from 'pinia'
-// #ifdef H5
-import * as jweixin from 'weixin-js-sdk'
-// #endif
-const main = useMainStore()
-const { member,isMer } = storeToRefs(main)
-
-const title = ref('订单详情')
-const orderData = ref({
-	shop:{name:''},
-	statusDto:{payType:''}
-})
-const order = ref({})
-const numForMading = ref(5)
-const popup = ref()
-const payType = ref('weixin') // 付款方式
-//const isMer = ref(0) //是否商家协助点餐
-
-onLoad((option) => {
-	if(option.isMer){
-		isMer.value = option.isMer
-		main.SET_MER(1)
-		main.SET_UID_TYPE('admin')
-	}
-	detail(option.id);
-})
-const onClickBack = () => {
-	const mypage = getCurrentPages()
-	let length = mypage.length
-	if(length == 1) {
-		uni.switchTab({
-			url: '/pages/index/index'
-		})
-		return
-	}
-	if(length > 1) { 
-		if(mypage[length - 2].route == 'pages/components/pages/pay/pay'){
-			uni.switchTab({
-				url: '/pages/menu/menu'
-			})
-			return
-		}
-	}
-	uni.navigateBack()
-}
-const detail =  async(id) => {
-	orderData.value = await orderDetail(id);
-}
-const openLocation = () => {
-	let shop = orderData.value.shop;
-	uni.openLocation({
-		address: shop.addressMap + shop.address + " " + shop.name,
-		latitude: parseFloat(shop.lat),
-		longitude: parseFloat(shop.lng),
-		fail(res) {
-		}
-	});
-}
-const makePhoneCall = () =>{
-	let shop = orderData.value.shop;
-	uni.makePhoneCall({
-		phoneNumber: shop.mobile,
-		fail(res) {
-		}
-	})
-}
-
-// 确认收到货
-const receive  = async(order) => {
-	let data = await orderReceive({uni:order.orderId});
-	if (data) {
-		await detail(order.orderId)
-	}
-}
-
-const cancelDueOrder = async(order) => {
-	let data = await cancelDue({id:order.id});
-	if (data) {
-		await detail(order.orderId)
-	}
-}
-
-const offPayOrder = async(order) => {
-	let data = await offPay({id:order.id});
-	if (data) {
-		await detail(order.orderId)
-	}
-}
-
-//提交退款
-const refund = (order) => {
-	uni.navigateTo({
-		url: '/pages/components/pages/orders/refund?orderId=' + order.orderId + '&payPrice=' + order.payPrice + '&totalPrice=' + order.totalPrice
-	})
-}
-
-//加餐
-const addFood = (order) => {
-	main.SET_DESK({id: order.deskId, number:order.deskNumber, shopId: order.shopId, people: order.deskPeople,orderId: order.orderId})
-	main.SET_ORDER_TYPE('desk')
-	main.SET_STORE(order.shop)
-	uni.switchTab({
-		url: '/pages/menu/menu'
-	}) 
-}
-const goPay = () => {
-	popup.value.open()
-}
-const pay = async(order) => {
-	if (payType.value == 'weixin') {
-		// 微信支付
-		weixinPay(order);
-	} else if (payType.value == 'yue') {
-		// 余额支付
-		balancePay(order);
-	} 
-}
-
-// 更改支付方式
-const setPayType = (paytype) => {
-	payType.value = 'weixin';
-	payType.value= paytype;
-	uni.setStorage({
-		key: 'paytype',
-		data: paytype
-	})
-}
-
-const balancePay = async(order) => {
-	let from = 'routine'
-	// #ifdef H5
-	from = 'h5'
-	// #endif
-	let pay = await payUnify({
-		uni: order.orderId,
-		from: from,
-		paytype: 'yue'
-	});
-
-	uni.hideLoading();
-	if (!pay) {
-		return;
-	}
-
-	uni.removeStorageSync('cart');
-	popup.value.close();
-	detail(order.orderId)
-}
-const weixinPay = async(order) => {
-	let from = 'routine'
-	// #ifdef H5
-	from = 'h5'
-	if(isWeixin()){
-		from = 'wechat'
-	}
-	
-	// #endif
-	//let that = this;
-	let data = await payUnify({
-		uni: order.orderId,
-		from: from,
-		paytype: 'weixin'
-	});
-	if (!data) {
-		uni.hideLoading();
-		return;
-	}
-	if (data.trade_type == 'MWEB') {
-		// #ifdef H5
-		// 微信外的H5
-		location.href = data.data;
-		// #endif
-	} else if (data.trade_type == 'JSAPI') {
-		// #ifdef MP-WEIXIN
-		uni.requestPayment({
-			provider: 'wxpay',
-			timeStamp: data.data.timeStamp,
-			nonceStr: data.data.nonceStr,
-			package: data.data.package,
-			signType: 'MD5',
-			paySign: data.data.paySign,
-			success: function(res) {
-				uni.removeStorageSync('cart');
-				popup.value.close();
-				detail(order.orderId)
-				// uni.switchTab({
-				// 	url: '/pages/order/order'
-				// });
-			},
-			fail: function(err) {
-			}
-		});
-		// #endif
-	} else if (data.trade_type == 'W-JSAPI'){
-		//公众号支付
-		let config = await getWechatConfig();
-		if (config) {
-		  jweixin.config({
-				debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
-		        appId: config.appId, // 必填,公众号的唯一标识
-		        timestamp: config.timestamp, // 必填,生成签名的时间戳
-		        nonceStr: config.nonceStr, // 必填,生成签名的随机串
-		        signature: config.signature, // 必填,签名
-		        jsApiList: [
-		          'chooseWXPay'
-		        ] ,
-			 }
-			);
-		  jweixin.ready(function() {
-		   jweixin.chooseWXPay({
-			timestamp: data.data.timeStamp, 
-			nonceStr: data.data.nonceStr, 
-			package:  data.data.package, 
-			signType: 'MD5', 
-			paySign: data.data.paySign, 
-			success: function(res) {
-			 uni.removeStorageSync('cart');
-			 popup.value.close();
-			 detail(order.orderId)
-			 // uni.switchTab({
-			 //  url: '/pages/order/order'
-			 // });
-			},
-			fail: function(err) {
-	
-			}
-		   });
-		  });
-		   jweixin.error(function(res) {
-		
-		  });
-		 } else {
-			 //console.log(res)
-	  }
-		
-	}
-}
-</script>
-
-<style lang="scss" scoped>
-.cart-list {
-		background-color: #ffffff;
-		width: 100%;
-		overflow: hidden;
-		min-height: 1vh;
-		max-height: 60vh;
-}
-.image {
-	width: 120rpx;
-	height: 120rpx;
-	margin-right: 30rpx;
-	border-radius: 8rpx;
-}
-
-.pay-cell {
-	width: 100%;
-	display: flex;
-	align-items: center;
-	justify-content: space-between;
-	font-size: $font-size-base;
-	color: $text-color-base;
-	margin-bottom: 40rpx;
-
-	&:nth-last-child(1) {
-		margin-bottom: 0;
-	}
-}
-
-.desk-num {
-	font-size: 30rpx;
-	font-weight: bold;
-	color: $text-color-base;
-}
-
-.sort-num {
-  font-size: 64rpx;
-  font-weight: bold;
-  color: $text-color-base;
-  line-height: 2;
- }
-
-.invote-box {
-	position: absolute;
-	width: 100%;
-	left: 0;
-	top: 0;
-	display: flex;
-	justify-content: center;
-	align-items: center;
-	
-	image {
-		width: 30rpx;
-		height: 30rpx;
-	}
-}
-
-.btn-box {
-	background-color: #ffffff;
-	position: fixed;
-	bottom: 0;
-	left: 0;
-	right: 0;
-	height: 120rpx;
-	box-shadow: 0 0 20rpx rgba($color: #000000, $alpha: 0.1);
-	display: flex;
-	align-items: center;
-	justify-content: space-evenly;
-	z-index: 11;
-	
-	.item {
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		padding: 20rpx 10rpx;
-		flex: 1;
-		flex-shrink: 0;
-		
-		button {
-			width: 100%;
-			border-radius: 50rem !important;
-			height: 80rpx;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			padding: 0;
-		}
-	}
-}
-
-.payment {
-	margin-bottom: 30rpx;
-
-	.disabled {
-		color: $text-color-grey;
-	}
-
-	.payment-icon {
-		font-size: 44rpx;
-		margin-right: 10rpx;
-	}
-
-	.checkbox {
-		font-size: 36rpx;
-		margin-left: 10rpx;
-	}
-
-	.checked {
-		color: $color-primary;
-	}
-}
-
-/* #ifdef H5 */
-	page {
-		min-height: 100%;
-		background-color: $bg-color;
-	}
-	/* #endif */
-	.order-box {
-		padding: 20rpx;
-		/* #ifdef H5 */
-		margin-bottom: 100rpx;
-		/* #endif */
-	}
-	
-	.drinks-img {
-		width: 260rpx;
-		height: 260rpx;
-	}
-	
-	.tips {
-		margin: 60rpx 0 80rpx;
-		line-height: 48rpx;
-	}
-	
-	.drink-btn {
-		width: 320rpx;
-		border-radius: 50rem !important;
-		margin-bottom: 40rpx;
-		font-size: $font-size-base;
-		line-height: 3.0;
-	}
-	
-	@mixin arch {
-		content: "";
-		position: absolute;
-		background-color: $bg-color;
-		width: 30rpx;
-		height: 30rpx;
-		bottom: -15rpx;
-		z-index: 10;
-		border-radius: 100%;
-	}
-	
-	.section {
-		position: relative;
-		
-		&::before {
-			@include arch;
-			left: -15rpx;
-		}
-		
-		&::after {
-			@include arch;
-			right: -15rpx;
-		}
-	}
-	
-	.pay-cell {
-		width: 100%;
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		font-size: $font-size-base;
-		color: $text-color-base;
-		margin-bottom: 40rpx;
-
-		&:nth-last-child(1) {
-			margin-bottom: 0;
-		}
-	}
-	
-	
-	.steps__img-column {
-		display: flex;
-		margin: 30rpx 0;
-		
-		.steps__img-column-item {
-			flex: 1;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			
-			image {
-				width: 80rpx;
-				height: 80rpx;
-			}
-			.unactive {
-				color: #919293;
-			}
-		}
-	}
-	
-	.steps__text-column {
-		display: flex;
-		margin-bottom: 40rpx;
-		
-		.steps__text-column-item {
-			flex: 1;
-			display: inline-flex;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			font-size: $font-size-base;
-			color: $text-color-assist;
-			
-			&.active {
-				color: $text-color-base;
-				font-weight: bold;
-				
-				.steps__column-item-line {
-					background-color: $text-color-base;
-				}
-			}
-			
-			.steps__column-item-line{
-				flex: 1;
-				height: 2rpx;
-				background-color: #919293;
-				transform: scaleY(0.5);
-			}
-			
-			.steps__text-column-item-text {
-				margin: 0 8px;
-			}
-		}
-	}
-	.icon-lamp, .icon-daojishi, .icon-takeout, .icon-doorbell{
-		font-size: 60rpx;
-	}
-	.iconfont-yshop {
-		color: #059825;
-	}
-</style>

+ 0 - 205
yshop/yshop-drink-uniapp/pages/components/pages/orders/orders.vue

@@ -1,205 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  left-arrow
-	  @leftClick="$onClickLeft"
-	/>
-	<!-- #endif -->
-	<view class="container">
-		<view class="bg-white flex px-2 py-1">
-			<view class="mr-1"><uv-button @click="change('all')" :type="typeStr == 'all' ? 'success' : 'info' " :plain="true" :hairline="true" text="全部订单" size="small"></uv-button></view>
-			<view class="mr-1"><uv-button @click="change('takein')" :type="typeStr == 'takein' ? 'success' : 'info' " :plain="true" :hairline="true" text="到店自取" size="small"></uv-button></view>
-			<view class="mr-1"><uv-button @click="change('takeout')" :type="typeStr == 'takeout' ? 'success' : 'info' " :plain="true" :hairline="true" text="外卖到家" size="small"></uv-button></view>
-			<view><uv-button @click="change('desk')" :type="typeStr == 'desk' ? 'success' : 'info' " :plain="true" :hairline="true" text="堂食就餐" size="small"></uv-button></view>
-		</view>
-		<view class="orders-list d-flex flex-column w-100" style="padding: 20rpx; padding-bottom: 0;">
-			<view class="order-item" v-for="(item, index) in orders" :key="index" style="margin-bottom: 30rpx;" >
-				<list-cell :hover="false">
-					<view class="w-100 d-flex align-items-center">
-						<view class="flex-fill d-flex flex-column">
-							<view class="font-size-lg text-color-base" style="margin-bottom: 20rpx;">
-								{{ item.shop.name }}
-							</view>
-							<view class="flex align-center">
-								<view class="mr-1">
-									<uv-tags text="预约" plain size="mini" type="error" v-if="item.orderType == 'due'"></uv-tags>
-									<uv-tags text="堂食" plain size="mini" type="error" v-if="item.orderType == 'desk'"></uv-tags>
-									<uv-tags text="自取" plain size="mini" type="error" v-if="item.orderType == 'takein'"></uv-tags>
-									<uv-tags text="外卖" plain size="mini" type="error" v-if="item.orderType == 'takeout'"></uv-tags>
-								</view>
-								<view class="font-size-sm text-color-assist">订单编号:{{ item.orderId }}</view>
-								<!-- <view class="font-size-base text-color-assist" v-if="item.orderType == 'desk'">桌号:{{ item.deskNumber }}</view>
-								<view class="font-size-base text-color-assist" v-else>取餐号:{{ item.numberId }}</view> -->
-							</view>	
-						</view>
-						<view class="font-size-medium text-color-primary">
-							<text>{{ item.statusDto.title }}</text>
-						</view>
-					</view>
-				</list-cell>
-				<list-cell :hover="false" last>
-					<view class="w-100 d-flex flex-column">
-						<block>
-							<view class="w-100 text-truncate font-size-lg text-color-base" style="margin-bottom: 20rpx;"
-							v-if="item.cartInfo.length <= 3">
-								<view class="flex mb-2" v-for="(good,index) in item.cartInfo" :key="index">  
-									<image :src="good.image" mode="aspectFill" class="image"></image>
-									<view class="flex flex-column">
-										<view class="font-size-medium mt-1 text-color-base">{{ good.title }}</view>
-										<view class="font-size-sm mt-1">{{ good.spec }}</view>
-										<view class="font-size-sm mt-1">×{{ good.number }}  ¥{{ good.price }}</view>
-									</view>
-								</view>
-							</view>
-							<view class="w-100 text-truncate font-size-lg text-color-base flex flex-wrap" style="margin-bottom: 20rpx;" v-else>
-								<view class="flex mb-2 justify-center" style="margin-right: 3rpx;" v-for="(good,index) in item.cartInfo" :key="index">  
-									<image :src="good.image" mode="aspectFill" class="image"></image>
-								</view>
-							</view>
-						</block>
-						<view class="d-flex justify-content-between align-items-center" style="margin-bottom: 30rpx;">
-							<view class="font-size-sm text-color-assist">
-								{{formatDateTime(item.createTime) }}
-							</view>
-							<view class="d-flex font-size-sm text-color-base align-items-center">
-								<view style="margin-right: 10rpx;">共{{ goodsNum(item.cartInfo) }}件商品,实付</view>
-								<view class="font-size-lg">¥{{ item.payPrice }}</view>
-							</view>
-						</view>
-						<view class="d-flex align-items-center justify-content-end">
-							<view>
-								<button v-if="item.paid > 0 && item.status < 2 && item.refundStatus == 0" class="left-margin"  plain size="mini" @tap.stop="receive(item)">确认收到餐</button>
-								<button class="left-margin"  plain size="mini" @tap="detail(item.orderId)">订单详情</button>
-							</view>
-						</view>
-					</view>
-				</list-cell>
-			</view>
-		</view>
-		<uv-empty v-if="orders.length == 0" mode="order" text="您暂时还没有订单哦~">
-			<uv-button text="去点单" @click="addFood" color="#059825" shape="circle"  customStyle="padding:0 120rpx;margin-top:30rpx"></uv-button>
-		</uv-empty>
-	</view>
-</template>
-
-
-<script setup>
-import {
-  ref,
-  computed
-} from 'vue'
-import { useMainStore } from '@/store/store'
-import { storeToRefs } from 'pinia'
-import { onShow,onLoad,onPullDownRefresh,onReachBottom} from '@dcloudio/uni-app'
-import { formatDateTime,kmUnit } from '@/utils/util'
-import {
-  orderGetOrders,
-  orderReceive,
-  cancelDue
-} from '@/api/order'
-const main = useMainStore()
-const { isLogin } = storeToRefs(main)
-const title = ref('我的订单')
-
-const page = ref(1)
-const pageSize = ref(10)
-const orders = ref([])
-const typeStr =  ref('all')
-const type = ref(-1)
-const orderType = ref('all')
-
-const orderGoodsName = computed(() => { //计算单个饮品添加到购物车的数量
-	return (goods) => {
-		let arr = []
-		goods.forEach(good => arr.push(good.title + '*' + good.number))
-		return arr.join(',')
-	}
-})
-const goodsNum = computed(() => { //计算单个饮品添加到购物车的数量
-	return (goods) => {
-		let num = 0;
-		goods.forEach(good => num += parseInt(good.number))
-		return num;
-	}
-})
-
-onLoad((option) => {
-	if(!isLogin.value) {
-		uni.navigateTo({url: '/pages/components/pages/login/login'})
-	}
-	getOrders(false)
-})
-onPullDownRefresh(() => {
-	 getOrders(false)
-})
-onReachBottom(() => {
-	getOrders(false)
-})
-
-const addFood = () => {
-	uni.switchTab({
-		url: '/pages/menu/menu'
-	}) 
-}
-
-// tab栏切换
-const change = (e) => {
-	typeStr.value = e
-	orderType.value = e
-	getOrders(true)
-}
-
-
-const getOrders = async(isRefresh = false) => {
-	uni.showLoading({
-		title: '加载中'
-	})
-	if(isRefresh) {
-		orders.value = []
-		page.value = 1
-	}
-	let ordersData = await orderGetOrders({page:page.value, limit:pageSize.value,type:type.value,orderType:orderType.value});
-
-	if(ordersData) {
-		orders.value = orders.value.concat(ordersData)
-		page.value += 1
-	}
-	uni.stopPullDownRefresh();
-	uni.hideLoading()
-}
-const detail = (id) => {
-	uni.navigateTo({
-		url: '/pages/components/pages/orders/detail?id=' + id
-	})
-}
-// 确认收到货
-const receive  = async(order) => {
-	let data = await orderReceive({uni:order.orderId});
-	if (data) {
-		await getOrders(true)
-	}
-}
-
-const cancelDueOrder = async(id) => {
-	let data = await cancelDue({id:id});
-	if (data) {
-		await getOrders(true)
-	}
-}
-	
-
-</script>
-
-<style lang="scss" scoped>
-	.left-margin {
-		margin-left: 10rpx;
-	}
-	.image {
-		width: 130rpx;
-		height: 130rpx;
-		margin-right: 30rpx;
-		border-radius: 8rpx;
-	}
-</style>

+ 0 - 60
yshop/yshop-drink-uniapp/pages/components/pages/orders/refund.vue

@@ -1,60 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  left-arrow
-	  @leftClick="$onClickLeft"
-	/>
-	<!-- #endif -->
-	<view class="p-2">
-		<uv-list>
-			<uv-list-item title="订单金额"  :rightText="'¥'+totalPrice"></uv-list-item>
-			<uv-list-item title="退款金额"  :rightText="'¥'+payPrice"></uv-list-item>
-			<uv-list-item title="退款类型"  rightText="整个订单"></uv-list-item>
-			<uv-list-item title="退款原因"  rightText="协商一致"></uv-list-item>
-			<uv-list-item title="退款留言" >
-				<template #footer><uv-input placeholder="请输入内容" border="none" v-model="refundReasonWapExplain"></uv-input></template>
-			</uv-list-item>
-		</uv-list>
-		<view class="mt-2">
-			<uv-button shape="circle" type="error" :plain="true" size="small" text="申请退款" @click="refund()"></uv-button>
-		</view>
-		<uv-toast ref="toast"></uv-toast>
-	</view>
-</template>
-
-<script setup>
-import {
-  ref
-} from 'vue'
-import { onLoad} from '@dcloudio/uni-app'
-import {
-  orderRefund
-} from '@/api/order'
-const title = ref('申请退款')
-const orderId = ref('')
-const payPrice = ref('')
-const totalPrice = ref('')
-const refundReasonWapExplain = ref('')
-const toast = ref()
-onLoad((option) => {
-	orderId.value = option.orderId
-	payPrice.value = option.payPrice
-	totalPrice.value = option.totalPrice
-})
-
-const refund  = async() => {
-	let data = await orderRefund({refundReasonWapExplain:refundReasonWapExplain.value,uni:orderId.value,text:'协商一致'});
-	if (data) {
-		uni.showToast({
-			title: '提交成功',
-			icon: 'success'
-		})
-	}
-}
-
-</script>
-
-<style>
-</style>

+ 0 - 396
yshop/yshop-drink-uniapp/pages/components/pages/packages/index.vue

@@ -1,396 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  left-arrow
-	  @leftClick="$onClickLeft"
-	/>
-	<!-- #endif -->
-	<view class="container position-relative w-100 h-100 overflow-hidden">
-		<uv-empty v-if="coupons.length == 0" mode="coupon"></uv-empty>
-		
-		<scroll-view scroll-y class="coupon-list">
-			<view class="wrapper">
-				<view class="coupon" v-for="(item, index) in coupons" :key="index">
-					<view class="taobao">
-						<view class="ticket" :style="{border: item.id == coupon_id ? '1rpx solid red':''}">
-							<view class="left">
-								<view class="introduce">
-									<view class="type">{{ item.title }}</view>
-									<view class="top">
-									<!-- 	¥
-										<text class="big">{{ item.value }}</text> -->
-										<view>满{{ item.least }}减{{ item.value }}</view>
-									</view>
-									<view class="date u-line-1">{{formatDateTime(item.startTime, 'yyyy-MM-dd')}}-{{formatDateTime(item.endTime, 'yyyy-MM-dd')}}</view>
-								</view>
-							</view>
-							<view class="right" @click.stop="" v-if="activeTabIndex == 0">
-								<view class="big">¥<text style="font-size: 40rpx;">{{item.value}}</text></view>
-								<view v-if="item.id != coupon_id" class="use immediate-use" :round="true" @tap="useCouponWith(item)">立即使用</view>
-								<view v-else class="use immediate-use" :round="true" @tap="cancelCoupon(item)">取消使用</view>
-							</view>
-						</view>
-					</view>
-				</view>
-			</view>
-		</scroll-view>
-		
-<!-- 		<modal custom :show="detailModalVisible" @cancel="closeDetailModal" width="90%">
-			<view class="modal-content">
-				<view class="d-flex font-size-extra-lg text-color-base just-content-center mb-20">{{ coupon.title }}</view>
-				<view class="d-flex font-size-sm text-color-base mb-20">有效期:{{formatDateTime(coupon.startTime, 'yyyy-MM-dd')}}至{{formatDateTime(coupon.endTime, 'yyyy-MM-dd')}}</view>
-				<view class="d-flex font-size-sm text-color-base mb-20">领取时间:{{ coupon.createtime_text }}</view>
-				<view class="d-flex font-size-sm text-color-base mb-20">卷价值:满{{ coupon.least }}减{{ coupon.value }}</view>
-				<view class="d-flex font-size-sm text-color-base mb-20">适用范围:{{ typeInfo(coupon.type) }}</view>
-				<view class="d-flex font-size-sm text-color-base mb-20">适用店铺:{{ coupon.shopName }}</view>
-				<view class="d-flex align-items-center just-content-center" v-if="activeTabIndex == 0">
-					<button type="primary" @tap="useCoupon" class="use-coupon-btn">立即使用</button>
-				</view>
-			</view>
-		</modal> -->
-
-		<!--轻提示-->
-		<uv-toast ref="uToast"></uv-toast>
-	</view>
-</template>
-
-<script setup>
-import {
-  ref,
-  watch,
-  toRaw
-} from 'vue'
-import { useMainStore } from '@/store/store'
-import { storeToRefs } from 'pinia'
-import { onLoad,onShow ,onPullDownRefresh,onHide} from '@dcloudio/uni-app'
-import { formatDateTime,prePage } from '@/utils/util'
-import {
-  couponMine
-} from '@/api/coupon'
-const main = useMainStore()
-const { isLogin } = storeToRefs(main)
-const title = ref('优惠券')
-const activeTabIndex = ref(0)
-const detailModalVisible = ref(false)
-const coupon = ref({})
-const couponIndex = ref(0)
-const coupons = ref([])
-const amount = ref(0)
-const buttonLock = ref(false)
-const coupon_id = ref(0)
-const shop_id = ref(0)
-const type = ref(0)
-const uToast = ref()
-
-onLoad((options) => {
-	if (options.amount) {
-		amount.value = options.amount;
-	}
-	if (options.coupon_id) {
-		coupon_id.value = options.coupon_id
-	}
-	if (options.shop_id) {
-		shop_id.value = options.shop_id;
-	}
-	if (options.type) {
-		type.value = options.type;
-	}
-	activeTabIndex.value = 0;
-	getCoupons();
-})
-
-onPullDownRefresh(() => {
-	getCoupons();
-})
-
-// 使用范围
-const typeInfo = (type) => {
-	if (type == 0) {
-		return '外卖和自取';
-	}
-	if (type == 1) {
-		return '自取';
-	}
-	if (type == 2) {
-		return '外卖';
-	}
-}
-const getCoupons = async() => {
-	let data = await couponMine({shop_id: shop_id.value, type: type.value, page:1, pagesize:10000});
-	uni.stopPullDownRefresh();
-	if (data) {
-		coupons.value = data;
-	}
-}
-const openDetailModal = (mycoupon, index) => {
-	couponIndex.value = index;
-	coupon.value = mycoupon;
-	detailModalVisible.value = true;
-}
-// 使用优惠券
-const useCouponWith = (mycoupon) => {
-	coupon.value = mycoupon;
-	useCoupon();
-}
-// 取消优惠券
-const cancelCoupon = () => {
-	coupon.value = {}
-	coupon_id.value = 0
-	prePage().coupon = {}
-}
-const closeDetailModal = () => {
-	detailModalVisible.value = false;
-	coupon.value = {};
-}
-// 使用优惠及
-
-const useCoupon = () => {
-	if (buttonLock.value == true) {
-		return;
-	}
-	buttonLock.value = true
-	if (parseFloat(coupon.value.least) > parseFloat(amount.value)) {
-		uToast.value.show({
-			message: '订单金额满'+coupon.value.least+'才能使用',
-			type: 'error'
-		});
-		buttonLock.value = false
-	} else {
-	    main.SET_COUPON(coupon)
-		
-		uni.navigateBack({
-			
-		})
-		
-	}
-	
-}
-
-
-
-</script>
-
-<style lang="scss" scoped>
-/* #ifdef H5 */
-page {
-	height: 100%;
-}
-/* #endif */
-
-.container {
-	display: flex;
-	flex-direction: column;
-}
-
-.bottom-box {
-	height: 80rpx;
-	flex-shrink: 0;
-	.item {
-		padding: 0 20rpx;
-		position: relative;
-
-		&::after {
-			content: ' ';
-			border-right: 1rpx solid $text-color-assist;
-			height: 100%;
-			position: absolute;
-			right: 0;
-			top: 0;
-			transform: scaleX(0.5) scaleY(0.8);
-		}
-
-		&:nth-last-child(1)::after {
-			border-right: 0;
-		}
-	}
-}
-
-.coupon-list {
-	margin-top: 30rpx;
-	height:calc(100vh - 120rpx); 
-	// height: calc(100vh - 120rpx - 200rpx);
-	/* #ifdef H5 */
-	// height: calc(100vh - 120rpx - 200rpx - 44px);
-	/* #endif */
-}
-
-.wrapper {
-	padding: 0 20rpx;
-	display: flex;
-	flex-direction: column;
-
-	.coupon {
-		display: flex;
-		flex-direction: column;
-		background-color: #ffffff;
-		margin-bottom: 30rpx;
-		//padding: 0 30rpx;
-		border-radius: 6rpx;
-		box-shadow: 0 10rpx 10rpx -10rpx rgba(15, 15, 15, 0.1);
-		position: relative;
-
-		&::before {
-			content: '';
-			position: absolute;
-			background-color: $bg-color;
-			width: 30rpx;
-			height: 30rpx;
-			bottom: 65rpx;
-			left: -15rpx;
-			border-radius: 100%;
-		}
-
-		&::after {
-			content: '';
-			position: absolute;
-			background-color: $bg-color;
-			width: 30rpx;
-			height: 30rpx;
-			bottom: 65rpx;
-			right: -15rpx;
-			border-radius: 100%;
-		}
-
-		.detail {
-			padding: 20rpx 0;
-			position: relative;
-
-			&::after {
-				content: '';
-				position: absolute;
-				left: 0;
-				right: 0;
-				bottom: 0;
-				border-bottom: 1rpx dashed #c6c6c6;
-				transform: scaleY(0.5);
-			}
-
-			.coupon-img {
-				width: 150rpx;
-				height: 150rpx;
-				margin-right: 40rpx;
-			}
-		}
-	}
-}
-
-.use-coupon-btn {
-	width: 95%;
-	border-radius: 50rem !important;
-}
-
-.taobao {
-	background-color: white;
-	.title {
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		margin-bottom: 20rpx;
-		font-size: 30rpx;
-		.left {
-			display: flex;
-			align-items: center;
-		}
-		.store {
-			font-weight: 500;
-		}
-		.buddha {
-			width: 70rpx;
-			height: 70rpx;
-			border-radius: 10rpx;
-			margin-right: 10rpx;
-		}
-		.entrance {
-			color: $uv-info;
-			border: solid 2rpx $uv-info;
-			line-height: 48rpx;
-			padding: 0 30rpx;
-			background: none;
-			border-radius: 15px;
-		}
-	}
-	.ticket {
-		display: flex;
-		.left {
-			width: 70%;
-			padding: 20rpx;
-			background-color: white; //rgb(255, 245, 244);
-			border-radius: 20rpx;
-			border-right: dashed 2rpx rgb(224, 215, 211);
-			display: flex;
-			.picture {
-				//width: 172rpx;
-				border-radius: 20rpx;
-				width: 190rpx;
-				height: 190rpx;
-			}
-			.introduce {
-				margin-left: 10rpx;
-				.top {
-					color: $uv-warning;
-					font-size: 28rpx;
-				}
-				.type {
-					font-size: 38rpx;
-					color: $uv-info-dark;
-					font-weight: bold;
-					margin-bottom: 10rpx;
-				}
-				.date {
-					margin-top: 10rpx;
-					font-size: 20rpx;
-					color: $uv-info-dark;
-				}
-			}
-		}
-		.right {
-			width: 30%;
-			padding: 40rpx 20rpx;
-			background-color: white; //rgb(255, 245, 244);
-			border-radius: 20rpx;
-			display: flex;
-			flex-direction: column;
-			align-items: center;
-			.big{
-				font-size: 20rpx;
-				font-weight: bold;
-				margin-bottom: 20rpx;
-				color:$uv-warning;
-			}
-			.use {
-				height: auto;
-				padding: 0 20rpx;
-				font-size: 24rpx;
-				border-radius: 40rpx;
-				color: #ffffff !important;
-				background-color: $uv-warning !important;
-				line-height: 40rpx;
-				color: rgb(117, 142, 165);
-				margin-left: 20rpx;
-			}
-			.used {
-				height: auto;
-				padding: 0 20rpx;
-				font-size: 24rpx;
-				border-radius: 40rpx;
-				//color: #ffffff!important;
-				//background-color: $u-type-warning!important;
-				line-height: 40rpx;
-				//color: rgb(117, 142, 165);
-				margin-left: 20rpx;
-			}
-		}
-		.right_log {
-			text-align: center;
-			width: 30%;
-			padding: 80rpx 0rpx;
-			background-color: white; //rgb(255, 245, 244);
-			border-radius: 20rpx;
-
-			align-items: center;
-		}
-	}
-}
-</style>

+ 0 - 133
yshop/yshop-drink-uniapp/pages/components/pages/pay/alipay.vue

@@ -1,133 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  left-arrow
-	  @leftClick="$onClickLeft"
-	/>
-	<!-- #endif -->
-	<view class="">
-		<view v-show="show" class="guide">
-			<image class="jt" src="/static/images/jt.png" mode="widthFix"></image>
-			<view> 支付宝支付请使用浏览器进行支付,</view>
-			<view v-if="isWeixin"> 请在菜单中选择浏览器打开</view>
-			<view class="wctxt" @click="goBack">
-				<text>已完成支付?点击此链接返回上一页面</text>
-			</view>
-		</view>
-		<div class="body">
-		</div>
-		<uv-toast ref="uToast"></uv-toast>
-	</view>
-</template>
-
-<script setup>
-import {
-  ref,
-  computed,
-  nextTick
-} from 'vue'
-import { useMainStore } from '@/store/store'
-import { storeToRefs } from 'pinia'
-import { onLoad,onShow ,onPullDownRefresh,onHide} from '@dcloudio/uni-app'
-import { formatDateTime,isWeixin } from '@/utils/util'
-import  debounce  from '@/uni_modules/uv-ui-tools/libs/function/debounce'
-import cookie from '@/utils/cookie'
-
-import {
-  payUnify
-} from '@/api/order'
-
-const show = ref(false)
-const orderId = ref('')
-
-onLoad((option) => {
-	if(!option.orderId || option.orderId == '' || !option.token) {
-		uni.showToast({
-			title: '参数有误,请联系管理员~',
-			icon: 'none'
-		})
-		return
-	}
-	cookie.set('accessToken',option.token)
-	orderId.value = option.orderId
-	aliPay(option.orderId)
-})
-const aliPay = async(orderId) => {
-
-	// #ifdef H5
-	
-	if(isWeixin()){
-		show.value = true
-		return
-	}
-
-	let data = await payUnify({
-		uni: orderId,
-		from: 'h5',
-		paytype: 'alipay'
-	});
-
-  // 支付宝支付,这里只要提交表单
-	let form = data.data
-	console.log("form:",form)
-
-	const div = document.createElement('formdiv');
-	div.innerHTML = form;
-	document.body.appendChild(div);      
-	document.forms[0].submit();
-
-// #endif
-
-
-}
-
-const goBack = () => {			
-	// uni.navigateTo({
-	// 	url: '/pages/components/pages/orders/detail?id=' + orderId.value
-	// })
-	uni.reLaunch({
-		url: '/pages/components/pages/orders/detail?id=' + orderId.value
-	})
-}
-
-
-</script>
-
-<style lang="scss" scoped>
-	.container {
-		padding: 30rpx;
-	}
-	
-	.wctxt{
-			margin-top: 70px;
-			text{
-				text-decoration: underline;
-			}
-		}
-		
-		.guide {
-			position: fixed;
-			top: 0;
-			left: 0;
-			right: 0;
-			bottom: 0;
-			background-color: rgba(0, 0, 0, .6);
-			display: flex;
-			flex-direction: column;
-			align-items: center;
-			width: 100%;
-			color: #fff;
-			font-size: 16px;
-	 
-			.jt {
-				width: 94rpx;
-				margin-left: 600rpx;
-				margin-top: 20px;
-				margin-bottom: 20px;
-			}
-		}
-	
-	
-</style>

+ 0 - 1041
yshop/yshop-drink-uniapp/pages/components/pages/pay/pay.vue

@@ -1,1041 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  left-arrow
-	  @leftClick="$onClickLeft"
-	/>
-	<!-- #endif -->
-	<view class="container position-relative">
-		<view style="margin-bottom: 130rpx;">
-			<view class="section-1">
-				<list-cell class="location"  v-if="!isScan" padding="0 0">
-						<view class="flex w-100 bg-yshop-light">
-							<view class=" flex align-center justify-center flex-1  py-1" :class="{'hade-left':orderType == 'takein'}" >
-								<!-- <view><image src="/static/images/index002.png" mode="aspectFit" class="img-03"></image></view> -->
-								<text>到店自取</text>
-							</view>
-							<view class="flex align-center justify-center flex-1 py-1" :class="{'hade-right':orderType == 'takeout'}">
-							<!-- 	<view><image src="/static/images/index003.png" mode="aspectFit" class="img-03"></image></view> -->
-								<text>外卖到家</text>
-							</view>
-						</view>
-					
-				</list-cell>
-				<list-cell @click="chooseAddress" v-if="orderType == 'takeout'">
-					<view v-if="address.realName" class="w-100 d-flex flex-column">
-						<view class="d-flex align-items-center justify-content-between mb-10">
-							<view class="font-size-sm text-color-base">
-								{{ address.address + ' ' + address.detail }}
-							</view>
-							<image src="/static/images/navigator-1.png" class="arrow"></image>
-						</view>
-						<view class="d-flex text-color-assist font-size-sm align-items-center">
-							<view class="mr-10">{{ address.realName }}</view>
-							<view>{{ address.phone }}</view>
-						</view>
-					</view>
-					<view v-else class="flex-fill d-flex justify-content-between align-items-center">
-						<view class="store-name flex-fill">选择收货地址</view>
-						<image src="/static/images/navigator-1.png" class="arrow"></image>
-					</view>
-				</list-cell>
-				<list-cell  v-else-if="orderType == 'takein'">
-					<view  class="w-100 ">
-						<view class="d-flex align-items-center justify-content-between mb-10">
-							<view class="font-size-lg text-color-base flex flex-column">
-								<text class="font-weight-bolder">{{ store.name  }}</text>
-								<view class="font-size-sm text-color-assist flex mt-1 align-center">
-									<uv-icon name="empty-address"></uv-icon><text class="ml-1">{{ store.address  }}</text>
-								</view>
-							</view>
-							<image src="/static/images/navigator-1.png" class="arrow"></image>
-						</view>
-					</view>
-				</list-cell>
-			</view>
-
-			<view class="section-1">
-				<list-cell arrow class="meal-time" v-if="orderType == 'takein'">
-					<view class="flex-fill d-flex justify-content-between align-items-center"
-						@click="openPicker">
-						<view class="title font-weight-bold" >取餐时间</view>
-						<view class="time" style="color: #f1a532;">
-							{{ getTimeName ? getTimeName : '立即取餐' }}
-							<uv-picker ref="picker" :columns="takeinRange" keyName="name"
-								@cancel="takeinCancelTime" @confirm="takeinConfirmTime"
-								></uv-picker>
-						</view>
-					</view>
-				</list-cell>
-				<!-- <list-cell class="contact" last :hover="false" v-if="orderType == 'takein'">
-					<view class="flex-fill d-flex justify-content-between align-items-center">
-						<view class="title flex-fill">联系电话</view>
-						<view class="time"><input class="text-right" placeholder="请输入手机号码" :value="member.mobile" />
-						</view>
-						<button class="contact-tip font-size-sm">自动填写</button>
-					</view>
-				</list-cell> -->
-				<list-cell v-if="orderType == 'takeout'">
-					<view class="w-100 d-flex flex-column">
-						<view class="d-flex align-items-center font-size-base text-color-base">
-							<view class="flex-fill">配送方式</view>
-							<view class="mr-10 font-size-sm ">
-								{{store.deliveryType == 1 ? '商家自配送' : '第三方配送('+sameCityExpress.expressName + ')'}}
-							</view>
-						</view>
-					</view>
-				</list-cell>
-				<list-cell v-if="orderType == 'takeout'">
-					<view class="w-100 d-flex flex-column">
-						<view class="d-flex align-items-center font-size-base text-color-base" v-if="store.deliveryType == 1">
-							<view class="flex-fill">预计送达时间</view>
-							<view class="mr-10 font-size-sm ">
-								{{ defaultTime }}
-							</view>
-						</view>
-						<view class="d-flex align-items-center font-size-base text-color-base" v-else>
-							<view class="flex-fill">配送信息</view>
-							<view class="mr-10 font-size-sm ">
-								配送距离:{{ kmUnit(sameCityExpress.deliveryDistance) }},配送费:{{sameCityExpress.discountFee}}元
-							</view>
-						</view>
-					</view>
-				</list-cell>
-			</view>
-			<!-- 购物车列表 begin -->
-			<view class="section-2">
-				<view class="cart d-flex flex-column">
-					<view class="bg-white px-3">
-						<view class="flex align-center pt-3">
-							<uv-avatar :src="store.image" :size="30"></uv-avatar>
-							<text class="ml-1 font-size-medium">{{store.name}}</text>
-						</view>
-						<uv-divider text=""></uv-divider>
-					</view>
-					
-					<list-cell last v-for="(item, index) in cart" :key="index" padding="5rpx 30rpx">
-						<view class="w-100 d-flex justify-content-between">
-							<view class="d-flex">
-								<view>
-									<image style="width: 110rpx;height: 110rpx;" mode="aspectFill" :src="item.image">
-									</image>
-								</view>
-								<view class="name-and-props overflow-hidden ml-2 font-size-sm ">
-									<view class="font-size-base font-weight-bolder">{{ item.name }}</view>
-									<view class="text-color-base">{{ item.valueStr }}</view>
-									<view class="text-color-base">x{{ item.number }}</view>
-								</view>
-							</view>
-							<view class="text-truncate font-size-base text-color-assist">¥{{ item.price }}</view>
-						</view>
-					</list-cell>
-				</view>
-				<view class="mt-1">
-					<list-cell last :hover="false"><text class="font-weight-bold">优惠及结算</text></list-cell>
-					<list-cell arrow @click="goToPackages">
-						<view class="flex-fill d-flex justify-content-between align-items-center font-size-sm ">
-							<view class="text-color-assist flex ">
-								<!-- <uv-tags text="券" bgColor="#059825" borderColor="#059825" size="mini" ></uv-tags> -->
-								<text class="ml-1">优惠券</text>
-							</view>
-							<view v-if="coupons == 0" class="text-color-assist">暂无可用</view>
-							<view v-else-if="coupon.title" class="text-color-danger">
-								{{ coupon.title }}(满{{ coupon.least }}减{{ coupon.value }})
-							</view>
-							<view v-else class="text-color-primary">可用优惠券{{ coupons }}张</view>
-						</view>
-					</list-cell>
-					<list-cell>
-						<view class="flex-fill d-flex justify-content-between align-items-center font-size-sm">
-							<view class="flex ext-color-assist flex">
-								<!-- <uv-tags text="会" bgColor="#059825" borderColor="#059825" size="mini"></uv-tags> -->
-								<text class="ml-1">会员</text>
-							</view>
-							<view v-if="member.cardId == 0 || member.cardId == ''"  class="text-color-assist">没有折扣</view>
-							<view v-else class="text-color-danger">
-								{{ member.cardName }}(享受{{ member.discount }}者优惠)
-							</view>
-						</view>
-					</list-cell>
-				</view>
-				<list-cell last>
-					<view class="flex-fill d-flex justify-content-end align-items-center">
-						<view>
-							总计¥{{ total }}
-							<text v-if="orderType == 'takeout'">,配送费¥{{ store.deliveryType == 1 ? store.deliveryPrice : sameCityExpress.discountFee}}</text>
-							<text v-if="coupon.value">,¥-{{ coupon.value }}</text>
-							<text v-if="deductionPrice > 0">,¥-{{ deductionPrice }}</text>
-							,实付
-						</view>
-						<view class="font-size-extra-lg font-weight-bold">¥{{ amount }}</view>
-					</view>
-				</list-cell>
-			</view>
-			<!-- 购物车列表 end -->
-			<view class="d-flex align-items-center justify-content-start font-size-sm text-color-warning"
-				style="padding: 20rpx 0;">
-			</view>
-			<!-- 支付方式 begin -->
-			<view class="payment" v-if="!isScan">
-				<list-cell last :hover="false"><text  class="font-weight-bold">支付方式</text></list-cell>
-				<list-cell>
-					<view class="d-flex align-items-center justify-content-between w-100 disabled"
-						@click="setPayType('yue')">
-						<view class="iconfont iconbalance line-height-100 payment-icon"></view>
-						<view class="flex-fill">余额支付(余额¥{{ member.nowMoney }})</view>
-						<view class="font-size-sm" v-if="member.nowMoney == 0">余额不足</view>
-						<view class="iconfont line-height-100 checkbox checked iconradio-button-on" v-if="payType == 'yue'">
-						</view>
-						<view class="iconfont line-height-100 checkbox iconradio-button-off" v-else></view>
-					</view>
-				</list-cell>
-				<list-cell last>
-					<view class="d-flex align-items-center justify-content-between w-100" @click="setPayType('weixin')">
-						<view class="iconfont iconwxpay line-height-100 payment-icon" style="color: #7EB73A"></view>
-						<view class="flex-fill">微信支付</view>
-						<view class="iconfont line-height-100 checkbox checked iconradio-button-on" v-if="payType == 'weixin'">
-						</view>
-						<view class="iconfont line-height-100 checkbox iconradio-button-off" v-else></view>
-					</view>
-				</list-cell>
-				<!-- #ifdef H5 -->
-				<list-cell>
-					<view class="d-flex align-items-center justify-content-between w-100" @click="setPayType('alipay')">
-						<view class="iconfont-yshop icon-alipay line-height-100 payment-icon" style="color:#07b4fd" ></view>
-						<view class="flex-fill">支付宝</view>
-						<view class="iconfont line-height-100 checkbox checked iconradio-button-on" v-if="payType == 'alipay'" ></view>
-						<view class="iconfont line-height-100 checkbox iconradio-button-off" v-else ></view>     
-					</view>
-				</list-cell>
-				<!-- #endif -->
-			</view>
-			<!-- 支付方式 end -->
-			<!-- 备注 begin -->
-			<list-cell  last @click="goToRemark">
-				<view class="d-flex flex-fill align-items-center justify-content-between overflow-hidden" style="margin-bottom: 110rpx;">
-					<view class="flex-shrink-0 mr-20">备注</view>
-					<view class="text-color-primary flex-fill text-truncate text-right">{{ form.remark || '点击填写备注' }}
-					</view>
-				</view>
-			</list-cell>
-			<!-- 备注 end -->
-		</view>
-		<!-- 付款栏 begin -->
-		<view style="z-index: 1;"
-			class="w-100 pay-box position-fixed fixed-bottom d-flex align-items-center justify-content-between bg-white">
-			<view class="font-size-sm" style="margin-left: 20rpx;">合计:</view>
-			<view class="font-size-lg flex-fill">¥{{ amount }}</view>
-			<view class="bg-primary h-100 d-flex align-items-center just-content-center text-color-white font-size-base"
-				style="padding: 0 80rpx;" @tap="debounce(sumbmitOrder, 500)" v-if="isScan">提交订单</view>
-			<view class="bg-primary h-100 d-flex align-items-center just-content-center text-color-white font-size-base"
-				style="padding: 0 80rpx;" @tap="debounce(submit, 500)" v-else>付款</view>
-		</view>
-		<!-- 付款栏 end -->
-		<modal :show="ensureAddressModalVisible" custom :mask-closable="false" :radius="'0rpx'" width="90%">
-			<view class="modal-content">
-				<view class="d-flex justify-content-end">
-					<image src="/static/images/pay/close.png" style="width: 40rpx; height: 40rpx;"
-						@tap="ensureAddressModalVisible = false"></image>
-				</view>
-				<view class="d-flex just-content-center align-items-center" style="margin-bottom: 40px;">
-					<view class="font-size-extra-lg text-color-base">请再次确认下单地址</view>
-				</view>
-				<view
-					class="d-flex font-size-base text-color-base font-weight-bold align-items-center justify-content-between mb-20">
-					<view>{{ address.realName }}</view>
-					<view>{{ address.phone }}</view>
-				</view>
-				<view class="d-flex font-size-sm text-color-assist align-items-center justify-content-between mb-40">
-					<view style="max-width: 60%;">{{ address.address + address.detail }}</view>
-					<button type="primary" size="mini" plain class="change-address-btn" style="white-space: nowrap;"
-						@click="chooseAddress">修改地址</button>
-				</view>
-				<button type="primary" class="pay_btn" @tap="debounce(pay, 500)">确认并付款</button>
-			</view>
-		</modal>
-		<uv-toast ref="uToast"></uv-toast>
-	</view>
-</template>
-
-<script setup>
-import {
-  ref,
-  computed,
-  nextTick,
-  watch
-} from 'vue'
-import { useMainStore } from '@/store/store'
-import { storeToRefs } from 'pinia'
-import { onLoad,onShow ,onPullDownRefresh,onHide} from '@dcloudio/uni-app'
-import { formatDateTime,isWeixin,kmUnit } from '@/utils/util'
-import  debounce  from '@/uni_modules/uv-ui-tools/libs/function/debounce'
-import cookie from '@/utils/cookie'
-
-import {
-  orderSubmit,
-  payUnify,
-  getWechatConfig,
-  getSameCityPrice
-} from '@/api/order'
-import {
-  couponCount
-} from '@/api/coupon'
-// #ifdef H5
-import * as jweixin from 'weixin-js-sdk'
-// #endif
-const main = useMainStore()
-const { orderType,address, store,location,isLogin,member,mycoupon,isScan,desk,uidType } = storeToRefs(main)
-const active = ref(false)
-const title = isScan ? ref('下单') :ref('支付')
-const jsStr = ref('')
-const cart = ref([])
-const form = ref({
-	remark: ''
-})
-const  ensureAddressModalVisible = ref(false)
-const  takeoutTIme = ref(false) // 外卖取餐时间picker
-const paramsTime = ref({
-	year: false,
-	month: false,
-	day: false,
-	hour: true,
-	minute: true,
-	second: false
-})
-const defaultTime = ref('00:00')
-const takeinRange = ref([[{
-		name: '立即用餐',
-		value: 0
-	},
-	{
-		name: '10分钟后',
-		value: 10
-	},
-	{
-		name: '20分钟后',
-		value: 20
-	},
-	{
-		name: '30分钟后',
-		value: 30
-	},
-	{
-		name: '40分钟后',
-		value: 40
-	},
-	{
-		name: '50分钟后',
-		value: 50
-	}
-]])
-const defaultSelector = ref([0])
-const payType = ref('weixin') // 付款方式
-const coupons = ref(0) // 可用优惠券数量
-const coupon = ref(main.mycoupon) // 选中的
-const deductionPrice = ref(0)
-const getTime = ref(0)
-const getTimeName = ref('')
-const sameCityExpress = ref({
-	expressName:'--',
-	deliveryDistance:'--',
-	discountFee:0,
-})
-
-const uToast = ref()
-
-const total = computed(() =>{
-	return cart.value.reduce((acc, cur) => acc + cur.number * cur.price, 0);
-})
-const amount = computed(() =>{
-	let amount = cart.value.reduce((acc, cur) => acc + cur.number * cur.price, 0);
-	//会员折扣
-	if(member.value.cardId > 0){
-		let deduct = (amount - amount * (member.value.discount / 10)).toFixed(2)
-		deductionPrice.value = deduct
-		amount = amount - deduct
-		
-	}
-	// 加配送费
-	if (orderType.value == 'takeout') {
-		if(store.value.deliveryType == 1){
-			amount += parseFloat(store.value.deliveryPrice);
-		}else{
-			amount += parseFloat(sameCityExpress.value.discountFee);
-		}
-		
-	}
-
-	
-	// 减去优惠券
-	if (main.mycoupon.hasOwnProperty('id')) {
-		amount -= parseFloat(main.mycoupon.value);
-	}
-	if(amount < 0){
-		amount = 0
-	}
-	return amount.toFixed(2);
-})
-
-onShow(() => {
-	coupon.value = main.mycoupon
-	let date = new Date(new Date().getTime() + 3600000); // 一个小时后
-	let hour = date.getHours();
-	let minute = date.getMinutes();
-	if (hour < 10) {
-		hour = '0' + hour;
-	}
-	if (minute < 10) {
-		minute = '0' + minute;
-	}
-	defaultTime.value = hour + ':' + minute;
-	
-	console.log('store.value:',store.value)
-	if(orderType.value == 'takeout'){
-		active.value = true
-		if(store.value.deliveryType == 2){
-			doSameCityPrice()
-		}
-		
-	}else{
-		active.value = false
-	}
-	
-	getCoupons();
-	
-	let paytype = uni.getStorageSync('paytype');
-	payType.value = paytype ? paytype : 'weixin';
-	
-})
-onHide(() => {
-	coupons.value = 0;
-})
-onLoad((option) => {
-	if(orderType.value == "" || !store.value.id){
-		uni.switchTab({
-			url: '/pages/index/index'
-		})
-		return
-	}
-	cart.value = uni.getStorageSync('cart')
-	if(option.remark) {
-		form.value.remark = option.remark
-	}
-})
-
-watch(store.value.id, () => {
-   if(store.value.deliveryType == 2){
-   	doSameCityPrice()
-   }
-})
-
-
-// 更改支付方式
-const setPayType = (paytype) => {
-	payType.value = 'weixin';
-	payType.value= paytype;
-	uni.setStorage({
-		key: 'paytype',
-		data: paytype
-	})
-}
-const getCoupons = async() => {
-	//0=通用,1=自取,2=外卖
-	let type = orderType.value == 'takein' ? 1 : 2;
-	let data = await couponCount({
-		shop_id: store.value.id ? store.value.id : 0,
-		type: type
-	});
-	if (data) {
-		coupons.value = data;
-	}
-}
-
-const doSameCityPrice = async() => {
-	if(!address.value.id) return
-	let data = {
-		addressId: address.value.id, // 外卖配送地址
-		shopId: store.value.id, // 店铺id
-		productId: [],
-		spec: [],
-		number: [],
-		payPrice: amount.value
-	};
-	cart.value.forEach((item, index) => {
-		data.productId.push(item.id);
-		if(!item.valueStr){
-			item.valueStr = '默认'
-		}
-		data.spec.push(item.valueStr.replace(/,/g, '|'));
-		//data.spec.push(item.valueStr);
-		data.number.push(item.number);
-	});
-	sameCityExpress.value = await getSameCityPrice(data);
-}
-
-const cancelTime = (value) => {
-	takeoutTIme.value = false;
-}
-// 到店自取-取消选择取餐时间
-const takeinCancelTime = (value) => {
-
-}
-// 到店自取-选择取餐时间
-const takeinConfirmTime = (e) => {
-	getTime.value = e.value[0].value;
-	getTimeName.value =  e.value[0].name
-}
-const picker = ref()
-const openPicker = () => {
-	picker.value.open()
-}
-// 是否外卖开关
-const takout = (value) => {
-	let type = 'takeout';
-	if (value == false) {
-		type = 'takein';
-	}
-	main.SET_ORDER_TYPE(type);
-
-	// 如果存在优惠券看看需不需要清除
-	if (coupon.value.hasOwnProperty('type')) {
-		//0=通用,1=自取,2=外卖
-		if (coupon.value.type != 0) {
-			if (coupon.value.type == 1 && orderType.value == 'takeout') {
-				coupon.value = {};
-			}
-			if (coupon.value.type == 2 && orderType.value == 'takeint') {
-				coupon.value = {};
-			}
-		}
-	}
-	coupons.value = 0;
-	getCoupons();
-}
-const goToRemark = () => {
-	uni.navigateTo({
-		url: '/pages/components/pages/remark/remark?remark=' + form.value.remark
-	});
-}
-const chooseAddress = () => {
-	uni.navigateTo({
-		url: '/pages/components/pages/address/address?is_choose=true&scene=pay'
-	});
-}
-const goToPackages = () => {
-	let newamount = amount.value;
-	let coupon_id = coupon.value.id ? coupon.value.id : 0;
-	let type = orderType.value == 'takein' ? 1 : 2;
-	let shop_id = store.value.id;
-	uni.navigateTo({
-		url: '/pages/components/pages/packages/index?amount=' + newamount + '&coupon_id=' + coupon_id +
-			'&shop_id=' + shop_id + '&type=0'
-	});
-}
-const goToShop = () => {
-	uni.navigateTo({
-		url: `/pages/components/pages/shop/shop`
-	});
-}
-const submit = () => {
-	if (orderType.value == 'takeout') {
-		// 外卖类型
-		if (typeof address.value.id == 'undefined') {
-			uToast.value.show({
-				message: '请选择收货地址',
-				type: 'error'
-			});
-			return
-		}
-		// 配送范围 
-		// ...
-
-		// 起送价钱
-		if (store.value.min_price > total.value) {
-			uToast.value.show({
-				message: '本店外卖起送价为¥' + store.value.min_price,
-				type: 'error'
-			});
-			return
-		}
-
-		pay();
-
-	} else {
-		pay();
-	}
-}
-
-const sumbmitOrder = async() => {
-	uni.showLoading({
-		title: '加载中'
-	});
-	
-	let data = {
-		uidType: uidType.value,
-		orderId: desk.value.orderId, //当这个存在当时候表示加餐
-		deskId: desk.value.id,
-		deskNumber: desk.value.number,
-		deskPeople: desk.value.people,
-		orderType: orderType.value, // 购买类型:takein=自取,takeout=外卖
-		addressId: 0, // 外卖配送地址
-		shopId: store.value.id, // 店铺id
-		mobile: "", // 联系电话
-		gettime: 0, // 取餐时间
-		payType: 'weixin', // 支付类型
-		remark: form.value.remark, // 备注
-		productId: [],
-		spec: [],
-		number: [],
-		couponId: coupon.value.id ? coupon.value.id : 0 // 优惠券id
-	};
-	
-	cart.value.forEach((item, index) => {
-		data.productId.push(item.id);
-		if(!item.valueStr){
-			item.valueStr = '默认'
-		}
-		data.spec.push(item.valueStr.replace(/,/g, '|'));
-		//data.spec.push(item.valueStr);
-		data.number.push(item.number);
-	});
-	let order = await orderSubmit(data);
-	if (order) {
-		//main.DEL_DESK()
-		main.DEL_COUPON()
-		//main.SET_ORDER_TYPE('takein')
-		uni.hideLoading();
-		uni.removeStorageSync('cart');
-		//如果市店员协助点餐提交订单后 跳转到商家中心桌台
-		if(uidType.value == 'admin'){
-			uni.navigateTo({
-				url: '/pages/components/pages/merchant/bell'
-			})
-			main.SET_UID_TYPE('user')
-		}else{
-			if(order.msg){
-				uToast.value.show({
-					message: order.msg,
-					type: 'error'
-				});
-			}
-			setTimeout(function() {
-				uni.navigateTo({
-					url: '/pages/components/pages/orders/detail?id=' + order.orderId
-				})
-			}, 2000);
-			
-		}
-		
-	}
-	
-	
-}
-
-const pay = async() => {
-	// #ifdef MP-WEIXIN
-	//await new Promise(function(revolve) {
-		//订阅号信息id
-	// 	 let subscribeMss = ['KBtfY9G1IWCzC6q-ZKo-Q-MmdP7aaF79nx0XFcBf3h4'];
-
-	// 	wx.showModal({
-	// 		title: '温馨提示',
-	// 		content: '为更好的促进您与商家的交流,小程序需要在您成交时向您发送消息',
-	// 		confirmText: "同意",
-	// 		cancelText: "拒绝",
-	// 		success: function(res) {
-	// 			if (res.confirm) {
-	// 				uni.requestSubscribeMessage({
-	// 					tmplIds: subscribeMss,
-	// 					complete(res) {
-	// 						revolve(true)
-	// 					}
-	// 				});
-	// 			} else {
-	// 				revolve(true)
-	// 			}
-	// 		}
-	// 	})
-	// });
-	
-
-	// #endif
-
-	if(amount.value == 0){
-		payType.value = 'yue'
-	}
-	uni.showLoading({
-		title: '加载中'
-	});
-
-	let data = {
-		uidType: uidType.value,
-		orderType: orderType.value, // 购买类型:takein=自取,takeout=外卖
-		addressId:orderType.value == 'takeout' ? address.value.id : 0, // 外卖配送地址
-		shopId: store.value.id, // 店铺id
-		mobile: member.value.mobile, // 联系电话
-		gettime: getTime.value, // 取餐时间
-		payType: payType.value, // 支付类型
-		remark: form.value.remark, // 备注
-		productId: [],
-		spec: [],
-		number: [],
-		couponId: coupon.value.id ? coupon.value.id : 0 // 优惠券id
-	};
-
-	cart.value.forEach((item, index) => {
-		data.productId.push(item.id);
-		if(!item.valueStr){
-			item.valueStr = '默认'
-		}
-		data.spec.push(item.valueStr.replace(/,/g, '|'));
-		//data.spec.push(item.valueStr);
-		data.number.push(item.number);
-	});
-
-	let order = await orderSubmit(data);
-	if (!order) {
-		uni.hideLoading();
-		return;
-	}
-	
-	main.DEL_COUPON()
-	if(amount.value == 0){
-		uToast.value.show({
-			message: '订单金额为0自动走余额支付',
-			type: 'success'
-		});
-		balancePay(order);
-		uni.hideLoading()
-		return
-	}
-	
-	
-	if (payType.value == 'weixin') {
-		// 微信支付
-		weixinPay(order);
-	} else if (payType.value == 'yue') {
-		// 余额支付
-		balancePay(order);
-	} else if (payType.value == 'alipay') {
-		// 余额支付
-		aliPay(order);
-	} 
-	uni.hideLoading()
-	return
-}
-
-const balancePay = async(order) => {
-	let from = 'routine'
-	// #ifdef H5
-	from = 'h5'
-	// #endif
-	let pay = await payUnify({
-		uni: order.orderId,
-		from: from,
-		paytype: 'yue'
-	});
-
-	uni.hideLoading();
-	if (!pay) {
-		return;
-	}
-
-	member.value.money -= amount.value
-	main.SET_MEMBER(member.value)
-	try {
-		uni.removeStorageSync('cart');
-	} catch (e) {
-	}
-	
-	// uni.navigateTo({
-	// 	url: '/pages/components/pages/orders/detail?id=' + order.orderId
-	// })
-	uni.reLaunch({
-		url: '/pages/components/pages/orders/detail?id=' + order.orderId
-	})
-	
-}
-const weixinPay = async(order) => {
-	let from = 'routine'
-	// #ifdef H5
-	from = 'h5'
-	if(isWeixin()){
-		from = 'wechat'
-	}
-	
-	// #endif
-	//let that = this;
-	let data = await payUnify({
-		uni: order.orderId,
-		from: from,
-		paytype: 'weixin'
-	});
-	if (!data) {
-		uni.hideLoading();
-		return;
-	}
-	if (data.trade_type == 'MWEB') {
-		// #ifdef H5
-		// 微信外的H5
-		location.href = data.data;
-		// #endif
-	} else if (data.trade_type == 'JSAPI') {
-		// #ifdef MP-WEIXIN
-		uni.requestPayment({
-			provider: 'wxpay',
-			timeStamp: data.data.timeStamp,
-			nonceStr: data.data.nonceStr,
-			package: data.data.package,
-			signType: 'MD5',
-			paySign: data.data.paySign,
-			success: function(res) {
-
-				uni.removeStorageSync('cart');
-				// uni.navigateTo({
-				// 	url: '/pages/components/pages/orders/detail?id=' + order.orderId
-				// })
-				uni.reLaunch({
-					url: '/pages/components/pages/orders/detail?id=' + order.orderId
-				})
-				// uni.switchTab({
-				// 	url: '/pages/order/order'
-				// });
-			},
-			fail: function(err) {
-			
-			}
-		});
-		// #endif
-	} else if (data.trade_type == 'W-JSAPI'){
-		//公众号支付
-		let config = await getWechatConfig();
-		if (config) {
-		  jweixin.config({
-				debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
-		        appId: config.appId, // 必填,公众号的唯一标识
-		        timestamp: config.timestamp, // 必填,生成签名的时间戳
-		        nonceStr: config.nonceStr, // 必填,生成签名的随机串
-		        signature: config.signature, // 必填,签名
-		        jsApiList: [
-		          'chooseWXPay'
-		        ] ,
-			 }
-			);
-		  jweixin.ready(function() {
-		   jweixin.chooseWXPay({
-			timestamp: data.data.timeStamp, 
-			nonceStr: data.data.nonceStr, 
-			package:  data.data.package, 
-			signType: 'MD5', 
-			paySign: data.data.paySign, 
-			success: function(res) {
-			 uni.removeStorageSync('cart');
-			 // uni.navigateTo({
-			 // 	url: '/pages/components/pages/orders/detail?id=' + order.orderId
-			 // })
-			 uni.reLaunch({
-			 	url: '/pages/components/pages/orders/detail?id=' + order.orderId
-			 })
-			 // uni.switchTab({
-			 //  url: '/pages/order/order'
-			 // });
-			},
-			fail: function(err) {
-			}
-		   });
-		  });
-		   jweixin.error(function(res) {
-		
-		  });
-		 } else {
-			
-	  }
-		
-	}
-}
-const aliPay = async(order) => {
-
-	// #ifdef H5
-	
-	uni.navigateTo({
-		url: '/pages/components/pages/pay/alipay?orderId=' + order.orderId + '&token=' + cookie.get('accessToken')
-	})
-	
-	return
-
-	// let data = await payUnify({
-	// 	uni: order.orderId,
-	// 	from: 'h5',
-	// 	paytype: 'alipay'
-	// });
-
- //  // 支付宝支付,这里只要提交表单
-	// let form = data.data
-	// console.log("form:",form)
-	// if(isWeixin()){	
-	// 	uni.setClipboardData({
-	// 		data: form,
-	// 		success: function () {
-	// 			console.log('success');
-	// 		}
-	// 	});
-	// 	uni.showToast({
-	// 		title: '支付宝链接已复制,请普通浏览器打开进行支付~',
-	// 		icon: 'none'
-	// 	})
-	// 	return
-	// }
-	// const div = document.createElement('formdiv');
-	// div.innerHTML = form;
-	// document.body.appendChild(div);      
-	// //document.forms[0].setAttribute('target', ' self');
-	// document.forms[0].submit();
-	//div.remove();
-
-// #endif
-
-
-}
-
-
-
-
-</script>
-
-<style lang="scss" scoped>
-	.container {
-		padding: 20rpx 30rpx;
-	}
-	
-	.img-03 {
-		width: 50px;
-		height: 50rpx;
-	}
-	
-	.hade-left {
-	     background: linear-gradient(-100deg, transparent 20rpx, #ffffff 0) top right;
-	}
-	.hade-right {
-	     background: linear-gradient(100deg, transparent 20rpx, #ffffff 0) top left;
-	}
-
-	.arrow {
-		width: 50rpx;
-		height: 50rpx;
-		position: relative;
-		margin-right: -10rpx;
-	}
-
-	.location {
-		.store-name {
-			font-size: $font-size-lg;
-		}
-
-		.iconfont {
-			font-size: 50rpx;
-			line-height: 100%;
-			color: $color-primary;
-		}
-	}
-
-	.section-1 {
-		margin-bottom: 15rpx;
-
-		.contact {
-			.contact-tip {
-				margin-left: 10rpx;
-				border: 2rpx solid $color-primary;
-				padding: 6rpx 10rpx;
-				color: $color-primary;
-			}
-		}
-	}
-
-	.section-2 {
-		.name-and-props {
-			width: 65%;
-		}
-	}
-
-	.payment {
-		margin-bottom: 30rpx;
-
-		.disabled {
-			color: $text-color-grey;
-		}
-
-		.payment-icon {
-			font-size: 44rpx;
-			margin-right: 10rpx;
-		}
-
-		.checkbox {
-			font-size: 36rpx;
-			margin-left: 10rpx;
-		}
-
-		.checked {
-			color: $color-primary;
-		}
-	}
-
-	.pay-box {
-		box-shadow: 0 0 20rpx rgba(0, 0, 0, 0.1);
-		height: 100rpx;
-	}
-
-	.modal-content {
-		.change-address-btn {
-			line-height: 2;
-			padding: 0 1em;
-		}
-
-		.pay_btn {
-			width: 100%;
-			border-radius: 50rem !important;
-			line-height: 3;
-		}
-	}
-
-	.choice {
-		background-color: $bg-color-grey;
-		border-radius: 38rpx;
-		display: flex;
-		align-items: center;
-		font-size: $font-size-sm;
-		padding: 0 38rpx;
-		color: $text-color-assist;
-
-		.dinein,
-		.takeout {
-			width: 50%;
-			position: relative;
-			display: flex;
-			align-items: center;
-
-			&.active {
-				padding: 14rpx 38rpx;
-				color: #ffffff;
-				background-color: $color-primary;
-				border-radius: 38rpx;
-			}
-		}
-
-		.takeout {
-			margin-left: 20rpx;
-			height: 100%;
-			flex: 1;
-			padding: 14rpx 0;
-		}
-
-		.dinein.active {
-			//margin-left: -38rpx;
-		}
-
-		.takeout.active {
-			//margin-right: -38rpx;
-		}
-	}
-</style>

+ 0 - 119
yshop/yshop-drink-uniapp/pages/components/pages/remark/remark.vue

@@ -1,119 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  left-arrow
-	  @leftClick="$onClickLeft"
-	/>
-	<!-- #endif -->
-	<view class="container w-100 h-100 overflow-hidden">
-		<view class="textarea">
-			<textarea placeholder-class="text-color-assist font-size-base" v-model="remark"
-				class="bg-white w-100 border-box font-size-base remark"
-				:class="{'text-color-danger': remarkLength > 50, 'text-color-assist' : remarkLength <=50}"
-				placeholder="请填写备注信息" focus/>
-			<view class="tips" :class="{'text-color-danger': remarkLength > 50, 'text-color-assist' : remarkLength <=50}">
-				{{ remarkLength }}/50
-			</view>
-		</view>
-		<view class="d-flex font-size-base text-color-assist" style="margin: 40rpx 0;">
-			快捷输入
-		</view>
-		<view class="quick-inputs d-flex flex-wrap justify-content-start">
-			<view class="quick-input" v-for="(item, index) in quickInputs" :key="index" @tap="handleQuickInput(item)">
-				{{ item }}
-			</view>
-		</view>
-		<view class="d-flex just-content-center align-items-center" style="margin-top: 60rpx;">
-			<button type="primary" class="submit-btn font-size-base" @tap="submit">完成</button>
-		</view>
-		<!--轻提示-->
-		<uv-toast ref="uToast"></uv-toast>
-	</view>
-</template>
-
-<script setup>
-import {
-  ref,
-  computed
-} from 'vue'
-import { onLoad} from '@dcloudio/uni-app'
-
-const remark = ref('')
-const quickInputs = ref( ['请放门把手上', '请放门口', '请放前台桌上', '如地址封闭管理,请电话与我联系'])
-const uToast = ref()
-	
-onLoad((opt) => {
-	remark.value = opt.remark
-})	
-
-const remarkLength = computed(() => { 
-	return remark.value.length
-})
-const isDanger = computed(() => { 
-	return remark.value.length > 50
-})
-
-const handleQuickInput = (item) => {
-	remark.value = remark.value.concat(" ", item)
-}
-const submit = () => {
-	if (remark.value.length > 50) {
-		uToast.value.show({
-			message: '不能超过50个字符',
-			type: 'error'
-		});
-		return
-	}
-	uni.navigateTo({
-		url: "/pages/components/pages/pay/pay?remark=" + remark.value
-	})
-}
-	
-
-</script>
-
-<style lang="scss" scoped>
-	.container {
-		padding: 30rpx 40rpx;
-		
-		.textarea {
-			position: relative;
-			
-			.remark {
-				border-radius: 8rpx;
-				padding: 30rpx 40rpx;
-				height: 320rpx;
-				color: $font-size-base;
-			}
-			
-			.tips {
-				position: absolute;
-				bottom: 30rpx;
-				right: 40rpx;
-			}
-		}
-		
-		.quick-inputs {
-			padding-right: 20rpx;
-			
-			.quick-input {
-				background-color: #FFFFFF;
-				border: 2rpx solid $color-primary;
-				color: $color-primary;
-				font-size: $font-size-base;
-				padding: 16rpx 26rpx;
-				margin-right: 20rpx;
-				margin-bottom: 20rpx;
-			}
-		}
-		
-		.submit-btn {
-			width: 90%;
-			height: 80rpx;
-			border-radius: 40rpx;
-			line-height: 80rpx;
-		}
-	}
-</style>

+ 0 - 183
yshop/yshop-drink-uniapp/pages/components/pages/scan/scan.vue

@@ -1,183 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :safeAreaInsetTop="true"
-	  height="0"
-	  bgColor="transparent"
-	  @leftClick="$onClickLeft"
-	/>
-	<!-- #endif -->
-	<view>
-		<view class="p-5">
-			<view class="text-center">
-				<image :src="shopInfo.image" style="width: 150rpx;height: 150rpx;" class="rounded-circle"></image>
-			</view>
-			<view class="text-center mt-2 h4">{{ shopInfo.name }}</view>
-			<view class="text-center text-warning font-md mt-2">{{ deskNumber }}桌</view>
-			<view class="text-center mt-2 text-color-assist font-size-sm" v-if="isEmpty">请选择就餐人数</view>
-			<view class="text-center font mt-3 flex flex-wrap justify-center" v-if="isEmpty">
-				<span v-for="(item,index) in 12" :key="index" class="penple" :class="{'checked':(index + 1) == peoples}"  @click="selectPeople(index + 1)">
-					<span class="penple-num">{{ index + 1}}</span>
-				</span>
-			</view>
-			<view class="mt-5" v-if="isEmpty"><uv-button color="#059825" :disabled="disabled" text="确定" @click="submit"></uv-button></view>
-			<view class="mt-5" v-else><uv-button color="#059825"  text="已经开台,请直接点餐" @click="submit"></uv-button></view>
-			<uv-toast ref="toast"></uv-toast>
-		</view>
-	</view>
-</template>
-
-<script setup>
-import {
-  ref
-} from 'vue'
-import {
-  shopGet,
-  openDesk
-} from '@/api/market'
-import { onLoad,onShow } from '@dcloudio/uni-app'
-import { urlDecode,parseQuery,isWeixin} from '@/utils/util'
-import { useMainStore } from '@/store/store'
-import cookie from '@/utils/cookie'
-
-
-const main = useMainStore()
-
-const peoples = ref(0)
-//const isChecked = ref(0)
-const deskNumber = ref('')
-const shopInfo = ref({})
-const desk = ref({})
-const toast = ref()
-const disabled = ref(false)
-const shopId = ref(0)
-const deskId = ref(0)
-const isEmpty = ref(true)
-
-onLoad((option) => {
-	//为了方便演示,这里用本地缓存
-	// #ifdef H5
-	if(isWeixin()){
-		if(parseQuery().scene){
-			let params = urlDecode(decodeURIComponent(option.scene))
-			cookie.set('params', params)
-		}else if(option.scene){
-			let params = urlDecode(decodeURIComponent(option.scene))
-			cookie.set('params', params)
-		}
-		
-		let newParams = cookie.get('params')
-		if(newParams){
-			deskNumber.value = newParams.number
-			desk.value = newParams
-			main.SET_DESK(newParams)
-			main.SET_ORDER_TYPE('desk')
-			shopId.value = newParams.shopId
-			deskId.value = newParams.id
-			getShop(newParams.shopId,newParams.id)
-		}
-	 }
-	// #endif
-	
-	// #ifdef MP-WEIXIN
-	
-	// #endif
-})
-
-onShow((option) => {
-	
-	// #ifdef MP-WEIXIN
-	const mypage = getCurrentPages()
-	console.log('mypage:',mypage[mypage.length - 1].options.scene)
-	let params = urlDecode(decodeURIComponent(mypage[mypage.length - 1].options.scene))
-	console.log('params:',params)
-	if(params){
-		deskNumber.value = params.number
-		desk.value = params
-		main.SET_DESK(params)
-		main.SET_ORDER_TYPE('desk')
-		shopId.value = main.desk.shopId
-		deskId.value = main.desk.id
-		getShop(main.desk.shopId,main.desk.id)
-		return
-	}
-	
-	if(main.isScan){
-		deskNumber.value = main.desk.number
-		desk.value = main.desk
-		shopId.value = main.desk.shopId
-		deskId.value = main.desk.id
-		getShop(main.desk.shopId,main.desk.id)
-		return
-	}
-	
-	// #endif
-	
-})
-
-const selectPeople = (num) => {
-	peoples.value = num
-	desk.value.people = num
-}
-
-const getShop = async(shopId,deskId) => {
-	uni.removeStorageSync('cart');
-	if(!main.isLogin) {
-		uni.navigateTo({url: '/pages/components/pages/login/login'})
-		return
-	}
-	//获取门店
-	let shop = await shopGet({
-		shopId: shopId,
-		deskId: deskId
-	})
-	
-	shopInfo.value = shop
-	main.SET_STORE(shop)
-	
-	if(!shop.isEmpty){
-		let myDesk = main.desk
-		myDesk.people = shop.deskPeople
-		myDesk.orderId = shop.deskOrderId
-		main.SET_DESK(myDesk)
-		isEmpty.value = false
-	}
-	
-}
-
-//开台
-const submit = async() => {
-	if(isEmpty.value){
-		if(peoples.value == 0) {
-			uni.showToast({
-			  title: '请选择就餐人数',
-			  duration: 2000,
-			  icon: 'error'
-			});
-			
-			return
-		}
-		await openDesk({shopId: shopId.value,deskId: deskId.value,people: peoples.value})
-	}
-	cookie.remove('params')
-	
-	uni.switchTab({
-		url: '/pages/menu/menu'
-	}) 
-}
-	
-</script>
-
-<style lang="scss" scoped>
-	.checked {
-		background-color: #DA5650 !important;color: #ffffff;
-	}
-	.penple {
-		padding: 40rpx;background-color: #ffffff;margin: 10rpx 10rpx;
-	}
-	.penple-num {
-		padding: 10rpx;display: block; width:30rpx
-	}
-
-</style>

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 126
yshop/yshop-drink-uniapp/pages/components/pages/scoreproduct/confirm.vue


+ 0 - 389
yshop/yshop-drink-uniapp/pages/components/pages/scoreproduct/detail.vue

@@ -1,389 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  left-arrow
-	  @leftClick="$onClickLeft"
-	/>
-	<!-- #endif -->
-	<view>
-		<uv-swiper 
-			:list="list" 
-			@change="e => current2 = e.current" 
-			height="90vw"
-			indicatorStyle="right: 20px">
-			<template v-slot:indicator>
-				<view class="indicator-num">
-					<text class="indicator-num__text">{{ current2 + 1 }}/{{ list.length }}</text>
-				</view>
-			</template>
-		</uv-swiper>
-		<!-- 信息栏目 -->
-		<view class="info-column">
-			<view class="info-price-wrapper">
-				<view class="price-box"><text style="font-size: 40rpx;">¥</text>{{product.otPrice}}</view>
-				<view class="volume">
-					<uni-icons type="fire-filled" size="13" color="#FF162E" style="margin-right: 5rpx;"></uni-icons>
-					{{product.sales}}人已兑换
-				</view>
-			</view>
-			<view class="info-price-wrapper">
-				<view class="label">
-					<label class="label1">
-						<uni-icons type="hand-up-filled" size="13" color="#fff" style="margin-right: 5rpx;"></uni-icons>
-						超值兑
-					</label>
-					<label class="label2">商品</label>
-				</view>
-			</view>
-			<view class="line20"></view>
-			<view class="info-title">
-				{{product.title}}
-			</view>
-			<view class="commodity-box">	
-				<view class="service-box">
-					<view><uv-icon name="checkmark-circle" color="#333" size="12" label="限时兑换"></uv-icon></view>
-					<view class="ml-2"><uv-icon name="checkmark-circle" color="#333" size="12"label="全国包邮"></uv-icon></view>
-					<view class="ml-2"><uv-icon name="checkmark-circle" color="#333" size="12" label="7天无理由退换"></uv-icon></view>
-				</view>
-			</view>
-		</view>
-		<view class="service-wrap" @click="change">
-			<view class="emption">
-				<view class="emption-fh">发货</view>
-				<view class="emption-zp">品牌仓库 丨 平台承担</view>
-			</view>
-			<view class="emption">
-				<view class="emption-fh">库存</view>
-				<view class="emption-zp">仅剩:<text class="text">{{product.stock}}件</text><text class="text2">每人限兑一件</text></view>
-			</view>
-		</view>
-		<view class="graphic">
-			<view class="graphic-header">
-				图文详情
-			</view>
-			<view class="detail-desc">
-				<rich-text :nodes="product.desc"></rich-text>
-			</view>
-		</view>
-		<view class="price-info">
-			<view class="title">价格说明</view>
-			<view>
-				1、关于价格说明:划线价格:指商品的专柜价、吊牌价、正品零售价、厂商指导价或该商品的曾经展示过的销售价,并非原价,仅供参考。
-			</view>
-			<view>
-				2、未划线价格:指商品的实时标价,不因表述的差异改变性质。具体成交价格根据商品参加活动,或使用优惠券、积分、补贴、红包等发生变化,最终以订单结算页价格为准。
-			</view>
-		</view>
-		<view style="height: 100rpx;"></view>
-		<uni-goods-nav :options="options" :buttonGroup="buttonGroup"  @click="onClick" @buttonClick="buttonClick"  class="goods-nav"/>
-		<uv-back-top :scroll-top="scrollTop"></uv-back-top>
-	</view>
-</template>
-
-<script setup>
-import {
-  ref,
-  computed,
-  getCurrentInstance
-} from 'vue'
-import { onReachBottom,onLoad,onPullDownRefresh,onPageScroll} from '@dcloudio/uni-app'
-import {
-  scoreShopExchange,
-  scoreShopDetail
-} from '@/api/score'
-import cookie from '@/utils/cookie'
-const { proxy } = getCurrentInstance();
-const product = ref({})
-const id = ref(0)
-const buttonText = ref("商品详情")
-const options = ref([
-	{
-		icon: 'home',
-		text: '首页'
-	}
-])
-const buttonGroup = ref([
-	{
-	  text: '¥000',
-	  backgroundColor: 'linear-gradient(90deg, #FFCD1E, #FF8A18)',
-	  color: '#fff',
-	  price:'直接购买'
-	},
-	{
-	  text: '超值兑>',
-	  backgroundColor: '#ff0000',
-	  color: '#fff',
-	  price:'00积分+00元'
-	}
-])
-const isBackTop = ref(false)
-const list = ref([
-])
-const current2 = ref(0)
-const scrollTop = ref(0)
-
-onPullDownRefresh(() => {
-	getDetail(id.value);
-})
-
-onLoad((options) => {
-   id.value = options.id;
-   getDetail(options.id);
-})
-
-
-onPageScroll((e) => {
-	scrollTop.value = e.scrollTop;
-})
-
-const onClick = () => {
-	uni.switchTab({
-		url: '/pages/index/index'
-	})
-}
-
-const buttonClick = (e) => {
-	//0-原价 1-积分兑换
-	confirm(e.index)
-}
-
-const confirm = (index) => {
-	cookie.set('score_product',product.value)
-	cookie.set('is_origin',index)
-	uni.navigateTo({
-		url: '/pages/components/pages/scoreproduct/confirm'
-	})
-}
-
-// 获取商品详情
-const  getDetail = async(id, flash_id) => {
-	let data = await scoreShopDetail({
-		id: id
-	});
-	uni.stopPullDownRefresh();
-	list.value = data.images
-	product.value = data
-	buttonGroup.value[0].text = '¥' + data.otPrice
-	buttonGroup.value[1].price = data.score + '积分'+ data.price +'元'
-	setGoodsDetail(product.value)
-}
-
-/**
- * 处理商品详情逻辑
- * @param detail
- */
-const setGoodsDetail = (detail) => {
-  product.value.desc = detail.desc.replace(
-      /<img /g,
-      "<img style='width:100%;' "
-  );
-}
-
-
-	
-</script>
-
-<style lang="scss">
-	page{
-		padding-bottom: 55px;
-		font-size: $font-size-sm;
-	}
-	@mixin flex($direction: row) {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: $direction;
-	}
-	.indicator {
-		@include flex(row);
-		justify-content: center;
-		&__dot {
-			height: 6px;
-			width: 6px;
-			border-radius: 100px;
-			background-color: rgba(255, 255, 255, 0.35);
-			margin: 0 5px;
-			transition: background-color 0.3s;
-			&--active {
-				background-color: #ffffff;
-			}
-		}
-	}
-	.indicator-num {
-		padding: 2px 0;
-		background-color: rgba(0, 0, 0, 0.35);
-		border-radius: 100px;
-		width: 35px;
-		@include flex;
-		justify-content: center;
-		&__text {
-			color: #FFFFFF;
-			font-size: 12px;
-		}
-	}
-	.goods-nav{
-		width: 100%;
-		position: fixed;
-		left: 0;
-		bottom: 0;
-		z-index: 10;
-	}
-	.info-column{
-		padding: 20rpx 20rpx 0;
-		background-color: $uni-text-color-inverse;
-		.info-price-wrapper{
-			display: flex;
-			align-items: center;
-			justify-content: space-between;
-			.price-box{
-				color: $theme-color;
-				font-weight: bold;
-				font-size: 48rpx;
-			}
-			.volume{
-				font-size: $font-size-sm;
-				color: $text-color-grey;
-			}
-			.label{
-				margin: 20rpx 0;
-				label{
-					padding: 2rpx 10rpx;
-					font-size: $font-size-sm;
-					display: inline-block;
-					border-radius: 5rpx;					
-				}
-				.label1{
-					color: $uni-text-color-inverse;
-					background-color: $theme-color;
-					margin-right: 15rpx;
-				}
-				.label2{
-					color: $text-color-grey;
-					border: 1rpx solid $text-color-grey;
-				}
-			}
-			.info-price-right{
-				display: flex;
-				align-items: center;
-			}
-		}
-		.line20{
-			width: 100vw;
-			background-color: $bg-color;
-			height: 10px;
-			margin-left: -20rpx;
-		}
-		.info-title{
-			margin-top: 20rpx;
-			font-weight: bold;
-			font-size: $font-size-lg;
-		}
-		.commodity-box{
-			padding: 15rpx 0;
-			display: flex;
-			margin-top: 20rpx;
-			align-items: center;
-			.service-box{
-				display: flex;
-				position: relative;
-				margin-left: 40rpx;
-				&::before{
-					content: "";
-					width: 1px;
-					height: 15px;
-					background-color:$text-color-disable;
-					position: absolute;
-					left: -15rpx;
-				}
-			}
-		}
-	}
-	
-	.service-wrap{
-		width: 100%;
-		background-color: $uni-text-color-inverse;
-		margin-bottom: 20rpx;
-		font-size: $font-size-sm;
-		.emption{
-			width: 100%;
-			height: 50px;
-			display: flex;
-			align-items: center;
-			position: relative;
-			justify-content: space-between;
-			.emption-arrow{
-				position: absolute;
-				right: 20rpx;
-			}
-			.emption-fh{
-				width: 110rpx;
-				text-align: center;
-				color: $text-color-grey;
-			}
-			.emption-zp{
-				flex: 1;
-				height: 100%;
-				line-height: 50px;
-				border-bottom: 1rpx solid #e5e5e5;
-				.text{
-					color: $theme-color;
-				}
-				.text2{
-					color: #fff;
-					background-color: $theme-color;
-					padding: 0 15rpx;
-					border-radius: 5rpx;
-					margin: 0 20rpx;
-				}
-			}
-		}
-	}
-	
-	.graphic{
-		background-color: #fff;
-		.graphic-header{
-			height: 80rpx;
-			line-height: 80rpx;
-			font-weight: bold;
-			font-size: 35rpx;
-			padding: 20rpx;
-			position: relative;
-			display: flex;
-			align-items: center;
-			padding-left: 50rpx;
-			&:before{
-				content: "";
-				width: 7rpx;
-				height: 50%;
-				position: absolute;
-				left: 20rpx;
-				background-color: $theme-color;
-				border-radius: 5rpx;
-			}
-		}
-	}
-	
-	.price-info{
-		background: #f7f7f7;
-		font-size: 24rpx;
-		color:#a1a1a1;
-		padding: 30rpx;
-		line-height: 1.7;
-		.title{
-			font-size: 26rpx;
-			font-weight: bold;
-			color: #333;
-		}
-	}
-	
-	/*  详情 */
-	.detail-desc {
-		background: #fff;
-		margin-top: 16upx;
-		margin-bottom: 20rpx;
-		padding: 20rpx;
-	}
-	
-</style>

+ 0 - 338
yshop/yshop-drink-uniapp/pages/components/pages/scoreproduct/list.vue

@@ -1,338 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  left-arrow
-	  @leftClick="$onClickLeft"
-	/>
-	<!-- #endif -->
-	<view class="content">
-		<view class="banner-box">
-			<swiper :autoplay="true" :interval="2000" circular>
-				<swiper-item v-for="(item,index) in adList" :key="index">
-					<view class="swiper-item">
-						<image :src="item.image" mode="widthFix"></image>
-					</view>
-				</swiper-item>
-			</swiper>
-		</view>
-		<view class="account">
-			<view class="info" @click="go('user-center')">
-				<image :src="member.avatar ? member.avatar : '/static/images/mine/default.png'" mode="widthFix"></image>
-				<view class="name">
-					{{ member.nickname }}
-				</view>
-				<view class="sum" @click="goOrders">
-					<text>{{ member.integral }}</text>
-					积分
-					<uv-icon name="arrow-right" size="12" color="#ccc" style="margin-right:2px;" ></uv-icon>
-				</view>
-			</view>
-		</view>
-		<view class="list-wrap">
-			<view class="tab-wrap">
-				<uv-tabs :list="catList" @click="clickCate" activeStyle="color:#FF162E;font-weight:bold" lineColor="color:#FF162E"></uv-tabs>		
-			</view>	
-			<scroll-view scroll-y class="sv" :style="{height:scrollHeight+'px'}" :scroll-top="scrollTop" lower-threshold="20" @scroll="scroll" @scrolltolower="reachBottom">
-				<view class="product-box">
-					<view class="commodity" v-if="goodList.length > 0">
-						<view class="product" @click="goDetail(item.id)" v-for="(item,index) in goodList" :key="index">
-							<view class="product-img">
-								<image :src="item.image" mode="widthFix"></image>
-							</view>
-							<view class="product-info">
-								<view class="product-name line2">{{item.title}}</view>
-								<view class="label">
-									<label class="label1">
-										<uni-icons type="hand-up-filled" size="13" color="#fff" style="margin-right: 5rpx;"></uni-icons>
-										超值兑
-									</label>
-									<label class="label2">商品</label>
-								</view>
-								<view class="product-price">
-									<label>{{item.score}}积分 </label>+{{item.price}}元
-								</view>
-								<view class="product-purchase">
-									<uni-icons type="fire-filled" size="13" color="#FF162E" style="margin-right: 5rpx;"></uni-icons>
-									{{item.sales}}人已兑换
-								</view>
-							</view>
-						</view>
-						<uv-load-more  :status="listStatus" />
-					</view>
-					<uv-empty text="暂无数据" v-else  margin-top="100" mode="list"></uv-empty>
-				</view>
-			</scroll-view>
-		</view>	
-	</view>
-</template>
-
-<script setup>
-import {
-  ref,
-  computed,
-  getCurrentInstance
-} from 'vue'
-import { onReachBottom,onShow,onLoad,onReady} from '@dcloudio/uni-app'
-import {
-  scoreAds,
-  scoreCates,
-  scoreShopIndex
-} from '@/api/score'
-import { useMainStore } from '@/store/store'
-import { storeToRefs } from 'pinia'
-const main = useMainStore()
-const { member,isLogin } = storeToRefs(main)
-
-const catList = ref([{id:0,name:'全部'}])
-const tabIndex = ref(0)
-const dataStatus = ref('loading')
-const noticeOrders = ref(['1111','2222'])
-const scrollHeight = ref(0)
-const pH = ref(0)
-const scrollTop = ref(-1)
-const adList = ref([])
-const goodList = ref([])
-const page = ref(1)
-const pageSize = ref(10)
-const lastPage = ref(false)
-const listStatus = ref('loadmore')
-const cateId = ref(0)
-
-
-onReady(()=>{
-	uni.getSystemInfo({ 
-		success(res) {
-			pH.value = res.windowHeight 
-			let scrollH = uni.createSelectorQuery().select(".sv")
-			scrollH.boundingClientRect(data=>{
-				let pH0 = pH.value
-				scrollHeight.value = pH0 - data.top - 5  
-			}).exec()
-		}
-	})
-})
-
-const reachBottom = () => {
-	if(lastPage.value || listStatus.value == 'loading') return ;
-	if (!lastPage.value) {
-		listStatus.value = 'loading';
-		setTimeout(() => {
-			listStatus.value = 'loadmore'
-			getList(true,++page.value)
-		}, 500)	
-	}
-}
-
-const clickCate = (item) => {
-	cateId.value = item.id
-	page.value = 1
-	lastPage.value= false
-	getList()
-}
-
-onLoad(() => {
-	if(!isLogin.value) {
-		uni.navigateTo({url: '/pages/components/pages/login/login'})
-	}
-	getAds()
-	getCate()
-	getList()
-})
-
-const goDetail = (item) => {
-	uni.navigateTo({
-		url: '/pages/components/pages/scoreproduct/detail?id=' + item
-	})
-}
-
-const goOrders = () => {
-	uni.navigateTo({
-		url: '/pages/components/pages/scoreproduct/order'
-	})
-}
-
-const getAds = async() => {
-	adList.value = await scoreAds()
-}
-
-const getCate = async() => {
-	let data = await scoreCates()
-	catList.value = catList.value.concat(data)
-}
-
-const getList  = async(isNextPage) => {
-	let data = await scoreShopIndex({
-		page: page.value,
-		limit: pageSize.value,
-		cateId: cateId.value,
-	});
-	
-	if(data) {
-		// 不够一页
-		if (data.length < 10) {
-			listStatus.value = 'nomore'
-		}
-		// 最后一页
-		if(data.length == 0) {
-			lastPage.value = true
-		} 
-		// 第二页开始
-		if(isNextPage) {
-			goodList.value = goodList.value.concat(data)
-			return 
-		}
-		goodList.value = data
-	}
-}
-
-
-
- </script>
-
-<style lang="scss" scoped>
-	.content {
-		display: flex;
-		flex-direction: column;
-		align-items: center;
-		justify-content: center;
-	}
-	.banner-box{
-		width: 100%;
-		height: 260rpx;
-		swiper{
-			width: 100%;
-			height: 100%;
-		}
-		image{
-			width: 100vw;
-			height: 100%;
-		}
-	}
-	.account{
-		width: 95vw;
-		margin: 0 auto;
-		border-radius: 20rpx;
-		padding: 20rpx;
-		background: rgba(255, 255, 255, 1);
-		box-shadow: 0 -2px 8px 0 rgba(0, 0, 0, .1);
-		position: relative;
-		top: -30rpx;
-		box-sizing: border-box;
-		.info{
-			display: flex;
-			align-items: center;
-			justify-content: space-between;
-			//padding-bottom: 30rpx;
-			border-bottom: 1rpx solid #EDEDED;
-			image{
-				width: 88rpx;
-				height: 88rpx;
-				border-radius: 88rpx;
-			}
-			.name{
-				flex: 1;
-				margin: 0 20rpx;
-			}
-			.sum{
-				display: flex;
-				align-items: center;
-				font-weight: bold;
-				text{
-					color: $theme-color;
-					font-size: 38rpx;
-					margin-right: 10rpx;
-				}
-			}
-			.img{
-				width: 60rpx;
-				height: 60rpx;
-				background-color: rgba(207, 25, 42,.3);
-				border-radius: 60rpx;
-			}
-		}
-	}
-	
-	.list-wrap{
-		width: 100%;
-		display: flex;
-		flex-direction: column;
-	}
-	.tab-wrap{
-		position: sticky;
-		top: 0;
-		z-index: 10;
-		background: #fff;
-		padding-bottom: 10rpx;
-	}	
-	
-	.product-box{
-		width: 100%;
-		position: relative;
-		box-sizing: border-box;
-		.commodity{
-			width: 100%;
-			margin: 0 auto;
-			padding: 20rpx;
-			box-sizing: border-box;
-			display: flex;
-			justify-content: space-between;
-			flex-wrap: wrap;
-		}
-	}
-	.product{
-		width: 49.2%;
-		margin-bottom: 15rpx;
-		background: #fff;
-		border-radius: 5rpx;
-		overflow: hidden;
-		.product-img{
-			width: 100%;
-			height: 46.6vw;	
-			border-radius: 5rpx;
-			overflow: hidden;
-			image{
-				width: 100%;
-				height: auto;
-			}
-		}
-		.product-info{
-			padding: 20rpx;
-			.product-name{
-				font-size: 28rpx;
-			}
-			.label{
-				margin: 20rpx 0;
-				label{
-					padding: 2rpx 10rpx;
-					font-size: $font-size-sm;
-					display: inline-block;
-					border-radius: 5rpx;					
-				}
-				.label1{
-					color: $uni-text-color-inverse;
-					background-color: $theme-color;
-					margin-right: 15rpx;
-				}
-				.label2{
-					color: $text-color-grey;
-					border: 1rpx solid $text-color-grey;
-				}
-			}
-			.product-price{
-				color: $theme-color;
-				font-size: $font-size-sm;
-				label{
-					font-weight: bold;
-					font-size: $font-size-lg;
-				}
-			}
-			.product-purchase{
-				margin-top: 20rpx;
-				color: $text-color-grey;
-				font-size: $font-size-sm;
-			}
-		}
-	}
-</style>

+ 0 - 182
yshop/yshop-drink-uniapp/pages/components/pages/scoreproduct/order.vue

@@ -1,182 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  left-arrow
-	  @leftClick="$onClickLeft"
-	/>
-	<!-- #endif -->
-	<view class="container">
-		<view class="bg-white">
-			<uv-tabs :list="tabList" :current="current" @change="change" keyName="name" :scrollable="false"></uv-tabs>
-		</view>
-		<view class="orders-list d-flex flex-column w-100" style="padding: 20rpx; padding-bottom: 0;">
-			<view class="order-item" v-for="(item, index) in orders" :key="index" style="margin-bottom: 30rpx;">
-				<list-cell :hover="false">
-					<view class="w-100 d-flex align-items-center">
-						<view class="flex-fill d-flex flex-column">
-							<view class="font-size-sm text-color-assist">订单编号:{{ item.orderId }}</view>
-						</view>
-						<view class="font-size-lg text-color-primary">
-							{{ item.statusText }}
-						</view>
-					</view>
-				</list-cell>
-				<list-cell :hover="false" last>
-					<view class="w-100 d-flex flex-column">
-						<view class="flex ">
-							<image :src="item.product.image" mode="aspectFill" class="image"></image>
-							<view>
-								<view class="w-100 text-truncate font-size-lg text-color-base" style="margin-bottom: 20rpx;">
-									{{ item.product.title }}
-								</view>
-								<view class="font-size-sm mt-2" v-if="item.isOrigin == 1">×{{ item.number }}  {{ item.product.score }}积分 + {{ item.product.price }}元</view>
-								<view class="font-size-sm mt-2" v-else>×{{ item.number }}  {{ item.product.otPrice }}元</view>
-							</view>
-						</view>
-						<view class="d-flex justify-content-between align-items-center mt-3" >
-							<view class="font-size-sm text-color-assist">
-								{{formatDateTime(item.createTime) }}
-							</view>
-							<view class="d-flex font-size-sm text-color-base align-items-center">
-								<view style="margin-right: 10rpx;">共{{item.number }}件商品,消耗</view>
-								<view class="font-size-lg" v-if="item.isOrigin == 1"> {{ item.totalScore }}积分 + {{ item.totalPrice }}元</view>
-								<view class="font-size-lg" v-else>{{ item.totalPrice }}元</view>
-							</view>
-						</view>
-						<view class="d-flex align-items-center justify-content-end mt-3">
-							<view>
-								<button v-if="item.havePaid > 0 && item.haveDelivered == 1 && item.haveReceived == 0"
-									class="left-margin" type="primary" plain size="mini"
-									@tap.stop="receive(item)">确认收到货</button>
-								<button class="left-margin"  plain size="mini" @tap="detail(item.id)">订单详情</button>
-							</view>
-						</view>
-					</view>
-				</list-cell>
-			</view>
-		</view>
-		<uv-empty v-if="orders.length == 0" mode="order"></uv-empty>
-	</view>
-	<uv-toast ref="uToast" />
-</template>
-
-<script setup>
-import {
-  ref,
-  computed,
-  getCurrentInstance
-} from 'vue'
-import { useMainStore } from '@/store/store'
-import { storeToRefs } from 'pinia'
-import { onLoad,onPullDownRefresh,onReachBottom} from '@dcloudio/uni-app'
-import { formatDateTime,kmUnit } from '@/utils/util'
-import {
-  scoreShopOrder,
-  scoreShopReceive
-} from '@/api/score'
-const main = useMainStore()
-const { proxy } = getCurrentInstance();
-const { isLogin } = storeToRefs(main)
-const title = ref('我的积分订单')
-
-const type = ref(-1)
-const page = ref(1)
-const pageSize = ref(10)
-const orders = ref([])
-const tabList = ref([{
-			type: -1,
-			name: '全部',
-		},
-		{
-			type: 3,
-			name: '待支付',
-		},{
-			type: 0,
-			name: '待发货',
-		}, {
-			type: 1,
-			name: '待收货'
-		}, {
-			type: 2,
-			name: '已完成'
-		}]
-)
-onLoad(() => {
-	if (!isLogin.value) {
-		uni.navigateTo({
-			url: '/pages/components/pages/login/login'
-		})
-	}
-	getOrders(false)
-})
-
-onReachBottom(() => {
-	getOrders(false)
-})
-onPullDownRefresh(() => {
-	 getOrders(false)
-})
-
-// tab栏切换
-const change = (e) => {
-	type.value = e.type
-	getOrders(true)
-}
-
-const  getOrders = async(isRefresh = false) => {
-	uni.showLoading({
-		title: '加载中'
-	})
-	if (isRefresh) {
-		orders.value = []
-		page.value = 1
-	}
-	let data = await scoreShopOrder({
-		page: page.value,
-		pagesize: pageSize.value,
-		type: type.value
-	});
-	if (data.length > 0) {
-		orders.value = orders.value.concat(data)
-		page.value += 1
-	}
-	uni.stopPullDownRefresh();
-	uni.hideLoading()
-}
-const detail = (id) => {
-	uni.navigateTo({
-		url: '/pages/components/pages/scoreproduct/orderDetail?id=' + id
-	})
-}
-// 确认收到货
-const  receive = async(order) => {
-	let data = await scoreShopReceive({
-		id: order.id
-	});
-	if (data) {
-		proxy.$refs.uToast.show({
-			message: '已签收',
-			type: 'success',
-		})
-		setTimeout(function() {
-			getOrders(true)
-		}, 1000);
-	}
-}
-
-
-</script>
-
-<style lang="scss" scoped>
-	.left-margin {
-		margin-left: 10rpx;
-	}
-	.image {
-		width: 160rpx;
-		height: 160rpx;
-		margin-right: 30rpx;
-		border-radius: 8rpx;
-	}
-</style>

+ 0 - 288
yshop/yshop-drink-uniapp/pages/components/pages/scoreproduct/orderDetail.vue

@@ -1,288 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  left-arrow
-	  @leftClick="$onClickLeft"
-	/>
-	<!-- #endif -->
-	<view class="container" style="padding:20rpx;">
-		<view style="padding-bottom: 100rpx;">
-			<view class="bg-white">
-				<view class="section">
-					
-					<list-cell :hover="false" padding="50rpx 30rpx">
-						<view class="w-100 d-flex flex-column position-relative" style="margin-bottom: -40rpx;">
-							<view class="w-100 d-flex align-items-center mb-40">
-								<view class="d-flex flex-column w-60 overflow-hidden">
-									<image class="product-image" :src="order.product.image" mode="aspectFill"></image>
-								</view>
-								<view class="d-flex flex-column w-60 overflow-hidden">
-									<view class="font-size-lg text-color-base mb-10 text-truncate">{{ order.product.title }}</view>
-								</view>
-								<view class="d-flex w-40 align-items-center justify-content-between pl-30">
-									<view class="font-size-base text-color-base">x{{ order.number }}</view>
-							<!-- 		<view class="font-size-base text-color-base font-weight-bold">{{ order.score }}积分 + {{ order.price }}元</view> -->
-								</view>
-							</view>
-						</view>
-					</list-cell>
-				</view>
-				<view class="section">
-					<list-cell :hover="false" padding="50rpx 30rpx">
-						<view class="w-100 d-flex flex-column">
-				
-							<view class="pay-cell">
-								<view>消耗</view>
-								<view class="font-weight-bold" v-if="order.isOrigin == 1">{{ order.totalScore }}积分 + {{ order.totalPrice }}元</view>
-								<view class="font-weight-bold" v-else>{{ order.totalPrice }}元</view>
-							</view>
-						</view>
-					</list-cell>
-				</view>
-				<view class="section">
-					<list-cell :hover="false" padding="50rpx 30rpx">
-						<view class="w-100 d-flex flex-column">
-							<view class="pay-cell">
-								<view>订单状态</view>
-								<view class="font-weight-bold">{{ order.statusText }}</view>
-							</view>
-							<view class="pay-cell">
-								<view>下单时间</view>
-								<view class="font-weight-bold">{{ formatDateTime(order.createTime) }}</view>
-							</view>
-							<view class="pay-cell">
-								<view>订单号</view>
-								<view class="font-weight-bold">{{ order.orderId }}</view>
-							</view>
-						</view>
-					</list-cell>
-					
-					<list-cell :hover="false">
-						<view class="w-100 d-flex align-items-center">
-							<view class="pay-cell">
-								<view>收货地址</view>
-							</view>
-							<view class="d-flex flex-column">
-								<view class="w-100 d-flex align-items-center overflow-hidden">
-									<view class="font-size-sm text-color-assist">{{ order.customerAddress + ' ' + order.customerName + ' ' + order.customerPhone }}</view>
-								</view> 
-							</view>
-						</view> 
-					</list-cell>
-					
-					<list-cell :hover="false" padding="50rpx 30rpx" v-if="order.expressCompany">
-						<view class="w-100 d-flex flex-column">
-							<view class="pay-cell">
-								<view>快递公司</view>
-								<view class="font-weight-bold">{{order.expressCompany }}</view>
-							</view>
-							<view class="pay-cell">
-								<view>快递单号</view>
-								<view class="font-weight-bold">{{order.expressNumber }}<text class="copy" @click="copy()">复制</text></view>
-								<!-- <text class="copy" @click="copy()">复制</text> -->
-							</view>
-						</view>
-					</list-cell>
-					
-
-					<uv-steps current="0" direction="column" dot>
-						<uv-steps-item :title="activity.acceptStation" :desc="activity.acceptTime" :key="index" v-for="(activity, index) in expresssn">
-						</uv-steps-item>
-					</uv-steps>
-				</view>
-			</view>
-		</view>
-		<uv-toast ref="uToast" />
-	</view>
-	<view class="fixed-bottom flex justify-end bg-white p-2" v-if="order.havePaid > 0">
-		<view class="mr-1" v-if="order.haveDelivered ==0 && order.haveReceived == 0"><uv-button type="success"  :plain="true" size="small" text="确认收货" @click="receive(order)"></uv-button></view>
-		<view class="mr-1"><uv-button type="error" :plain="true" size="small" text="查看物流" @click="getExpresssn()"></uv-button></view>
-	</view>
-</template>
-
-<script setup>
-import {
-  ref,
-  computed,
-  getCurrentInstance
-} from 'vue'
-import { useMainStore } from '@/store/store'
-import { storeToRefs } from 'pinia'
-import { onLoad,onPullDownRefresh,onReachBottom} from '@dcloudio/uni-app'
-import { formatDateTime,kmUnit } from '@/utils/util'
-import {
-  scoreShopOrderDetail,
-  scoreShopReceive,
-  getLogistic
-} from '@/api/score'
-const main = useMainStore()
-const { proxy } = getCurrentInstance();
-const { isLogin } = storeToRefs(main)
-const title = ref('积分订详情')
-
-const order = ref({
-	product: {title:'',image:''}
-})
-const id = ref(0)
-const expresssn = ref([])
-
-onLoad((option) => {
-	id.value = option.id
-	detail(option.id)
-})
-onPullDownRefresh(() => {
-	 detail(id.value)
-})
-
-const  detail = async(id) =>{
-	let data = await scoreShopOrderDetail({id:id});
-	uni.stopPullDownRefresh();
-	if (data) {
-		order.value = data;
-	}
-}
-
-const getExpresssn = async() => {
-	if(order.value.haveDelivered == 0){
-		proxy.$refs.uToast.show({
-			message: '还未发货,暂无物流信息',
-			type: 'error',
-		})
-		return	
-	}
-	
-	let data = await getLogistic({shipperCode:order.value.expressSn,logisticCode:order.value.expressNumber});
-	if (data.success == "false") {
-		uni.showToast({
-			title: res.reason,
-			icon: 'none'
-		})
-		return	
-	}
-	expresssn.value = data.traces
-}
-
-const copy = () => {
-	uni.setClipboardData({
-		data: order.value.expressNumber
-	})
-}
-
-// 确认收到货
-const  receive = async(order) => {
-	let data = await scoreShopReceive({
-		id: order.id
-	});
-	if (data) {
-		proxy.$refs.uToast.show({
-			message: '已签收',
-			type: 'success',
-		})
-		setTimeout(function() {
-			detail(order.id)
-		}, 1000);
-	}
-}
-
-
-
-</script>
-
-<style lang="scss" scoped>
-.copy {
-	color: #1296db;
-	margin-left: 10rpx;
-}
-@mixin arch {
-	content: "";
-	position: absolute;
-	background-color: $bg-color;
-	width: 30rpx;
-	height: 30rpx;
-	bottom: -15rpx;
-	z-index: 10;
-	border-radius: 100%;
-}
-
-.section {
-	position: relative;
-	
-	&::before {
-		@include arch;
-		left: -15rpx;
-	}
-	
-	&::after {
-		@include arch;
-		right: -15rpx;
-	}
-}
-
-.pay-cell {
-	width: 100%;
-	display: flex;
-	align-items: center;
-	justify-content: space-between;
-	font-size: $font-size-base;
-	color: $text-color-base;
-	margin-bottom: 40rpx;
-
-	&:nth-last-child(1) {
-		margin-bottom: 0;
-	}
-}
-
-.invote-box {
-	position: absolute;
-	width: 100%;
-	left: 0;
-	top: 0;
-	display: flex;
-	justify-content: center;
-	align-items: center;
-	
-	image {
-		width: 30rpx;
-		height: 30rpx;
-	}
-}
-
-.btn-box {
-	background-color: #ffffff;
-	position: fixed;
-	bottom: 0;
-	left: 0;
-	right: 0;
-	height: 120rpx;
-	box-shadow: 0 0 20rpx rgba($color: #000000, $alpha: 0.1);
-	display: flex;
-	align-items: center;
-	justify-content: space-evenly;
-	z-index: 11;
-	
-	.item {
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		padding: 20rpx 10rpx;
-		flex: 1;
-		flex-shrink: 0;
-		
-		button {
-			width: 100%;
-			border-radius: 50rem !important;
-			height: 80rpx;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			padding: 0;
-		}
-	}
-}
-.product-image {
-	width: 140rpx;
-	height: 140rpx;
-}
-</style>

+ 0 - 173
yshop/yshop-drink-uniapp/pages/components/pages/shop/shop.vue

@@ -1,173 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  left-arrow
-	  @leftClick="$onClickLeft"
-	/>
-	<!-- #endif -->
-	<view class="bg-white">
-		<view class="px-3 pt-1">
-			<uv-search  v-model="keywork" @custom="search(keywork)"></uv-search>
-		</view>
-		<view class="p-2 rounded" v-for="(item,index) in list" :key="index">
-<!-- 			<uni-card @click="choice(item)" :border="item.id == store.id" :title="item.name" :thumbnail="item.image" :thumb-width="80" :sub-title="item.status_text"> -->
-               <view class="border p-2">
-					<view class="mb-1">{{item.name}}</view>
-					<view class="body">
-						<view class="body-left px-1">
-							<view class="flex">
-								<view class="mr-1"><uv-tags :text="item.status == 1 ? '营业中' : '已歇业'" size="mini" type="warning" plain></uv-tags></view>
-								<view class="mr-1"><uv-tags text="可预定" size="mini" type="warning" plain></uv-tags></view>
-								<view class="mr-1" v-if="item.distance > 0"><uv-tags text="可外卖"  size="mini" type="warning" plain></uv-tags></view>
-								<view><uv-tags text="可自提" size="mini" type="warning" plain></uv-tags></view>
-							</view>
-							<view class="mt-1">营业时间:{{formatDateTime(item.startTime,'hh:mm')}} - {{formatDateTime(item.endTime,'hh:mm')}}</view>
-							<view class="mt-1">地址:{{item.addressMap + ' ' + item.address}}</view>
-						<!-- 	<view>距离您 {{kmUnit(item.dis)}}</view>
-							<view v-if="item.distance > 0">配送距离:{{item.distance + 'km '}} & 配送费:{{item.deliveryPrice}}</view>
-							<view v-else>外卖不配送</view> -->
-						
-						
-						</view>
-						<view class="body-right flex flex-column align-center justify-center">
-							<view class="flex"><view><uv-icon size="18" name="empty-address"></uv-icon></view>距离{{kmUnit(item.dis)}}</view>
-							<view class="flex mt-3">
-								<uv-button size="small" @click="openLocation(item)">导航</uv-button>
-								<uv-button size="small" @click="call(item.mobile)">致电</uv-button>
-							</view>
-						</view>
-					</view>
-					<view class="flex">
-						<view class="mr-1"><uv-button  type="warning" size="small" @click="choice(item,1)">去下单</uv-button></view>
-						<view><uv-button type="warning"  size="small" @click="choice(item,2)">去预约</uv-button></view>
-					</view>
-				</view>
-			<!-- </uni-card> -->
-		</view>
-	</view>
-</template>
-
-<script setup>
-import {
-  ref
-} from 'vue'
-import { useMainStore } from '@/store/store'
-import { storeToRefs } from 'pinia'
-import { onLoad,onShow ,onPullDownRefresh,onHide} from '@dcloudio/uni-app'
-import { formatDateTime,kmUnit,prePage } from '@/utils/util'
-import {
-  shopNearby,
-  menuGoods
-} from '@/api/goods'
-import {
-  shopGetList
-} from '@/api/market'
-const main = useMainStore()
-const { store,location } = storeToRefs(main)
-const title = ref('店铺')
-const list = ref([])
-const keywork = ref('')
-const page = ref(1)
-const pagesize = ref(10)
-const type = ref(1)
-	
-onLoad((option) => {
-	type.value = option.type
-	getShop();
-})
-
-const getShop = async(keywork = '') => {
-	let data = await shopGetList({
-		lat: location.value.latitude ? location.value.latitude : 0,
-		lng: location.value.longitude ? location.value.longitude : 0,
-		kw: keywork,
-		shop_id: 0
-	});
-	if (data) {
-		//console.log(data);
-		if (page.value == 1) {
-			list.value = data;
-		} else {
-			for(let i in data) {
-				list.value.push(data[i]);
-			}
-		}
-	}
-}
-//打开定位
-const openLocation = (shop) => {
-	//console.log(shop);
-	uni.openLocation({
-		latitude: parseFloat(shop.lat),
-		longitude: parseFloat(shop.lng),
-		name:shop.name,
-		address: shop.addressMap + shop.address,
-		fail: (res) => {
-	
-		}
-	})
-}
-// 打电话
-const call = (mobile) => {
-	uni.makePhoneCall({
-		phoneNumber:mobile
-	})
-}
-// 搜索按钮
-const search = (keywork) => {
-	page.value = 1;
-	getShop(keywork);
-}
-// 选中店铺
-const choice = (shop,type2) => {
-	//let index = 0
-	//console.log('type.value :',type.value )
-	// if(type.value) {
-	// 	index = type.value
-	// }else{
-	// 	index = type2
-	// }
-	main.SET_STORE(shop);
-	uni.$emit('refreshMenu')
-	if(type2 == 1){
-		uni.switchTab({
-			url:'/pages/menu/menu',
-			success(res) {
-			},
-			fail(res) {
-			
-			}
-		});
-	}else{
-		uni.navigateTo({
-			url: '/pages/components/pages/due/index'
-		})
-	}
-
-}
-
-	
-</script>
-
-<style lang="scss">
-	.body {
-		
-		.body-left {
-			display: inline-block;
-			width: 67%;
-			padding-left: 6rpx;
-			font-size: 22rpx;
-		}
-		.body-right {
-			display: inline-block;
-			width: 30%;
-			font-size: 22rpx;
-		}
-	}
-	
-	.u-border {
-		border: 1rpx solid #1296db;
-	}
-</style>

+ 0 - 257
yshop/yshop-drink-uniapp/pages/components/pages/vip/detail.vue

@@ -1,257 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  left-arrow
-	  @leftClick="$onClickLeft"
-	/>
-	<!-- #endif -->
-	<view class="p-3" style="background-color: #ffffff;position: relative;z-index: -2;" v-if="member.cardId > 0">
-		<view class="position-relative mt-1">
-			<view class="card-box flex flex-column align-center justify-center">
-				<view class="align-center">
-					<image src="/static/images/mine/vip.png" class="vip-img"></image>
-				</view>
-				<view  class="font-price">{{ card.name }}</view>
-				<view  class="font-time">{{ card.period == 0 ? '永久有效' : card.period + '月有效期'}}</view>
-			</view>
-			<view class="cart-box-bg"><image :src="card.styleImg"></image></view>
-		</view>
-	</view>
-	<view class="p-3 bg-white">
-		<view class="flex justify-center align-center">
-			<uv-line length="20%" color="#2979ff"></uv-line>
-			<text class="mx-1 font-weight-bolder">会员特权</text>
-			<uv-line length="20%" color="#2979ff"></uv-line>
-		</view>
-		<view class="py-5">
-			<uv-grid :border="false" :col="3">
-				<uv-grid-item v-if="card.discount > 0">
-					<image src="/static/images/mine/zk.png" style="width: 60rpx;height: 60rpx;" ></image>
-					<text class="font-size-sm text-color-assist my-2">开卡享{{ card.discount }}折</text>
-				</uv-grid-item>
-				<uv-grid-item v-if="card.integral > 0">
-					<image src="/static/images/mine/jf.png" style="width: 60rpx;height: 60rpx;" ></image>
-					<text class="font-size-sm text-color-assist my-2">开卡赠送{{ card.integral }}积分</text>			
-				</uv-grid-item>
-				<uv-grid-item v-if="card.mony > 0">
-					<image src="/static/images/mine/yue.png" style="width: 60rpx;height: 60rpx;" ></image>
-					<text class="font-size-sm text-color-assist my-2">开卡赠送{{ card.mony }}元</text>			
-				</uv-grid-item>
-			</uv-grid>
-		</view>
-		<view class="flex justify-center align-center">
-			<uv-line length="20%" color="#2979ff"></uv-line>
-			<text class="mx-1 font-weight-bolder">使用说明</text>
-			<uv-line length="20%" color="#2979ff"></uv-line>
-		</view>
-		<view class="mt-5 font-size-sm">
-			<rich-text :nodes="card.rule"></rich-text>
-		</view>
-		<view class="font-size-base text-color-base font-weight-bold" style="margin-bottom: 20rpx;margin-top: 80rpx;" v-if="member.cardId == '' || member.cardId == 0">支付方式</view>
-		<list-cell last v-if="member.cardId == '' || member.cardId == 0">
-			<view class="d-flex align-items-center justify-content-between w-100" @click="setPayType('weixin')">
-				<view class="iconfont iconwxpay line-height-100 payment-icon" style="color: #7EB73A"></view>
-				<view class="flex-fill">微信支付</view>
-				<view class="iconfont line-height-100 checkbox checked iconradio-button-on" v-if="payType == 'weixin'">
-				</view>
-				<view class="iconfont line-height-100 checkbox iconradio-button-off" v-else></view>
-			</view>
-		</list-cell>
-	</view>
-
-	<view class="fixed-bottom" style="background-color: #e45656;padding: 30rpx 0;text-align: center;"  @click="buy" v-if="member.cardId == '' || member.cardId == 0">
-		<text class="text-white">立即购买</text>
-	</view>
-</template>
-
-<script setup>
-import {
-  ref
-} from 'vue'
-import { onLoad} from '@dcloudio/uni-app'
-import {
-  getCardDetail,
-  cardBuy
-} from '@/api/user'
-import { isWeixin } from '@/utils/util'
-import {
-  payUnify,
-  getWechatConfig
-} from '@/api/order'
-import { useMainStore } from '@/store/store'
-import { storeToRefs } from 'pinia'
-// #ifdef H5
-import * as jweixin from 'weixin-js-sdk'
-// #endif
-
-const main = useMainStore()
-const { member } = storeToRefs(main)
-
-
-const title = ref('会员卡详情')
-const card = ref({})
-const payType = ref('weixin')
-const cardId = ref(0)
-
-onLoad((option) => {
-	cardId.value = option.id
-	getDetail(option.id);
-})
-
-const getDetail = async(id) => {
-	let data = await getCardDetail({id:id});
-	if (data) {
-		card.value = data;
-	}
-}
-
-const buy  = async() => {
-
-	let resData = await cardBuy({
-		cardId: cardId.value
-	});
-	if (!resData) {
-		return;
-	}
-	let order = {orderId:resData}
-	
-	if (payType.value == 'weixin') {
-		// 微信支付
-		weixinPay(order);
-	} else if (payType.value == 'alipay') {
-		// 余额支付
-		aliPay(order);
-	} 
-	
-	
-}
-const weixinPay = async(order) => {
-	let from = 'routine'
-	// #ifdef H5
-	from = 'h5'
-	if(isWeixin()){
-		from = 'wechat'
-	}
-	
-	// #endif
-	//let that = this;
-	let data = await payUnify({
-		uni: order.orderId,
-		from: from,
-		paytype: 'weixin'
-	});
-	if (!data) {
-		return;
-	}
-	if (data.trade_type == 'MWEB') {
-		// #ifdef H5
-		// 微信外的H5
-		location.href = data.data;
-		// #endif
-	} else if (data.trade_type == 'JSAPI') {
-		console.log('param:',data)
-
-		// #ifdef MP-WEIXIN
-		uni.requestPayment({
-			provider: 'wxpay',
-			timeStamp: data.data.timeStamp,
-			nonceStr: data.data.nonceStr,
-			package: data.data.package,
-			signType: 'MD5',
-			paySign: data.data.paySign,
-			success: function(res) {
-				uni.switchTab({
-					url: '/pages/mine/mine'
-				});
-			},
-			fail: function(err) {
-				
-			}
-		});
-		// #endif
-	} else if (data.trade_type == 'W-JSAPI'){
-		//公众号支付
-		let config = await getWechatConfig();
-		if (config) {
-		  jweixin.config({
-				debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
-		        appId: config.appId, // 必填,公众号的唯一标识
-		        timestamp: config.timestamp, // 必填,生成签名的时间戳
-		        nonceStr: config.nonceStr, // 必填,生成签名的随机串
-		        signature: config.signature, // 必填,签名
-		        jsApiList: [
-		          'chooseWXPay'
-		        ] ,
-			 }
-			);
-		  jweixin.ready(function() {
-		   jweixin.chooseWXPay({
-			timestamp: data.data.timeStamp, 
-			nonceStr: data.data.nonceStr, 
-			package:  data.data.package, 
-			signType: 'MD5', 
-			paySign: data.data.paySign, 
-			success: function(res) {
-			 uni.removeStorageSync('cart');
-			 uni.switchTab({
-			  url: '/pages/mine/mine'
-			 });
-			},
-			fail: function(err) {
-	
-			}
-		   });
-		  });
-		   jweixin.error(function(res) {
-			
-		  });
-		 } else {
-			// console.log(res)
-	  }
-		
-	}
-}
-
-</script>
-
-
-<style lang="scss" scoped>
-	.card-box {
-		color: #ffffff;
-		height: 400rpx;
-		padding: 30rpx;
-		text-align: center;
-		
-		.font-price {
-			margin-top: 10rpx;
-			font-size: 50rpx;
-		}
-		.font-time {
-			margin-top: 20rpx;
-			font-size: 26rpx;
-		}
-		.font-more {
-			margin-top: 80rpx;
-			font-size: 24rpx;
-		}
-	
-	}
-	.vip-img {
-		width: 40rpx;
-		height: 40rpx;
-	}
-	.cart-box-bg {
-		position: absolute;
-		top: 0;
-		left: 0;
-		z-index: -1;
-		
-		image {
-			width: 690rpx;
-			height: 400rpx;
-		}
-	}
-	
-</style>

+ 0 - 100
yshop/yshop-drink-uniapp/pages/components/pages/vip/vip.vue

@@ -1,100 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  left-arrow
-	  @leftClick="$onClickLeft"
-	/>
-	<!-- #endif -->
-	<view class="p-3">
-		<view class="position-relative mt-1" v-for="(item,key) in cardList" :key="key" @tap="toDetail(item.id)">
-			<view class="card-box">
-				<view class="flex align-center">
-					<image src="/static/images/mine/vip.png" class="vip-img"></image>
-					<text class="ml-1">{{ item.name }}</text>
-				</view>
-				<view  class="font-price">{{ item.price }}元</view>
-				<view  class="font-time">{{ item.period == 0 ? '永久有效' : item.period + '月有效期'}}</view>
-				<view  class="font-more">更多特权</view>
-			</view>
-			<view class="cart-box-bg"><image :src="item.styleImg"></image></view>
-		</view>
-	</view>
-</template>
-
-<script setup>
-import {
-  ref
-} from 'vue'
-import { onShow} from '@dcloudio/uni-app'
-import {
-  getCardList
-} from '@/api/user'
-
-
-
-const title = ref('会员卡')
-const cardList = ref([])
-
-onShow(() => {
-	getList();
-})
-
-const getList = async() => {
-	let data = await getCardList();
-	if (data) {
-		cardList.value = data;
-	}
-}
-const toDetail = (id) => {
-	uni.navigateTo({
-		url: '/pages/components/pages/vip/detail?id=' + id
-	})
-}
-
-</script>
-
-<style lang="scss" scoped>
-	/* #ifdef H5 */
-	page {
-		background-color: transparent;
-	}
-	/* #endif */
-	.card-box {
-		color: #ffffff;
-		height: 400rpx;
-		padding: 30rpx;
-		text-align: center;
-		
-		.font-price {
-			margin-top: 50rpx;
-			font-size: 50rpx;
-		}
-		.font-time {
-			margin-top: 10rpx;
-			font-size: 24rpx;
-		}
-		.font-more {
-			margin-top: 80rpx;
-			font-size: 24rpx;
-		}
-	
-	}
-	.vip-img {
-		width: 40rpx;
-		height: 40rpx;
-	}
-	.cart-box-bg {
-		position: absolute;
-		top: 0;
-		left: 0;
-		z-index: -1;
-		
-		image {
-			width: 690rpx;
-			height: 400rpx;
-		}
-	}
-	
-</style>

+ 0 - 650
yshop/yshop-drink-uniapp/pages/index/index.vue

@@ -1,650 +0,0 @@
-<template>
- <layout>
-	<view class="container">
-			<view class="banner">
-				<uv-swiper class="bg" height="250" imgMode="aspectFill" keyName="image" :list="listAds" indicatorMode="dot" indicatorStyle="bottom"></uv-swiper>
-			</view>
-			<view class="content">
-				<view  class="flex justify-between font-size-sm  p-2 content-user" v-if="isLogin">
-					<view class="flex align-center">
-						<image :src="member.avatar ? member.avatar : '/static/images/logo.png'" class="rounded-circle" style="width:100rpx;height: 100rpx;"></image>
-						<view  class="flex flex-column content-user-text ml-1">
-							<text class="font-weight-bolder">{{ member.nickname }}</text>
-							<view class="flex justify-between font-size-smaller mt-2">
-								<view><text class="text-color-assist font-size-20">卡券:</text><text>{{member.couponCount}}</text></view>
-								<view><text class="text-color-assist font-size-20">积分:</text><text>{{member.integral}}</text></view>
-							</view>
-						</view>	
-					</view>
-					<view class="flex align-center">
-						<view class="bg-white py-1 px-2 content-user-login" >{{ member.cardId > 0 ? member.cardName : '普通会员' }}</view>
-					</view>
-				</view>
-				<view  class="flex justify-between font-size-sm  p-2 content-user" v-else>
-					<view class="flex align-center">
-						<view><image src="/static/images/logo.png"  class="rounded-circle" style="width:100rpx;height: 100rpx;"></image></view>
-						<text class="ml-1">加入意象会员,享受更多优惠</text>
-					</view>
-					<view class="flex align-center">
-						<view class="bg-white py-1 px-2 content-user-login" @tap="login">前往登陆</view>
-					</view>
-				</view>
-				<view class="content-user2 flex" style="">
-					<view class="p-3 bg-white rounded" style="width: 350rpx;" @tap="goScan">
-						<view style="position: relative;">
-							<view style="position: absolute;top:0;left:0;;"><image src="/static/images/100.jpg" style="width:300rpx;height: 300rpx;"></image></view>
-							<veiw style="position: relative;top:40rpx;">
-								<view class="flex flex-column justify-center align-center" >
-									<view class=" flex">
-										<text class="font-size-medium font-weight-bold ">堂食点餐</text>
-										<uv-icon size="10" color="#059825" name="play-right-fill"></uv-icon>
-									</view>
-									<view class="text-color-assist" style="font-size: 22rpx;">扫码享用美食</view>
-								</view>
-							</veiw>
-						</view>
-					</view>
-					<view class="flex flex-column ml-1" style="width: 350rpx;">
-						<view class="p-1 bg-white rounded" > 
-							<view style="position: relative;width:300rpx;height: 150rpx;" @tap="takeout">
-								<view style="position: absolute;top:0;left:0;">
-									<image src="/static/images/300.jpg" mode="aspectFit" style="width:300rpx;height: 150rpx;"></image>
-								</view>
-								<veiw style="position: relative; top:20rpx" class="">
-									<view class="flex flex-column pl-1" >
-										<view class=" flex">
-											<text class="font-size-medium font-weight-bold ">外卖到家</text>
-											<uv-icon size="10" color="#059825" name="play-right-fill"></uv-icon>
-										</view>
-										<view class="text-color-assist" style="font-size: 22rpx;">美食送到家</view>
-									</view>
-								</veiw>
-							</view>
-						</view>
-						<view class="p-1 bg-white mt-1 rounded">
-							<view style="position: relative;width:300rpx;height: 150rpx;" @tap="takein">
-								<view style="position: absolute;top:0;left:0;">
-									<image src="/static/images/200.jpg"  mode="aspectFit" style="width:300rpx;height: 150rpx;"></image>
-								</view>
-								<veiw style="position: relative;top:20rpx">
-									<view class="flex flex-column pl-1" >
-										<view class=" flex">
-											<text class="font-size-medium font-weight-bold ">到店取餐</text>
-											<uv-icon size="10" color="#059825" name="play-right-fill"></uv-icon>
-										</view>
-										<view class="text-color-assist" style="font-size: 22rpx;">下单免排队</view>
-									</view>
-								</veiw>
-							</view>
-						</view>
-					</view>
-				</view>
-			
-				<view class="coupon-warp" v-if="isLogin">
-				  <view class="coupon-box">
-					<view class="coupon-top">
-					  <view class="title">
-						<image class="img" src="https://b2c.yixiang.co/static/home/title-coupon.png" />
-						<view class="text-color-assist">好券天天领不停</view>
-					  </view>
-					  <view class="btn-more" @tap="toDetail('/pages/components/pages/coupons/coupons',4)">查看更多</view>
-					</view>
-					<view class="coupon-list coupon-flex">
-					 <view class="coupon-item" v-for="(item, index) in notCoupons" :key="index">
-					   <view class="coupon-left">
-						 <view class="discount">
-						   <view class="unit pre-unit">
-							¥
-						   </view>
-						   2
-						 </view>
-						 <view class="type" >
-						   <text v-if="item.type == 1">自取</text>
-						   <text v-else-if="item.type == 2">外卖</text>
-						   <text v-else>通用</text>
-						 </view>
-					   </view>
-					   <view class="coupon-right">
-						 <view class="info">
-						   <view class="tip">
-							 满{{item.least}}减{{item.value}}
-						   </view>
-						 </view>
-						 <view class="button get-coupon"  v-if="item.isReceive == 0" @tap="receive(item, index)">
-						   领取
-						 </view>
-						 <view class="button get-coupon"  v-else>
-						   已领取
-						 </view>
-					   </view>
-					 </view>
-				
-					</view>
-				  </view>
-				</view>
-				
-				<view class="member-news">
-					<view class="header">
-						<view class="title">活动抢先知</view>
-					</view>
-					<view class="list">
-						<view class="item" v-for="(item,index) in listNews" :key="index" @tap="goNews(item.id)">
-							<image :src="item.picUrl"></image>
-							<view class="title">{{ item.title }}</view>
-						</view>
-					</view>
-				</view>
-			
-		</view>
-	</view>
- </layout>
-</template>
-
-<script setup>
-import {
-  ref
-} from 'vue'
-import { onLoad } from '@dcloudio/uni-app'
-import {
-  menuAds,
-  getNews
-} from '@/api/market'
-import {
-  getWechatConfig
-} from '@/api/order'
-import {
-  couponReceive,
-  couponIndexApi
-} from '@/api/coupon'
-import { storeToRefs } from 'pinia'
-import { useMainStore } from '@/store/store'
-// #ifdef H5
-import * as jweixin from 'weixin-js-sdk'
-// #endif
-//
-const main = useMainStore()
-const { member,store, isLogin} = storeToRefs(main)
-//const store = ref(main.store)
-const listAds = ref([])
-const listNews = ref([])
-const notCoupons = ref([])
-// const isLogin = ref(main.isLogin)
-
-const handGetListAds = async () => {
-	let shop_id = store.id ? store.id : 0;
-	let data = await menuAds({
-		shop_id: shop_id
-	});
-	if (data) {
-		listAds.value = data.list;
-		uni.setStorage({
-				key: 'isActive',
-				data: data.isActive
-			});
-		if(data.list.length > 0){
-			uni.setStorage({
-					key: 'shopAd',
-					data: data.list[0].image
-			 });
-			}
-		}
-}
-
-const getNewsList = async () => {
-	let data = await getNews({});
-	//console.log('listNews:',data)
-	if (data) {
-		listNews.value = data;
-	}
-}
-
-const getCoupons = async(type) => {
-	let page = 1;
-	let pagesize = 4;
-	notCoupons.value = await couponIndexApi({page:page,pagesize:pagesize});
-}
-
-const takein = () => {
-	main.SET_ORDER_TYPE('takein')
-	main.DEL_DESK()
-	uni.switchTab({
-		url: '/pages/menu/menu'
-	})
-}
-
-const takeout = () => {
-	main.SET_ORDER_TYPE('takeout')
-	main.DEL_DESK()
-	uni.switchTab({
-		url: '/pages/menu/menu'
-	}) 
-}
-
-const selectShop = () => {
-	uni.navigateTo({
-		url: '/pages/components/pages/shop/shop'
-	})
-}
-
-const goNews = (id) => {
-	uni.navigateTo({
-			url: '/pages/components/pages/mine/news?id=' + id
-		})
-}
-
-//const coupons = () => { 
-// 	if(!isLogin) {
-// 		uni.navigateTo({url: '/pages/components/pages/login/login'})
-// 		return
-// 	}
-// 	uni.navigateTo({
-// 		url: '/pages/components/pages/coupons/coupons?current=4'
-// 	})
-// }
-
-const goScore = () => { 
-	uni.navigateTo({
-		url: '/pages/components/pages/scoreproduct/list'
-	})
-}
-
-const toDetail = (page,index) => {
-	uni.navigateTo({
-		url: page + '?current=' + index
-	})
-}
-
-const getNewPath = (path) => {
-	const tempPath = decodeURIComponent(path);
-	const strList = tempPath.split("?scene=");
-	const scene = encodeURIComponent(strList[1]);
-	const newPath = strList[0] +"?scene=" + scene;
-	
-	return newPath;
-}
-
-// 领取优惠券
-const receive = async(coupon,index) => {
-	let data = await couponReceive({id:coupon.id});
-	if (data) {
-		uni.showToast({
-			title: '开领取成功',
-			icon: 'success'
-		})
-		
-		getCoupons()
-	}
-}
-
-const goScan = async() => {
-// #ifdef  MP-WEIXIN
-	uni.scanCode({
-		success: function (res) {
-			const newPath = getNewPath(res.path);
-			uni.navigateTo({
-				url: '/' + newPath
-			})
-		},
-		fail: function (res) {
-			console.log('扫码失败:', res);
-		}
-	});
-	// #endif
-	
-	// #ifdef  H5
-	let config = await getWechatConfig();
-	jweixin.config({
-		 debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
-	      appId: config.appId, // 必填,公众号的唯一标识
-	      timestamp: config.timestamp, // 必填,生成签名的时间戳
-	      nonceStr: config.nonceStr, // 必填,生成签名的随机串
-	      signature: config.signature, // 必填,签名
-	      jsApiList: [
-	        'scanQRCode'
-	      ] ,
-	 }
-	);
-	jweixin.ready(function() {
-		jweixin.scanQRCode({
-			 needResult: 1,
-			 success: function(res) {
-			  //alert(res.resultStr)
-			  console.log('sanc:',res)
-			  location.href = res.resultStr
-			 }
-		})
-		
-	})
-	
-	// #endif
-}
-
-const invite = () => {
-	// uni.showToast({
-	// 	title: '开发中......',
-	// 	icon: 'error'
-	// })
-	uni.navigateTo({
-		url: '/pages/components/pages/due/index'
-	})
-}
-
-const login = () => {
-	uni.navigateTo({
-		url: '/pages/components/pages/login/login'
-	})
-}
-
-
-
-
-onLoad(() => {
- // main.init()
-  handGetListAds()
-  getNewsList()
-	  
-  if(isLogin.value){
-	  getCoupons()
-  }
-  
-})
-
-</script>
-
-<style lang="scss">
-
-	
-	
-/* #ifdef H5 */
-page {
-	height: auto;
-	min-height: 100%;
-}
-/* #endif */
-page {
-	//background-color: #ffffff!important;
-}
-.banner {
-	position: relative;
-	width: 100%;
-	//height: 300rpx;
-	
-	.bg {
-		width: 100%;
-		height: 330rpx;
-	}
-	
-	.intro {
-		position: absolute;
-		top: calc(50rpx + var(--status-bar-height));
-		left: 40rpx;
-		color: #FFFFFF;
-		display: flex;
-		flex-direction: column;
-		
-		.greet {
-			font-size: $font-size-lg;
-			margin-bottom: 10rpx;
-		}
-		
-		.note {
-			font-size: $font-size-sm;
-		}
-	}
-}
-
-.content {
-	padding: 0 20rpx;
-}
-.content-user {
-	background-color: #ffffff;position: relative;top:-56rpx;border-radius: 18rpx;
-}
-.content-user-text {
-	font-size: 24rpx;color: #282828;
-}
-.content-user-login {
-	color:#ffffff;border-radius: 40rpx;font-size: 20rpx;border: solid;background-color: #fa850d;
-}
-
-.content-user2 {
-	position: relative;top:-70rpx;border-radius: 18rpx;padding: 30rpx 0;
-}
-
-
-.member-news {
-	position: relative;
-	top:-70rpx;
-	width: 100%;
-	margin-bottom: 30rpx;
-	background-color: #ffffff;
-	padding: 0 20rpx 30rpx 30rpx;
-	.header {
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		padding: 20rpx 0;
-		
-		.title {
-			font-size: $font-size-lg;
-			font-weight: bold;
-		}
-		
-		.iconfont {
-			font-size: 52rpx;
-			color: $text-color-assist;
-		}
-	}
-	
-	.list {
-		width: 100%;
-		display: flex;
-		flex-direction: column;
-		
-		.item {
-			width: 100%;
-			height: 240rpx;
-			position: relative;
-			margin-bottom: 10rpx;
-			
-			image {
-				width: 100%;
-				height: 100%;
-				border-radius: 8rpx;
-			}
-			
-			.title {
-				position: relative;
-				font-size: 32rpx;
-				font-weight: 500;
-				width: 100%;
-				top: -70rpx;
-				left: 16rpx;
-				color: #ffffff;
-			}
-		}
-	}
-}
-
-
-
-.coupon-warp{
-	position: relative;
-	top:-70rpx;
-	width: 100%;
-	margin-bottom: 30rpx;
-	background-color: #ffffff;
-  //padding: 0 34rpx;
-}
-.coupon-box {
-  padding: 24rpx;
-  background: linear-gradient( 180deg, #FBECDB 0%, #FFFFFF 100%);
-  border-radius: 15rpx;
-  .coupon-top{
-  display: flex;
-  justify-content: space-between;
-    margin-bottom: 20rpx;
-  .title{
-    flex: 1;
-    display: flex;
-    font-size: 24rpx;
-    color: #988E83;
-    align-items: center;
-    .img{
-      width: 121rpx;
-      height: 28rpx;
-      margin-right: 10rpx;
-    }
-  }
-  .btn-more{
-    font-size: 24rpx;
-    color: #999;
-    padding-right: 30rpx;
-    background: url("https://b2c.yixiang.co/static/images/icon-arrow.png") no-repeat right center / 20rpx 20rpx;
-  }
-}
-
-  ::v-deep .coupon-list {
-    .item {
-      margin-top: 24rpx;
-      display: block;
-
-      &:first-child {
-        margin-top: 0;
-      }
-    }
-
-    .coupon-item {
-      width: 100%;
-      height: 160rpx;
-      background: url('https://b2c.yixiang.co/static/images/canvas/bg-coupon-l.png') no-repeat;
-      background-size: 100% 100%;
-      box-sizing: border-box;
-      display: flex;
-      align-items: center;
-      justify-content: space-between;
-
-      .discount {
-        display: flex;
-        align-items: baseline;
-        font-size: 68rpx;
-        line-height: 64rpx;
-        font-weight: bold;
-
-        .unit {
-          font-size: 32rpx;
-        }
-      }
-
-      .info {
-        font-size: 38rpx;
-
-        .type {
-          font-size: 32rpx;
-          font-weight: bold;
-          color: #333333;
-          line-height: 45rpx;
-        }
-
-        .tip {
-          font-size: 24rpx;
-          //white-space: nowrap;
-        }
-      }
-
-      .button {
-        width: 144rpx;
-        height: 64rpx;
-        border-radius: 8rpx;
-        background: #ee6d46;
-        font-size: 24rpx;
-        color: #fff;
-        display: flex;
-        align-items: center;
-        justify-content: center;
-      }
-
-      .disable {
-        background: #666666;
-      }
-
-      .expired {
-        background: #999999;
-      }
-
-      .coupon-left {
-        width: 206rpx;
-        display: flex;
-        justify-content: center;
-      }
-
-      .coupon-right {
-        flex: 1;
-        display: flex;
-        padding: 0 32rpx;
-        justify-content: space-between;
-        align-items: center;
-      }
-    }
-
-    &.coupon-flex {
-      display: flex;
-      flex-wrap: wrap;
-      justify-content: space-between;
-
-      .item:nth-child(2) {
-        margin-top: 0;
-      }
-
-      .coupon-item {
-        width: 309rpx;
-        height: 120rpx;
-        background-image: url('https://b2c.yixiang.co/static/images/canvas/bg-coupon-m.png');
-
-        .coupon-left {
-          width: 138rpx;
-          flex-direction: column;
-          align-items: center;
-
-          .type {
-            font-size: 20rpx;
-            font-weight: bold;
-            line-height: 28rpx;
-          }
-        }
-
-        .coupon-right {
-          flex-direction: column;
-          padding: 0;
-        }
-
-        .discount {
-          font-size: 32rpx;
-          line-height: 45rpx;
-
-          .unit {
-            font-size: 24rpx;
-          }
-        }
-
-        .info {
-          .tip {
-            font-size: 20rpx;
-            line-height: 36rpx;
-            margin-bottom: 9rpx;
-          }
-        }
-
-        .button {
-          width: 100rpx;
-          height: 32rpx;
-          border-radius: 16rpx;
-          font-size: 20rpx;
-        }
-      }
-    }
-
-   
-  }
-}
-
-</style>

+ 0 - 1621
yshop/yshop-drink-uniapp/pages/menu/menu.vue

@@ -1,1621 +0,0 @@
-<template>
-	<layout>
-		<!-- #ifdef MP-WEIXIN -->
-		<uv-navbar
-		  :fixed="false"
-		  :title="title"
-		  left-arrow
-		  @leftClick="$onClickLeft"
-		/>
-		<!-- #endif -->
-		<view class="container" v-if="!loading">
-		<view class="main">
-			<view class="nav">
-				<view class="header" v-if="isScan">
-					<view class="mr-1">
-						<image :src="store.image" class="rounded-circle" style="width:80rpx ; height: 80rpx; "></image>
-					</view>
-					<view class="left" style="">
-						<view class="store-name" @click="selectShop()">
-							<text style="font-size: 26rpx;">{{ store.name }}</text>
-						</view>
-						<view class="store-location">
-							<text>{{ store.address }}</text>
-						</view>
-					</view>
-					<view class="right flex flex-column" style="background-color: #ffffff;color: black;" >
-						<view>桌位号:{{ desk.number }}</view>
-						<view class="mt-1"> 人数:{{ desk.people }}人</view>
-					</view>
-				</view>
-				<view class="header" v-else>
-					<view class="mr-1"><image :src="store.image" class="rounded-circle" style="width:80rpx ; height: 80rpx; "></image></view>
-					<view class="left" v-if="orderType == 'takein'" style="">
-						<view class="store-name" @click="selectShop()">
-							<text>{{ store.name }}</text>
-							<view class="iconfont iconarrow-right"></view>
-						</view>
-						<view class="store-location">
-							<text class="font-weight-bold">自取</text> <text class="px-1">|</text><text>距离:{{kmUnit(store.dis)}}</text>
-						</view>
-					</view>
-					<view class="left overflow-hidden" v-else>
-						<view class="store-name" @click="selectShop()">
-							<view class="flex flex-column">
-								<view class="flex align-center">
-									<text>{{ store.name }}</text>
-									<view class="iconfont iconarrow-right"></view>
-								</view>
-								<view class="store-location">
-									<text class="font-weight-bold">外卖</text> <text class="px-1">|</text><text>配送距离:{{store.distance}}km</text>
-								</view>
-							</view>
-							
-						</view>
-					</view>
-				</view>
-				<view v-if="isShowAd" class="pl-1 pr-2">
-					<uv-swiper  height="150" imgMode="aspectFill" :list="toArrImgs(store.images)" indicatorMode="dot" indicatorStyle="bottom"></uv-swiper>
-				</view>
-			</view>
-		
-			<!-- #ifdef H5 -->
-			<view class="content"
-				:style="{height: 'calc(100vh - 300rpx + '+(store.notice ? '0rpx':'60rpx')+')'}">
-				<!-- #endif -->
-				<!-- #ifndef H5 -->
-				<view class="content" :style="{height: 'calc(100vh - 350rpx + '+(store.notice ? '0rpx':'60rpx')+')'}">
-					<!-- #endif -->
-					<scroll-view class="menus" :scroll-into-view="menuScrollIntoView" scroll-with-animation scroll-y>
-						<view class="wrapper">
-							<view class="menu" :id="`menu-${item.id}`" :class="{'current': item.id === currentCateId}"
-								v-for="(item, index) in goods" :key="index" @tap="handleMenuTap(item.id)">
-								<text>{{ item.name }}</text>
-								<view class="dot" v-show="menuCartNum(item.id)">{{ menuCartNum(item.id) }}</view>
-							</view>
-						</view>
-					</scroll-view>
-					<!-- goods list begin -->
-					<scroll-view class="goods" scroll-with-animation scroll-y :scroll-top="cateScrollTop"
-						@scroll="handleGoodsScroll" @scrolltoupper="goBotttom">
-						<view class="wrapper">
-							<view class="list">
-								<!-- category begin -->
-								<view class="category" v-for="(item, index) in goods" :key="index"
-									:id="`cate-${item.id}`">
-									<view class="title">
-										<text>{{ item.name }}</text>
-										<image mode="aspectFill" :src="item.picUrl" class="icon"></image>
-									</view>
-									<view class="items">
-										<!-- 商品 begin -->
-										<view class="good" v-for="(good, key) in item.goodsList" :key="key"
-											:class="{'backgroud-grey': good.stock <= 0}">
-											<image mode="aspectFill" :src="good.image" class="image" 
-												@tap="goDetail(good.id)"></image>
-											<view class="right">
-												<text class="name" @tap="goDetail(good.id)">{{ good.storeName }}</text>
-												<text class="tips">{{ good.storeInfo }}</text>
-												<view class="price_and_action">
-													<text class="price">¥{{ good.price }}</text>
-													<view class="btn-group" v-if="good.stock > 0 && good.productAttr.length >= 1 && good.productAttr[0].attrValues != '默认'">
-														<button type="primary" class="btn property_btn"
-															hover-class="none" size="mini"
-															@tap="showGoodDetailModal(item, good)">
-															选规格
-														</button>
-														<view class="dot" v-show="goodCartNum(good.id)">
-															{{ goodCartNum(good.id) }}</view>
-													</view>
-													<view class="btn-group" v-if="good.stock > 0 && good.productAttr.length == 1 && good.productAttr[0].attrValues == '默认'">
-														<button type="default" v-show="goodCartNum(good.id)" plain class="btn reduce_btn"
-														 size="mini" hover-class="none" @tap="handleReduceFromCart(item, good)">
-															<view class="iconfont iconsami-select"></view>
-														</button>
-														<view class="number" v-show="goodCartNum(good.id)">{{ goodCartNum(good.id) }}</view>
-														<button type="primary" class="btn add_btn" size="min" hover-class="none" 
-															@tap="handleAddToCart(item, good, 1)">
-															<view class="iconfont iconadd-select"></view>
-														</button>
-													</view>
-													<view v-if="good.stock == 0">已售罄</view>
-												</view>
-
-											</view>
-										</view>
-										<!-- 商品 end -->
-									</view>
-								</view>
-								<!-- category end -->
-								<view style="height: 110rpx;"></view>
-							</view>
-						</view>
-					</scroll-view>
-					<!-- goods list end -->
-				</view>
-				<!-- content end -->
-				<!-- 购物车栏 begin -->
-				<view class="cart-box" v-if="cart.length > 0 && isCartShow">
-					<view class="mark">
-						<image src="/static/images/cart.png" class="cart-img" @tap="isScan ? toPay() : openCartPopup()"></image>
-						<view class="tag">{{ getCartGoodsNumber }}</view>
-					</view>
-					<view class="price">¥{{ getCartGoodsPrice }}</view>
-					<button type="primary" class="pay-btn" @tap="toPay" :disabled="disabledPay">
-						{{ disabledPay ? `差${spread}元起送` : '去结算' }}
-					</button>
-				</view>
-				<!-- 购物车栏 end -->
-			</view>
-			<!-- 商品详情模态框 begin -->
-			<modal :show="goodDetailModalVisible" class="good-detail-modal" color="#5A5B5C" width="90%" custom
-				padding="0rpx" radius="12rpx">
-				<view class="cover">
-					<view class="btn-group">
-						<image src="/static/images/menu/close.png" @tap="closeGoodDetailModal"></image>
-					</view>
-				</view>
-				<scroll-view class="detail" scroll-y>
-					<view v-if="good.image" class="image">
-						<image :src="good.image"></image>
-					</view>
-
-					<view class="wrapper">
-						<view class="basic">
-							<view class="name">{{ good.storeName }}</view>
-							<view class="tips flex justify-between">{{ good.storeInfo }}</view>
-						</view>
-						<view class="properties">
-							<view class="property" v-for="(item, index) in good.productAttr" :key="index">
-								<view class="title">
-									<text class="name">{{ item.attrName }}</text>
-								</view>
-								<view class="values">
-									<view class="value" v-for="(value, key) in item.attrValueArr" :key="key"
-										:class="{'default': value == newValue[index]}"
-										@tap="changePropertyDefault(index, key,false)">
-										{{ value }}
-									</view>
-								</view>
-							</view>
-						</view>
-					</view>
-				</scroll-view>
-				<view class="action">
-					<view class="left">
-						<view class="price">¥{{ good.price }}</view>
-						<view class="props">
-							{{ good.valueStr }}
-						</view>
-					</view>
-					<view class="btn-group">
-						<text style="margin-right: 20rpx;">库存:{{good.stock}} </text>
-						<button type="default" plain class="btn" size="mini" hover-class="none"
-							@tap="handlePropertyReduce">
-							<view class="iconfont iconsami-select"></view>
-						</button>
-						<view class="number">{{ good.number }}</view>
-						<button type="primary" class="btn" size="min" hover-class="none" @tap="handlePropertyAdd">
-							<view class="iconfont iconadd-select"></view>
-						</button>
-					</view>
-				</view>
-				<view class="add-to-cart-btn" @tap="handleAddToCartInModal">
-					<view>加入购物车</view>
-				</view>
-			</modal>
-			<!-- 商品详情模态框 end -->
-			<!-- 购物车详情popup -->
-			<uv-popup ref="popup" mode="bottom" class="cart-popup" :customStyle="customStyle">
-				<template #default>
-				<view  class="cart-popup">
-					 <view class="top flex justify-between">
-					  <text>购物车({{ getCartGoodsNumber }}份)</text>
-					  <view class="flex align-center"><uv-icon name="trash" size="20"></uv-icon><text @tap="handleCartClear">清空购物车</text></view>
-					 </view>
-					 <scroll-view class="cart-list" scroll-y>
-					  <view class="wrapper">
-					   <view class="item" v-for="(item, index) in cart" :key="index">
-						<view class="left">
-							<view class="flex align-center">
-								<view>
-									<image mode="aspectFill" :src="item.image" style="width: 100rpx;height: 100rpx;"></image>
-								</view>
-								<view class="ml-2">
-									<view class="name">{{ item.name }}</view>
-									<view class="props">{{ item.valueStr }}</view>
-									<text class="price"><text class="font-size:16rpx">¥</text>{{ item.price }}</text>
-								</view>
-							</view>
-						</view>
-						<!-- <view class="center">
-						 <text>¥{{ item.price }}</text>
-						</view> -->
-						<view class="right">
-						 <button type="default" plain size="mini" class="btn" hover-class="none"
-						  @tap="handleCartItemReduce(index)">
-						  <view class="iconfont iconsami-select"></view>
-						 </button>
-						 <view class="number">{{ item.number }}</view>
-						 <button type="primary" class="btn" size="min" hover-class="none"
-						  @tap="handleCartItemAdd(index)">
-						  <view class="iconfont iconadd-select"></view>
-						 </button>
-						</view>
-					   </view>
-							
-					  </view>
-					 </scroll-view>
-				 </view>
-				</template>
-			</uv-popup>
-			   <!-- 购物车详情popup -->
-			<uv-toast ref="uToast"></uv-toast>
-		</view>
-		<!--轻提示-->
-		<view class="loading" v-else>
-			<!-- <uv-loading-icon  color="#DA5650" size=40 mode="circle" ></uv-loading-icon> -->
-			<button type="primary" style="z-index: 3001;position: absolute;top: 650rpx;" @click="init"
-				>定位最近的门店</button>
-		<!-- 	<uv-toast ref="uToast"></uv-toast> -->
-		</view>
-	</layout>
-</template>
-
-<script setup>
-import {
-  ref,
-  toRefs,
-  computed,
-  nextTick
-} from 'vue'
-import { useMainStore } from '@/store/store'
-import { storeToRefs } from 'pinia'
-import { onLoad,onShow ,onPullDownRefresh,onHide,onUnload} from '@dcloudio/uni-app'
-import { formatDateTime,kmUnit } from '@/utils/util'
-import {
-  shopNearby,
-  menuGoods
-} from '@/api/goods'
-import {
-  syncCart
-} from '@/api/order'
-import { useWebSocket } from '@/hooks/useWebSocket'
-const main = useMainStore()
-const { orderType,address, store,location,isLogin,desk,isScan } = storeToRefs(main)
-const title = ref('点餐')
-const text = ref('滚动通知')
-
-const goods = ref([])
-const ads = ref([])
-const loading = ref(true) 
-const currentCateId = ref(0)
-const cateScrollTop = ref(0)
-const menuScrollIntoView = ref('')
-const cart = ref([])
-const goodDetailModalVisible = ref(false)
-const good= ref({})
-const category = ref({})
-const cartPopupVisible = ref(false)
-const sizeCalcState = ref(false)
-const newValue = ref([])
-const shopAd = ref('')
-const isCartShow = ref(true)
-const isClick = ref(false)
-const popup = ref()
-const isShowAd = ref(true)
-
-
-const customStyle = computed(() =>{ 
-	// #ifdef H5
-	    return {
-		   bottom:'120rpx'
-		}
-	// #endif
-	
-	// #ifdef MP-WEIXIN
-	    return {
-		   bottom:'0rpx'
-		}
-	// #endif
-})
-
-
-const goodCartNum = computed(() => { //计算单个饮品添加到购物车的数量
-	return (id) => cart.value.reduce((acc, cur) => {
-		if (cur.id === id) {
-			return acc += cur.number
-		}
-		return acc
-	}, 0)
-})
-const menuCartNum = computed(() =>{
-	return (id) => cart.value.reduce((acc, cur) => {
-		if (cur.cate_id === id) {
-			return acc += cur.number
-		}
-		return acc
-	}, 0)
-})
-const getCartGoodsNumber = computed(() => { //计算购物车总数
-	return cart.value.reduce((acc, cur) => acc + cur.number, 0)
-})
-const getCartGoodsPrice = computed(() =>{ //计算购物车总价
-	let price = cart.value.reduce((acc, cur) => acc + cur.number * cur.price, 0);
-	return parseFloat(price).toFixed(2);
-})
-const disabledPay = computed(() => { //是否达到起送价
-    console.log('store.value.minPrice:',store.value.minPrice)
-	console.log('orderType.value:',orderType.value)
-	console.log('getCartGoodsPrice:',getCartGoodsPrice)
-	return orderType.value == 'takeout' && (getCartGoodsPrice.value < parseFloat(store.value.minPrice)) ? true :
-		false
-})
-const spread = computed(() => { //差多少元起送
-	if (orderType.value != 'takeout') return
-	return parseFloat((store.value.minPrice - getCartGoodsPrice.value).toFixed(2))
-})
-
-
-
-// 监听自定义事件
-uni.$on('refreshMenu', () => {
-	// 在这里执行onLoad逻辑
-	init()
-})
-
-onPullDownRefresh(() => {
-	init()
-})
-onLoad(() => {
-	if(isScan.value){
-		getProducts()
-	}else{
-		init();
-	}
-	refreshCart()
-	
-	
-})
-
-onHide(() => {
-	// 重新进入要重新计算页面高度,否则有问题
-	sizeCalcState.value = false;
-})
-onShow(() => {
-	//init();
-	refreshCart()
-	
-})
-
-const goDetail = (id) => {
-	uni.navigateTo({
-		url: '/pages/components/pages/menudetail/menudetail?id=' + id
-	})
-}
-
-const openCartShow = () =>{
-	isCartShow.value = false
-}
-const in_array = (search, array) => {
-	for (var i in array) {
-		if (array[i] == search) {
-			return true;
-		}
-	}
-	return false;
-}
-const selectShop = () => {
-	uni.navigateTo({
-		url: '/pages/components/pages/shop/shop?type=1'
-	})
-}
-const uToast = ref()
-const getProducts =  async() => {
-	let shop = store.value
-	if (shop) {
-
-		shop.notice = shop.status == 1 ? shop.notice : '店铺营业时间为:' + formatDateTime(shop.startTime,'hh:mm')+' - '+formatDateTime(shop.endTime,'hh:mm') +
-		',不在营业时间内无法下单';
-		// 设置店铺信息
-		main.SET_STORE(shop);
-		let mygoods = await menuGoods({
-			shopId: shop.id
-		});
-		if (mygoods) {
-			goods.value = mygoods;
-			currentCateId.value = mygoods[0].id
-			refreshCart();
-		}
-		loading.value = false;
-		uni.stopPullDownRefresh();
-	}
-}
-
-const  init = async() => { //页面初始化
-	loading.value = true;
-    
-	let error = {},
-		result = location.value
-	if (!location.value.hasOwnProperty('latitude')) {
-		  uni.getLocation(({
-			 type: 'wgs84',
-			 success: function (res) {
-		
-				result = {
-					latitude: res.latitude,
-					longitude: res.longitude
-				};
-				getShopList(result)
-			 },
-			 fail: function (res) {
-			   uni.showToast({
-			     title: '获取位置失败,请检查是否开启相关权限',
-			     duration: 2000,
-			     icon: 'error'
-			   });
-			   // 默认地为你为北京地址
-			   result = {
-			   	latitude: 39.919990,
-			   	longitude: 116.456270
-			   };
-			   getShopList(result)
-			 },
-			 complete: function (res) {
-			 }
-		}));
-	
-		
-		return
-	}
-	
-	getShopList(result)
-   
-	
-}
-
-const getShopList = async(res) => {
-	if (res) {
-		main.SET_LOCATION(res);
-	
-		let shop_id = 0;
-		console.log('store.value:',store.value.id)
-		if (store.value.id) {
-			shop_id = store.value.id;
-		}
-	
-		let shop = await shopNearby({
-			lat: res.latitude,
-			lng: res.longitude,
-			shop_id: shop_id,
-			kw: ''
-		});
-		if (shop) {
-			shop.notice = shop.status == 1 ? shop.notice : '店铺营业时间为:' + formatDateTime(shop.startTime,'hh:mm')+' - '+formatDateTime(shop.endTime,'hh:mm') +
-			',不在营业时间内无法下单';
-			// 设置店铺信息
-			main.SET_STORE(shop);
-			let mygoods = await menuGoods({
-				shopId: shop.id
-			});
-			if (mygoods.length > 0) {
-				goods.value = mygoods;
-				currentCateId.value = mygoods[0].id
-				refreshCart();
-			}else{
-				goods.value = [];
-				refreshCart();
-			}
-			loading.value = false;
-			uni.stopPullDownRefresh();
-		}
-	}
-}
-const refreshCart = () =>{
-	if (goods.value && goods.value.length > 0) {
-		let newGoods = goods.value;
-		cart.value = [];
-		let newCart = uni.getStorageSync('cart') || [];
-		let tmpCart = [];
-		if (newCart) {
-			for (let i in newCart) {
-				for (let ii in newGoods) {
-					for (let iii in newGoods[ii].goodsList) {
-						if (newCart[i].id == newGoods[ii].goodsList[iii].id) {
-							tmpCart.push(newCart[i]);
-						}
-					}
-				}
-			}
-			cart.value = tmpCart;
-			cartPopupVisible.value = false;
-		}
-	}
-}
-
-const openCartPopup = () => { //打开/关闭购物车列表popup
-	popup.value.open()
-}
-
-const takout = (force = false) => {
-	if (orderType.value == 'takeout' && force == false) return
-	main.SET_ORDER_TYPE('takeout');
-
-	if (!isLogin.value) {
-		uni.navigateTo({
-			url: '/pages/components/pages/login/login'
-		})
-		return
-	} 
-
-}
-const takein = (force = false) => {
-	if (orderType.value == 'takein' && force == false) return
-	main.SET_ORDER_TYPE('takein');
-
-	if (!isLogin.value) {
-		uni.navigateTo({
-			url: '/pages/components/pages/login/login'
-		})
-		return
-	} 
-
-}
-const handleMenuTap = (id) => { //点击菜单项事件
-	if (!sizeCalcState.value) {
-		calcSize()
-	}
-
-	setTimeout(() => {
-        cateScrollTop.value = goods.value.find(item => {
-        	return item.id == id
-        }).top
-      }, 100);
-	currentCateId.value = id
-	isClick.value = true
-
-}
-
-const goBotttom = () => {
-	isShowAd.value = true
-}
-
-const handleGoodsScroll = ({ detail }) => { //商品列表滚动事件
-    isShowAd.value = false
-	if (!sizeCalcState.value) {
-		calcSize()
-	}
-	const {
-		scrollTop
-	} = detail
-	let tabs = goods.value.filter(item => item.top <= scrollTop).reverse()
-	if (tabs.length > 0) {
-		if(isClick.value ){
-			//currentCateId.value = tabs[0].id
-		}else{
-			currentCateId.value = tabs[0].id
-		}
-		isClick.value = false
-	}
-}
-const calcSize = () => {
-	let h = 10
-	goods.value.forEach(item => {
-		let view = uni.createSelectorQuery().select(`#cate-${item.id}`)
-		
-		view.fields({
-			size: true
-		}, data => {
-			item.top = h
-			h += data.height
-			item.bottom = h
-		}).exec()
-	})
-	sizeCalcState.value = true
-}
-const handleAddToCart = (cate, newGood, num) =>{ //添加到购物车
-	if(store.value.status == 0) {
-		uToast.value.show({message:'店铺已经歇业',type: 'error'});
-		return;
-	}
-	const index = cart.value.findIndex(item => {
-		if (newGood) {
-			return (item.id === newGood.id) && (item.valueStr === good.value.valueStr)
-		} else {
-			return item.id === newGood.id
-		}
-	})
-	if (index > -1) {
-		cart.value[index].number += num
-	} else {
-		cart.value.push({
-			id: newGood.id,
-			cate_id: cate.id,
-			name: newGood.storeName,
-			price: newGood.price,
-			number: num,
-			image: newGood.image,
-			valueStr: good.value.valueStr
-		})
-	}
-
-	if(isScan.value){
-		noticeCartInfo({shopId: store.value.id,deskId:desk.value.id,content: cart.value})
-	}
-	uni.setStorageSync('cart', JSON.parse(JSON.stringify(cart.value)))
-}
-const noticeCartInfo = async(cart) => {
-	await syncCart(cart)
-}
-const handleReduceFromCart = (item, good) => {
-	const index = cart.value.findIndex(item => item.id === good.id)
-	cart.value[index].number -= 1
-	if (cart.value[index].number <= 0) {
-		cart.value.splice(index, 1)
-	}
-	uni.setStorageSync('cart', JSON.parse(JSON.stringify(cart.value)))
-}
-const showGoodDetailModal = (item, newGood) => {
-	isCartShow.value = true
-	good.value = JSON.parse(JSON.stringify({
-		...newGood,
-		number: 1
-	}))
-	category.value = JSON.parse(JSON.stringify(item))
-	goodDetailModalVisible.value = true;
-	changePropertyDefault(0, 0,true);
-}
-const closeGoodDetailModal = () => { //关闭饮品详情模态框
-	goodDetailModalVisible.value = false
-    category.value = {}
-	good.value = {}
-}
-const changePropertyDefault = (index, key, isDefault) => { //改变默认属性值
-	let valueStr = ''
-	if(isDefault){
-		newValue.value = []
-		for(let i = 0;i < good.value.productAttr.length;i++){
-			newValue.value[i] = good.value.productAttr[i].attrValueArr[0]
-		}
-
-	}else{
-		newValue.value[index] = good.value.productAttr[index].attrValueArr[key]
-	}
-	
-	valueStr = newValue.value.join(',')
-	
-	let productValue = good.value.productValue[valueStr]
-	//console.log('productValue:',productValue)
-	if(!productValue) {
-		let skukey = JSON.parse(JSON.stringify(newValue.value))
-		skukey.sort((a, b) => a.localeCompare(b))
-		//console.log('skukey:',skukey)
-		valueStr = skukey.join(',')
-		productValue = good.value.productValue[valueStr]
-	}
-	good.value.number = 1;
-	good.value.price = parseFloat(productValue.price).toFixed(2);
-	good.value.stock = productValue.stock;
-	good.value.image = productValue.image ? productValue.image : good.value.image;
-	good.value.valueStr = valueStr
-
-}
-const handlePropertyAdd = () => {
-	good.value.number += 1
-}
-const handlePropertyReduce = () => {
-	if (good.value.number === 1) return
-	good.value.number -= 1
-}
-const handleAddToCartInModal = () => {
-	if(store.value.status == 0) {
-		uToast.value.show({message:'店铺已经歇业',type: 'error'});
-		return;
-	}
-	if (good.value.stock <= 0) {
-		uToast.value.show({message:'商品库存不足',type: 'error'});
-		return;
-	}
-	handleAddToCart(category.value, good.value, good.value.number)
-	closeGoodDetailModal()
-}
-const handleCartClear = () => { //清空购物车
-	uni.showModal({
-		title: '提示',
-		content: '确定清空购物车么',
-		success: ({
-			confirm
-		}) => {
-			if (confirm) {
-				popup.value.close()
-				cart.value = []
-				uni.setStorageSync('cart', JSON.parse(JSON.stringify(cart.value)))
-			}
-		}
-	})
-}
-const handleCartItemAdd = (index) => {
-	cart.value[index].number += 1
-	uni.setStorageSync('cart', JSON.parse(JSON.stringify(cart.value)))
-}
-const handleCartItemReduce = (index) => {
-	if (cart.value[index].number === 1) {
-		cart.value.splice(index, 1)
-	} else {
-		cart.value[index].number -= 1
-	}
-	if (!cart.value.length) {
-		cartPopupVisible.value = false
-	}
-	uni.setStorageSync('cart', JSON.parse(JSON.stringify(cart.value)))
-}
-const toPay = () => {
-
-	if (!isLogin.value) {
-		uni.navigateTo({
-			url: '/pages/components/pages/login/login'
-		})
-		return
-	} else {
-		if(cart.value.length == 0){
-			uToast.value.show({message:'请先去点餐哦',type: 'error'});
-			return;
-		}
-		if(store.value.status == 0) {
-			uToast.value.show({message:'店铺已经歇业',type: 'error'});
-			return;
-		}
-		if (store.value.status == 0) {
-			uToast.value.show({message:'不在店铺营业时间内',type: 'error'});
-			return;
-		}
-		if(orderType.value == 'takeout' && store.value.distance <= 0){
-			uToast.value.show({message:'本店不支持外卖',type: 'error'});
-			return;
-		}
-		// 判断当前是否在配送范围内
-		if (orderType.value == 'takeout' && store.value.distance < store.value.far) {
-			uToast.value.show({message:'选中的地址不在配送范围',type: 'error'});
-			return;
-		}
-
-		uni.showLoading({
-			title: '加载中'
-		})
-		uni.setStorageSync('cart', JSON.parse(JSON.stringify(cart.value)))
-
-		
-		if(orderType.value == 'desk'){
-			uni.navigateTo({
-				url: '/pages/components/pages/cart/cart'
-			})
-		}else{
-			uni.navigateTo({
-				url: '/pages/components/pages/pay/pay'
-			})
-		}
-		
-	}
-
-	uni.hideLoading()
-}
-
-
-
-const toArrImgs = (str) => {
-	return str.split(",");
-}
-
-function removeCharByReplace(str, char) {
-    const regex = new RegExp(char, 'g');
-    return str.replace(regex, '');
-}
-
-
-
-</script>
-
-<style lang="scss" scoped>
-
-	/* #ifdef H5 */
-	page {
-		height: auto;
-		min-height: 100%;
-	}
-	/* #endif */
-	
-	.container {
-		overflow: hidden;
-		position: relative;
-	}
-	
-	.loading {
-		width: 100%;
-		height: 100%;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-	
-		image {
-			width: 260rpx;
-			height: 260rpx;
-			position: relative;
-			margin-top: -200rpx;
-			/* #ifdef h5 */
-			margin-top: 0;
-			/* #endif */
-		}
-	}
-	
-	.stores {
-		width: 100%;
-		display: flex;
-		flex-direction: column;
-		justify-content: flex-start;
-		margin-bottom: -40rpx;
-		.store {
-			width: 100%;
-			background-color: $bg-color-grey;
-			padding: 20rpx;
-			display: flex;
-			align-items: center;
-			margin-bottom: 20rpx;
-			border-radius: 6rpx;
-	
-			.iconfont {
-				font-size: 50rpx;
-				margin-right: 15rpx;
-	
-				&.iconradio-button-off {
-					color: $text-color-assist;
-				}
-	
-				&.iconradio-button-on {
-					color: $color-primary;
-				}
-			}
-	
-			.infos {
-				flex: 1;
-				display: flex;
-				flex-direction: column;
-				color: $text-color-base;
-				overflow: hidden;
-	
-				.name_and_distance {
-					width: 100%;
-					display: flex;
-					justify-content: space-between;
-					margin-bottom: 10rpx;
-					overflow: hidden;
-	
-					.name {
-						flex: 1;
-						flex-shrink: 0;
-						overflow: hidden;
-						text-overflow: ellipsis;
-						white-space: nowrap;
-						font-size: $font-size-lg;
-					}
-	
-					.distance {
-						flex-shrink: 0;
-						font-size: $font-size-lg;
-						font-weight: bold;
-						margin-left: 20rpx;
-					}
-				}
-	
-				.street {
-					color: $text-color-assist;
-					font-size: $font-size-sm;
-				}
-			}
-		}
-	}
-	
-	.main {
-		width: 100%;
-		height: 100%;
-		position: relative;
-	}
-	
-	.nav {
-		width: 100%;
-		//height: 212rpx;
-		//height: 140rpx;
-		display: flex;
-		flex-direction: column;
-	
-		.header {
-			width: 100%;
-			display: flex;
-			align-items: center;
-			justify-content: space-between;
-			padding: 20rpx;
-			background-color: #ffffff;
-			height: 140rpx;
-	
-			.left {
-				flex: 1;
-				display: flex;
-				flex-direction: column;
-	
-				.store-name {
-					display: flex;
-					justify-content: flex-start;
-					align-items: center;
-					font-size: $font-size-lg;
-					margin-bottom: 10rpx;
-					.small {
-						font-size: $font-size-sm;
-						color: $text-color-assist;
-					}
-					.iconfont {
-						margin-left: 10rpx;
-						line-height: 100%;
-					}
-				}
-	
-				.store-location {
-					display: flex;
-					justify-content: flex-start;
-					align-items: center;
-					color: $text-color-assist;
-					font-size: $font-size-sm;
-	
-					.iconfont {
-						vertical-align: middle;
-						display: table-cell;
-						color: $color-primary;
-						line-height: 100%;
-					}
-				}
-			}
-	
-			.right {
-				background-color: $bg-color-grey;
-				border-radius: 38rpx;
-				display: flex;
-				align-items: center;
-				font-size: $font-size-sm;
-				padding: 0 38rpx;
-				color: $text-color-assist;
-	
-				.dinein,
-				.takeout {
-					position: relative;
-					display: flex;
-					align-items: center;
-					&.active {
-						padding: 14rpx 38rpx;
-						color: #ffffff;
-						background-color: $color-primary;
-						//background-color: #5A5B5C;
-						border-radius: 38rpx;
-					}
-				}
-	
-				.takeout {
-					margin-left: 20rpx;
-					height: 100%;
-					flex: 1;
-					padding: 14rpx 0;
-				}
-	
-				.dinein.active {
-					margin-left: -38rpx;
-				}
-	
-				.takeout.active {
-					margin-right: -38rpx;
-				}
-			}
-		}
-	
-		.coupon {
-			flex: 1;
-			width: 100%;
-			background-color: $bg-color-primary;
-			font-size: $font-size-base;
-			color: $color-primary;
-			padding: 0 20rpx;
-			display: flex;
-			align-items: center;
-			overflow: hidden;
-	
-			.title {
-				flex: 1;
-				margin-left: 10rpx;
-				overflow: hidden;
-				white-space: nowrap;
-				text-overflow: ellipsis;
-			}
-	
-			.iconfont {
-				line-height: 100%;
-			}
-		}
-	}
-	
-	.content {
-		width: 100%;
-		height: calc(100vh - 212rpx);
-		/* #ifdef H5 */
-		height: calc(100vh - 212rpx - 140rpx);
-		/* #endif */
-		display: flex;
-	
-		.menus {
-			width: 200rpx;
-			height: 100%;
-			overflow: hidden;
-			background-color: $bg-color-grey;
-	
-			.wrapper {
-				width: 100%;
-				height: 100%;
-	
-				.menu {
-					display: flex;
-					align-items: center;
-					justify-content: flex-start;
-					padding: 30rpx 20rpx;
-					font-size: 26rpx;
-					color: $text-color-assist;
-					position: relative;
-	
-					&.current {
-						background-color: #ffffff;
-						//background-color: red;
-						//color: $color-primary;
-						font-weight: bold;
-					}
-	
-					.dot {
-						position: absolute;
-						width: 34rpx;
-						height: 34rpx;
-						line-height: 34rpx;
-						font-size: 22rpx;
-						background-color: #e45656;
-						//background-color: #5A5B5C;
-						color: #ffffff;
-						top: 16rpx;
-						right: 10rpx;
-						border-radius: 100%;
-						text-align: center;
-					}
-				}
-				.menu:last-child {
-					margin-bottom: 200rpx;
-				}
-			}
-		}
-	
-		.goods {
-			flex: 1;
-			height: 100%;
-			overflow: hidden;
-			background-color: #ffffff;
-	
-			.wrapper {
-				width: 100%;
-				height: 100%;
-				padding: 20rpx;
-	
-				.ads {
-					height: calc(300 / 550 * 510rpx);
-	
-					image {
-						width: 100%;
-						height: 100%;
-						border-radius: 8rpx;
-					}
-				}
-	
-				.list {
-					width: 100%;
-					font-size: $font-size-base;
-	
-					.category {
-						width: 100%;
-	
-						.title {
-							padding: 30rpx 0;
-							display: flex;
-							align-items: center;
-							color: $text-color-base;
-	
-							.icon {
-								width: 38rpx;
-								height: 38rpx;
-								margin-left: 10rpx;
-							}
-						}
-					}
-					.category:last-child {
-						margin-bottom: 200rpx;
-					}
-	
-					.items {
-						display: flex;
-						flex-direction: column;
-						padding-bottom: -30rpx;
-	
-						.good {
-							display: flex;
-							align-items: center;
-							//margin-bottom: 30rpx;
-							padding: 15rpx 0;
-							.image {
-								width: 160rpx;
-								height: 160rpx;
-								margin-right: 20rpx;
-								border-radius: 8rpx;
-							}
-	
-							.right {
-								flex: 1;
-								height: 160rpx;
-								overflow: hidden;
-								display: flex;
-								flex-direction: column;
-								align-items: flex-start;
-								justify-content: space-between;
-								padding-right: 14rpx;
-	
-								.name {
-									font-size: $font-size-base;
-									margin-bottom: 10rpx;
-									width: 100%;
-									overflow: hidden;
-									text-overflow: ellipsis;
-									white-space: nowrap;
-								}
-	
-								.tips {
-									width: 100%;
-									height: 40rpx;
-									line-height: 40rpx;
-									overflow: hidden;
-									text-overflow: ellipsis;
-									white-space: nowrap;
-									font-size: $font-size-sm;
-									color: $text-color-assist;
-									margin-bottom: 10rpx;
-								}
-	
-								.price_and_action {
-									width: 100%;
-									display: flex;
-									justify-content: space-between;
-									align-items: center;
-	
-									.price {
-										font-size: $font-size-base;
-										font-weight: 600;
-									}
-	
-									.btn-group {
-										display: flex;
-										justify-content: space-between;
-										align-items: center;
-										position: relative;
-	
-										.btn {
-											padding: 0 20rpx;
-											box-sizing: border-box;
-											font-size: $font-size-sm;
-											height: 44rpx;
-											line-height: 44rpx;
-	
-											&.property_btn {
-												border-radius: 24rpx;
-											}
-	
-											&.add_btn,
-											&.reduce_btn {
-												padding: 0;
-												width: 44rpx;
-												border-radius: 44rpx;
-											}
-										}
-	
-										.dot {
-											position: absolute;
-											background-color: #ffffff;
-											border: 1px solid $color-primary;
-											color: $color-primary;
-											font-size: $font-size-sm;
-											width: 36rpx;
-											height: 36rpx;
-											line-height: 36rpx;
-											text-align: center;
-											border-radius: 100%;
-											right: -12rpx;
-											top: -10rpx;
-										}
-	
-										.number {
-											width: 44rpx;
-											height: 44rpx;
-											line-height: 44rpx;
-											text-align: center;
-										}
-									}
-								}
-							}
-						}
-					}
-				}
-			}
-		}
-	}
-	
-	.modal-box {
-		max-height: 90vh;
-	}
-	
-	.good-detail-modal {
-		width: 100%;
-		height: 100%;
-		display: flex;
-		flex-direction: column;
-	
-		.cover {
-			height: 20rpx;
-			display: flex;
-			justify-content: center;
-			align-items: center;
-	
-			.btn-group {
-				position: absolute;
-				right: 10rpx;
-				top: 0rpx;
-				display: flex;
-				align-items: center;
-				justify-content: space-around;
-				z-index: 210;
-				 
-				image {
-					width: 80rpx;
-					height: 80rpx;
-				}
-			}
-		}
-	
-		.detail {
-			width: 100%;
-			min-height: 1vh;
-			max-height: calc(90vh - 320rpx - 80rpx - 120rpx);
-			position: relative;
-	
-			.image {
-				display: flex;
-				justify-content: center;
-				align-items: center;
-				image {
-					width: 260rpx;
-					height: 260rpx;
-				}
-			}
-			.wrapper {
-				width: 100%;
-				height: 100%;
-				overflow: hidden;
-	
-				.basic {
-					padding: 0 20rpx 30rpx;
-					display: flex;
-					flex-direction: column;
-					.name {
-						font-size: $font-size-base;
-						color: $text-color-base;
-						margin-bottom: 10rpx;
-					}
-					.tips {
-						font-size: $font-size-sm;
-						color: $text-color-grey;
-					}
-				}
-	
-				.properties {
-					width: 100%;
-					border-top: 2rpx solid $bg-color-grey;
-					padding: 10rpx 30rpx 0;
-					display: flex;
-					flex-direction: column;
-	
-					.property {
-						width: 100%;
-						display: flex;
-						flex-direction: column;
-						margin-bottom: 30rpx;
-						padding-bottom: -16rpx;
-	
-						.title {
-							width: 100%;
-							display: flex;
-							justify-content: flex-start;
-							align-items: center;
-							margin-bottom: 20rpx;
-	
-							.name {
-								font-size: 26rpx;
-								color: $text-color-base;
-								margin-right: 20rpx;
-							}
-	
-							.desc {
-								flex: 1;
-								font-size: $font-size-sm;
-								color: $color-primary;
-								overflow: hidden;
-								text-overflow: ellipsis;
-								white-space: nowrap;
-							}
-						}
-	
-						.values {
-							width: 100%;
-							display: flex;
-							flex-wrap: wrap;
-	
-							.value {
-								border-radius: 8rpx;
-								//background-color: $bg-color-grey;
-								border: solid 1rpx;
-								padding: 10rpx 35rpx;
-								font-size: 26rpx;
-								color: $text-color-assist;
-								margin-right: 16rpx;
-								margin-bottom: 16rpx;
-	
-								&.default {
-									border: solid 2rpx;
-									border-color: $color-primary;
-									//background-color: $color-primary;
-									color: $text-color-base;
-								}
-							}
-						}
-					}
-				}
-			}
-		}
-	
-		.action {
-			display: flex;
-			align-items: center;
-			justify-content: space-between;
-			background-color: $bg-color-grey;
-			height: 120rpx;
-			padding: 0 26rpx;
-	
-			.left {
-				flex: 1;
-				display: flex;
-				flex-direction: column;
-				justify-content: center;
-				margin-right: 20rpx;
-				overflow: hidden;
-	
-				.price {
-					font-size: $font-size-lg;
-					color: $text-color-base;
-				}
-	
-				.props {
-					color: $text-color-assist;
-					font-size: 24rpx;
-					width: 100%;
-					overflow: hidden;
-					text-overflow: ellipsis;
-					white-space: nowrap;
-				}
-			}
-			.btn-group {
-				display: flex;
-				align-items: center;
-				justify-content: space-around;
-	
-				.number {
-					font-size: $font-size-base;
-					width: 44rpx;
-					height: 44rpx;
-					line-height: 44rpx;
-					text-align: center;
-				}
-	
-				.btn {
-					padding: 0;
-					font-size: $font-size-base;
-					width: 44rpx;
-					height: 44rpx;
-					line-height: 44rpx;
-					border-radius: 100%;
-				}
-			}
-		}
-	
-		.add-to-cart-btn {
-			display: flex;
-			justify-content: center;
-			align-items: center;
-			background-color: $color-primary;
-			color: $text-color-white;
-			font-size: $font-size-base;
-			height: 80rpx;
-			border-radius: 0 0 12rpx 12rpx;
-		}
-	}
-	
-	.cart-box {
-		position: fixed;
-		bottom: 5rpx;
-		/* #ifdef H5 */
-		bottom:var(--window-bottom);
-		//bottom: 100rpx;
-		/* #endif */
-		left: 30rpx;
-		right: 30rpx;
-		height: 80rpx;
-		border-radius: 48rpx;
-		box-shadow: 0 0 20rpx rgba(0, 0, 0, 0.2);
-		background-color: #000;
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		z-index: 99;
-	
-		.cart-img {
-			width: 83rpx;
-			height: 83rpx;
-			position: relative;
-			//margin-top: -8rpx;
-		}
-	
-		.pay-btn {
-			height: 100%;
-			padding: 0 30rpx;
-			color: #ffffff;
-			border-radius: 0 50rpx 50rpx 0;
-			display: flex;
-			align-items: center;
-			font-size: $font-size-base;
-		}
-	
-		.mark {
-			padding-left: 46rpx;
-			margin-right: 30rpx;
-			position: relative;
-	
-			.tag {
-				//background-color: $color-warning;
-				background-color: #e45656;;
-				color: $text-color-white;
-				display: flex;
-				justify-content: center;
-				align-items: center;
-				font-size: $font-size-sm;
-				position: absolute;
-				right: -10rpx;
-				top: 10rpx;
-				border-radius: 100%;
-				padding: 4rpx;
-				width: 35rpx;
-				height: 35rpx;
-				opacity: 0.9;
-			}
-		}
-	
-		.price {
-			flex: 1;
-			color: #fff;
-		}
-	}
-	
-	.cart-popup {
-		.top {
-			background-color: $bg-color-primary;
-			//color: $color-primary;
-			color: #5A5B5C;
-			padding: 10rpx 30rpx;
-			font-size: 24rpx;
-			text-align: right;
-		}
-		.cart-list {
-			background-color: #ffffff;
-			width: 100%;
-			overflow: hidden;
-			min-height: 1vh;
-			max-height: 60vh;
-	
-			.wrapper {
-				height: 100%;
-				display: flex;
-				flex-direction: column;
-				padding: 0 30rpx;
-				//margin-bottom: 10rpx;
-	
-				.item {
-					display: flex;
-					justify-content: space-between;
-					align-items: center;
-					padding: 30rpx 0;
-					position: relative;
-	
-					&::after {
-						content: ' ';
-						position: absolute;
-						bottom: 0;
-						left: 0;
-						width: 100%;
-						background-color: $border-color;
-						height: 2rpx;
-						transform: scaleY(0.6);
-					}
-	
-					.left {
-						flex: 1;
-						display: flex;
-						flex-direction: column;
-						overflow: hidden;
-						margin-right: 30rpx;
-	
-						.name {
-							font-weight: bolder;
-							font-size: $font-size-sm;
-							color: $text-color-base;
-						}
-						.props {
-							color: $text-color-assist;
-							font-size: 24rpx;
-							overflow: hidden;
-							text-overflow: ellipsis;
-							white-space: nowrap;
-						}
-						.price{
-							font-size: $font-size-sm;
-							color: #e45656;
-						}
-					}
-	
-					.center {
-						margin-right: 120rpx;
-						font-size: $font-size-base;
-					}
-	
-					.right {
-						display: flex;
-						align-items: center;
-						justify-content: space-between;
-	
-						.btn {
-							width: 46rpx;
-							height: 46rpx;
-							border-radius: 100%;
-							padding: 0;
-							text-align: center;
-							line-height: 46rpx;
-						}
-	
-						.number {
-							font-size: $font-size-base;
-							width: 46rpx;
-							height: 46rpx;
-							text-align: center;
-							line-height: 46rpx;
-						}
-					}
-				}
-			}
-		}
-	}
-	
-	.backgroud-grey {
-		background-color: #e1e4e4;
-		padding: 15rpx !important;
-	}
-</style>

+ 0 - 560
yshop/yshop-drink-uniapp/pages/mine/mine.vue

@@ -1,560 +0,0 @@
-<template>
-	<layout>
-		<view class="container">
-			<view class="my-background">
-				<view  class="user-top">
-					<view class="flex justify-between p-3 align-center">
-						<view class="flex">
-							<image :src="isLogin ? member.avatar ? member.avatar : '/static/images/logo.png' : '/static/images/logo.png'" 
-							class="rounded-circle avatar-img" @tap="serv({type:'pages',pages:'/pages/components/pages/mine/userinfo'})"></image>
-							<view class="flex flex-column text-white justify-center align-cente ml-2" v-if="isLogin">
-								<text class="nick-text">{{ member.nickname }}</text>
-								<text class="id-text">用户id:{{ member.id }}</text>
-							</view>
-							<view class="flex flex-column justify-center align-cente ml-2" v-else @tap="login">
-								<text class="nick-text"><text style="color:#059825;">去登录</text>获取更多会员权益</text>
-							</view>
-						</view>
-					</view>
-					<view class="vip-box"  v-if="isLogin">
-						<view class="vip-box-content py-3 px-2 flex-column" v-if="member.cardId > 0">
-							<view class=" flex justify-between align-center px-3 " @tap="goVip">
-								<view class="flex align-center">
-									<image src="/static/images/mine/vip.png" class="icon-img"></image>
-									<view class="text-white font-size-smaller ml-1">{{ member.cardName }}</view>
-								</view>
-								<view class="text-white font-size-smaller"><view class="vip-btn2">查看详情</view></view>
-							</view>		
-						</view>
-						<view class="vip-box-content py-4 px-2" v-else>
-							<view class="vip-box-left flex align-center justify-center">
-								<view class="flex flex-column w-30 align-center ">
-									<view style="width: 60rpx;height: 70rpx;"><image src="/static/images/c1.png" style="width: 58rpx;height: 58rpx;"></image> </view>
-									<text class="font-size-smaller ">赠送积分</text>
-								</view>
-								<view class="flex flex-column w-30 align-center justify-center">
-									<view style="width: 60rpx;height: 70rpx;"><image src="/static/images/c3.png" style="width: 60rpx;height: 58rpx;"></image></view>
-									<text class="font-size-smaller ">享受折扣</text>
-								</view>
-								<view class="flex flex-column w-30 align-center">
-									<view style="width: 60rpx;height: 70rpx;"><image src="/static/images/c2.png" style="width: 60rpx;height: 60rpx;"></image></view>
-									<text class="font-size-smaller ">赠送余额</text>
-								</view>
-							</view>
-							<view class="vip-box-right flex align-center justify-center " @tap="goVip">
-								<view class="vip-btn">升级尊享</view>
-							</view>		
-						</view>
-					</view>
-				</view>
-				<view  class="px-3 mt-1">
-					
-					<!-- user box begin -->
-					<view class="d-flex flex-column bg-white user-box">
-
-						<!-- user grid begin -->
-						<view class="w-100 d-flex align-items-center just-content-center">
-							<view class="user-grid" @tap="serv({type:'pages',pages:'/pages/components/pages/coupons/coupons'})">
-								<view class="value font-size-extra-lg font-weight-bold text-color-base">
-									{{ isLogin ? member.couponCount : 0}}
-								</view>
-								<view class="font-size-sm text-color-assist">优惠券</view>
-							</view>
-							<view><uv-line direction="col" length="50"></uv-line></view>
-							<view class="user-grid"  @tap="serv({type:'pages', pages: '/pages/components/pages/balance/bill?cate=1'})">
-								<view class="value font-size-extra-lg font-weight-bold text-color-base">
-									{{ isLogin ? member.integral : 0 }}
-								</view>
-								<view class="font-size-sm text-color-assist">积分</view>
-							</view>
-							<view><uv-line direction="col" length="50"></uv-line></view>
-							<view class="user-grid" @tap="serv({type:'pages',pages:'/pages/components/pages/balance/balance'})">
-								<view class="value font-size-extra-lg font-weight-bold text-color-base">
-									{{ isLogin ? member.nowMoney : 0 }}
-								</view>
-								<view class="font-size-sm text-color-assist">余额</view>
-							</view>
-						</view>
-						<!-- user grid end -->
-					</view>
-					<!-- user box end -->
-
-				</view>
-				
-				<view  class="px-3 mt-1">
-					
-					<!-- user box begin -->
-					<view class="d-flex flex-column bg-white user-box">
-				
-						<!-- user grid begin -->
-						<view class="w-100 d-flex align-items-center just-content-center py-2">
-							<view class="w-50 flex justify-center align-center" @tap="toDetail('/pages/components/pages/orders/orders',99)">
-								<view class="">
-									<image src="/static/images/my_order.png" style="height: 80rpx;width: 70rpx;"></image>
-								</view>
-								<view class="flex flex-column justify-center align-center">
-									<text>我的订单</text>
-									<text class=" text-color-assist mt-1" style="font-size: 20rpx;">这里查看你的订单</text>
-								</view>
-							</view>
-							<view><uv-line direction="col" length="50"></uv-line></view>
-							<view class="w-50 flex justify-center align-center"  @tap="toDetail('/pages/components/pages/coupons/coupons',4)">
-								<view class="">
-									<image src="/static/images/my_coupon.png" style="height: 70rpx;width: 75rpx;"></image>
-								</view>
-								<view class="flex flex-column justify-center align-center">
-									<text>领劵中心</text>
-									<text class=" text-color-assist mt-1" style="font-size: 20rpx;">用券购买更划算</text>
-								</view>
-							</view>
-						</view>
-						<!-- user grid end -->
-					</view>
-					<!-- user box end -->
-				
-				</view>
-			
-			</view>
-			
-			<!-- service box begin -->
-			<view class="service-box">
-				<view class="font-size-lg text-color-base font-weight-bold" style="margin-bottom: 50rpx;">我的服务</view>
-				<view class="u-m-t-20">
-					<uv-grid :border="false" :col="4">
-						<block v-for="(item,index) in services" :key="index">
-							<uv-grid-item  v-if="item.type == 'call'" v-on:click="makePhoneCall(item.phone)" :customStyle="{paddingBottom:50+'rpx'}">
-								<image :src="item.image" style="width: 40rpx;height: 40rpx;" ></image>
-								<text class="font-size-sm text-color-assist my-2">{{item.name}}</text>
-							</uv-grid-item>
-							<uv-grid-item v-else @tap="serv(item)" :customStyle="{paddingBottom:50+'rpx'}">
-								<image :src="item.image" style="width: 40rpx;height: 40rpx;" ></image>
-								<text class="font-size-sm text-color-assist my-2">{{item.name}}</text>			
-							</uv-grid-item>
-						</block>
-					</uv-grid>
-				</view>
-			</view>
-		</view>
-	</layout>
-</template>
-
-<script setup>
-import {
-  ref,
-  computed
-} from 'vue'
-import { useMainStore } from '@/store/store'
-import { storeToRefs } from 'pinia'
-import { onLoad,onShow} from '@dcloudio/uni-app'
-import { formatDateTime,kmUnit } from '@/utils/util'
-import {
-  userGetUserInfo,
-  mineService
-} from '@/api/user'
-import {
-	check
-} from '@/api/merchant'
-const main = useMainStore()
-const { member,isLogin } = storeToRefs(main)
-
-const title = ref('个人中心')
-const services = ref([])
-
-
-
-const growthValue = computed(() => { 
-	if (!isLogin.value) return 0
-	const {
-		currentValue,
-		needValue
-	} = member.value
-	return currentValue / (currentValue + needValue) * 100
-})
-
-onLoad(() => {
-	getServices();
-})	
-onShow(() => {
-	getUserInfo();
-})
-
-const toDetail = (page,index) => {
-	uni.navigateTo({
-		url: page + '?current=' + index
-	})
-}
-const getUserInfo = async() => {
-	if (isLogin.value) {
-		let data = await userGetUserInfo();
-		if (data) {
-			main.SET_MEMBER(data);
-		}
-	}
-}
-const getServices = async() => {
-	let data = await mineService();
-	if (data) {
-		services.value = data;
-	}
-}
-const makePhoneCall = (phoneNumber) => {
-	uni.makePhoneCall({
-		phoneNumber: phoneNumber,
-	})
-}
-const login = () => {
-	uni.navigateTo({
-		url: '/pages/components/pages/login/login'
-	})
-}
-// const packages = () => {
-// 	if (!isLogin.value) {
-// 		login()
-// 		return
-// 	}
-// 	uni.navigateTo({
-// 		url: '/pages/components/pages/packages/index'
-// 	})
-//}
-const serv = async(item) => {
-	switch (item.type) {
-		case 'pages':
-		    if(item.pages == 'no'){
-				uni.showToast({
-					title: '开发中......',
-					icon: 'error'
-				})
-				return
-			}
-			if (!isLogin.value) {
-				login()
-				return
-			}
-			if(item.pages == '/pages/components/pages/merchant/index'){
-				let res = await check()
-				if(res == 9999){
-					uni.showModal({
-						title: '提示',
-						content: '演示环境:进入默认yshop店铺商家,确定进入?',
-						success:  function (res) {
-							if (res.confirm) {
-								uni.navigateTo({
-									url: item.pages
-								})
-							} else if (res.cancel) {
-								return
-							}
-						}
-					});
-					
-					return
-				}
-				if(!res){
-					return
-				}
-			}
-			
-			uni.navigateTo({
-				url: item.pages
-			})
-			break;
-		case 'miniprogram':
-			uni.navigateToMiniProgram({
-				appId: item.app_id
-			})
-			break;
-		case 'menu':
-			uni.navigateTo({
-				url: '/pages/components/pages/mine/service?id=' + item.id + '&name=' + item.name
-			})
-			break;
-		case 'content':
-			uni.navigateTo({
-				url: '/pages/components/pages/mine/content?id=' + item.id + '&name=' + item.name
-			})
-			break;
-	}
-}
-const goVip = () => {
-	
-	if(member.value.cardId > 0){
-		uni.navigateTo({
-			url: '/pages/components/pages/vip/detail?id=' + member.value.cardId
-		})
-	}else{
-		uni.navigateTo({
-			url: '/pages/components/pages/vip/vip'
-		})
-	}
-	
-}
-
-
-</script>
-
-<style lang="scss" scoped>
-	page {
-		height: auto;
-		min-height: 100%;
-	}
-	
-	.user-top{
-		padding-top:  calc(30rpx + var(--status-bar-height));
-	}
-	
-	.my-background {
-		position: relative;
-		width: 100%;
-		background: linear-gradient(180deg, #b7edcb 0, #ffffff 100%, #ffffff 100%) !important
-	}
-	
-	.avatar-img {
-		width: 100rpx;
-		height: 100rpx;
-	}
-	.nick-text {
-		font-size: 24rpx;
-		color: #333;
-		//font-weight: bold;
-	}
-	.id-text {
-		font-size: 22rpx;
-		color: #333;
-	}
-	.icon-img {
-		width: 50rpx;
-		height: 50rpx;
-	}
-	.vip-box {
-		padding: 0 30rpx;
-		
-		// position: relative;
-		
-		.vip-box-content {
-			border-radius: 20rpx;
-			background: linear-gradient(180deg, #25140a 0, #402b16 100%, #402b16 100%) !important;
-			//height: 100rpx;
-			display: flex;
-			.vip-box-left{
-				//position: absolute;top: 38rpx;left:60rpx;z-index: 2;
-				width: 70%;
-				color: #f4dba2;
-			}
-			.vip-box-right {
-				width: 30%;
-				color: #fff;
-				//color: #ffffff;position: absolute;top: 45rpx;right:60rpx;z-index: 2;
-			}
-		}
-		.vip-btn{
-			background-color: #f4dba2;
-			padding: 10rpx 30rpx;
-			font-size: 22rpx;
-			border-radius: 30rpx;
-			color: #25140a;
-		}
-		.vip-btn2{
-			background-color: #f4dba2;
-			padding: 8rpx 25rpx;
-			font-size: 20rpx;
-			border-radius: 30rpx;
-			color: #25140a;
-		}
-	}
-	.font-size-26 {
-		font-size: 28rpx;
-	}
-	.font-size-24 {
-		font-size: 24rpx;
-	}
-	.vip-bg-img {
-		position: absolute;
-		top: 10rpx;
-		left: 0;
-		right:0;
-		margin:auto;
-		width:700rpx
-	}
-	
-	.item-image {
-		width: 40rpx;
-		height: 40rpx;
-	}
-
-	.bg {
-		width: 100%;
-		height: calc(410 / 594 * 750rpx);
-	}
-
-	.hym-btn {
-		position: absolute;
-		top: 40rpx;
-		right: 40rpx;
-		color: $color-primary;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		border-radius: 50rem;
-		font-size: $font-size-sm;
-		box-shadow: 0 0 20rpx rgba(66, 66, 66, 0.1);
-
-		&::after {
-			border: 0;
-		}
-
-		image {
-			width: 30rpx;
-			height: 30rpx;
-			margin-right: 10rpx;
-		}
-	}
-
-	.user-box {
-		position: relative;
-		border-radius: 8rpx;
-		margin-bottom: 10rpx;
-		//margin-top: 40rpx;
-		box-shadow: $box-shadow;
-	}
-
-	// .avatar {
-	// 	position: relative;
-	// 	margin-top: -35rpx;
-	// 	margin-left: 35rpx;
-	// 	margin-right: 35rpx;
-	// 	width: 160rpx;
-	// 	height: 160rpx;
-	// 	border-radius: 20rpx;
-	// 	display: flex;
-	// 	align-items: center;
-	// 	justify-content: center;
-	// 	background-color: #FFFFFF;
-	// 	box-shadow: 0 0 20rpx rgba($color: #000000, $alpha: 0.2);
-
-	// 	image {
-	// 		width: 140rpx;
-	// 		height: 140rpx;
-	// 		border-radius: 100%;
-	// 	}
-
-	// 	.badge {
-	// 		position: absolute;
-	// 		right: -10rpx;
-	// 		bottom: -10rpx;
-	// 		background-color: #FFFFFF;
-	// 		border-radius: 50rem;
-	// 		display: flex;
-	// 		align-items: center;
-	// 		justify-content: center;
-	// 		color: $color-warning;
-	// 		font-size: 24rpx;
-	// 		padding: 8rpx 16rpx;
-	// 		box-shadow: 0 0 20rpx rgba($color: #000000, $alpha: 0.2);
-
-	// 		image {
-	// 			width: 30rpx;
-	// 			height: 30rpx;
-	// 		}
-	// 	}
-	// }
-
-	.level-benefit {
-		margin-left: 35rpx;
-		padding: 10rpx 0 10rpx 30rpx;
-		border-radius: 50rem 0 0 50rem;
-	}
-
-	.user-grid {
-		width: 33%;
-		padding: 30rpx;
-		display: flex;
-		flex-direction: column;
-		align-items: center;
-		justify-content: center;
-
-		.value {
-			margin-bottom: 20rpx;
-		}
-	}
-
-	.level-benefit-box {
-		border-radius: 8rpx;
-		margin-bottom: 30rpx;
-		box-shadow: 0 10rpx 8rpx rgba($color: #878889, $alpha: 0.1);
-		width: 100%;
-		display: flex;
-		padding: 30rpx;
-		flex-direction: column;
-		background-color: #FFFFFF;
-
-		.row {
-			display: flex;
-			padding: 30rpx 0 20rpx;
-			justify-content: space-around;
-			align-items: center;
-
-			.grid {
-				width: 20%;
-				display: flex;
-				flex-direction: column;
-				font-size: $font-size-sm;
-				color: $text-color-assist;
-				align-items: center;
-
-				image {
-					width: 80rpx;
-					height: 80rpx;
-					margin-bottom: 10rpx;
-				}
-
-			}
-		}
-	}
-
-
-	.banner {
-		width: 100%;
-		border-radius: 8rpx;
-		margin-bottom: 30rpx;
-	}
-
-	.service-box  {
-		width: 100%;
-		background-color: #FFFFFF;
-		padding: 32rpx 30rpx 10rpx;
-		box-shadow: $box-shadow;
-
-		// .row {
-		// 	display: flex;
-		// 	flex-wrap: wrap;
-		// 	color: $text-color-assist;
-		// 	font-size: $font-size-sm;
-		// 	padding-bottom: -40rpx;
-
-		// 	.grid {
-		// 		display: flex;
-		// 		flex-direction: column;
-		// 		justify-content: center;
-		// 		align-items: center;
-		// 		margin-bottom: 40rpx;
-		// 		width: 25%;
-		// 		position: relative;
-
-		// 		image {
-		// 			width: 80rpx;
-		// 			height: 80rpx;
-		// 			margin-bottom: 20rpx;
-		// 		}
-		// 	}
-
-		// 	.opacity-0 {
-		// 		position: absolute;
-		// 		width: 100%;
-		// 		height: 100%;
-		// 		opacity: 0;
-		// 		z-index: 10;
-		// 	}
-
-		// }
-	}
-</style>

+ 0 - 206
yshop/yshop-drink-uniapp/pages/order/order.vue

@@ -1,206 +0,0 @@
-<template>
-	<!-- #ifdef MP-WEIXIN -->
-	<uv-navbar
-	  :fixed="false"
-	  :title="title"
-	  left-arrow
-	  @leftClick="$onClickLeft"
-	/>
-	<!-- #endif -->
-	<view class="container">
-		<view class="bg-white flex px-2 py-1">
-			<view class="mr-1"><uv-button @click="change('all')" :type="typeStr == 'all' ? 'success' : 'info' " :plain="true" :hairline="true" text="全部订单" size="small"></uv-button></view>
-			<view class="mr-1"><uv-button @click="change('takein')" :type="typeStr == 'takein' ? 'success' : 'info' " :plain="true" :hairline="true" text="到店自取" size="small"></uv-button></view>
-			<view class="mr-1"><uv-button @click="change('takeout')" :type="typeStr == 'takeout' ? 'success' : 'info' " :plain="true" :hairline="true" text="外卖到家" size="small"></uv-button></view>
-			<view><uv-button @click="change('desk')" :type="typeStr == 'desk' ? 'success' : 'info' " :plain="true" :hairline="true" text="堂食就餐" size="small"></uv-button></view>
-		</view>
-		<view class="orders-list d-flex flex-column w-100" style="padding: 20rpx; padding-bottom: 0;" v-if="orders.length > 0">
-			<view class="order-item" v-for="(item, index) in orders" :key="index" style="margin-bottom: 30rpx;" >
-				<list-cell :hover="false">
-					<view class="w-100 d-flex align-items-center">
-						<view class="flex-fill d-flex flex-column">
-							<view class="font-size-lg text-color-base" style="margin-bottom: 20rpx;">
-								{{ item.shop.name }}
-							</view>
-							<view class="flex align-center">
-								<view class="mr-1">
-									<uv-tags text="预约" plain size="mini" type="error" v-if="item.orderType == 'due'"></uv-tags>
-									<uv-tags text="堂食" plain size="mini" type="error" v-if="item.orderType == 'desk'"></uv-tags>
-									<uv-tags text="自取" plain size="mini" type="error" v-if="item.orderType == 'takein'"></uv-tags>
-									<uv-tags text="外卖" plain size="mini" type="error" v-if="item.orderType == 'takeout'"></uv-tags>
-								</view>
-								<view class="font-size-sm text-color-assist">订单编号:{{ item.orderId }}</view>
-								<!-- <view class="font-size-base text-color-assist" v-if="item.orderType == 'desk'">桌号:{{ item.deskNumber }}</view>
-								<view class="font-size-base text-color-assist" v-else>取餐号:{{ item.numberId }}</view> -->
-							</view>	
-						</view>
-						<view class="font-size-medium text-color-primary">
-							<text>{{ item.statusDto.title }}</text>
-						</view>
-					</view>
-				</list-cell>
-				<list-cell :hover="false" last>
-					<view class="w-100 d-flex flex-column">
-						<block>
-							<view class="w-100 text-truncate font-size-lg text-color-base" style="margin-bottom: 20rpx;"
-							v-if="item.cartInfo.length <= 3">
-								<view class="flex mb-2" v-for="(good,index) in item.cartInfo" :key="index">  
-									<image :src="good.image" mode="aspectFill" class="image"></image>
-									<view class="flex flex-column">
-										<view class="font-size-medium mt-1 text-color-base">{{ good.title }}</view>
-										<view class="font-size-sm mt-1">{{ good.spec }}</view>
-										<view class="font-size-sm mt-1">×{{ good.number }}  ¥{{ good.price }}</view>
-									</view>
-								</view>
-							</view>
-							<view class="w-100 text-truncate font-size-lg text-color-base flex flex-wrap" style="margin-bottom: 20rpx;" v-else>
-								<view class="flex mb-2 justify-center" style="margin-right: 3rpx;" v-for="(good,index) in item.cartInfo" :key="index">  
-									<image :src="good.image" mode="aspectFill" class="image"></image>
-								</view>
-							</view>
-						</block>
-						<view class="d-flex justify-content-between align-items-center" style="margin-bottom: 30rpx;">
-							<view class="font-size-sm text-color-assist">
-								{{formatDateTime(item.createTime) }}
-							</view>
-							<view class="d-flex font-size-sm text-color-base align-items-center">
-								<view style="margin-right: 10rpx;">共{{ goodsNum(item.cartInfo) }}件商品,实付</view>
-								<view class="font-size-lg">¥{{ item.payPrice }}</view>
-							</view>
-						</view>
-						<view class="d-flex align-items-center justify-content-end">
-							<view>
-								<button v-if="item.paid > 0 && item.status < 2 && item.refundStatus == 0" class="left-margin"  plain size="mini" @tap.stop="receive(item)">确认收到餐</button>
-								<button class="left-margin"  plain size="mini" @tap="detail(item.orderId)">订单详情</button>
-							</view>
-						</view>
-					</view>
-				</list-cell>
-			</view>
-		</view>
-		<uv-empty v-else mode="order" text="您暂时还没有订单哦~">
-			<uv-button text="去点单" @click="addFood" color="#059825" shape="circle"  customStyle="padding:0 120rpx;margin-top:30rpx"></uv-button>
-		</uv-empty>
-	</view>
-</template>
-
-
-<script setup>
-import {
-  ref,
-  computed
-} from 'vue'
-import { useMainStore } from '@/store/store'
-import { storeToRefs } from 'pinia'
-import { onShow,onLoad,onPullDownRefresh,onReachBottom} from '@dcloudio/uni-app'
-import { formatDateTime,kmUnit } from '@/utils/util'
-import {
-  orderGetOrders,
-  orderReceive,
-  cancelDue
-} from '@/api/order'
-const main = useMainStore()
-const { isLogin } = storeToRefs(main)
-const title = ref('我的订单')
-
-const page = ref(1)
-const pageSize = ref(10)
-const orders = ref([])
-const typeStr =  ref('all')
-const type = ref(-1)
-const orderType = ref('all')
-
-const orderGoodsName = computed(() => { //计算单个饮品添加到购物车的数量
-	return (goods) => {
-		let arr = []
-		goods.forEach(good => arr.push(good.title + '*' + good.number))
-		return arr.join(',')
-	}
-})
-const goodsNum = computed(() => { //计算单个饮品添加到购物车的数量
-	return (goods) => {
-		let num = 0;
-		goods.forEach(good => num += parseInt(good.number))
-		return num;
-	}
-})
-
-onLoad((option) => {
-	if(!isLogin.value) {
-		uni.navigateTo({url: '/pages/components/pages/login/login'})
-	}
-	getOrders(false)
-})
-onPullDownRefresh(() => {
-	 getOrders(false)
-})
-onReachBottom(() => {
-	getOrders(false)
-})
-
-const addFood = () => {
-	uni.switchTab({
-		url: '/pages/menu/menu'
-	}) 
-}
-
-// tab栏切换
-const change = (e) => {
-	typeStr.value = e
-	orderType.value = e
-	getOrders(true)
-}
-
-
-const getOrders = async(isRefresh = false) => {
-	uni.showLoading({
-		title: '加载中'
-	})
-	if(isRefresh) {
-		orders.value = []
-		page.value = 1
-	}
-	let ordersData = await orderGetOrders({page:page.value, limit:pageSize.value,type:type.value,orderType:orderType.value});
-
-	if(ordersData) {
-		orders.value = orders.value.concat(ordersData)
-		page.value += 1
-		
-	}
-	uni.stopPullDownRefresh();
-	uni.hideLoading()
-}
-const detail = (id) => {
-	uni.navigateTo({
-		url: '/pages/components/pages/orders/detail?id=' + id
-	})
-}
-// 确认收到货
-const receive  = async(order) => {
-	let data = await orderReceive({uni:order.orderId});
-	if (data) {
-		await getOrders(true)
-	}
-}
-
-const cancelDueOrder = async(id) => {
-	let data = await cancelDue({id:id});
-	if (data) {
-		await getOrders(true)
-	}
-}
-	
-
-</script>
-
-<style lang="scss" scoped>
-	.left-margin {
-		margin-left: 10rpx;
-	}
-	.image {
-		width: 130rpx;
-		height: 130rpx;
-		margin-right: 30rpx;
-		border-radius: 8rpx;
-	}
-</style>

+ 0 - 23
yshop/yshop-drink-uniapp/static/iconfont/iconfont.css

@@ -1,23 +0,0 @@
-@font-face {
-  font-family: "iconfont"; /* Project id 4205200 */
-  src: url('~@/static/iconfont/iconfont.woff2?t=1691643169117') format('woff2'),
-       url('~@/static/iconfont/iconfont.woff?t=1691643169117') format('woff'),
-       url('~@/static/iconfont/iconfont.ttf?t=1691643169117') format('truetype');
-}
-
-.iconfont {
-  font-family: "iconfont" !important;
-  font-size: 16px;
-  font-style: normal;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-}
-
-.icon-waimai-:before {
-  content: "\e607";
-}
-
-.icon-tangshi:before {
-  content: "\e645";
-}
-

+ 0 - 270
yshop/yshop-drink-uniapp/static/iconfont/iconfont.scss

@@ -1,270 +0,0 @@
-
-@font-face {
-  font-family: 'iconfont-yshop';  
-  src: url('//at.alicdn.com/t/font_2012069_r7oux4ay0ls.eot');
-  src: url('//at.alicdn.com/t/font_2012069_r7oux4ay0ls.eot?#iefix') format('embedded-opentype'),
-  url('//at.alicdn.com/t/font_2012069_r7oux4ay0ls.woff2') format('woff2'),
-  url('//at.alicdn.com/t/font_2012069_r7oux4ay0ls.woff') format('woff'),
-  url('//at.alicdn.com/t/font_2012069_r7oux4ay0ls.ttf') format('truetype'),
-  url('//at.alicdn.com/t/font_2012069_r7oux4ay0ls.svg#iconfont-yshop') format('svg');
-
-}
-
-.iconfont-yshop {
-	font-family: 'iconfont-yshop' !important;
-	font-size: 16px;
-	font-style: normal;
-	-webkit-font-smoothing: antialiased;
-	-moz-osx-font-smoothing: grayscale;
-	color: #059825;
-}
-.icon-alipay:before {
-	content: '\e60a';
-}
-.icon-shop:before {
-	content: '\e664';
-}
-.icon-takein:before {
-	content: '\e666';
-}
-.icon-takeout:before {
-	content: '\e667';
-}
-.icon-location:before {
-	content: '\e633';
-}
-.icon-mobile:before {
-	content: '\e602';
-}
-.icon-box:before {
-	content: '\e665';
-}
-.icon-lamp:before { 
-	content: '\e668';
-}
-.icon-doorbell:before {
-	content: '\e662';
-}
-.icon-daojishi:before {
-	content: '\e625';
-}
-
-@font-face {
-	font-family: 'iconfont';
-	src: url('//at.alicdn.com/t/font_1789197_z1gzlwq7idq.ttf?t=1589441233693') format('truetype');
-}
-
-.iconfont {
-	font-family: 'iconfont' !important;
-	font-size: 16px;
-	font-style: normal;
-	-webkit-font-smoothing: antialiased;
-	-moz-osx-font-smoothing: grayscale;
-}
-
-.iconshoucang:before {
-	content: '\e667';
-}
-
-.iconshoucangfill:before {
-	content: '\e6c9';
-}
-
-.iconjifen:before {
-	content: '\e642';
-}
-
-.iconradio-button-off:before {
-	content: '\e688';
-}
-
-.iconradio-button-on:before {
-	content: '\e689';
-}
-
-.iconhelp:before {
-	content: '\e752';
-}
-
-.iconwxpay:before {
-	content: '\e611';
-}
-
-.iconbalance:before {
-	content: '\e619';
-}
-
-.iconadd-select:before {
-	content: '\e7b0';
-}
-
-.iconsami-select:before {
-	content: '\e7b1';
-}
-
-.iconmap:before {
-	content: '\e758';
-}
-
-.iconsuccess:before {
-	content: '\e767';
-}
-
-.iconsuccess-fill:before {
-	content: '\e78d';
-}
-
-.iconiconset0136:before {
-	content: '\e623';
-}
-
-.iconzan:before {
-	content: '\e640';
-}
-
-.iconjifenqiandao:before {
-	content: '\e6a6';
-}
-
-.iconshouyeshouye:before {
-	content: '\e606';
-}
-
-.icondaohang:before {
-	content: '\e641';
-}
-
-.iconwodelianxikefu:before {
-	content: '\e671';
-}
-
-.iconwodexinyuan:before {
-	content: '\e675';
-}
-
-.iconphone:before {
-	content: '\e6dd';
-}
-
-.icondingdan:before {
-	content: '\e645';
-}
-
-.iconliwu:before {
-	content: '\e61c';
-}
-
-.iconyinpinyinliao:before {
-	content: '\e60d';
-}
-
-.iconyinpin:before {
-	content: '\e70b';
-}
-
-.iconwaimaixinxi:before {
-	content: '\e685';
-}
-
-.iconico:before {
-	content: '\e646';
-}
-
-.iconwode:before {
-	content: '\e616';
-}
-
-.icongengduofuwu:before {
-	content: '\e607';
-}
-
-.iconqucan:before {
-	content: '\e625';
-}
-
-.iconyou:before {
-	content: '\e618';
-}
-
-.iconshouhuodizhi:before {
-	content: '\e666';
-}
-
-.iconshangcheng:before {
-	content: '\e63b';
-}
-
-.iconadd:before {
-	content: '\e742';
-}
-
-.iconarrow-right:before {
-	content: '\e743';
-}
-
-.iconarrow-lift:before {
-	content: '\e744';
-}
-
-.iconarrow-up:before {
-	content: '\e745';
-}
-
-.iconclose:before {
-	content: '\e747';
-}
-
-.iconleftbutton:before {
-	content: '\e755';
-}
-
-.iconreduce:before {
-	content: '\e75e';
-}
-
-.iconseleted:before {
-	content: '\e763';
-}
-
-.iconRightbutton:before {
-	content: '\e765';
-}
-
-.iconleftbutton-fill:before {
-	content: '\e782';
-}
-
-.iconRightbutton-fill:before {
-	content: '\e78a';
-}
-
-.iconarrow-down:before {
-	content: '\e7b2';
-}
-
-.iconaixin1:before {
-	content: '\e63c';
-}
-
-@font-face {
-	font-family: "iconfont"; /* Project id 4205200 */
-	src: url('~@/static/iconfont/iconfont.woff2') format('woff2'),
-		 url('~@/static/iconfont/iconfont.woff') format('woff'),
-		 url('~@/static/iconfont/iconfont.ttf') format('truetype');
-  }
-  
-  .iconfont {
-	font-family: "iconfont" !important;
-	font-size: 16px;
-	font-style: normal;
-	-webkit-font-smoothing: antialiased;
-	-moz-osx-font-smoothing: grayscale;
-  }
-  
-  .icon-waimai-:before {
-	content: "\e607";
-  }
-  
-  .icon-tangshi:before {
-	content: "\e645";
-  }

BIN
yshop/yshop-drink-uniapp/static/iconfont/iconfont.ttf


BIN
yshop/yshop-drink-uniapp/static/iconfont/iconfont.woff


BIN
yshop/yshop-drink-uniapp/static/iconfont/iconfont.woff2


BIN
yshop/yshop-drink-uniapp/static/images/001.png


BIN
yshop/yshop-drink-uniapp/static/images/002.png


BIN
yshop/yshop-drink-uniapp/static/images/003.png


BIN
yshop/yshop-drink-uniapp/static/images/100.jpg


BIN
yshop/yshop-drink-uniapp/static/images/200.jpg


BIN
yshop/yshop-drink-uniapp/static/images/300.jpg


BIN
yshop/yshop-drink-uniapp/static/images/back.png


BIN
yshop/yshop-drink-uniapp/static/images/balance.png


Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác