Compare commits

...

11 Commits

Author SHA1 Message Date
赵毅
e03aed53a5 修改物业缴费支付报错 2025-09-26 17:41:03 +08:00
赵毅
a0c040e3af 巡检 - 已提交的点位禁用 2025-09-26 16:40:51 +08:00
赵毅
06f9b79012 修改巡检模块提交之后后台数据图片不显示的问题 2025-09-26 16:14:34 +08:00
赵毅
d0f448789a 完善快捷支付记录 2025-09-26 15:33:55 +08:00
赵毅
1c01a7dcb7 修改巡检模块状态错误问题 2025-09-26 15:30:32 +08:00
赵毅
aee000cd6b 修改湖畔好店的评价显示逻辑 2025-09-26 14:58:35 +08:00
赵毅
0fdfc3ca41 Merge branch 'feature/yi' of https://git.hshuishang.com/maguodong/uniapp-ZHSQ into feature/yi 2025-09-26 14:26:27 +08:00
赵毅
54d017c618 修复巡检提交失败的问题 2025-09-26 11:47:06 +08:00
赵毅
1f47945c98 优化物业缴费模块的逻辑和数据展示 2025-09-26 11:42:35 +08:00
赵毅
0bc9cace0c 完成物业缴费中的组合支付逻辑 2025-09-26 10:11:39 +08:00
赵毅
3324598637 个人中心功能服务 2025-09-26 08:52:44 +08:00
11 changed files with 223 additions and 94 deletions

View File

@ -214,6 +214,7 @@ image {
.payItem_money{
width: auto;
margin-right: 10rpx;
}
.bottom {

View File

@ -56,7 +56,8 @@
<view class="payItem" v-for="(item, index) in Bill" :key="index">
<view class="payItem_tit">
<view class="payItem_left">
<checkbox :checked="item.check" @click="checkChange(item, index)"></checkbox>
<checkbox :checked="item.check" @click="checkChange(item, index)"
v-if="item.community_order_rows.some(itemObj => itemObj.pay_status == 1)"></checkbox>
<view style="margin-left: 24rpx">{{ item.order_date }}</view>
</view>
<view class="payItem_right">
@ -72,7 +73,8 @@
</view>
<view v-if="item.more">
<view class="payItem_List" v-for="(items, indes) in item.community_order_rows" :key="items.order_id">
<checkbox :checked="items.check" @click="itemsCheckChange(items, indes, index)"></checkbox>
<checkbox :checked="items.check" @click="itemsCheckChange(items, indes, index)"
v-if="items.pay_status == 1"></checkbox>
<view class="Item_time" v-if="items.billing_cycle == 1">
{{ items.order_date }}
</view>
@ -83,8 +85,8 @@
{{ items.community_fee_type ? items.community_fee_type.type_name : '' }}
</view>
<view class="Item_money">{{ items.money }}</view>
<view class="Item_status" v-if="items.status == 0">未付款</view>
<view class="Item_status sucess" v-if="items.status == 1">
<view class="Item_status" v-if="items.pay_status == 1">未付款</view>
<view class="Item_status sucess" v-if="items.pay_status == 2">
已付款
</view>
</view>
@ -158,7 +160,7 @@
<view class="row_label">绑定房源</view>
<view class="row_con3">
<view class="row_con3_1">
{{ item.community_order.length }}个账单
{{ item.community_order ? item.community_order.length : 0 }}个账单
</view>
<view class="row_con3_2">明细可从收据查看</view>
</view>
@ -228,7 +230,7 @@
微信支付
</view>
<view class="banlenceItem_right">
<span></span>{{ (currentMoney - balanceMoney).toFixed(2) }}
<span></span>{{ balanceMoney > currentMoney ? 0.00 : (currentMoney - balanceMoney).toFixed(2) }}
</view>
</view>
<view class="line3"></view>
@ -239,7 +241,7 @@
物业公积金支付
</view>
<view class="banlenceItem_right">
<span></span>{{ balanceMoney }}
<span></span>{{ balanceMoney > currentMoney ? currentMoney : balanceMoney }}
</view>
</view>
</view>
@ -396,7 +398,7 @@ export default {
let money = 0;
this.Bill.forEach((item) => {
item.community_order_rows.forEach((ite) => {
if (ite.check) {
if (ite.check && ite.pay_status == 1) {
money += ite.money;
}
});
@ -447,7 +449,7 @@ export default {
} else if (this.payType == 2) {
name_mini = "物业公积金";
} else {
name_mimi = "微信 + 物业公积金";
name_mini = "微信 + 物业公积金";
}
if (!this.currentMoney) {
return uni.showToast({
@ -455,22 +457,86 @@ export default {
duration: 2000,
});
}
await request(apiArr.createPayOrder, "POST", {
//
const payParams = {
order_ids: order_ids,
community_id: this.currentCommunity.id,
room_id: this.currentRoom.room_id,
pay_user_id: uni.getStorageSync("userId"),
user_name: uni.getStorageSync("nickName"),
pay_user_name: uni.getStorageSync("nickName"),
//
pay_time: formatDate(new Date()),
money: this.currentMoney,
name_mini,
}).then((res) => {
console.log(res);
this.payInfoId = res.id;
this.OrderPay();
});
};
//
const isComboPay = this.show2;
if (this.payType == 1 || isComboPay) {
//
if (isComboPay) {
payParams.money = this.currentMoney - Number(this.balanceMoney).toFixed(2) > 0 ? this.currentMoney - Number(this.balanceMoney).toFixed(2) : 0.00;
if (payParams.money == 0.00) {
this.payType = 2;
}
} else {
payParams.money = this.currentMoney;
}
}
if (this.payType == 2 || isComboPay) {
//
const fundAmount = Math.min(Number(this.balanceMoney), Number(this.currentMoney));
payParams.property_housing_fund = fundAmount.toFixed(2);
//
if (this.payType == 2 && !isComboPay) {
if (Number(this.balanceMoney) < Number(this.currentMoney)) {
uni.showToast({
title: '可用公积金不足,可选择组合支付',
icon: 'none',
duration: 3000
});
return;
}
}
}
//
if (isComboPay) {
this.payType = 3;
name_mini = "微信 + 物业公积金";
}
payParams.name_mini = name_mini;
if (this.payType == 2) {
uni.showModal({
title: '提示',
content: '确定使用物业公积金支付?',
success: async function (res) {
if (res.confirm) {
await request(apiArr.createPayOrder, "POST", payParams).then((res) => {
const params = {
order_pay_id: res.id,
}
request(apiArr.tradeQuery, "POST", params).then(res => {
this.getRoomSelect();
this.getUserGovenmentMoney();
})
});
} else if (res.cancel) {
console.log('用户点击取消');
}
}
});
} else {
await request(apiArr.createPayOrder, "POST", payParams).then((res) => {
this.payInfoId = res.id;
this.OrderPay();
});
}
},
//
async getPayInfo() {
@ -498,6 +564,8 @@ export default {
order_pay_id: this.payInfoId,
}
request(apiArr.tradeQuery, "POST", params).then(res => {
this.getRoomSelect();
this.getUserGovenmentMoney();
})
},
fail: (payErr) => {
@ -528,21 +596,19 @@ export default {
//
getPayList() {
request(apiArr.getPayOrderList, "POST", {
room_id: this.currentRoom.room_id,
page_num: this.page_num,
page_size: this.page_size,
}).then((res) => {
console.log(res);
let flag = false;
if (res.rows && res.rows.length == this.page_size) {
if (res.rows && (res.rows?.length == this.page_size)) {
flag = true;
} else {
flag = false;
}
this.flag = flag;
this.payOrderList = res.rows;
this.payOrderList = res.rows
});
},

View File

@ -1,40 +1,40 @@
<template>
<div class="container">
<div class="Msg">
<div class="Msg_Tit">
<div class="Msg_Tit_left">
<view class="container">
<view class="Msg">
<view class="Msg_Tit">
<view class="Msg_Tit_left">
<image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/user_ava.png"
v-if="!info.user.avatar" mode="aspectFill">
</image>
<image :src="picUrl + info.user.avatar" v-if="info.user.avatar" mode="aspectFill"></image>
{{ info.user.nick_name }}
</div>
<div class="Msg_Tit_right">
</view>
<view class="Msg_Tit_right">
<image v-for="(item, index) in 5" :key="index"
:src="indez < info.satisfaction ? 'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/local_start1.png' : 'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/local_start2.png'"
mode="aspectFill"></image>
</div>
</div>
</view>
</view>
<div class="Msg_con">
<view class="Msg_con">
{{ info.comment }}
<div class="Msg_con_img" v-if="info.image_url">
<view class="Msg_con_img" v-if="info.image_url">
<image v-for="(img, index) in info.image_url.split(',')" :key="index" :src="picUrl + img"
mode="aspectFill"></image>
<video class="Msg_con_video" v-if="info.video_url" :src="picUrl + info.video_url" controls></video>
</div>
</div>
</view>
</view>
<div class="Msg_iconList">
<div class="Msg_iconList_left">
<div class="Msg_iconList_leftIcon">
<view class="Msg_iconList">
<view class="Msg_iconList_left">
<view class="Msg_iconList_leftIcon">
<image
src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/local_review.png"
mode="widthFix"></image>
{{ info.merchant_evaluation_reply_list ? info.merchant_evaluation_reply_list.length : 0 }}
</div>
</view>
<div class="Msg_iconList_leftIcon">
<view class="Msg_iconList_leftIcon">
<image v-if="info.is_like == 2"
src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_likeIcon.png"
mode="widthFix" @click="like(info)"></image>
@ -42,42 +42,42 @@
src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_likeIcon2.png"
mode="widthFix" @click="unlike(info)"></image>
{{ info.merchant_evaluation_like_list ? info.merchant_evaluation_like_list.length : 0 }}
</div>
</div>
<div class="Msg_iconList_right">
<div class="Msg_iconList_leftIcon" @click="deletes" v-if="isDelte">
</view>
</view>
<view class="Msg_iconList_right">
<view class="Msg_iconList_leftIcon" @click="deletes" v-if="isDelte">
<image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/local_del.png"
mode="widthFix"></image>
</div>
</div>
</div>
</view>
</view>
</view>
<!-- 回复列表 -->
<div class="reply" v-for="(item, index) in replyList" :key="index">
<div class="reply_tit">
<div class="reply_tit_left">
<view class="reply" v-for="(item, index) in replyList" :key="index">
<view class="reply_tit">
<view class="reply_tit_left">
<image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/user_ava.png"
v-if="!item.user.avatar" mode="aspectFill">
</image>
<image :src="picUrl + item.user.avatar" v-if="item.user.avatar" mode="aspectFill"></image>
{{ item.user.nick_name }}
</div>
<div class="reply_tit_right">{{ item.reply_time }}</div>
</div>
<div class="reply_con">{{ item.reply_content }}</div>
</div>
</div>
</view>
<view class="reply_tit_right">{{ item.reply_time }}</view>
</view>
<view class="reply_con">{{ item.reply_content }}</view>
</view>
</view>
<div class="comment">
<div class="comment_con">
<view class="comment">
<view class="comment_con">
<image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/local_send.png"
mode="aspectFill"></image>
<input type="text" v-model="reply_content" placeholder="说点什么">
<button id="send" @click="sendComment">发送</button>
</div>
</div>
</div>
</view>
</view>
</view>
</template>
<script>
@ -141,7 +141,7 @@ export default {
request(apiArr.createUserReply, "POST", {
evaluation_id: that.info.id,
reply_content: that.reply_content,
reply_user_type: "1"
reply_user_type: 1
}).then(res => {
uni.showToast({
title: "发送成功",

View File

@ -81,7 +81,7 @@
到店服务券
</view> -->
<view class="line"></view>
<view class="btn_right">
<view class="btn_right" @click="toPayInfo">
<image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/lcoal_payIcon.png"
mode="aspectFill"></image>
快捷支付记录
@ -145,6 +145,10 @@ export default {
},
methods: {
//
toPayInfo(){
NavgateTo("/packages/localLife/payInfo/index")
},
back() {
NavgateTo("1");
},

View File

@ -159,7 +159,9 @@ export default {
})
},
onShow() {
// onLoad
if(this.info.id){
this.getCommentList()
}
},
onReachBottom() {
if (this.flag) {
@ -191,9 +193,11 @@ export default {
});
list.forEach(item => {
item.merchant_evaluation_reply_list = item.merchant_evaluation_reply_list.filter((item) => {
return item.status == 2;
})
if(item.merchant_evaluation_reply_list){
item.merchant_evaluation_reply_list = item.merchant_evaluation_reply_list.filter((item) => {
return item.status == 2;
})
}
})
this.commentList = this.commentList.concat(list);

View File

@ -161,7 +161,6 @@ export default {
},
methods: {
//
toPayInfo(){
NavgateTo("/packages/localLife/payInfo/index")

View File

@ -60,6 +60,12 @@
color: #1890ff;
}
.disabled {
opacity: 0.6;
cursor: not-allowed;
pointer-events: none;
}
.camera-section {
flex: 1;
}

View File

@ -3,7 +3,7 @@
<!-- 点位选择下拉菜单 -->
<view class="select-container">
<label class="select-label">选择点位</label>
<input type="text" class="search-input" v-model="searchKeyword" @focus="showOptions = true"
<input type="text" class="search-input" v-model="searchKeyword" @focus="showOptions = !showOptions"
placeholder="请输入点位名称搜索" readonly />
<!-- 下拉选项 -->
@ -14,11 +14,12 @@
</view>
<!-- 有选项时显示选项列表 -->
<view v-else>
<view v-for="option in pointsList"
:key="option.point_id"
class="option-item"
@click="selectPointHandler(option)">
{{ option.point_info.point_name }}
<view v-for="option in pointsList" :key="option.id" class="option-item"
@click="option.exec_status != 3 && selectPointHandler(option)"
:class="{ 'disabled': option.exec_status == 3 }">
<view>
{{ option.point_info.point_name }}
</view>
</view>
</view>
</view>
@ -57,6 +58,7 @@ import {
uniqueByField,
menuButtonInfo,
NavgateTo,
upload
} from "../../../utils";
import { apiArr } from "../../../api/routingInspection";
@ -87,16 +89,17 @@ export default {
this.pointsList = res.task_point_info
},
selectPointHandler(option) {
console.log("🚀 ~ selectPointHandler ~ option:", option)
//
if (option && option.point_info && option.point_info.point_name) {
// id
this.selectedPoint = option.location_info && option.point_id
? option.point_id
this.selectedPoint = option.location_info && option.id
? option.id
: option.id || option.point_info.point_name
this.selectedPointInfo = option //
this.searchKeyword = option.point_info.point_name
this.showOptions = false
//
this.images = []
} else {
console.warn('选择的点位信息不完整', option)
}
@ -150,25 +153,52 @@ export default {
}
try {
// 使
//
uni.showLoading({
title: '正在上传图片...',
mask: true
})
// 使Promise.all
const uploadPromises = this.images.map(imagePath => {
return new Promise((resolve, reject) => {
upload(imagePath, (res) => {
if (res.code === 1 && res.data && res.data.path) {
resolve(res.data.path); // URL
} else {
reject(new Error('图片上传失败'));
}
});
});
});
//
const uploadedImageUrls = await Promise.all(uploadPromises);
uni.hideLoading();
// 使URL
const params = {
task_id: parseInt(this.taskId), // ID
point_id: parseInt(this.selectedPoint), // ID
image: this.images //
task_point_id: parseInt(this.selectedPoint), // ID
image: uploadedImageUrls // 使URL
}
console.log('上传成功的图片URL', uploadedImageUrls)
//
const res = await request(apiArr.routingInspectionSubmit, "POST", params);
//
console.log('提交数据:', params)
//
uni.showToast({
title: '提交成功',
icon: 'success'
})
} catch (error) {
uni.hideLoading();
console.error('提交失败', error)
uni.showToast({
title: '提交失败',

View File

@ -14,12 +14,12 @@
</view>
<view class="work-order-section">
<view v-for="(item, index) in 9" :key="index">
<view class="work-order-card" v-if="index == 0 && showWorkOrderSection"
<view class="work-order-card" v-if="index == 1 && showWorkOrderSection"
@click="navigateToWorkOrderDashboard">
<image class="work-order-icon" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/workOrder.png" mode="aspectFill" />
<text class="work-order-text">工单台</text>
</view>
<view class="work-order-card" v-if="index == 1"
<view class="work-order-card" v-if="index == 0"
@click="navigateToRoutingInspection">
<image class="work-order-icon" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/polling.png" mode="aspectFill" />
<text class="work-order-text">巡更巡检</text>

View File

@ -52,6 +52,9 @@ export default {
},
onLoad(options) {
this.communityId = JSON.parse(options.communityId);
// this.getList();
},
onShow() {
this.getList();
},
methods: {

View File

@ -25,7 +25,7 @@
</view>
<view class="section section1">
<view class="section_label">
<view>{{ userInfo.balance }}</view>
<view>{{ userInfo.property_housing_fund }}</view>
<view>积分</view>
</view>
<view class="section_label">
@ -113,14 +113,16 @@
</u-grid>
</view>
</view>
<view class="main margin20" v-if="isMerchant">
<view class="main_title">商家端</view>
<view class="main margin20" v-if="shopManagementList.some(item => item.isShow)">
<view class="main_title">功能服务</view>
<view class="item1 padding_bottom0">
<u-grid col="4" :border="false">
<u-grid-item @click="headerOrderClick(item)" v-for="(item, index) in shopManagementList"
:key="index">
<image class="nav_icon" :src="item.image" mode=""></image>
<text class="grid-text">{{ item.name }}</text>
<view v-if="item.isShow" class="item2">
<image class="nav_icon" :src="item.image" mode=""></image>
<text class="grid-text">{{ item.name }}</text>
</view>
</u-grid-item>
</u-grid>
</view>
@ -217,11 +219,26 @@ export default {
url: "",
}
],
shopManagementList: [{
image: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/user_page_Group_1782.png",
name: "店铺管理",
url: "/packages/storeManagement/index/index",
}],
shopManagementList: [
{
image: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/user_page_Group_1782.png",
name: "商家端",
url: "/packages/storeManagement/index/index",
isShow: uni.getStorageSync('is_merchant'),
},
{
image: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/userPageGys.png",
name: "供应商端",
url: "",
isShow: uni.getStorageSync('is_worker'),
},
{
image: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/userPageWuye.png",
name: "物业端",
url: "/packages/workOrderDashboard/guide/index",
isShow: uni.getStorageSync("is_worker"),
}
],
parkList: [
{
image: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/park/parkIndex_icon1.png",
@ -246,7 +263,6 @@ export default {
],
userInfo: {},
isShop: uni.getStorageSync('is_shop'),
isMerchant: uni.getStorageSync('is_merchant'),
}
},