From de3803998a0a3668de98e994330572c6a6da8a69 Mon Sep 17 00:00:00 2001
From: wangfukang <15630117759@163.com>
Date: Mon, 6 Jul 2026 11:21:31 +0800
Subject: [PATCH] 1
---
package2/group/groupBuyList.vue | 108 ++--
package2/group/groupBuySingle.vue | 23 +-
package2/group/groupPendingList.vue | 195 ++++---
package2/group/searchGroup.vue | 519 -----------------
package2/myCenter/addGoods.vue | 5 +-
package2/shop/businessInfo.vue | 404 ++++++++-----
package2/shop/merchantCenter.vue | 1 +
package2/shop/shopInfo.vue | 857 ++++++++++++++--------------
8 files changed, 856 insertions(+), 1256 deletions(-)
delete mode 100644 package2/group/searchGroup.vue
diff --git a/package2/group/groupBuyList.vue b/package2/group/groupBuyList.vue
index bad4b88..258e7a1 100644
--- a/package2/group/groupBuyList.vue
+++ b/package2/group/groupBuyList.vue
@@ -11,14 +11,11 @@
饭团
宿舍拼饭局
-
+
-
-
- {{word}}
-
-
- 热搜↑
+
+ 搜索
@@ -84,7 +81,7 @@
- 综合排序 ▼
+ 搜索重置 ▼
@@ -130,12 +127,11 @@
-
- {{item._liveAvatars[0]}}
- {{item._liveAvatars[1]}}
- {{item._liveAvatars[2]}}
+ {{item.shopScore ? item.shopScore : 5}}
+
+
- 附近同学正在拼
@@ -404,16 +400,22 @@
this.searchForm.sortOrder = 'shoprank'
this.searchForm.orderOrder = 'desc'
this.searchForm.shopArea = ''
+ this.searchForm.shopType = ''
+ this.searchForm.keyWord = ''
this.$delete(this.searchForm, 'isStudent')
this.searchForm.sort = 'shoprank'
this.searchScore = false
- this.searchScore = false
this.searchSale = false
} else if (type == 'typeUp') {
//TODO跳转新页面
}
this.getShopList();
},
+ goSearch() {
+ this.searchForm.keyWord = (this.searchForm.keyWord || '').trim()
+ this.searchForm.pageNumber = 1
+ this.getShopList()
+ },
buyingye() {
uni.showToast({
title: '店铺不在营业时间!',
@@ -595,13 +597,9 @@
this.searchStudentShop()
return
}
- uni.navigateTo({
- url: '/package2/group/searchGroup?shopType=' + (item.value || '')
- })
+ this.searchByShopType(item.value || '')
} else {
- uni.navigateTo({
- url: '/package2/group/searchGroup'
- })
+ this.goSearch()
}
} else {
uni.navigateTo({
@@ -629,6 +627,18 @@
this.$set(this.searchForm, 'isStudent', 1)
this.getShopList()
},
+ searchByShopType(shopType) {
+ this.searchForm.pageNumber = 1
+ this.searchForm.shopArea = ''
+ this.searchForm.shopType = shopType
+ this.searchForm.sort = 'shoprank'
+ this.searchForm.sortOrder = 'shoprank'
+ this.searchForm.orderOrder = 'desc'
+ this.searchScore = false
+ this.searchSale = false
+ this.$delete(this.searchForm, 'isStudent')
+ this.getShopList()
+ },
checkArea() {
this.isArea = !this.isArea
}
@@ -749,6 +759,16 @@
margin-left: 8rpx;
}
+ .search-input {
+ flex: 1;
+ height: 58rpx;
+ line-height: 58rpx;
+ margin-left: 8rpx;
+ font-size: 22rpx;
+ font-weight: 800;
+ color: #08735d;
+ }
+
.search-hot-word {
height: 58rpx;
line-height: 58rpx;
@@ -1373,41 +1393,27 @@
}
.shop-rate {
- background: rgba(255, 250, 237, 0.72);
- min-height: 46rpx;
- display: flex;
- align-items: center;
- border-radius: 46rpx;
- padding: 0 14rpx 0 8rpx;
- box-shadow: inset 0 0 0 1rpx rgba(255, 255, 255, 0.7);
- }
-
- .avatar-stack {
+ background: rgba(249, 212, 157, 0.34);
+ height: 34rpx;
display: flex;
align-items: center;
-
- text {
- width: 34rpx;
- height: 34rpx;
- line-height: 34rpx;
- text-align: center;
- border-radius: 50%;
- background: #fff;
- margin-left: -8rpx;
- font-size: 18rpx;
- box-shadow: 0 4rpx 10rpx rgba(0, 45, 29, 0.12);
- }
-
- text:first-child {
- margin-left: 0;
- }
+ border-radius: 17rpx;
+ padding: 0 8rpx 0 0;
}
- .shop-rate-text {
- margin-left: 10rpx;
- font-size: 20rpx;
- font-weight: 900;
- color: #7a5942;
+ .shop-rate-num {
+ width: 42rpx;
+ height: 100%;
+ text-align: center;
+ background: linear-gradient(90deg, rgba(255, 77, 0, 1), rgba(255, 184, 84, 1));
+ color: #fff;
+ line-height: 34rpx;
+ font-size: 18rpx;
+ border-bottom-left-radius: 17rpx;
+ border-top-left-radius: 17rpx;
+ border-bottom-right-radius: 8rpx;
+ border-top-right-radius: 8rpx;
+ font-weight: 700;
}
.shop-tag {
diff --git a/package2/group/groupBuySingle.vue b/package2/group/groupBuySingle.vue
index 53c4e31..87f7e65 100644
--- a/package2/group/groupBuySingle.vue
+++ b/package2/group/groupBuySingle.vue
@@ -145,15 +145,13 @@
-
+ 可拼团
{{item.productName}}
-
+
拼团价更香
约人一起下单
@@ -2676,6 +2674,23 @@
}
}
+ .group-corner-badge {
+ position: absolute;
+ top: -1rpx;
+ left: -1rpx;
+ z-index: 2;
+ height: 34rpx;
+ line-height: 34rpx;
+ padding: 0 12rpx;
+ border-radius: 18rpx 18rpx 18rpx 6rpx;
+ background: linear-gradient(90deg, #ff6a2a, #ffb854);
+ color: #fff;
+ font-size: 18rpx;
+ font-weight: 900;
+ box-shadow: 0 8rpx 16rpx rgba(255, 106, 42, 0.28);
+ border: 2rpx solid rgba(255, 255, 255, 0.9);
+ }
+
.goods-bottom {
width: 95%;
margin: 0 auto;
diff --git a/package2/group/groupPendingList.vue b/package2/group/groupPendingList.vue
index f686eb9..c9152b5 100644
--- a/package2/group/groupPendingList.vue
+++ b/package2/group/groupPendingList.vue
@@ -1,21 +1,17 @@
-
-
-
-
-
-
-
-
- {{isStoreScene ? '正在等你来拼团' : '附近饭搭子开团中'}}
- {{isStoreScene ? '同学们发起的团购拼团,凑齐就一起省' : '公开拼饭局都在这里,点进店铺直接参团'}}
+
+
+
-
-
- 待成团
+ 加入立即省钱
+
+
+
+
+ {{item.label}}
@@ -85,10 +81,13 @@
data() {
return {
scene: 'takeaway',
- menuButtonInfo: {
- top: 0,
- height: 32
- },
+ tabs: [{
+ label: '饭团',
+ scene: 'takeaway'
+ }, {
+ label: '团购',
+ scene: 'storeGroup'
+ }],
loadStatus: 'more',
navPaddingStyle: '',
totalPages: 1,
@@ -113,19 +112,19 @@
}
},
onLoad(option) {
- this.scene = option && option.scene ? option.scene : 'takeaway'
+ this.scene = this.normalizeScene(option && option.scene)
this.query.merchantType = this.isStoreScene ? 2 : 1
this.initRegion()
},
- onShow() {
- this.menuButtonInfo = uni.getMenuButtonBoundingClientRect()
- },
onReachBottom() {
if (this.loadStatus === 'loading' || this.query.pageNumber >= this.totalPages) return
this.query.pageNumber += 1
this.getGroupList()
},
methods: {
+ normalizeScene(scene) {
+ return scene === 'storeGroup' ? 'storeGroup' : 'takeaway'
+ },
initRegion() {
const area = uni.getStorageSync('area')
if (!area) {
@@ -150,6 +149,18 @@
this.groupList = []
this.getGroupList()
},
+ switchScene(scene) {
+ const nextScene = this.normalizeScene(scene)
+ if (this.scene === nextScene) return
+ this.scene = nextScene
+ this.query.merchantType = this.isStoreScene ? 2 : 1
+ this.query.keyWord = ''
+ this.query.pageNumber = 1
+ this.totalPages = 1
+ this.groupList = []
+ this.loadStatus = 'more'
+ this.getGroupList()
+ },
getGroupList() {
if (!this.query.regionId) return
this.loadStatus = 'loading'
@@ -271,119 +282,105 @@
left: 0;
right: 0;
z-index: 1000;
- }
-
- .hero {
- width: 100%;
- min-height: 360rpx;
- padding: 0 26rpx 36rpx;
+ padding: 88rpx 26rpx 22rpx;
box-sizing: border-box;
- position: relative;
- overflow: hidden;
- background: linear-gradient(135deg, #0f8b6b 0%, #87eabf 58%, #fff0c8 100%);
- color: #fff;
- }
-
- .hero-holder {
- height: 454rpx;
+ background: rgba(247, 255, 249, 0.94);
+ box-shadow: 0 12rpx 30rpx rgba(20, 115, 88, 0.08);
+ backdrop-filter: blur(18rpx);
}
- .store-scene .hero {
- background: linear-gradient(115deg, rgba(255, 132, 80, 0.98) 0%, rgba(255, 185, 113, 0.94) 56%, rgba(255, 236, 218, 0.9) 100%);
+ .store-scene .pending-fixed {
+ background: rgba(255, 249, 243, 0.96);
+ box-shadow: 0 12rpx 30rpx rgba(178, 102, 48, 0.1);
}
- .hero::after {
- content: '';
- width: 420rpx;
- height: 420rpx;
- border-radius: 50%;
- background: rgba(255, 255, 255, 0.22);
- position: absolute;
- right: -170rpx;
- top: -130rpx;
+ .hero-holder {
+ width: 100%;
+ height: 396rpx;
}
- .top-bar {
- height: 98rpx;
+ .nav-row {
position: relative;
- z-index: 20;
- pointer-events: none;
+ display: flex;
+ align-items: center;
+ height: 64rpx;
}
.back-btn {
- position: absolute;
- left: 0;
display: flex;
align-items: center;
justify-content: center;
+ width: 64rpx;
+ height: 64rpx;
border-radius: 999rpx;
background: rgba(255, 255, 255, 0.96);
border: 1rpx solid rgba(255, 255, 255, 0.82);
box-shadow: 0 8rpx 18rpx rgba(0, 45, 29, 0.08);
box-sizing: border-box;
- pointer-events: auto;
- }
-
- .hero-copy {
- position: relative;
- z-index: 2;
- width: 66%;
- padding-top: 24rpx;
+ flex-shrink: 0;
}
- .hero-kicker {
- display: inline-block;
- padding: 8rpx 18rpx;
- border-radius: 999rpx;
- background: rgba(255, 255, 255, 0.34);
- font-size: 22rpx;
+ .nav-title {
+ position: absolute;
+ left: 50%;
+ width: 220rpx;
+ height: 64rpx;
+ color: #073d33;
+ font-size: 34rpx;
font-weight: 900;
+ line-height: 64rpx;
+ text-align: center;
+ transform: translateX(-50%);
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
}
- .hero-title {
- margin-top: 48rpx;
- font-size: 48rpx;
- line-height: 58rpx;
- font-weight: 900;
+ .store-scene .nav-title {
+ color: #3f2618;
}
- .hero-sub {
- margin-top: 12rpx;
- font-size: 24rpx;
- line-height: 36rpx;
- font-weight: 800;
- color: rgba(255, 255, 255, 0.86);
+ .tab-card {
+ display: flex;
+ height: 76rpx;
+ margin-top: 24rpx;
+ padding: 8rpx;
+ border-radius: 999rpx;
+ background: rgba(255, 255, 255, 0.72);
+ box-shadow: inset 0 0 0 1rpx rgba(255, 255, 255, 0.82);
+ box-sizing: border-box;
}
- .hero-badge {
- width: 190rpx;
- height: 190rpx;
- border-radius: 42rpx;
- position: absolute;
- right: 32rpx;
- bottom: 42rpx;
- z-index: 2;
- background: rgba(255, 255, 255, 0.42);
- box-shadow: 0 22rpx 44rpx rgba(0, 45, 29, 0.16);
+ .tab-item {
+ flex: 1;
+ height: 60rpx;
+ border-radius: 999rpx;
+ color: rgba(7, 61, 51, 0.56);
+ font-size: 27rpx;
+ font-weight: 900;
+ line-height: 60rpx;
text-align: center;
- overflow: hidden;
}
- .hero-badge image {
- width: 120rpx;
- height: 120rpx;
- margin-top: 16rpx;
+ .tab-item-active {
+ background: linear-gradient(90deg, #dcff9c, #baffec);
+ color: #08735d;
+ box-shadow: 0 10rpx 24rpx rgba(13, 114, 82, 0.14);
}
- .hero-badge text {
- display: block;
- font-size: 23rpx;
- font-weight: 900;
+ .store-scene .tab-item {
+ color: rgba(84, 43, 22, 0.56);
+ }
+
+ .store-scene .tab-item-active {
+ background: linear-gradient(135deg, #ff7444 0%, #ffae53 100%);
+ color: #fff;
+ box-shadow: 0 10rpx 24rpx rgba(255, 126, 39, 0.2);
}
.search-card {
- width: 94%;
- margin: -32rpx auto 22rpx;
+ width: 100%;
+ margin: 18rpx auto 0;
padding: 16rpx;
border-radius: 34rpx;
background: rgba(255, 255, 255, 0.76);
diff --git a/package2/group/searchGroup.vue b/package2/group/searchGroup.vue
deleted file mode 100644
index 6da216b..0000000
--- a/package2/group/searchGroup.vue
+++ /dev/null
@@ -1,519 +0,0 @@
-
-
-
-
-
-
-
-
-
- 搜索页
-
-
-
-
-
-
-
-
- 历史搜索
-
-
-
-
- {{item}}
-
-
-
-
-
-
- 综合排序 ▼
-
-
-
-
- 销量优先 ▼
-
-
-
-
- 评分优先 ▼
-
-
-
-
- 区域选择 ▼
-
-
- {{item.title}}
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{item.shopName}}
-
-
-
- {{item.shopScore}}
-
-
-
-
-
-
- {{item.shopTakeaway && item.shopTakeaway.type ? item.shopTakeaway.type : '美食'}}
-
-
-
-
-
-
- {{item.subtitle}}
-
-
-
- 已拼 {{item.saleCount != null ? item.saleCount : 0}} 单
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/package2/myCenter/addGoods.vue b/package2/myCenter/addGoods.vue
index db29dec..a0306db 100644
--- a/package2/myCenter/addGoods.vue
+++ b/package2/myCenter/addGoods.vue
@@ -93,10 +93,13 @@
-
+
否
是
+
+ 拼团商品下单时可搭配该商品一并下单
+
diff --git a/package2/shop/businessInfo.vue b/package2/shop/businessInfo.vue
index a3bb3fc..3cd5bbc 100644
--- a/package2/shop/businessInfo.vue
+++ b/package2/shop/businessInfo.vue
@@ -1,99 +1,72 @@
-
-
-
- 营业开始时间
-
-
-
- {{shop.businessHourBegin}}
-
-
-
-
-
- 营业结束时间
-
-
-
- {{shop.businessHourEnd}}
-
-
-
+
+ 经营管理
+ 同步后台商家管理字段,可直接维护营业规则
+
-
-
- 营业状态
-
-
- {{shop.status == 0?'正常营业':shop.status == 1?'暂停营业':'冻结'}}
-
-
-
-
- 拼团佣金
-
-
- {{shop.commissionRateMore}}%
-
-
-
-
- 单独购买佣金
-
-
- {{shop.commissionRateOne}}%
-
-
-
-
- 经营品类
+
+
+ 营业设置
+
+ 营业开始时间
+
+
+
+ {{shop.businessHourBegin || '请选择开始时间'}}
+
+
+
+
-
- {{shop.type}}
+
+ 营业结束时间
+
+
+
+ {{shop.businessHourEnd || '请选择结束时间'}}
+
+
+
+
-
-
-
- 是否支持配送
-
-
- {{shop.isDelivery == 0?'是':'否'}}
-
-
-
-
- 出餐时间
-
-
- {{shop.cookingTime}}分钟
+
+ 营业状态
+
+
+
+ {{statusText}}
+
+
+
+
-
-
- 排名
+
+
+
+
+ 经营信息
+
+ 拼团佣金
+ {{shop.commissionRateMore || 0}}%
-
- {{shop.shoprank == undefined?'0':shop.shoprank}}名
+
+ 单独购买佣金
+ {{shop.commissionRateOne || 0}}%
-
-
-
- 是否价格锁定
+
+ 经营品类
+ {{shop.type || '暂无'}}
-
- {{shop.isPriceLock== 0?'是':'否'}}
+
+ 出餐时间
+ {{shop.cookingTime || 0}}分钟
-
-
- 保存
-
-
@@ -101,57 +74,111 @@
export default {
data() {
return {
- shop: {}
+ shop: {
+ shopId: '',
+ shopName: '',
+ businessHourBegin: '',
+ businessHourEnd: '',
+ status: 0,
+ commissionRateMore: '',
+ commissionRateOne: '',
+ type: '',
+ isDelivery: 0,
+ cookingTime: ''
+ },
+ submitLoading: false,
+ statusList: [{
+ value: 0,
+ text: '正常营业'
+ }, {
+ value: 1,
+ text: '暂停营业'
+ }, {
+ value: 2,
+ text: '冻结'
+ }]
+ }
+ },
+ computed: {
+ statusText() {
+ const item = this.statusList.find(item => item.value == this.shop.status)
+ return item ? item.text : '正常营业'
}
},
onLoad() {
this.getShopMsg()
-
},
methods: {
getShopMsg() {
- this.tui.request("/app/shoptakeaway/getByShopId", "get", {
- shopId: uni.getStorageSync('shopId')
+ const shopId = uni.getStorageSync('shopId')
+ if (!shopId) {
+ this.tui.toast('未获取到店铺信息')
+ return
+ }
+ this.tui.request('/app/shoptakeaway/getByShopId', 'get', {
+ shopId: shopId
}, false, true).then((res) => {
if (res.code == 200) {
- this.shop = res.result
- for (let key in this.shop) {
- if (this.shop[key] === null) {
- delete this.shop[key];
- }
- }
+ const result = res.result || {}
+ this.shop = Object.assign({}, this.shop, result, {
+ shopId: result.shopId || shopId,
+ shopName: result.shopName || uni.getStorageSync('shopName') || '',
+ status: result.status == null ? 0 : Number(result.status),
+ isDelivery: result.isDelivery == null ? 0 : Number(result.isDelivery)
+ })
} else {
this.tui.toast(res.message)
}
uni.hideLoading()
- }).catch((res) => {})
+ }).catch(() => {
+ uni.hideLoading()
+ })
},
- bindTimeChange(e, type) {
- if (type == 'start') {
- this.shop.businessHourBegin = e.detail.value
- } else {
- this.shop.businessHourEnd = e.detail.value
- }
-
+ bindTimeChange(e, key) {
+ this.shop[key] = e.detail.value
+ },
+ statusChange(e) {
+ const item = this.statusList[e.detail.value]
+ if (item) this.shop.status = item.value
+ },
+ validateForm() {
+ if (!this.shop.businessHourBegin) return '请选择营业开始时间'
+ if (!this.shop.businessHourEnd) return '请选择营业结束时间'
+ return ''
},
submit() {
- this.tui.request("/app/shoptakeaway/update", "POST", this.shop, false, true).then((res) => {
+ const error = this.validateForm()
+ if (error) {
+ this.tui.toast(error)
+ return
+ }
+ const payload = {
+ id: this.shop.id,
+ shopId: this.shop.shopId || uni.getStorageSync('shopId'),
+ businessHourBegin: this.shop.businessHourBegin,
+ businessHourEnd: this.shop.businessHourEnd,
+ status: Number(this.shop.status)
+ }
+ this.submitLoading = true
+ this.tui.request('/app/shoptakeaway/update', 'POST', payload, false, true).then((res) => {
+ this.submitLoading = false
if (res.code == 200) {
uni.showModal({
title: '提示',
- content: '更新信息成功',
+ content: '经营信息已更新',
showCancel: false,
- success: function(res) {
- if (res.confirm) {
- uni.navigateBack()
- }
+ success: (modalRes) => {
+ if (modalRes.confirm) uni.navigateBack()
}
- });
+ })
} else {
this.tui.toast(res.message)
}
uni.hideLoading()
- }).catch((res) => {})
+ }).catch(() => {
+ this.submitLoading = false
+ uni.hideLoading()
+ })
}
}
}
@@ -161,67 +188,150 @@
page,
.page1 {
width: 100%;
- height: 100%;
- font-size: 28rpx;
- background: #eee;
+ min-height: 100%;
+ font-size: 24rpx;
+ color: #12342d;
+ background:
+ radial-gradient(circle at 92% 120rpx, rgba(166, 255, 234, 0.45) 0, rgba(166, 255, 234, 0) 240rpx),
+ linear-gradient(180deg, #f3fff6 0%, #f5f8f5 36%, #eef4f1 100%);
+ overflow: scroll;
}
- .list-box {
+ .hero {
+ position: relative;
width: 100%;
- height: auto;
- background: #fff;
- margin-top: 20rpx;
+ height: 260rpx;
+ padding: 58rpx 42rpx 0;
+ box-sizing: border-box;
+ overflow: hidden;
+ background:
+ linear-gradient(135deg, rgba(227, 255, 150, 0.95) 0%, rgba(166, 255, 234, 0.86) 58%, rgba(255, 255, 255, 0.72) 100%),
+ url('https://jewel-shop.oss-cn-beijing.aliyuncs.com/8bc15960c2dc40268e295d6dd23aecce.png') center/cover no-repeat;
+ }
+ .hero::after {
+ content: "";
+ position: absolute;
+ right: -34rpx;
+ top: -44rpx;
+ width: 290rpx;
+ height: 290rpx;
+ border-radius: 50%;
+ background: rgba(255, 255, 255, 0.32);
}
- .list-1 {
- display: flex;
+ .hero-title {
+ position: relative;
+ z-index: 1;
+ font-size: 46rpx;
+ line-height: 64rpx;
+ font-weight: 900;
+ letter-spacing: 2rpx;
+ color: #07362d;
+ }
+
+ .hero-subtitle {
+ position: relative;
+ z-index: 1;
+ margin-top: 12rpx;
+ font-size: 26rpx;
+ font-weight: 600;
+ color: rgba(0, 35, 28, 0.62);
+ }
+
+ .form-wrap {
+ position: relative;
+ z-index: 2;
+ width: 92%;
+ margin: -54rpx auto 0;
+ padding-bottom: 40rpx;
+ }
+
+ .content {
width: 100%;
- height: 100rpx;
- line-height: 100rpx;
- border-bottom: 1px solid #eee;
+ margin-bottom: 24rpx;
+ overflow: hidden;
+ border: 1rpx solid rgba(255, 255, 255, 0.86);
+ border-radius: 28rpx;
+ background: rgba(255, 255, 255, 0.96);
+ box-shadow: 0 16rpx 36rpx rgba(0, 35, 28, 0.08);
+ }
+ .section-title {
+ height: 92rpx;
+ line-height: 92rpx;
+ padding: 0 28rpx;
+ border-bottom: 1rpx solid #edf3f0;
+ font-size: 30rpx;
+ font-weight: 900;
+ color: #102f28;
}
- .list-2 {
+ .value {
width: 100%;
- height: 100rpx;
- line-height: 100rpx;
- text-align: center;
- border-bottom: 1px solid #eee;
+ min-height: 96rpx;
+ display: flex;
+ align-items: center;
+ border-top: 1rpx solid #edf3f0;
+ padding: 0 28rpx;
+ box-sizing: border-box;
}
- .list-icon {
- width: 100rpx;
- height: 100rpx;
- text-align: center;
+ .section-title + .value {
+ border-top: none;
}
- .list-name {
- flex: 1;
- padding-left: 20rpx;
+ .name {
+ width: 210rpx;
+ font-size: 28rpx;
+ font-weight: 800;
+ color: #153c34;
}
- .list-right {
+ .text {
flex: 1;
- height: 100rpx;
+ min-width: 0;
+ text-align: right;
+ color: #263f39;
+ font-size: 28rpx;
+ }
+
+ .text input {
+ height: 96rpx;
+ line-height: 96rpx;
text-align: right;
- padding-right: 20rpx;
+ font-size: 28rpx;
+ color: #263f39;
+ }
+
+ .picker-text {
+ min-height: 96rpx;
+ line-height: 96rpx;
+ font-size: 28rpx;
+ color: #263f39;
+ white-space: nowrap;
overflow: hidden;
+ text-overflow: ellipsis;
}
- .upload-img {
- width: 60rpx;
- height: 60rpx;
- background-size: 100%;
- margin-top: 20rpx;
+ .picker-text.placeholder {
+ color: #9aa7a3;
}
- .list-2 {
+ button {
width: 100%;
- height: 100rpx;
- line-height: 100rpx;
- text-align: center;
- border-bottom: 1px solid #eee;
+ height: 96rpx;
+ line-height: 96rpx;
+ margin: 44rpx auto 12rpx;
+ border-radius: 999rpx;
+ background: linear-gradient(90deg, #e3ff96 0%, #a6ffea 100%);
+ color: #00231c;
+ font-size: 34rpx;
+ font-weight: 900;
+ box-shadow: 0 18rpx 36rpx rgba(0, 35, 28, 0.14);
+ }
+
+ button::after {
+ border: none;
}
-
\ No newline at end of file
+
diff --git a/package2/shop/merchantCenter.vue b/package2/shop/merchantCenter.vue
index e1ddc7e..c90aa6c 100644
--- a/package2/shop/merchantCenter.vue
+++ b/package2/shop/merchantCenter.vue
@@ -772,4 +772,5 @@
line-height: 40rpx;
font-weight: 700;
}
+
\ No newline at end of file
diff --git a/package2/shop/shopInfo.vue b/package2/shop/shopInfo.vue
index 4774be2..a4c18e4 100644
--- a/package2/shop/shopInfo.vue
+++ b/package2/shop/shopInfo.vue
@@ -1,170 +1,78 @@
-
-
-
- 门头图
-
-
-
-
-
-
-
-
-
-
- 店铺名称
-
-
- {{shop.shopName}}
-
-
-
-
- 副标题
-
-
-
-
-
-
-
- 店铺地址
-
-
- {{shop.shopAddress}}
-
-
-
-
-
- 身份证
-
-
-
-
-
-
-
- 营业执照
-
-
-
-
-
-
-
- 补充证照
-
-
-
-
-
-
-
- 支付宝账号
-
-
-
-
-
-
-
- 支付宝实名
-
-
-
-
-
+
+ 店铺资料
+ 维护副标题、联系方式和收款信息
-
- 商家自配送
-
- 支持自配送
-
-
-
+
+
+
+ 可编辑信息
+
+ 副标题
+
+
+
-
-
-
- 配送费
-
-
+
+ 联系方式
+
+
-
- 送达位置
-
-
- {{deliveryLocationText || '请选择'}}
-
+
+ 支付宝账号
+
+
-
- 配送时长
-
-
+
+ 支付宝实名
+
+
-
- 配送员账号
-
-
- 查询
+
+
+
+
+
+ 基础信息
+
+ 门头图
+
+
+
+
+
-
- 已绑定
- {{shop.workerName}} {{shop.workerPhone}}
+
+ 店铺名称
+ {{shop.shopName || '暂无'}}
-
-
-
- 中转配送
-
- 支持中转配送
-
-
-
+
+ 店铺分类
+ {{currentShopTypeText || '暂无'}}
-
-
-
- 中转时长
-
-
-
+
+ 所属区域
+ {{currentRegionText || '暂无'}}
-
- 中转地点
-
-
- {{shop.transferAddressName || '请选择'}}
-
+
+ 店铺地址
+ {{shop.shopAddress || '暂无'}}
+
+
+
+
+ 认证资料
+
+
+
+ {{certificateNames[index] || '补充资料'}}
-
-
-
-
- 保存
@@ -174,360 +82,439 @@
export default {
data() {
return {
- shop:{},
- shopImages:[],
- huanjing:'',
- workerMobile:'',
- addressList:[],
- deliveryLocationList:[{
- value: 1,
- text: '送到宿舍'
- },{
- value: 2,
- text: '送到楼下'
- }]
+ shop: {},
+ shopTypeList: [],
+ submitLoading: false,
+ certificateImages: [],
+ certificateNames: ['身份证正面', '身份证反面', '营业执照', '补充证照']
}
},
- computed:{
- deliveryLocationText(){
- let item = this.deliveryLocationList.find(item => item.value == this.shop.shopDeliveryLocation)
- return item ? item.text : ''
+ computed: {
+ currentRegionText() {
+ return this.shop.shopAreaTitle || this.shop.region || ''
+ },
+ currentShopTypeText() {
+ return this.shop.shopTypeTitle || this.getShopTypeText(this.shop.shopType) || ''
}
},
onLoad() {
- let shopList = uni.getStorageSync('schoolShop')
- for(let i=0;i {
+ if (res.code == 200 && res.result) {
+ this.applyShop(this.normalizeShopResult(res.result))
+ } else {
+ this.applyShop(this.getCachedShop())
+ if (res.message) this.tui.toast(res.message)
}
+ uni.hideLoading()
+ }).catch(() => {
+ this.applyShop(this.getCachedShop())
+ uni.hideLoading()
})
},
- async upLoadFile(path,type) {
- let that = this;
- let hiver_token = uni.getStorageSync("hiver_token")
- await uni.uploadFile({
- url: that.tui.interfaceUrl() + '/upload/file',
- filePath: path,
- name: 'file',
- header: {
- "content-type": "multipart/form-data",
- 'accessToken': hiver_token
- },
- formData: {},
- success: (uploadFileRes) => {
- let pathData = JSON.parse(uploadFileRes.data)
- that.shop.shopIcon = pathData.result
-
- that.$forceUpdate()
- },
- fail: (err) => {
- uni.hideLoading();
- uni.showToast({
- title: JSON.stringify(err),
- icon: 'none'
- })
- }
- });
- await setTimeout(res => {
- uni.hideLoading();
- }, 1000)
+ normalizeShopResult(result) {
+ if (result.shop) {
+ const data = Object.assign({}, result.shop, result)
+ delete data.shop
+ return data
+ }
+ return result || {}
},
- setSelfDelivery(type){
- this.shop.supportShopDelivery = type
- if(type != 1){
- this.shop.orderBkge = 0
- this.shop.shopDeliveryLocation = ''
- this.shop.shopDeliveryDuration = ''
- this.shop.workerId = ''
- this.shop.workerName = ''
- this.shop.workerPhone = ''
- this.workerMobile = ''
+ getCachedShop() {
+ const shopList = uni.getStorageSync('schoolShop') || []
+ const shopId = uni.getStorageSync('shopId')
+ if (Array.isArray(shopList)) {
+ const item = shopList.find(shop => shop.id == shopId || shop.shopName == uni.getStorageSync('shopName'))
+ if (item) return item
+ }
+ return uni.getStorageSync('shop') || {
+ id: shopId,
+ shopName: uni.getStorageSync('shopName') || '',
+ shopIcon: uni.getStorageSync('shopIcon') || ''
}
},
- setTransferDelivery(type){
- this.shop.supportTransferDelivery = type
- if(type != 1){
- this.shop.transferDeliveryDuration = ''
- this.shop.transferAddressId = ''
- this.shop.transferAddressName = ''
+ applyShop(data) {
+ const shop = Object.assign({
+ id: '',
+ shopName: '',
+ shopIcon: '',
+ shopType: '',
+ shopTypeTitle: '',
+ subtitle: '',
+ shopAddress: '',
+ contactPhone: '',
+ aliAccount: '',
+ aliName: '',
+ remark: '',
+ shopArea: '',
+ shopAreaTitle: '',
+ regionId: '',
+ region: ''
+ }, data || {})
+ Object.keys(shop).forEach(key => {
+ if (shop[key] === null) shop[key] = ''
+ })
+ this.shop = shop
+ this.parseShopImages(shop.shopImages)
+ },
+ parseShopImages(value) {
+ const list = []
+ if (!value) {
+ this.certificateImages = []
+ return
}
+ const parts = String(value).split('@@')
+ parts.forEach((item, index) => {
+ if (!item) return
+ if (index == 3) {
+ try {
+ const extra = JSON.parse(item)
+ if (Array.isArray(extra)) {
+ extra.forEach(url => {
+ if (url) list.push(url)
+ })
+ }
+ } catch (e) {}
+ } else {
+ list.push(item)
+ }
+ })
+ this.certificateImages = list
},
- getRegionList(){
- this.tui.request('/app/shopArea/getByParentId/0', 'get', {}, false, false, true).then((res) => {
- if (res.code !== 200) return
- this.addressList = (Array.isArray(res.result) ? res.result : []).map(item => {
+ getShopTypeList() {
+ this.tui.request('/dictData/getByCondition', 'GET', {
+ sort: 'sortOrder',
+ order: 'asc',
+ dictId: '1712359407444168704'
+ }, false, false, true).then((res) => {
+ if (res.code != 200) return
+ const content = res.result && res.result.content ? res.result.content : []
+ this.shopTypeList = content.map(item => {
return {
- value: item.id,
- text: item.title || item.name || item.regionName || item.areaName || '未命名区域'
+ value: item.value,
+ text: item.title
}
})
+ if (this.shop.shopType && !this.shop.shopTypeTitle) {
+ this.shop.shopTypeTitle = this.getShopTypeText(this.shop.shopType)
+ }
})
},
- transferAddressChange(e){
- const item = this.addressList[e.detail.value]
- if(item){
- this.shop.transferAddressId = item.value
- this.shop.transferAddressName = item.text
- }
+ getShopTypeText(value) {
+ const item = this.shopTypeList.find(item => item.value == value || item.text == value)
+ return item ? item.text : value
},
- formatOrderBkge(){
- let value = parseFloat(this.shop.orderBkge || 0)
- if(isNaN(value) || value < 0) value = 0
- this.shop.orderBkge = Number(value.toFixed(1))
- },
- deliveryLocationChange(e){
- const item = this.deliveryLocationList[e.detail.value]
- if(item){
- this.shop.shopDeliveryLocation = item.value
- }
+ normalizeId(value) {
+ return String(value || '').split(',')[0]
},
- findWorker(){
- if(!this.workerMobile){
- this.tui.toast('请输入配送员手机号')
- return
- }
- this.tui.request('/app/shop/findWorkerByMobile', 'GET', {
- mobile: this.workerMobile
- }, false, true).then((res) => {
- if(res.code == 200){
- this.shop.workerId = res.result.workerId
- this.shop.workerName = res.result.workerName
- this.shop.workerPhone = res.result.workerPhone || res.result.mobile
- this.tui.toast('绑定成功')
- }else{
- this.tui.toast(res.message)
- }
+ previewImage(url) {
+ if (!url) return
+ uni.previewImage({
+ current: url,
+ urls: this.certificateImages
})
},
- normalizeSelfDelivery(){
- if(this.shop.supportShopDelivery != 1){
- this.setSelfDelivery(0)
- return true
- }
- this.formatOrderBkge()
- if(!this.shop.shopDeliveryLocation){
- this.tui.toast('请选择送达位置')
- return false
- }
- if(!this.shop.shopDeliveryDuration){
- this.tui.toast('请输入配送时长')
- return false
- }
- if(!this.shop.workerId){
- this.tui.toast('请绑定配送员')
- return false
- }
- return true
+ validateShop() {
+ if (!this.shop.shopArea) return '店铺区域信息缺失,请重新进入页面后再保存'
+ if (!this.shop.contactPhone) return '请输入联系方式'
+ if (!this.shop.aliAccount) return '请输入支付宝账号'
+ if (!this.shop.aliName) return '请输入支付宝实名'
+ return ''
},
- normalizeTransferDelivery(){
- if(this.shop.supportTransferDelivery != 1){
- this.setTransferDelivery(0)
- return true
- }
- if(!this.shop.transferDeliveryDuration){
- this.tui.toast('请输入中转配送时长')
- return false
- }
- if(!this.shop.transferAddressId){
- this.tui.toast('请选择中转地点')
- return false
- }
- this.shop.transferDeliveryDuration = parseInt(this.shop.transferDeliveryDuration || 0)
- return true
- },
- updateLocalShopCache(){
+ updateLocalShopCache() {
let shopList = uni.getStorageSync('schoolShop') || []
- if(Array.isArray(shopList)){
+ if (Array.isArray(shopList)) {
shopList = shopList.map(item => item.id == this.shop.id ? Object.assign({}, item, this.shop) : item)
uni.setStorageSync('schoolShop', shopList)
}
uni.setStorageSync('shop', this.shop)
+ uni.setStorageSync('shopName', this.shop.shopName)
+ uni.setStorageSync('shopIcon', this.shop.shopIcon)
},
- submit(){
- if(!this.normalizeSelfDelivery()) return
- if(!this.normalizeTransferDelivery()) return
- this.tui.request("/app/shop/updateSelfDelivery", "post", {
- id: this.shop.id,
- supportShopDelivery: this.shop.supportShopDelivery,
- orderBkge: this.shop.orderBkge,
- shopDeliveryLocation: this.shop.shopDeliveryLocation,
- shopDeliveryDuration: this.shop.shopDeliveryDuration,
- workerId: this.shop.workerId,
- workerName: this.shop.workerName,
- workerPhone: this.shop.workerPhone
- }, false, true).then((deliveryRes) => {
- if (deliveryRes.code != 200) {
- this.tui.toast(deliveryRes.message)
- return Promise.reject(deliveryRes)
- }
- return this.tui.request("/app/shop/updateTransferDelivery", "post", {
- id: this.shop.id,
- supportTransferDelivery: this.shop.supportTransferDelivery,
- transferDeliveryDuration: this.shop.transferDeliveryDuration,
- transferAddressId: this.shop.transferAddressId,
- transferAddressName: this.shop.transferAddressName
- }, false, true)
- }).then((transferRes) => {
- if (transferRes.code != 200) {
- this.tui.toast(transferRes.message)
- return Promise.reject(transferRes)
- }
- return this.tui.request("/app/shop/edit", "PUT", this.shop, false, true)
- }).then((res) => {
+ submit() {
+ const error = this.validateShop()
+ if (error) {
+ this.tui.toast(error)
+ return
+ }
+ const shopId = this.getShopId()
+ const payload = {
+ id: this.normalizeId(shopId),
+ shopArea: this.normalizeId(this.shop.shopArea),
+ subtitle: this.shop.subtitle,
+ contactPhone: this.shop.contactPhone,
+ aliAccount: this.shop.aliAccount,
+ aliName: this.shop.aliName
+ }
+ const query = Object.keys(payload).map(key => {
+ return key + '=' + encodeURIComponent(payload[key] == null ? '' : payload[key])
+ }).join('&')
+ this.submitLoading = true
+ this.tui.request('/app/shop/edit?' + query, 'PUT', {}, false, true).then((res) => {
+ this.submitLoading = false
if (res.code == 200) {
this.updateLocalShopCache()
uni.showModal({
title: '提示',
- content: '更新信息成功',
- showCancel:false,
- success: (res) => {
- if (res.confirm) {
- uni.navigateBack()
- }
+ content: '店铺资料已更新',
+ showCancel: false,
+ success: (modalRes) => {
+ if (modalRes.confirm) uni.navigateBack()
}
- });
+ })
} else {
this.tui.toast(res.message)
}
uni.hideLoading()
- }).catch((res) => {})
+ }).catch(() => {
+ this.submitLoading = false
+ uni.hideLoading()
+ })
}
}
}
\ No newline at end of file
+