From 274dab15bfc890c9c18544edd53a63130bc7fb5e Mon Sep 17 00:00:00 2001
From: quanwei <419654421@qq.com>
Date: Mon, 03 Nov 2025 16:10:34 +0800
Subject: [PATCH] 修复名片订单不跳转半屏小程序问题 修复地图点击进去定位问题 修复少了一个上传的按钮图标
---
shop_vue/src/views/plus/business/template/edit.vue | 3
admin/app/api/controller/plus/business/Business.php | 2
admin/app/api/model/plus/business/Order.php | 2
mobile/static/icon/mrmp.png | 0
mobile/static/icon/bddh.png | 0
mobile/pages/plus/business/list.vue | 6
mobile/pages/plus/business/detail.vue | 81 +++++++---------
shop_vue/src/views/plus/business/template/add.vue | 1
mobile/static/icon/fenx.png | 0
admin/app/api/controller/plus/business/Saving.php | 2
mobile/pages/plus/business/add.vue | 63 +++++++++---
mobile/pages/plus/business/index.vue | 92 +++++++++++++++---
admin/app/common/service/business/Poster.php | 15 ++
13 files changed, 180 insertions(+), 87 deletions(-)
diff --git a/admin/app/api/controller/plus/business/Business.php b/admin/app/api/controller/plus/business/Business.php
index d4019cd..cc37f1a 100644
--- a/admin/app/api/controller/plus/business/Business.php
+++ b/admin/app/api/controller/plus/business/Business.php
@@ -277,7 +277,7 @@
public function delete()
{
$param = request()->param();
- if((new BusinessModel())->get(['business_card_id'=>$param['business_card_id'],'is_default'=>1])){
+ if((new BusinessModel())->where(['business_card_id'=>$param['business_card_id'],'is_default'=>1])->find()){
return $this->renderError('当前名片为默认名片,无法删除,可切换默认名片后进行删除');
}
$model = (new BusinessModel())->where('business_card_id', $param['business_card_id'])->find();
diff --git a/admin/app/api/controller/plus/business/Saving.php b/admin/app/api/controller/plus/business/Saving.php
index e01e3a3..4856ffc 100644
--- a/admin/app/api/controller/plus/business/Saving.php
+++ b/admin/app/api/controller/plus/business/Saving.php
@@ -36,7 +36,7 @@
if((new SavingModel())->add($param)){
return $this->renderSuccess('');
}
- return $this->renderError();
+ return $this->renderError('');
}
/**
diff --git a/admin/app/api/model/plus/business/Order.php b/admin/app/api/model/plus/business/Order.php
index 6010de6..fdc6b0e 100644
--- a/admin/app/api/model/plus/business/Order.php
+++ b/admin/app/api/model/plus/business/Order.php
@@ -52,7 +52,7 @@
if ($params['use_balance'] == 1) {
$payment = $this->onPaymentByBalance($user, $order);
} elseif ($payType == OrderPayTypeEnum::WECHAT) {
- $this->onPaymentByWechat($user, $order);
+ $payment = $this->onPaymentByWechat($user, $order);
} else {
return $this->renderError('支付方式错误');
}
diff --git a/admin/app/common/service/business/Poster.php b/admin/app/common/service/business/Poster.php
index 8546466..5131fc8 100644
--- a/admin/app/common/service/business/Poster.php
+++ b/admin/app/common/service/business/Poster.php
@@ -253,10 +253,17 @@
imagesavealpha($targetImage, true);
$bg = imagecolorallocatealpha($targetImage, 255, 255, 255, 127);
imagefill($targetImage, 0, 0, $bg);
- imagecopyresampled($targetImage, $image, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
- imagepng($targetImage, $imageUrl,0); // 根据需要选择合适的函数(如imagepng、imagegif等)
+ imagecopyresampled($targetImage, $image, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height); // 保存时使用最高质量
+ $ext = pathinfo($imageUrl, PATHINFO_EXTENSION);
+ if ($ext == 'png'){
+ imagepng($targetImage, $imageUrl,0); // 根据需要选择合适的函数(如imagepng、imagegif等)
+ }else{
+ imagejpeg($targetImage, $imageUrl,100);
+ }
+
// 清理内存
imagedestroy($targetImage);
+ imagedestroy($image);
}
/**
@@ -529,7 +536,9 @@
* @return array
*/
private function SizeLeftTop($fontSize,$left,$top){
- $data[0] = $fontSize * 0.76;
+ // 正确的px到pt转换系数:1px = 0.75pt
+ // 使用0.75而不是0.76以确保字体大小显示准确
+ $data[0] = $fontSize * 0.75;
$data[1] = $left;
$data[2] = $top + $fontSize;
return $data;
diff --git a/mobile/pages/plus/business/add.vue b/mobile/pages/plus/business/add.vue
index 29be055..18d77d9 100644
--- a/mobile/pages/plus/business/add.vue
+++ b/mobile/pages/plus/business/add.vue
@@ -89,7 +89,7 @@
头像
</view>
<view class="tx" style="margin-left: 30rpx;">
- <image class="logo" :src="file_path" mode="heightFix"></image>
+ <image class="logo" :src="file_path||'@/static/shop/login/qietu_1054.png'" mode="heightFix"></image>
<Upload v-if="is_avatar" @getImgs="handleAvatarUpload" :imageList="[file_path]"></Upload>
</view>
</view>
@@ -98,7 +98,7 @@
logo
</view>
<view class="logo" style="overflow: hidden;">
- <image class="logo" :src="logo_path" mode="heightFix"></image>
+ <image class="logo" :src="logo_path||'@/static/shop/login/qietu_1054.png'" mode="heightFix"></image>
<Upload v-if="is_logo" @getImgs="handleLogoUpload" :imageList="[logo_path]"></Upload>
</view>
</view>
@@ -117,7 +117,7 @@
<view class="lxfx">
<view class="lxfxbiaoti"><text style="color: #fa3534;">*</text>手机:</view>
<view class="lxfxnrr">
- <input @input="sjh" placeholder="输入手机号,多个手机号用/隔开" v-model="mobile" class="lxfxneirong"
+ <input @input="sjh" placeholder="输入手机号" v-model="mobile" class="lxfxneirong"
type="text">
<input style="display: none;" name="mobile" v-model="business.mobile"
class="lxfxneirong" type="text">
@@ -175,11 +175,11 @@
v-model="business.industry_id">
</view>
</view>
- <view class="lxfx">
+ <view class="lxfx" >
<view class="lxfxbiaoti">所在地区:</view>
<view class="lxfxnrr">
<input class="lxfxneirong" :value="selectCity" disabled="true"
- @click="showMulLinkageThreePicker" placeholder="请选择省市区">
+ @click="chooseLocation" placeholder="请选择省市区">
<input style="display: none;" type="hidden" name="province_id"
v-model="business.province_id">
<input style="display: none;" type="hidden" name="city_id" v-model="business.city_id">
@@ -187,7 +187,7 @@
v-model="business.region_id">
</view>
</view>
- <view class="lxfx">
+ <view class="lxfx" >
<view class="lxfxbiaoti"><text style="color: #fa3534;">*</text>地址:</view>
<view class="lxfxnrr">
<input placeholder="请输入详细地址" name="address[0]" v-model="business.address[0]"
@@ -209,6 +209,8 @@
<input type="text" style="display: none;" name="logo" :value="logo_id">
<input type="text" style="display: none;" name="logo_height" :value="logo_height">
<input type="text" style="display: none;" name="logo_width" :value="logo_width">
+ <input type="text" style="display: none;" name="longitude" :value="business.longitude">
+ <input type="text" style="display: none;" name="latitude" :value="business.latitude">
</view>
<Popup :show="industryShow" :width="screenWidth" type="bottom" :closeable="true" @close="industryClose">
<view class="industry-popup">
@@ -273,7 +275,9 @@
city_id: 0, // 城市ID
region_id: 0, // 区域ID
Introduction: '', // 简介
- ilk: '' // 名片类型
+ ilk: '' ,// 名片类型
+ latitude:0,
+ longitude:0
},
// 名片类型
ilkList: [], // 类型列表
@@ -284,9 +288,9 @@
business_card_id: 0, // 名片ID(用于编辑)
// 图片相关
file_id: 0, // 头像文件ID
- file_path: "https://thirdwx.qlogo.cn/mmopen/vi_32/POgEwh4mIHO4nibH0KlMECNjjGxQUq24ZEaGT4poC6icRiccVGKSyXwibcPq4BWmiaIGuG1icwxaQX6grC9VemZoJ8rg/132", // 头像路径
+ file_path: "", // 头像路径
logo_id: 0, // Logo文件ID
- logo_path: "http://lblmh.com/image/diy/logo_top.png", // Logo路径
+ logo_path: "", // Logo路径
// 布局相关
unit: [], // 单位信息数组
logo_height: 0, // Logo高度
@@ -331,6 +335,35 @@
this.initRegionData();
},
methods: {
+ // 打开地图选择地址 by lyzflash
+ chooseLocation(n) {
+ let self=this;
+ uni.chooseLocation({
+ success: function (res) {
+ console.log(res);
+ self.business.longitude=res.longitude;
+ self.business.latitude=res.latitude;
+ self.location_address=res.address;
+ self.business.address[0]=res.name;
+ // 获取省市区
+ self.setLocationAddress();
+ }
+ });
+ },
+
+ // 获取掉省市区 by lyzflash
+ setLocationAddress() {
+ let self = this;
+ self._get('user.address/setLocationAddress', {
+ address: self.location_address
+ }, function(res) {
+ /* self.address.location_address = res.data.short_address; */
+ self.business.province_id = res.data.cityCode[0];
+ self.business.city_id = res.data.cityCode[1];
+ self.business.region_id = res.data.cityCode[2];
+ self.selectCity = res.data.region;
+ });
+ },
templateClose() {
this.templateShow = !this.templateShow
},
@@ -499,8 +532,8 @@
})
this.file_id = res.data.file_id;
this.logo_id = res.data.logo
- res.data.file_path ? this.file_path = res.data.file_path : "";
- res.data.logo ? this.logo_path = res.data.logo_image.file_path : "";
+ res.data.file_id ? this.file_path = res.data.file_path : "";
+ res.data.logo ? this.logo_path = res.data.logoImage.file_path : "";
res.data.logo_width ? this.logo_width = res.data.logo_width : 0;
res.data.logo_height ? this.logo_height = res.data.logo_height : 0;
@@ -666,7 +699,7 @@
}
.biaoti {
- color: #37bde6;
+ color: #D41003;
font-size: 40rpx;
padding: 20rpx 0rpx;
}
@@ -734,7 +767,7 @@
.tijiao {
width: 30%;
- background-color: #37bde6;
+ background-color: #D41003;
margin-left: 35%;
color: #fff;
}
@@ -748,7 +781,7 @@
font-size: 36rpx;
font-weight: bold;
margin-bottom: 20rpx;
- color: #37bde6;
+ color: #D41003;
}
.industry-item {
@@ -758,7 +791,7 @@
}
.industry-item.selected {
- color: #37bde6;
+ color: #D41003;
}
.industry-item:active {
diff --git a/mobile/pages/plus/business/detail.vue b/mobile/pages/plus/business/detail.vue
index 1accef6..0ba36fd 100644
--- a/mobile/pages/plus/business/detail.vue
+++ b/mobile/pages/plus/business/detail.vue
@@ -10,19 +10,19 @@
<!-- 操作按钮区域 -->
<view class="action-buttons">
<view class="action-btn" @click="makePhoneCall(businessInfo.mobile)">
- <text class="btn-icon">📞</text>
+ <image src="@/static/icon/bddh.png" class="btn-icon"></image>
<text class="btn-text">拨打电话</text>
</view>
<view class="action-btn" @click="shareToWechat">
- <text class="btn-icon">💬</text>
+ <image src="@/static/wx.png" class="btn-icon"></image>
<text class="btn-text">分享微信</text>
</view>
<view class="action-btn" @click="openLocation(businessInfo)">
- <text class="btn-icon">📍</text>
+ <image src="@/static/icon/address_icon.png" class="btn-icon"></image>
<text class="btn-text">导航地址</text>
</view>
<button open-type="share" class="action-btn">
- <text class="btn-icon">➤</text>
+ <image src="@/static/icon/fenx.png" class="btn-icon"></image>
<text class="btn-text">分享名片</text>
</button>
</view>
@@ -115,6 +115,18 @@
// 预览图片
uni.previewImage({
urls: [_this.businessInfo.mp],
+ longPressActions: {
+ itemList: ['转发给朋友', '保存图片', '收藏', '翻译图片中的文字', '提取文字'],
+ success: function(data) {
+ if (data.tapIndex == 1) {
+ _this.recordVisit(20)
+ }
+ console.log('选中了第' + (data.tapIndex + 1) + '个按钮,第' + (data.index + 1) + '张图片');
+ },
+ fail: function(err) {
+ console.log(err.errMsg);
+ }
+ },
complete: function(res) {
console.log(res);
}
@@ -142,11 +154,11 @@
});
},
// 记录访问
- recordVisit() {
+ recordVisit(type=10) {
let _this = this;
const params = {
business_card_id: _this.business_card_id,
- type: 10
+ type: type
};
_this._post('plus.business.saving/add', params, function() {
// 无需处理返回结果
@@ -184,45 +196,22 @@
this.showError('暂无地址信息');
return;
}
-
- // 使用腾讯地图API进行地理编码
- const apiKey = 'LS7BZ-NHSWK-CWOJQ-AJC7Y-H5HE2-UGBWR';
- const url = `https://apis.map.qq.com/ws/geocoder/v1/?address=${encodeURIComponent(address)}&key=${apiKey}`;
-
- uni.request({
- url: url,
- success: (res) => {
- if (res.data.status === 0 && res.data.result) {
- const location = res.data.result.location;
- uni.openLocation({
- latitude: location.lat,
- longitude: location.lng,
- name: address,
- address: address,
- scale: 18
- });
- } else {
- // 地理编码失败,使用默认方式
- uni.openLocation({
- latitude: 0,
- longitude: 0,
- name: address,
- address: address,
- scale: 18
- });
- }
- },
- fail: () => {
- // 请求失败,使用默认方式
- uni.openLocation({
- latitude: 0,
- longitude: 0,
- name: address,
- address: address,
- scale: 18
- });
+ console.log( businessInfo.latitude);
+ console.log( businessInfo.longitude);
+ let latitude=Number(businessInfo.latitude)
+ let longitude=Number(businessInfo.longitude)
+ uni.openLocation({
+ latitude: latitude,
+ longitude: longitude,
+ name: businessInfo.address,
+ address: address,
+ scale: 18,
+ complete: function(res) {
+ console.log(res);
}
+
});
+
},
// 分享名片
shareCard() {
@@ -442,6 +431,8 @@
.btn-icon {
font-size: 56rpx;
+ width: 56rpx;
+ height: 56rpx;
margin-bottom: 12rpx;
}
@@ -562,7 +553,7 @@
gap: 10rpx;
.create-card-btn {
- background: linear-gradient(90deg, #0078d7, #00b4ff);
+ background: linear-gradient(90deg, #ff1529, #ff435f);
color: #fff;
font-weight: bold;
padding: 10rpx 0;
@@ -681,7 +672,7 @@
.confirm-btn {
color: #fff;
- background-color: #37bde6;
+ background-color: #D41003;
}
}
}
diff --git a/mobile/pages/plus/business/index.vue b/mobile/pages/plus/business/index.vue
index 6a4ecda..89f6e84 100644
--- a/mobile/pages/plus/business/index.vue
+++ b/mobile/pages/plus/business/index.vue
@@ -59,14 +59,18 @@
<text class="close" @click="closePopup">×</text>
</view>
<scroll-view scroll-y="true" class="card-scroll">
- <view class="card-item" v-for="(card, index) in businessList" :key="index"
- @click="selectCard(index)">
- <view :class="{active: card.is_default==1}" class="card-preview">
- <image style="width: 650rpx;border-radius: 12rpx;" :src="card.mp" mode="widthFix"></image>
- <image v-show="card.is_default==1" src="@/static/icon/mrmp.png" class="mrmp">
- </image>
+ <uni-swipe-action>
+ <view v-for="(card, index) in businessList" :key="index">
+ <uni-swipe-action-item :right-options="rightOptions" @click="handleDel(index, card)">
+ <view @click="selectCard(index)" class="card-item">
+ <view :class="{active: card.is_default==1}" class="card-preview">
+ <image style="width: 650rpx;border-radius: 12rpx;" :src="card.mp" mode="widthFix"></image>
+ <image v-show="card.is_default==1" src="@/static/icon/mrmp.png" class="mrmp"></image>
+ </view>
+ </view>
+ </uni-swipe-action-item>
</view>
- </view>
+ </uni-swipe-action>
<view class="add-card" @click="addNewCard()">
<text class="icon iconfont icon-add"></text>
<text>添加新名片</text>
@@ -105,9 +109,13 @@
<script>
import Popup from '@/components/uni-popup.vue';
+import uniSwipeAction from '@/uni_modules/uni-swipe-action/components/uni-swipe-action/uni-swipe-action.vue';
+import uniSwipeActionItem from '@/uni_modules/uni-swipe-action/components/uni-swipe-action-item/uni-swipe-action-item.vue';
export default {
components: {
- Popup
+ Popup,
+ uniSwipeAction,
+ uniSwipeActionItem
},
data() {
return {
@@ -123,7 +131,13 @@
showPayment: false, // 显示支付弹窗
paymentMethod: 'balance', // 支付方式
topSetting: {}, // 置顶设置
- userInfo: {} // 用户信息
+ userInfo: {}, // 用户信息
+ rightOptions: [{
+ text: '删除',
+ style: {
+ backgroundColor: '#FF3B30'
+ }
+ }]
};
},
onLoad() {
@@ -320,6 +334,54 @@
} else {
return date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate();
}
+ },
+ // 删除名片
+ handleDel(index, card) {
+ // 防止删除默认名片
+ if (card.is_default === 1) {
+ this.showToast('默认名片不能删除');
+ return;
+ }
+
+ uni.showModal({
+ title: '提示',
+ content: '确定要删除这个名片吗?',
+ success: (res) => {
+ if (res.confirm) {
+ // 调用删除接口
+ this._post('plus.business.business/delete', {
+ business_card_id: card.business_card_id
+ }, (res) => {
+ if (res.code === 1) {
+ // 删除成功,更新列表
+ this.businessList.splice(index, 1);
+ this.showToast('删除成功');
+
+ // 如果删除的是当前选中的名片,切换到第一个名片
+ if (index === this.current) {
+ if (this.businessList.length > 0) {
+ this.current = 0;
+ this.getStatistics(this.businessList[this.current].business_card_id);
+ }
+ } else if (index < this.current) {
+ // 如果删除的是当前选中名片之前的,current减1
+ this.current--;
+ }
+ } else {
+ this.showToast(res.msg || '删除失败');
+ }
+ });
+ }
+ }
+ });
+ },
+ // 显示提示信息
+ showToast(msg) {
+ uni.showToast({
+ title: msg,
+ icon: 'none',
+ duration: 2000
+ });
}
},
onShareAppMessage() {
@@ -412,7 +474,7 @@
.icon {
font-size: 32rpx;
- color: #37bde6;
+ color: #D41003;
margin-right: 16rpx;
}
@@ -431,7 +493,7 @@
.btn {
flex: 1;
- background: #37bde6;
+ background: #D41003;
color: #fff;
text-align: center;
padding: 24rpx 0;
@@ -580,7 +642,7 @@
&.active {
background: #f5f5f5;
- border: #37bde6 solid 1rpx;
+ border: #D41003 solid 1rpx;
}
.card-company {
@@ -600,7 +662,7 @@
align-items: center;
justify-content: center;
padding: 30rpx;
- color: #37bde6;
+ color: #D41003;
font-size: 30rpx;
.icon {
@@ -702,7 +764,7 @@
position: relative;
&.active {
- border-color: #37bde6;
+ border-color: #D41003;
background: #f0f9ff;
}
@@ -732,7 +794,7 @@
}
.checked {
- color: #37bde6;
+ color: #D41003;
font-size: 36rpx;
}
}
diff --git a/mobile/pages/plus/business/list.vue b/mobile/pages/plus/business/list.vue
index bae3dd5..d6ade73 100644
--- a/mobile/pages/plus/business/list.vue
+++ b/mobile/pages/plus/business/list.vue
@@ -818,7 +818,7 @@
.action-btn {
padding: 10rpx 32rpx;
- background-color: #37bde6;
+ background-color: #D41003;
color: #fff;
border-radius: 20rpx;
font-size: 28rpx;
@@ -932,7 +932,7 @@
color: #333;
&.active {
- color: #37bde6;
+ color: #D41003;
}
.icon-check {
@@ -962,7 +962,7 @@
.confirm-btn {
color: #fff;
- background-color: #37bde6;
+ background-color: #D41003;
}
}
}
diff --git a/mobile/static/icon/bddh.png b/mobile/static/icon/bddh.png
new file mode 100644
index 0000000..1a224ad
--- /dev/null
+++ b/mobile/static/icon/bddh.png
Binary files differ
diff --git a/mobile/static/icon/fenx.png b/mobile/static/icon/fenx.png
new file mode 100644
index 0000000..b5fed23
--- /dev/null
+++ b/mobile/static/icon/fenx.png
Binary files differ
diff --git a/mobile/static/icon/mrmp.png b/mobile/static/icon/mrmp.png
index fcad51d..ce409c5 100644
--- a/mobile/static/icon/mrmp.png
+++ b/mobile/static/icon/mrmp.png
Binary files differ
diff --git a/shop_vue/src/views/plus/business/template/add.vue b/shop_vue/src/views/plus/business/template/add.vue
index d3b453d..a486c61 100644
--- a/shop_vue/src/views/plus/business/template/add.vue
+++ b/shop_vue/src/views/plus/business/template/add.vue
@@ -860,7 +860,6 @@
message: '保存成功',
type: 'success'
});
- self.$router.push('/plus/business/template/index');
})
.catch(error => {
self.loading = false;
diff --git a/shop_vue/src/views/plus/business/template/edit.vue b/shop_vue/src/views/plus/business/template/edit.vue
index eed8b64..4964e15 100644
--- a/shop_vue/src/views/plus/business/template/edit.vue
+++ b/shop_vue/src/views/plus/business/template/edit.vue
@@ -7,7 +7,7 @@
<div class="user" v-loading="loading">
<div class="common-form">名片模板编辑</div>
<div class="poster-box d-s-s">
- <div class="left-box">
+ <div class="left-box" style="width: auto;height: auto;">
<div v-if="form.backdrop" class="img"><img v-img-url="form.backdrop.src" /></div>
<div class="userinfo">
<!-- 头像 -->
@@ -881,7 +881,6 @@
message: '保存成功',
type: 'success'
});
- self.$router.push('/plus/business/template/index');
})
.catch(error => {
self.loading = false;
--
Gitblit v1.9.2