Compare commits

..

No commits in common. "master" and "feature/yi" have entirely different histories.

307 changed files with 10726 additions and 35812 deletions

View File

@ -9,5 +9,4 @@ export const apiArr = {
updateApply: "/api/v2/wechat/commodity/after-sales/update-apply", //商品订单售后修改申请 updateApply: "/api/v2/wechat/commodity/after-sales/update-apply", //商品订单售后修改申请
createReview: "/api/v2/wechat/commodity/review/create", //创建订单评价 createReview: "/api/v2/wechat/commodity/review/create", //创建订单评价
orderRefund: "/api/v2/wechat/commodity/order/refund", //商品订单退款 orderRefund: "/api/v2/wechat/commodity/order/refund", //商品订单退款
selectGoodsDetail: "/api/v2/wechat/commodity/goods-info/by-goods", //根据货品id查询商品货品信息
}; };

View File

@ -1,13 +0,0 @@
export const apiArr = {
ecApply: "/api/v2/wechat/lkl-split-business/ec-apply", //电子合同申请
ecQuery: "/api/v2/wechat/lkl-split-business/ec-query", //电子合同查询
ecDownload: "/api/v2/wechat/lkl-split-business/ec-download", //电子合同下载
upload: "/api/v2/wechat/lkl-split-business/upload", //附件上传
applyLedgerReceiver: "/api/v2/wechat/lkl-split-business/apply-ledger-receiver", //分账接收方创建申请
applyBind: "/api/v2/wechat/lkl-split-business/apply-bind", //分账关系绑定申请
addMer: "/api/v2/wechat/lkl-split-business/add-mer", //商户进件
queryMerchant: "/api/v2/wechat/lkl-split-business/query-merchant", //商户进件信息查询
applyLedgerMer: "/api/v2/wechat/lkl-split-business/apply-ledger-mer", //商户分账业务开通申请
queryLedgerMer: "/api/v2/wechat/lkl-split-business/query-ledger-mer", //商户分账信息查询
progresss: "/api/v2/wechat/lkl-split-business/progress", //商户分账进度查询
};

View File

@ -1,27 +0,0 @@
export const apiArr = {
// 到家服务
categoryList: "/api/v2/wechat/service/category/list", // 服务分类列表
categorySubList: "/api/v2/wechat/service/category/sub-list", // 全部小类(到家+家政两大类合并,供金刚区)
serviceList: "/api/v2/wechat/service/list", // 服务商品列表
serviceInfo: "/api/v2/wechat/service/info", // 服务详情(含SKU+师傅)
orderCreate: "/api/v2/wechat/service/order/create", // 下单(定金单)
orderList: "/api/v2/wechat/service/order/list", // 我的服务订单列表
orderInfo: "/api/v2/wechat/service/order/info", // 服务订单详情
orderCancel: "/api/v2/wechat/service/order/cancel", // 取消服务订单
preorder: "/api/v2/wechat/service/order/preorder", // 预下单(拉卡拉)
tradeQuery: "/api/v2/wechat/service/order/trade-query", // 查单
// 师傅端
workerOrderList: "/api/v2/wechat/service/worker/order-list", // 师傅服务单列表
workerOrderStatus: "/api/v2/wechat/service/worker/order-status", // 师傅更新状态
workerExtraOrder: "/api/v2/wechat/service/worker/extra-order", // 师傅代客补差单
workerMyInfo: "/api/v2/wechat/service/worker/my-info", // 解析当前用户的师傅信息
// 家政合同(客户端)
contractList: "/api/v2/wechat/service/contract/list", // 我的家政合同列表
contractInfo: "/api/v2/wechat/service/contract/info", // 家政合同详情
// 月账单
workerMonthlyBillList: "/api/v2/wechat/service/worker/monthly-bill-list", // 师傅月账单列表
workerPushBill: "/api/v2/wechat/service/worker/push-bill", // 师傅推送/拒绝月账单
userMonthlyBillList: "/api/v2/wechat/service/user/monthly-bill-list", // 用户月账单列表
userMonthlyBillPreOrder: "/api/v2/wechat/service/user/monthly-bill/preorder", // 用户月账单预下单
userMonthlyBillTradeQuery: "/api/v2/wechat/service/user/monthly-bill/trade-query", // 用户月账单查单
}

View File

@ -1,10 +0,0 @@
export const apiArr = {
pointShopTab: "/api/v2/wechat/points-mall/tab", //积分商城tab
pointShopPage: "/api/v2/wechat/points-mall/page", //积分商城列表分页
platformPointsRule: "/api/v2/wechat/points-mall/platform-points-rule", //平台积分规则
pointShopRecord: "/api/v2/wechat/points-mall/order/record", //积分商城兑换记录
pointShopPay: "/api/v2/wechat/points-mall/order/pay", //积分商城订单支付
pointOrderInfo: "/api/v2/wechat/points-mall/order/info", //积分商城订单详情
pointShopAdd: "/api/v2/wechat/points-mall/order/add", //积分商城创建订单
pointGoodInfo: "/api/v2/wechat/points-mall/info", //积分商城商品详情
};

View File

@ -16,8 +16,6 @@ export const apiArr = {
addAddress: '/api/v2/wechat/commodity/receiving_address/add', // 收货地址添加 addAddress: '/api/v2/wechat/commodity/receiving_address/add', // 收货地址添加
addAddressList: '/api/v2/wechat/commodity/receiving_address', // 收货地址列表 addAddressList: '/api/v2/wechat/commodity/receiving_address', // 收货地址列表
queryOrder: '/api/v2/wechat/commodity/order/trade_query', // 查询订单 queryOrder: '/api/v2/wechat/commodity/order/trade_query', // 查询订单
splitLedger: '/api/v2/wechat/commodity/order/split-ledger', // 分账
orderUpdate: '/api/v2/wechat/commodity/order/update',
getComment: '/api/v2/wechat/commodity/review/list', // 获取评论 getComment: '/api/v2/wechat/commodity/review/list', // 获取评论
mergePreorder: '/api/v2/wechat/commodity/order/preorder', // 商品订单合并预下单 mergePreorder: '/api/v2/wechat/commodity/order/preorder', // 商品订单合并预下单

View File

@ -17,8 +17,4 @@ export const apiArr = {
couponList: '/api/v1/wechat/discuss/list', // 获取优惠券列表 couponList: '/api/v1/wechat/discuss/list', // 获取优惠券列表
getUserCommunity:"/api/v1/wechat/community/owner/mylist",//获取用户社区信息 getUserCommunity:"/api/v1/wechat/community/owner/mylist",//获取用户社区信息
createQrcode: '/api/v1/wechat/water/device/qr-code', //获取小程序码 createQrcode: '/api/v1/wechat/water/device/qr-code', //获取小程序码
redPackageCenter: '/api/v2/wechat/red-package/center', //红包中心分页
redPackageClaim: '/api/v2/wechat/red-package/claim', //领取红包
redPackageMyred: '/api/v2/wechat/red-package/my-red', //我的红包分页
}; };

View File

@ -2,9 +2,6 @@ export const apiArr = {
getCateList: "/api/v2/wechat/merchant-cate-crud/list", //商家分类列表 getCateList: "/api/v2/wechat/merchant-cate-crud/list", //商家分类列表
getMerchantList: "/api/v2/wechat/merchant-info-crud/page", //商家列表 getMerchantList: "/api/v2/wechat/merchant-info-crud/page", //商家列表
getHomeBanner: "/api/v2/wechat/home-banner-region-crud/page", //获取首页banner及其广告 getHomeBanner: "/api/v2/wechat/home-banner-region-crud/page", //获取首页banner及其广告
getHomeBannerMulti: "/api/v2/wechat/home-banner-region-crud/multi", //按广告位批量获取首页广告(一次返回多个 ad_position)
getButtonNum:"/api/v2/wechat/nav-display-crud/info",//获取首页button的行数 数量 getButtonNum:"/api/v2/wechat/nav-display-crud/info",//获取首页button的行数 数量
getHomeButton:"/api/v2/wechat/home-button-region-crud/page", //获取首页button getHomeButton:"/api/v2/wechat/home-button-region-crud/page", //获取首页button
statusQuery:"/api/v2/wechat/store-info-crud/status-query", //门店审核状态查询
}; };

View File

@ -1,6 +1,6 @@
export const apiArr = { export const apiArr = {
getUserInfo: '/api/v2/wechat/mpuser-crud/info', // 获取城市列表 getUserInfo: '/api/v2/wechat/mpuser-crud/info', // 获取城市列表
userInfoUpdate: '/api/v2/wechat/mpuser-crud/update', // 会员信息更新 userInfoUpdate: '/api/v2/wechat/mpuser-crud/update', // 会员信息更新
getAccumulationFund: '/api/v2/wechat/government-housing-fund-flow-crud/page', // 岁银 getAccumulationFund: '/api/v2/wechat/government-housing-fund-flow-crud/page', // 物业费
getPoints: '/api/v2/wechat/member-points-flow-crud/page', // 积分 getPoints: '/api/v2/wechat/member-points-flow-crud/page', // 积分
} }

View File

@ -3,7 +3,6 @@ export const apiArr = {
getMerchantList:"/api/v2/wechat/merchant-info-crud/page",//商家列表 getMerchantList:"/api/v2/wechat/merchant-info-crud/page",//商家列表
createComment:"/api/v2/wechat/merchant-evaluation-crud/creat",//创建用户评价 createComment:"/api/v2/wechat/merchant-evaluation-crud/creat",//创建用户评价
getMerchantInfo:"/api/v2/wechat/merchant-info-crud/info",//获取商家信息详情 getMerchantInfo:"/api/v2/wechat/merchant-info-crud/info",//获取商家信息详情
getShopActivityList:"/api/v2/wechat/commodity/shop-activity/list",//好店详情页-店铺活动商品列表
getMerchantComment:"/api/v2/wechat/merchant-evaluation-crud/page",//获取商家评价 getMerchantComment:"/api/v2/wechat/merchant-evaluation-crud/page",//获取商家评价
merChantCommentLike:"/api/v2/wechat/merchant-evaluation-like-crud/creat",//点赞 merChantCommentLike:"/api/v2/wechat/merchant-evaluation-like-crud/creat",//点赞
merChantCommentUnlike:"/api/v2/wechat/merchant-evaluation-like-crud/del",//取消点赞 merChantCommentUnlike:"/api/v2/wechat/merchant-evaluation-like-crud/del",//取消点赞
@ -27,5 +26,4 @@ export const apiArr = {
createStore:"/api/v2/wechat/store-info-crud/creat",//门店信息创建 createStore:"/api/v2/wechat/store-info-crud/creat",//门店信息创建
ocrRecognize:"/api/v1/wechat/oss/ocr-recognize",//证件 OCR 自动识别
}; };

View File

@ -1,107 +0,0 @@
<template>
<view class="private-image">
<image v-if="signedUrl" :src="signedUrl" :mode="mode" :style="{ width: width, height: height }"
@click="onClick" @error="onError" />
<view v-else-if="loading" class="ph">加载中…</view>
<view v-else-if="error" class="ph err">{{ error }}</view>
<view v-else-if="!path" class="ph">未上传</view>
</view>
</template>
<script>
// PrivateImage —— 私密文件查看(小程序,商家本人)
//
// 用法:
// <PrivateImage :path="form.id_card_front" width="200rpx" height="120rpx" />
//
// 不传 targetUserId —— 服务端会校验 object key 必须属于当前登录用户
import {
signPrivateView
} from '@/utils/uploadOSS.js'
export default {
name: 'PrivateImage',
props: {
path: {
type: String,
default: ''
},
width: {
type: String,
default: '200rpx'
},
height: {
type: String,
default: '120rpx'
},
mode: {
type: String,
default: 'aspectFill'
},
// mount 立即签发;click 点击才签
trigger: {
type: String,
default: 'mount'
}
},
data() {
return {
signedUrl: '',
loading: false,
error: ''
}
},
watch: {
path: {
immediate: true,
handler(v) {
if (v && this.trigger === 'mount') this.fetch()
else this.signedUrl = ''
}
}
},
methods: {
async fetch() {
if (!this.path) return
this.loading = true
this.error = ''
try {
const res = await signPrivateView(this.path)
this.signedUrl = res.url
} catch (e) {
this.error = e.message || '加载失败'
} finally {
this.loading = false
}
},
onClick() {
if (this.signedUrl) {
uni.previewImage({
urls: [this.signedUrl]
})
} else if (this.trigger === 'click') {
this.fetch()
}
},
onError() {
this.error = '图片加载失败'
this.signedUrl = ''
}
}
}
</script>
<style scoped>
.private-image .ph {
display: inline-block;
text-align: center;
color: #999;
font-size: 22rpx;
padding: 16rpx;
border: 2rpx dashed #ccc;
}
.private-image .ph.err {
color: #f56c6c;
}
</style>

View File

@ -64,8 +64,6 @@ a {
width: 130rpx; width: 130rpx;
height: 130rpx; height: 130rpx;
border-radius: 50%; border-radius: 50%;
/* 扫一扫按钮:橙色系图标整体转为选中态红色系,更突出 */
filter: hue-rotate(-20deg) saturate(1.25);
} }

View File

@ -43,63 +43,63 @@ export default {
navList: [ navList: [
{ {
photo: photo:
"https://static.hshuishang.com/property-img-file/footer_home.png", "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/footer_home.png",
photoAc: photoAc:
"https://static.hshuishang.com/property-img-file/footer_homeAc.png", "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/footer_homeAc.png",
nav_name: "智慧首页", nav_name: "智慧首页",
url: "/pages/index2/index2", url: "/pages/index/index",
}, },
{ {
photo: photo:
"https://static.hshuishang.com/property-img-file/footer_facility.png", "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/footer_facility.png",
photoAc: photoAc:
"https://static.hshuishang.com/property-img-file/footer_facilityAc.png", "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/footer_facilityAc.png",
nav_name: "智能设备", nav_name: "智能设备",
url: "/packages/smartDevice/home/index", url: "/packages/smartDevice/index/index",
}, },
{ {
photo: photo:
"https://static.hshuishang.com/property-img-file/footer_richScan.png", "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/footer_richScan.png",
photoAc: photoAc:
"https://static.hshuishang.com/property-img-file/footer_richScan.png", "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/footer_richScan.png",
url: "", url: "",
isScan: true, isScan: true,
}, },
{ {
photo: photo:
"https://static.hshuishang.com/property-img-file/footer_community.png", "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/footer_community.png",
photoAc: photoAc:
"https://static.hshuishang.com/property-img-file/footer_communityAc.png", "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/footer_communityAc.png",
nav_name: "我的社区", nav_name: "我的小区",
url: "/packages/community/index/index", url: "/packages/community/index/index",
}, },
// { // {
// photo: "https://static.hshuishang.com/property-img-file/footer_localLife.png", // photo: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/footer_localLife.png",
// photoAc: "https://static.hshuishang.com/property-img-file/footer_localLifeAc.png", // photoAc: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/footer_localLifeAc.png",
// nav_name: "本地生活", // nav_name: "本地生活",
// url: "/packages/localLife/index/index", // url: "/packages/localLife/index/index",
// }, // },
// { // {
// photo: // photo:
// "https://static.hshuishang.com/property-img-file/footer_shop.png", // "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/footer_shop.png",
// photoAc: // photoAc:
// "https://static.hshuishang.com/property-img-file/footer_shopAc.png", // "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/footer_shopAc.png",
// nav_name: "优选商城", // nav_name: "优选商城",
// url: "/packages/shop/index/index", // url: "/packages/shop/index/index",
// }, // },
// { // {
// photo: // photo:
// "https://static.hshuishang.com/property-img-file/footer_door.png", // "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/footer_door.png",
// photoAc: // photoAc:
// "https://static.hshuishang.com/property-img-file/footer_communityAc.png", // "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/footer_communityAc.png",
// nav_name: "到家服务", // nav_name: "到家服务",
// url: "/packages/homeServer/index/index", // url: "/packages/homeServer/index/index",
// }, // },
{ {
photo: photo:
"https://static.hshuishang.com/property-img-file/footer_mine.png", "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/footer_mine.png",
photoAc: photoAc:
"https://static.hshuishang.com/property-img-file/footer_mineAc.png", "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/footer_mineAc.png",
nav_name: "个人中心", nav_name: "个人中心",
url: "/pages/user/index", url: "/pages/user/index",
}, },
@ -167,12 +167,10 @@ export default {
// 解析path字段,提取scene参数的值 // 解析path字段,提取scene参数的值
const pathParts = res.path.split('?'); const pathParts = res.path.split('?');
if (pathParts.length > 1) { if (pathParts.length > 1) {
if (pathParts[1].startsWith('scene=')){ const queryParams = pathParts[1].split('&');
const pathPart = decodeURIComponent(pathParts[1].substring(6))
const queryParams = pathPart.split('&');
for (const param of queryParams) { for (const param of queryParams) {
const [key, value] = param.split('='); const [key, value] = param.split('=');
if (key === 'id') { if (key === 'scene') {
const params = { const params = {
id: value id: value
} }
@ -183,7 +181,6 @@ export default {
} }
} }
} }
}
}, },
fail: (err) => { fail: (err) => {
console.log('扫码失败:', err); console.log('扫码失败:', err);
@ -200,10 +197,9 @@ export default {
const ctoken = uni.getStorageSync("ctoken"); const ctoken = uni.getStorageSync("ctoken");
const authen = [ const authen = [
"/pages/index2/index2",
"/pages/index/index", "/pages/index/index",
"/pages/user/index", "/pages/user/index",
"/packages/smartDevice/home/index", "/packages/smartDevice/index/index",
]; ];
// 除首页及个人中心页不需要鉴定ctoken, 其他tab页均需存在登录态才可访问 // 除首页及个人中心页不需要鉴定ctoken, 其他tab页均需存在登录态才可访问
if (authen.includes(url)) { if (authen.includes(url)) {

View File

@ -0,0 +1,74 @@
# slider-range
uni-app 滑块区间选择组件
可根据具体需求,修改、自定义其他内容。
## 属性说明
|属性名|类型|默认值|说明|
| -- | -- | --|--|
| value | Array<Number, Number> | [0,100] |滑块已选中区间的值|
| min | Number| 0 | 滑块区间最小值 |
| max | Number | 100 | 滑块区间最大值 |
| step | Number | 1 | 拖动时的步长 |
| disabled | Boolean | false | 是否为禁用状态 |
| height | Number | 50 | 滑块容器高度 |
| barHeight | Number | 5 | 滑块进度条高度 |
| backgroundColor | String | #e9e9e9| 滑块进度条背景色|
| activeColor | String | #1aad19 | 已选中区间进度条颜色|
| blockSize | Number | 20 | 滑块大小 |
| blockColor | String | #fff | 滑块颜色 |
| decorationVisible | Boolean | false | 是否显示滑块内装饰元素|
| tipVisible | Boolean | true | 是否显示滑块值提示文本 |
| fomat| Function | | 滑块值提示文本格式化函数,**注意**:小程序中此属性必传,否则会报错,如果无需格式化,可以简单返回原始值: `format(val) { return val }`;H5中可以不传。|
## 使用示例
```html
<slider-range
:value="rangeValue"
:min="rangeMin"
:max="rangMax"
:step="5"
:bar-height="3"
:block-size="26"
background-color="#EEEEF6"
active-color="#FF6B00"
:format="format"
:decorationVisible="true"
@change="handleRangeChange"
></slider-range>
```
```javascript
import SliderRange from '../components/slider-range/index.vue'
export default {
components: {
SliderRange
},
data() {
return {
rangeMin: 5,
rangMax: 200,
rangeValue: [10, 50]
}
},
methods: {
format(val) {
return val + '%'
},
handleRangeChange(e) {
this.rangeValue = e
}
}
}
```
效果图
![](http://images.alisali.cn/img_20190715175325.png)

View File

@ -0,0 +1,378 @@
<template>
<view
class="slider-range"
:class="{ disabled: disabled }"
:style="{ paddingLeft: blockSize / 2 + 'px', paddingRight: blockSize / 2 + 'px' }"
>
<view class="slider-range-inner" :style="{ height: height + 'px' }">
<view
class="slider-bar"
:style="{
height: barHeight + 'px',
}"
>
<!-- 背景条 -->
<view
class="slider-bar-bg"
:style="{
backgroundColor: backgroundColor,
}"
></view>
<!-- 滑块实际区间 -->
<view
class="slider-bar-inner"
:style="{
width: ((values[1] - values[0]) / (max - min)) * 100 + '%',
left: lowerHandlePosition + '%',
backgroundColor: activeColor,
}"
></view>
</view>
<!-- 滑动块-左 -->
<view
class="slider-handle-block"
:class="{ decoration: decorationVisible }"
:style="{
backgroundColor: blockColor,
width: blockSize + 'px',
height: blockSize + 'px',
left: lowerHandlePosition + '%',
}"
@touchstart="_onTouchStart"
@touchmove="_onBlockTouchMove"
@touchend="_onBlockTouchEnd"
data-tag="lowerBlock"
></view>
<!-- 滑动块-右 -->
<view
class="slider-handle-block"
:class="{ decoration: decorationVisible }"
:style="{
backgroundColor: blockColor,
width: blockSize + 'px',
height: blockSize + 'px',
left: higherHandlePosition + '%',
}"
@touchstart="_onTouchStart"
@touchmove="_onBlockTouchMove"
@touchend="_onBlockTouchEnd"
data-tag="higherBlock"
></view>
<!-- 滑块值提示 -->
<view v-if="tipVisible" class="range-tip" :style="lowerTipStyle">{{ format(values[0]) }}</view>
<view v-if="tipVisible" class="range-tip" :style="higherTipStyle">{{ format(values[1]) }}</view>
</view>
</view>
</template>
<script>
export default {
components: {},
props: {
//滑块区间当前取值
value: {
type: Array,
default: function() {
return [0, 100]
},
},
//最小值
min: {
type: Number,
default: 0,
},
//最大值
max: {
type: Number,
default: 100,
},
step: {
type: Number,
default: 1,
},
format: {
type: Function,
default: function(val) {
return val
},
},
disabled: {
type: Boolean,
default: false,
},
//滑块容器高度
height: {
height: Number,
default: 50,
},
//区间进度条高度
barHeight: {
type: Number,
default: 5,
},
//背景条颜色
backgroundColor: {
type: String,
default: '#e9e9e9',
},
//已选择的颜色
activeColor: {
type: String,
default: '#1aad19',
},
//滑块大小
blockSize: {
type: Number,
default: 20,
},
blockColor: {
type: String,
default: '#fff',
},
tipVisible: {
type: Boolean,
default: true,
},
decorationVisible: {
type: Boolean,
default: false,
},
},
data() {
return {
values: [this.min, this.max],
startDragPos: 0, // 开始拖动时的坐标位置
startVal: 0, //开始拖动时较小点的值
}
},
computed: {
// 较小点滑块的坐标
lowerHandlePosition() {
return ((this.values[0] - this.min) / (this.max - this.min)) * 100
},
// 较大点滑块的坐标
higherHandlePosition() {
return ((this.values[1] - this.min) / (this.max - this.min)) * 100
},
lowerTipStyle() {
if (this.lowerHandlePosition < 90) {
return `left: ${this.lowerHandlePosition}%;`
}
return `right: ${100 - this.lowerHandlePosition}%;transform: translate(50%, -100%);`
},
higherTipStyle() {
if (this.higherHandlePosition < 90) {
return `left: ${this.higherHandlePosition}%;`
}
return `right: ${100 - this.higherHandlePosition}%;transform: translate(50%, -100%);`
},
},
created: function() {},
onLoad: function(option) {},
watch: {
//滑块当前值
value: {
immediate: true,
handler(newVal, oldVal) {
if (this._isValuesValid(newVal) && (newVal[0] !== this.values[0] || newVal[1] !== this.values[1])) {
this._updateValue(newVal)
}
},
},
},
methods: {
_updateValue(newVal) {
// 步长大于区间差,或者区间最大值和最小值相等情况
if (this.step >= this.max - this.min) {
throw new RangeError('Invalid slider step or slider range')
}
let newValues = []
if (Array.isArray(newVal)) {
newValues = [newVal[0], newVal[1]]
}
if (typeof newValues[0] !== 'number') {
newValues[0] = this.values[0]
} else {
newValues[0] = Math.round((newValues[0] - this.min) / this.step) * this.step + this.min
}
if (typeof newValues[1] !== 'number') {
newValues[1] = this.values[1]
} else {
newValues[1] = Math.round((newValues[1] - this.min) / this.step) * this.step + this.min
}
// 新值与原值相等,不做处理
if (this.values[0] === newValues[0] && this.values[1] === newValues[1]) {
return
}
// 左侧滑块值小于最小值时,设置为最小值
if (newValues[0] < this.min) {
newValues[0] = this.min
}
// 右侧滑块值大于最大值时,设置为最大值
if (newValues[1] > this.max) {
newValues[1] = this.max
}
// 两个滑块重叠或左右交错,使两个滑块保持最小步长的间距
if (newValues[0] >= newValues[1]) {
// 左侧未动,右侧滑块滑到左侧滑块之左
if (newValues[0] === this.values[0]) {
newValues[1] = newValues[0] + this.step
} else {
// 右侧未动, 左侧滑块滑到右侧之右
newValues[0] = newValues[1] - this.step
}
}
this.values = newValues
this.$emit('change', this.values)
},
_onTouchStart: function(event) {
if (this.disabled) {
return
}
this.isDragging = true
let tag = event.target.dataset.tag
//兼容h5平台及某版本微信
let e = event.changedTouches ? event.changedTouches[0] : event
this.startDragPos = e.pageX
this.startVal = tag === 'lowerBlock' ? this.values[0] : this.values[1]
},
_onBlockTouchMove: function(e) {
if (this.disabled) {
return
}
this._onDrag(e)
},
_onBlockTouchEnd: function(e) {
if (this.disabled) {
return
}
this.isDragging = false
this._onDrag(e)
},
_onDrag(event) {
if (!this.isDragging) {
return
}
let view = uni
.createSelectorQuery()
.in(this)
.select('.slider-range-inner')
view
.boundingClientRect(data => {
let sliderWidth = data.width
const tag = event.target.dataset.tag
let e = event.changedTouches ? event.changedTouches[0] : event
let diff = ((e.pageX - this.startDragPos) / sliderWidth) * (this.max - this.min)
let nextVal = this.startVal + diff
if (tag === 'lowerBlock') {
this._updateValue([nextVal, null])
} else {
this._updateValue([null, nextVal])
}
})
.exec()
},
_isValuesValid: function(values) {
return Array.isArray(values) && values.length == 2
},
},
}
</script>
<style scoped>
.slider-range {
position: relative;
padding-top: 40rpx;
}
.slider-range-inner {
position: relative;
width: 100%;
}
.slider-range.disabled .slider-bar-inner {
opacity: 0.35;
}
.slider-range.disabled .slider-handle-block {
cursor: not-allowed;
}
.slider-bar {
position: absolute;
top: 50%;
left: 0;
right: 0;
transform: translateY(-50%);
}
.slider-bar-bg {
position: absolute;
width: 100%;
height: 100%;
border-radius: 10000px;
z-index: 10;
}
.slider-bar-inner {
position: absolute;
width: 100%;
height: 100%;
border-radius: 10000px;
z-index: 11;
}
.slider-handle-block {
position: absolute;
top: 50%;
transform: translate(-50%, -50%);
border-radius: 50%;
box-shadow: 0 0 3px 2px rgba(227, 229, 241, 0.5);
z-index: 12;
}
.slider-handle-block.decoration::before {
position: absolute;
content: '';
width: 6upx;
height: 24upx;
top: 50%;
left: 29%;
transform: translateY(-50%);
background: #eeedf2;
border-radius: 3upx;
z-index: 13;
}
.slider-handle-block.decoration::after {
position: absolute;
content: '';
width: 6upx;
height: 24upx;
top: 50%;
right: 29%;
transform: translateY(-50%);
background: #eeedf2;
border-radius: 3upx;
z-index: 13;
}
.range-tip {
position: absolute;
top: 0;
font-size: 24upx;
color: #666;
transform: translate(-50%, -100%);
}
</style>

View File

@ -0,0 +1,90 @@
<template>
<view class="demo-slider-range">
<view class="section-title">普通用法</view>
<view class="slider-item">
<slider-range
:value="slider1.rangeValue"
:min="slider1.min"
:max="slider1.max"
:step="slider1.step"
:bar-height="barHeight"
:block-size="blockSize"
:background-color="backgroundColor"
:format="format1"
@change="handleRangeChange"
></slider-range>
</view>
<view class="section-title">自定义</view>
<view class="slider-item">
<slider-range
:value="slider2.rangeValue"
:min="slider2.min"
:max="slider2.max"
:step="slider2.step"
:bar-height="barHeight"
:block-size="blockSize"
:background-color="backgroundColor"
:active-color="slider2.activeColor"
:format="format2"
:decorationVisible="slider2.decorationVisible"
@change="handleRangeChange"
></slider-range>
</view>
</view>
</template>
<script>
import SliderRange from '../../components/slider-range/index.vue'
export default {
components: {
SliderRange,
},
data() {
return {
barHeight: 3,
blockSize: 26,
backgroundColor: '#EEEEF6',
slider1: {
min: 50,
max: 200,
step: 10,
rangeValue: [50, 150],
},
slider2: {
rangeMin: 0,
rangMax: 100,
rangeValue: [8, 80],
step: 1,
activeColor: '#FF6B00',
decorationVisible: true,
},
}
},
methods: {
format1(val) {
return val
},
format2(val) {
return `${val}%`
},
handleRangeChange(e) {
this.rangeValue = e
},
},
}
</script>
<style>
.demo-slider-range {
background-color: #fff;
padding: 100rpx 40rpx 0;
}
.section-title {
padding: 0 0 20rpx;
color: #666;
}
.slider-item:not(:last-child) {
margin-bottom: 100rpx;
}
</style>

View File

@ -1,14 +1,14 @@
<template> <template>
<view class="search"> <view class="search">
<view class="locat" catchtap="goPagesLink"> <view class="locat" catchtap="goPagesLink">
<image class="local_left_icon" src="https://static.hshuishang.com/User/_assets/location.png" <image class="local_left_icon" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/User/_assets/location.png"
mode="" /> mode="" />
<text class="local_city">{{address}}</text> <text class="local_city">{{address}}</text>
<van-icon name="arrow-down" color="#FF512A " /> <van-icon name="arrow-down" color="#FF512A " />
</view> </view>
<view class='search_bar'> <view class='search_bar'>
<image class="search_icon" <image class="search_icon"
src="https://static.hshuishang.com/community/_assets/Group_36.png" mode="" /> src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/community/_assets/Group_36.png" mode="" />
<input class="search_input" placeholder='输入搜索的社区名称' confirm-type='search' @input="searchInput" <input class="search_input" placeholder='输入搜索的社区名称' confirm-type='search' @input="searchInput"
@confirm="searchInput" :value=" selectKeyWord" /> @confirm="searchInput" :value=" selectKeyWord" />
</view> </view>

View File

@ -9,7 +9,7 @@
<view class="center">物业公司:{{item.shop && item.shop.shop_name || item.property}}</view> <view class="center">物业公司:{{item.shop && item.shop.shop_name || item.property}}</view>
<view class="address"> <view class="address">
<image class="address_icon" <image class="address_icon"
src="https://static.hshuishang.com/community/_assets/Group_50.png" mode="" /> src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/community/_assets/Group_50.png" mode="" />
<view class="text-container"> <view class="text-container">
<text>{{item.addr}}</text> <text>{{item.addr}}</text>
</view> </view>
@ -17,13 +17,13 @@
<view class="bottom"> <view class="bottom">
<view class="bottom_left"> <view class="bottom_left">
<view class="btn" @click.stop="handleOptionClick"> <view class="btn" @click.stop="handleOptionClick">
<image class="btn_icon" src="https://static.hshuishang.com/community/_assets/Send.png" <image class="btn_icon" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/community/_assets/Send.png"
mode="aspectFill" /> mode="aspectFill" />
导航 导航
</view> </view>
<view class="btn mobile" @click.stop="headlePhoneClick"> <view class="btn mobile" @click.stop="headlePhoneClick">
<image class="btn_icon" <image class="btn_icon"
src="https://static.hshuishang.com/community/_assets/Phone-telephone.png" mode="" /> src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/community/_assets/Phone-telephone.png" mode="" />
电话 电话
</view> </view>
</view> </view>

View File

@ -1,84 +0,0 @@
# 首页 Banner / 广告位 跳转现状梳理
> 状态:现状分析(仅梳理,代码未改)。日期:2026-06-03
> 范围:小程序 `pages/index/index.vue` 首页各广告位的点击跳转逻辑,对照后端配置。
---
## 一、后端是怎么配置跳转的
每条 banner/广告(表 `home_banner_region`)、金刚位(表 `home_button_region`)都有统一的跳转配置字段,核心是 **`promotion_type`(推广类型)**:
| promotion_type | 含义 | 配套字段 |
|---|---|---|
| 1 | 无跳转 | — |
| 2 | 选择活动 | 关联 `advertisement_goods`(按 banner id) |
| 3 | 跳转本程序页面 | `link_url` |
| 4 | 跳转其他小程序 | `appid` + `link_url` |
| 5 | 选择商品 | `advertisement_goods[].goods_id` |
- 后台创建/编辑接口(`api/admin/v2/crud_home_banner_region.go`)用 `promotion_type` + `required-if` 校验对应字段,例如 type=4 必填 appid、type=3/4 必填 link_url。
- `home_button_region`(金刚位)字段相同,也有 `promotion_type` / `link_url` / `appid`。
- type=2/5 的落地:`/packages/advertising/index/index?id=<banner.id>` 是“广告聚合落地页”,传 banner 自身 id 进去,页面内部拉该 banner 关联的 `advertisement_goods` 商品列表展示,并可进入 `goodsDetail`。
---
## 二、前端实际怎么跳的(问题所在)
首页有 4 个不同的点击处理函数各管一片,**几乎都没读 `promotion_type`**:
### 1. `headerServerClick`(金刚位 tabList、homeLeftList 用)
- 文件:`pages/index/index.vue`(搜 `headerServerClick(e)`)
- 只看 `link_url` 和 `appid`,**完全忽略 `promotion_type`**。
- 逻辑:无 `link_url` → 弹“此功能暂未开通”;有 `appid` → 跳小程序;否则当本程序路径 `NavgateTo`。
- **后果**:type=2(活动)、type=5(商品)的配置它不认 → 落到“没 link_url”分支 → 弹“暂未开通”。
### 2. `toAdvertisingView`(广告横幅 serverLeft、serverRight[0] 用)
- 文件:`pages/index/index.vue:357` 附近
- **写死**跳 `/packages/advertising/index/index?id=xxx`,不看 `promotion_type`,一律进广告落地页。
### 3. `goToPurify`(serverRight 非首个用,模板 `index.vue:101`)
- 文件:`pages/index/index.vue:363` 附近
- **彻底写死**:固定跳净水小程序 `appId=wx77b22c0a0018e580`,path/appId 全硬编码,传入的 `item` 没用到,与后台配置零关系。
- 模板:`@tap="index === 0 ? toAdvertisingView(serverRightList) : goToPurify(item)"` —— serverRight 第一个跳广告页,其余全跳净水小程序。
### 4. `headerServerClick2`(中部 serverItem / homeRightList1,2 用)
- 文件:`pages/index/index.vue`(搜 `headerServerClick2(e)`)
- 不跳外链,只按 `title` 匹配商家分类做筛选,或固定跳本地生活页。**注意:这一处可能是“按分类筛选”的有意设计,不一定算 bug。**
### 5. 顶部轮播 Banner(位置 1,模板 `index.vue:68`)
- 点击事件被**注释掉了**(`<!-- <swiper-item ... @click="headerServerClick(item)"> -->`),顶部 banner 现在点击无反应。
---
## 三、根因
后台用统一的 `promotion_type` 模型配跳转,前端却是早期“按位置分别写死”的处理函数拼起来的:既没统一读 `promotion_type`,部分位置还硬编码了目标(广告页、净水小程序)。所以出现“很多跳转和后台配置不符”——不是数据错,是前端没按配置解析。
---
## 四、建议修法(未实施,待决策)
做一个统一跳转函数 `handleAdJump(item)`,严格按 `promotion_type` 分发:
```
switch promotion_type:
1: 不跳
2: NavgateTo('/packages/advertising/index/index?id=' + item.id) // 活动
3: link_url 跳本程序页面(兼容 shopEnter 特例 / H5 / APP webview)
4: navigateToMiniProgram(appid, link_url) // 其他小程序
5: NavgateTo('/packages/advertising/index/index?id=' + item.id) // 商品(同活动,落地页内展示)
其他: 弹“暂未开通”
```
然后把首页所有广告位的 `@click`/`@tap` 都换成 `handleAdJump(item)`:
- 顶部轮播 banner:取消注释,改 `handleAdJump`
- 金刚位 tabList、homeLeftList:`headerServerClick` → `handleAdJump`
- serverLeft、serverRight:`toAdvertisingView` / `goToPurify` → `handleAdJump`
### 实施前需确认的点
1. `headerServerClick2`(中部 serverItem 按 title 筛分类)是否要保留分类筛选语义?还是也改成按 `promotion_type` 跳?
2. 净水小程序跳转:是想**保留写死**,还是改由后台某条 banner 配 `type=4 + 该 appid` 来控制(更灵活,去掉硬编码)?
3. type=2/5 是否都统一进广告落地页 `/packages/advertising/index/index?id=banner.id`(当前分析结论是“是”)。
> 相关:`promotion_type` 字段定义见 `huichang-server/internal/model/entity/home_banner_region.go`、`home_button_region.go`;广告落地页 `uniapp-ZHSQ/packages/advertising/index/index.vue`。

View File

@ -10,22 +10,22 @@
<view class="msg"> <view class="msg">
<view class="msg_left"> <view class="msg_left">
<view class="msg_left_1"> <view class="msg_left_1">
<image src="https://static.hshuishang.com/kitchen/kitchen_time.png" mode="widthFix" /> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/kitchen/kitchen_time.png" mode="widthFix" />
{{shopInfo.opening_time}}-{{shopInfo.closing_time}} {{shopInfo.opening_time}}-{{shopInfo.closing_time}}
<view>营业</view> <view>营业</view>
</view> </view>
<view class="msg_left_2"> <view class="msg_left_2">
<image src="https://static.hshuishang.com/kitchen/kitchen_add.png" mode="widthFix" /> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/kitchen/kitchen_add.png" mode="widthFix" />
{{shopInfo.addrInfo}} {{shopInfo.addrInfo}}
</view> </view>
</view> </view>
<view class="msg_right"> <view class="msg_right">
<view class="msg_right1" @click="haderTelClick"> <view class="msg_right1" @click="haderTelClick">
<image src="https://static.hshuishang.com/kitchen/kitchen_phone.png" mode="widthFix" /> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/kitchen/kitchen_phone.png" mode="widthFix" />
电话 电话
</view> </view>
<view class="msg_right2" @click="handleOptionClick"> <view class="msg_right2" @click="handleOptionClick">
<image src="https://static.hshuishang.com/kitchen/kitchen_add.png" mode="widthFix" /> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/kitchen/kitchen_add.png" mode="widthFix" />
导航 导航
</view> </view>
</view> </view>

View File

@ -1,14 +1,14 @@
.box { .box {
width: 750rpx; width: 750rpx;
height: 1343rpx; height: 1343rpx;
background: url(https://static.hshuishang.com/kitchen/recharge_bg.png) no-repeat; background: url(https://wechat-img-file.oss-cn-beijing.aliyuncs.com/kitchen/recharge_bg.png) no-repeat;
background-size: 100% 100%; background-size: 100% 100%;
} }
.msg { .msg {
width: 710rpx; width: 710rpx;
height: 308rpx; height: 308rpx;
background: url(https://static.hshuishang.com/kitchen/recharge_tit.png) no-repeat; background: url(https://wechat-img-file.oss-cn-beijing.aliyuncs.com/kitchen/recharge_tit.png) no-repeat;
background-size: 100% 100%; background-size: 100% 100%;
margin: 0 auto; margin: 0 auto;
margin-top: 30rpx; margin-top: 30rpx;

View File

@ -9,7 +9,7 @@
<view class="msg"> <view class="msg">
账户余额(元) 账户余额(元)
<view>{{money}}</view> <view>{{money}}</view>
<image src="https://static.hshuishang.com/kitchen/recharge_img.png" mode="widthFix" /> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/kitchen/recharge_img.png" mode="widthFix" />
</view> </view>
<view class="recharge"> <view class="recharge">

32
main.js
View File

@ -10,22 +10,6 @@ Vue.config.productionTip = false
import uView from 'uni_modules/uview-ui'; import uView from 'uni_modules/uview-ui';
Vue.use(uView); Vue.use(uView);
// 全局分享 mixin - 所有页面默认开启分享到微信好友和朋友圈
Vue.mixin({
onShareAppMessage() {
return {
title: '汇商生活家',
path: '/pages/index/index'
}
},
onShareTimeline() {
return {
title: '汇商生活家',
query: ''
}
}
})
// 导入工具函数 // 导入工具函数
import { processImageUrl } from './utils/index.js' import { processImageUrl } from './utils/index.js'
@ -55,22 +39,6 @@ const app = createApp(App)
// 安装 uView // 安装 uView
app.use(uView) app.use(uView)
// 全局分享 mixin - 所有页面默认开启分享到微信好友和朋友圈
app.mixin({
onShareAppMessage() {
return {
title: '汇商生活家',
path: '/pages/index/index'
}
},
onShareTimeline() {
return {
title: '汇商生活家',
query: ''
}
}
})
// 导入工具函数 // 导入工具函数
import { processImageUrl } from './utils/index.js' import { processImageUrl } from './utils/index.js'

View File

@ -73,7 +73,6 @@
"urlCheck" : false "urlCheck" : false
}, },
"usingComponents" : true, "usingComponents" : true,
"lazyCodeLoading" : "requiredComponents",
"requiredPrivateInfos" : [ "getLocation", "chooseLocation" ], "requiredPrivateInfos" : [ "getLocation", "chooseLocation" ],
"permission" : { "permission" : {
"scope.userLocation" : { "scope.userLocation" : {

839
package-lock.json generated
View File

@ -1,7 +1,7 @@
{ {
"name": "支付键盘、数字键盘、付款键盘、密码键盘", "name": "支付键盘、数字键盘、付款键盘、密码键盘",
"version": "1.0.1", "version": "1.0.1",
"lockfileVersion": 2, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
@ -1168,842 +1168,5 @@
"node": ">=0.4" "node": ">=0.4"
} }
} }
},
"dependencies": {
"@babel/helper-string-parser": {
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
"integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="
},
"@babel/helper-validator-identifier": {
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
"integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="
},
"@babel/parser": {
"version": "7.28.4",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz",
"integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==",
"requires": {
"@babel/types": "^7.28.4"
}
},
"@babel/types": {
"version": "7.28.4",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz",
"integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==",
"requires": {
"@babel/helper-string-parser": "^7.27.1",
"@babel/helper-validator-identifier": "^7.27.1"
}
},
"@jridgewell/sourcemap-codec": {
"version": "1.5.5",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
"integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="
},
"@vue/compiler-core": {
"version": "3.5.21",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.21.tgz",
"integrity": "sha512-8i+LZ0vf6ZgII5Z9XmUvrCyEzocvWT+TeR2VBUVlzIH6Tyv57E20mPZ1bCS+tbejgUgmjrEh7q/0F0bibskAmw==",
"requires": {
"@babel/parser": "^7.28.3",
"@vue/shared": "3.5.21",
"entities": "^4.5.0",
"estree-walker": "^2.0.2",
"source-map-js": "^1.2.1"
}
},
"@vue/compiler-dom": {
"version": "3.5.21",
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.21.tgz",
"integrity": "sha512-jNtbu/u97wiyEBJlJ9kmdw7tAr5Vy0Aj5CgQmo+6pxWNQhXZDPsRr1UWPN4v3Zf82s2H3kF51IbzZ4jMWAgPlQ==",
"requires": {
"@vue/compiler-core": "3.5.21",
"@vue/shared": "3.5.21"
}
},
"@vue/compiler-sfc": {
"version": "3.5.21",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.21.tgz",
"integrity": "sha512-SXlyk6I5eUGBd2v8Ie7tF6ADHE9kCR6mBEuPyH1nUZ0h6Xx6nZI29i12sJKQmzbDyr2tUHMhhTt51Z6blbkTTQ==",
"requires": {
"@babel/parser": "^7.28.3",
"@vue/compiler-core": "3.5.21",
"@vue/compiler-dom": "3.5.21",
"@vue/compiler-ssr": "3.5.21",
"@vue/shared": "3.5.21",
"estree-walker": "^2.0.2",
"magic-string": "^0.30.18",
"postcss": "^8.5.6",
"source-map-js": "^1.2.1"
}
},
"@vue/compiler-ssr": {
"version": "3.5.21",
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.21.tgz",
"integrity": "sha512-vKQ5olH5edFZdf5ZrlEgSO1j1DMA4u23TVK5XR1uMhvwnYvVdDF0nHXJUblL/GvzlShQbjhZZ2uvYmDlAbgo9w==",
"requires": {
"@vue/compiler-dom": "3.5.21",
"@vue/shared": "3.5.21"
}
},
"@vue/reactivity": {
"version": "3.5.21",
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.21.tgz",
"integrity": "sha512-3ah7sa+Cwr9iiYEERt9JfZKPw4A2UlbY8RbbnH2mGCE8NwHkhmlZt2VsH0oDA3P08X3jJd29ohBDtX+TbD9AsA==",
"requires": {
"@vue/shared": "3.5.21"
}
},
"@vue/runtime-core": {
"version": "3.5.21",
"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.21.tgz",
"integrity": "sha512-+DplQlRS4MXfIf9gfD1BOJpk5RSyGgGXD/R+cumhe8jdjUcq/qlxDawQlSI8hCKupBlvM+3eS1se5xW+SuNAwA==",
"requires": {
"@vue/reactivity": "3.5.21",
"@vue/shared": "3.5.21"
}
},
"@vue/runtime-dom": {
"version": "3.5.21",
"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.21.tgz",
"integrity": "sha512-3M2DZsOFwM5qI15wrMmNF5RJe1+ARijt2HM3TbzBbPSuBHOQpoidE+Pa+XEaVN+czbHf81ETRoG1ltztP2em8w==",
"requires": {
"@vue/reactivity": "3.5.21",
"@vue/runtime-core": "3.5.21",
"@vue/shared": "3.5.21",
"csstype": "^3.1.3"
}
},
"@vue/server-renderer": {
"version": "3.5.21",
"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.21.tgz",
"integrity": "sha512-qr8AqgD3DJPJcGvLcJKQo2tAc8OnXRcfxhOJCPF+fcfn5bBGz7VCcO7t+qETOPxpWK1mgysXvVT/j+xWaHeMWA==",
"requires": {
"@vue/compiler-ssr": "3.5.21",
"@vue/shared": "3.5.21"
}
},
"@vue/shared": {
"version": "3.5.21",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.21.tgz",
"integrity": "sha512-+2k1EQpnYuVuu3N7atWyG3/xoFWIVJZq4Mz8XNOdScFI0etES75fbny/oU4lKWk/577P1zmg0ioYvpGEDZ3DLw=="
},
"abort-controller": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
"integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
"requires": {
"event-target-shim": "^5.0.0"
}
},
"async-limiter": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
"integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
},
"balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
"base64-js": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
},
"bl": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
"integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
"requires": {
"buffer": "^5.5.0",
"inherits": "^2.0.4",
"readable-stream": "^3.4.0"
},
"dependencies": {
"buffer": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
"requires": {
"base64-js": "^1.3.1",
"ieee754": "^1.1.13"
}
},
"readable-stream": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
}
}
},
"brace-expansion": {
"version": "1.1.12",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
"integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"buffer": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
"integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
"requires": {
"base64-js": "^1.3.1",
"ieee754": "^1.2.1"
}
},
"buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
},
"callback-stream": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/callback-stream/-/callback-stream-1.1.0.tgz",
"integrity": "sha512-sAZ9kODla+mGACBZ1IpTCAisKoGnv6PykW7fPk1LrM+mMepE18Yz0515yoVcrZy7dQsTUp3uZLQ/9Sx1RnLoHw==",
"requires": {
"inherits": "^2.0.1",
"readable-stream": "> 1.0.0 < 3.0.0"
}
},
"commist": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/commist/-/commist-1.1.0.tgz",
"integrity": "sha512-rraC8NXWOEjhADbZe9QBNzLAN5Q3fsTPQtBV+fEVj6xKIgDgNiEVE6ZNfHpZOqfQ21YUzfVNUXLOEZquYvQPPg==",
"requires": {
"leven": "^2.1.0",
"minimist": "^1.1.0"
}
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
},
"concat-stream": {
"version": "1.6.2",
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
"integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
"requires": {
"buffer-from": "^1.0.0",
"inherits": "^2.0.3",
"readable-stream": "^2.2.2",
"typedarray": "^0.0.6"
}
},
"core-util-is": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
},
"csstype": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
},
"d": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz",
"integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==",
"requires": {
"es5-ext": "^0.10.64",
"type": "^2.7.2"
}
},
"debug": {
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
"integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
"requires": {
"ms": "^2.1.3"
}
},
"duplexify": {
"version": "3.7.1",
"resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
"integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
"requires": {
"end-of-stream": "^1.0.0",
"inherits": "^2.0.1",
"readable-stream": "^2.0.0",
"stream-shift": "^1.0.0"
}
},
"end-of-stream": {
"version": "1.4.5",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz",
"integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==",
"requires": {
"once": "^1.4.0"
}
},
"entities": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="
},
"es5-ext": {
"version": "0.10.64",
"resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz",
"integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==",
"requires": {
"es6-iterator": "^2.0.3",
"es6-symbol": "^3.1.3",
"esniff": "^2.0.1",
"next-tick": "^1.1.0"
}
},
"es6-iterator": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
"integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==",
"requires": {
"d": "1",
"es5-ext": "^0.10.35",
"es6-symbol": "^3.1.1"
}
},
"es6-map": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz",
"integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==",
"requires": {
"d": "1",
"es5-ext": "~0.10.14",
"es6-iterator": "~2.0.1",
"es6-set": "~0.1.5",
"es6-symbol": "~3.1.1",
"event-emitter": "~0.3.5"
}
},
"es6-set": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz",
"integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==",
"requires": {
"d": "^1.0.1",
"es5-ext": "^0.10.62",
"es6-iterator": "~2.0.3",
"es6-symbol": "^3.1.3",
"event-emitter": "^0.3.5",
"type": "^2.7.2"
}
},
"es6-symbol": {
"version": "3.1.4",
"resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz",
"integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==",
"requires": {
"d": "^1.0.2",
"ext": "^1.7.0"
}
},
"esniff": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz",
"integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==",
"requires": {
"d": "^1.0.1",
"es5-ext": "^0.10.62",
"event-emitter": "^0.3.5",
"type": "^2.7.2"
}
},
"estree-walker": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
},
"event-emitter": {
"version": "0.3.5",
"resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
"integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==",
"requires": {
"d": "1",
"es5-ext": "~0.10.14"
}
},
"event-target-shim": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
"integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="
},
"ext": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",
"integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==",
"requires": {
"type": "^2.7.2"
}
},
"extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
},
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
},
"glob": {
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.1.1",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
},
"glob-parent": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
"integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==",
"requires": {
"is-glob": "^3.1.0",
"path-dirname": "^1.0.0"
}
},
"glob-stream": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz",
"integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==",
"requires": {
"extend": "^3.0.0",
"glob": "^7.1.1",
"glob-parent": "^3.1.0",
"is-negated-glob": "^1.0.0",
"ordered-read-streams": "^1.0.0",
"pumpify": "^1.3.5",
"readable-stream": "^2.1.5",
"remove-trailing-separator": "^1.0.1",
"to-absolute-glob": "^2.0.0",
"unique-stream": "^2.0.2"
}
},
"help-me": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/help-me/-/help-me-1.1.0.tgz",
"integrity": "sha512-P/IZ8yOMne3SCTHbVY429NZ67B/2bVQlcYGZh2iPPbdLrEQ/qY5aGChn0YTDmt7Sb4IKRI51fypItav+lNl76w==",
"requires": {
"callback-stream": "^1.0.2",
"glob-stream": "^6.1.0",
"through2": "^2.0.1",
"xtend": "^4.0.0"
}
},
"ieee754": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
},
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
"requires": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"is-absolute": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
"integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
"requires": {
"is-relative": "^1.0.0",
"is-windows": "^1.0.1"
}
},
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="
},
"is-glob": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
"integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==",
"requires": {
"is-extglob": "^2.1.0"
}
},
"is-negated-glob": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz",
"integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug=="
},
"is-relative": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
"integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
"requires": {
"is-unc-path": "^1.0.0"
}
},
"is-unc-path": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
"integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
"requires": {
"unc-path-regex": "^0.1.2"
}
},
"is-windows": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
"integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="
},
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
},
"json-stable-stringify-without-jsonify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
"integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="
},
"leven": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz",
"integrity": "sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA=="
},
"magic-string": {
"version": "0.30.19",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz",
"integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==",
"requires": {
"@jridgewell/sourcemap-codec": "^1.5.5"
}
},
"minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"requires": {
"brace-expansion": "^1.1.7"
}
},
"minimist": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
"integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="
},
"mqtt": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/mqtt/-/mqtt-3.0.0.tgz",
"integrity": "sha512-0nKV6MAc1ibKZwaZQUTb3iIdT4NVpj541BsYrqrGBcQdQ7Jd0MnZD1/6/nj1UFdGTboK9ZEUXvkCu2nPCugHFA==",
"requires": {
"base64-js": "^1.3.0",
"commist": "^1.0.0",
"concat-stream": "^1.6.2",
"end-of-stream": "^1.4.1",
"es6-map": "^0.1.5",
"help-me": "^1.0.1",
"inherits": "^2.0.3",
"minimist": "^1.2.0",
"mqtt-packet": "^6.0.0",
"pump": "^3.0.0",
"readable-stream": "^2.3.6",
"reinterval": "^1.1.0",
"split2": "^3.1.0",
"websocket-stream": "^5.1.2",
"xtend": "^4.0.1"
}
},
"mqtt-packet": {
"version": "6.10.0",
"resolved": "https://registry.npmjs.org/mqtt-packet/-/mqtt-packet-6.10.0.tgz",
"integrity": "sha512-ja8+mFKIHdB1Tpl6vac+sktqy3gA8t9Mduom1BA75cI+R9AHnZOiaBQwpGiWnaVJLDGRdNhQmFaAqd7tkKSMGA==",
"requires": {
"bl": "^4.0.2",
"debug": "^4.1.1",
"process-nextick-args": "^2.0.1"
}
},
"ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
},
"nanoid": {
"version": "3.3.11",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
"integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="
},
"next-tick": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
"integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ=="
},
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
"requires": {
"wrappy": "1"
}
},
"ordered-read-streams": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz",
"integrity": "sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==",
"requires": {
"readable-stream": "^2.0.1"
}
},
"path-dirname": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
"integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q=="
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
},
"picocolors": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
},
"postcss": {
"version": "8.5.6",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
"integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
"requires": {
"nanoid": "^3.3.11",
"picocolors": "^1.1.1",
"source-map-js": "^1.2.1"
}
},
"process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
},
"pump": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz",
"integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==",
"requires": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
}
},
"pumpify": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
"integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
"requires": {
"duplexify": "^3.6.0",
"inherits": "^2.0.3",
"pump": "^2.0.0"
},
"dependencies": {
"pump": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
"integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
"requires": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
}
}
}
},
"readable-stream": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"reinterval": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/reinterval/-/reinterval-1.1.0.tgz",
"integrity": "sha512-QIRet3SYrGp0HUHO88jVskiG6seqUGC5iAG7AwI/BV4ypGcuqk9Du6YQBUOUqm9c8pw1eyLoIaONifRua1lsEQ=="
},
"remove-trailing-separator": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
"integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw=="
},
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
"source-map-js": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="
},
"split2": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz",
"integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==",
"requires": {
"readable-stream": "^3.0.0"
},
"dependencies": {
"readable-stream": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
}
}
},
"stream-shift": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz",
"integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ=="
},
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"requires": {
"safe-buffer": "~5.1.0"
}
},
"through2": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
"integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
"requires": {
"readable-stream": "~2.3.6",
"xtend": "~4.0.1"
}
},
"through2-filter": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz",
"integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==",
"requires": {
"through2": "~2.0.0",
"xtend": "~4.0.0"
}
},
"to-absolute-glob": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz",
"integrity": "sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==",
"requires": {
"is-absolute": "^1.0.0",
"is-negated-glob": "^1.0.0"
}
},
"type": {
"version": "2.7.3",
"resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz",
"integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ=="
},
"typedarray": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
"integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
},
"ultron": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
"integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og=="
},
"unc-path-regex": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
"integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg=="
},
"unique-stream": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz",
"integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==",
"requires": {
"json-stable-stringify-without-jsonify": "^1.0.1",
"through2-filter": "^3.0.0"
}
},
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
},
"vue": {
"version": "3.5.21",
"resolved": "https://registry.npmjs.org/vue/-/vue-3.5.21.tgz",
"integrity": "sha512-xxf9rum9KtOdwdRkiApWL+9hZEMWE90FHh8yS1+KJAiWYh+iGWV1FquPjoO9VUHQ+VIhsCXNNyZ5Sf4++RVZBA==",
"requires": {
"@vue/compiler-dom": "3.5.21",
"@vue/compiler-sfc": "3.5.21",
"@vue/runtime-dom": "3.5.21",
"@vue/server-renderer": "3.5.21",
"@vue/shared": "3.5.21"
}
},
"websocket-stream": {
"version": "5.5.2",
"resolved": "https://registry.npmjs.org/websocket-stream/-/websocket-stream-5.5.2.tgz",
"integrity": "sha512-8z49MKIHbGk3C4HtuHWDtYX8mYej1wWabjthC/RupM9ngeukU4IWoM46dgth1UOS/T4/IqgEdCDJuMe2039OQQ==",
"requires": {
"duplexify": "^3.5.1",
"inherits": "^2.0.1",
"readable-stream": "^2.3.3",
"safe-buffer": "^5.1.2",
"ws": "^3.2.0",
"xtend": "^4.0.0"
}
},
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
},
"ws": {
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
"integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
"requires": {
"async-limiter": "~1.0.0",
"safe-buffer": "~5.1.0",
"ultron": "~1.1.0"
}
},
"xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
}
} }
} }

View File

@ -62,7 +62,7 @@ image {
height: 150rpx; height: 150rpx;
flex-direction: row; flex-direction: row;
display: flex; display: flex;
background-image: url('https://static.hshuishang.com/gp_detail_top.png'); background-image: url('https://wechat-img-file.oss-cn-beijing.aliyuncs.com/gp_detail_top.png');
background-size: cover; background-size: cover;
background-position: -30rpx center; background-position: -30rpx center;
} }
@ -621,7 +621,7 @@ image {
.shadowBox_img { .shadowBox_img {
width: 600rpx; width: 600rpx;
height: 945rpx; height: 945rpx;
background: url('https://static.hshuishang.com/property-img-file/shop_share_bg.png') no-repeat; background: url('https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/shop_share_bg.png') no-repeat;
background-size: 100% 100%; background-size: 100% 100%;
} }

View File

@ -83,7 +83,7 @@
<view class="Msg_ItemTit">货号</view> <view class="Msg_ItemTit">货号</view>
<view class="Msg_ItemCon" @click="copys(currentGG.goods_no)"> <view class="Msg_ItemCon" @click="copys(currentGG.goods_no)">
{{ currentGG.goods_no }} {{ currentGG.goods_no }}
<image src="https://static.hshuishang.com/property-img-file/shop_copy.png"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/shop_copy.png"></image>
</view> </view>
</view> </view>
<view class="Msg_Item"> <view class="Msg_Item">
@ -117,14 +117,14 @@
<view class="Car"> <view class="Car">
<view class="car_left"> <view class="car_left">
<view class="share" @click="share"> <view class="share" @click="share">
<image src="https://static.hshuishang.com/property-img-file/shop_share.png" <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/shop_share.png"
mode="widthFix"></image> mode="widthFix"></image>
分享 分享
</view> </view>
<view class="cars" @click="car"> <view class="cars" @click="car">
<u-badge numberType="limit" :type="type" max="99" :value="carNum"></u-badge> <u-badge numberType="limit" :type="type" max="99" :value="carNum"></u-badge>
<image src="https://static.hshuishang.com/property-img-file/shop_car.png" <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/shop_car.png"
mode="widthFix"></image> mode="widthFix"></image>
购物车 购物车
</view> </view>
@ -155,14 +155,14 @@
<view class="shadowBox1"> <view class="shadowBox1">
<view class="shadowBox1Item" @click="shareFriend"> <view class="shadowBox1Item" @click="shareFriend">
<button class="shadowBox1Item_btn" open-type="share" bindtap="onShareButtonClick"> <button class="shadowBox1Item_btn" open-type="share" bindtap="onShareButtonClick">
<image src="https://static.hshuishang.com/property-img-file/shop_WX.png" <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/shop_WX.png"
mode="aspectFill"></image> mode="aspectFill"></image>
微信好友 微信好友
</button> </button>
</view> </view>
<view class="shadowBox1Item" @click="openSave"> <view class="shadowBox1Item" @click="openSave">
<button class="shadowBox1Item_btn"> <button class="shadowBox1Item_btn">
<image src="https://static.hshuishang.com/property-img-file/shop_saveImg.png" <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/shop_saveImg.png"
mode="aspectFill"></image> mode="aspectFill"></image>
生成海报 生成海报
</button> </button>
@ -175,7 +175,7 @@
<view class="shadowBox_img"> <view class="shadowBox_img">
<view class="boxshadow_tit">今日商品推荐</view> <view class="boxshadow_tit">今日商品推荐</view>
<view class="boxshadow_img"> <view class="boxshadow_img">
<image src="https://static.hshuishang.com/property-img-file/shop_share_img.png"> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/shop_share_img.png">
</image> </image>
</view> </view>
<view class="line"></view> <view class="line"></view>
@ -203,12 +203,12 @@
</view> </view>
<view class="temp"> <view class="temp">
<view class="temp1"> <view class="temp1">
<img class="temp_img" src="https://static.hshuishang.com/pingjia.png" /> <img class="temp_img" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/pingjia.png" />
为你展示真实评价 为你展示真实评价
</view> </view>
<view class="temp1" @click="showSizePopup"> <view class="temp1" @click="showSizePopup">
款式 款式
<img class="temp_img1" src="https://static.hshuishang.com/kuanshi.png" /> <img class="temp_img1" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/kuanshi.png" />
</view> </view>
</view> </view>
<view class="reviews-list" v-if="comments.length > 0"> <view class="reviews-list" v-if="comments.length > 0">
@ -297,7 +297,6 @@ export default {
boxshadow1: false, boxshadow1: false,
boxshadow2: false, boxshadow2: false,
id: "", id: "",
adver_id: "",//活动id
groupById: "", groupById: "",
promotional_price: "", //活动价 promotional_price: "", //活动价
info: "", info: "",
@ -507,7 +506,7 @@ export default {
this.boxshadow2 = false; this.boxshadow2 = false;
// 微信小程序保存图片 // 微信小程序保存图片
uni.downloadFile({ uni.downloadFile({
url: "https://static.hshuishang.com/property-img-file/shop_share_img.png", url: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/shop_share_img.png",
success: (res) => { success: (res) => {
if (res.statusCode === 200) { if (res.statusCode === 200) {
uni.saveImageToPhotosAlbum({ uni.saveImageToPhotosAlbum({
@ -542,7 +541,6 @@ export default {
getGoodsInfo() { getGoodsInfo() {
const params = { const params = {
id: this.id, id: this.id,
adver_id: this.adver_id,
} }
request(apiArr.getGoodsInfo, "POST", params).then((res) => { request(apiArr.getGoodsInfo, "POST", params).then((res) => {
// 分割图片 // 分割图片
@ -582,10 +580,8 @@ export default {
// 使用完整的商品数据对象,而不是itemObj // 使用完整的商品数据对象,而不是itemObj
this.currentGG = this.info.commodity_goods_info_list[this.currentGGIndex]; this.currentGG = this.info.commodity_goods_info_list[this.currentGGIndex];
// 将promotional_price赋值给sales_price(无活动价时保留商品自身价格,如客服分享场景) // 将promotional_price赋值给sales_price
if (this.promotional_price !== "" && this.promotional_price != null) {
this.currentGG.sales_price = this.promotional_price; this.currentGG.sales_price = this.promotional_price;
}
// 设置相关属性 // 设置相关属性
this.changeImg = this.currentGG.commodity_pic[0]; this.changeImg = this.currentGG.commodity_pic[0];
@ -618,10 +614,8 @@ export default {
// 切换规格 // 切换规格
changeGG(item, index) { changeGG(item, index) {
this.currentGG = item; this.currentGG = item;
// 将promotional_price赋值给sales_price(无活动价时保留商品自身价格) // 将promotional_price赋值给sales_price
if (this.promotional_price !== "" && this.promotional_price != null) {
this.currentGG.sales_price = this.promotional_price; this.currentGG.sales_price = this.promotional_price;
}
this.currentGGIndex = index; this.currentGGIndex = index;
if (this.currentGG.cart_count) { if (this.currentGG.cart_count) {
this.currentNum = this.currentGG.cart_count.count; this.currentNum = this.currentGG.cart_count.count;
@ -733,14 +727,14 @@ export default {
// 购买记录 // 购买记录
getBuyRecord() { getBuyRecord() {
const params = { const params = {
activity_id: this.groupById, activity_id: 47,
goods_id: this.itemObj.id, goods_id: this.id
} }
request(apiArr2.groupBuyRecord, 'POST', params).then(res => { request(apiArr2.groupBuyRecord, 'POST', params).then(res => {
const record = res.group_buy_record.map(item => { const record = res.group_buy_record.map(item => {
return { return {
...item, ...item,
avatar: picUrl + item.avatar avatar: picture + item.avatar
} }
}) })
this.purchaseRecords = record this.purchaseRecords = record
@ -782,20 +776,11 @@ export default {
} }
}, },
onLoad(options) { onLoad(options) {
// 来自客服聊天卡片:优先从本地存储读完整数据(避免 URL 过长)
if (options && options.fromChat) {
let stashed
try { stashed = uni.getStorageSync('chatCardItem') } catch (e) { stashed = null }
uni.removeStorageSync('chatCardItem')
this.itemObj = stashed || JSON.parse(decodeURIComponent(options.item))
} else {
this.itemObj = JSON.parse(decodeURIComponent(options.item)); this.itemObj = JSON.parse(decodeURIComponent(options.item));
}
const meun = menuButtonInfo(); const meun = menuButtonInfo();
this.top = meun.top; this.top = meun.top;
this.localHeight = meun.height; this.localHeight = meun.height;
this.id = this.itemObj.commodity_id ? this.itemObj.commodity_id : this.itemObj.id; this.id = this.itemObj.commodity_id ? this.itemObj.commodity_id : this.itemObj.id;
this.adver_id = this.itemObj.adver_id
this.groupById = this.itemObj.groupById this.groupById = this.itemObj.groupById
this.promotional_price = this.itemObj.promotional_price this.promotional_price = this.itemObj.promotional_price
this.getBuyRecord() this.getBuyRecord()

View File

@ -277,7 +277,7 @@ page {
.copy-icon { .copy-icon {
width: 30rpx; width: 30rpx;
height: 30rpx; height: 30rpx;
background-image: url('https://static.hshuishang.com/myOrder/copy.png'); background-image: url('https://wechat-img-file.oss-cn-beijing.aliyuncs.com/myOrder/copy.png');
background-size: cover; background-size: cover;
margin-left: 10rpx; margin-left: 10rpx;
} }

View File

@ -72,7 +72,7 @@
<view class="payment-item" @click="selectPayment('wechat')"> <view class="payment-item" @click="selectPayment('wechat')">
<view class="payment-icon"> <view class="payment-icon">
<image <image
src="https://static.hshuishang.com/property-img-file/com_wechat.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_wechat.png"
mode="aspectFit"></image> mode="aspectFit"></image>
</view> </view>
<view class="payment-content"> <view class="payment-content">
@ -82,12 +82,12 @@
</view> </view>
<view class="payment-select" v-if="selectedPayment === 'wechat'"> <view class="payment-select" v-if="selectedPayment === 'wechat'">
<image <image
src="https://static.hshuishang.com/property-img-file/com_check2.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_check2.png"
mode="aspectFit" style="width: 40rpx; height: 40rpx;"></image> mode="aspectFit" style="width: 40rpx; height: 40rpx;"></image>
</view> </view>
<view class="payment-select" v-else> <view class="payment-select" v-else>
<image <image
src="https://static.hshuishang.com/property-img-file/com_check1.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_check1.png"
mode="aspectFit" style="width: 40rpx; height: 40rpx;"></image> mode="aspectFit" style="width: 40rpx; height: 40rpx;"></image>
</view> </view>
</view> </view>
@ -195,7 +195,7 @@
<view class="payment-item" @click="selectPayment('wechat')"> <view class="payment-item" @click="selectPayment('wechat')">
<view class="payment-icon"> <view class="payment-icon">
<image <image
src="https://static.hshuishang.com/property-img-file/com_wechat.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_wechat.png"
mode="aspectFit"></image> mode="aspectFit"></image>
</view> </view>
<view class="payment-content"> <view class="payment-content">
@ -205,12 +205,12 @@
</view> </view>
<view class="payment-select" v-if="selectedPayment === 'wechat'"> <view class="payment-select" v-if="selectedPayment === 'wechat'">
<image <image
src="https://static.hshuishang.com/property-img-file/com_check2.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_check2.png"
mode="aspectFit" style="width: 40rpx; height: 40rpx;"></image> mode="aspectFit" style="width: 40rpx; height: 40rpx;"></image>
</view> </view>
<view class="payment-select" v-else> <view class="payment-select" v-else>
<image <image
src="https://static.hshuishang.com/property-img-file/com_check1.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_check1.png"
mode="aspectFit" style="width: 40rpx; height: 40rpx;"></image> mode="aspectFit" style="width: 40rpx; height: 40rpx;"></image>
</view> </view>
</view> </view>
@ -227,7 +227,7 @@
<view class="shadowBox2"> <view class="shadowBox2">
<view class="shadowBox_img"> <view class="shadowBox_img">
<view class="boxshadow_tit"> <view class="boxshadow_tit">
<image src="https://static.hshuishang.com/af_√.png" <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/af_√.png"
class="boxshadow_tit_img"> class="boxshadow_tit_img">
</image> </image>
已支付成功 已支付成功
@ -235,7 +235,7 @@
<view class="boxshadow_img"> <view class="boxshadow_img">
<view v-if="verifyCode">核销码:{{ verifyCode }}</view> <view v-if="verifyCode">核销码:{{ verifyCode }}</view>
<!-- <image <!-- <image
src="https://static.hshuishang.com/property-img-file/shop_share_img.png"> src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/shop_share_img.png">
</image> --> </image> -->
</view> </view>
<view> <view>
@ -246,7 +246,7 @@
<view class="wealBox"> <view class="wealBox">
<view class="wealBoxItem wealBoxItem1"> <view class="wealBoxItem wealBoxItem1">
<view class="wealBoxItemTop"> <view class="wealBoxItemTop">
<image src="https://static.hshuishang.com/activity_fen.png" <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/activity_fen.png"
mode="aspectFit"> mode="aspectFit">
</image> </image>
<view>石榴分</view> <view>石榴分</view>
@ -260,7 +260,7 @@
</view> </view>
<view class="wealBoxItem wealBoxItem2"> <view class="wealBoxItem wealBoxItem2">
<view class="wealBoxItemTop"> <view class="wealBoxItemTop">
<image src="https://static.hshuishang.com/activity_zi.png" <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/activity_zi.png"
mode="aspectFit"> mode="aspectFit">
</image> </image>
<view>石榴籽</view> <view>石榴籽</view>
@ -274,7 +274,7 @@
</view> </view>
<view class="wealBoxItem wealBoxItem3"> <view class="wealBoxItem wealBoxItem3">
<view class="wealBoxItemTop"> <view class="wealBoxItemTop">
<image src="https://static.hshuishang.com/activity_jin.png" <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/activity_jin.png"
mode="aspectFit" /> mode="aspectFit" />
<view>石榴金</view> <view>石榴金</view>
</view> </view>
@ -299,20 +299,20 @@
<button class="shadowBox1Item_btn" open-type="share" bindtap="onShareButtonClick" /> <button class="shadowBox1Item_btn" open-type="share" bindtap="onShareButtonClick" />
<view class="shadowBox1Item"> <view class="shadowBox1Item">
<image <image
src="https://static.hshuishang.com/property-img-file/shop_WX.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/shop_WX.png"
mode="aspectFill"></image> mode="aspectFill"></image>
微信好友 微信好友
</view> </view>
<button class="shadowBox2Item_btn" open-type="share" bindtap="onShareButtonClick" /> <button class="shadowBox2Item_btn" open-type="share" bindtap="onShareButtonClick" />
<view class="shadowBox1Item" @click="shareFriend"> <view class="shadowBox1Item" @click="shareFriend">
<image <image
src="https://static.hshuishang.com/property-img-file/shop_WX.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/shop_WX.png"
mode="aspectFill"></image> mode="aspectFill"></image>
小程序链接 小程序链接
</view> </view>
<!-- <view class="shadowBox1Item" @click="openSave"> <!-- <view class="shadowBox1Item" @click="openSave">
<image <image
src="https://static.hshuishang.com/property-img-file/shop_saveImg.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/shop_saveImg.png"
mode="aspectFill"></image> mode="aspectFill"></image>
二维码海报 二维码海报
</view> --> </view> -->
@ -331,7 +331,7 @@
<view class="boxshadow_tit">今日商品推荐</view> <view class="boxshadow_tit">今日商品推荐</view>
<view class="boxshadow_img"> <view class="boxshadow_img">
<image <image
src="https://static.hshuishang.com/property-img-file/shop_share_img.png"> src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/shop_share_img.png">
</image> </image>
</view> </view>
<view class="shadowBoxInfo"> <view class="shadowBoxInfo">
@ -786,7 +786,7 @@ export default {
this.boxshadow2 = false; this.boxshadow2 = false;
// 微信小程序保存图片 // 微信小程序保存图片
uni.downloadFile({ uni.downloadFile({
url: "https://static.hshuishang.com/property-img-file/shop_share_img.png", url: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/shop_share_img.png",
success: (res) => { success: (res) => {
if (res.statusCode === 200) { if (res.statusCode === 200) {
uni.saveImageToPhotosAlbum({ uni.saveImageToPhotosAlbum({

View File

@ -185,30 +185,23 @@
/* 购物车按钮 */ /* 购物车按钮 */
.shop_car { .shop_car {
width: 80rpx; width: 140rpx;
height: 80rpx; height: 140rpx;
position: absolute; position: fixed;
bottom: 150rpx; right: 33rpx;
right: 30rpx; bottom: 80rpx;
z-index: 10; z-index: 10;
border-radius: 50%;
background-color: #ffffff;
padding: 10rpx;
display: flex;
align-items: center;
justify-content: center;
} }
.shop_car image { .shop_car image {
width: 60rpx; width: 100%;
height: 60rpx; height: 100%;
} }
.u-badge { .u-badge {
position: absolute; position: absolute;
right: 0rpx; right: 0;
top: -6rpx; top: -10rpx;
z-index: 11;
} }
/* 规格标签样式 */ /* 规格标签样式 */

View File

@ -34,7 +34,7 @@
<!-- 购物车按钮 --> <!-- 购物车按钮 -->
<view class="shop_car" @click="shopCar"> <view class="shop_car" @click="shopCar">
<u-badge numberType="limit" type="error" max="99" :value="carNum"></u-badge> <u-badge numberType="limit" type="error" max="99" :value="carNum"></u-badge>
<image src="https://static.hshuishang.com/property-img-file/page_user_Group_1564.png"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/shop_car_num.png"></image>
</view> </view>
</view> </view>
</template> </template>
@ -83,17 +83,17 @@ export default {
}, },
methods: { methods: {
getGoodsList() { getGoodsList() {
// if (!uni.getStorageSync('userId')) { if (!uni.getStorageSync('userId')) {
// uni.showToast({ uni.showToast({
// title: '请先登录', title: '请先登录',
// icon: 'none' icon: 'none'
// }) })
// return return
// } }
const params = { const params = {
adver_id: this.idVal, adver_id: this.idVal,
} }
return request(shopApi.adverGoodsList, 'POST', params, {}, false).then(res => { return request(shopApi.adverGoodsList, 'POST', params).then(res => {
const list = res.adver_goods_list.map(item => { const list = res.adver_goods_list.map(item => {
// 为每个商品初始化quantity // 为每个商品初始化quantity
return { return {

View File

@ -12,7 +12,7 @@
</view> </view>
</view> </view>
<view class="empty" v-if="shopCarTotal == 0"> <view class="empty" v-if="shopCarTotal == 0">
<image src="https://static.hshuishang.com/shopCar_no.png"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/shopCar_no.png"></image>
</view> </view>
<view class="main" v-else> <view class="main" v-else>
<view class="deleteIcon" @click="deleteItem"> <view class="deleteIcon" @click="deleteItem">
@ -22,10 +22,10 @@
<view class="footer_all" @click="is_day_checked" <view class="footer_all" @click="is_day_checked"
style="color: orange; font-size: 35rpx; font-weight: bolder;"> style="color: orange; font-size: 35rpx; font-weight: bolder;">
<image v-if="!isDaychecked" <image v-if="!isDaychecked"
src="https://static.hshuishang.com/property-img-file/com_check1.png"> src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_check1.png">
</image> </image>
<image v-if="isDaychecked" <image v-if="isDaychecked"
src="https://static.hshuishang.com/property-img-file/com_check2.png"> src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_check2.png">
</image> </image>
当日达 当日达
</view> </view>
@ -34,10 +34,10 @@
<view class="goodsItem_supplier"> <view class="goodsItem_supplier">
<view class="goodsItem_left" @click="supplierCheck(carItem, true)"> <view class="goodsItem_left" @click="supplierCheck(carItem, true)">
<image v-if="!carItem.supplierChecked" <image v-if="!carItem.supplierChecked"
src="https://static.hshuishang.com/property-img-file/com_check1.png"> src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_check1.png">
</image> </image>
<image v-if="carItem.supplierChecked" <image v-if="carItem.supplierChecked"
src="https://static.hshuishang.com/property-img-file/com_check2.png"> src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_check2.png">
</image> </image>
</view> </view>
<view class="goodsItem_tit"> <view class="goodsItem_tit">
@ -48,10 +48,10 @@
:key="item.id"> :key="item.id">
<view class="goodsItem_left" @click="DayChecked(item)"> <view class="goodsItem_left" @click="DayChecked(item)">
<image v-if="!item.checked" <image v-if="!item.checked"
src="https://static.hshuishang.com/property-img-file/com_check1.png"> src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_check1.png">
</image> </image>
<image v-if="item.checked" <image v-if="item.checked"
src="https://static.hshuishang.com/property-img-file/com_check2.png"> src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_check2.png">
</image> </image>
</view> </view>
<view class="goodsItem_right"> <view class="goodsItem_right">
@ -107,10 +107,10 @@
<view class="footer_all" @click="parcel_post_checked" <view class="footer_all" @click="parcel_post_checked"
style="color: orange; font-size: 35rpx; font-weight: bolder;"> style="color: orange; font-size: 35rpx; font-weight: bolder;">
<image v-if="!isParcelPostchecked" <image v-if="!isParcelPostchecked"
src="https://static.hshuishang.com/property-img-file/com_check1.png"> src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_check1.png">
</image> </image>
<image v-if="isParcelPostchecked" <image v-if="isParcelPostchecked"
src="https://static.hshuishang.com/property-img-file/com_check2.png"> src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_check2.png">
</image> </image>
包邮 包邮
</view> </view>
@ -119,10 +119,10 @@
<view class="goodsItem_supplier"> <view class="goodsItem_supplier">
<view class="goodsItem_left" @click="supplierCheck(carItem, false)"> <view class="goodsItem_left" @click="supplierCheck(carItem, false)">
<image v-if="!carItem.supplierChecked" <image v-if="!carItem.supplierChecked"
src="https://static.hshuishang.com/property-img-file/com_check1.png"> src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_check1.png">
</image> </image>
<image v-if="carItem.supplierChecked" <image v-if="carItem.supplierChecked"
src="https://static.hshuishang.com/property-img-file/com_check2.png"> src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_check2.png">
</image> </image>
</view> </view>
<view class="goodsItem_tit"> <view class="goodsItem_tit">
@ -133,10 +133,10 @@
:key="item.id"> :key="item.id">
<view class="goodsItem_left" @click="changeChecked(item)"> <view class="goodsItem_left" @click="changeChecked(item)">
<image v-if="!item.checked" <image v-if="!item.checked"
src="https://static.hshuishang.com/property-img-file/com_check1.png"> src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_check1.png">
</image> </image>
<image v-if="item.checked" <image v-if="item.checked"
src="https://static.hshuishang.com/property-img-file/com_check2.png"> src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_check2.png">
</image> </image>
</view> </view>
<view class="goodsItem_right"> <view class="goodsItem_right">
@ -169,7 +169,8 @@
</view> </view>
</template> </template>
<template #input> <template #input>
<text style="width: 80rpx; text-align: center" class="input">{{ <text style="width: 80rpx; text-align: center"
class="input">{{
item.count }}</text> item.count }}</text>
</template> </template>
<template #plus> <template #plus>
@ -192,10 +193,10 @@
<view class="footer_left"> <view class="footer_left">
<view class="footer_all" @click="allChecked"> <view class="footer_all" @click="allChecked">
<image v-if="!isAllchecked" <image v-if="!isAllchecked"
src="https://static.hshuishang.com/property-img-file/com_check1.png"> src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_check1.png">
</image> </image>
<image v-if="isAllchecked" <image v-if="isAllchecked"
src="https://static.hshuishang.com/property-img-file/com_check2.png"> src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_check2.png">
</image> </image>
全选 全选
</view> </view>
@ -534,7 +535,6 @@ export default {
const that = this; const that = this;
request(apiArr.deleteCar, "POST", { request(apiArr.deleteCar, "POST", {
ids: [carItem.id], ids: [carItem.id],
goods_cate: 3,
}).then((res) => { }).then((res) => {
// 从商品列表中移除该商品 // 从商品列表中移除该商品
item.splice(goodsIndex, 1); item.splice(goodsIndex, 1);
@ -700,7 +700,6 @@ export default {
request(apiArr.deleteCar, "POST", { request(apiArr.deleteCar, "POST", {
ids, ids,
goods_cate: 3,
}) })
.then((res) => { .then((res) => {
uni.showToast({ uni.showToast({

View File

@ -307,7 +307,7 @@ page {
content: ''; content: '';
width: 52rpx; width: 52rpx;
height: 22rpx; height: 22rpx;
background: url(https://static.hshuishang.com/property-img-file/com_active.png); background: url(https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_active.png);
background-size: cover; background-size: cover;
position: absolute; position: absolute;
left: 50%; left: 50%;

View File

@ -8,7 +8,7 @@
<div class="myRealEstate"> <div class="myRealEstate">
<div class="myRealEstates"> <div class="myRealEstates">
<image src="https://static.hshuishang.com/property-img-file/com_communityNav.png" mode="aspectFill"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_communityNav.png" mode="aspectFill"></image>
<div class="name">滏阳锦苑</div> <div class="name">滏阳锦苑</div>
<div class="Visitor">访客身份 点击立即入驻本社区</div> <div class="Visitor">访客身份 点击立即入驻本社区</div>
</div> </div>
@ -25,7 +25,7 @@
<div class="ConList"> <div class="ConList">
<div class="ConItem" v-for="item in 3" @click="desc"> <div class="ConItem" v-for="item in 3" @click="desc">
<div class="ConItem_left"> <div class="ConItem_left">
<image src="https://static.hshuishang.com/property-img-file/com_act2Img.png" mode="aspectFill"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_act2Img.png" mode="aspectFill"></image>
</div> </div>
<div class="ConItem_right"> <div class="ConItem_right">
<div class="ConItem_right_tit">关于小区停车场治理通告</div> <div class="ConItem_right_tit">关于小区停车场治理通告</div>

View File

@ -138,9 +138,9 @@ export default {
icon: "none", icon: "none",
duration: 1500, duration: 1500,
}); });
// 提示显示后清空页面栈,直接回到个人中心(避免逐层返回多次) // 提示显示后延迟跳转
setTimeout(() => { setTimeout(() => {
uni.reLaunch({ url: "/pages/user/index" }); NavgateTo("/packages/community/myCommunity/index");
}, 1500); }, 1500);
}); });
}, },

View File

@ -3,7 +3,7 @@
<view class="container"> <view class="container">
<div class="userAva"> <div class="userAva">
<image src="https://static.hshuishang.com/property-img-file/com_MsgImg1.png" alt="" mode="aspectFill" /> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_MsgImg1.png" alt="" mode="aspectFill" />
</div> </div>
<div class="Name">MarrekoZhang</div> <div class="Name">MarrekoZhang</div>

View File

@ -1,14 +1,14 @@
<template> <template>
<view class="container"> <view class="container">
<div class="searchBox"> <div class="searchBox">
<img src="https://static.hshuishang.com/property-img-file/com_communitySearchIcon.png" alt="" /> <img src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_communitySearchIcon.png" alt="" />
<input placeholder="请输入小区名称" type="text"> <input placeholder="请输入小区名称" type="text">
</div> </div>
<div class="communityList"> <div class="communityList">
<div class="communityItem" v-for="(item, index) in 5" :key="index" @click="chooseCommunityInfo"> <div class="communityItem" v-for="(item, index) in 5" :key="index" @click="chooseCommunityInfo">
<div class="communityItem_img"> <div class="communityItem_img">
<img src="https://static.hshuishang.com/property-img-file/com_act2Img.png" alt="" /> <img src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_act2Img.png" alt="" />
</div> </div>
<div class="communityItem_msg"> <div class="communityItem_msg">
@ -21,8 +21,8 @@
</div> </div>
<div class="communityItem_msg_more"> <div class="communityItem_msg_more">
<img src="https://static.hshuishang.com/property-img-file/com_check1.png" alt="" /> <img src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_check1.png" alt="" />
<!-- <img src="https://static.hshuishang.com/property-img-file/com_check2.png" alt="" /> --> <!-- <img src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_check2.png" alt="" /> -->
</div> </div>
</div> </div>

View File

@ -7,7 +7,7 @@
<div class="communityList"> <div class="communityList">
<div class="communityItem"> <div class="communityItem">
<div class="communityItem_img"> <div class="communityItem_img">
<image mode="aspectFill" src="https://static.hshuishang.com/property-img-file/com_act2Img.png" alt="" /> <image mode="aspectFill" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_act2Img.png" alt="" />
</div> </div>
<div class="communityItem_msg"> <div class="communityItem_msg">
@ -20,7 +20,7 @@
</div> </div>
<div class="communityItem_msg_more"> <div class="communityItem_msg_more">
<image src="https://static.hshuishang.com/property-img-file/com_communityMore.png" alt="" /> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_communityMore.png" alt="" />
</div> </div>
</div> </div>

View File

@ -167,7 +167,7 @@ image {
position: absolute; position: absolute;
right: 0; right: 0;
bottom: 0; bottom: 0;
background: url(https://static.hshuishang.com/property-img-file/com_activeIcon.png) no-repeat; background: url(https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_activeIcon.png) no-repeat;
background-size: 100% 100%; background-size: 100% 100%;
} }
@ -206,7 +206,7 @@ image {
position: absolute; position: absolute;
right: 0; right: 0;
bottom: 0; bottom: 0;
background: url(https://static.hshuishang.com/property-img-file/com_activeIcon.png) no-repeat; background: url(https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_activeIcon.png) no-repeat;
background-size: 100% 100%; background-size: 100% 100%;
} }

View File

@ -4,7 +4,7 @@
<div class="currentAdd_left">{{ city.region }}</div> <div class="currentAdd_left">{{ city.region }}</div>
<div class="currentAdd_right" @click="changeAddress"> <div class="currentAdd_right" @click="changeAddress">
切换城市 切换城市
<image src="https://static.hshuishang.com/property-img-file/com_choseAddress.png"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_choseAddress.png"></image>
</div> </div>
</div> </div>
@ -12,7 +12,7 @@
<div class="search"> <div class="search">
<input type="text" placeholder="请输入小区名称" v-model="communityName" /> <input type="text" placeholder="请输入小区名称" v-model="communityName" />
<image @click="searchByName" <image @click="searchByName"
src="https://static.hshuishang.com/property-img-file/com_communitySearchIcon.png"> src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_communitySearchIcon.png">
</image> </image>
</div> </div>
@ -24,14 +24,14 @@
<div class="communityItem_address">{{ item.addr }}</div> <div class="communityItem_address">{{ item.addr }}</div>
</div> </div>
<div class="communityItem_right"> <div class="communityItem_right">
<image src="https://static.hshuishang.com/property-img-file/com_communityMore.png"> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_communityMore.png">
</image> </image>
</div> </div>
</div> </div>
</div> </div>
<div class="empty" v-if="communityList.length == 0"> <div class="empty" v-if="communityList.length == 0">
<image src="https://static.hshuishang.com/property-img-file/com_noSearch.png"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_noSearch.png"></image>
<span>未找到相关信息的小区</span> <span>未找到相关信息的小区</span>
</div> </div>
</div> </div>
@ -39,7 +39,7 @@
<!-- <div class="communityBox" v-if="step == 2"> <!-- <div class="communityBox" v-if="step == 2">
<div class="search"> <div class="search">
<input type="text" placeholder="请输入楼栋名称"> <input type="text" placeholder="请输入楼栋名称">
<image src="https://static.hshuishang.com/property-img-file/com_communitySearchIcon.png"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_communitySearchIcon.png"></image>
</div> </div>
<div class="floorList"> <div class="floorList">
@ -49,7 +49,7 @@
</div> </div>
<div class="empty" v-if="!foloorList"> <div class="empty" v-if="!foloorList">
<image src="https://static.hshuishang.com/property-img-file/com_noSearch.png"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_noSearch.png"></image>
<span>未找到相关信息的楼栋</span> <span>未找到相关信息的楼栋</span>
</div> </div>
</div> --> </div> -->
@ -58,7 +58,7 @@
<div class="search"> <div class="search">
<input v-model="searchQuery" type="text" placeholder="请输入楼栋名称" /> <input v-model="searchQuery" type="text" placeholder="请输入楼栋名称" />
<image @click="searchName" <image @click="searchName"
src="https://static.hshuishang.com/property-img-file/com_communitySearchIcon.png"> src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_communitySearchIcon.png">
</image> </image>
</div> </div>
@ -70,7 +70,7 @@
</div> </div>
<div class="empty" v-if="filteredFloorsList.length === 0"> <div class="empty" v-if="filteredFloorsList.length === 0">
<image src="https://static.hshuishang.com/property-img-file/com_noSearch.png"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_noSearch.png"></image>
<span>未找到相关信息的楼栋</span> <span>未找到相关信息的楼栋</span>
</div> </div>
</div> </div>
@ -79,7 +79,7 @@
<div class="search"> <div class="search">
<input v-model="searchQuery" type="text" placeholder="请输入楼层名称" /> <input v-model="searchQuery" type="text" placeholder="请输入楼层名称" />
<image @click="searchName" <image @click="searchName"
src="https://static.hshuishang.com/property-img-file/com_communitySearchIcon.png"> src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_communitySearchIcon.png">
</image> </image>
</div> </div>
@ -92,7 +92,7 @@
</div> </div>
<div class="empty" v-if="filteredFloorsList.length === 0"> <div class="empty" v-if="filteredFloorsList.length === 0">
<image src="https://static.hshuishang.com/property-img-file/com_noSearch.png"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_noSearch.png"></image>
<span>未找到相关信息的楼层</span> <span>未找到相关信息的楼层</span>
</div> </div>
</div> </div>
@ -101,7 +101,7 @@
<div class="search"> <div class="search">
<input v-model="searchQuery" type="text" placeholder="请输入房间名称" /> <input v-model="searchQuery" type="text" placeholder="请输入房间名称" />
<image @click="searchName" <image @click="searchName"
src="https://static.hshuishang.com/property-img-file/com_communitySearchIcon.png"> src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_communitySearchIcon.png">
</image> </image>
</div> </div>
@ -114,7 +114,7 @@
</div> </div>
<div class="empty" v-if="filteredFloorsList.length === 0"> <div class="empty" v-if="filteredFloorsList.length === 0">
<image src="https://static.hshuishang.com/property-img-file/com_noSearch.png"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_noSearch.png"></image>
<span>未找到相关信息的房间</span> <span>未找到相关信息的房间</span>
</div> </div>
</div> </div>

View File

@ -378,17 +378,17 @@ page {
} }
.tabItem1 { .tabItem1 {
background: url(https://static.hshuishang.com/property-img-file/com_tabBg1.png); background: url(https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_tabBg1.png);
background-size: cover; background-size: cover;
} }
.tabItem2 { .tabItem2 {
background: url(https://static.hshuishang.com/property-img-file/com_tabBg2.png); background: url(https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_tabBg2.png);
background-size: cover; background-size: cover;
} }
.tabItem3 { .tabItem3 {
background: url(https://static.hshuishang.com/property-img-file/com_tabBg3.png); background: url(https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_tabBg3.png);
background-size: cover; background-size: cover;
} }
@ -470,7 +470,7 @@ page {
content: ''; content: '';
width: 52rpx; width: 52rpx;
height: 22rpx; height: 22rpx;
background: url(https://static.hshuishang.com/property-img-file/com_active.png); background: url(https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_active.png);
background-size: cover; background-size: cover;
position: absolute; position: absolute;
left: 50%; left: 50%;

View File

@ -2,57 +2,57 @@
<view class="container"> <view class="container">
<view class="searchBox" :style="{ height: localHeight + 'px', paddingTop: top + 'px' }"> <view class="searchBox" :style="{ height: localHeight + 'px', paddingTop: top + 'px' }">
<view class="searchBox_add"> <view class="searchBox_add">
<img src="https://static.hshuishang.com/property-img-file/com_communityIcon.png" alt="" /> <img src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_communityIcon.png" alt="" />
我的房产 我的房产
</view> </view>
</view> </view>
<div class="myRealEstate"> <div class="myRealEstate">
<div class="myRealEstates"> <div class="myRealEstates">
<image src="https://static.hshuishang.com/property-img-file/com_communityNav.png" mode="aspectFill"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_communityNav.png" mode="aspectFill"></image>
<div class="name">滏阳锦苑</div> <div class="name">滏阳锦苑</div>
<div class="Visitor">访客身份 点击立即入驻本社区</div> <div class="Visitor">访客身份 点击立即入驻本社区</div>
</div> </div>
<div class="Announcement"> <div class="Announcement">
<image src="https://static.hshuishang.com/property-img-file/com_Announcement.png" mode="aspectFill"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_Announcement.png" mode="aspectFill"></image>
<div class="line"></div> <div class="line"></div>
<div class="msg" @click="notice"> <div class="msg" @click="notice">
<div>asdasdasd</div> <div>asdasdasd</div>
<image src="https://static.hshuishang.com/property-img-file/com_more.png" mode="aspectFill"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_more.png" mode="aspectFill"></image>
</div> </div>
</div> </div>
</div> </div>
<div class="navList"> <div class="navList">
<div class="navItem"> <div class="navItem">
<image src="https://static.hshuishang.com/property-img-file/com_NavIcon1.png" mode="aspectFill"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_NavIcon1.png" mode="aspectFill"></image>
物业服务 物业服务
</div> </div>
<div class="navItem" @click="repair"> <div class="navItem" @click="repair">
<image src="https://static.hshuishang.com/property-img-file/com_NavIcon2.png" mode="aspectFill"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_NavIcon2.png" mode="aspectFill"></image>
在线报修 在线报修
</div> </div>
<div class="navItem" @click="propertyPayment"> <div class="navItem" @click="propertyPayment">
<image src="https://static.hshuishang.com/property-img-file/com_NavIcon3.png" mode="aspectFill"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_NavIcon3.png" mode="aspectFill"></image>
物业缴费 物业缴费
</div> </div>
<div class="navItem"> <div class="navItem">
<image src="https://static.hshuishang.com/property-img-file/com_NavIcon4.png" mode="aspectFill"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_NavIcon4.png" mode="aspectFill"></image>
物业公积 物业公积
</div> </div>
<div class="navItem"> <div class="navItem">
<image src="https://static.hshuishang.com/property-img-file/com_NavIcon5.png" mode="aspectFill"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_NavIcon5.png" mode="aspectFill"></image>
社区管家 社区管家
</div> </div>
<div class="navItem" @click="mores"> <div class="navItem" @click="mores">
<image src="https://static.hshuishang.com/property-img-file/com_NavIconMore.png" mode="aspectFill"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_NavIconMore.png" mode="aspectFill"></image>
更多 更多
</div> </div>
</div> </div>
@ -78,7 +78,7 @@
<div class="nearbyList"> <div class="nearbyList">
<div class="emptys" v-if="false"> <div class="emptys" v-if="false">
<image src="https://static.hshuishang.com/property-img-file/com_nearbyList_empty.png" mode="aspectFill"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_nearbyList_empty.png" mode="aspectFill"></image>
周边暂无补贴公积金商家 周边暂无补贴公积金商家
<div class="emptysBtn"> <div class="emptysBtn">
@ -88,21 +88,21 @@
<div class="nearbyList_left"> <div class="nearbyList_left">
<div class="nearbyList_leftItem"> <div class="nearbyList_leftItem">
<image src="https://static.hshuishang.com/property-img-file/com_nearbyImg1.png" mode="aspectFill"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_nearbyImg1.png" mode="aspectFill"></image>
</div> </div>
<div class="nearbyList_leftItem"> <div class="nearbyList_leftItem">
<image src="https://static.hshuishang.com/property-img-file/com_nearbyImg1.png" mode="aspectFill"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_nearbyImg1.png" mode="aspectFill"></image>
</div> </div>
</div> </div>
<div class="nearbyList_right"> <div class="nearbyList_right">
<div class="nearbyList_rightItem"> <div class="nearbyList_rightItem">
<image src="https://static.hshuishang.com/property-img-file/com_nearbyImg2.png" mode="aspectFill"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_nearbyImg2.png" mode="aspectFill"></image>
</div> </div>
<div class="nearbyList_rightItem"> <div class="nearbyList_rightItem">
<image src="https://static.hshuishang.com/property-img-file/com_nearbyImg2.png" mode="aspectFill"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_nearbyImg2.png" mode="aspectFill"></image>
</div> </div>
<div class="nearbyList_rightItem"> <div class="nearbyList_rightItem">
<image src="https://static.hshuishang.com/property-img-file/com_nearbyImg2.png" mode="aspectFill"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_nearbyImg2.png" mode="aspectFill"></image>
</div> </div>
</div> </div>
</div> </div>
@ -124,7 +124,7 @@
<div v-if="active == 0" class="act1"> <div v-if="active == 0" class="act1">
<div class="empty" > <div class="empty" >
<image src="https://static.hshuishang.com/property-img-file/com_empty.png" mode="aspectFill"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_empty.png" mode="aspectFill"></image>
暂无信息 暂无信息
<div class="emptyAdd">发布社区互动信息</div> <div class="emptyAdd">发布社区互动信息</div>
@ -133,20 +133,20 @@
<div class="MsgList_left" v-if="false"> <div class="MsgList_left" v-if="false">
<div class="MsgList_leftItem"> <div class="MsgList_leftItem">
<div class="MsgList_leftItemImg"> <div class="MsgList_leftItemImg">
<image src="https://static.hshuishang.com/property-img-file/com_MsgImg1.png" mode="widthFix"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_MsgImg1.png" mode="widthFix"></image>
</div> </div>
<div class="MsgList_leftItemName">我家的小猫丢了,谁看见了请联系我~</div> <div class="MsgList_leftItemName">我家的小猫丢了,谁看见了请联系我~</div>
<div class="MsgList_leftItemMsg"> <div class="MsgList_leftItemMsg">
<div class="MsgList_leftItemMsg_like"> <div class="MsgList_leftItemMsg_like">
<image src="https://static.hshuishang.com/property-img-file/com_likeIcon.png" mode="aspectFill"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_likeIcon.png" mode="aspectFill"></image>
134 134
</div> </div>
<div class="MsgList_leftItemMsg_like"> <div class="MsgList_leftItemMsg_like">
<image src="https://static.hshuishang.com/property-img-file/com_comIcon.png" mode="aspectFill"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_comIcon.png" mode="aspectFill"></image>
134 134
</div> </div>
<div class="MsgList_leftItemMsg_like"> <div class="MsgList_leftItemMsg_like">
<image src="https://static.hshuishang.com/property-img-file/com_shareIcon.png" mode="aspectFill"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_shareIcon.png" mode="aspectFill"></image>
134 134
</div> </div>
</div> </div>
@ -156,7 +156,7 @@
<div class="MsgList_right" v-if="false"> <div class="MsgList_right" v-if="false">
<div class="MsgList_rightItem"> <div class="MsgList_rightItem">
<div class="MsgList_rightItemImg"> <div class="MsgList_rightItemImg">
<image src="https://static.hshuishang.com/property-img-file/com_MsgImg2.png" mode="widthFix"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_MsgImg2.png" mode="widthFix"></image>
</div> </div>
<div class="MsgList_rightItemName"> <div class="MsgList_rightItemName">
@ -165,15 +165,15 @@
<div class="MsgList_leftItemMsg"> <div class="MsgList_leftItemMsg">
<div class="MsgList_leftItemMsg_like"> <div class="MsgList_leftItemMsg_like">
<image src="https://static.hshuishang.com/property-img-file/com_likeIcon.png" mode="aspectFill"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_likeIcon.png" mode="aspectFill"></image>
134 134
</div> </div>
<div class="MsgList_leftItemMsg_like"> <div class="MsgList_leftItemMsg_like">
<image src="https://static.hshuishang.com/property-img-file/com_comIcon.png" mode="aspectFill"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_comIcon.png" mode="aspectFill"></image>
134 134
</div> </div>
<div class="MsgList_leftItemMsg_like"> <div class="MsgList_leftItemMsg_like">
<image src="https://static.hshuishang.com/property-img-file/com_shareIcon.png" mode="aspectFill"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_shareIcon.png" mode="aspectFill"></image>
134 134
</div> </div>
</div> </div>
@ -187,15 +187,15 @@
<div class="MsgList_leftItemMsg"> <div class="MsgList_leftItemMsg">
<div class="MsgList_leftItemMsg_like"> <div class="MsgList_leftItemMsg_like">
<image src="https://static.hshuishang.com/property-img-file/com_likeIcon.png" mode="aspectFill"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_likeIcon.png" mode="aspectFill"></image>
134 134
</div> </div>
<div class="MsgList_leftItemMsg_like"> <div class="MsgList_leftItemMsg_like">
<image src="https://static.hshuishang.com/property-img-file/com_comIcon.png" mode="aspectFill"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_comIcon.png" mode="aspectFill"></image>
134 134
</div> </div>
<div class="MsgList_leftItemMsg_like"> <div class="MsgList_leftItemMsg_like">
<image src="https://static.hshuishang.com/property-img-file/com_shareIcon.png" mode="aspectFill"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_shareIcon.png" mode="aspectFill"></image>
134 134
</div> </div>
</div> </div>
@ -206,7 +206,7 @@
<div v-if="active == 1" class="act2"> <div v-if="active == 1" class="act2">
<div class="empty" > <div class="empty" >
<image src="https://static.hshuishang.com/property-img-file/com_empty.png" mode="aspectFill"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_empty.png" mode="aspectFill"></image>
暂无信息 暂无信息
<div class="emptyAdd">发布社区互动信息</div> <div class="emptyAdd">发布社区互动信息</div>
@ -214,7 +214,7 @@
<div class="act2Item" v-for="itme in 3"> <div class="act2Item" v-for="itme in 3">
<div class="act2Item_left"> <div class="act2Item_left">
<image src="https://static.hshuishang.com/property-img-file/com_act2Img.png" mode="widthFix"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_act2Img.png" mode="widthFix"></image>
</div> </div>
<div class="act2Item_right"> <div class="act2Item_right">
<div class="act2Item_right_Name">约1.7~2.3斤/份 【软糯甜香】新鲜水果 玉米</div> <div class="act2Item_right_Name">约1.7~2.3斤/份 【软糯甜香】新鲜水果 玉米</div>
@ -224,7 +224,7 @@
<div class="act2Item_right_Btn"> <div class="act2Item_right_Btn">
<div class="act2Item_right_Btn_left"> <div class="act2Item_right_Btn_left">
<image src="https://static.hshuishang.com/property-img-file/com_act2Ms.png" mode="widthFix"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_act2Ms.png" mode="widthFix"></image>
¥ ¥
<span>5.58</span> <span>5.58</span>
</div> </div>
@ -242,7 +242,7 @@
<div v-if="active == 2" class="act2"> <div v-if="active == 2" class="act2">
<div class="empty" > <div class="empty" >
<image src="https://static.hshuishang.com/property-img-file/com_empty.png" mode="aspectFill"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_empty.png" mode="aspectFill"></image>
暂无信息 暂无信息
<div class="emptyAdd">发布社区互动信息</div> <div class="emptyAdd">发布社区互动信息</div>
@ -250,7 +250,7 @@
<div class="act2Item" v-for="itme in 3"> <div class="act2Item" v-for="itme in 3">
<div class="act2Item_left"> <div class="act2Item_left">
<image src="https://static.hshuishang.com/property-img-file/com_act2Img.png" mode="widthFix"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_act2Img.png" mode="widthFix"></image>
</div> </div>
<div class="act2Item_right"> <div class="act2Item_right">
<div class="act2Item_right_Name">约1.7~2.3斤/份 【软糯甜香】新鲜水果 玉米</div> <div class="act2Item_right_Name">约1.7~2.3斤/份 【软糯甜香】新鲜水果 玉米</div>
@ -278,7 +278,7 @@
<div v-if="active == 3" class="act4"> <div v-if="active == 3" class="act4">
<div class="act4Item" v-for="itme in 4"> <div class="act4Item" v-for="itme in 4">
<div class="act4Img"> <div class="act4Img">
<image src="https://static.hshuishang.com/property-img-file/com_act2Img.png" mode="aspectFill"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_act2Img.png" mode="aspectFill"></image>
</div> </div>
<div class="act4Name"> <div class="act4Name">
舒克小苏打牙膏(洁白细护)120G 舒克小苏打牙膏(洁白细护)120G

View File

@ -10,7 +10,7 @@
}, },
{ {
"id": 3, "id": 3,
"category_name": "临时事件" "category_name": "物业费"
}, },
{ {
"id": 4, "id": 4,
@ -20,161 +20,45 @@
"defaultInfoList": [ "defaultInfoList": [
{ {
"id": 1, "id": 1,
"category_id": 1,
"title": "物业介绍", "title": "物业介绍",
"pic": "https://static.hshuishang.com/Group_3677.png", "pic": "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/Group_3677.png"
"reads": 89000,
"update_date": "2025-12-15"
},
{
"id": 5,
"category_id": 1,
"title": "物业服务团队正式亮相",
"pic": "https://static.hshuishang.com/Group_3678.png",
"reads": 32150,
"update_date": "2025-12-11"
},
{
"id": 9,
"category_id": 1,
"title": "园区环境提升工作简报",
"pic": "https://static.hshuishang.com/Group_3679.png",
"reads": 27860,
"update_date": "2025-12-05"
}, },
{ {
"id": 2, "id": 2,
"category_id": 2,
"title": "物业缴费", "title": "物业缴费",
"pic": "https://static.hshuishang.com/Group_3680.png", "pic": "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/Group_3680.png"
"reads": 65020,
"update_date": "2025-12-12"
},
{
"id": 6,
"category_id": 2,
"title": "物业费12月缴费提醒",
"pic": "https://static.hshuishang.com/Group_3677.png",
"reads": 48221,
"update_date": "2025-12-10"
},
{
"id": 10,
"category_id": 2,
"title": "线上缴费操作指南",
"pic": "https://static.hshuishang.com/Group_3678.png",
"reads": 19340,
"update_date": "2025-12-03"
}, },
{ {
"id": 3, "id": 3,
"category_id": 3, "title": "物业费",
"title": "临时停水通知", "pic": "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/Group_3679.png"
"pic": "https://static.hshuishang.com/Group_3679.png",
"reads": 56780,
"update_date": "2025-12-14"
},
{
"id": 7,
"category_id": 3,
"title": "电梯维护保养工作顺利完成",
"pic": "https://static.hshuishang.com/Group_3680.png",
"reads": 41200,
"update_date": "2025-12-08"
},
{
"id": 11,
"category_id": 3,
"title": "小区消防演练通知",
"pic": "https://static.hshuishang.com/Group_3677.png",
"reads": 23100,
"update_date": "2025-12-02"
}, },
{ {
"id": 4, "id": 4,
"category_id": 4,
"title": "报事报修", "title": "报事报修",
"pic": "https://static.hshuishang.com/Group_3678.png", "pic": "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/Group_3678.png"
"reads": 36980,
"update_date": "2025-12-09"
},
{
"id": 8,
"category_id": 4,
"title": "报修流程优化公告",
"pic": "https://static.hshuishang.com/Group_3679.png",
"reads": 18560,
"update_date": "2025-12-06"
},
{
"id": 12,
"category_id": 4,
"title": "冬季管道防冻温馨提示",
"pic": "https://static.hshuishang.com/Group_3680.png",
"reads": 15420,
"update_date": "2025-12-01"
} }
], ],
"defaultNoticeList": [ "defaultNoticeList": [
{ {
"id": 1, "id": 1,
"title": "物业介绍", "title": "物业介绍",
"content": "您好!\n &nbsp;&nbsp;&nbsp;&nbsp;物业服务中心是小区专属服务团队,核心服务包括:岁银收缴、公共区域清洁维护、设施设备(电梯/水电/绿化)检修、秩序安全管理,及应急事件响应、活动组织等日常事务。\n &nbsp;&nbsp;&nbsp;&nbsp;我们始终以\"用心服务、共建美好\"为宗旨,欢迎大家监督并提出改进建议。感谢您的理解与配合,让我们携手维护舒心的园区环境!" "content": "您好!\n &nbsp;&nbsp;&nbsp;&nbsp;物业服务中心是小区专属服务团队,核心服务包括:物业费收缴、公共区域清洁维护、设施设备(电梯/水电/绿化)检修、秩序安全管理,及应急事件响应、活动组织等日常事务。\n &nbsp;&nbsp;&nbsp;&nbsp;我们始终以\"用心服务、共建美好\"为宗旨,欢迎大家监督并提出改进建议。感谢您的理解与配合,让我们携手维护舒心的园区环境!"
},
{
"id": 5,
"title": "物业服务团队正式亮相",
"content": "各位业主:\n &nbsp;&nbsp;&nbsp;&nbsp;物业服务中心团队已全面到岗,涵盖客服、维修、保洁、秩序四大板块,将为您提供7×24小时贴心服务。欢迎大家监督指导,共建美好家园。"
},
{
"id": 9,
"title": "园区环境提升工作简报",
"content": "各位业主:\n &nbsp;&nbsp;&nbsp;&nbsp;本月园区完成绿化补植300平方米、健身器材翻新12组、楼道照明检修全覆盖。后续将持续推进环境提升工作,感谢大家的支持与配合。"
}, },
{ {
"id": 2, "id": 2,
"title": "物业缴费", "title": "物业缴费",
"content": "各位业主:\n &nbsp;&nbsp;&nbsp;&nbsp;为简化缴费流程,提升服务效率,物业已上线\"线上+线下\"一体化缴费功能,支持岁银、车位费、公共能耗费等各类费用便捷缴纳,具体使用说明如下:\n一、线上缴费(推荐)\n &nbsp;&nbsp;&nbsp;&nbsp;1. 小程序端操作:打开物业专属小程序,进入\"我的-物业缴费\"页面,系统将自动展示您需缴纳的费用账单(含费用类型、金额、缴费周期等明细);确认账单无误后,选择微信支付,点击\"确认缴费\"即可完成。\n &nbsp;&nbsp;&nbsp;&nbsp;2. 账单查询:在缴费页面点击\"缴费记录\",可查看缴费明细(含缴费时间、金额、凭证号)。\n二、线下缴费(备用)\n若您偏好线下办理,可前往物业前台,通过现金、银行卡、移动支付(微信/支付宝扫码)完成缴费。" "content": "各位业主:\n &nbsp;&nbsp;&nbsp;&nbsp;为简化缴费流程,提升服务效率,物业已上线\"线上+线下\"一体化缴费功能,支持物业费、车位费、公共能耗费等各类费用便捷缴纳,具体使用说明如下:\n一、线上缴费(推荐)\n &nbsp;&nbsp;&nbsp;&nbsp;1. 小程序端操作:打开物业专属小程序,进入\"我的-物业缴费\"页面,系统将自动展示您需缴纳的费用账单(含费用类型、金额、缴费周期等明细);确认账单无误后,选择微信支付,点击\"确认缴费\"即可完成。\n &nbsp;&nbsp;&nbsp;&nbsp;2. 账单查询:在缴费页面点击\"缴费记录\",可查看缴费明细(含缴费时间、金额、凭证号)。\n二、线下缴费(备用)\n若您偏好线下办理,可前往物业前台,通过现金、银行卡、移动支付(微信/支付宝扫码)完成缴费。"
},
{
"id": 6,
"title": "物业费12月缴费提醒",
"content": "请业主及时缴纳物业费,您的支持是我们持续提升服务品质的动力。可通过小程序\"物业缴费\"在线缴纳,也可前往物业前台办理。"
},
{
"id": 10,
"title": "线上缴费操作指南",
"content": "线上缴费三步走:进入小程序\"物业缴费\"页面,核对账单明细,微信支付完成缴费。缴费记录可随时查询,电子凭证自动留存。"
}, },
{ {
"id": 3, "id": 3,
"title": "临时停水通知", "title": "物业费",
"content": "各位业主:\n &nbsp;&nbsp;&nbsp;&nbsp;因市政供水管网维修,本小区将于12月16日9:00-17:00临时停水,请提前做好储水准备。维修期间给您带来不便,敬请谅解。如有疑问请联系物业服务中心。" "content": "各位业主:\n &nbsp;&nbsp;&nbsp;&nbsp;上线\"物业费\"功能,其核心规则与使用方式如下,覆盖所有房产通用场景:\n一、物业费的获取方式\n &nbsp;&nbsp;&nbsp;&nbsp;通过周边合作门店消费,即可获得物业费;\n二、跨房产通用:一份公积金,多房产可用\n &nbsp;&nbsp;&nbsp;&nbsp;您的个人物业费不绑定单一房产,可通用至您已加入的所有房产。例如:您的个人公积金,既可抵扣A小区的物业费,也可抵扣您加入的B小区的水电费、C小区的燃气费,无需额外转移或申请。\n三、查询与透明化\n &nbsp;&nbsp;&nbsp;&nbsp;在物业平台\"我的-物业费\"页面,可实时查看:个人公积金余额、所属房产的总额、抵扣记录(含抵扣房产、金额、个人扣除份额),确保每笔使用清晰可溯。"
},
{
"id": 7,
"title": "电梯维护保养工作顺利完成",
"content": "本次维护对小区全部电梯进行了全面检查与保养,确保运行安全稳定。后续将按季度开展例行保养,保障业主出行安全。"
},
{
"id": 11,
"title": "小区消防演练通知",
"content": "为提升园区应急处置能力,物业将于12月20日上午10:00在中心广场组织消防演练,届时将有烟雾及警报声,请业主不必惊慌,欢迎参与观摩学习。"
}, },
{ {
"id": 4, "id": 4,
"title": "报事报修", "title": "报事报修",
"content": "各位业主:\n &nbsp;&nbsp;&nbsp;&nbsp;小程序\"报事报修\"功能,覆盖全物业类型通用场景,操作简单、响应高效,具体介绍如下:\n一、报修流程\n1、进入功能:打开物业小程序,点击\"报事报修\"图标,选择报修页面;\n2、填写信息:选择\"详细地址\"、\"报修类型\"(水电故障/家电维修/公共设施损坏等),补充问题描述(如\"厨房水龙头漏水\"\"办公室空调不制冷\"),可上传现场照片(便于维修人员预判问题);\n3、提交确认:核对信息后点击\"提交报修\",系统自动生成报修单号,同步推送至物业维修部。\n二、报修范围:室内水电、家电、门窗、厨卫设施维修等;\n三、进度追踪\n1、实时查进度:在\"我的报修\"页面,可查看报修单状态,维修人员接单后会主动联系确认上门时间;\n2、紧急情况(如水管爆裂、断电)可先拨打物业24小时热线,再补填在线报修单,确保问题快速解决!" "content": "各位业主:\n &nbsp;&nbsp;&nbsp;&nbsp;小程序\"报事报修\"功能,覆盖全物业类型通用场景,操作简单、响应高效,具体介绍如下:\n一、报修流程\n1、进入功能:打开物业小程序,点击\"报事报修\"图标,选择报修页面;\n2、填写信息:选择\"详细地址\"、\"报修类型\"(水电故障/家电维修/公共设施损坏等),补充问题描述(如\"厨房水龙头漏水\"\"办公室空调不制冷\"),可上传现场照片(便于维修人员预判问题);\n3、提交确认:核对信息后点击\"提交报修\",系统自动生成报修单号,同步推送至物业维修部。\n二、报修范围:室内水电、家电、门窗、厨卫设施维修等;\n三、进度追踪\n1、实时查进度:在\"我的报修\"页面,可查看报修单状态,维修人员接单后会主动联系确认上门时间;\n2、紧急情况(如水管爆裂、断电)可先拨打物业24小时热线,再补填在线报修单,确保问题快速解决!"
},
{
"id": 8,
"title": "报修流程优化公告",
"content": "报事报修流程全新升级:新增在线进度查询、维修评价功能,平均响应时间缩短至30分钟。您的每一条反馈都是我们改进的动力。"
},
{
"id": 12,
"title": "冬季管道防冻温馨提示",
"content": "冬季气温骤降,请业主注意做好户内水管保温防冻措施,长期无人居住的房屋建议关闭进户阀门并排空管道存水,避免冻裂造成损失。"
} }
] ]
} }

View File

@ -53,25 +53,14 @@ image {
min-height: calc(100vh - 120rpx); min-height: calc(100vh - 120rpx);
width: 100%; width: 100%;
position: relative; position: relative;
/* 去掉渐变续色,页面纯白底 */
} }
.searchBox { .searchBox {
/* 吸顶固定:滚动时房产栏始终可见,未绑定/已绑定两态一致 */
position: sticky;
top: 0;
z-index: 100;
display: flex; display: flex;
align-items: center; align-items: center;
/* 不要红头,保持页面白底 */ position: absolute;
background: #ffffff; left: 0;
} z-index: 2;
.back-btn {
display: flex;
align-items: center;
padding-left: 20rpx;
padding-right: 4rpx;
} }
.searchBox_add { .searchBox_add {
@ -84,7 +73,7 @@ image {
width: auto; width: auto;
height: 44rpx; height: 44rpx;
padding: 5rpx 15rpx; padding: 5rpx 15rpx;
background: #f4f5f7; background: rgba(255, 255, 255, 0.8);
border-radius: 100rpx 100rpx 100rpx 100rpx; border-radius: 100rpx 100rpx 100rpx 100rpx;
display: flex; display: flex;
align-items: center; align-items: center;
@ -113,13 +102,8 @@ image {
} }
.swiperBox1 { .swiperBox1 {
/* 与首页轮播一致:300rpx 高(绑定/未绑定统一) */ height: 500rpx;
height: 300rpx; width: 750rpx;
width: 710rpx;
/* 与首页 banner 一致:内缩圆角卡片,两侧留白让 .container 续色透出 */
margin: 20rpx auto 0;
border-radius: 20rpx;
overflow: hidden;
position: relative; position: relative;
} }
@ -127,33 +111,34 @@ image {
height: 300rpx; height: 300rpx;
width: 710rpx; width: 710rpx;
position: relative; position: relative;
/* 头区已改普通流,去掉原为绝对定位 searchBox 预留的 170rpx 顶部空隙 */ margin-top: 170rpx;
margin: 20rpx auto 0; margin: 170rpx auto 0;
/* 与绑定态一致:圆角由容器统一裁切 */
border-radius: 20rpx;
overflow: hidden;
} }
.swiperBox_no_img{ .swiperBox_no_img{
/* 铺满容器,保证与绑定态同尺寸展示(圆角由容器裁切) */ border-radius: 15rpx;
width: 100%;
height: 100%;
} }
.swiperBox1 swiper { .swiperBox1 swiper {
height: 100%; height: 100%;
} }
/* B方案:去掉 banner 底部的半透明→白 遮罩(会截断红色续色、造成不连续) */
.swiperBox1::after { .swiperBox1::after {
content: none; content: '';
width: 100%;
position: absolute;
left: 0;
bottom: 0;
height: 120rpx;
/* 从上到下 透明渐变成白色 */
background: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 1) 100%);
} }
.dot { .dot {
position: absolute; position: absolute;
/* 指示点放右下角(与首页轮播一致) */ left: 50%;
right: 24rpx; transform: translateX(-50%);
bottom: 20rpx; bottom: 107rpx;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
@ -168,9 +153,7 @@ image {
} }
.swiperBox2_img { .swiperBox2_img {
/* 铺满 300rpx 容器(圆角由容器裁切) */ border-radius: 20rpx 20rpx 0 0;
width: 100%;
height: 100%;
} }
.active { .active {
@ -178,29 +161,16 @@ image {
} }
.swiperBox2 { .swiperBox2 {
/* 与首页轮播一致:300rpx 高(绑定/未绑定统一),圆角与顶部轮播同款 */ height: 150rpx;
height: 300rpx;
width: 710rpx; width: 710rpx;
/* 与金刚区互换后位于其下方,去掉原上叠 banner 的 -96rpx,改正常上间距 */ margin: 0 auto;
margin: 30rpx auto 0; margin-top: -96rpx;
border-radius: 20rpx;
overflow: hidden;
}
.swiperBox2 swiper {
height: 100%;
} }
.swiperBox_no2 { .swiperBox_no2 {
height: 300rpx; height: 150rpx;
width: 710rpx; width: 710rpx;
margin: 30rpx auto 0; margin: 0 auto;;
border-radius: 20rpx;
overflow: hidden;
}
.swiperBox_no2 swiper {
height: 100%;
} }
.funcList { .funcList {
@ -241,8 +211,7 @@ image {
margin-top: 32rpx; margin-top: 32rpx;
display: flex; display: flex;
align-items: center; align-items: center;
/* 去掉灰色背景条,与页面白底一致 */ background: #F6F6FA;
background: #ffffff;
height: 100rpx; height: 100rpx;
padding: 0 20rpx; padding: 0 20rpx;
box-sizing: border-box; box-sizing: border-box;
@ -260,31 +229,23 @@ image {
.active2 { .active2 {
font-size: 30rpx; font-size: 30rpx;
font-weight: 700; font-weight: 700;
color: #ff3929;
position: relative; position: relative;
} }
/* 选中标记:红色短横杠(替换原弧形图片) */
.active2::after { .active2::after {
content: ''; content: '';
background: #ff3929; background: url(https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_active.png) no-repeat;
width: 44rpx; background-size: 100% 100%;
height: 6rpx; width: 52rpx;
border-radius: 3rpx; height: 22rpx;
position: absolute; position: absolute;
left: 50%; left: 50%;
bottom: -14rpx; bottom: -16rpx;
transform: translateX(-50%); transform: translateX(-50%);
} }
.newsList { .newsList {
/* 公告块白卡样式(对齐设计稿):白底圆角卡包裹列表,绑定/未绑定一致 */ margin-bottom: 30rpx;
margin: 20rpx 20rpx 30rpx;
padding: 6rpx 24rpx;
background: #ffffff;
border: 1rpx solid #f0f0f2;
border-radius: 20rpx;
box-shadow: 0 6rpx 20rpx rgba(0, 0, 0, 0.04);
} }
.newsItem { .newsItem {
@ -323,79 +284,6 @@ image {
overflow: hidden; overflow: hidden;
} }
/* 宣传栏:图左 + 右侧标题与内容预览(外层已是白卡,条目不再额外留边) */
.newsItemL {
display: flex;
align-items: center;
padding: 30rpx 0;
margin: 0;
box-sizing: border-box;
border-bottom: 1rpx solid #EBEBEB;
}
.newsItemL:last-child {
border-bottom: none;
}
.newsItemL_pic {
width: 220rpx;
height: 160rpx;
border-radius: 16rpx;
overflow: hidden;
flex-shrink: 0;
margin-right: 24rpx;
}
.newsItemL_body {
flex: 1;
min-width: 0;
align-self: stretch;
display: flex;
flex-direction: column;
justify-content: center;
}
.newsItemL_tit {
font-size: 32rpx;
font-weight: 600;
color: #222222;
margin-bottom: 14rpx;
}
.newsItemL_desc {
font-size: 26rpx;
color: #999999;
line-height: 1.5;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
}
/* 资讯条目底部:阅读数(左)+ 更新时间(右) */
.newsItemL_meta {
display: flex;
align-items: center;
justify-content: space-between;
margin-top: 14rpx;
}
.newsItemL_reads {
display: flex;
align-items: center;
font-size: 22rpx;
color: #9a9fa8;
}
.newsItemL_reads text {
margin-left: 6rpx;
}
.newsItemL_time {
font-size: 22rpx;
color: #9a9fa8;
}
.tips { .tips {
font-size: 26rpx; font-size: 26rpx;
color: #999999; color: #999999;
@ -411,8 +299,7 @@ image {
top: 0; top: 0;
bottom: 0; bottom: 0;
background: rgba(0, 0, 0, 0.16); background: rgba(0, 0, 0, 0.16);
/* 弹屏广告全屏遮罩:高于吸顶房产栏(100),保证遮罩完整覆盖 */ z-index: 3;
z-index: 1000;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;

View File

@ -1,16 +1,13 @@
<template> <template>
<view class="container"> <view class="container">
<!-- <view class="empty" v-if="communityList.length == 0"> <!-- <view class="empty" v-if="communityList.length == 0">
<image src="https://static.hshuishang.com/property-img-file/com_newEmpty.png" alt="" /> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_newEmpty.png" alt="" />
<text>当前账户未绑定任何项目房源信息</text> <text>当前账户未绑定任何项目房源信息</text>
<button class="emptyBtn" @click="addCommunity">新增房产绑定</button> <button class="emptyBtn" @click="addCommunity">新增房产绑定</button>
</view> --> </view> -->
<view v-if="communityList.length == 0"> <view v-if="communityList.length == 0">
<view class="searchBox" :style="{ height: localHeight + 'px', paddingTop: top + 'px' }"> <view class="searchBox" :style="{ height: localHeight + 'px', paddingTop: top + 'px' }">
<view class="back-btn" v-if="showBack" @tap="goBack">
<u-icon name="arrow-left" color="#333" size="40"></u-icon>
</view>
<view class="searchBox_add"> <view class="searchBox_add">
<view class="emptyCommunity" @click="addCommunity"> <view class="emptyCommunity" @click="addCommunity">
{{ communityVal }} {{ communityVal }}
@ -20,19 +17,24 @@
<view class="swiperBox_no1"> <view class="swiperBox_no1">
<swiper @animationfinish="swipers" autoplay circular> <swiper @animationfinish="swipers" autoplay circular>
<swiper-item v-for="(img, index) in defaultBannerImgs" :key="index"> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/community_no_image1.png" mode="aspectFill"
<image :src="img" mode="aspectFill" class="swiperBox_no_img" @click="addCommunity" /> class="swiperBox_no_img" @click="addCommunity" />
</swiper-item>
</swiper> </swiper>
<view class="dot"> <view class="dot">
<view :class="['dotItem', currentIdx == index ? 'active' : '']" v-for="(item, index) in defaultBannerImgs" <view :class="['dotItem', currentIdx == index ? 'active' : '']" v-for="(item, index) in bannerList"
:key="index"> :key="index">
</view> </view>
</view> </view>
</view> </view>
<!-- 金刚区与「消费送物业费」广告互换:金刚区在上、广告在下(与已绑定状态一致) --> <view class="swiperBox_no2">
<swiper @animationfinish="swipers" autoplay circular>
<image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/community_no_image2.png" mode="aspectFill"
class="swiperBox_no_img" @click="addCommunity" />
</swiper>
</view>
<view class="funcList"> <view class="funcList">
<u-grid :col="5" :border="false"> <u-grid :col="5" :border="false">
<u-grid-item v-for="(item, index) in noValFunctionList" @click="addCommunity" :key="index"> <u-grid-item v-for="(item, index) in noValFunctionList" @click="addCommunity" :key="index">
@ -42,15 +44,6 @@
</u-grid> </u-grid>
</view> </view>
<view class="swiperBox_no2">
<!-- 横幅轮播无指示点,不绑 animationfinish,避免污染顶部轮播的 currentIdx -->
<swiper autoplay circular>
<swiper-item v-for="(img, index) in defaultStreamerImgs" :key="index">
<image :src="img" mode="aspectFill" class="swiperBox_no_img" @click="addCommunity" />
</swiper-item>
</swiper>
</view>
<view class="tabs" v-if="defaultCategoryList.length > 0"> <view class="tabs" v-if="defaultCategoryList.length > 0">
<view v-for="(item, index) in defaultCategoryList" :key="index" <view v-for="(item, index) in defaultCategoryList" :key="index"
:class="['tabItem', selectedTab === index ? 'active2' : '']" @click="selectTab(index, item)"> :class="['tabItem', selectedTab === index ? 'active2' : '']" @click="selectTab(index, item)">
@ -58,32 +51,21 @@
</view> </view>
</view> </view>
<!-- 宣传栏:图左 + 标题/预览 + 底部阅读数与更新时间(未绑定用假数据) -->
<view class="newsList" v-if="defaultCategoryList.length > 0"> <view class="newsList" v-if="defaultCategoryList.length > 0">
<view class="newsItemL" v-for="item in defaultInfoList" @click="defaultDetail(item)" :key="item.id"> <view class="newsItem" v-for="item in defaultInfoList" @click="defaultDetail(item)" :key="item.id">
<view class="newsItemL_pic"> <view class="newsItem_left">
<view class="newsItem_left_tit">{{ item.title }}</view>
<view class="newsItem_left_sub">{{ item.author }}</view>
</view>
<view class="newsItem_right">
<image :src="item.pic" mode="aspectFill" /> <image :src="item.pic" mode="aspectFill" />
</view> </view>
<view class="newsItemL_body">
<view class="newsItemL_tit">{{ item.title }}</view>
<view class="newsItemL_desc">{{ contentPreview(item.id) }}</view>
<view class="newsItemL_meta">
<view class="newsItemL_reads" v-if="newsReads(item)">
<u-icon name="eye" color="#9a9fa8" size="26"></u-icon>
<text>{{ newsReads(item) }}次阅读</text>
</view>
<text class="newsItemL_time" v-if="newsTime(item)">更新于 {{ newsTime(item) }}</text>
</view>
</view>
</view> </view>
</view> </view>
</view> </view>
<view v-else> <view v-else>
<view class="searchBox" :style="{ height: localHeight + 'px', paddingTop: top + 'px' }"> <view class="searchBox" :style="{ height: localHeight + 'px', paddingTop: top + 'px' }">
<view class="back-btn" v-if="showBack" @tap="goBack">
<u-icon name="arrow-left" color="#333" size="40"></u-icon>
</view>
<view class="searchBox_add"> <view class="searchBox_add">
<view class="emptyCommunity" @click="addCommunity"> <view class="emptyCommunity" @click="addCommunity">
{{ communityVal }} {{ communityVal }}
@ -91,7 +73,7 @@
</view> </view>
</view> </view>
<view class="swiperBox1" v-if="bannerList.length > 0"> <view class="swiperBox1">
<swiper @animationfinish="swipers" autoplay circular> <swiper @animationfinish="swipers" autoplay circular>
<swiper-item v-for="(item, index) in bannerList" :key="index" @click="headerServerClick(item)"> <swiper-item v-for="(item, index) in bannerList" :key="index" @click="headerServerClick(item)">
<image :src="item.ad_picture" mode="aspectFill" /> <image :src="item.ad_picture" mode="aspectFill" />
@ -105,21 +87,14 @@
</view> </view>
</view> </view>
<view class="swiperBox_no1" v-else> <view class="swiperBox2">
<swiper @animationfinish="swipers" autoplay circular> <swiper @animationfinish="swipers" autoplay circular>
<swiper-item v-for="(img, index) in defaultBannerImgs" :key="index"> <swiper-item v-for="(item, index) in streamerList" :key="index" @click="headerServerClick(item)">
<image :src="img" mode="aspectFill" class="swiperBox_no_img" /> <image :src="item.ad_picture" mode="aspectFill" class="swiperBox2_img" />
</swiper-item> </swiper-item>
</swiper> </swiper>
<view class="dot">
<view :class="['dotItem', currentIdx == index ? 'active' : '']" v-for="(item, index) in defaultBannerImgs"
:key="index">
</view>
</view>
</view> </view>
<!-- 金刚区(与「消费送物业费」广告互换:金刚区在上,广告在下) -->
<view class="funcList"> <view class="funcList">
<u-grid :col="rowNum" :border="false"> <u-grid :col="rowNum" :border="false">
<u-grid-item v-for="(item, index) in functionList" @click="jump(item.mini_program_url)" :key="index"> <u-grid-item v-for="(item, index) in functionList" @click="jump(item.mini_program_url)" :key="index">
@ -129,24 +104,6 @@
</u-grid> </u-grid>
</view> </view>
<view class="swiperBox2" v-if="streamerList.length > 0">
<!-- 横幅轮播无指示点,不绑 animationfinish,避免污染顶部轮播的 currentIdx -->
<swiper autoplay circular>
<swiper-item v-for="(item, index) in streamerList" :key="index" @click="headerServerClick(item)">
<image :src="item.ad_picture" mode="aspectFill" class="swiperBox2_img" />
</swiper-item>
</swiper>
</view>
<view class="swiperBox_no2" v-else>
<!-- 横幅轮播无指示点,不绑 animationfinish,避免污染顶部轮播的 currentIdx -->
<swiper autoplay circular>
<swiper-item v-for="(img, index) in defaultStreamerImgs" :key="index">
<image :src="img" mode="aspectFill" class="swiperBox_no_img" />
</swiper-item>
</swiper>
</view>
<view v-for="(item, index) in tileList" :key="index" :class="['ads', index == 0 ? 'ads_first' : '']" <view v-for="(item, index) in tileList" :key="index" :class="['ads', index == 0 ? 'ads_first' : '']"
@click="headerServerClick(item)"> @click="headerServerClick(item)">
<image :src="item.ad_picture" mode="aspectFill" /> <image :src="item.ad_picture" mode="aspectFill" />
@ -166,42 +123,27 @@
</view> </view>
</view> </view>
<!-- 已绑定:通知列表,图左 + 标题/预览 + 底部阅读数与更新时间(与未绑定同形式) -->
<view class="newsList" v-if="categoryList.length > 0"> <view class="newsList" v-if="categoryList.length > 0">
<view class="newsItemL" v-for="item in infoList" @click="detail(item)" :key="item.id"> <view class="newsItem" v-for="item in infoList" @click="detail(item)" :key="item.id">
<view class="newsItemL_pic"> <view class="newsItem_left">
<view class="newsItem_left_tit">{{ item.title }}</view>
<view class="newsItem_left_sub">{{ item.author }}</view>
</view>
<view class="newsItem_right">
<image :src="item.list_image" mode="aspectFill" /> <image :src="item.list_image" mode="aspectFill" />
</view> </view>
<view class="newsItemL_body">
<view class="newsItemL_tit">{{ item.title }}</view>
<view class="newsItemL_desc">{{ noticePreview(item) }}</view>
<view class="newsItemL_meta">
<view class="newsItemL_reads" v-if="newsReads(item)">
<u-icon name="eye" color="#9a9fa8" size="26"></u-icon>
<text>{{ newsReads(item) }}次阅读</text>
</view>
<text class="newsItemL_time" v-if="newsTime(item)">更新于 {{ newsTime(item) }}</text>
</view>
</view>
</view> </view>
</view> </view>
<view class="newsList" v-else> <view class="newsList" v-else>
<view class="newsItemL" v-for="item in defaultInfoList" @click="defaultDetail(item)" :key="item.id"> <view class="newsItem" v-for="item in defaultInfoList" @click="defaultDetail(item)" :key="item.id">
<view class="newsItemL_pic"> <view class="newsItem_left">
<view class="newsItem_left_tit">{{ item.title }}</view>
<view class="newsItem_left_sub">{{ item.author }}</view>
</view>
<view class="newsItem_right">
<image :src="item.pic" mode="aspectFill" /> <image :src="item.pic" mode="aspectFill" />
</view> </view>
<view class="newsItemL_body">
<view class="newsItemL_tit">{{ item.title }}</view>
<view class="newsItemL_desc">{{ contentPreview(item.id) }}</view>
<view class="newsItemL_meta">
<view class="newsItemL_reads" v-if="newsReads(item)">
<u-icon name="eye" color="#9a9fa8" size="26"></u-icon>
<text>{{ newsReads(item) }}次阅读</text>
</view>
<text class="newsItemL_time" v-if="newsTime(item)">更新于 {{ newsTime(item) }}</text>
</view>
</view>
</view> </view>
</view> </view>
@ -217,7 +159,7 @@
</swiper> </swiper>
</view> </view>
<view class="close" @click="closeAds"> <view class="close" @click="closeAds">
<image src="https://static.hshuishang.com/property-img-file/com_close.png"> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_close.png">
</image> </image>
</view> </view>
</view> </view>
@ -265,7 +207,6 @@ export default {
picUrl, picUrl,
top: "", top: "",
localHeight: "", localHeight: "",
showBack: false, // 有上级页面时(如从未来社区「我的房屋」跳入)显示返回按钮;作为底部tab进入时不显示
queryPage: { queryPage: {
page_num: 1, page_num: 1,
page_size: 10, page_size: 10,
@ -277,43 +218,43 @@ export default {
functionList: [], functionList: [],
noValFunctionList: [ noValFunctionList: [
{ {
nav_icon: 'https://static.hshuishang.com/noValFunction1.png', nav_icon: 'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/noValFunction1.png',
nav_name: "物业介绍", nav_name: "物业介绍",
}, },
{ {
nav_icon: 'https://static.hshuishang.com/noValFunction2.png', nav_icon: 'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/noValFunction2.png',
nav_name: "物业缴费", nav_name: "物业缴费",
}, },
{ {
nav_icon: 'https://static.hshuishang.com/noValFunction3.png', nav_icon: 'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/noValFunction3.png',
nav_name: "岁银", nav_name: "物业费",
}, },
{ {
nav_icon: 'https://static.hshuishang.com/noValFunction1.png', nav_icon: 'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/noValFunction1.png',
nav_name: "物业报修", nav_name: "物业报修",
}, },
{ {
nav_icon: 'https://static.hshuishang.com/noValFunction4.png', nav_icon: 'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/noValFunction4.png',
nav_name: "便民电话", nav_name: "便民电话",
}, },
{ {
nav_icon: 'https://static.hshuishang.com/noValFunction5.png', nav_icon: 'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/noValFunction5.png',
nav_name: "人脸门禁", nav_name: "人脸门禁",
}, },
{ {
nav_icon: 'https://static.hshuishang.com/noValFunction6.png', nav_icon: 'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/noValFunction6.png',
nav_name: "手机开门", nav_name: "手机开门",
}, },
{ {
nav_icon: 'https://static.hshuishang.com/noValFunction7.png', nav_icon: 'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/noValFunction7.png',
nav_name: "物业活动", nav_name: "物业活动",
}, },
{ {
nav_icon: 'https://static.hshuishang.com/noValFunction8.png', nav_icon: 'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/noValFunction8.png',
nav_name: "访客邀请", nav_name: "访客邀请",
}, },
{ {
nav_icon: 'https://static.hshuishang.com/noValFunction10.png', nav_icon: 'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/noValFunction10.png',
nav_name: "场地预约", nav_name: "场地预约",
}, },
], ],
@ -321,17 +262,6 @@ export default {
ads1Show: false, ads1Show: false,
ads2Show: false, ads2Show: false,
// 默认页轮播图(未绑定房源/无广告兜底):顶部 1/12/13,横幅 10/20
defaultBannerImgs: [
"https://static.hshuishang.com/static/1.jpg",
"https://static.hshuishang.com/static/12.jpg",
"https://static.hshuishang.com/static/13.jpg",
],
defaultStreamerImgs: [
"https://static.hshuishang.com/static/10.jpg",
"https://static.hshuishang.com/static/20.jpg",
],
bannerList: [], //轮播图广告 bannerList: [], //轮播图广告
currentIdx: 0, currentIdx: 0,
streamerList: [], //横幅广告 streamerList: [], //横幅广告
@ -358,7 +288,6 @@ export default {
// 从JSON文件中获取默认数据 // 从JSON文件中获取默认数据
defaultCategoryList: dataJson.defaultCategoryList, defaultCategoryList: dataJson.defaultCategoryList,
defaultInfoList: dataJson.defaultInfoList, defaultInfoList: dataJson.defaultInfoList,
defaultNoticeList: dataJson.defaultNoticeList, // 含正文,用于宣传栏内容预览
// 用于存储原始的defaultInfoList数据 // 用于存储原始的defaultInfoList数据
originalDefaultInfoList: null originalDefaultInfoList: null
}; };
@ -381,7 +310,6 @@ export default {
this.top = meun.top; this.top = meun.top;
// this.top = meun.height + meun.top; // this.top = meun.height + meun.top;
this.localHeight = meun.height; this.localHeight = meun.height;
this.showBack = getCurrentPages().length > 1;
this.defaultFunctionList = [ this.defaultFunctionList = [
{ {
create_time: "", create_time: "",
@ -389,7 +317,7 @@ export default {
is_published: 1, is_published: 1,
jump_target: 1, jump_target: 1,
mini_program_url: "/packages/community/repairList/index", mini_program_url: "/packages/community/repairList/index",
nav_icon: "https://static.hshuishang.com/noValFunction1.png", nav_icon: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/noValFunction1.png",
nav_name: "报事报修", nav_name: "报事报修",
other_appid: "", other_appid: "",
other_path: "", other_path: "",
@ -403,7 +331,7 @@ export default {
is_published: 1, is_published: 1,
jump_target: 1, jump_target: 1,
mini_program_url: "/packages/community/propertyPayment/index", mini_program_url: "/packages/community/propertyPayment/index",
nav_icon: "https://static.hshuishang.com/noValFunction2.png", nav_icon: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/noValFunction2.png",
nav_name: "物业缴费", nav_name: "物业缴费",
other_appid: "", other_appid: "",
other_path: "", other_path: "",
@ -417,8 +345,8 @@ export default {
is_published: 1, is_published: 1,
jump_target: 1, jump_target: 1,
mini_program_url: "/packages/community/providentFund/index", mini_program_url: "/packages/community/providentFund/index",
nav_icon: "https://static.hshuishang.com/noValFunction3.png", nav_icon: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/noValFunction3.png",
nav_name: "岁银", nav_name: "物业费",
other_appid: "", other_appid: "",
other_path: "", other_path: "",
sort: 2, sort: 2,
@ -443,8 +371,8 @@ export default {
if (!this.originalDefaultInfoList) { if (!this.originalDefaultInfoList) {
this.originalDefaultInfoList = JSON.parse(JSON.stringify(dataJson.defaultInfoList)); this.originalDefaultInfoList = JSON.parse(JSON.stringify(dataJson.defaultInfoList));
} }
// 默认选中第一个分类并展示对应数据(按 category_id 关联,每个分类多条) // 默认选中第一个分类并展示对应数据
this.defaultInfoList = this.originalDefaultInfoList.filter(info => info.category_id === this.defaultCategoryList[0].id); this.defaultInfoList = this.originalDefaultInfoList.filter(info => info.id === this.defaultCategoryList[0].id);
} }
}, 100); }, 100);
}, },
@ -566,9 +494,6 @@ export default {
addCommunity() { addCommunity() {
NavgateTo("/packages/community/myCommunity/index"); NavgateTo("/packages/community/myCommunity/index");
}, },
goBack() {
uni.navigateBack({ delta: 1 });
},
swipers(event) { swipers(event) {
// 获取当前轮播图索引 // 获取当前轮播图索引
@ -599,6 +524,7 @@ export default {
page_num: 1, page_num: 1,
page_size: 50, page_size: 50,
}); });
console.log(res, "xx");
// 获取 rowNum 和 colNum 的乘积 // 获取 rowNum 和 colNum 的乘积
const totalItems = this.rowNum * this.colNum - 3; const totalItems = this.rowNum * this.colNum - 3;
@ -698,6 +624,7 @@ export default {
}, },
headerServerClick(e) { headerServerClick(e) {
console.log("当前点击内容", e);
if (!e.target_page) { if (!e.target_page) {
this.NotOpen(); this.NotOpen();
return; return;
@ -723,6 +650,9 @@ export default {
extraData: { extraData: {
data1: "test", data1: "test",
}, },
success(res) {
console.log("打开成功", res);
},
}); });
} else { } else {
// 确保路径是绝对路径 // 确保路径是绝对路径
@ -804,8 +734,8 @@ export default {
this.originalDefaultInfoList = JSON.parse(JSON.stringify(dataJson.defaultInfoList)); this.originalDefaultInfoList = JSON.parse(JSON.stringify(dataJson.defaultInfoList));
} }
// 根据选中的分类ID筛选数据(按 category_id 关联,每个分类多条) // 根据选中的分类ID筛选数据
this.defaultInfoList = this.originalDefaultInfoList.filter(info => info?.category_id === item?.id); this.defaultInfoList = this.originalDefaultInfoList.filter(info => info?.id === item?.id);
return; return;
} }
@ -868,63 +798,14 @@ export default {
}, },
detail(e) { detail(e) {
console.log(e);
NavgateTo("../noticeDesc/index?id=" + e.id); NavgateTo("../noticeDesc/index?id=" + e.id);
}, },
defaultDetail(e) { defaultDetail(e) {
console.log(e);
NavgateTo("../defaultNotice/index?id=" + e.id); NavgateTo("../defaultNotice/index?id=" + e.id);
}, },
// 静态默认宣传栏内容预览:按 id 取对应正文,去掉换行/空白占位/标签,截取一段
contentPreview(id) {
const n = (this.defaultNoticeList || []).find((x) => x.id === id);
if (!n || !n.content) return "";
const text = n.content
.replace(/&nbsp;/g, " ")
.replace(/<[^>]+>/g, "")
.replace(/\s+/g, " ")
.trim();
return text.length > 50 ? text.slice(0, 50) + "…" : text;
},
// 资讯条目阅读数:假数据 reads / 接口字段兜底(公告表暂无阅读数字段,无值不展示)
newsReads(item) {
if (!item) return 0;
return item.reads || item.view_count || item.read_num || 0;
},
// 资讯条目更新日期:假数据 update_date / 接口 update_time、publish_time,取日期部分
newsTime(item) {
if (!item) return "";
const t =
item.update_date ||
item.update_time ||
item.publish_time ||
item.create_time ||
"";
return t ? String(t).slice(0, 10) : "";
},
// 已绑定:临时通知列表项内容预览(接口数据),字段兜底 + 去标签截取
noticePreview(item) {
if (!item) return "";
const raw =
item.content ||
item.summary ||
item.describe ||
item.intro ||
item.sub_title ||
"";
if (raw) {
const text = String(raw)
.replace(/&nbsp;/g, " ")
.replace(/<[^>]+>/g, "")
.replace(/\s+/g, " ")
.trim();
if (text) return text.length > 50 ? text.slice(0, 50) + "…" : text;
}
return item.author || "";
},
}, },
}; };
</script> </script>

View File

@ -1,7 +1,7 @@
<template> <template>
<view class="community-list-container"> <view class="community-list-container">
<view class="top"> <view class="top">
<image src="https://static.hshuishang.com/communityTopImg.png" mode=""></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/communityTopImg.png" mode=""></image>
</view> </view>
<view class="community-list"> <view class="community-list">
<view class="community-item-box" v-for="(item, index) in communityList" :key="index"> <view class="community-item-box" v-for="(item, index) in communityList" :key="index">
@ -30,7 +30,7 @@
</view> </view>
<view class="community-address"> <view class="community-address">
<image id="local" <image id="local"
src="https://static.hshuishang.com/property-img-file/local_localIcon.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/local_localIcon.png"
mode="aspectFill"></image> mode="aspectFill"></image>
<view class="community-address-text">{{ item.addr }}</view> <view class="community-address-text">{{ item.addr }}</view>
</view> </view>
@ -62,7 +62,7 @@ export default {
hasMoreData: true, hasMoreData: true,
isLoading: false, isLoading: false,
tencentMapKey: '55NBZ-MUQYW-EAJRL-YIWPA-ZXCR6-4NBPP', // 腾讯地图API Key tencentMapKey: '55NBZ-MUQYW-EAJRL-YIWPA-ZXCR6-4NBPP', // 腾讯地图API Key
defaultCommunityImage: 'https://static.hshuishang.com/community_no_image3.png' // 默认小区图片 defaultCommunityImage: 'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/community_no_image3.png' // 默认小区图片
}; };
}, },
methods: { methods: {

View File

@ -12,7 +12,7 @@
<view class="empty" v-if="communityList.length == 0"> <view class="empty" v-if="communityList.length == 0">
<view class="emptyTitle">绑定房源</view> <view class="emptyTitle">绑定房源</view>
<view class="emptyMsg">请绑定房源信息 以便使用其他功能</view> <view class="emptyMsg">请绑定房源信息 以便使用其他功能</view>
<image src="https://static.hshuishang.com/community_no_image3.png" alt="" /> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/community_no_image3.png" alt="" />
</view> </view>
<view class="communityList"> <view class="communityList">
@ -30,9 +30,9 @@
</view> </view>
</view> </view>
<view class="communityItem_right"> <view class="communityItem_right">
<image src="https://static.hshuishang.com/property-img-file/com_check1.png" <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_check1.png"
v-if="item.community_id != currentCommunity.id"></image> v-if="item.community_id != currentCommunity.id"></image>
<image src="https://static.hshuishang.com/property-img-file/com_check2.png" <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_check2.png"
v-if="item.community_id == currentCommunity.id"></image> v-if="item.community_id == currentCommunity.id"></image>
</view> </view>
</view> </view>
@ -91,9 +91,6 @@ export default {
this.currentCommunity = e this.currentCommunity = e
uni.setStorageSync('changeCommData', { id: e.community_id, name: e.name }); uni.setStorageSync('changeCommData', { id: e.community_id, name: e.name });
uni.setStorageSync('currentCommunityAddr', e.addr); uni.setStorageSync('currentCommunityAddr', e.addr);
// 缓存该小区已绑定房产的门牌号(room_name,如「1栋1单元1层103」),供到家服务等下单页缺省填写
const owner = (e.room_owner_list && e.room_owner_list.length) ? e.room_owner_list[0] : null
uni.setStorageSync('currentRoomNo', owner && owner.room_name ? owner.room_name : '');
NavgateTo("1") NavgateTo("1")
}, },
}, },

View File

@ -25,7 +25,7 @@
</view> </view>
<view class="add" @click="addCar"> <view class="add" @click="addCar">
<image src="https://static.hshuishang.com/ConvenServer/addCar.png" mode="widthFix"/> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/ConvenServer/addCar.png" mode="widthFix"/>
</view> </view>
</view> </view>
</template> </template>

View File

@ -307,7 +307,7 @@ page {
content: ''; content: '';
width: 52rpx; width: 52rpx;
height: 22rpx; height: 22rpx;
background: url(https://static.hshuishang.com/property-img-file/com_active.png); background: url(https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_active.png);
background-size: cover; background-size: cover;
position: absolute; position: absolute;
left: 50%; left: 50%;

View File

@ -8,7 +8,7 @@
<div class="myRealEstate"> <div class="myRealEstate">
<div class="myRealEstates"> <div class="myRealEstates">
<image src="https://static.hshuishang.com/property-img-file/com_communityNav.png" mode="aspectFill"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_communityNav.png" mode="aspectFill"></image>
<div class="name">滏阳锦苑</div> <div class="name">滏阳锦苑</div>
<div class="Visitor">访客身份 点击立即入驻本社区</div> <div class="Visitor">访客身份 点击立即入驻本社区</div>
</div> </div>
@ -25,7 +25,7 @@
<div class="ConList"> <div class="ConList">
<div class="ConItem" v-for="item in 3" @click="desc"> <div class="ConItem" v-for="item in 3" @click="desc">
<div class="ConItem_left"> <div class="ConItem_left">
<image src="https://static.hshuishang.com/property-img-file/com_act2Img.png" mode="aspectFill"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_act2Img.png" mode="aspectFill"></image>
</div> </div>
<div class="ConItem_right"> <div class="ConItem_right">
<div class="ConItem_right_tit">关于小区停车场治理通告</div> <div class="ConItem_right_tit">关于小区停车场治理通告</div>

View File

@ -128,7 +128,7 @@ page {
bottom: -2rpx; bottom: -2rpx;
width: 30rpx; width: 30rpx;
height: 30rpx; height: 30rpx;
background: url(https://static.hshuishang.com/property-img-file/com_activeIcon.png); background: url(https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_activeIcon.png);
background-size: 100% 100%; background-size: 100% 100%;
} }

View File

@ -65,7 +65,7 @@
<u-upload :fileList="imgList" name="imgList" @afterRead="afterReadImg" @delete="deletePic" multiple <u-upload :fileList="imgList" name="imgList" @afterRead="afterReadImg" @delete="deletePic" multiple
:maxCount="5"> :maxCount="5">
<view class="imgCon"> <view class="imgCon">
<image src="https://static.hshuishang.com/property-img-file/com_imageImg.png" mode="widthFix"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_imageImg.png" mode="widthFix"></image>
上传图片 上传图片
</view> </view>
</u-upload> </u-upload>
@ -78,7 +78,7 @@
<u-upload v-if="!videoList.url" :fileList="videoList" @afterRead="afterReadVideo" @delete="deleteVideo" name="videoList" <u-upload v-if="!videoList.url" :fileList="videoList" @afterRead="afterReadVideo" @delete="deleteVideo" name="videoList"
:maxCount="1" accept="video"> :maxCount="1" accept="video">
<view class="imgCon"> <view class="imgCon">
<image src="https://static.hshuishang.com/property-img-file/com_videoImg.png" mode="widthFix"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_videoImg.png" mode="widthFix"></image>
上传视频 上传视频
</view> </view>
</u-upload> </u-upload>

View File

@ -4,7 +4,7 @@
<view class="searchIpt"> <view class="searchIpt">
<input type="text" placeholder="社区名称/业主姓名/业主手机" placeholder-style="color: #999999;font-size: 24rpx;" <input type="text" placeholder="社区名称/业主姓名/业主手机" placeholder-style="color: #999999;font-size: 24rpx;"
:value="search" @input="search" /> :value="search" @input="search" />
<image class="sear_icon" src="https://static.hshuishang.com/water_filter/dervice/deriveSearch.png" <image class="sear_icon" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/water_filter/dervice/deriveSearch.png"
mode="" /> mode="" />
</view> </view>
</view> </view>

View File

@ -131,7 +131,7 @@ image {
position: absolute; position: absolute;
right: 8rpx; right: 8rpx;
top: 23rpx; top: 23rpx;
background: url(https://static.hshuishang.com/property-img-file/com_jfImg.png) no-repeat; background: url(https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_jfImg.png) no-repeat;
background-size: 100% 100%; background-size: 100% 100%;
} }

View File

@ -8,7 +8,7 @@
<view class="community"> <view class="community">
<view class="community_left"> <view class="community_left">
<image mode="aspectFill" src="https://static.hshuishang.com/property-img-file/test.png" <image mode="aspectFill" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/test.png"
alt="" /> alt="" />
</view> </view>
<view class="community_right" @click="changeShow"> <view class="community_right" @click="changeShow">
@ -35,7 +35,7 @@
<view class="homeMoney" v-if="active == 0"> <view class="homeMoney" v-if="active == 0">
<view class="homeMoney_box"> <view class="homeMoney_box">
<view class="homeMoney_box_left"> <view class="homeMoney_box_left">
<view class="homeMoney_box_left1">岁银</view> <view class="homeMoney_box_left1">物业费</view>
<view class="homeMoney_box_left2">可抵扣账户金额</view> <view class="homeMoney_box_left2">可抵扣账户金额</view>
</view> </view>
<view class="homeMoney_box_right"> <view class="homeMoney_box_right">
@ -102,7 +102,7 @@
<view class="PayTypeItem_left"> <view class="PayTypeItem_left">
<view class="PayTypeItem_img"> <view class="PayTypeItem_img">
<image mode="aspectFill" <image mode="aspectFill"
src="https://static.hshuishang.com/property-img-file/com_wechat.png" alt="" /> src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_wechat.png" alt="" />
</view> </view>
<view class="PayTypeItem_con"> <view class="PayTypeItem_con">
<view class="PayTypeItem_con_tit">微信支付</view> <view class="PayTypeItem_con_tit">微信支付</view>
@ -119,10 +119,10 @@
<view class="PayTypeItem_left"> <view class="PayTypeItem_left">
<view class="PayTypeItem_img"> <view class="PayTypeItem_img">
<image mode="aspectFill" <image mode="aspectFill"
src="https://static.hshuishang.com/property-img-file/com_homeMoney.png" alt="" /> src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_homeMoney.png" alt="" />
</view> </view>
<view class="PayTypeItem_con"> <view class="PayTypeItem_con">
<view class="PayTypeItem_con_tit">岁银支付</view> <view class="PayTypeItem_con_tit">物业费支付</view>
<view class="PayTypeItem_con_msg"> <view class="PayTypeItem_con_msg">
可用公积金:<span>¥</span>{{ balanceMoney }} 可用公积金:<span>¥</span>{{ balanceMoney }}
<view class="PayTypeItem_con_msg2" @click="changeShow2"> <view class="PayTypeItem_con_msg2" @click="changeShow2">
@ -174,7 +174,7 @@
</view> </view>
<view class="row"> <view class="row">
<view class="row_label">岁银抵扣金额</view> <view class="row_label">物业费抵扣金额</view>
<view class="row_con4">-¥{{ item.property_housing_fund }}</view> <view class="row_con4">-¥{{ item.property_housing_fund }}</view>
</view> </view>
@ -228,7 +228,7 @@
<view class="banlenceItem"> <view class="banlenceItem">
<view class="banlenceItem_left"> <view class="banlenceItem_left">
<image mode="aspectFill" <image mode="aspectFill"
src="https://static.hshuishang.com/property-img-file/com_wechat.png" alt="" /> src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_wechat.png" alt="" />
微信支付 微信支付
</view> </view>
<view class="banlenceItem_right"> <view class="banlenceItem_right">
@ -239,8 +239,8 @@
<view class="banlenceItem"> <view class="banlenceItem">
<view class="banlenceItem_left"> <view class="banlenceItem_left">
<image mode="aspectFill" <image mode="aspectFill"
src="https://static.hshuishang.com/property-img-file/com_homeMoney.png" alt="" /> src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_homeMoney.png" alt="" />
岁银支付 物业费支付
</view> </view>
<view class="banlenceItem_right"> <view class="banlenceItem_right">
<span>¥</span>{{ balanceMoney > currentMoney ? currentMoney : balanceMoney }} <span>¥</span>{{ balanceMoney > currentMoney ? currentMoney : balanceMoney }}
@ -249,7 +249,7 @@
</view> </view>
<view class="btn" @click="createPay"> <view class="btn" @click="createPay">
岁银+微信支付 <span>¥</span>{{ currentMoney }} 物业费+微信支付 <span>¥</span>{{ currentMoney }}
</view> </view>
</view> </view>
</view> </view>
@ -611,9 +611,9 @@ export default {
if (this.payType == 1) { if (this.payType == 1) {
name_mini = "微信"; name_mini = "微信";
} else if (this.payType == 2) { } else if (this.payType == 2) {
name_mini = "岁银"; name_mini = "物业费";
} else { } else {
name_mini = "微信 + 岁银"; name_mini = "微信 + 物业费";
} }
if (!this.currentMoney) { if (!this.currentMoney) {
return uni.showToast({ return uni.showToast({
@ -674,7 +674,7 @@ export default {
// 组合支付 // 组合支付
if (isComboPay && (payParams.money != 0.00 || payParams.money != 0)) { if (isComboPay && (payParams.money != 0.00 || payParams.money != 0)) {
this.payType = 3; this.payType = 3;
name_mini = "微信 + 岁银"; name_mini = "微信 + 物业费";
} }
payParams.name_mini = name_mini; payParams.name_mini = name_mini;
@ -682,7 +682,7 @@ export default {
if (this.payType == 2) { if (this.payType == 2) {
uni.showModal({ uni.showModal({
title: '提示', title: '提示',
content: '确定使用岁银支付?', content: '确定使用物业费支付?',
success: async (res) => { success: async (res) => {
if (res.confirm) { if (res.confirm) {
await request(apiArr.createPayOrder, "POST", payParams).then((res) => { await request(apiArr.createPayOrder, "POST", payParams).then((res) => {
@ -799,7 +799,7 @@ export default {
}); });
}, },
//岁银详情 //物业费详情
more(item) { more(item) {
NavgateTo(`../providentFund/index?item=${JSON.stringify(item)}`); NavgateTo(`../providentFund/index?item=${JSON.stringify(item)}`);
}, },

View File

@ -3,7 +3,7 @@ page {
} }
.container { .container {
.container_body { .container_body {
background: url("https://static.hshuishang.com/property-img-file/community_providentFund_Group_1523.png") no-repeat; background: url("https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/community_providentFund_Group_1523.png") no-repeat;
background-size: 100% 100%; background-size: 100% 100%;
} }
.title { .title {

View File

@ -8,7 +8,7 @@
:autoBack="true" :autoBack="true"
/> />
<view class="container_body" :style="{ paddingTop: top + 'px' }"> <view class="container_body" :style="{ paddingTop: top + 'px' }">
<view class="title">岁银</view> <view class="title">物业费</view>
<view class="title_bottom"> <view class="title_bottom">
<view>¥{{ getTotal(list.owners) }}</view> <view>¥{{ getTotal(list.owners) }}</view>
<u-icon <u-icon
@ -49,7 +49,7 @@
</view> </view>
<view class="item"> <view class="item">
<view class="label fix"> <view class="label fix">
<text>岁银总余额</text> <text>物业费总余额</text>
<u-icon <u-icon
name="info-circle-fill" name="info-circle-fill"
size="30rpx" size="30rpx"
@ -90,13 +90,13 @@
<image <image
v-if="item.checked" v-if="item.checked"
class="pic" class="pic"
src="https://static.hshuishang.com/property-img-file/community_providentFund_Group_1444.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/community_providentFund_Group_1444.png"
mode="scaleToFill" mode="scaleToFill"
/> />
<image <image
v-else v-else
class="pic" class="pic"
src="https://static.hshuishang.com/property-img-file/community_providentFund_Ellipse_160.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/community_providentFund_Ellipse_160.png"
mode="scaleToFill" mode="scaleToFill"
/> />
</view> </view>
@ -124,8 +124,8 @@ export default {
moeny: "0.00", moeny: "0.00",
show: false, show: false,
ownerDesc: ownerDesc:
"本房产的岁银为该房产的所有成员岁银总和。无需经过成员同意便可用于本房产的岁银抵扣,一旦成功抵扣,成员所拥有的岁银将自动进行扣除。", "本房产的物业费为该房产的所有成员物业费总和。无需经过成员同意便可用于本房产的物业费抵扣,一旦成功抵扣,成员所拥有的物业费将自动进行扣除。",
desc: "岁银可通用至您加入的所有房产,任一房产的物业相关费用均可用该岁银抵扣。", desc: "物业费可通用至您加入的所有房产,任一房产的物业相关费用均可用该物业费抵扣。",
defaultName: "", defaultName: "",
list: [], list: [],
houseList: [], houseList: [],

View File

@ -61,7 +61,7 @@
content: ''; content: '';
width: 52rpx; width: 52rpx;
height: 22rpx; height: 22rpx;
background: url(https://static.hshuishang.com/property-img-file/com_active.png); background: url(https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_active.png);
background-size: cover; background-size: cover;
position: absolute; position: absolute;
left: 50%; left: 50%;

View File

@ -71,7 +71,7 @@
</view> </view>
<view v-if="list.length == 0" class="empty"> <view v-if="list.length == 0" class="empty">
<image src="https://static.hshuishang.com/property-img-file/com_nearbyList_empty.png" <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_nearbyList_empty.png"
mode="aspectFill"></image> mode="aspectFill"></image>
暂无数据 暂无数据
</view> </view>
@ -188,11 +188,6 @@ export default {
}, },
}, },
onShow() {
this.init();
this.getTabsList();
},
onLoad(options) { onLoad(options) {
const meun = menuButtonInfo(); const meun = menuButtonInfo();
this.top = meun.top; this.top = meun.top;

View File

@ -88,17 +88,17 @@
} }
.tabItem1 { .tabItem1 {
background: url(https://static.hshuishang.com/property-img-file/com_tabBg1.png); background: url(https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_tabBg1.png);
background-size: cover; background-size: cover;
} }
.tabItem2 { .tabItem2 {
background: url(https://static.hshuishang.com/property-img-file/com_tabBg2.png); background: url(https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_tabBg2.png);
background-size: cover; background-size: cover;
} }
.tabItem3 { .tabItem3 {
background: url(https://static.hshuishang.com/property-img-file/com_tabBg3.png); background: url(https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_tabBg3.png);
background-size: cover; background-size: cover;
} }

View File

@ -75,128 +75,128 @@ export default {
return { return {
functionList: [ functionList: [
{ {
icon: "https://static.hshuishang.com/property-img-file/com_serverIcon1.png", icon: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_serverIcon1.png",
name: "业主入驻", name: "业主入驻",
url: "" url: ""
}, },
{ {
icon: "https://static.hshuishang.com/property-img-file/com_serverIcon2.png", icon: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_serverIcon2.png",
name: "我的房产", name: "我的房产",
url: "" url: ""
}, },
{ {
icon: "https://static.hshuishang.com/property-img-file/com_serverIcon3.png", icon: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_serverIcon3.png",
name: "生活缴费", name: "生活缴费",
url: "weixin://dl/business/?t=WvQ1ZJv0J5Z" url: "weixin://dl/business/?t=WvQ1ZJv0J5Z"
}, },
{ {
icon: "https://static.hshuishang.com/property-img-file/com_serverIcon4.png", icon: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_serverIcon4.png",
name: "便民服务", name: "便民服务",
url: "" url: ""
}, },
{ {
icon: "https://static.hshuishang.com/property-img-file/com_serverIcon5.png", icon: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_serverIcon5.png",
name: "岁银", name: "物业费",
url: "" url: ""
}, },
{ {
icon: "https://static.hshuishang.com/property-img-file/com_serverIcon6.png", icon: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_serverIcon6.png",
name: "社区互动", name: "社区互动",
url: "" url: ""
}, },
{ {
icon: "https://static.hshuishang.com/property-img-file/com_serverIcon7.png", icon: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_serverIcon7.png",
name: "岁银", name: "物业费",
url: "" url: ""
}, },
{ {
icon: "https://static.hshuishang.com/property-img-file/com_serverIcon8.png", icon: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_serverIcon8.png",
name: "物业服务", name: "物业服务",
url: "" url: ""
}, },
{ {
icon: "https://static.hshuishang.com/property-img-file/com_serverIcon9.png", icon: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_serverIcon9.png",
name: "报事报修", name: "报事报修",
url: "" url: ""
}, },
{ {
icon: "https://static.hshuishang.com/property-img-file/com_serverIcon10.png", icon: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_serverIcon10.png",
name: "物业缴费", name: "物业缴费",
url: "" url: ""
}, },
{ {
icon: "https://static.hshuishang.com/property-img-file/com_serverIcon11.png", icon: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_serverIcon11.png",
name: "纠纷调解", name: "纠纷调解",
url: "" url: ""
}, },
{ {
icon: "https://static.hshuishang.com/property-img-file/com_serverIcon12.png", icon: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_serverIcon12.png",
name: "社区管家", name: "社区管家",
url: "" url: ""
}, },
], ],
localList: [ localList: [
{ {
icon: "https://static.hshuishang.com/property-img-file/com_localIcon1.png", icon: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_localIcon1.png",
name: "美食", name: "美食",
url: "" url: ""
}, },
{ {
icon: "https://static.hshuishang.com/property-img-file/com_localIcon2.png", icon: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_localIcon2.png",
name: "家教", name: "家教",
url: "" url: ""
}, },
{ {
icon: "https://static.hshuishang.com/property-img-file/com_localIcon3.png", icon: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_localIcon3.png",
name: "超市", name: "超市",
url: "" url: ""
}, },
{ {
icon: "https://static.hshuishang.com/property-img-file/com_localIcon4.png", icon: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_localIcon4.png",
name: "健身", name: "健身",
url: "" url: ""
}, },
], ],
shopList: [ shopList: [
{ {
icon: "https://static.hshuishang.com/property-img-file/com_shopIcon1.png", icon: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_shopIcon1.png",
name: "电商购物", name: "电商购物",
url: "" url: ""
}, },
{ {
icon: "https://static.hshuishang.com/property-img-file/com_shopIcon2.png", icon: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_shopIcon2.png",
name: "社区团购", name: "社区团购",
url: "" url: ""
}, },
{ {
icon: "https://static.hshuishang.com/property-img-file/com_shopIcon3.png", icon: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_shopIcon3.png",
name: "本地优选", name: "本地优选",
url: "" url: ""
}, },
{ {
icon: "https://static.hshuishang.com/property-img-file/com_shopIcon4.png", icon: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_shopIcon4.png",
name: "社区拼团", name: "社区拼团",
url: "" url: ""
}, },
], ],
cardList: [ cardList: [
{ {
icon: "https://static.hshuishang.com/property-img-file/com_cardIcon1.png", icon: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_cardIcon1.png",
name: "我的积分", name: "我的积分",
url: "" url: ""
}, },
{ {
icon: "https://static.hshuishang.com/property-img-file/com_cardIcon2.png", icon: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_cardIcon2.png",
name: "积分兑换", name: "积分兑换",
url: "" url: ""
}, },
{ {
icon: "https://static.hshuishang.com/property-img-file/com_cardIcon3.png", icon: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_cardIcon3.png",
name: "我的优惠卡", name: "我的优惠卡",
url: "" url: ""
}, },
{ {
icon: "https://static.hshuishang.com/property-img-file/com_cardIcon4.png", icon: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_cardIcon4.png",
name: "我的会员卡", name: "我的会员卡",
url: "" url: ""
}, },

View File

@ -3,7 +3,7 @@
<view class="swiper"> <view class="swiper">
<swiper> <swiper>
<swiper-item> <swiper-item>
<image src="https://static.hshuishang.com/doorToDoor/door_img.png" mode="" /> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/door_img.png" mode="" />
</swiper-item> </swiper-item>
</swiper> </swiper>
</view> </view>
@ -29,25 +29,25 @@
<view class="serviceTagItem" @click="jump"> <view class="serviceTagItem" @click="jump">
<view class="serviceTagItem_name">家政保洁</view> <view class="serviceTagItem_name">家政保洁</view>
<view class="serviceTagItem_img1"> <view class="serviceTagItem_img1">
<image src="https://static.hshuishang.com/doorToDoor/hot1.png" mode="widthFix" /> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/hot1.png" mode="widthFix" />
</view> </view>
</view> </view>
<view class="serviceTagItem item2" @click="jump"> <view class="serviceTagItem item2" @click="jump">
<view class="serviceTagItem_name">专业保姆</view> <view class="serviceTagItem_name">专业保姆</view>
<view class="serviceTagItem_img2"> <view class="serviceTagItem_img2">
<image src="https://static.hshuishang.com/doorToDoor/hot2.png" mode="widthFix" /> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/hot2.png" mode="widthFix" />
</view> </view>
</view> </view>
<view class="serviceTagItem item3" @click="jump"> <view class="serviceTagItem item3" @click="jump">
<view class="serviceTagItem_name">家电维修</view> <view class="serviceTagItem_name">家电维修</view>
<view class="serviceTagItem_img3"> <view class="serviceTagItem_img3">
<image src="https://static.hshuishang.com/doorToDoor/hot3.png" mode="widthFix" /> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/hot3.png" mode="widthFix" />
</view> </view>
</view> </view>
<view class="serviceTagItem item4" @click="jump"> <view class="serviceTagItem item4" @click="jump">
<view class="serviceTagItem_name">搬家拉货</view> <view class="serviceTagItem_name">搬家拉货</view>
<view class="serviceTagItem_img4"> <view class="serviceTagItem_img4">
<image src="https://static.hshuishang.com/doorToDoor/hot4.png" mode="widthFix" /> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/hot4.png" mode="widthFix" />
</view> </view>
</view> </view>
</view> </view>
@ -65,7 +65,7 @@
<view class="item_tit_left">{{item.cate_name}}</view> <view class="item_tit_left">{{item.cate_name}}</view>
<view class="item_tit_right" @click="jump(item.cate_id)"> <view class="item_tit_right" @click="jump(item.cate_id)">
更多 更多
<image src="https://static.hshuishang.com/water_filter/filter_more.png" mode="" /> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/water_filter/filter_more.png" mode="" />
</view> </view>
</view> </view>
<view class="item_goodsList"> <view class="item_goodsList">
@ -123,55 +123,55 @@
return { return {
tabList:[{ tabList:[{
name:"服务中心", name:"服务中心",
img:'https://static.hshuishang.com/doorToDoor/door_icon1.png', img:'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/door_icon1.png',
url:"../ServiceMore/ServiceMore", url:"../ServiceMore/ServiceMore",
}, },
{ {
name:"家政保洁", name:"家政保洁",
img:'https://static.hshuishang.com/doorToDoor/door_icon2.png', img:'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/door_icon2.png',
url:"../ServiceMore/ServiceMore", url:"../ServiceMore/ServiceMore",
}, },
{ {
name:"衣物洗护", name:"衣物洗护",
img:'https://static.hshuishang.com/doorToDoor/door_icon3.png', img:'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/door_icon3.png',
url:"../ServiceMore/ServiceMore", url:"../ServiceMore/ServiceMore",
}, },
{ {
name:"家电维修", name:"家电维修",
img:'https://static.hshuishang.com/doorToDoor/door_icon4.png', img:'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/door_icon4.png',
url:"../ServiceMore/ServiceMore", url:"../ServiceMore/ServiceMore",
}, },
{ {
name:"跑腿服务", name:"跑腿服务",
img:'https://static.hshuishang.com/doorToDoor/door_icon5.png', img:'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/door_icon5.png',
url:"../ServiceMore/ServiceMore", url:"../ServiceMore/ServiceMore",
}, },
{ {
name:"养车用车", name:"养车用车",
img:'https://static.hshuishang.com/doorToDoor/door_icon6.png', img:'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/door_icon6.png',
url:"../ServiceMore/ServiceMore", url:"../ServiceMore/ServiceMore",
}, },
{ {
name:"保姆月嫂", name:"保姆月嫂",
img:'https://static.hshuishang.com/doorToDoor/door_icon7.png', img:'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/door_icon7.png',
url:"../ServiceMore/ServiceMore", url:"../ServiceMore/ServiceMore",
}, },
{ {
name:"家电清洗", name:"家电清洗",
img:'https://static.hshuishang.com/doorToDoor/door_icon8.png', img:'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/door_icon8.png',
url:"../ServiceMore/ServiceMore", url:"../ServiceMore/ServiceMore",
}, },
{ {
name:"搬家拉货", name:"搬家拉货",
img:'https://static.hshuishang.com/doorToDoor/door_icon9.png', img:'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/door_icon9.png',
url:"../ServiceMore/ServiceMore", url:"../ServiceMore/ServiceMore",
}, },
{ {
name:"家装维修", name:"家装维修",
img:'https://static.hshuishang.com/doorToDoor/door_icon10.png', img:'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/door_icon10.png',
url:"../ServiceMore/ServiceMore", url:"../ServiceMore/ServiceMore",
}, },
], ],

View File

@ -4,29 +4,29 @@
<view class="tit">请填写预约信息</view> <view class="tit">请填写预约信息</view>
<view class="row none" v-if="isreal == 1"> <view class="row none" v-if="isreal == 1">
<view class="row_tit"> <view class="row_tit">
<image src="https://static.hshuishang.com/doorToDoor/reser_icon1.png" mode="" /> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/reser_icon1.png" mode="" />
请选择上门时间 请选择上门时间
</view> </view>
<view class="row_con" @click="changeShow"> <view class="row_con" @click="changeShow">
{{time}} {{time}}
<image src="https://static.hshuishang.com/water_filter/filter_more.png" mode="" /> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/water_filter/filter_more.png" mode="" />
</view> </view>
</view> </view>
<view class="row none" v-if="isreal == 2"> <view class="row none" v-if="isreal == 2">
<view class="row_tit"> <view class="row_tit">
<image src="https://static.hshuishang.com/doorToDoor/reser_icon2.png" mode="" /> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/reser_icon2.png" mode="" />
请选择服务时间 请选择服务时间
</view> </view>
<view class="row_con" @click="changeShow2"> <view class="row_con" @click="changeShow2">
{{serTime}} {{serTime}}
<image src="https://static.hshuishang.com/water_filter/filter_more.png" mode="" /> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/water_filter/filter_more.png" mode="" />
</view> </view>
</view> </view>
<view class="gray"></view> <view class="gray"></view>
<view class="row"> <view class="row">
<view class="row_tit"> <view class="row_tit">
<image src="https://static.hshuishang.com/doorToDoor/reser_icon3.png" mode="" /> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/reser_icon3.png" mode="" />
联系人姓名 联系人姓名
</view> </view>
@ -44,7 +44,7 @@
</view> </view>
<view class="row"> <view class="row">
<view class="row_tit"> <view class="row_tit">
<image src="https://static.hshuishang.com/doorToDoor/reser_icon4.png" mode="" /> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/reser_icon4.png" mode="" />
联系人电话 联系人电话
</view> </view>
@ -62,18 +62,18 @@
</view> </view>
<view class="row"> <view class="row">
<view class="row_tit"> <view class="row_tit">
<image src="https://static.hshuishang.com/doorToDoor/reser_icon5.png" mode="" /> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/reser_icon5.png" mode="" />
请选择服务地址 请选择服务地址
</view> </view>
<view class="row_con" @click="changeArea"> <view class="row_con" @click="changeArea">
{{citys}} {{citys}}
<image src="https://static.hshuishang.com/water_filter/filter_more.png" mode="" /> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/water_filter/filter_more.png" mode="" />
</view> </view>
</view> </view>
<view class="row none"> <view class="row none">
<view class="row_tit"> <view class="row_tit">
<image src="https://static.hshuishang.com/doorToDoor/reser_icon5.png" mode="" /> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/reser_icon5.png" mode="" />
详细地址 详细地址
</view> </view>
@ -103,7 +103,7 @@
<view class="gray"></view> <view class="gray"></view>
<view class="row none"> <view class="row none">
<view class="row_tit2"> <view class="row_tit2">
<image src="https://static.hshuishang.com/doorToDoor/reser_icon6.png" mode="" /> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/reser_icon6.png" mode="" />
<input <input
type="text" type="text"
placeholder="给商家捎句话" placeholder="给商家捎句话"

View File

@ -19,7 +19,7 @@
<view class="item_left_msg_tit"> <view class="item_left_msg_tit">
{{item.title}} {{item.title}}
<view class="phone" @click="call"> <view class="phone" @click="call">
<image src="https://static.hshuishang.com/doorToDoor/phone.png" mode="widthFix" /> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/doorToDoor/phone.png" mode="widthFix" />
</view> </view>
</view> </view>
<view class="item_left_msg_time">服务时间:{{item.biz_time}}</view> <view class="item_left_msg_time">服务时间:{{item.biz_time}}</view>

View File

@ -8,22 +8,22 @@
<view class="msg"> <view class="msg">
<view class="msg_left"> <view class="msg_left">
<view class="msg_left_1"> <view class="msg_left_1">
<image src="https://static.hshuishang.com/kitchen/kitchen_time.png" mode="" /> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/kitchen/kitchen_time.png" mode="" />
{{info.opening_time}}-{{info.closing_time}} {{info.opening_time}}-{{info.closing_time}}
<view>{{info.is_open === 1 ? '营业' :'停业'}}</view> <view>{{info.is_open === 1 ? '营业' :'停业'}}</view>
</view> </view>
<view class="msg_left_2"> <view class="msg_left_2">
<image src="https://static.hshuishang.com/kitchen/kitchen_add.png" mode="" /> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/kitchen/kitchen_add.png" mode="" />
{{info.addr}} {{info.addr}}
</view> </view>
</view> </view>
<view class="msg_right"> <view class="msg_right">
<view class="msg_right1" @click="call"> <view class="msg_right1" @click="call">
<image src="https://static.hshuishang.com/kitchen/kitchen_phone.png" mode="" /> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/kitchen/kitchen_phone.png" mode="" />
电话 电话
</view> </view>
<view class="msg_right2" @click="handleOptionClick"> <view class="msg_right2" @click="handleOptionClick">
<image src="https://static.hshuishang.com/kitchen/kitchen_add.png" mode="" /> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/kitchen/kitchen_add.png" mode="" />
导航 导航
</view> </view>
</view> </view>

View File

@ -1,279 +0,0 @@
/* addMer/index.css */
page {
padding-bottom: 0rpx;
}
.establish-acceptor-container {
padding: 0 30rpx;
min-height: 100vh;
}
.acceptor-form {
background-color: #fff;
border-radius: 12rpx;
padding: 30rpx;
}
.form-section {
margin-bottom: 40rpx;
}
.section-title {
font-size: 32rpx;
font-weight: 500;
color: #333;
margin-bottom: 24rpx;
padding-bottom: 12rpx;
border-bottom: 1px solid #eee;
}
.form-item {
margin-bottom: 32rpx;
position: relative;
}
.form-label {
display: block;
font-size: 28rpx;
color: #666;
margin-bottom: 12rpx;
}
.form-label.required::after {
content: '*';
color: #e64340;
margin-left: 4rpx;
}
.form-input {
width: 100%;
height: 88rpx;
padding: 0 24rpx;
font-size: 28rpx;
border: 1px solid #ddd;
border-radius: 8rpx;
box-sizing: border-box;
background-color: #fff;
}
.form-input:focus {
border-color: #007aff;
outline: none;
}
.form-input::placeholder {
color: #999;
}
/* 弹窗样式 */
.popup {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
display: flex;
justify-content: center;
align-items: center;
z-index: 999;
}
.popup-content {
width: 80%;
max-height: 70vh;
background-color: #fff;
border-radius: 10rpx;
overflow: hidden;
display: flex;
flex-direction: column;
}
.popup-title {
padding: 30rpx;
text-align: center;
font-size: 36rpx;
font-weight: bold;
border-bottom: 1rpx solid #eee;
}
.popup-list {
flex: 1;
overflow-y: auto;
max-height: 50vh;
}
.popup-item {
padding: 30rpx;
text-align: center;
border-bottom: 1rpx solid #eee;
font-size: 32rpx;
}
.popup-item:active {
background-color: #f5f5f5;
}
.popup-footer {
padding: 20rpx;
border-top: 1rpx solid #eee;
}
.popup-cancel-btn {
width: 100%;
padding: 0 20rpx;
background-color: #fff;
border: 1rpx solid #ddd;
border-radius: 8rpx;
font-size: 32rpx;
background-color: #007aff;
color: #ffffff;
}
/* 弹窗选择器样式 */
.popup-select {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 24rpx;
border: 1px solid #ddd;
border-radius: 8rpx;
background-color: #fff;
height: 88rpx;
font-size: 28rpx;
}
/* 附件上传样式 */
.attachment-section {
margin-top: 20rpx;
}
.attachment-item {
background-color: #f9f9f9;
border: 1px solid #eee;
border-radius: 8rpx;
padding: 24rpx;
margin-bottom: 24rpx;
}
.upload-btn {
width: 100%;
height: 80rpx;
background-color: #007aff;
color: #fff;
font-size: 28rpx;
border: none;
border-radius: 8rpx;
margin-top: 16rpx;
cursor: pointer;
}
.upload-btn:active {
background-color: #0051d5;
}
.file-info {
margin-top: 16rpx;
padding: 16rpx;
background-color: #e8f4ff;
border-radius: 8rpx;
font-size: 26rpx;
color: #007aff;
display: flex;
justify-content: space-between;
align-items: center;
}
.delete-btn {
padding: 0rpx 20rpx;
background-color: #e64340;
color: #fff;
border: none;
border-radius: 10rpx;
font-size: 24rpx;
cursor: pointer;
margin-right: 0rpx;
}
.delete-btn:active {
background-color: #c21f1c;
}
.add-attachment-btn {
width: 100%;
height: 80rpx;
background-color: #f0f0f0;
color: #666;
font-size: 28rpx;
border-radius: 8rpx;
margin-top: 16rpx;
cursor: pointer;
}
.add-attachment-btn:active {
background-color: #e0e0e0;
}
/* 提交按钮样式 */
.submit-section {
margin-top: 40rpx;
margin-bottom: 20rpx;
display: flex;
}
.submit-btn,
.submit-btn1 {
width: 100%;
height: 80rpx;
color: #fff;
font-size: 28rpx;
border-radius: 8rpx;
margin-top: 16rpx;
cursor: pointer;
box-shadow: 0 4rpx 12rpx rgba(0, 122, 255, 0.3);
}
.submit-btn {
background-color: #007aff;
margin-left: 5rpx;
}
.submit-btn1 {
background-color: #ff4016;
margin-right: 5rpx;
}
.submit-btn:active {
background-color: #0051d5;
transform: scale(0.98);
}
.submit-btn:disabled {
background-color: #b8d5ff;
cursor: not-allowed;
}
/* 输入框错误状态 */
.form-input.error {
border-color: #e64340;
}
/* 滚动条样式 */
::-webkit-scrollbar {
width: 8rpx;
height: 8rpx;
}
::-webkit-scrollbar-track {
background: #f1f1f1;
border-radius: 4rpx;
}
::-webkit-scrollbar-thumb {
background: #c1c1c1;
border-radius: 4rpx;
}
::-webkit-scrollbar-thumb:hover {
background: #a8a8a8;
}

View File

@ -1,789 +0,0 @@
<template>
<view class="establish-acceptor-container">
<form class="acceptor-form" @submit.prevent="submitForm">
<!-- 基本信息 -->
<view class="form-section">
<!-- <view class="form-item">
<label class="form-label required">商户ID</label>
<input type="number" class="form-input" v-model.number="formData.mch_id" placeholder="请输入商户ID"
required>
</view> -->
<view class="form-item">
<label class="form-label required">商户注册名称</label>
<input type="text" class="form-input" v-model="formData.merRegName"
placeholder="请输入商户注册名称,长度不小于4个汉字,8~40字符" required>
</view>
<view class="form-item">
<label class="form-label required">商户地区代码</label>
<input type="text" class="form-input" v-model="formData.merRegDistCode"
placeholder="请输入商户地区代码" required>
</view>
<view class="form-item">
<label class="form-label required">商户详细地址</label>
<input type="text" class="form-input" v-model="formData.merRegAddr"
placeholder="请输入去除省、市、区后的详细地址" required>
</view>
<view class="form-item">
<label class="form-label required">商户MCC编号</label>
<input type="text" class="form-input" v-model="formData.mccCode"
placeholder="请输入商户MCC编号" required>
</view>
<view class="form-item">
<label class="form-label">营业执照名称</label>
<input type="text" class="form-input" v-model="formData.merBlisName"
placeholder="请输入营业执照名称,小微商户可不传">
</view>
<view class="form-item">
<label class="form-label">营业执照号</label>
<input type="text" class="form-input" v-model="formData.merBlis" placeholder="请输入营业执照号,小微商户可不传">
</view>
<view class="form-item">
<label class="form-label">营业执照开始日期</label>
<input type="date" class="form-input" v-model="formData.merBlisStDt" placeholder="请选择营业执照开始日期">
</view>
<view class="form-item">
<label class="form-label">营业执照有效期</label>
<input type="date" class="form-input" v-model="formData.merBlisExpDt" placeholder="请选择营业执照有效期">
</view>
<view class="form-item">
<label class="form-label required">商户经营内容</label>
<input type="text" class="form-input" v-model="formData.merBusiContent"
placeholder="请输入商户经营内容" required>
</view>
</view>
<!-- 法人信息 -->
<view class="form-section">
<view class="form-item">
<label class="form-label required">商户法人姓名</label>
<input type="text" class="form-input" v-model="formData.larName" placeholder="请输入商户法人姓名" required>
</view>
<view class="form-item">
<label class="form-label required">法人证件类型</label>
<view class="popup-select" @click="showIdTypePopup = true">
<span>{{ selectedIdTypeLabel || '请选择法人证件类型' }}</span>
</view>
</view>
<view class="form-item">
<label class="form-label required">法人身份证号码</label>
<input type="text" class="form-input" v-model="formData.larIdcard" placeholder="请输入法人身份证号码"
required>
</view>
<view class="form-item">
<label class="form-label required">法人身份证开始日期</label>
<input type="date" class="form-input" v-model="formData.larIdcardStDt" placeholder="请选择法人身份证开始日期"
required>
</view>
<view class="form-item">
<label class="form-label required">法人身份证有效期</label>
<input type="date" class="form-input" v-model="formData.larIdcardExpDt" placeholder="请选择法人身份证有效期"
required>
</view>
</view>
<!-- 联系人信息 -->
<view class="form-section">
<view class="form-item">
<label class="form-label required">商户联系人姓名</label>
<input type="text" class="form-input" v-model="formData.merContactName" placeholder="请输入商户联系人姓名"
required>
</view>
<view class="form-item">
<label class="form-label required">商户联系人手机号码</label>
<input type="number" class="form-input" v-model="formData.merContactMobile"
placeholder="请输入商户联系人手机号码" required>
</view>
</view>
<!-- 结算账户信息 -->
<view class="form-section">
<view class="form-item">
<label class="form-label required">结算账户开户行号</label>
<input type="text" class="form-input" v-model="formData.openningBankCode" placeholder="请输入结算账户开户行号"
required>
</view>
<view class="form-item">
<label class="form-label required">结算账户开户行名称</label>
<input type="text" class="form-input" v-model="formData.openningBankName" placeholder="请输入结算账户开户行名称"
required>
</view>
<view class="form-item">
<label class="form-label required">结算账户清算行号</label>
<input type="text" class="form-input" v-model="formData.clearingBankCode" placeholder="请输入结算账户清算行号"
required>
</view>
<view class="form-item">
<label class="form-label required">结算账户账号</label>
<input type="text" class="form-input" v-model="formData.acctNo" placeholder="请输入结算账户账号" required>
</view>
<view class="form-item">
<label class="form-label required">结算账户名称</label>
<input type="text" class="form-input" v-model="formData.acctName" placeholder="请输入结算账户名称" required>
</view>
<view class="form-item">
<label class="form-label required">结算账户性质</label>
<view class="popup-select" @click="showAcctTypePopup = true">
<span>{{ selectedAcctTypeLabel || '请选择结算账户性质' }}</span>
</view>
</view>
<!-- 费率信息 -->
<view class="form-item">
<label class="form-label required">费率类型</label>
<input type="text" class="form-input" v-model="formData.feeData[0].feeRateTypeCode" placeholder="请输入费率类型" required>
</view>
<view class="form-item">
<label class="form-label required">费率类型名称</label>
<input type="text" class="form-input" v-model="formData.feeData[0].feeRateTypeName" placeholder="请输入费率类型名称" required>
</view>
<view class="form-item">
<label class="form-label required">手续费率(%)</label>
<input type="number" class="form-input" v-model="formData.feeData[0].feeRatePct" placeholder="请输入手续费率" step="0.01" required>
</view>
</view>
<!-- 附件上传 -->
<view class="form-section">
<h3 class="section-title">附件上传(可选)</h3>
<view class="attachment-section">
<view class="attachment-item" v-for="(file, index) in formData.fileData" :key="index">
<view class="form-item">
<label class="form-label">附件类型</label>
<view class="popup-select" @click="showFileAttachTypePopup = index">
<span>{{ getAttachTypeLabel(file.attType) || '请选择附件类型' }}</span>
</view>
</view>
<button class="upload-btn" @click="uploadFile(index)">上传文件</button>
<view v-if="file.attFileId" class="file-info">
<span>{{ file.attachName || '已上传文件' }}</span>
<button class="delete-btn" @click="removeFile(index)">删除</button>
</view>
</view>
<button class="add-attachment-btn" @click="addFile">添加附件</button>
</view>
</view>
<!-- 提交按钮 -->
<view class="form-section submit-section">
<button type="button" class="submit-btn1" @click="ecQuery">结果查询</button>
<button type="submit" class="submit-btn" @click="submitForm">提交申请</button>
</view>
</form>
<!-- 地区代码弹窗 -->
<view class="popup" v-if="showAreaPopup">
<view class="popup-content">
<view class="popup-title">选择商户地区代码</view>
<view class="popup-list">
<view class="popup-item" v-for="area in areaOptions" :key="area.value" @click="selectArea(area)">
{{ area.label }}
</view>
</view>
<view class="popup-footer">
<button class="popup-cancel-btn" @click="showAreaPopup = false">取消</button>
</view>
</view>
</view>
<!-- MCC编号弹窗 -->
<view class="popup" v-if="showMccPopup">
<view class="popup-content">
<view class="popup-title">选择商户MCC编号</view>
<view class="popup-list">
<view class="popup-item" v-for="mcc in mccOptions" :key="mcc.value" @click="selectMcc(mcc)">
{{ mcc.label }}
</view>
</view>
<view class="popup-footer">
<button class="popup-cancel-btn" @click="showMccPopup = false">取消</button>
</view>
</view>
</view>
<!-- 经营内容弹窗 -->
<view class="popup" v-if="showBusiContentPopup">
<view class="popup-content">
<view class="popup-title">选择商户经营内容</view>
<view class="popup-list">
<view class="popup-item" v-for="content in busiContentOptions" :key="content.value"
@click="selectBusiContent(content)">
{{ content.label }}
</view>
</view>
<view class="popup-footer">
<button class="popup-cancel-btn" @click="showBusiContentPopup = false">取消</button>
</view>
</view>
</view>
<!-- 法人证件类型弹窗 -->
<view class="popup" v-if="showIdTypePopup">
<view class="popup-content">
<view class="popup-title">选择法人证件类型</view>
<view class="popup-list">
<view class="popup-item" v-for="type in idTypeOptions" :key="type.value"
@click="selectIdType(type)">
{{ type.label }}
</view>
</view>
<view class="popup-footer">
<button class="popup-cancel-btn" @click="showIdTypePopup = false">取消</button>
</view>
</view>
</view>
<!-- 结算账户性质弹窗 -->
<view class="popup" v-if="showAcctTypePopup">
<view class="popup-content">
<view class="popup-title">选择结算账户性质</view>
<view class="popup-list">
<view class="popup-item" v-for="type in acctTypeOptions" :key="type.value"
@click="selectAcctType(type)">
{{ type.label }}
</view>
</view>
<view class="popup-footer">
<button class="popup-cancel-btn" @click="showAcctTypePopup = false">取消</button>
</view>
</view>
</view>
<!-- 文件附件类型弹窗 -->
<view class="popup" v-if="showFileAttachTypePopup >= 0">
<view class="popup-content">
<view class="popup-title">选择附件类型</view>
<view class="popup-list">
<view class="popup-item" v-for="type in fileAttachTypeOptions" :key="type.value"
@click="selectFileAttachType(showFileAttachTypePopup, type)">
{{ type.label }}
</view>
</view>
<view class="popup-footer">
<button class="popup-cancel-btn" @click="showFileAttachTypePopup = -1">取消</button>
</view>
</view>
</view>
</view>
</template>
<script>
import { picUrl, menuButtonInfo, request, NavgateTo, RequsetUrl } from "../../../utils";
import { apiArr } from "../../../api/contract";
export default {
data() {
return {
// 表单数据
formData: {
mch_id: uni.getStorageSync('mchId'), // 商户ID
merRegName: '', // 商户注册名称
merRegDistCode: '', // 商户地区代码
merRegAddr: '', // 商户详细地址
mccCode: '', // 商户MCC编号
merBlisName: '', // 营业执照名称
merBlis: '', // 营业执照号
merBlisStDt: '', // 营业执照开始日期
merBlisExpDt: '', // 营业执照有效期
merBusiContent: '', // 商户经营内容
larName: '', // 商户法人姓名
larIdType: '', // 法人证件类型
larIdcard: '', // 法人身份证号码
larIdcardStDt: '', // 法人身份证开始日期
larIdcardExpDt: '', // 法人身份证有效期
merContactMobile: '', // 商户联系人手机号码
merContactName: '', // 商户联系人姓名
openningBankCode: '', // 结算账户开户行号
openningBankName: '', // 结算账户开户行名称
clearingBankCode: '', // 结算账户清算行号
acctNo: '', // 结算账户账号
acctName: '', // 结算账户名称
acctTypeCode: '', // 结算账户性质
feeData: [
{
feeRateTypeCode: "",
feeRateTypeName: "",
feeRatePct: ""
}
], // 费率数据
fileData: [
{
attType: '',
attFileId: '',
attachName: ''
}
] // 文件数据(可选)
},
// 弹窗控制
showAreaPopup: false,
showMccPopup: false,
showBusiContentPopup: false,
showIdTypePopup: false,
showAcctTypePopup: false,
showFileAttachTypePopup: -1,
// 选择项标签
selectedAreaLabel: '',
selectedMccLabel: '',
selectedBusiContentLabel: '',
selectedIdTypeLabel: '',
selectedAcctTypeLabel: '',
// 选项数据(示例数据,实际应从API获取)
areaOptions: [
{ value: '110101', label: '北京市东城区' },
{ value: '110102', label: '北京市西城区' },
{ value: '310101', label: '上海市黄浦区' },
{ value: '310102', label: '上海市黄浦区' }
],
mccOptions: [
{ value: '5411', label: '大型超市' },
{ value: '5999', label: '其他零售商户' },
{ value: '7011', label: '住宿服务' },
{ value: '7221', label: '美容美发服务' }
],
busiContentOptions: [
{ value: 'GROCERY', label: '食品饮料' },
{ value: 'CLOTHING', label: '服装鞋帽' },
{ value: 'SERVICE', label: '生活服务' },
{ value: 'ENTERTAINMENT', label: '娱乐休闲' }
],
idTypeOptions: [
{ value: '01', label: '身份证' },
{ value: '02', label: '护照' },
{ value: '03', label: '港澳通行证' },
{ value: '04', label: '台胞证' },
{ value: '10', label: '外国人永久居留身份证' },
{ value: '11', label: '港澳居民居住证' },
{ value: '12', label: '台湾居民居住证' },
{ value: '13', label: '执行事务合伙人' },
{ value: '99', label: '其它证件' },
],
acctTypeOptions: [
{ value: '57', label: '对公' },
{ value: '58', label: '对私' }
],
fileAttachTypeOptions: [
{ value: 'FR_ID_CARD_FRONT', label: '法人身份证正面' },
{ value: 'FR_ID_CARD_BEHIND', label: '法人身份证反面' },
{ value: 'ID_CARD_FRONT', label: '结算人身份证正面' },
{ value: 'ID_CARD_BEHIND', label: '结算人身份证反面' },
{ value: 'BANK_CARD', label: '银行卡' },
{ value: 'BUSINESS_LICENCE', label: '营业执照' },
{ value: 'MERCHANT_PHOTO', label: '商户门头照' },
{ value: 'SHOPINNER', label: '商铺内部照片' },
{ value: 'XY', label: '线下纸质协议' },
{ value: 'NETWORK_XY', label: '电子协议' },
{ value: 'HT', label: '租赁合同' },
{ value: 'COOPERATION_QUALIFICATION_PROOF', label: '合作资质证明' },
{ value: 'FOOD_QUALIFICATION_PROOF', label: '食品经营相关资质' },
{ value: 'NO_LEGAL_PERSON_SETT_AUTH_LETTER', label: '非法人结算授权书' },
{ value: 'SPLIT_ENTRUST_FILE', label: '结算授权委托书' },
{ value: 'RENTAL_AGREEMENT', label: '集市方与场地方间的租赁协议' },
{ value: 'SPLIT_COOPERATION_FILE', label: '集市方与摊主间的合作协议' },
{ value: 'OTHERS', label: '其他' }
]
};
},
methods: {
// 添加附件
addFile() {
this.formData.fileData.push({
attType: '',
attFileId: '',
attachName: ''
});
},
// 选择商户地区代码
selectArea(area) {
this.formData.merRegDistCode = area.value;
this.selectedAreaLabel = area.label;
this.showAreaPopup = false;
},
// 选择商户MCC编号
selectMcc(mcc) {
this.formData.mccCode = mcc.value;
this.selectedMccLabel = mcc.label;
this.showMccPopup = false;
},
// 选择商户经营内容
selectBusiContent(content) {
this.formData.merBusiContent = content.value;
this.selectedBusiContentLabel = content.label;
this.showBusiContentPopup = false;
},
// 选择法人证件类型
selectIdType(type) {
this.formData.larIdType = type.value;
this.selectedIdTypeLabel = type.label;
this.showIdTypePopup = false;
},
// 选择结算账户性质
selectAcctType(type) {
this.formData.acctTypeCode = type.value;
this.selectedAcctTypeLabel = type.label;
this.showAcctTypePopup = false;
},
// 选择文件附件类型
selectFileAttachType(index, type) {
this.formData.fileData[index].attType = type.value;
this.showFileAttachTypePopup = -1;
},
// 获取附件类型标签
getAttachTypeLabel(typeValue) {
if (!typeValue) return '';
const option = this.fileAttachTypeOptions.find(type => type.value === typeValue);
return option ? option.label : '';
},
// 删除附件
removeFile(index) {
this.formData.fileData.splice(index, 1);
},
// 上传文件
uploadFile(index) {
const fileData = this.formData.fileData[index];
// 检查是否选择了附件类型
if (!fileData.attType) {
uni.showToast({
title: '请先选择附件类型',
icon: 'none'
});
return;
}
// 调用 uni.chooseMessageFile API 选择文件
uni.chooseMessageFile({
count: 1,
type: 'file',
extension: ['pdf', 'doc', 'docx', 'jpg', 'jpeg', 'png'], // 支持的文件类型
success: (res) => {
const tempFile = res.tempFiles[0];
console.log("选择的文件:", tempFile);
// 设置文件名
fileData.attachName = tempFile.name;
// 显示上传中提示
uni.showLoading({
title: '上传中',
mask: true
});
// 直接使用uni.uploadFile上传文件
uni.uploadFile({
url: RequsetUrl + apiArr.upload, // 完整的上传接口URL
filePath: tempFile.path, // 文件路径
name: 'file', // 文件对应的key,根据后端要求设置
formData: {
attType: fileData.attType // 附件类型
},
header: {
Authorization: uni.getStorageSync("ctoken") // 添加认证信息
},
success: (uploadRes) => {
// 解析响应数据
const res = JSON.parse(uploadRes.data);
// 更新附件信息
fileData.attFileId = res.data.respData.attFileId;
uni.showToast({
title: '上传成功',
icon: 'success'
});
},
fail: (error) => {
console.error('文件上传失败:', error);
uni.showToast({
title: '上传失败',
icon: 'none'
});
},
complete: () => {
uni.hideLoading(); // 隐藏加载提示
}
});
},
fail: (err) => {
console.error('选择文件失败:', err);
uni.showToast({
title: '选择文件失败',
icon: 'none'
});
}
});
},
// 表单验证
validateForm() {
const { formData } = this;
// 验证必需字段
if (!formData.mch_id) {
uni.showToast({ title: '请输入商户ID', icon: 'none' });
return false;
}
if (!formData.merRegName) {
uni.showToast({ title: '请输入商户注册名称', icon: 'none' });
return false;
} else if (formData.merRegName.length < 8 || formData.merRegName.length > 40) {
uni.showToast({ title: '商户注册名称长度必须在8~40字符之间', icon: 'none' });
return false;
}
if (!formData.merRegDistCode) {
uni.showToast({ title: '请选择商户地区代码', icon: 'none' });
return false;
}
if (!formData.merRegAddr) {
uni.showToast({ title: '请输入商户详细地址', icon: 'none' });
return false;
} else if (formData.merRegAddr.length < 6 || formData.merRegAddr.length > 200) {
uni.showToast({ title: '商户详细地址长度必须在6~200字符之间', icon: 'none' });
return false;
}
if (!formData.mccCode) {
uni.showToast({ title: '请选择商户MCC编号', icon: 'none' });
return false;
}
if (!formData.merBusiContent) {
uni.showToast({ title: '请选择商户经营内容', icon: 'none' });
return false;
}
if (!formData.larName) {
uni.showToast({ title: '请输入商户法人姓名', icon: 'none' });
return false;
}
if (!formData.larIdType) {
uni.showToast({ title: '请选择法人证件类型', icon: 'none' });
return false;
}
if (!formData.larIdcard) {
uni.showToast({ title: '请输入法人身份证号码', icon: 'none' });
return false;
}
if (!formData.larIdcardStDt) {
uni.showToast({ title: '请选择法人身份证开始日期', icon: 'none' });
return false;
}
if (!formData.larIdcardExpDt) {
uni.showToast({ title: '请选择法人身份证有效期', icon: 'none' });
return false;
}
if (!formData.merContactMobile) {
uni.showToast({ title: '请输入商户联系人手机号码', icon: 'none' });
return false;
}
if (!formData.merContactName) {
uni.showToast({ title: '请输入商户联系人姓名', icon: 'none' });
return false;
}
if (!formData.openningBankCode) {
uni.showToast({ title: '请输入结算账户开户行号', icon: 'none' });
return false;
}
if (!formData.openningBankName) {
uni.showToast({ title: '请输入结算账户开户行名称', icon: 'none' });
return false;
}
if (!formData.clearingBankCode) {
uni.showToast({ title: '请输入结算账户清算行号', icon: 'none' });
return false;
}
if (!formData.acctNo) {
uni.showToast({ title: '请输入结算账户账号', icon: 'none' });
return false;
}
if (!formData.acctName) {
uni.showToast({ title: '请输入结算账户名称', icon: 'none' });
return false;
}
if (!formData.acctTypeCode) {
uni.showToast({ title: '请选择结算账户性质', icon: 'none' });
return false;
}
// 校验费率信息
if (!formData.feeData[0].feeRateTypeCode) {
uni.showToast({ title: '请输入费率类型', icon: 'none' });
return false;
}
if (!formData.feeData[0].feeRateTypeName) {
uni.showToast({ title: '请输入费率类型名称', icon: 'none' });
return false;
}
if (!formData.feeData[0].feeRatePct) {
uni.showToast({ title: '请输入手续费率', icon: 'none' });
return false;
}
return true;
},
ecQuery() {
const storeValue = uni.getStorageSync('storeValue');
if (!storeValue || !storeValue.contractId) {
uni.showToast({
title: '请先提交申请',
icon: 'none'
});
return;
}
const params = {
contractId: storeValue.contractId
}
request(apiArr.queryMerchant, "POST", params).then(res => {
if (res.respData.contractStatus === 'REVIEW_ING') {
uni.showToast({
title: '审核通过',
icon: 'success'
});
uni.setStorageSync('storeValue', { merInnerNo: res.respData.merInnerNo });
uni.setStorageSync('storeValue', { merCupNo: res.respData.merCupNo });
} else if (res.respData.contractStatus === 'WAIT_FOR_CONTACT') {
uni.showToast({
title: '审核驳回',
icon: 'none'
});
} else if (res.respData.contractStatus === 'MANUAL_AUDIT') {
uni.showToast({
title: '审核中',
icon: 'none'
});
}
})
},
// 表单提交逻辑
submitForm() {
// 验证表单
if (!this.validateForm()) {
return;
}
uni.showLoading({
title: '提交中...',
mask: true
});
// 准备请求参数
const submitData = {
mch_id: this.formData.mch_id,
merRegName: this.formData.merRegName,
merRegDistCode: this.formData.merRegDistCode,
merRegAddr: this.formData.merRegAddr,
mccCode: this.formData.mccCode,
merBlisName: this.formData.merBlisName,
merBlis: this.formData.merBlis,
merBlisStDt: this.formData.merBlisStDt,
merBlisExpDt: this.formData.merBlisExpDt,
merBusiContent: this.formData.merBusiContent,
larName: this.formData.larName,
larIdType: this.formData.larIdType,
larIdcard: this.formData.larIdcard,
larIdcardStDt: this.formData.larIdcardStDt,
larIdcardExpDt: this.formData.larIdcardExpDt,
merContactMobile: this.formData.merContactMobile,
merContactName: this.formData.merContactName,
openningBankCode: this.formData.openningBankCode,
openningBankName: this.formData.openningBankName,
clearingBankCode: this.formData.clearingBankCode,
acctNo: this.formData.acctNo,
acctName: this.formData.acctName,
acctTypeCode: this.formData.acctTypeCode,
feeData: this.formData.feeData,
fileData: []
};
// 只添加有attFileId的文件到fileData
const validFiles = this.formData.fileData.filter(file => file.attFileId);
if (validFiles.length > 0) {
submitData.fileData = validFiles.map(file => ({
attType: file.attType,
attFileId: file.attFileId,
attachName: file.attachName
}));
}
console.log('提交的数据:', submitData);
// 调用addMer接口提交数据
request(apiArr.addMer, "POST", submitData).then(res => {
uni.hideLoading();
uni.showToast({
title: '提交成功',
icon: 'success'
});
uni.setStorageSync('storeValue', { contractId: res.respData.contractId });
}).catch(error => {
uni.hideLoading();
console.error('提交失败:', error);
uni.showToast({
title: '提交失败',
icon: 'none'
});
});
}
}
}
</script>
<style>
@import url("./index.css");
</style>

View File

@ -1,283 +0,0 @@
/* 分账接收方创建页面样式 */
.establish-acceptor-container {
padding: 0 30rpx;
min-height: 100vh;
}
page{
padding-bottom: 0rpx;
}
/* 弹窗样式 */
.popup {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
display: flex;
justify-content: center;
align-items: center;
z-index: 999;
}
.popup-content {
width: 80%;
max-height: 70vh;
background-color: #fff;
border-radius: 10rpx;
overflow: hidden;
display: flex;
flex-direction: column;
}
.popup-title {
padding: 30rpx;
text-align: center;
font-size: 36rpx;
font-weight: bold;
border-bottom: 1rpx solid #eee;
}
.popup-list {
flex: 1;
overflow-y: auto;
max-height: 50vh;
}
.popup-item {
padding: 30rpx;
text-align: center;
border-bottom: 1rpx solid #eee;
font-size: 32rpx;
}
.popup-item:active {
background-color: #f5f5f5;
}
.popup-footer {
padding: 20rpx;
border-top: 1rpx solid #eee;
}
.popup-cancel-btn {
width: 100%;
padding: 0 20rpx;
background-color: #fff;
border: 1rpx solid #ddd;
border-radius: 8rpx;
font-size: 32rpx;
background-color: #007aff;
color: #ffffff;
}
/* 弹窗选择器样式 */
.popup-select {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 20rpx;
border: 1rpx solid #ddd;
border-radius: 6rpx;
background-color: #fff;
min-height: 80rpx;
}
.page-title {
font-size: 36rpx;
font-weight: 600;
color: #333;
text-align: center;
margin: 30rpx 0 40rpx;
}
.acceptor-form {
background-color: #fff;
border-radius: 12rpx;
padding: 30rpx;
}
.form-section {
margin-bottom: 40rpx;
}
.section-title {
font-size: 32rpx;
font-weight: 500;
color: #333;
margin-bottom: 24rpx;
padding-bottom: 12rpx;
border-bottom: 1px solid #eee;
}
.form-item {
margin-bottom: 32rpx;
position: relative;
}
.form-label {
display: block;
font-size: 28rpx;
color: #666;
margin-bottom: 12rpx;
}
.form-label.required::after {
content: '*';
color: #e64340;
margin-left: 4rpx;
}
.form-input {
width: 100%;
height: 88rpx;
padding: 0 24rpx;
font-size: 28rpx;
border: 1px solid #ddd;
border-radius: 8rpx;
box-sizing: border-box;
background-color: #fff;
}
.form-input:focus {
border-color: #007aff;
outline: none;
}
.form-input::placeholder {
color: #999;
}
/* 附件上传样式 */
.attachment-section {
margin-top: 20rpx;
}
.attachment-item {
background-color: #f9f9f9;
border: 1px solid #eee;
border-radius: 8rpx;
padding: 24rpx;
margin-bottom: 24rpx;
}
.upload-btn {
width: 100%;
height: 80rpx;
background-color: #007aff;
color: #fff;
font-size: 28rpx;
border: none;
border-radius: 8rpx;
margin-top: 16rpx;
cursor: pointer;
}
.upload-btn:active {
background-color: #0051d5;
}
.file-info {
margin-top: 16rpx;
padding: 16rpx;
background-color: #e8f4ff;
border-radius: 8rpx;
font-size: 26rpx;
color: #007aff;
display: flex;
justify-content: space-between;
align-items: center;
}
.delete-btn {
padding: 0rpx 20rpx;
background-color: #e64340;
color: #fff;
border: none;
border-radius: 10rpx;
font-size: 24rpx;
cursor: pointer;
margin-right: 0rpx;
}
.delete-btn:active {
background-color: #c21f1c;
}
.add-attachment-btn {
width: 100%;
height: 80rpx;
background-color: #f0f0f0;
color: #666;
font-size: 28rpx;
border-radius: 8rpx;
margin-top: 16rpx;
cursor: pointer;
}
.add-attachment-btn:active {
background-color: #e0e0e0;
}
/* 提交按钮样式 */
.submit-section {
margin-top: 40rpx;
margin-bottom: 20rpx;
}
.submit-btn {
width: 100%;
height: 80rpx;
background-color: #007aff;
color: #fff;
font-size: 28rpx;
border-radius: 8rpx;
margin-top: 16rpx;
cursor: pointer;
box-shadow: 0 4rpx 12rpx rgba(0, 122, 255, 0.3);
}
.submit-btn:active {
background-color: #0051d5;
transform: scale(0.98);
}
.submit-btn:disabled {
background-color: #b8d5ff;
cursor: not-allowed;
}
/* 响应式调整 */
@media (min-width: 768px) {
.establish-acceptor-container {
max-width: 800rpx;
margin: 0 auto;
}
}
/* 输入框错误状态 */
.form-input.error {
border-color: #e64340;
}
/* 滚动条样式 */
::-webkit-scrollbar {
width: 8rpx;
height: 8rpx;
}
::-webkit-scrollbar-track {
background: #f1f1f1;
border-radius: 4rpx;
}
::-webkit-scrollbar-thumb {
background: #c1c1c1;
border-radius: 4rpx;
}
::-webkit-scrollbar-thumb:hover {
background: #a8a8a8;
}

View File

@ -1,417 +0,0 @@
<template>
<view class="establish-acceptor-container">
<form class="acceptor-form" @submit.prevent="submitForm">
<!-- 基本信息 -->
<view class="form-section">
<view class="form-item">
<label class="form-label">分账商户内部商户号</label>
<input type="text" class="form-input" v-model="formData.merInnerNo" placeholder="请输入分账商户内部商户号">
</view>
<view class="form-item">
<label class="form-label">分账商户银联商户号</label>
<input type="text" class="form-input" v-model="formData.merCupNo" placeholder="请输入分账商户银联商户号">
</view>
<view class="form-item">
<label class="form-label required">分账接收方编号</label>
<input type="text" class="form-input" v-model="formData.receiverNo" placeholder="请输入分账接收方编号"
required>
</view>
</view>
<!-- 合作协议附件 -->
<view class="form-section">
<view class="form-item">
<label class="form-label required">附件名称</label>
<input type="text" class="form-input" v-model="formData.entrustFileName" placeholder="请输入合作协议附件名称"
required>
</view>
<button class="upload-btn" @click="uploadEntrustFile">上传合作协议</button>
<view v-if="formData.entrustFilePath" class="file-info">
<span>{{ formData.entrustFileName || '已上传文件' }}</span>
<button class="delete-btn" @click="removeEntrustFile">删除</button>
</view>
</view>
<!-- 其他附件(可选) -->
<view class="form-section">
<h3 class="section-title">附件上传(可选)</h3>
<view class="attachment-section">
<view class="attachment-item" v-for="(attachment, index) in formData.attachments" :key="index">
<view class="form-item">
<label class="form-label">附件类型</label>
<view class="popup-select" @click="showAttachTypePopup = index">
<span>{{ getAttachTypeLabel(attachment.attachType) || '请选择附件类型' }}</span>
</view>
</view>
<view class="form-item">
<label class="form-label">附件名称</label>
<input type="text" class="form-input" v-model="attachment.attachName" placeholder="请输入附件名称">
</view>
<button class="upload-btn" @click="uploadFile(index)">上传文件</button>
<view v-if="attachment.attachStorePath" class="file-info">
<span>{{ attachment.attachName || '已上传文件' }}</span>
<button class="delete-btn" @click="removeAttachment(index)">删除</button>
</view>
</view>
<button class="add-attachment-btn" @click="addAttachment">添加附件</button>
</view>
</view>
<view class="form-section submit-section">
<button type="submit" class="submit-btn" @click="submitForm">申请绑定</button>
</view>
</form>
<!-- 附件类型弹窗 -->
<view class="popup" v-if="showAttachTypePopup >= 0">
<view class="popup-content">
<view class="popup-title">选择附件类型</view>
<view class="popup-list">
<view class="popup-item" v-for="type in attachTypeOptions" :key="type.value"
@click="selectAttachType(showAttachTypePopup, type)">
{{ type.label }}
</view>
</view>
<view class="popup-footer">
<button class="popup-cancel-btn" @click="showAttachTypePopup = -1">取消</button>
</view>
</view>
</view>
</view>
</template>
<script>
import { picUrl, menuButtonInfo, request, NavgateTo, RequsetUrl } from "../../../utils";
import { apiArr } from "../../../api/contract";
export default {
data() {
return {
// 弹窗控制
showAttachTypePopup: -1,
// 附件类型选项
attachTypeOptions: [
{ value: 'FR_ID_CARD_FRONT', label: '法人身份证正面' },
{ value: 'FR_ID_CARD_BEHIND', label: '法人身份证反面' },
{ value: 'ID_CARD_FRONT', label: '结算人身份证正面' },
{ value: 'ID_CARD_BEHIND', label: '结算人身份证反面' },
{ value: 'BANK_CARD', label: '银行卡' },
{ value: 'BUSINESS_LICENCE', label: '营业执照' },
{ value: 'MERCHANT_PHOTO', label: '商户门头照' },
{ value: 'SHOPINNER', label: '商铺内部照片' },
{ value: 'XY', label: '线下纸质协议' },
{ value: 'NETWORK_XY', label: '电子协议' },
{ value: 'HT', label: '租赁合同' },
{ value: 'COOPERATION_QUALIFICATION_PROOF', label: '合作资质证明' },
{ value: 'FOOD_QUALIFICATION_PROOF', label: '食品经营相关资质' },
{ value: 'NO_LEGAL_PERSON_SETT_AUTH_LETTER', label: '非法人结算授权书' },
{ value: 'SPLIT_ENTRUST_FILE', label: '结算授权委托书' },
{ value: 'RENTAL_AGREEMENT', label: '集市方与场地方间的租赁协议' },
{ value: 'SPLIT_COOPERATION_FILE', label: '集市方与摊主间的合作协议' },
{ value: 'OTHERS', label: '其他' }
],
// 表单数据
formData: {
// 可选字段
merInnerNo: '',
merCupNo: '',
// 必需字段
receiverNo: '',
entrustFileName: '',
entrustFilePath: '',
// 可选附件列表
attachments: [{
attachType: '',
attachName: '',
attachStorePath: ''
}]
}
};
},
methods: {
// 添加附件
addAttachment() {
this.formData.attachments.push({
attachType: '',
attachName: '',
attachStorePath: ''
});
},
// 选择附件类型
selectAttachType(index, type) {
this.formData.attachments[index].attachType = type.value;
this.showAttachTypePopup = -1;
},
// 获取附件类型标签
getAttachTypeLabel(typeValue) {
if (!typeValue) return '';
const option = this.attachTypeOptions.find(type => type.value === typeValue);
return option ? option.label : '';
},
// 删除附件
removeAttachment(index) {
this.formData.attachments.splice(index, 1);
},
// 上传合作协议文件
uploadEntrustFile() {
// 调用 uni.chooseMessageFile API 选择文件
uni.chooseMessageFile({
count: 1,
type: 'file',
extension: ['pdf', 'doc', 'docx', 'jpg', 'jpeg', 'png'], // 支持的文件类型
success: (res) => {
const tempFile = res.tempFiles[0];
console.log("选择的文件:", tempFile);
// 如果用户没有填写附件名称,使用选择的文件名
if (!this.formData.entrustFileName) {
this.formData.entrustFileName = tempFile.name;
}
// 显示上传中提示
uni.showLoading({
title: '上传中',
mask: true
});
// 直接使用uni.uploadFile上传文件
uni.uploadFile({
url: RequsetUrl + apiArr.upload, // 完整的上传接口URL
filePath: tempFile.path, // 文件路径
name: 'file', // 文件对应的key,根据后端要求设置
formData: {
attType: 'ENTRUST_FILE' // 合作协议附件类型
},
header: {
Authorization: uni.getStorageSync("ctoken") // 添加认证信息
},
success: (uploadRes) => {
// 解析响应数据
const res = JSON.parse(uploadRes.data);
// 更新附件信息
this.formData.entrustFilePath = res.data.respData.attFileId;
uni.showToast({
title: '上传成功',
icon: 'success'
});
},
fail: (error) => {
console.error('文件上传失败:', error);
uni.showToast({
title: '上传失败',
icon: 'none'
});
},
complete: () => {
uni.hideLoading(); // 隐藏加载提示
}
});
},
fail: (err) => {
console.error('选择文件失败:', err);
uni.showToast({
title: '选择文件失败',
icon: 'none'
});
}
});
},
// 删除合作协议文件
removeEntrustFile() {
this.formData.entrustFileName = '';
this.formData.entrustFilePath = '';
},
// 上传其他附件
uploadFile(index) {
const attachment = this.formData.attachments[index];
// 检查是否选择了附件类型
if (!attachment.attachType) {
uni.showToast({
title: '请先选择附件类型',
icon: 'none'
});
return;
}
// 调用 uni.chooseMessageFile API 选择文件
uni.chooseMessageFile({
count: 1,
type: 'file',
extension: ['pdf', 'doc', 'docx', 'jpg', 'jpeg', 'png'], // 支持的文件类型
success: (res) => {
const tempFile = res.tempFiles[0];
console.log("选择的文件:", tempFile);
// 如果用户没有填写附件名称,使用选择的文件名
if (!attachment.attachName) {
attachment.attachName = tempFile.name;
}
// 显示上传中提示
uni.showLoading({
title: '上传中',
mask: true
});
// 直接使用uni.uploadFile上传文件
uni.uploadFile({
url: RequsetUrl + apiArr.upload, // 完整的上传接口URL
filePath: tempFile.path, // 文件路径
name: 'file', // 文件对应的key,根据后端要求设置
formData: {
attType: attachment.attachType // 其他表单参数
},
header: {
Authorization: uni.getStorageSync("ctoken") // 添加认证信息
},
success: (uploadRes) => {
// 解析响应数据
const res = JSON.parse(uploadRes.data);
// 更新附件信息
attachment.attachStorePath = res.data.respData.attFileId;
uni.showToast({
title: '上传成功',
icon: 'success'
});
},
fail: (error) => {
console.error('文件上传失败:', error);
uni.showToast({
title: '上传失败',
icon: 'none'
});
},
complete: () => {
uni.hideLoading(); // 隐藏加载提示
}
});
},
fail: (err) => {
console.error('选择文件失败:', err);
uni.showToast({
title: '选择文件失败',
icon: 'none'
});
}
});
},
// 表单验证
validateForm() {
const { formData } = this;
// 验证必需字段
if (!formData.receiverNo) {
uni.showToast({ title: '请输入分账接收方编号', icon: 'none' });
return false;
}
if (!formData.entrustFileName) {
uni.showToast({ title: '请输入合作协议附件名称', icon: 'none' });
return false;
}
if (!formData.entrustFilePath) {
uni.showToast({ title: '请上传合作协议附件', icon: 'none' });
return false;
}
return true;
},
// 表单提交逻辑
submitForm() {
// 验证表单
if (!this.validateForm()) {
return;
}
uni.showLoading({
title: '提交中...',
mask: true
});
// 准备请求参数
const submitData = {
merInnerNo: this.formData.merInnerNo, // 分账商户内部商户号(可选)
merCupNo: this.formData.merCupNo, // 分账商户银联商户号(可选)
receiverNo: this.formData.receiverNo, // 分账接收方编号(必需)
entrustFileName: this.formData.entrustFileName, // 合作协议附件名称(必需)
entrustFilePath: this.formData.entrustFilePath, // 合作协议附件路径(必需)
attachments: [] // 分账关系绑定申请附件(可选)
};
// 只添加有attachStorePath的附件到attachments
const validAttachments = this.formData.attachments.filter(attach => attach.attachStorePath);
if (validAttachments.length > 0) {
submitData.attachments = validAttachments.map(attach => ({
attachType: attach.attachType,
attachName: attach.attachName,
attachStorePath: attach.attachStorePath
}));
}
console.log('提交的数据:', submitData);
// 调用applyBind接口提交数据
request(apiArr.applyBind, "POST", submitData).then(res => {
uni.hideLoading();
if (res && res.cmdRetCode === 'SUCCESS') {
uni.showToast({
title: '提交成功',
icon: 'success'
});
setTimeout(() => {
uni.navigateBack();
}, 1500);
} else {
uni.showToast({
title: res?.retMsg || '提交失败',
icon: 'none'
});
}
}).catch(error => {
uni.hideLoading();
console.error('提交失败:', error);
uni.showToast({
title: '提交失败',
icon: 'none'
});
});
},
// 重置表单
resetForm() {
this.formData = {
merInnerNo: '',
merCupNo: '',
receiverNo: '',
entrustFileName: '',
entrustFilePath: '',
attachments: []
};
}
}
}
</script>
<style>
@import url("./index.css");
</style>

View File

@ -1,279 +0,0 @@
/* addMer/index.css */
page {
padding-bottom: 0rpx;
}
.establish-acceptor-container {
padding: 0 30rpx;
min-height: 100vh;
}
.acceptor-form {
background-color: #fff;
border-radius: 12rpx;
padding: 30rpx;
}
.form-section {
margin-bottom: 40rpx;
}
.section-title {
font-size: 32rpx;
font-weight: 500;
color: #333;
margin-bottom: 24rpx;
padding-bottom: 12rpx;
border-bottom: 1px solid #eee;
}
.form-item {
margin-bottom: 32rpx;
position: relative;
}
.form-label {
display: block;
font-size: 28rpx;
color: #666;
margin-bottom: 12rpx;
}
.form-label.required::after {
content: '*';
color: #e64340;
margin-left: 4rpx;
}
.form-input {
width: 100%;
height: 88rpx;
padding: 0 24rpx;
font-size: 28rpx;
border: 1px solid #ddd;
border-radius: 8rpx;
box-sizing: border-box;
background-color: #fff;
}
.form-input:focus {
border-color: #007aff;
outline: none;
}
.form-input::placeholder {
color: #999;
}
/* 弹窗样式 */
.popup {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
display: flex;
justify-content: center;
align-items: center;
z-index: 999;
}
.popup-content {
width: 80%;
max-height: 70vh;
background-color: #fff;
border-radius: 10rpx;
overflow: hidden;
display: flex;
flex-direction: column;
}
.popup-title {
padding: 30rpx;
text-align: center;
font-size: 36rpx;
font-weight: bold;
border-bottom: 1rpx solid #eee;
}
.popup-list {
flex: 1;
overflow-y: auto;
max-height: 50vh;
}
.popup-item {
padding: 30rpx;
text-align: center;
border-bottom: 1rpx solid #eee;
font-size: 32rpx;
}
.popup-item:active {
background-color: #f5f5f5;
}
.popup-footer {
padding: 20rpx;
border-top: 1rpx solid #eee;
}
.popup-cancel-btn {
width: 100%;
padding: 0 20rpx;
background-color: #fff;
border: 1rpx solid #ddd;
border-radius: 8rpx;
font-size: 32rpx;
background-color: #007aff;
color: #ffffff;
}
/* 弹窗选择器样式 */
.popup-select {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 24rpx;
border: 1px solid #ddd;
border-radius: 8rpx;
background-color: #fff;
height: 88rpx;
font-size: 28rpx;
}
/* 附件上传样式 */
.attachment-section {
margin-top: 20rpx;
}
.attachment-item {
background-color: #f9f9f9;
border: 1px solid #eee;
border-radius: 8rpx;
padding: 24rpx;
margin-bottom: 24rpx;
}
.upload-btn {
width: 100%;
height: 80rpx;
background-color: #007aff;
color: #fff;
font-size: 28rpx;
border: none;
border-radius: 8rpx;
margin-top: 16rpx;
cursor: pointer;
}
.upload-btn:active {
background-color: #0051d5;
}
.file-info {
margin-top: 16rpx;
padding: 16rpx;
background-color: #e8f4ff;
border-radius: 8rpx;
font-size: 26rpx;
color: #007aff;
display: flex;
justify-content: space-between;
align-items: center;
}
.delete-btn {
padding: 0rpx 20rpx;
background-color: #e64340;
color: #fff;
border: none;
border-radius: 10rpx;
font-size: 24rpx;
cursor: pointer;
margin-right: 0rpx;
}
.delete-btn:active {
background-color: #c21f1c;
}
.add-attachment-btn {
width: 100%;
height: 80rpx;
background-color: #f0f0f0;
color: #666;
font-size: 28rpx;
border-radius: 8rpx;
margin-top: 16rpx;
cursor: pointer;
}
.add-attachment-btn:active {
background-color: #e0e0e0;
}
/* 提交按钮样式 */
.submit-section {
margin-top: 40rpx;
margin-bottom: 20rpx;
display: flex;
}
.submit-btn,
.submit-btn1 {
width: 100%;
height: 80rpx;
color: #fff;
font-size: 28rpx;
border-radius: 8rpx;
margin-top: 16rpx;
cursor: pointer;
box-shadow: 0 4rpx 12rpx rgba(0, 122, 255, 0.3);
}
.submit-btn {
background-color: #007aff;
margin-left: 5rpx;
}
.submit-btn1 {
background-color: #ff4016;
margin-right: 5rpx;
}
.submit-btn:active {
background-color: #0051d5;
transform: scale(0.98);
}
.submit-btn:disabled {
background-color: #b8d5ff;
cursor: not-allowed;
}
/* 输入框错误状态 */
.form-input.error {
border-color: #e64340;
}
/* 滚动条样式 */
::-webkit-scrollbar {
width: 8rpx;
height: 8rpx;
}
::-webkit-scrollbar-track {
background: #f1f1f1;
border-radius: 4rpx;
}
::-webkit-scrollbar-thumb {
background: #c1c1c1;
border-radius: 4rpx;
}
::-webkit-scrollbar-thumb:hover {
background: #a8a8a8;
}

View File

@ -1,327 +0,0 @@
<template>
<view class="establish-acceptor-container">
<form class="acceptor-form" @submit.prevent="submitForm">
<!-- 基本信息 -->
<view class="form-section">
<!-- <view class="form-item">
<label class="form-label required">商户号</label>
<input type="number" class="form-input" v-model.number="formData.mch_id" placeholder="请输入商户号"
required>
</view> -->
<view class="form-item">
<label class="form-label">拉卡拉内部商户号</label>
<input type="text" class="form-input" v-model="formData.merInnerNo" placeholder="请输入拉卡拉内部商户号(可选)">
</view>
<view class="form-item">
<label class="form-label">银联商户号</label>
<input type="text" class="form-input" v-model="formData.merCupNo" placeholder="请输入银联商户号(可选)">
</view>
<view class="form-item">
<label class="form-label required">联系手机号</label>
<input type="number" class="form-input" v-model="formData.contactMobile" placeholder="请输入联系手机号"
required>
</view>
<view class="form-item">
<label class="form-label">电子分账协议号</label>
<input type="text" class="form-input" v-model="formData.eleContractNo" placeholder="请输入电子分账协议号(可选)">
</view>
</view>
<!-- 附件上传 -->
<view class="form-section">
<h3 class="section-title">附件上传(可选)</h3>
<view class="attachment-section">
<view class="attachment-item" v-for="(file, index) in formData.fileData" :key="index">
<view class="form-item">
<label class="form-label">附件类型</label>
<view class="popup-select" @click="showFileAttachTypePopup = index">
<span>{{ getAttachTypeLabel(file.attType) || '请选择附件类型' }}</span>
</view>
</view>
<button class="upload-btn" @click="uploadFile(index)">上传文件</button>
<view v-if="file.attFileId" class="file-info">
<span>{{ file.attachName || '已上传文件' }}</span>
<button class="delete-btn" @click="removeFile(index)">删除</button>
</view>
</view>
<button class="add-attachment-btn" @click="addFile">添加附件</button>
</view>
</view>
<!-- 提交按钮 -->
<view class="form-section submit-section">
<button type="button" class="submit-btn1" @click="ecQuery">结果查询</button>
<button type="submit" class="submit-btn" @click="submitForm">提交申请</button>
</view>
</form>
<!-- 文件附件类型弹窗 -->
<view class="popup" v-if="showFileAttachTypePopup >= 0">
<view class="popup-content">
<view class="popup-title">选择附件类型</view>
<view class="popup-list">
<view class="popup-item" v-for="type in fileAttachTypeOptions" :key="type.value"
@click="selectFileAttachType(showFileAttachTypePopup, type)">
{{ type.label }}
</view>
</view>
<view class="popup-footer">
<button class="popup-cancel-btn" @click="showFileAttachTypePopup = -1">取消</button>
</view>
</view>
</view>
</view>
</template>
<script>
import { picUrl, menuButtonInfo, request, NavgateTo, RequsetUrl } from "../../../utils";
import { apiArr } from "../../../api/contract";
export default {
data() {
return {
// 表单数据
formData: {
mch_id: uni.getStorageSync('mchId'), // 商户号(必需)
merInnerNo: '', // 拉卡拉内部商户号(可选)
merCupNo: '', // 银联商户号(可选)
contactMobile: '', // 联系手机号(必需)
eleContractNo: '', // 电子分账协议号(可选)
fileData: [
{
attType: '',
attFileId: '',
attachName: ''
}
] // 文件数据(可选)
},
// 弹窗控制
showFileAttachTypePopup: -1,
// 文件附件类型选项(示例数据,实际应从API获取)
fileAttachTypeOptions: [
{ value: 'BUSINESS_LICENSE', label: '营业执照' },
{ value: 'ID_CARD_FRONT', label: '身份证正面' },
{ value: 'ID_CARD_BACK', label: '身份证反面' },
{ value: 'BANK_CARD', label: '银行卡' },
{ value: 'CONTRACT', label: '合同文件' },
{ value: 'OTHER', label: '其他' }
]
};
},
methods: {
// 添加附件
addFile() {
this.formData.fileData.push({
attType: '',
attFileId: '',
attachName: ''
});
},
// 选择文件附件类型
selectFileAttachType(index, type) {
this.formData.fileData[index].attType = type.value;
this.showFileAttachTypePopup = -1;
},
// 获取附件类型标签
getAttachTypeLabel(typeValue) {
if (!typeValue) return '';
const option = this.fileAttachTypeOptions.find(type => type.value === typeValue);
return option ? option.label : '';
},
// 删除附件
removeFile(index) {
this.formData.fileData.splice(index, 1);
},
// 上传文件
uploadFile(index) {
const fileData = this.formData.fileData[index];
// 检查是否选择了附件类型
if (!fileData.attType) {
uni.showToast({
title: '请先选择附件类型',
icon: 'none'
});
return;
}
// 调用 uni.chooseMessageFile API 选择文件
uni.chooseMessageFile({
count: 1,
type: 'file',
extension: ['pdf', 'doc', 'docx', 'jpg', 'jpeg', 'png'], // 支持的文件类型
success: (res) => {
const tempFile = res.tempFiles[0];
console.log("选择的文件:", tempFile);
// 设置文件名
fileData.attachName = tempFile.name;
// 显示上传中提示
uni.showLoading({
title: '上传中',
mask: true
});
// 直接使用uni.uploadFile上传文件
uni.uploadFile({
url: RequsetUrl + apiArr.upload, // 完整的上传接口URL
filePath: tempFile.path, // 文件路径
name: 'file', // 文件对应的key,根据后端要求设置
formData: {
attType: fileData.attType // 附件类型
},
header: {
Authorization: uni.getStorageSync("ctoken") // 添加认证信息
},
success: (uploadRes) => {
// 解析响应数据
const res = JSON.parse(uploadRes.data);
// 更新附件信息
fileData.attFileId = res.data.respData.attFileId;
fileData.attachName = tempFile.name; // 文件名
uni.showToast({
title: '上传成功',
icon: 'success'
});
},
fail: (error) => {
console.error('文件上传失败:', error);
uni.showToast({
title: '上传失败',
icon: 'none'
});
},
complete: () => {
uni.hideLoading(); // 隐藏加载提示
}
});
},
fail: (err) => {
console.error('选择文件失败:', err);
uni.showToast({
title: '选择文件失败',
icon: 'none'
});
}
});
},
// 表单验证
validateForm() {
const { formData } = this;
// 验证必需字段
if (!formData.mch_id) {
uni.showToast({ title: '请输入商户号', icon: 'none' });
return false;
}
if (!formData.contactMobile) {
uni.showToast({ title: '请输入联系手机号', icon: 'none' });
return false;
} else if (!/^1[3-9]\d{9}$/.test(formData.contactMobile)) {
uni.showToast({ title: '请输入有效的手机号', icon: 'none' });
return false;
}
return true;
},
ecQuery() {
// const storeValue = uni.getStorageSync('storeValue');
// if (!storeValue || !storeValue.contractId) {
// uni.showToast({
// title: '请先提交申请',
// icon: 'none'
// });
// return;
// }
// const params = {
// contractId: storeValue.contractId
// }
request(apiArr.queryLedgerMer, "POST", {}).then(res => {
if (res.respData.splitStatus === 'VALID') {
uni.showToast({
title: '审核通过',
icon: 'success'
});
} else if (res.respData.contractStatus === 'INVALID') {
uni.showToast({
title: '审核未通过',
icon: 'none'
});
}
})
},
// 表单提交逻辑
submitForm() {
// 验证表单
if (!this.validateForm()) {
return;
}
uni.showLoading({
title: '提交中...',
mask: true
});
// 准备请求参数
const submitData = {
mch_id: this.formData.mch_id,
merInnerNo: this.formData.merInnerNo,
merCupNo: this.formData.merCupNo,
contactMobile: this.formData.contactMobile,
eleContractNo: this.formData.eleContractNo,
attachments: []
};
// 只添加有attFileId的文件到attachments
const validFiles = this.formData.fileData.filter(file => file.attFileId);
if (validFiles.length > 0) {
submitData.attachments = validFiles.map(file => ({
attachType: file.attType,
attachName: file.attachName,
attachStorePath: file.attFileId
}));
}
console.log('提交的数据:', submitData);
request(apiArr.applyLedgerMer, "POST", submitData).then(res => {
uni.hideLoading();
uni.showToast({
title: '提交成功',
icon: 'success'
});
uni.setStorageSync('storeValue', { fz_apply_id: res.resp_data.ec_apply_id });
}).catch(error => {
uni.hideLoading();
console.error('提交失败:', error);
uni.showToast({
title: '提交失败',
icon: 'none'
});
});
}
}
}
</script>
<style>
@import url("./index.css");
</style>

View File

@ -68,9 +68,9 @@ export default {
}, },
getAvatarUrl(record){ getAvatarUrl(record){
if(record.client_id_one == uni.getStorageSync('openId')){ if(record.client_id_one == uni.getStorageSync('openId')){
return record.two && record.two.avatar ? picUrl + record.two.avatar : 'https://static.hshuishang.com/defaultTx.png' return record.two.avatar ? picUrl + record.two.avatar : 'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/defaultTx.png'
}else{ }else{
return record.one && record.one.avatar ? picUrl + record.one.avatar : 'https://static.hshuishang.com/defaultTx.png' return record.one.avatar ? picUrl + record.one.avatar : 'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/defaultTx.png'
} }
}, },
// 格式化时间 // 格式化时间

View File

@ -1,322 +0,0 @@
/* 全局样式重置 */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'SimSun', '宋体', serif;
font-size: 28rpx;
color: #333;
line-height: 1.5;
background-color: #fff;
}
page{
padding-bottom: 0rpx;
}
/* 合同容器 */
.contract-container {
max-width: 1200rpx;
margin: 0 auto;
padding: 140rpx 30rpx 40rpx;
background-color: #fff;
}
/* 提交申请按钮样式 */
.submit-container {
display: flex;
justify-content: center;
align-items: center;
margin: 40rpx 0;
padding: 20rpx;
}
.submit-btn {
width: 80%;
max-width: 400rpx;
height: 80rpx;
background-color: #007bff;
color: #fff;
border: none;
border-radius: 10rpx;
font-size: 32rpx;
font-weight: bold;
cursor: pointer;
transition: background-color 0.3s;
}
.submit-btn:hover {
background-color: #0056b3;
}
.submit-btn:active {
background-color: #004085;
}
.header{
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 1000;
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 30rpx;
background-color: #fff;
padding: 20rpx 30rpx;
box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.1);
}
/* 合同标题 */
.contract-title {
font-size: 36rpx;
font-weight: bold;
text-align: center;
margin-bottom: 40rpx;
color: #333;
}
.header-title{
font-size: 36rpx;
}
.print-btn{
padding: 2rpx 20rpx;
background-color: #007bff;
color: #fff;
border: none;
border-radius: 8rpx;
font-size: 28rpx;
cursor: pointer;
}
/* 甲乙双方信息 */
.party-info {
margin-bottom: 40rpx;
}
.party-info p {
margin-bottom: 20rpx;
font-size: 28rpx;
}
/* 合同内容 */
.contract-content {
margin-bottom: 40rpx;
}
.contract-intro {
margin-bottom: 30rpx;
text-align: justify;
font-size: 28rpx;
}
/* 标题样式 */
h2 {
font-size: 32rpx;
font-weight: bold;
margin-bottom: 30rpx;
color: #333;
}
h3 {
font-size: 30rpx;
font-weight: bold;
margin-bottom: 20rpx;
color: #333;
}
/* 章节样式 */
.section {
margin-top: 20rpx;
margin-bottom: 40rpx;
}
.section-desc input {
display: inline-block;
}
.section-desc {
margin-bottom: 20rpx;
font-size: 28rpx;
}
.section-desc {
line-height: 1.5;
}
.input-field {
width: 40px;
vertical-align: middle;
}
.subsection {
margin-bottom: 30rpx;
margin-left: 40rpx;
}
.subsection p {
margin-bottom: 15rpx;
font-size: 28rpx;
}
.subsection-item view {
display: flex;
align-items: center;
}
.subsection-item input {
display: inline-block;
}
/* 复选框组 */
.checkbox-group {
display: flex;
flex-wrap: wrap;
gap: 20rpx;
margin-bottom: 20rpx;
}
.checkbox-item {
display: flex;
align-items: center;
font-size: 28rpx;
cursor: pointer;
}
.checkbox-label {
margin-right: 10rpx;
}
/* 输入框样式 */
.input-field1 {
width: 500rpx;
height: 60rpx;
border: 1rpx solid #ccc;
border-radius: 8rpx;
padding: 0 20rpx;
font-size: 28rpx;
margin: 0 10rpx;
}
.input-field {
width: 200rpx;
height: 40rpx;
border: 1rpx solid #ccc;
border-radius: 8rpx;
padding: 0 20rpx;
font-size: 28rpx;
margin: 0 10rpx;
}
.input-field.small {
width: 100rpx;
}
.input-field.very-small {
width: 100rpx;
}
/* 费用标准样式 */
.fee-standard {
display: flex;
flex-direction: column;
gap: 20rpx;
margin-bottom: 20rpx;
}
.fee-standard .checkbox-item {
display: flex;
align-items: center;
font-size: 28rpx;
cursor: pointer;
flex-wrap: wrap;
}
/* 表格样式 */
.fee-table {
width: 100%;
border-collapse: collapse;
margin-bottom: 30rpx;
font-size: 28rpx;
}
.wrap-text {
word-wrap: break-word;
word-break: break-all;
max-width: 100%;
}
.fee-table th,
.fee-table td {
display: flex;
justify-content: center;
align-items: center;
border: 1rpx solid #ccc;
padding: 20rpx;
text-align: center;
}
.fee-table th {
background-color: #f5f5f5;
font-weight: bold;
}
.fee-table tr:nth-child(even) {
background-color: #fafafa;
}
/* 响应式设计 */
@media (max-width: 750rpx) {
.contract-container {
padding: 20rpx 15rpx;
}
.contract-title {
font-size: 32rpx;
}
h2 {
font-size: 28rpx;
}
h3 {
font-size: 26rpx;
}
.input-field {
width: 250rpx;
height: 50rpx;
font-size: 26rpx;
}
.input-field.small {
width: 150rpx;
}
.input-field.very-small {
width: 80rpx;
}
.fee-table th,
.fee-table td {
padding: 15rpx;
font-size: 26rpx;
}
}
/* 打印样式 */
@media print {
.contract-container {
max-width: 100%;
padding: 0;
}
.input-field {
border: 1rpx solid #000;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,283 +0,0 @@
/* 分账接收方创建页面样式 */
.establish-acceptor-container {
padding: 20rpx;
min-height: 100vh;
}
page{
padding-bottom: 0rpx;
}
/* 弹窗样式 */
.popup {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
display: flex;
justify-content: center;
align-items: center;
z-index: 999;
}
.popup-content {
width: 80%;
max-height: 70vh;
background-color: #fff;
border-radius: 10rpx;
overflow: hidden;
display: flex;
flex-direction: column;
}
.popup-title {
padding: 30rpx;
text-align: center;
font-size: 36rpx;
font-weight: bold;
border-bottom: 1rpx solid #eee;
}
.popup-list {
flex: 1;
overflow-y: auto;
max-height: 50vh;
}
.popup-item {
padding: 30rpx;
text-align: center;
border-bottom: 1rpx solid #eee;
font-size: 32rpx;
}
.popup-item:active {
background-color: #f5f5f5;
}
.popup-footer {
padding: 20rpx;
border-top: 1rpx solid #eee;
}
.popup-cancel-btn {
width: 100%;
padding: 0 20rpx;
background-color: #fff;
border: 1rpx solid #ddd;
border-radius: 8rpx;
font-size: 32rpx;
background-color: #007aff;
color: #ffffff;
}
/* 弹窗选择器样式 */
.popup-select {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 20rpx;
border: 1rpx solid #ddd;
border-radius: 6rpx;
background-color: #fff;
min-height: 80rpx;
}
.page-title {
font-size: 36rpx;
font-weight: 600;
color: #333;
text-align: center;
margin: 30rpx 0 40rpx;
}
.acceptor-form {
background-color: #fff;
border-radius: 12rpx;
padding: 30rpx;
}
.form-section {
margin-bottom: 40rpx;
}
.section-title {
font-size: 32rpx;
font-weight: 500;
color: #333;
margin-bottom: 24rpx;
padding-bottom: 12rpx;
border-bottom: 1px solid #eee;
}
.form-item {
margin-bottom: 32rpx;
position: relative;
}
.form-label {
display: block;
font-size: 28rpx;
color: #666;
margin-bottom: 12rpx;
}
.form-label.required::after {
content: '*';
color: #e64340;
margin-left: 4rpx;
}
.form-input {
width: 100%;
height: 88rpx;
padding: 0 24rpx;
font-size: 28rpx;
border: 1px solid #ddd;
border-radius: 8rpx;
box-sizing: border-box;
background-color: #fff;
}
.form-input:focus {
border-color: #007aff;
outline: none;
}
.form-input::placeholder {
color: #999;
}
/* 附件上传样式 */
.attachment-section {
margin-top: 20rpx;
}
.attachment-item {
background-color: #f9f9f9;
border: 1px solid #eee;
border-radius: 8rpx;
padding: 24rpx;
margin-bottom: 24rpx;
}
.upload-btn {
width: 100%;
height: 80rpx;
background-color: #007aff;
color: #fff;
font-size: 28rpx;
border: none;
border-radius: 8rpx;
margin-top: 16rpx;
cursor: pointer;
}
.upload-btn:active {
background-color: #0051d5;
}
.file-info {
margin-top: 16rpx;
padding: 16rpx;
background-color: #e8f4ff;
border-radius: 8rpx;
font-size: 26rpx;
color: #007aff;
display: flex;
justify-content: space-between;
align-items: center;
}
.delete-btn {
padding: 0rpx 20rpx;
background-color: #e64340;
color: #fff;
border: none;
border-radius: 10rpx;
font-size: 24rpx;
cursor: pointer;
margin-right: 0rpx;
}
.delete-btn:active {
background-color: #c21f1c;
}
.add-attachment-btn {
width: 100%;
height: 80rpx;
background-color: #f0f0f0;
color: #666;
font-size: 28rpx;
border-radius: 8rpx;
margin-top: 16rpx;
cursor: pointer;
}
.add-attachment-btn:active {
background-color: #e0e0e0;
}
/* 提交按钮样式 */
.submit-section {
margin-top: 40rpx;
margin-bottom: 20rpx;
}
.submit-btn {
width: 100%;
height: 80rpx;
background-color: #007aff;
color: #fff;
font-size: 28rpx;
border-radius: 8rpx;
margin-top: 16rpx;
cursor: pointer;
box-shadow: 0 4rpx 12rpx rgba(0, 122, 255, 0.3);
}
.submit-btn:active {
background-color: #0051d5;
transform: scale(0.98);
}
.submit-btn:disabled {
background-color: #b8d5ff;
cursor: not-allowed;
}
/* 响应式调整 */
@media (min-width: 768px) {
.establish-acceptor-container {
max-width: 800rpx;
margin: 0 auto;
}
}
/* 输入框错误状态 */
.form-input.error {
border-color: #e64340;
}
/* 滚动条样式 */
::-webkit-scrollbar {
width: 8rpx;
height: 8rpx;
}
::-webkit-scrollbar-track {
background: #f1f1f1;
border-radius: 4rpx;
}
::-webkit-scrollbar-thumb {
background: #c1c1c1;
border-radius: 4rpx;
}
::-webkit-scrollbar-thumb:hover {
background: #a8a8a8;
}

View File

@ -1,512 +0,0 @@
<template>
<view class="establish-acceptor-container">
<form class="acceptor-form" @submit.prevent="submitForm">
<!-- 必需字段 -->
<view class="form-section">
<!-- <view class="form-item">
<label class="form-label required">商户号</label>
<input
type="number"
class="form-input"
v-model="formData.mchId"
placeholder="请输入商户号"
required
>
</view> -->
<view class="form-item">
<label class="form-label required">分账接收方名称</label>
<input type="text" class="form-input" v-model="formData.receiverName" placeholder="请输入分账接收方名称"
required>
</view>
<view class="form-item">
<label class="form-label required">联系手机号</label>
<input type="tel" class="form-input" v-model="formData.contactMobile" placeholder="请输入联系手机号"
required>
</view>
</view>
<view class="form-section">
<view class="form-item">
<label class="form-label">营业执照号码</label>
<input type="text" class="form-input" v-model="formData.licenseNo" placeholder="请输入营业执照号码">
</view>
<view class="form-item">
<label class="form-label">营业执照名称</label>
<input type="text" class="form-input" v-model="formData.licenseName" placeholder="请输入营业执照名称">
</view>
<view class="form-item">
<label class="form-label">法人姓名</label>
<input type="text" class="form-input" v-model="formData.legalPersonName" placeholder="请输入法人姓名">
</view>
<view class="form-item">
<label class="form-label">法人证件号</label>
<input type="text" class="form-input" v-model="formData.legalPersonCertificateNo"
placeholder="请输入法人证件号">
</view>
</view>
<view class="form-section">
<view class="form-item">
<label class="form-label required">收款账户卡号</label>
<input type="text" class="form-input" v-model="formData.acctNo" placeholder="请输入收款账户卡号" required>
</view>
<view class="form-item">
<label class="form-label required">收款账户名称</label>
<input type="text" class="form-input" v-model="formData.acctName" placeholder="请输入收款账户名称" required>
</view>
<view class="form-item">
<label class="form-label required">收款账户类型</label>
<view class="popup-select" @click="showAccountTypePopup = true">
<span class="selected-value">{{ selectedAccountType || '请选择账户类型' }}</span>
<uni-icons type="down" size="16"></uni-icons>
</view>
<!-- 账户类型弹窗 -->
<view class="popup" v-if="showAccountTypePopup">
<view class="popup-content">
<view class="popup-title">选择账户类型</view>
<view class="popup-list">
<view class="popup-item" v-for="type in accountTypeOptions" :key="type.value"
@click="selectAccountType(type)">
{{ type.label }}
</view>
</view>
<view class="popup-footer">
<button class="popup-cancel-btn" @click="showAccountTypePopup = false">取消</button>
</view>
</view>
</view>
</view>
<view class="form-item">
<label class="form-label required">收款账户证件号</label>
<input type="text" class="form-input" v-model="formData.acctCertificateNo" placeholder="请输入收款账户证件号"
required>
</view>
<view class="form-item">
<label class="form-label required">收款账户开户行号</label>
<input type="text" class="form-input" v-model="formData.acctOpenBankCode" placeholder="请输入开户行号"
required>
</view>
<view class="form-item">
<label class="form-label required">收款账户开户行名称</label>
<input type="text" class="form-input" v-model="formData.acctOpenBankName" placeholder="请输入开户行名称"
required>
</view>
<view class="form-item">
<label class="form-label required">收款账户清算行行号</label>
<input type="text" class="form-input" v-model="formData.acctClearBankCode" placeholder="请输入清算行行号"
required>
</view>
</view>
<view class="form-section">
<h3 class="section-title">附件上传(可选)</h3>
<view class="attachment-section">
<view class="attachment-item" v-for="(attachment, index) in formData.attachList" :key="index">
<view class="form-item">
<label class="form-label">附件类型</label>
<view class="popup-select" @click="showAttachTypePopup = index">
<span class="selected-value">{{ getAttachTypeLabel(attachment.attachType) || '请选择附件类型'
}}</span>
<uni-icons type="down" size="16"></uni-icons>
</view>
</view>
<view class="form-item">
<label class="form-label">附件名称</label>
<input type="text" class="form-input" v-model="attachment.attachName" placeholder="请输入附件名称">
</view>
<button class="upload-btn" @click="uploadFile(index)">上传文件</button>
<view v-if="attachment.attachStorePath" class="file-info">
<span>{{ attachment.attachName || '已上传文件' }}</span>
<button class="delete-btn" @click="removeAttachment(index)">删除</button>
</view>
</view>
<button class="add-attachment-btn" @click="addAttachment">添加附件</button>
</view>
</view>
<view class="form-section submit-section">
<button type="submit" class="submit-btn" @click="submitForm">提交申请</button>
</view>
</form>
<!-- 附件类型弹窗 -->
<view class="popup" v-if="showAttachTypePopup >= 0">
<view class="popup-content">
<view class="popup-title">选择附件类型</view>
<view class="popup-list">
<view class="popup-item" v-for="type in attachTypeOptions" :key="type.value"
@click="selectAttachType(showAttachTypePopup, type)">
{{ type.label }}
</view>
</view>
<view class="popup-footer">
<button class="popup-cancel-btn" @click="showAttachTypePopup = -1">取消</button>
</view>
</view>
</view>
</view>
</template>
<script>
import { picUrl, menuButtonInfo, request, NavgateTo, RequsetUrl } from "../../../utils";
import { apiArr } from "../../../api/contract";
export default {
data() {
return {
// 弹窗控制
showAccountTypePopup: false,
showAttachTypePopup: -1,
// 账户类型选项
accountTypeOptions: [
{ value: '57', label: '对公' },
{ value: '58', label: '对私' }
],
// 附件类型选项
attachTypeOptions: [
{ value: 'FR_ID_CARD_FRONT', label: '法人身份证正面' },
{ value: 'FR_ID_CARD_BEHIND', label: '法人身份证反面' },
{ value: 'ID_CARD_FRONT', label: '结算人身份证正面' },
{ value: 'ID_CARD_BEHIND', label: '结算人身份证反面' },
{ value: 'BANK_CARD', label: '银行卡' },
{ value: 'BUSINESS_LICENCE', label: '营业执照' },
{ value: 'MERCHANT_PHOTO', label: '商户门头照' },
{ value: 'SHOPINNER', label: '商铺内部照片' },
{ value: 'XY', label: '线下纸质协议' },
{ value: 'NETWORK_XY', label: '电子协议' },
{ value: 'HT', label: '租赁合同' },
{ value: 'COOPERATION_QUALIFICATION_PROOF', label: '合作资质证明' },
{ value: 'FOOD_QUALIFICATION_PROOF', label: '食品经营相关资质' },
{ value: 'NO_LEGAL_PERSON_SETT_AUTH_LETTER', label: '非法人结算授权书' },
{ value: 'SPLIT_ENTRUST_FILE', label: '结算授权委托书' },
{ value: 'RENTAL_AGREEMENT', label: '集市方与场地方间的租赁协议' },
{ value: 'SPLIT_COOPERATION_FILE', label: '集市方与摊主间的合作协议' },
{ value: 'OTHERS', label: '其他' }
],
formData: {
// 必需字段
mchId: '',
receiverName: '',
contactMobile: '',
acctNo: '',
acctName: '',
acctTypeCode: '',
acctCertificateNo: '',
acctOpenBankCode: '',
acctOpenBankName: '',
acctClearBankCode: '',
// 可选字段
licenseNo: '',
licenseName: '',
legalPersonName: '',
legalPersonCertificateNo: '',
// 附件列表(初始添加一个空附件)
attachList: [{
attachType: '',
attachName: '',
attachStorePath: ''
}]
}
}
},
computed: {
// 获取选中的账户类型标签
selectedAccountType() {
if (!this.formData.acctTypeCode) return '';
const option = this.accountTypeOptions.find(type => type.value === this.formData.acctTypeCode);
return option ? option.label : '';
}
},
methods: {
// 添加附件
addAttachment() {
this.formData.attachList.push({
attachType: '',
attachName: '',
attachStorePath: ''
});
},
// 选择账户类型
selectAccountType(type) {
this.formData.acctTypeCode = type.value;
this.showAccountTypePopup = false;
},
// 选择附件类型
selectAttachType(index, type) {
this.formData.attachList[index].attachType = type.value;
this.showAttachTypePopup = -1;
},
// 获取附件类型标签
getAttachTypeLabel(typeValue) {
if (!typeValue) return '';
const option = this.attachTypeOptions.find(type => type.value === typeValue);
return option ? option.label : '';
},
// 删除附件
removeAttachment(index) {
this.formData.attachList.splice(index, 1);
// 如果列表为空,添加一个空附件以保持界面显示
if (this.formData.attachList.length === 0) {
this.formData.attachList.push({
attachType: '',
attachName: '',
attachStorePath: ''
});
}
},
// 上传文件
uploadFile(index) {
const attachment = this.formData.attachList[index];
// 检查是否选择了附件类型
if (!attachment.attachType) {
uni.showToast({
title: '请先选择附件类型',
icon: 'none'
});
return;
}
// 调用 uni.chooseMessageFile API 选择文件(支持所有文件类型)
uni.chooseMessageFile({
count: 1,
type: 'file',
extension: ['pdf', 'doc', 'docx', 'jpg', 'jpeg', 'png'], // 支持的文件类型
success: (res) => {
const tempFile = res.tempFiles[0];
console.log("选择的文件:", tempFile);
// 如果用户没有填写附件名称,使用选择的文件名
if (!attachment.attachName) {
attachment.attachName = tempFile.name;
}
// 显示上传中提示
uni.showLoading({
title: '上传中',
mask: true
});
// 直接使用uni.uploadFile上传文件
uni.uploadFile({
url: RequsetUrl + apiArr.upload, // 完整的上传接口URL
filePath: tempFile.path, // 文件路径
name: 'file', // 文件对应的key,根据后端要求设置
formData: {
attType: attachment.attachType // 其他表单参数
},
header: {
Authorization: uni.getStorageSync("ctoken") // 添加认证信息
},
success: (uploadRes) => {
// 解析响应数据
const res = JSON.parse(uploadRes.data);
// 更新附件信息
attachment.attachStorePath = res.data.respData.attFileId;
uni.showToast({
title: '上传成功',
icon: 'success'
});
},
fail: (error) => {
console.error('文件上传失败:', error);
uni.showToast({
title: '上传失败',
icon: 'none'
});
},
complete: () => {
uni.hideLoading(); // 隐藏加载提示
}
});
},
fail: (err) => {
console.error('选择文件失败:', err);
uni.showToast({
title: '选择文件失败',
icon: 'none'
});
}
});
},
// 表单验证
validateForm() {
const { formData } = this;
// 验证必需字段
// if (!formData.mchId) {
// uni.showToast({ title: '请输入商户号', icon: 'none' });
// return false;
// }
if (!formData.receiverName) {
uni.showToast({ title: '请输入分账接收方名称', icon: 'none' });
return false;
}
if (!formData.contactMobile) {
uni.showToast({ title: '请输入联系手机号', icon: 'none' });
return false;
} else if (!/^1[3-9]\d{9}$/.test(formData.contactMobile)) {
uni.showToast({ title: '请输入正确的手机号格式', icon: 'none' });
return false;
}
if (!formData.acctNo) {
uni.showToast({ title: '请输入收款账户卡号', icon: 'none' });
return false;
}
if (!formData.acctName) {
uni.showToast({ title: '请输入收款账户名称', icon: 'none' });
return false;
}
if (!formData.acctTypeCode) {
uni.showToast({ title: '请选择收款账户类型', icon: 'none' });
return false;
}
if (!formData.acctCertificateNo) {
uni.showToast({ title: '请输入收款账户证件号', icon: 'none' });
return false;
}
if (!formData.acctOpenBankCode) {
uni.showToast({ title: '请输入收款账户开户行号', icon: 'none' });
return false;
}
if (!formData.acctOpenBankName) {
uni.showToast({ title: '请输入收款账户开户行名称', icon: 'none' });
return false;
}
if (!formData.acctClearBankCode) {
uni.showToast({ title: '请输入收款账户清算行行号', icon: 'none' });
return false;
}
return true;
},
// 表单提交逻辑
submitForm() {
// 验证表单
if (!this.validateForm()) {
return;
}
uni.showLoading({
title: '提交中...',
mask: true
});
// 准备请求参数
const submitData = {
mchId: '000', // 商户号(必需)
receiverName: this.formData.receiverName, // 分账接收方名称(必需)
contactMobile: this.formData.contactMobile, // 联系手机号(必需)
licenseNo: this.formData.licenseNo, // 营业执照号码(可选)
licenseName: this.formData.licenseName, // 营业执照名称(可选)
legalPersonName: this.formData.legalPersonName, // 法人姓名(可选)
legalPersonCertificateNo: this.formData.legalPersonCertificateNo, // 法人证件号(可选)
acctNo: this.formData.acctNo, // 收款账户卡号(必需)
acctName: this.formData.acctName, // 收款账户名称(必需)
acctTypeCode: this.formData.acctTypeCode, // 收款账户类型(必需)
acctCertificateNo: this.formData.acctCertificateNo, // 收款账户证件号(必需)
acctOpenBankCode: this.formData.acctOpenBankCode, // 收款账户开户行号(必需)
acctOpenBankName: this.formData.acctOpenBankName, // 收款账户开户行名称(必需)
acctClearBankCode: this.formData.acctClearBankCode // 收款账户清算行行号(必需)
};
// 只添加有attachStorePath的附件到attachList
const validAttachments = this.formData.attachList.filter(attach => attach.attachStorePath);
if (validAttachments.length > 0) {
submitData.attachList = validAttachments.map(attach => ({
attachType: attach.attachType,
attachName: attach.attachName,
attachStorePath: attach.attachStorePath
}));
}
console.log('提交的数据:', submitData);
request(apiArr.applyLedgerReceiver, "POST", submitData).then(res => {
uni.hideLoading();
if (res && res.cmdRetCode === 'SUCCESS') {
uni.showToast({
title: '提交成功',
icon: 'success'
});
setTimeout(() => {
uni.navigateBack();
}, 1500);
} else {
uni.showToast({
title: res?.retMsg || '提交失败',
icon: 'none'
});
}
}).catch(error => {
uni.hideLoading();
console.error('提交失败:', error);
uni.showToast({
title: '提交失败',
icon: 'none'
});
});
},
// 重置表单
resetForm() {
this.formData = {
// mchId: '',
receiverName: '',
contactMobile: '',
acctNo: '',
acctName: '',
acctTypeCode: '',
acctCertificateNo: '',
acctOpenBankCode: '',
acctOpenBankName: '',
acctClearBankCode: '',
licenseNo: '',
licenseName: '',
legalPersonName: '',
legalPersonCertificateNo: '',
attachList: []
};
}
}
}
</script>
<style>
@import url("./index.css");
</style>

View File

@ -15,15 +15,15 @@
<view v-if="connectingStatus" class="connecting-status">{{ connectingStatus }}</view> <view v-if="connectingStatus" class="connecting-status">{{ connectingStatus }}</view>
<!-- 聊天消息区域 --> <!-- 聊天消息区域 -->
<scroll-view class="chat-messages" scroll-y="true" <scroll-view :scroll-into-view="scrollToView" class="chat-messages" lower-threshold="100" scroll-y="true"
upper-threshold="50" @scrolltoupper="loadMoreHistory" @scroll="onScroll"> upper-threshold="100" @scrolltolower="loadMoreHistory" @scrolltoupper="loadMoreHistory">
<!-- 加载历史消息提示 --> <!-- 加载历史消息提示 -->
<view v-if="isLoadingHistory" class="message-time">加载历史消息...</view> <view v-if="isLoadingHistory" class="message-time">加载历史消息...</view>
<!-- 消息列表 --> <!-- 消息列表 -->
<block v-for="(message, index) in messages" :key="index"> <block v-for="(message, index) in messages" :key="index">
<!-- 时间分割线 --> <!-- 时间分割线 -->
<view v-if="needShowTime(index)" class="message-time">{{ message.times }}</view> <view v-if="needShowTime(index)" class="message-time">{{ formatTime(message.time) }}</view>
<!-- 消息项 --> <!-- 消息项 -->
<view :id="'msg-' + index" :class="{ <view :id="'msg-' + index" :class="{
@ -33,44 +33,9 @@
}" class="message-item"> }" class="message-item">
<image :src="message.isSelf ? userAvatar : getAvatarUrl(message)" class="message-avatar" mode="aspectFill"> <image :src="message.isSelf ? userAvatar : getAvatarUrl(message)" class="message-avatar" mode="aspectFill">
</image> </image>
<!-- 文字 --> <view class="message-content">
<view v-if="!message.type || message.type === 1" class="message-content">
{{ message.content }} {{ message.content }}
</view> </view>
<!-- 图片 -->
<view v-else-if="message.type === 2" class="message-media">
<image v-if="message.mediaUrl" :src="message.mediaUrl" class="chat-img" mode="aspectFit"
@tap="previewImage(message.mediaUrl)" />
<view v-else class="media-loading">图片加载中…</view>
</view>
<!-- 视频 -->
<view v-else-if="message.type === 3" class="message-media">
<video v-if="message.mediaUrl" :src="message.mediaUrl" class="chat-video" controls></video>
<view v-else class="media-loading">视频加载中…</view>
</view>
<!-- 商品/购物车卡片 -->
<view v-else-if="message.type === 4" class="message-card" @tap="openCardLink(message.card)">
<image v-if="message.card.pic && !message.card._picErr" :src="message.card.pic" class="card-pic"
mode="aspectFill" @error="onCardPicError(message)" />
<view v-else class="card-pic card-pic--ph">商品</view>
<view class="card-info">
<view class="card-name">{{ message.card.name }}</view>
<view class="card-price">¥{{ message.card.price }}</view>
<view class="card-tag">商品</view>
</view>
</view>
<!-- 订单卡片 -->
<view v-else-if="message.type === 5" class="message-card" @tap="openCardLink(message.card)">
<image v-if="message.card.pic && !message.card._picErr" :src="message.card.pic" class="card-pic"
mode="aspectFill" @error="onCardPicError(message)" />
<view v-else class="card-pic card-pic--ph">订单</view>
<view class="card-info">
<view class="card-name">订单 {{ message.card.order_no }}</view>
<view class="card-price">¥{{ message.card.amount }}</view>
<view class="card-tag">订单 · 共{{ message.card.count }}件</view>
</view>
</view>
<view v-else class="message-content">{{ message.content }}</view>
</view> </view>
</block> </block>
</scroll-view> </scroll-view>
@ -81,45 +46,18 @@
<textarea v-model="inputMessage" :adjust-position="true" auto-height class="message-input" cursor-spacing="10" <textarea v-model="inputMessage" :adjust-position="true" auto-height class="message-input" cursor-spacing="10"
enable-keyboard-accessory-view="true" hold-keyboard="true" maxlength="500" placeholder="请输入消息..." enable-keyboard-accessory-view="true" hold-keyboard="true" maxlength="500" placeholder="请输入消息..."
@blur="onInputBlur" @confirm="sendMessage" @focus="onInputFocus" @input="handleInput"></textarea> @blur="onInputBlur" @confirm="sendMessage" @focus="onInputFocus" @input="handleInput"></textarea>
<view class="plus-btn" @tap="togglePanel">
<uni-icons color="#666" size="30" type="plusempty"></uni-icons>
</view>
<button :disabled="inputMessage.trim() === ''" class="send-btn" @tap="sendMessage"> <button :disabled="inputMessage.trim() === ''" class="send-btn" @tap="sendMessage">
发送 发送
</button> </button>
</view> </view>
<!-- 更多功能面板 -->
<view v-if="showPanel" class="more-panel">
<view class="panel-item" @tap="chooseMedia('image')">
<view class="panel-icon">🖼️</view>
<text>相册图片</text>
</view>
<view class="panel-item" @tap="chooseMedia('camera')">
<view class="panel-icon">📷</view>
<text>拍摄</text>
</view>
<view class="panel-item" @tap="chooseMedia('video')">
<view class="panel-icon">🎬</view>
<text>视频</text>
</view>
<view class="panel-item" @tap="openGoodsPicker">
<view class="panel-icon">🛒</view>
<text>商品/购物车</text>
</view>
<view class="panel-item" @tap="openOrderPicker">
<view class="panel-icon">📦</view>
<text>订单</text>
</view>
</view>
</view> </view>
</view> </view>
</template> </template>
<script> <script>
import { menuButtonInfo, picUrl, request, NavgateTo } from '@/utils' import { menuButtonInfo, picUrl, request } from '@/utils'
import { apiArr } from '@/api/customerService'
import mqttTool from '@/utils/mqtt' import mqttTool from '@/utils/mqtt'
import { apiArr } from '../../../api/customerService'
import { uploadOSS, signPrivateView } from '@/utils/uploadOSS'
export default { export default {
data() { data() {
@ -138,11 +76,8 @@ export default {
userAvatar: '', userAvatar: '',
// 消息列表 // 消息列表
messages: [], messages: [],
// 输入的消息 // 输入的消息
inputMessage: '', inputMessage: '',
// 更多功能面板
showPanel: false,
// 是否可以发送消息 // 是否可以发送消息
canSend: false, canSend: false,
// 连接状态 // 连接状态
@ -170,11 +105,9 @@ export default {
} }
}, },
onLoad(options) { onLoad(options) {
console.log('客服聊天页面onLoad触发')
const meun = menuButtonInfo() const meun = menuButtonInfo()
this.top = meun.top this.top = meun.top
this.localHeight = meun.height this.localHeight = meun.height
console.log('导航栏信息:top:', this.top, 'height:', this.localHeight)
// 获取聊天对象信息 // 获取聊天对象信息
if (options.item) { if (options.item) {
const item = JSON.parse(options.item) const item = JSON.parse(options.item)
@ -186,10 +119,7 @@ export default {
this.chatTarget.title = this.chatTarget.employee_name this.chatTarget.title = this.chatTarget.employee_name
this.getMqttConfig().then(() => { this.getMqttConfig().then(() => {
// 获取配置后再初始化聊天 // 获取配置后再初始化聊天
console.log('获取MQTT配置成功,开始初始化聊天')
this.initChat() this.initChat()
}).catch(error => {
console.error('获取MQTT配置失败:', error)
}) })
} else { } else {
// 客服选择聊天列表进来 // 客服选择聊天列表进来
@ -203,35 +133,23 @@ export default {
this.chatTarget.openId = this.chatTarget.client_id_one this.chatTarget.openId = this.chatTarget.client_id_one
} }
// 初始化MQTT连接 // 初始化MQTT连接
console.log('开始初始化聊天')
this.initChat() this.initChat()
} }
} else {
console.log('没有接收到参数item')
} }
// 初始化用户头像 // 初始化用户头像
this.userAvatar = picUrl + uni.getStorageSync('headPhoto') this.userAvatar = picUrl + uni.getStorageSync('headPhoto')
console.log('用户头像:', this.userAvatar)
}, },
onShow() { onShow() {
// 监听 picker 页回传的商品/订单卡片(只注册一次)
if (!this._onPickCard) {
this._onPickCard = ({ type, card }) => {
this.publishMsg(type, JSON.stringify(card))
}
uni.$on('chat:pickCard', this._onPickCard)
}
}, },
methods: { methods: {
getAvatarUrl(record) { getAvatarUrl(record) {
return this.chatTarget.employee_image ? this.chatTarget.employee_image : 'https://static.hshuishang.com/defaultTx.png' return this.chatTarget.employee_image ? this.chatTarget.employee_image : 'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/defaultTx.png'
}, },
async connect() { async connect() {
this.client = null this.client = null
const options = { const options = {
clientId: this.selfClientId clientId: this.selfClientId
} }
console.log('clientId:', options.clientId)
// 添加连接状态回调 // 添加连接状态回调
const callbacks = { const callbacks = {
@ -264,46 +182,26 @@ export default {
let jsMsg = msg // 直接使用已解析的对象,无需再次解析 let jsMsg = msg // 直接使用已解析的对象,无需再次解析
console.log('收到消息', topic, msg) console.log('收到消息', topic, msg)
if (jsMsg.send_client === this.selfClientId || jsMsg.receive_client === this.selfClientId) { if (jsMsg.send_client === this.selfClientId || jsMsg.receive_client === this.selfClientId) {
console.log('接收或发送人是我')
if (jsMsg.send_client === this.chatTarget.openId || jsMsg.receive_client === this.chatTarget.openId) { if (jsMsg.send_client === this.chatTarget.openId || jsMsg.receive_client === this.chatTarget.openId) {
this.appendMessage(jsMsg, jsMsg.send_client === this.selfClientId) console.log('接收或发送人是我的聊天对象')
this.messages.push({
content: jsMsg.content,
time: Date.now(),
isSelf: jsMsg.send_client === this.selfClientId,
isLoading: false
})
console.log('收到我的消息', this.messages)
this.scrollToView = 'msg-' + (this.messages.length - 1)
} }
} }
}) })
}, },
// 把一条原始消息(含 type/content)转成可渲染的消息对象并追加;图片/视频异步签名 URL
async appendMessage(raw, isSelf) {
const type = Number(raw.type) || 1
const item = {
type,
content: raw.content,
time: Date.now(),
isSelf,
isLoading: false,
mediaUrl: '',
card: null
}
if (type === 4 || type === 5) {
try { item.card = typeof raw.content === 'string' ? JSON.parse(raw.content) : raw.content } catch (e) { item.card = {} }
}
const idx = this.messages.push(item) - 1
this.scrollToView = 'msg-' + idx
// 图片/视频:content 是私密 object_key,需签名后显示
if (type === 2 || type === 3) {
try {
const r = await signPrivateView(raw.content)
this.$set(this.messages[idx], 'mediaUrl', r.url)
} catch (e) {
console.error('签发聊天媒体URL失败', e)
}
}
},
async subscribe() { async subscribe() {
if (this.isConnected && this.client) { if (this.isConnected && this.client) {
const topic = 'contact/message/send_msg/' + this.chatTarget.bindId // 按会话精确订阅,天然隔离(沿用 contact/message 授权前缀) this.client.subscribe('contact/message/receive_msg', { qos: 0 }, (err) => {
this.client.subscribe(topic, { qos: 0 }, (err) => {
if (!err) { if (!err) {
console.log('订阅成功', topic, { qos: 0 }) console.log('订阅成功', 'contact/message/receive_msg', { qos: 0 })
this.connectingStatus = '' this.connectingStatus = ''
} else { } else {
console.log('订阅失败:', err) console.log('订阅失败:', err)
@ -324,11 +222,7 @@ export default {
// 连接成功后启动心跳包 // 连接成功后启动心跳包
this.startKeepalive() this.startKeepalive()
// 连接成功后立即加载历史消息 // 连接成功后立即加载历史消息
console.log('连接成功,开始加载历史消息')
await this.loadHistoryMessages() await this.loadHistoryMessages()
console.log('历史消息加载完成,消息数量:', this.messages.length)
} catch (error) { } catch (error) {
console.error('初始化聊天失败', error) console.error('初始化聊天失败', error)
this.connectingStatus = '连接失败,请检查网络' this.connectingStatus = '连接失败,请检查网络'
@ -397,23 +291,16 @@ export default {
// 加载历史消息 // 加载历史消息
async loadHistoryMessages() { async loadHistoryMessages() {
console.log('loadHistoryMessages方法调用')
console.log('加载条件检查:hasMoreHistory:', this.hasMoreHistory, 'isLoadingHistory:', this.isLoadingHistory)
if (!this.hasMoreHistory || this.isLoadingHistory) { if (!this.hasMoreHistory || this.isLoadingHistory) {
console.log('不满足加载条件:hasMoreHistory:', this.hasMoreHistory, 'isLoadingHistory:', this.isLoadingHistory)
return return
} }
try { try {
this.isLoadingHistory = true this.isLoadingHistory = true
console.log('开始加载历史消息,当前页码:', this.pageNum)
// 确保已经获取了mqttConfig.bindId // 确保已经获取了mqttConfig.bindId
if (!this.chatTarget.bindId) { if (!this.chatTarget.bindId) {
console.log('没有bindId,开始获取MQTT配置')
await this.getMqttConfig() await this.getMqttConfig()
console.log('获取MQTT配置成功,bindId:', this.chatTarget.bindId)
} }
const params = { const params = {
@ -427,108 +314,43 @@ export default {
const res = await request(apiArr.csGetMsgRecord, 'POST', params) const res = await request(apiArr.csGetMsgRecord, 'POST', params)
console.log('历史消息返回结果:', res) console.log('历史消息返回结果:', res)
if (res && res.msg_record) { if (res && res.code === 1 && res.data && res.data.msg_record) {
const historyMessages = res.msg_record const historyMessages = res.data.msg_record
console.log('原始历史消息数量:', historyMessages.length)
// 如果没有更多历史消息了 // 如果没有更多历史消息了
if (historyMessages.length === 0) { if (historyMessages.length === 0) {
console.log('没有更多历史消息了')
this.hasMoreHistory = false this.hasMoreHistory = false
return return
} }
// 处理历史消息,转换为需要的格式 // 处理历史消息,转换为需要的格式
const formattedMessages = historyMessages.map(msg => { const formattedMessages = historyMessages.map(msg => ({
const type = Number(msg.type) || 1
const item = {
type,
content: msg.content, content: msg.content,
time: new Date(msg.create_time).getTime(), time: new Date(msg.create_time).getTime(),
times: msg.update_time, isSelf: msg.send_client === this.selfClientId, // 修正判断条件
isSelf: msg.send_client === this.selfClientId, isLoading: false
isLoading: false, })).reverse(); // 反转消息顺序,确保最早的消息在最前面
mediaUrl: '',
card: null
}
if (type === 4 || type === 5) {
try { item.card = typeof msg.content === 'string' ? JSON.parse(msg.content) : msg.content } catch (e) { item.card = {} }
}
return item
}).reverse(); // 反转消息顺序,确保最早的消息在最前面
// 图片/视频历史消息:异步签发私密 URL
formattedMessages.forEach(item => {
if (item.type === 2 || item.type === 3) {
signPrivateView(item.content).then(r => {
this.$set(item, 'mediaUrl', r.url)
}).catch(e => console.error('历史媒体签名失败', e))
}
})
console.log('格式化后的历史消息:', formattedMessages)
// 将格式化后的历史消息添加到消息列表开头 // 将格式化后的历史消息添加到消息列表开头
const previousMessageCount = this.messages.length; this.messages = [...formattedMessages, ...this.messages]
console.log('添加前消息数量:', previousMessageCount)
this.messages = [...formattedMessages, ...this.messages];
console.log('添加后消息数量:', this.messages.length)
// 增加页码 // 增加页码
this.pageNum++; this.pageNum++
console.log('下一页页码:', this.pageNum)
// 如果是首次加载,滚动到底部显示最新消息
if (previousMessageCount === 0) {
setTimeout(() => {
console.log('首次加载,滚动到底部,消息数量:', this.messages.length)
// 使用更可靠的滚动方式
uni.pageScrollTo({
scrollTop: 999999,
duration: 300
});
}, 100);
} else {
// 不是首次加载时,保持当前滚动位置,不自动滚动到底部
// 确保新加载的历史消息在顶部可见
console.log('非首次加载,新增消息数量:', formattedMessages.length)
}
} else {
console.log('接口返回数据格式不正确或无消息记录')
// 仅当不是第一页时才设置hasMoreHistory为false
if (this.pageNum > 1) {
this.hasMoreHistory = false
}
} }
} catch (error) { } catch (error) {
console.error('加载历史消息失败', error) console.error('加载历史消息失败', error)
} finally { } finally {
this.isLoadingHistory = false this.isLoadingHistory = false
console.log('加载历史消息结束')
} }
}, },
// 滚动事件监听
onScroll(e) {
console.log('滚动事件触发,scrollTop:', e.detail.scrollTop)
},
// 加载更多历史消息 // 加载更多历史消息
loadMoreHistory() { loadMoreHistory(e) {
console.log('滚动到顶部事件触发') // 当滚动到顶部时加载更多历史消息
// 滚动到顶部时加载更多历史消息 if (e && e.detail.direction === 'top') {
console.log('当前条件:isLoadingHistory:', this.isLoadingHistory, 'hasMoreHistory:', this.hasMoreHistory, 'pageNum:', this.pageNum)
// 重置hasMoreHistory为true,确保可以继续加载
if (!this.hasMoreHistory && this.pageNum === 1) {
console.log('重置hasMoreHistory为true')
this.hasMoreHistory = true
}
if (!this.isLoadingHistory && this.hasMoreHistory) { if (!this.isLoadingHistory && this.hasMoreHistory) {
console.log('开始加载更多历史消息')
this.loadHistoryMessages() this.loadHistoryMessages()
} else { }
console.log('不满足加载更多条件:isLoadingHistory:', this.isLoadingHistory, 'hasMoreHistory:', this.hasMoreHistory)
} }
}, },
@ -551,7 +373,7 @@ export default {
} }
console.log('发送消息', msgData) console.log('发送消息', msgData)
this.client.publish( this.client.publish(
'contact/message/send_msg/' + this.chatTarget.bindId, // 按会话精确主题,双方订阅同一主题 'contact/message/send_msg', // 使用指定的发送消息主题
JSON.stringify(msgData), JSON.stringify(msgData),
{ Qos: 0 }, { Qos: 0 },
(err) => { (err) => {
@ -568,107 +390,6 @@ export default {
this.inputMessage = '' this.inputMessage = ''
}, },
// 切换"+"功能面板
togglePanel() {
this.showPanel = !this.showPanel
},
// 统一发布消息(type: 1文字 2图片 3视频 4商品 5订单;content 为文本/object_key/JSON字符串)
publishMsg(type, content) {
if (!this.client || !this.isConnected) {
uni.showToast({ title: '连接断开,请重试', icon: 'none' })
return
}
const msgData = {
bind_id: this.chatTarget.bindId,
send_client: this.selfClientId,
receive_client: this.chatTarget.openId,
type,
content,
receive_read_status: 2
}
this.client.publish('contact/message/send_msg/' + this.chatTarget.bindId, JSON.stringify(msgData), { Qos: 0 }, (err) => {
if (err) console.error('发送消息失败', err)
})
},
// 选择图片/拍摄/视频并上传(私密,按会话授权)
chooseMedia(source) {
this.showPanel = false
if (source === 'video') {
uni.chooseVideo({
sourceType: ['album', 'camera'],
maxDuration: 60,
success: (res) => this.uploadAndSend(res.tempFilePath, 'chat_video', 3)
})
} else {
uni.chooseImage({
count: 1,
sizeType: ['compressed'],
sourceType: source === 'camera' ? ['camera'] : ['album'],
success: (res) => {
const fp = res.tempFilePaths && res.tempFilePaths[0]
if (fp) this.uploadAndSend(fp, 'chat_image', 2)
}
})
}
},
// 上传到私密 bucket 后,把 object_key 作为消息内容发布
async uploadAndSend(filePath, scene, type) {
try {
const { objectKey } = await uploadOSS({ filePath, scene, bindId: this.chatTarget.bindId })
this.publishMsg(type, objectKey)
} catch (e) {
console.error('上传失败', e)
uni.showToast({ title: '上传失败,请重试', icon: 'none' })
}
},
// 预览图片
previewImage(url) {
if (url) uni.previewImage({ urls: [url], current: url })
},
// 点击商品/订单卡片跳转
openCardLink(card) {
if (!card) return
// 兼容老消息:仍带 path 的直接跳
if (!card.page && card.path) {
NavgateTo(card.path, { isLogin: false })
return
}
if (!card.page) return
// 完整 item 经本地存储中转,避免 URL 过长被截断(详情页优先读 storage)
const item = card.item || {}
try {
uni.setStorageSync('chatCardItem', item)
} catch (e) {
console.error('暂存卡片数据失败', e)
}
NavgateTo(card.page + '?item=' + encodeURIComponent(JSON.stringify(item)) + '&fromChat=1', { isLogin: false })
},
// 卡片图片加载失败 -> 显示占位(用 $set 保证响应式)
onCardPicError(message) {
if (message && message.card) {
this.$set(message.card, '_picErr', true)
}
},
// 选择商品/购物车发送
openGoodsPicker() {
this.showPanel = false
// 跳转到选择页(复用购物车/商品列表),选完回传后 publishMsg(4, JSON)
NavgateTo('/packages/customerService/picker/index?type=goods&bindId=' + this.chatTarget.bindId, { isLogin: false })
},
// 选择订单发送
openOrderPicker() {
this.showPanel = false
NavgateTo('/packages/customerService/picker/index?type=order&bindId=' + this.chatTarget.bindId, { isLogin: false })
},
// 处理输入事件 // 处理输入事件
handleInput() { handleInput() {
this.canSend = this.inputMessage.trim().length > 0 this.canSend = this.inputMessage.trim().length > 0
@ -712,11 +433,7 @@ export default {
// 滚动到底部 // 滚动到底部
scrollToBottom() { scrollToBottom() {
setTimeout(() => { setTimeout(() => {
console.log('手动滚动到底部') this.scrollToView = 'msg-' + (this.messages.length - 1)
uni.pageScrollTo({
scrollTop: 999999,
duration: 300
});
}, 100) }, 100)
}, },
@ -791,12 +508,6 @@ export default {
clearTimeout(this.reconnectFailedTimer) clearTimeout(this.reconnectFailedTimer)
this.reconnectFailedTimer = null this.reconnectFailedTimer = null
} }
// 移除卡片选择监听
if (this._onPickCard) {
uni.$off('chat:pickCard', this._onPickCard)
this._onPickCard = null
}
} }
} }
</script> </script>
@ -804,120 +515,3 @@ export default {
<style> <style>
@import url("./index.css"); @import url("./index.css");
</style> </style>
<style scoped>
:root {
--header-height: 80px; /* 头部高度 */
--input-height: 80px; /* 输入区域高度 */
}
/* 图片/视频消息 */
.message-media {
max-width: 60%;
}
.chat-img {
width: 320rpx;
height: 320rpx;
border-radius: 12rpx;
background: #f0f0f0;
}
.chat-video {
width: 400rpx;
height: 300rpx;
border-radius: 12rpx;
}
.media-loading {
padding: 30rpx 40rpx;
background: #fff;
border-radius: 12rpx;
color: #999;
font-size: 24rpx;
}
/* 商品/订单卡片 */
.message-card {
display: flex;
width: 520rpx;
background: #fff;
border-radius: 14rpx;
overflow: hidden;
box-shadow: 0 2rpx 8rpx rgba(0,0,0,0.06);
}
.card-pic {
width: 180rpx;
height: 180rpx;
flex-shrink: 0;
background: #f5f5f5;
}
.card-pic--ph {
display: flex;
align-items: center;
justify-content: center;
color: #bbb;
font-size: 28rpx;
}
.card-info {
flex: 1;
padding: 18rpx 20rpx;
display: flex;
flex-direction: column;
justify-content: space-between;
min-width: 0;
}
.card-name {
font-size: 28rpx;
color: #222;
line-height: 38rpx;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
.card-price {
font-size: 32rpx;
color: #FF370B;
font-weight: 600;
}
.card-tag {
align-self: flex-start;
font-size: 20rpx;
color: #999;
border: 1rpx solid #eee;
border-radius: 6rpx;
padding: 0 10rpx;
}
/* "+" 按钮与更多面板 */
.plus-btn {
display: flex;
align-items: center;
justify-content: center;
width: 60rpx;
height: 60rpx;
}
.more-panel {
display: flex;
flex-wrap: wrap;
padding: 24rpx 12rpx;
background: #f7f7f7;
}
.panel-item {
width: 20%;
display: flex;
flex-direction: column;
align-items: center;
gap: 8rpx;
font-size: 22rpx;
color: #666;
margin-bottom: 16rpx;
}
.panel-icon {
width: 96rpx;
height: 96rpx;
background: #fff;
border-radius: 16rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 44rpx;
}
</style>

View File

@ -1,165 +0,0 @@
<template>
<view class="picker-page">
<!-- 订单:普通/团购 两个 tab -->
<view v-if="mode === 'order'" class="tabs">
<view class="tab" :class="{ active: orderTab === 'normal' }" @tap="switchTab('normal')">普通订单</view>
<view class="tab" :class="{ active: orderTab === 'group' }" @tap="switchTab('group')">团购订单</view>
</view>
<scroll-view class="list" scroll-y>
<!-- 订单列表 -->
<block v-if="mode === 'order'">
<view v-for="(item, idx) in orderList" :key="idx" class="order-card" @tap="pickOrder(item)">
<view class="order-head">
<text class="order-no">订单号:{{ item.order_no }}</text>
</view>
<view class="order-goods">
<image v-for="(g, gi) in (item.commodity_order_item_list || []).slice(0, 4)" :key="gi"
:src="g.commodity_pic" class="goods-thumb" mode="aspectFill" />
</view>
<view class="order-foot">
<text>共{{ item.total_count }}件</text>
<text class="amount">¥{{ item.total_amount }}</text>
<view class="send-btn">发送</view>
</view>
</view>
<view v-if="orderList.length === 0" class="empty">暂无订单</view>
</block>
<!-- 购物车列表 -->
<block v-else>
<view v-for="(g, idx) in cartGoods" :key="idx" class="goods-row" @tap="pickGoods(g)">
<image :src="g.pic" class="goods-thumb-lg" mode="aspectFill" />
<view class="goods-info">
<view class="goods-name">{{ g.name }}</view>
<view class="goods-price">¥{{ g.price }}</view>
</view>
<view class="send-btn">发送</view>
</view>
<view v-if="cartGoods.length === 0" class="empty">购物车为空</view>
</block>
</scroll-view>
</view>
</template>
<script>
import { request, picUrl } from '@/utils'
import { apiArr as shopApi } from '@/api/shop'
import { apiArr as afterSaleApi } from '@/api/afterSale'
export default {
data() {
return {
mode: 'order', // order | goods
bindId: 0,
orderTab: 'normal', // normal | group
orderList: [],
cartGoods: []
}
},
onLoad(options) {
this.mode = options.type === 'goods' ? 'goods' : 'order'
this.bindId = Number(options.bindId) || 0
uni.setNavigationBarTitle({ title: this.mode === 'goods' ? '选择购物车商品' : '选择订单' })
if (this.mode === 'goods') {
this.loadCart()
} else {
this.loadOrders()
}
},
methods: {
switchTab(t) {
this.orderTab = t
this.loadOrders()
},
// 订单列表:order_cate 1普通 2团购(按 tab 过滤)
loadOrders() {
request(afterSaleApi.orderList, 'POST', {
user_id: uni.getStorageSync('userId')
}).then(res => {
const list = res.order_list || []
list.forEach(item => {
(item.commodity_order_item_list || []).forEach(g => {
g.commodity_pic = (g.commodity_pic && g.commodity_pic.startsWith('http')) ? g.commodity_pic : picUrl + g.commodity_pic
})
})
if (this.orderTab === 'group') {
this.orderList = list.filter(i => i.order_cate == 2)
} else {
this.orderList = list.filter(i => i.order_cate == 1 || i.order_cate == 4)
}
})
},
// 购物车(非团购)
loadCart() {
request(shopApi.getCar, 'POST', { is_group_buy: '' }).then(res => {
const groups = [].concat(res.same_day_cart_list || [], res.normal_cart_list || [])
const goods = []
groups.forEach(sup => {
(sup.commodity_cart_and_goods_model || []).forEach(c => {
const gi = c.commodity_goods_info || {}
goods.push({
goods_id: c.goods_id,
commodity_id: c.commodity_id,
name: gi.commodity_name || gi.goods_name || '商品',
pic: (gi.commodity_pic && gi.commodity_pic.startsWith('http')) ? gi.commodity_pic : picUrl + (gi.commodity_pic || ''),
price: gi.sales_price || c.price || 0
})
})
})
this.cartGoods = goods
})
},
// 选中订单 -> 回传订单卡片(type=5)
pickOrder(item) {
const firstPic = (item.commodity_order_item_list && item.commodity_order_item_list[0] && item.commodity_order_item_list[0].commodity_pic) || ''
const card = {
order_id: item.id,
order_no: item.order_no,
amount: item.total_amount,
count: item.total_count,
pic: firstPic,
page: '/packages/myOrders/orderDetails/index', // 点击跳转目标页(完整 item 经 storage 中转,避免 URL 超长)
item // 完整订单对象,详情页直接用
}
uni.$emit('chat:pickCard', { type: 5, card })
uni.navigateBack()
},
// 选中购物车商品 -> 回传商品卡片(type=4)
pickGoods(g) {
const card = {
goods_id: g.goods_id,
commodity_id: g.commodity_id,
name: g.name,
price: g.price,
pic: g.pic,
page: '/packages/advertising/goodsDetail/index',
item: { commodity_id: g.commodity_id, id: g.goods_id, promotional_price: g.price } // goodsDetail 需 commodity_id 查详情、id 定位规格、promotional_price 作展示价
}
uni.$emit('chat:pickCard', { type: 4, card })
uni.navigateBack()
}
}
}
</script>
<style scoped>
.picker-page { display: flex; flex-direction: column; height: 100vh; background: #f5f5f5; }
.tabs { display: flex; background: #fff; }
.tab { flex: 1; text-align: center; padding: 28rpx 0; font-size: 28rpx; color: #666; }
.tab.active { color: #FF370B; font-weight: 600; border-bottom: 4rpx solid #FF370B; }
.list { flex: 1; padding: 20rpx; box-sizing: border-box; }
.order-card { background: #fff; border-radius: 12rpx; padding: 20rpx; margin-bottom: 20rpx; }
.order-head { font-size: 24rpx; color: #999; margin-bottom: 14rpx; }
.order-goods { display: flex; gap: 12rpx; }
.goods-thumb { width: 120rpx; height: 120rpx; border-radius: 8rpx; background: #f0f0f0; }
.order-foot { display: flex; align-items: center; justify-content: flex-end; gap: 20rpx; margin-top: 16rpx; }
.order-foot .amount { color: #FF370B; font-weight: 600; }
.goods-row { display: flex; align-items: center; background: #fff; border-radius: 12rpx; padding: 16rpx; margin-bottom: 16rpx; }
.goods-thumb-lg { width: 140rpx; height: 140rpx; border-radius: 8rpx; background: #f0f0f0; flex-shrink: 0; }
.goods-info { flex: 1; margin-left: 20rpx; min-width: 0; }
.goods-name { font-size: 28rpx; color: #222; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.goods-price { font-size: 30rpx; color: #FF370B; font-weight: 600; margin-top: 12rpx; }
.send-btn { background: linear-gradient(91deg, #FF7658, #FF370B); color: #fff; font-size: 24rpx; padding: 10rpx 28rpx; border-radius: 30rpx; flex-shrink: 0; }
.empty { text-align: center; color: #999; font-size: 26rpx; padding: 80rpx 0; }
</style>

View File

@ -1,246 +0,0 @@
/* 合同申请表单样式 */
.contract-apply-container {
padding: 30rpx;
min-height: 100vh;
}
.page-header {
margin-bottom: 15rpx;
display: flex;
justify-content: space-between;
align-items: center;
}
page {
padding-bottom: 0rpx;
}
.page-header h1 {
font-size: 36rpx;
font-weight: bold;
color: #333;
margin-bottom: 10rpx;
}
.download-btn{
height: 65rpx;
border: none;
border-radius: 10rpx;
line-height: 65rpx;
background-color: #409eff;
color: #fff;
margin-right: 0rpx;
}
.page-header .subtitle {
font-size: 28rpx;
color: #666;
}
.contract-form {
background-color: #fff;
border-radius: 10rpx;
padding: 30rpx;
}
.form-item {
margin-bottom: 30rpx;
}
.form-label {
font-size: 28rpx;
color: #333;
margin-bottom: 10rpx;
display: block;
}
.form-label.required::after {
content: '*';
color: #e64340;
margin-left: 4rpx;
}
.form-input,
.form-select {
width: 100%;
height: 80rpx;
border: 1rpx solid #d9d9d9;
border-radius: 8rpx;
padding: 0 20rpx;
font-size: 28rpx;
box-sizing: border-box;
line-height: 80rpx;
}
.form-input:focus,
.form-select:focus {
border-color: #409eff;
outline: none;
}
.form-select {
appearance: none;
background: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"><path fill="%23999" d="M840.4 300H183.6c-19.7 0-30.7 20.8-18.5 35l328.4 380.8c9.4 10.9 27.5 10.9 37 0L858.9 335c12.2-14.2 1.2-35-18.5-35z"></path></svg>') no-repeat right 20rpx center;
background-size: 24rpx 24rpx;
}
.bottom-btn{
display: flex;
justify-content: space-between;
}
/* 按钮样式 */
.sign-btn,
.submit-btn1,
.submit-btn {
width: 100%;
height: 90rpx;
border: none;
border-radius: 45rpx;
font-size: 32rpx;
font-weight: bold;
margin-bottom: 20rpx;
transition: all 0.3s;
line-height: 90rpx;
}
.sign-btn {
background-color: #f0f0f0;
color: #666;
}
.sign-btn:active {
background-color: #e0e0e0;
}
.submit-btn {
background-color: #409eff;
color: #fff;
margin-left: 5rpx;
}
.submit-btn1 {
background-color: #ff4016;
color: #fff;
margin-right: 5rpx;
}
.submit-btn:active {
background-color: #66b1ff;
}
/* 响应式调整 */
@media screen and (max-width: 768px) {
.contract-apply-container {
padding: 20rpx;
}
.contract-form {
padding: 20rpx;
}
}
/* 自定义弹窗样式 */
.custom-modal-overlay {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(0, 0, 0, 0.5);
display: flex;
justify-content: center;
align-items: center;
z-index: 9999;
}
.custom-modal {
width: 100%;
max-width: 650rpx;
background-color: #fff;
border-radius: 12rpx;
overflow: hidden;
box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.15);
}
.modal-header {
padding: 30rpx;
border-bottom: 2rpx solid #f0f0f0;
display: flex;
justify-content: space-between;
align-items: center;
}
.modal-header h3 {
margin: 0;
font-size: 32rpx;
font-weight: 600;
color: #333;
}
.close-btn {
background: none;
border: none;
font-size: 40rpx;
color: #999;
cursor: pointer;
padding: 0;
width: 40rpx;
height: 40rpx;
display: flex;
justify-content: center;
align-items: center;
}
.modal-content {
padding: 40rpx 30rpx;
}
.modal-content p {
margin: 0 0 30rpx 0;
font-size: 28rpx;
color: #666;
line-height: 1.5;
}
.link-container {
background-color: #f5f5f5;
padding: 20rpx;
border-radius: 8rpx;
word-break: break-all;
}
.link-text {
color: #007aff;
font-size: 26rpx;
text-decoration: underline;
cursor: pointer;
}
.modal-footer {
padding: 0 30rpx 30rpx;
display: flex;
justify-content: center;
}
.confirm-btn {
background-color: #007aff;
color: #fff;
border: none;
line-height: 80rpx;
border-radius: 8rpx;
font-size: 28rpx;
cursor: pointer;
min-width: 200rpx;
height: 80rpx;
}
.confirm-btn2 {
border: none;
line-height: 80rpx;
border-radius: 8rpx;
font-size: 28rpx;
cursor: pointer;
min-width: 200rpx;
height: 80rpx;
}

View File

@ -1,511 +0,0 @@
<template>
<view class="contract-apply-container">
<view class="page-header">
<h1>合同申请</h1>
<button type="button" class="download-btn" @click="download">合同下载</button>
</view>
<form class="contract-form">
<!-- 合同类别 -->
<view class="form-item">
<view class="form-label required">合同类别</view>
<view class="form-input-wrapper">
<view class="form-select" @click="handleEcTypeClick">
{{ getEcTypeLabel({ value: formData.ec_type_code }) || formData.ec_type_code || '请选择合同类别' }}
</view>
<u-picker :show="showEcTypePicker" :columns="[ecTypeOptions]" keyName="label" @confirm="onEcTypeConfirm"
@cancel="showEcTypePicker = false" @close="showEcTypePicker = false" :closeOnClickOverlay="true"></u-picker>
</view>
</view>
<!-- 法人/经营者证件类型 -->
<view class="form-item">
<view class="form-label required">法人/经营者证件类型</view>
<view class="form-input-wrapper">
<view class="form-select" @click="handleCertTypeClick">
{{ getCertTypeLabel(formData.cert_type) || '请选择证件类型' }}
</view>
<u-picker :show="showCertTypePicker" :columns="[certTypeOptions]" keyName="label" @confirm="onCertTypeConfirm"
@cancel="showCertTypePicker = false" @close="showCertTypePicker = false"
:closeOnClickOverlay="true"></u-picker>
</view>
</view>
<!-- 法人/经营者姓名 -->
<view class="form-item">
<view class="form-label required">法人/经营者姓名</view>
<input type="text" class="form-input" v-model="formData.cert_name" placeholder="请输入姓名" />
</view>
<!-- 法人/经营者证件号码 -->
<view class="form-item">
<view class="form-label required">法人/经营者证件号码</view>
<input type="text" class="form-input" v-model="formData.cert_no" placeholder="请输入证件号码" />
</view>
<!-- 签约手机号 -->
<view class="form-item">
<view class="form-label required">签约手机号</view>
<input type="tel" class="form-input" v-model="formData.mobile" placeholder="请输入手机号" />
</view>
<!-- 营业执照号 -->
<view class="form-item">
<view class="form-label">营业执照号</view>
<input type="text" class="form-input" v-model="formData.business_license_no" placeholder="请输入营业执照号(可选)" />
</view>
<!-- 营业执照名称 -->
<view class="form-item">
<view class="form-label">营业执照名称</view>
<input type="text" class="form-input" v-model="formData.business_license_name" placeholder="请输入营业执照名称(可选)" />
</view>
<!-- 企业/经营者结算开户行号 -->
<view class="form-item">
<view class="form-label required">企业/经营者结算开户行号</view>
<input type="text" class="form-input" v-model="formData.openning_bank_code" placeholder="请输入开户行号" />
</view>
<!-- 企业/经营者结算开户行名称 -->
<view class="form-item">
<view class="form-label required">企业/经营者结算开户行名称</view>
<input type="text" class="form-input" v-model="formData.openning_bank_name" placeholder="请输入开户行名称" />
</view>
<!-- 企业/经营者结算卡性质 -->
<view class="form-item">
<view class="form-label required">企业/经营者结算卡性质</view>
<view class="form-input-wrapper">
<view class="form-select" @click="handleAcctTypeClick">
{{ formData.acct_type_code ? (formData.acct_type_code === '57' ? '对公' : '对私') : '请选择结算卡性质' }}
</view>
<u-picker :show="showAcctTypePicker" :columns="[acctTypeOptions]" keyName="label" @confirm="onAcctTypeConfirm"
@cancel="showAcctTypePicker = false" @close="showAcctTypePicker = false"
:closeOnClickOverlay="true"></u-picker>
</view>
</view>
<!-- 企业/经营者结算卡号 -->
<view class="form-item">
<view class="form-label required">企业/经营者结算卡号</view>
<input type="text" class="form-input" v-model="formData.acct_no" placeholder="请输入结算卡号" />
</view>
<!-- 企业/经营者结算卡名称 -->
<view class="form-item">
<view class="form-label required">企业/经营者结算卡名称</view>
<input type="text" class="form-input" v-model="formData.acct_name" placeholder="请输入结算卡名称" />
</view>
<!-- 签署协议按钮 -->
<button type="button" class="sign-btn" @click="goToSignAgreement">签署协议</button>
<!-- 提交申请按钮 -->
<view class="bottom-btn">
<button type="button" class="submit-btn1" @click="ecQuery">结果查询</button>
<button type="button" class="submit-btn" @click="submitApplication">提交申请</button>
</view>
</form>
<!-- 自定义弹窗 -->
<view v-if="showCustomModal" class="custom-modal-overlay" @click="closeModal">
<view class="custom-modal" @click.stop>
<view class="modal-content">
<p>查询结果前请先确认是否在以下页面中填写信息</p>
<view class="link-container">
<text class="link-text" @click="openApplyUrl">{{ applyUrl || '暂无链接' }}</text>
</view>
</view>
<view class="modal-footer">
<button type="button" class="confirm-btn2" @click="closeModal">取消</button>
<button type="button" class="confirm-btn" @click="confirmQuery">确认</button>
</view>
</view>
</view>
</view>
</template>
<script>
import { picUrl, menuButtonInfo, request, NavgateTo, RequsetUrl } from "../../../utils";
import { apiArr } from "../../../api/contract";
export default {
data() {
return {
formData: {
mch_id: uni.getStorageSync('mchId'),
ec_type_code: 'Ec007',
cert_type: '',
cert_name: '',
cert_no: '',
mobile: '',
business_license_no: '',
business_license_name: '',
openning_bank_code: '',
openning_bank_name: '',
acct_type_code: '',
acct_no: '',
acct_name: '',
ec_content_parameters: '',
},
// picker显示状态
showEcTypePicker: false,
showCertTypePicker: false,
showAcctTypePicker: false,
// picker选项数据
ecTypeOptions: [
{ label: '特约商户支付服务合作协议V4.1 + 结算授权委托书', value: 'Ec007' }
],
certTypeOptions: [
{ label: '身份证', value: 'RESIDENT_ID' },
{ label: '护照', value: 'PASSPORT' },
{ label: '港澳居民往来内地通行证', value: 'HK_MACAO_PASS' },
{ label: '台湾居民来往大陆通行证', value: 'TAIWAN_PASS' }
],
acctTypeOptions: [
{ label: '对公', value: '57' },
{ label: '对私', value: '58' }
],
// 自定义弹窗状态
showCustomModal: false,
applyUrl: ''
};
},
onLoad(options) {
// 如果从上一个页面返回并携带了ec_content参数,则设置
if (options.ec_content) {
this.formData.ec_content_parameters = options.ec_content;
}
// 监听协议签署成功事件
uni.$on('agreementSigned', (data) => {
if (data && data.ec_content) {
this.formData.ec_content_parameters = data.ec_content;
uni.showToast({
title: '协议签署成功',
icon: 'success'
});
}
});
},
// 页面卸载时移除事件监听
onUnload() {
uni.$off('agreementSigned');
},
methods: {
//下载合同
download() {
const storeValue = uni.getStorageSync('storeValue');
if (!storeValue || !storeValue.ec_apply_id) {
uni.showToast({
title: '请先提交申请',
icon: 'none'
});
return;
}
const params = {
ec_apply_id: storeValue.ec_apply_id
};
uni.showLoading({
title: '下载中',
mask: true
});
request(apiArr.ecDownload, "POST", params).then(res => {
const respData = res.resp_data;
// 检查合同状态是否为已完成
if (respData.ec_status === 'COMPLETED' && respData.ec_file) {
try {
// 处理Base64编码的文件数据(URL安全的Base64)
const base64Data = respData.ec_file;
// 替换URL安全的Base64字符
const safeBase64 = base64Data.replace(/-/g, '+').replace(/_/g, '/');
// 文件名(可以根据需要设置)
const fileName = `contract_${respData.ec_apply_id || Date.now()}.pdf`;
// 在uni-app中,我们需要使用文件系统API来保存文件
// 首先获取文件系统管理器
const fs = uni.getFileSystemManager();
// 生成临时文件路径
const tempFilePath = `${uni.env.USER_DATA_PATH}/${fileName}`;
try {
// 将Base64数据写入临时文件
fs.writeFile({
filePath: tempFilePath,
data: safeBase64,
encoding: 'base64',
success: () => {
uni.hideLoading();
uni.showToast({
title: '合同下载成功',
icon: 'success'
});
console.log('文件保存成功:', tempFilePath);
// 打开文件
uni.openDocument({
filePath: tempFilePath,
showMenu: true,
success: (openRes) => {
console.log('文件打开成功:', openRes);
},
fail: (openErr) => {
console.error('文件打开失败:', openErr);
uni.showToast({
title: '文件打开失败',
icon: 'none'
});
}
});
},
fail: (writeErr) => {
uni.hideLoading();
console.error('文件写入失败:', writeErr);
uni.showToast({
title: '合同下载失败',
icon: 'none'
});
}
});
} catch (fsError) {
uni.hideLoading();
console.error('文件系统操作失败:', fsError);
uni.showToast({
title: '文件系统错误',
icon: 'none'
});
}
} catch (error) {
uni.hideLoading();
console.error('处理文件数据失败:', error);
uni.showToast({
title: '文件处理失败',
icon: 'none'
});
}
} else {
uni.hideLoading();
if (respData.ec_status !== 'COMPLETED') {
uni.showToast({
title: '电子合同尚未完成',
icon: 'none'
});
} else {
uni.showToast({
title: '合同文件不存在',
icon: 'none'
});
}
}
}).catch(err => {
uni.hideLoading();
console.error('下载合同失败:', err);
uni.showToast({
title: '下载失败,请重试',
icon: 'none'
});
})
},
// 合同查询
ecQuery() {
// 显示自定义弹窗
this.applyUrl = uni.getStorageSync('applyUrl');
this.showCustomModal = true;
},
// 关闭自定义弹窗
closeModal() {
this.showCustomModal = false;
},
// 打开申请链接
openApplyUrl() {
if (this.applyUrl) {
uni.navigateTo({
url: `/pages/webview/webview?url=${encodeURIComponent(this.applyUrl)}`
});
}
},
// 确认查询
confirmQuery() {
this.showCustomModal = false;
// 继续查询流程
const storeValue = uni.getStorageSync('storeValue');
if (!storeValue || !storeValue.ec_apply_id) {
uni.showToast({
title: '请先提交申请',
icon: 'none'
});
return;
}
const params = {
ec_apply_id: storeValue.ec_apply_id
}
request(apiArr.ecQuery, "POST", params).then(res => {
if (res.resp_data.ec_status === 'COMPLETED') {
uni.showToast({
title: '申请通过',
icon: 'success'
});
} else {
uni.showToast({
title: '申请未通过',
icon: 'none'
});
}
})
},
// 获取合同类别显示文本
getEcTypeLabel(code) {
// 兼容直接传入value或者包含value属性的对象
const targetValue = typeof code === 'string' ? code : (code && code.value ? code.value : code);
const option = this.ecTypeOptions.find(item => item.value === targetValue);
return option ? option.label : null;
},
// 获取证件类型显示文本
getCertTypeLabel(type) {
const option = this.certTypeOptions.find(item => item.value === type);
return option ? option.label : null;
},
// 调试点击事件
handleEcTypeClick() {
this.showEcTypePicker = true;
},
handleCertTypeClick() {
this.showCertTypePicker = true;
},
handleAcctTypeClick() {
this.showAcctTypePicker = true;
},
// 合同类别选择确认
onEcTypeConfirm(e) {
const selectedValue = e.value[0];
// 查找对应的选项对象
const selectedOption = this.ecTypeOptions.find(item => item.value === selectedValue);
this.formData.ec_type_code = selectedOption ? selectedOption.value : selectedValue;
this.showEcTypePicker = false;
},
// 证件类型选择确认
onCertTypeConfirm(e) {
const selectedValue = e.value[0];
const selectedOption = this.certTypeOptions.find(item => item.value === selectedValue.value);
this.formData.cert_type = selectedOption ? selectedOption.value : selectedValue;
this.showCertTypePicker = false;
},
// 结算卡性质选择确认
onAcctTypeConfirm(e) {
const selectedValue = e.value[0];
const selectedOption = this.acctTypeOptions.find(item => item.value === selectedValue.value);
this.formData.acct_type_code = selectedOption ? selectedOption.value : selectedValue;
this.showAcctTypePicker = false;
},
goToSignAgreement() {
NavgateTo('/packages/customerService/contract/index', {
// 监听协议页面传递回来的数据
onAgreementSigned: (data) => {
if (data && data.ec_content) {
this.formData.ec_content_parameters = data.ec_content;
uni.showToast({
title: '协议签署成功',
icon: 'success'
});
}
}
});
},
submitApplication() {
// 表单验证
if (!this.validateForm()) {
return;
}
request(apiArr.ecApply, "POST", this.formData).then(res => {
uni.showToast({
title: '提交成功',
icon: 'success'
});
uni.setStorageSync('storeValue', { ec_apply_id: res.resp_data.ec_apply_id });
uni.setStorageSync('applyUrl', res.resp_data.result_url);
})
},
// 表单验证方法
validateForm() {
const { formData } = this;
if (!formData.ec_type_code) {
uni.showToast({ title: '请选择合同类别', icon: 'none' });
return false;
}
if (!formData.cert_type) {
uni.showToast({ title: '请选择法人/经营者证件类型', icon: 'none' });
return false;
}
if (!formData.cert_name) {
uni.showToast({ title: '请输入法人/经营者姓名', icon: 'none' });
return false;
}
if (!formData.cert_no) {
uni.showToast({ title: '请输入法人/经营者证件号码', icon: 'none' });
return false;
}
// 验证手机号格式
if (!formData.mobile) {
uni.showToast({ title: '请输入签约手机号', icon: 'none' });
return false;
} else if (!/^1[3-9]\d{9}$/.test(formData.mobile)) {
uni.showToast({ title: '手机号格式不正确', icon: 'none' });
return false;
}
if (!formData.openning_bank_code) {
uni.showToast({ title: '请输入企业/经营者结算开户行号', icon: 'none' });
return false;
}
if (!formData.openning_bank_name) {
uni.showToast({ title: '请输入企业/经营者结算开户行名称', icon: 'none' });
return false;
}
if (!formData.acct_type_code) {
uni.showToast({ title: '请选择企业/经营者结算卡性质', icon: 'none' });
return false;
}
if (!formData.acct_no) {
uni.showToast({ title: '请输入企业/经营者结算卡号', icon: 'none' });
return false;
}
if (!formData.acct_name) {
uni.showToast({ title: '请输入企业/经营者结算卡名称', icon: 'none' });
return false;
}
if (!formData.ec_content_parameters) {
uni.showToast({ title: '请先点击签署协议并完成协议签署', icon: 'none' });
return false;
}
return true;
}
}
};
</script>
<style>
@import url("./index.css");
</style>

View File

@ -1,144 +0,0 @@
<!-- 未来社区 - 活动详情 -->
<template>
<view class="ad-page">
<view class="fc-nav" :style="{ paddingTop: statusBarTop + 'px' }">
<view class="fc-nav-bar">
<view class="fc-back" @tap="goBack"><u-icon name="arrow-left" color="#1a1a1a" size="38"></u-icon></view>
<text class="fc-nav-title">活动详情</text>
<view class="ad-star" @tap="onFollow" v-if="act"><u-icon :name="followed ? 'star-fill' : 'star'" :color="followed ? '#ff9a12' : '#9098a0'" size="40"></u-icon></view>
</view>
</view>
<view class="ad-body" v-if="act">
<!-- 封面 -->
<view class="ad-banner">
<image v-if="act.image" :src="act.image" class="ad-banner-img" mode="aspectFill" />
<view v-else class="ad-banner-img" :style="{ background: sceneBg(act.scene) }"></view>
<text class="ad-badge" :style="statusStyle(act.status)">{{ statusLabel(act.status) }}</text>
</view>
<!-- 摘要 -->
<view class="ad-summary">
<text class="ad-title">{{ act.title }}</text>
<view class="ad-sum-row">
<view class="ad-dist"><u-icon name="map" color="#9098a0" size="24"></u-icon><text>{{ act.distance || '社区内' }}</text></view>
<view class="ad-call" v-if="act.phone" @tap="onCall"><u-icon name="phone" color="#e9272d" size="24"></u-icon><text>联系电话</text></view>
</view>
<text class="ad-addr">{{ act.address || act.place }}</text>
</view>
<!-- 活动说明 -->
<view class="ad-card">
<text class="ad-card-tt">活动说明</text>
<view class="ad-info-row"><u-icon name="account" color="#9098a0" size="26"></u-icon><text class="ad-lb">报名人数</text><text class="ad-vl">{{ act.enrolled || act.quota }}</text></view>
<view class="ad-info-row"><u-icon name="clock" color="#9098a0" size="26"></u-icon><text class="ad-lb">报名时间</text><text class="ad-vl">{{ act.signupRange || act.deadline }}</text></view>
<view class="ad-info-row"><u-icon name="calendar" color="#9098a0" size="26"></u-icon><text class="ad-lb">活动时间</text><text class="ad-vl">{{ act.time }}</text></view>
<view class="ad-info-row"><u-icon name="integral" color="#9098a0" size="26"></u-icon><text class="ad-lb">报名费用</text><text class="ad-vl">{{ act.fee || '免费' }}</text></view>
<view class="ad-info-row"><u-icon name="server-man" color="#9098a0" size="26"></u-icon><text class="ad-lb">组织方</text><text class="ad-vl">{{ act.organizer || '九九社区' }}</text></view>
<view class="ad-info-row"><u-icon name="phone" color="#9098a0" size="26"></u-icon><text class="ad-lb">联系电话</text><text class="ad-vl">{{ act.phone || '暂无' }}</text></view>
</view>
<!-- 活动介绍 -->
<view class="ad-card">
<text class="ad-card-tt">活动介绍</text>
<rich-text class="ad-content" :nodes="act.content"></rich-text>
<view class="ad-points" v-if="act.points && act.points.length">
<view class="ad-point" v-for="(p, i) in act.points" :key="i"><text class="ad-dot">•</text><text class="ad-pt">{{ p }}</text></view>
</view>
</view>
<!-- 参与须知 -->
<view class="ad-card">
<text class="ad-card-tt">参与须知</text>
<view class="ad-point" v-for="(p, i) in ACTIVITY_REGISTER_NOTICE" :key="i"><text class="ad-dot">•</text><text class="ad-pt">{{ p }}</text></view>
</view>
<view class="fc-spacer"></view>
</view>
<view v-else class="fc-empty">活动不存在</view>
<view class="ad-foot" v-if="act">
<view class="ad-foot-fee"><text class="ad-foot-lb">报名费用</text><text class="ad-foot-vl">{{ act.fee || '免费' }}</text></view>
<text class="ad-join" :class="{ done: joined, ended: act.status === 'ended' }" @tap="onJoin">{{ joinLabel }}</text>
</view>
</view>
</template>
<script>
import { findActivity, ACTIVITY_STATUS_META, ACTIVITY_SCENE_BG, ACTIVITY_REGISTER_NOTICE, isActivityJoined, toggleActivityJoin, isActivityFollowed, toggleActivityFollow } from '../data.js'
export default {
data() { return { statusBarTop: 20, act: null, joined: false, followed: false, ACTIVITY_REGISTER_NOTICE } },
onLoad(options) {
const sys = uni.getSystemInfoSync()
this.statusBarTop = sys.statusBarHeight || 20
this.act = findActivity(options && options.id) || null
if (this.act) { this.joined = isActivityJoined(this.act.id); this.followed = isActivityFollowed(this.act.id) }
},
computed: {
joinLabel() {
if (!this.act) return ''
if (this.act.status === 'ended') return '活动已结束'
return this.joined ? '已报名 · 点击取消' : '立即报名'
}
},
methods: {
statusLabel(s) { return (ACTIVITY_STATUS_META[s] || {}).label || '' },
statusStyle(s) { const m = ACTIVITY_STATUS_META[s] || {}; return { color: m.color, background: m.bg } },
sceneBg(s) { return ACTIVITY_SCENE_BG[s] || ACTIVITY_SCENE_BG.handicraft },
goBack() { uni.navigateBack({ delta: 1 }) },
onCall() { uni.showToast({ title: '联系电话:' + this.act.phone, icon: 'none' }) },
onFollow() { this.followed = toggleActivityFollow(this.act.id); uni.showToast({ title: this.followed ? '已关注活动' : '已取消关注', icon: 'none' }) },
onJoin() {
if (this.act.status === 'ended') { uni.showToast({ title: '活动已结束', icon: 'none' }); return }
this.joined = toggleActivityJoin(this.act.id)
uni.showToast({ title: this.joined ? '报名成功' : '已取消报名', icon: 'none' })
}
}
}
</script>
<style scoped>
page { background: #f5f6f7; }
.ad-page { min-height: 100vh; background: #f5f6f7; padding-bottom: 140rpx; }
.fc-nav { position: sticky; top: 0; z-index: 100; background: #fff; padding: 0 24rpx; }
.fc-nav-bar { position: relative; display: flex; align-items: center; justify-content: center; height: 88rpx; }
.fc-back { position: absolute; left: 0; top: 0; height: 88rpx; display: flex; align-items: center; }
.fc-nav-title { font-size: 34rpx; font-weight: 700; color: #1a1a1a; }
.ad-star { position: absolute; right: 0; top: 0; height: 88rpx; display: flex; align-items: center; }
.ad-body { padding: 20rpx; }
.ad-banner { position: relative; border-radius: 20rpx; overflow: hidden; }
.ad-banner-img { width: 100%; height: 360rpx; display: block; }
.ad-badge { position: absolute; left: 20rpx; top: 20rpx; font-size: 22rpx; padding: 4rpx 16rpx; border-radius: 6rpx; }
.ad-summary { background: #fff; border-radius: 20rpx; padding: 26rpx; margin-top: 16rpx; }
.ad-title { font-size: 38rpx; font-weight: 800; color: #1a1a1a; }
.ad-sum-row { display: flex; align-items: center; justify-content: space-between; margin-top: 16rpx; }
.ad-dist { display: flex; align-items: center; font-size: 24rpx; color: #6b7078; }
.ad-dist text { margin-left: 8rpx; }
.ad-call { display: flex; align-items: center; font-size: 24rpx; color: #e9272d; }
.ad-call text { margin-left: 6rpx; }
.ad-addr { display: block; margin-top: 14rpx; font-size: 24rpx; color: #9098a0; }
.ad-card { background: #fff; border-radius: 20rpx; padding: 26rpx; margin-top: 16rpx; }
.ad-card-tt { display: block; font-size: 30rpx; font-weight: 700; color: #1a1a1a; margin-bottom: 18rpx; }
.ad-info-row { display: flex; align-items: center; padding: 14rpx 0; }
.ad-lb { width: 130rpx; margin-left: 14rpx; font-size: 26rpx; color: #9098a0; }
.ad-vl { flex: 1; font-size: 26rpx; color: #333; }
.ad-content { display: block; font-size: 28rpx; color: #333; line-height: 1.8; }
.ad-points { margin-top: 12rpx; }
.ad-point { display: flex; margin-top: 12rpx; }
.ad-dot { color: #e9272d; margin-right: 12rpx; font-size: 28rpx; line-height: 1.6; }
.ad-pt { flex: 1; font-size: 26rpx; color: #555; line-height: 1.6; }
.ad-foot { position: fixed; left: 0; right: 0; bottom: 0; background: #fff; display: flex; align-items: center; padding: 14rpx 24rpx calc(14rpx + env(safe-area-inset-bottom)); box-shadow: 0 -4rpx 20rpx rgba(0,0,0,0.04); }
.ad-foot-fee { flex: 1; display: flex; flex-direction: column; }
.ad-foot-lb { font-size: 20rpx; color: #9098a0; }
.ad-foot-vl { font-size: 34rpx; color: #e9272d; font-weight: 700; }
.ad-join { flex-shrink: 0; background: linear-gradient(90deg, #ff5b5b 0%, #ef111b 100%); color: #fff; font-size: 30rpx; font-weight: 700; padding: 20rpx 70rpx; border-radius: 44rpx; }
.ad-join.done { background: #fff0ee; color: #ef111b; }
.ad-join.ended { background: #eef0f3; color: #9aa0a8; }
.fc-empty { text-align: center; color: #9aa0a8; font-size: 26rpx; padding: 120rpx 0; }
.fc-spacer { height: 20rpx; }
</style>

View File

@ -1,99 +0,0 @@
<!-- 未来社区 - 社区活动列表 -->
<template>
<view class="al-page">
<view class="fc-nav" :style="{ paddingTop: statusBarTop + 'px' }">
<view class="fc-nav-bar">
<view class="fc-back" @tap="goBack"><u-icon name="arrow-left" color="#1a1a1a" size="38"></u-icon></view>
<text class="fc-nav-title">社区活动</text>
</view>
<view class="al-search">
<u-icon name="search" color="#9098a0" size="28"></u-icon>
<input class="al-search-input" v-model="keyword" placeholder="搜索活动名称、地点" placeholder-class="al-ph" />
</view>
<scroll-view class="al-tabs" scroll-x>
<text class="al-tab" :class="{ on: activeTab === t.key }" v-for="t in ACTIVITY_TABS" :key="t.key" @tap="activeTab = t.key">{{ t.label }}</text>
</scroll-view>
</view>
<view class="al-body">
<view class="al-card" v-for="a in filtered" :key="a.id" @tap="goDetail(a)">
<view class="al-cover">
<image v-if="a.image" :src="a.image" class="al-img" mode="aspectFill" />
<view v-else class="al-img" :style="{ background: sceneBg(a.scene) }"></view>
<text class="al-badge" :style="statusStyle(a.status)">{{ statusLabel(a.status) }}</text>
</view>
<view class="al-info">
<text class="al-title">{{ a.title }}</text>
<view class="al-row"><u-icon name="map" color="#9098a0" size="22"></u-icon><text>{{ a.place }}</text></view>
<view class="al-row"><u-icon name="clock" color="#9098a0" size="22"></u-icon><text>{{ a.time }}</text></view>
<view class="al-row"><u-icon name="account" color="#9098a0" size="22"></u-icon><text>{{ a.enrolled || a.quota }}</text></view>
<view class="al-foot">
<view class="al-row"><u-icon name="map" color="#c2c7ce" size="20"></u-icon><text class="al-dist">{{ a.distance || '社区内' }}</text></view>
<text class="al-fee">{{ a.fee || '免费' }}</text>
</view>
</view>
</view>
<view class="fc-empty" v-if="!filtered.length">暂无相关活动</view>
</view>
</view>
</template>
<script>
import { NavgateTo } from '@/utils'
import { activities, ACTIVITY_TABS, ACTIVITY_STATUS_META, ACTIVITY_SCENE_BG } from '../data.js'
export default {
data() { return { statusBarTop: 20, ACTIVITY_TABS, activeTab: 'all', keyword: '', activities } },
onLoad(options) {
const sys = uni.getSystemInfoSync()
this.statusBarTop = sys.statusBarHeight || 20
if (options && options.tab && ACTIVITY_TABS.some(t => t.key === options.tab)) this.activeTab = options.tab
},
computed: {
filtered() {
const kw = this.keyword.trim()
return this.activities.filter(a => {
const okTab = this.activeTab === 'all' || a.status === this.activeTab
const okKw = !kw || (a.title + a.subtitle + a.place).indexOf(kw) >= 0
return okTab && okKw
})
}
},
methods: {
statusLabel(s) { return (ACTIVITY_STATUS_META[s] || {}).label || '' },
statusStyle(s) { const m = ACTIVITY_STATUS_META[s] || {}; return { color: m.color, background: m.bg } },
sceneBg(s) { return ACTIVITY_SCENE_BG[s] || ACTIVITY_SCENE_BG.handicraft },
goBack() { uni.navigateBack({ delta: 1 }) },
goDetail(a) { NavgateTo('/packages/futureCommunity/activityDetail/index?id=' + a.id, { isLogin: false }) }
}
}
</script>
<style scoped>
page { background: #f5f6f7; }
.al-page { min-height: 100vh; background: #f5f6f7; }
.fc-nav { position: sticky; top: 0; z-index: 100; background: #fff; padding: 0 24rpx 12rpx; }
.fc-nav-bar { position: relative; display: flex; align-items: center; justify-content: center; height: 88rpx; }
.fc-back { position: absolute; left: 0; top: 0; height: 88rpx; display: flex; align-items: center; }
.fc-nav-title { font-size: 34rpx; font-weight: 700; color: #1a1a1a; }
.al-search { display: flex; align-items: center; height: 68rpx; background: #f4f5f7; border-radius: 34rpx; padding: 0 24rpx; }
.al-search-input { flex: 1; margin-left: 12rpx; font-size: 26rpx; color: #333; }
.al-ph { color: #9098a0; }
.al-tabs { white-space: nowrap; padding: 14rpx 0 4rpx; }
.al-tab { display: inline-block; font-size: 28rpx; color: #6b7078; padding: 8rpx 6rpx; margin-right: 40rpx; }
.al-tab.on { color: #e9272d; font-weight: 700; }
.al-body { padding: 20rpx; }
.al-card { background: #fff; border-radius: 22rpx; overflow: hidden; margin-bottom: 20rpx; }
.al-cover { position: relative; width: 100%; height: 300rpx; }
.al-img { width: 100%; height: 300rpx; display: block; }
.al-badge { position: absolute; left: 16rpx; top: 16rpx; font-size: 20rpx; padding: 4rpx 14rpx; border-radius: 6rpx; }
.al-info { padding: 22rpx 24rpx; display: flex; flex-direction: column; }
.al-title { font-size: 32rpx; font-weight: 700; color: #1a1a1a; }
.al-row { display: flex; align-items: center; margin-top: 12rpx; font-size: 24rpx; color: #6b7078; }
.al-row text { margin-left: 8rpx; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
.al-foot { display: flex; align-items: center; justify-content: space-between; margin-top: 16rpx; }
.al-dist { color: #9098a0; }
.al-fee { font-size: 28rpx; color: #e9272d; font-weight: 700; }
.fc-empty { text-align: center; color: #9aa0a8; font-size: 26rpx; padding: 120rpx 0; }
</style>

View File

@ -1,66 +0,0 @@
<!-- 未来社区 - 便民电话 -->
<template>
<view class="cp-page">
<view class="fc-nav" :style="{ paddingTop: statusBarTop + 'px' }">
<view class="fc-nav-bar">
<view class="fc-back" @tap="goBack"><u-icon name="arrow-left" color="#1a1a1a" size="38"></u-icon></view>
<text class="fc-nav-title">便民电话</text>
</view>
</view>
<view class="cp-body">
<view class="cp-tip"><u-icon name="info-circle" color="#f53d42" size="28"></u-icon><text>{{ phoneTip }}</text></view>
<view class="cp-card" v-for="item in phoneList" :key="item.id">
<view class="cp-icon" :style="{ background: item.iconBg }"><u-icon :name="item.icon" color="#fff" size="44"></u-icon></view>
<view class="cp-main">
<text class="cp-name">{{ item.name }}</text>
<text class="cp-phone">{{ item.phone }}</text>
<text class="cp-time">{{ item.time }}</text>
</view>
<view class="cp-dial" @tap="onDial(item)"><u-icon name="phone" color="#f53d42" size="40"></u-icon></view>
</view>
<view class="fc-spacer"></view>
</view>
</view>
</template>
<script>
import { phoneTip, phoneList } from '../data.js'
export default {
data() { return { statusBarTop: 20, phoneTip, phoneList } },
onLoad() {
const sys = uni.getSystemInfoSync()
this.statusBarTop = sys.statusBarHeight || 20
},
methods: {
goBack() { uni.navigateBack({ delta: 1 }) },
onDial(item) {
const tel = item.phone.replace(/\s/g, '')
uni.makePhoneCall({ phoneNumber: tel, fail: () => uni.showToast({ title: '拨打 ' + item.name + ':' + item.phone, icon: 'none' }) })
}
}
}
</script>
<style scoped>
page { background: #f5f6f7; }
.cp-page { min-height: 100vh; background: #f5f6f7; }
.fc-nav { position: sticky; top: 0; z-index: 100; background: #fff; padding: 0 24rpx 16rpx; }
.fc-nav-bar { position: relative; display: flex; align-items: center; justify-content: center; height: 88rpx; }
.fc-back { position: absolute; left: 0; top: 0; height: 88rpx; display: flex; align-items: center; }
.fc-nav-title { font-size: 34rpx; font-weight: 700; color: #1a1a1a; }
.cp-body { padding: 20rpx; }
.cp-tip { display: flex; align-items: center; background: #fff2ee; border-radius: 25rpx; padding: 22rpx 28rpx; }
.cp-tip text { margin-left: 12rpx; font-size: 24rpx; color: #676c74; }
.cp-card { display: flex; align-items: center; background: #fff; border-radius: 20rpx; border: 1rpx solid #eeeef0; box-shadow: 0 5rpx 16rpx rgba(0,0,0,0.055); padding: 28rpx; margin-top: 20rpx; }
.cp-icon { flex-shrink: 0; width: 96rpx; height: 96rpx; border-radius: 22rpx; display: flex; align-items: center; justify-content: center; margin-right: 20rpx; }
.cp-main { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.cp-name { font-size: 30rpx; font-weight: 700; color: #111; }
.cp-phone { font-size: 26rpx; color: #666b72; margin-top: 8rpx; }
.cp-time { font-size: 22rpx; color: #9098a0; margin-top: 8rpx; }
.cp-dial { flex-shrink: 0; width: 84rpx; height: 84rpx; border-radius: 999rpx; background: #fff0f0; display: flex; align-items: center; justify-content: center; }
.fc-spacer { height: 40rpx; }
</style>

View File

@ -1,194 +0,0 @@
/**
* 未来社区(九九社区)静态内容数据 —— 1:1 还原设计稿 mock
* 来源:liuyuanxitong-yidong/src/config/community-data.js、community-content-data.js、convenience-phone-data.js
* 全部为固定数据;关注/报名等可变状态用本地存储维护。
* 图标名为 uview u-icon 名称(已由 Vant 名映射而来)。
*/
/** 顶部定位 */
export const locationInfo = { community: '上河坊·九九社区' }
export const searchPlaceholder = '搜索公告、活动、便民信息'
/** 5 个快捷入口(彩色渐变圆形图标) */
export const shortcuts = [
{ key: 'notice', label: '社区公告', icon: 'volume', bg: 'linear-gradient(135deg, #FF9A12 0%, #FF7900 100%)' },
{ key: 'activity', label: '社区活动', icon: 'calendar', bg: 'linear-gradient(135deg, #FF4752 0%, #EF2231 100%)' },
{ key: 'phone', label: '便民电话', icon: 'phone', bg: 'linear-gradient(135deg, #21C86A 0%, #08A84E 100%)' },
{ key: 'house', label: '我的房屋', icon: 'home', bg: 'linear-gradient(135deg, #3C82FF 0%, #2164F0 100%)' },
{ key: 'goodshop', label: '周边好店', icon: 'shopping-cart', bg: 'linear-gradient(135deg, #B04AFF 0%, #913EE7 100%)' }
]
/** 顶部轮播(用渐变+文案,不依赖外链图片) */
export const heroSlides = [
{ key: 'community-life', title: '九九社区美好生活', subtitle: '邻里相伴,生活更暖心', bg: 'linear-gradient(120deg, #ff4752 0%, #ff8a3d 100%)' },
{ key: 'community-activity', title: '邻里活动精彩不断', subtitle: '一起参与,共享社区好时光', bg: 'linear-gradient(120deg, #ff6a3d 0%, #ffb14a 100%)' },
{ key: 'community-service', title: '便民服务就在身边', subtitle: '公告、报修、生活服务一站直达', bg: 'linear-gradient(120deg, #2164f0 0%, #4aa8ff 100%)' }
]
/** 公告分类标签样式 */
export const NOTICE_TAG_META = {
announcement: { label: '公告', color: '#ffffff', bg: '#df3c3f' },
urgent: { label: '紧急', color: '#ffffff', bg: '#e9272d' },
notice: { label: '通知', color: '#e46d25', bg: '#ffe3cb' },
service: { label: '服务', color: '#1f8a4c', bg: '#dcf5e5' },
activity: { label: '活动', color: '#2164f0', bg: '#e2ecff' }
}
export const NOTICE_TABS = [
{ key: 'all', label: '全部' },
{ key: 'urgent', label: '紧急' },
{ key: 'notice', label: '通知' },
{ key: 'service', label: '服务' }
]
/** 活动状态样式 */
export const ACTIVITY_STATUS_META = {
upcoming: { label: '即将开始', color: '#e46d25', bg: '#ffe9d6' },
ongoing: { label: '进行中', color: '#ffffff', bg: '#e9272d' },
ended: { label: '已结束', color: '#9aa0a8', bg: '#eef0f3' }
}
export const ACTIVITY_TABS = [
{ key: 'all', label: '全部' },
{ key: 'upcoming', label: '即将开始' },
{ key: 'ongoing', label: '进行中' },
{ key: 'ended', label: '已结束' }
]
export const ACTIVITY_REGISTER_NOTICE = [
'请准时到场,活动开始后 15 分钟未到视为放弃名额',
'如需取消报名,请提前 1 天在「邻里关注」中操作',
'活动现场请听从工作人员安排,注意自身与财物安全',
'亲子类活动需家长全程陪同,确保儿童安全'
]
/** 活动场景 → 兜底渐变(无封面图时用) */
export const ACTIVITY_SCENE_BG = {
handicraft: 'linear-gradient(135deg, #ffd9c0 0%, #ffb088 100%)',
market: 'linear-gradient(135deg, #ffe6a3 0%, #ffc24d 100%)',
garden: 'linear-gradient(135deg, #c8efb0 0%, #7cc36a 100%)',
fitness: 'linear-gradient(135deg, #bfe3ff 0%, #6db4f0 100%)',
festival: 'linear-gradient(135deg, #ffc1bb 0%, #f37c6e 100%)'
}
/** 社区公告 */
export const notices = [
{
id: 'n1', icon: 'volume', tag: 'announcement', title: '关于五一劳动节期间服务安排的通知',
summary: '五一期间物业服务中心值班安排及服务时间调整…', date: '2025-04-28', source: '物业服务中心',
readCount: 1286, pinned: true,
content: '<p>尊敬的业主:</p><p>五一劳动节期间,物业服务中心将安排工作人员轮值。前台服务时间调整为每日 9:00-17:00,24 小时报修及应急电话保持畅通。</p><p>如需办理装修登记、门禁卡等业务,建议提前预约。祝各位业主节日愉快。</p>'
},
{
id: 'n2', icon: 'bell', tag: 'notice', title: '电梯例行维护保养通知',
summary: '本周将对小区部分楼栋电梯进行例行维护保养…', date: '2025-04-27', source: '物业服务中心',
readCount: 942, pinned: false,
content: '<p>尊敬的业主:</p><p>本周将对小区部分楼栋电梯进行例行维护保养。维护期间电梯将分时段暂停运行,请根据现场提示错峰出行。</p><p>给您带来的不便敬请谅解,感谢您的理解与配合。</p>'
},
{
id: 'n3', icon: 'account', tag: 'notice', title: '物业服务中心工作时间调整',
summary: '自5月1日起,物业服务中心工作时间调整如下…', date: '2025-04-25', source: '社区服务站',
readCount: 658, pinned: false,
content: '<p>自 5 月 1 日起,物业服务中心工作时间调整为周一至周日 8:30-18:00,午间照常提供咨询服务。</p><p>非工作时间如遇紧急情况,请拨打物业 24 小时值班电话。</p>'
},
{
id: 'n4', icon: 'account', tag: 'activity', title: '邻里议事会:小区充电桩加装意见征集',
summary: '诚邀业主代表参与议事会,就充电桩选址与方案建言。', date: '2026-06-12', source: '社区居委会',
readCount: 473, pinned: false,
content: '<p>为缓解小区新能源车充电难题,社区拟在地面停车区加装公共充电桩。现面向全体业主征集选址与方案意见,欢迎参加本月邻里议事会,共同决定社区事务。</p>'
},
{
id: 'n5', icon: 'gift', tag: 'notice', title: '端午粽香·社区敬老慰问活动回顾',
summary: '社区联合志愿者为高龄独居老人送上粽子与节日问候。', date: '2026-06-09', source: '社区志愿队',
readCount: 805, pinned: false,
content: '<p>端午节前夕,社区志愿者走访慰问了 30 余位高龄独居老人,送上亲手包的粽子与节日祝福。邻里互助、守望相助,是九九社区一直倡导的温暖底色。</p>'
}
]
/** 社区活动(image 为本地封面,空串则用 sceneBg 渐变兜底) */
export const activities = [
{
id: 'a6', scene: 'festival', status: 'ended', title: '端午竹编小龙舟手工活动', subtitle: '粽香艾草间,一起把龙舟装进端午记忆',
image: 'https://static.hshuishang.com/static/act-dragonboat.jpg', time: '2026-06-18 14:30 至 16:00',
place: '五常街道海汇社区党群服务中心', address: '五常街道海汇社区党群服务中心一楼活动室', distance: '4.08km',
quota: '限 25 人', enrolled: '25/25人', signupRange: '2026-06-16 10:00 至 2026-06-18 14:00', deadline: '2026-06-18 14:00',
fee: '免费', phone: '0571-8888 0618', organizer: '海汇社区联合九九社区',
points: ['认识端午节、龙舟与竹编手作的传统文化', '在老师指导下完成竹编龙舟骨架与端午挂饰', '活动材料由社区统一提供,成品可带回家留念'],
content: '<p>五月五,过端午。粽子香、艾草芳,龙舟划进手掌上。</p><p>本次活动将传统端午文化与亲子手作结合,老师会从竹编基础、龙舟结构和端午纹样讲起,带领居民一步步完成属于自己的竹编小龙舟。</p><p>活动现场提供竹篾、彩绳、粽子挂饰等材料,完成作品后还可参与社区端午作品展示与合影。</p>'
},
{
id: 'a1', scene: 'handicraft', status: 'upcoming', title: '亲子手工课堂', subtitle: '一起动手,创意无限',
image: 'https://static.hshuishang.com/static/act-handicraft.jpg', time: '2025-05-10 10:00',
place: '橘园社区活动室', address: '橘园社区党群服务中心二楼手工教室', distance: '320m',
quota: '限 20 人', enrolled: '12/20人', signupRange: '2025-05-01 09:00 至 2025-05-09 18:00', deadline: '2025-05-09 18:00',
fee: '免费', phone: '021-5666 0510', organizer: '橘园社区',
points: ['亲子协作完成手工制作,增进亲子感情', '培养孩子动手能力与创造力,激发想象力', '作品展示与分享,收获成就感与快乐'],
content: '<p>本周末邀请专业老师带领小朋友们体验黏土手工,材料由社区免费提供。完成的作品可带回家,也可参与社区作品展。</p><p>适合 3-10 岁儿童及家长共同参与,名额有限,报满即止。</p>'
},
{
id: 'a2', scene: 'market', status: 'upcoming', title: '邻里集市 · 乐享生活', subtitle: '好物共享,邻里更亲',
image: 'https://static.hshuishang.com/static/act-market.jpg', time: '2025-05-17 09:00',
place: '小区中心广场', address: '上河坊小区中心广场东侧', distance: '560m',
quota: '限 50 人', enrolled: '31/50人', signupRange: '2025-05-08 09:00 至 2025-05-16 20:00', deadline: '2025-05-16 20:00',
fee: '免费', phone: '021-5666 0517', organizer: '九九社区邻里中心',
points: ['闲置好物以物换物或低价转让', '现场分区:儿童玩具 / 二手书 / 生活用品', '报名后可领取专属摊位号'],
content: '<p>把家里的闲置好物带到市集,与邻居以物换物或低价转让。现场设有儿童玩具区、二手书区、生活用品区,欢迎全家一起来逛。</p><p>报名后可领取专属摊位号。</p>'
},
{
id: 'a3', scene: 'garden', status: 'ongoing', title: '社区花园认养计划', subtitle: '一平米花园,邻里共养',
image: '', time: '2026-06-01 至 2026-08-31', place: '小区中央花园', address: '', distance: '',
quota: '剩余 8 个地块', enrolled: '16/24人', signupRange: '', deadline: '认养至 2026-08-31',
fee: '免费', phone: '', organizer: '',
points: ['认养小块菜地,自由种植花草蔬果', '社区统一提供工具与水源', '共建绿意社区,结识园艺邻居'],
content: '<p>社区中央花园开放小块菜地认养,认养后可自行种植花草蔬果,社区提供工具与水源。让我们一起把社区装扮得更绿意盎然。</p>'
},
{
id: 'a4', scene: 'fitness', status: 'ongoing', title: '清晨广场健身操', subtitle: '动起来,遇见更好的邻居',
image: '', time: '每日 07:00 · 长期', place: '中心广场', address: '', distance: '',
quota: '无需报名亦可参加', enrolled: '不限人数', signupRange: '', deadline: '长期开放',
fee: '免费', phone: '', organizer: '',
points: ['专业志愿者带操,节奏舒缓适合各年龄', '报名后加入晨练群,接收每日提醒', '坚持打卡有机会获得社区健康好礼'],
content: '<p>社区健身志愿者每天清晨带操,舒缓的有氧节奏适合各年龄段邻居。报名后可加入晨练群,接收每日提醒。</p>'
},
{
id: 'a5', scene: 'festival', status: 'ended', title: '端午包粽子邻里大赛', subtitle: '巧手包粽,温情端午',
image: '', time: '2026-06-08 周日 10:00', place: '社区活动中心', address: '', distance: '',
quota: '活动已结束', enrolled: '40/40人', signupRange: '', deadline: '报名已截止',
fee: '免费', phone: '', organizer: '',
points: ['邻里比拼包粽手艺,现场欢声笑语', '本次共 40 组家庭参与', '感谢参与,下次活动再见'],
content: '<p>端午佳节,邻里齐聚一堂比拼包粽手艺,现场欢声笑语不断。本次活动共有 40 组家庭参与,感谢大家的热情参与,我们下次活动再见。</p>'
}
]
/** 便民电话 */
export const phoneTip = '社区常用便民电话,点击即可一键拨打'
export const phoneList = [
{ id: 'P01', name: '物业服务中心', phone: '021-8266 1234', time: '服务时间 08:00-20:00', icon: 'server-man', iconBg: '#f53d42' },
{ id: 'P02', name: '社区卫生服务站', phone: '021-8266 5678', time: '服务时间 08:30-17:30', icon: 'plus', iconBg: '#24bd6c' },
{ id: 'P03', name: '社区警务室', phone: '021-8266 0110', time: '24 小时值班', icon: 'account', iconBg: '#397eef' },
{ id: 'P04', name: '水电报修热线', phone: '021-8266 9000', time: '服务时间 07:00-22:00', icon: 'home', iconBg: '#ff8a24' },
{ id: 'P05', name: '社区便民服务台', phone: '021-8266 2233', time: '服务时间 09:00-18:00', icon: 'server-man', iconBg: '#ff4164' }
]
// ===== 查找辅助 =====
export function findNotice(id) { return notices.find(n => n.id === id) }
export function findActivity(id) { return activities.find(a => a.id === id) }
// ===== 关注 / 报名状态(本地存储,初始种子与设计稿一致)=====
const K_FN = 'fc_followed_notices'
const K_JA = 'fc_joined_acts'
const K_FA = 'fc_followed_acts'
function getArr(key, seed) {
const v = uni.getStorageSync(key)
if (v === '' || v === undefined || v === null) { uni.setStorageSync(key, seed); return seed.slice() }
return Array.isArray(v) ? v : seed.slice()
}
function toggle(key, seed, id) {
const arr = getArr(key, seed)
const i = arr.indexOf(id)
if (i >= 0) arr.splice(i, 1); else arr.push(id)
uni.setStorageSync(key, arr)
return i < 0
}
export function isNoticeFollowed(id) { return getArr(K_FN, ['n1']).includes(id) }
export function toggleNoticeFollow(id) { return toggle(K_FN, ['n1'], id) }
export function isActivityJoined(id) { return getArr(K_JA, ['a3', 'a6']).includes(id) }
export function toggleActivityJoin(id) { return toggle(K_JA, ['a3', 'a6'], id) }
export function isActivityFollowed(id) { return getArr(K_FA, ['a1']).includes(id) }
export function toggleActivityFollow(id) { return toggle(K_FA, ['a1'], id) }

View File

@ -1,218 +0,0 @@
<!--
页面:未来社区(九九社区)主页 —— 还原设计稿 liuyuanxitong-yidong/pages/community/community.vue
内容为静态 mock(见 ../data.js)。挂到首页金刚区「未来社区」跳转目标。
-->
<template>
<view class="fc-page">
<!-- 头部 -->
<view class="fc-hd" :style="{ paddingTop: statusBarTop + 'px' }">
<view class="fc-hd-bar">
<view class="fc-back" @tap="goBack"><u-icon name="arrow-left" color="#1a1a1a" size="38"></u-icon></view>
<text class="fc-hd-title">九九社区</text>
</view>
<view class="fc-loc" @tap="goSelect">
<u-icon name="map" color="#e9272d" size="26"></u-icon>
<text class="fc-loc-txt">{{ locationInfo.community }}</text>
<u-icon name="arrow-down" color="#9098a0" size="20"></u-icon>
</view>
</view>
<view class="fc-body">
<!-- 轮播 -->
<swiper class="fc-hero" :autoplay="true" :interval="4000" :duration="500" circular indicator-dots
indicator-active-color="#fff" indicator-color="rgba(255,255,255,0.5)">
<swiper-item v-for="s in heroSlides" :key="s.key">
<view class="fc-hero-slide" :style="{ background: s.bg }">
<view class="fc-hero-mask"></view>
<view class="fc-hero-copy">
<text class="fc-hero-title">{{ s.title }}</text>
<text class="fc-hero-sub">{{ s.subtitle }}</text>
</view>
</view>
</swiper-item>
</swiper>
<!-- 快捷入口 -->
<view class="fc-shortcut">
<view class="fc-sc-item" v-for="s in shortcuts" :key="s.key" @tap="onShortcut(s)">
<view class="fc-sc-icon" :style="{ background: s.bg }">
<u-icon :name="s.icon" color="#fff" size="40"></u-icon>
</view>
<text class="fc-sc-label">{{ s.label }}</text>
</view>
</view>
<!-- 社区公告 -->
<view class="fc-sec-head">
<view class="fc-sec-left"><text class="fc-sec-bar"></text><text class="fc-sec-title">社区公告</text></view>
<text class="fc-sec-more" @tap="goNoticeList">查看更多 ›</text>
</view>
<view class="fc-notice-panel">
<view class="fc-notice" v-for="n in topNotices" :key="n.id" @tap="goNoticeDetail(n)">
<view class="fc-notice-icon"><u-icon :name="n.icon" color="#e43f43" size="34"></u-icon></view>
<view class="fc-notice-main">
<text class="fc-notice-title">{{ n.title }}</text>
<text class="fc-notice-sum">{{ n.summary }}</text>
</view>
<view class="fc-notice-aside">
<text class="fc-tag" :style="tagStyle(n.tag)">{{ tagLabel(n.tag) }}</text>
<text class="fc-notice-date">{{ n.date }}</text>
</view>
</view>
</view>
<!-- 社区活动 -->
<view class="fc-sec-head">
<view class="fc-sec-left"><text class="fc-sec-bar"></text><text class="fc-sec-title">社区活动</text></view>
<text class="fc-sec-more" @tap="goActivityList">查看更多 ›</text>
</view>
<view class="fc-act-list">
<view class="fc-act" v-for="a in topActivities" :key="a.id" @tap="goActivityDetail(a)">
<view class="fc-act-cover">
<image v-if="a.image" :src="a.image" class="fc-act-img" mode="aspectFill" />
<view v-else class="fc-act-img" :style="{ background: sceneBg(a.scene) }"></view>
<text class="fc-act-badge" :style="statusStyle(a.status)">{{ statusLabel(a.status) }}</text>
</view>
<view class="fc-act-info">
<text class="fc-act-title">{{ a.title }}</text>
<text class="fc-act-fee">{{ a.fee || '免费' }}</text>
<text class="fc-act-sub">{{ a.subtitle }}</text>
<view class="fc-act-row"><u-icon name="clock" color="#9098a0" size="22"></u-icon><text>{{ a.time }}</text></view>
<view class="fc-act-row"><u-icon name="map" color="#9098a0" size="22"></u-icon><text>{{ a.place }}</text></view>
<view class="fc-act-foot">
<view class="fc-act-row"><u-icon name="account" color="#9098a0" size="22"></u-icon><text>{{ a.enrolled }}</text></view>
<text class="fc-act-btn" :class="{ done: isJoined(a.id) }" @tap.stop="onJoin(a)">{{ isJoined(a.id) ? '已报名' : '立即报名' }}</text>
</view>
</view>
</view>
</view>
<view class="fc-spacer"></view>
</view>
</view>
</template>
<script>
import { NavgateTo } from '@/utils'
import {
locationInfo, shortcuts, heroSlides, notices, activities,
NOTICE_TAG_META, ACTIVITY_STATUS_META, ACTIVITY_SCENE_BG,
isActivityJoined, toggleActivityJoin
} from '../data.js'
export default {
data() {
return {
statusBarTop: 20,
locationInfo, shortcuts, heroSlides,
topNotices: notices.slice(0, 3),
topActivities: activities.filter(a => a.status !== 'ended').slice(0, 2),
joinedIds: []
}
},
onLoad() {
const sys = uni.getSystemInfoSync()
this.statusBarTop = sys.statusBarHeight || 20
},
onShow() {
this.joinedIds = activities.filter(a => isActivityJoined(a.id)).map(a => a.id)
},
methods: {
tagLabel(t) { return (NOTICE_TAG_META[t] || {}).label || '' },
tagStyle(t) { const m = NOTICE_TAG_META[t] || {}; return { color: m.color, background: m.bg } },
statusLabel(s) { return (ACTIVITY_STATUS_META[s] || {}).label || '' },
statusStyle(s) { const m = ACTIVITY_STATUS_META[s] || {}; return { color: m.color, background: m.bg } },
sceneBg(s) { return ACTIVITY_SCENE_BG[s] || ACTIVITY_SCENE_BG.handicraft },
isJoined(id) { return this.joinedIds.includes(id) },
goBack() { uni.navigateBack({ delta: 1, fail: () => NavgateTo('/pages/index2/index2') }) },
goSelect() { uni.showToast({ title: '当前社区:' + this.locationInfo.community, icon: 'none' }) },
onShortcut(s) {
const map = {
notice: '/packages/futureCommunity/noticeList/index',
activity: '/packages/futureCommunity/activityList/index',
phone: '/packages/futureCommunity/conveniencePhone/index',
house: '/packages/community/index/index',
goodshop: '/packages/localLife/index/index'
}
if (map[s.key]) NavgateTo(map[s.key], { isLogin: false })
else uni.showToast({ title: s.label + '功能开发中', icon: 'none' })
},
goNoticeList() { NavgateTo('/packages/futureCommunity/noticeList/index', { isLogin: false }) },
goActivityList() { NavgateTo('/packages/futureCommunity/activityList/index', { isLogin: false }) },
goNoticeDetail(n) { NavgateTo('/packages/futureCommunity/noticeDetail/index?id=' + n.id, { isLogin: false }) },
goActivityDetail(a) { NavgateTo('/packages/futureCommunity/activityDetail/index?id=' + a.id, { isLogin: false }) },
onJoin(a) {
if (a.status === 'ended') { uni.showToast({ title: '活动已结束', icon: 'none' }); return }
const joined = toggleActivityJoin(a.id)
this.joinedIds = activities.filter(x => isActivityJoined(x.id)).map(x => x.id)
uni.showToast({ title: joined ? '报名成功' : '已取消报名', icon: 'none' })
}
}
}
</script>
<style scoped>
page { background: #f5f6f7; }
.fc-page { min-height: 100vh; background: #f5f6f7; }
/* 头部 */
.fc-hd { position: sticky; top: 0; z-index: 100; background: #fff; padding: 0 24rpx 16rpx; }
.fc-hd-bar { position: relative; display: flex; align-items: center; justify-content: center; height: 80rpx; }
.fc-back { position: absolute; left: 0; top: 0; height: 80rpx; display: flex; align-items: center; }
.fc-hd-title { font-size: 34rpx; font-weight: 700; color: #1a1a1a; }
.fc-loc { display: flex; align-items: center; }
.fc-loc-txt { margin: 0 8rpx; font-size: 26rpx; color: #333; }
.fc-body { padding: 20rpx; }
/* 轮播 */
.fc-hero { width: 100%; height: 286rpx; border-radius: 24rpx; overflow: hidden; }
.fc-hero-slide { position: relative; width: 100%; height: 286rpx; }
.fc-hero-mask { position: absolute; inset: 0; background: linear-gradient(90deg, rgba(40,25,20,0.5) 0%, rgba(40,25,20,0.04) 72%); }
.fc-hero-copy { position: absolute; left: 36rpx; bottom: 46rpx; z-index: 2; display: flex; flex-direction: column; }
.fc-hero-title { font-size: 40rpx; font-weight: 800; color: #fff; }
.fc-hero-sub { margin-top: 10rpx; font-size: 24rpx; color: rgba(255,255,255,0.92); }
/* 快捷入口 */
.fc-shortcut { display: flex; justify-content: space-between; background: #fff; border-radius: 22rpx; padding: 28rpx 16rpx; margin-top: 20rpx; }
.fc-sc-item { display: flex; flex-direction: column; align-items: center; }
.fc-sc-icon { width: 92rpx; height: 92rpx; border-radius: 50%; display: flex; align-items: center; justify-content: center; }
.fc-sc-label { margin-top: 14rpx; font-size: 24rpx; color: #333; }
/* 分区标题 */
.fc-sec-head { display: flex; align-items: center; justify-content: space-between; margin: 32rpx 4rpx 18rpx; }
.fc-sec-left { display: flex; align-items: center; }
.fc-sec-bar { width: 6rpx; height: 30rpx; background: #e9272d; border-radius: 3rpx; margin-right: 14rpx; }
.fc-sec-title { font-size: 32rpx; font-weight: 700; color: #1a1a1a; }
.fc-sec-more { font-size: 24rpx; color: #9aa0a8; }
/* 公告 */
.fc-notice-panel { background: #fff; border-radius: 22rpx; padding: 6rpx 24rpx; }
.fc-notice { display: flex; align-items: center; padding: 24rpx 0; border-bottom: 1rpx solid #f2f3f5; }
.fc-notice:last-child { border-bottom: none; }
.fc-notice-icon { flex-shrink: 0; width: 64rpx; height: 64rpx; border-radius: 50%; background: #fff1f1; display: flex; align-items: center; justify-content: center; margin-right: 18rpx; }
.fc-notice-main { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.fc-notice-title { font-size: 28rpx; font-weight: 600; color: #1a1a1a; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
.fc-notice-sum { margin-top: 8rpx; font-size: 22rpx; color: #9098a0; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
.fc-notice-aside { flex-shrink: 0; margin-left: 16rpx; display: flex; flex-direction: column; align-items: flex-end; }
.fc-tag { font-size: 20rpx; padding: 2rpx 12rpx; border-radius: 6rpx; }
.fc-notice-date { margin-top: 10rpx; font-size: 20rpx; color: #b6bcc4; }
/* 活动 */
.fc-act-list { display: flex; flex-direction: column; }
.fc-act { display: flex; background: #fff; border-radius: 22rpx; overflow: hidden; margin-bottom: 20rpx; }
.fc-act-cover { position: relative; width: 260rpx; flex-shrink: 0; }
.fc-act-img { width: 260rpx; height: 100%; min-height: 220rpx; display: block; }
.fc-act-badge { position: absolute; left: 12rpx; top: 12rpx; font-size: 20rpx; padding: 2rpx 12rpx; border-radius: 6rpx; }
.fc-act-info { position: relative; flex: 1; min-width: 0; padding: 18rpx 20rpx; display: flex; flex-direction: column; }
.fc-act-title { font-size: 30rpx; font-weight: 700; color: #1a1a1a; max-width: 280rpx; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
.fc-act-fee { position: absolute; right: 20rpx; top: 18rpx; font-size: 24rpx; color: #e9272d; font-weight: 700; }
.fc-act-sub { margin-top: 8rpx; font-size: 22rpx; color: #9098a0; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
.fc-act-row { display: flex; align-items: center; margin-top: 10rpx; font-size: 22rpx; color: #6b7078; }
.fc-act-row text { margin-left: 8rpx; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
.fc-act-foot { display: flex; align-items: center; justify-content: space-between; margin-top: 14rpx; }
.fc-act-btn { flex-shrink: 0; background: linear-gradient(90deg, #ff5b5b 0%, #ef111b 100%); color: #fff; font-size: 22rpx; padding: 8rpx 24rpx; border-radius: 26rpx; }
.fc-act-btn.done { background: #eef0f3; color: #9aa0a8; }
.fc-spacer { height: 40rpx; }
</style>

View File

@ -1,78 +0,0 @@
<!-- 未来社区 - 公告详情 -->
<template>
<view class="nd-page">
<view class="fc-nav" :style="{ paddingTop: statusBarTop + 'px' }">
<view class="fc-nav-bar">
<view class="fc-back" @tap="goBack"><u-icon name="arrow-left" color="#1a1a1a" size="38"></u-icon></view>
<text class="fc-nav-title">公告详情</text>
</view>
</view>
<view class="nd-body" v-if="notice">
<view class="nd-card">
<text class="fc-tag" :style="tagStyle(notice.tag)">{{ tagLabel(notice.tag) }}</text>
<text class="nd-title">{{ notice.title }}</text>
<view class="nd-meta">
<u-icon name="clock" color="#b6bcc4" size="22"></u-icon>
<text>{{ notice.date }}</text>
<text class="nd-meta-dot">·</text>
<text>上河坊·九九社区</text>
</view>
<rich-text class="nd-content" :nodes="notice.content"></rich-text>
</view>
<view class="fc-spacer"></view>
</view>
<view v-else class="fc-empty">公告不存在</view>
<view class="nd-foot" v-if="notice">
<text class="nd-share" @tap="onShare">分享</text>
<text class="nd-follow" :class="{ on: followed }" @tap="onFollow">{{ followed ? '已关注' : '关注公告' }}</text>
</view>
</view>
</template>
<script>
import { findNotice, NOTICE_TAG_META, isNoticeFollowed, toggleNoticeFollow } from '../data.js'
export default {
data() { return { statusBarTop: 20, notice: null, followed: false } },
onLoad(options) {
const sys = uni.getSystemInfoSync()
this.statusBarTop = sys.statusBarHeight || 20
this.notice = findNotice(options && options.id) || null
if (this.notice) this.followed = isNoticeFollowed(this.notice.id)
},
methods: {
tagLabel(t) { return (NOTICE_TAG_META[t] || {}).label || '' },
tagStyle(t) { const m = NOTICE_TAG_META[t] || {}; return { color: m.color, background: m.bg } },
goBack() { uni.navigateBack({ delta: 1 }) },
onShare() { uni.showToast({ title: '分享功能开发中', icon: 'none' }) },
onFollow() { this.followed = toggleNoticeFollow(this.notice.id); uni.showToast({ title: this.followed ? '已关注' : '已取消关注', icon: 'none' }) }
}
}
</script>
<style scoped>
page { background: #f5f6f7; }
.nd-page { min-height: 100vh; background: #f5f6f7; padding-bottom: 130rpx; }
.fc-nav { position: sticky; top: 0; z-index: 100; background: #fff; padding: 0 24rpx 16rpx; }
.fc-nav-bar { position: relative; display: flex; align-items: center; justify-content: center; height: 88rpx; }
.fc-back { position: absolute; left: 0; top: 0; height: 88rpx; display: flex; align-items: center; }
.fc-nav-title { font-size: 34rpx; font-weight: 700; color: #1a1a1a; }
.nd-body { padding: 20rpx; }
.nd-card { background: #fff; border-radius: 20rpx; padding: 30rpx; }
.fc-tag { display: inline-block; font-size: 22rpx; padding: 4rpx 16rpx; border-radius: 6rpx; }
.nd-title { display: block; font-size: 38rpx; font-weight: 800; color: #1a1a1a; margin-top: 18rpx; line-height: 1.4; }
.nd-meta { display: flex; align-items: center; margin-top: 18rpx; font-size: 22rpx; color: #b6bcc4; }
.nd-meta text { margin-left: 6rpx; }
.nd-meta-dot { margin: 0 10rpx; }
.nd-content { display: block; margin-top: 24rpx; font-size: 28rpx; color: #333; line-height: 1.8; }
.nd-foot { position: fixed; left: 0; right: 0; bottom: 0; background: #fff; display: flex; align-items: center; gap: 20rpx; padding: 16rpx 24rpx calc(16rpx + env(safe-area-inset-bottom)); box-shadow: 0 -4rpx 20rpx rgba(0,0,0,0.04); }
.nd-share { flex: 1; text-align: center; font-size: 30rpx; color: #333; border: 1rpx solid #e5e5e5; border-radius: 44rpx; padding: 18rpx 0; }
.nd-follow { flex: 1; text-align: center; font-size: 30rpx; color: #fff; background: linear-gradient(90deg, #ff5b5b 0%, #ef111b 100%); border-radius: 44rpx; padding: 18rpx 0; }
.nd-follow.on { background: #eef0f3; color: #9aa0a8; }
.fc-empty { text-align: center; color: #9aa0a8; font-size: 26rpx; padding: 120rpx 0; }
.fc-spacer { height: 20rpx; }
</style>

View File

@ -1,109 +0,0 @@
<!-- 未来社区 - 社区公告列表 -->
<template>
<view class="nl-page">
<view class="fc-nav" :style="{ paddingTop: statusBarTop + 'px' }">
<view class="fc-nav-bar">
<view class="fc-back" @tap="goBack"><u-icon name="arrow-left" color="#1a1a1a" size="38"></u-icon></view>
<view class="fc-nav-tt"><text class="fc-nav-title">社区公告</text><text class="fc-nav-sub">上河坊·九九社区</text></view>
</view>
<scroll-view class="nl-tabs" scroll-x>
<text class="nl-tab" :class="{ on: activeTab === t.key }" v-for="t in NOTICE_TABS" :key="t.key" @tap="activeTab = t.key">{{ t.label }}</text>
</scroll-view>
</view>
<view class="nl-body">
<!-- 置顶(全部tab) -->
<view class="nl-pinned" v-if="activeTab === 'all' && pinned" @tap="goDetail(pinned)">
<view class="nl-pin-corner">置顶</view>
<view class="nl-pin-head">
<view class="nl-icon" :style="{ background: '#fff1f1' }"><u-icon :name="pinned.icon" color="#e43f43" size="34"></u-icon></view>
<view class="nl-pin-tt">
<text class="nl-title">{{ pinned.title }}</text>
<text class="nl-meta">{{ pinned.date }} · {{ pinned.source }}</text>
</view>
</view>
<text class="nl-sum">{{ pinned.summary }}</text>
<text class="nl-read">{{ pinned.readCount }} 次阅读</text>
</view>
<view class="nl-card" v-for="n in listNotices" :key="n.id" @tap="goDetail(n)">
<view class="nl-icon" :style="{ background: tagBg(n.tag, true) }"><u-icon :name="n.icon" :color="tagColor(n.tag)" size="34"></u-icon></view>
<view class="nl-main">
<view class="nl-row1">
<text class="nl-title">{{ n.title }}</text>
<text class="fc-tag" :style="tagStyle(n.tag)">{{ tagLabel(n.tag) }}</text>
</view>
<text class="nl-meta">{{ n.date }} · {{ n.source }}</text>
<text class="nl-sum">{{ n.summary }}</text>
<text class="nl-read">{{ n.readCount }} 次阅读</text>
</view>
</view>
<view class="fc-empty" v-if="!listNotices.length && !(activeTab === 'all' && pinned)">暂无公告</view>
</view>
</view>
</template>
<script>
import { NavgateTo } from '@/utils'
import { notices, NOTICE_TABS, NOTICE_TAG_META } from '../data.js'
export default {
data() {
return { statusBarTop: 20, NOTICE_TABS, activeTab: 'all', notices }
},
onLoad(options) {
const sys = uni.getSystemInfoSync()
this.statusBarTop = sys.statusBarHeight || 20
if (options && options.tab && NOTICE_TABS.some(t => t.key === options.tab)) this.activeTab = options.tab
},
computed: {
pinned() { return this.notices.find(n => n.pinned) },
listNotices() {
if (this.activeTab === 'all') return this.notices.filter(n => !n.pinned)
return this.notices.filter(n => n.tag === this.activeTab)
}
},
methods: {
tagLabel(t) { return (NOTICE_TAG_META[t] || {}).label || '' },
tagColor(t) { return (NOTICE_TAG_META[t] || {}).color || '#666' },
tagBg(t) { return (NOTICE_TAG_META[t] || {}).bg || '#eee' },
tagStyle(t) { const m = NOTICE_TAG_META[t] || {}; return { color: m.color, background: m.bg } },
goBack() { uni.navigateBack({ delta: 1 }) },
goDetail(n) { NavgateTo('/packages/futureCommunity/noticeDetail/index?id=' + n.id, { isLogin: false }) }
}
}
</script>
<style scoped>
page { background: #f5f6f7; }
.nl-page { min-height: 100vh; background: #f5f6f7; }
.fc-nav { position: sticky; top: 0; z-index: 100; background: #fff; padding: 0 24rpx; }
.fc-nav-bar { position: relative; display: flex; align-items: center; justify-content: center; min-height: 88rpx; }
.fc-back { position: absolute; left: 0; top: 0; height: 88rpx; display: flex; align-items: center; }
.fc-nav-tt { display: flex; flex-direction: column; align-items: center; }
.fc-nav-title { font-size: 34rpx; font-weight: 700; color: #1a1a1a; }
.fc-nav-sub { font-size: 20rpx; color: #9098a0; margin-top: 2rpx; }
.nl-tabs { white-space: nowrap; padding: 8rpx 0 14rpx; }
.nl-tab { display: inline-block; font-size: 28rpx; color: #6b7078; padding: 8rpx 6rpx; margin-right: 40rpx; }
.nl-tab.on { color: #e9272d; font-weight: 700; }
.nl-body { padding: 20rpx; }
.fc-tag { font-size: 20rpx; padding: 2rpx 12rpx; border-radius: 6rpx; flex-shrink: 0; }
.nl-icon { flex-shrink: 0; width: 64rpx; height: 64rpx; border-radius: 16rpx; display: flex; align-items: center; justify-content: center; }
.nl-title { font-size: 28rpx; font-weight: 600; color: #1a1a1a; }
.nl-meta { font-size: 20rpx; color: #b6bcc4; margin-top: 6rpx; }
.nl-sum { font-size: 24rpx; color: #6b7078; margin-top: 10rpx; }
.nl-read { font-size: 20rpx; color: #b6bcc4; margin-top: 10rpx; }
.nl-pinned { position: relative; background: #fff; border-radius: 20rpx; padding: 24rpx; margin-bottom: 20rpx; box-shadow: 0 6rpx 20rpx rgba(30,34,44,0.06); display: flex; flex-direction: column; }
.nl-pin-corner { position: absolute; right: 0; top: 0; background: #e9272d; color: #fff; font-size: 20rpx; padding: 4rpx 16rpx; border-radius: 0 20rpx 0 16rpx; }
.nl-pin-head { display: flex; align-items: center; }
.nl-pin-tt { margin-left: 18rpx; display: flex; flex-direction: column; }
.nl-card { display: flex; background: #fff; border-radius: 20rpx; padding: 24rpx; margin-bottom: 18rpx; }
.nl-main { flex: 1; min-width: 0; margin-left: 18rpx; display: flex; flex-direction: column; }
.nl-row1 { display: flex; align-items: center; justify-content: space-between; }
.nl-row1 .nl-title { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; margin-right: 12rpx; }
.fc-empty { text-align: center; color: #9aa0a8; font-size: 26rpx; padding: 100rpx 0; }
</style>

View File

@ -16,7 +16,7 @@
</view> </view>
<div class="iptBox"> <div class="iptBox">
<image <image
src="https://static.hshuishang.com/property-img-file/com_communitySearchIcon.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_communitySearchIcon.png"
></image> ></image>
<u--input <u--input
placeholder="请输入内容" placeholder="请输入内容"
@ -31,35 +31,35 @@
<div class="FilterItem" @click="showDialog(1)"> <div class="FilterItem" @click="showDialog(1)">
附近 附近
<image <image
src="https://static.hshuishang.com/property-img-file/homeServer_filterMore.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_filterMore.png"
></image> ></image>
</div> </div>
<div class="FilterItem" @click="showDialog(2)"> <div class="FilterItem" @click="showDialog(2)">
综合 综合
<image <image
src="https://static.hshuishang.com/property-img-file/homeServer_filterMore.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_filterMore.png"
></image> ></image>
</div> </div>
<div class="FilterItem" @click="showDialog(3)"> <div class="FilterItem" @click="showDialog(3)">
排序 排序
<image <image
src="https://static.hshuishang.com/property-img-file/homeServer_filterMore.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_filterMore.png"
></image> ></image>
</div> </div>
<div class="FilterItem" @click="showDialog(4)"> <div class="FilterItem" @click="showDialog(4)">
分类 分类
<image <image
src="https://static.hshuishang.com/property-img-file/homeServer_filterMore.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_filterMore.png"
></image> ></image>
</div> </div>
<div class="FilterItem" @click="showDialog(5)"> <div class="FilterItem" @click="showDialog(5)">
性别 性别
<image <image
src="https://static.hshuishang.com/property-img-file/homeServer_filterMore.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_filterMore.png"
></image> ></image>
</div> </div>
</div> </div>
@ -67,7 +67,7 @@
<div class="Filter_right"> <div class="Filter_right">
筛选 筛选
<image <image
src="https://static.hshuishang.com/property-img-file/homeServer_filter.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_filter.png"
></image> ></image>
</div> </div>
</div> </div>
@ -155,11 +155,11 @@
<div class="MasterItem" v-for="(item, index) in 3" :key="index"> <div class="MasterItem" v-for="(item, index) in 3" :key="index">
<div class="MasterItem_left"> <div class="MasterItem_left">
<image <image
src="https://static.hshuishang.com/property-img-file/community_providentFund_Group_1444.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/community_providentFund_Group_1444.png"
></image> ></image>
<image <image
v-if="false" v-if="false"
src="https://static.hshuishang.com/property-img-file/community_providentFund_Ellipse_160.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/community_providentFund_Ellipse_160.png"
> >
</image> </image>
</div> </div>
@ -167,7 +167,7 @@
<div class="MasterItem_info"> <div class="MasterItem_info">
<div class="MasterItem_Info_left"> <div class="MasterItem_Info_left">
<image <image
src="https://static.hshuishang.com/property-img-file/home_icon12.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/home_icon12.png"
></image> ></image>
<div class="state state1">待服务</div> <div class="state state1">待服务</div>
<div class="state state2" v-if="false">休息中</div> <div class="state state2" v-if="false">休息中</div>
@ -178,18 +178,18 @@
林师傅 林师傅
<image <image
class="Medal" class="Medal"
src="https://static.hshuishang.com/property-img-file/homeServer_Champion.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_Champion.png"
> >
</image> </image>
<image <image
class="Medal" class="Medal"
v-if="false" v-if="false"
src="https://static.hshuishang.com/property-img-file/homeServer_RunnerUp.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_RunnerUp.png"
> >
</image> </image>
<image <image
class="star" class="star"
src="https://static.hshuishang.com/property-img-file/local_start1.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/local_start1.png"
></image> ></image>
<span>4.8</span> <span>4.8</span>
</div> </div>
@ -211,13 +211,13 @@
<div class="MasterItem_Info_right_6"> <div class="MasterItem_Info_right_6">
<image <image
src="https://static.hshuishang.com/property-img-file/com_MsgImg1.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_MsgImg1.png"
></image> ></image>
<image <image
src="https://static.hshuishang.com/property-img-file/com_MsgImg1.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_MsgImg1.png"
></image> ></image>
<image <image
src="https://static.hshuishang.com/property-img-file/com_MsgImg1.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_MsgImg1.png"
></image> ></image>
</div> </div>
</div> </div>

View File

@ -5,7 +5,7 @@
<view class="location" @click="chooseLocation"> <view class="location" @click="chooseLocation">
<image <image
id="local" id="local"
src="https://static.hshuishang.com/property-img-file/local_localIcon.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/local_localIcon.png"
mode="aspectFill" mode="aspectFill"
></image> ></image>
@ -14,7 +14,7 @@
</view> </view>
<view class="search-box"> <view class="search-box">
<image <image
src="https://static.hshuishang.com/property-img-file/com_communitySearchIcon.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_communitySearchIcon.png"
class="search-icon" class="search-icon"
></image> ></image>
<input class="search-placeholder" placeholder="请输入您要找的服务" /> <input class="search-placeholder" placeholder="请输入您要找的服务" />
@ -44,7 +44,7 @@
> >
<view id="top" style="height: 1px; opacity: 0"></view> <view id="top" style="height: 1px; opacity: 0"></view>
<image <image
src="https://static.hshuishang.com/property-img-file/guanggao4.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/guanggao4.png"
class="content-img" class="content-img"
></image> ></image>
<view <view
@ -138,23 +138,23 @@ export default {
serviceCategories: [ serviceCategories: [
{ {
name: "家电维修", name: "家电维修",
icon: "https://static.hshuishang.com/property-img-file/index_top3.png", icon: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/index_top3.png",
}, },
{ {
name: "数码维修", name: "数码维修",
icon: "https://static.hshuishang.com/property-img-file/index_top3.png", icon: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/index_top3.png",
}, },
{ {
name: "电器清洗", name: "电器清洗",
icon: "https://static.hshuishang.com/property-img-file/index_top3.png", icon: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/index_top3.png",
}, },
{ {
name: "洗衣洗鞋", name: "洗衣洗鞋",
icon: "https://static.hshuishang.com/property-img-file/index_top3.png", icon: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/index_top3.png",
}, },
{ {
name: "精细擦窗", name: "精细擦窗",
icon: "https://static.hshuishang.com/property-img-file/index_top3.png", icon: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/index_top3.png",
}, },
], ],
currentIndex: 0, currentIndex: 0,

View File

@ -386,7 +386,7 @@
height: 100rpx; height: 100rpx;
position: fixed; position: fixed;
right: 33rpx; right: 33rpx;
bottom: 100rpx; bottom: 320rpx;
z-index: 10; z-index: 10;
} }

View File

@ -13,7 +13,7 @@
<u-icon name="arrow-down" color="#999999" size="28"></u-icon> <u-icon name="arrow-down" color="#999999" size="28"></u-icon>
</view> </view>
<view class="search-box" @click="searchService"> <view class="search-box" @click="searchService">
<image src="https://static.hshuishang.com/property-img-file/com_communitySearchIcon.png" <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_communitySearchIcon.png"
class="search-icon" mode="aspectFit"></image> class="search-icon" mode="aspectFit"></image>
<text class="search-placeholder">请输入您要找的服务</text> <text class="search-placeholder">请输入您要找的服务</text>
</view> </view>
@ -45,12 +45,12 @@
<view class="announcement-flex"> <view class="announcement-flex">
到家 到家
<text class="announcement-title"> 公告</text> <text class="announcement-title"> 公告</text>
<image src="https://static.hshuishang.com/property-img-file/index_notice1.png" <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/index_notice1.png"
class="announcement-img" mode="aspectFit"></image> class="announcement-img" mode="aspectFit"></image>
</view> </view>
<view class="hrStyle">|</view> <view class="hrStyle">|</view>
<text class="announcement-content">公告内容公告内容公告内容公告内容...</text> <text class="announcement-content">公告内容公告内容公告内容公告内容...</text>
<image src="https://static.hshuishang.com/property-img-file/index_notice2.png" <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/index_notice2.png"
class="arrow-right" @click="lookNotice" mode="aspectFit"></image> class="arrow-right" @click="lookNotice" mode="aspectFit"></image>
</view> </view>
@ -58,7 +58,7 @@
<view class="serverList"> <view class="serverList">
<view class="serverList_left"> <view class="serverList_left">
<!-- <view> --> <!-- <view> -->
<image src="https://static.hshuishang.com/property-img-file/guanggao1.png" <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/guanggao1.png"
mode="aspectFit" /> mode="aspectFit" />
<!-- <swiper-item v-for="(item, index) in homeLeftList" :key="index"> <!-- <swiper-item v-for="(item, index) in homeLeftList" :key="index">
<image :src="item.pic_src" alt="" mode="aspectFit" /> <image :src="item.pic_src" alt="" mode="aspectFit" />
@ -75,14 +75,14 @@
<!-- 立即联系 --> <!-- 立即联系 -->
<view class="contact-section" @click="contactService"> <view class="contact-section" @click="contactService">
<image src="https://static.hshuishang.com/property-img-file/index_kefu1.png" <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/index_kefu1.png"
class="contact-icon"></image> class="contact-icon"></image>
<view class="contact-text"> <view class="contact-text">
<text class="contact-title">立即联系</text> <text class="contact-title">立即联系</text>
<br /> <br />
<text class="contact-subtitle">未找到您需要的服务?</text> <text class="contact-subtitle">未找到您需要的服务?</text>
</view> </view>
<image src="https://static.hshuishang.com/property-img-file/index_kefu2.png" <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/index_kefu2.png"
class="contact-icon2"></image> class="contact-icon2"></image>
</view> </view>
<view class="interval"></view> <view class="interval"></view>
@ -90,19 +90,19 @@
<!-- 推荐热门服务 --> <!-- 推荐热门服务 -->
<view class="hot-services"> <view class="hot-services">
<view class="section-header"> <view class="section-header">
<image src="https://static.hshuishang.com/property-img-file/index_bottom1.png" <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/index_bottom1.png"
class="section-arrow"></image> class="section-arrow"></image>
<text class="section-title">推荐热门服务</text> <text class="section-title">推荐热门服务</text>
</view> </view>
<view class="service-list"> <view class="service-list">
<view class="service-card" v-for="(service, index) in hotServiceList" :key="index"> <view class="service-card" v-for="(service, index) in hotServiceList" :key="index">
<image src="https://static.hshuishang.com/property-img-file/ceshi.png" <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/ceshi.png"
class="service-image"></image> class="service-image"></image>
<view class="service-info"> <view class="service-info">
<view class="service-info-left"> <view class="service-info-left">
<view class="service-info-left-top"> <view class="service-info-left-top">
<text class="service-name">{{ service.name }}</text> <text class="service-name">{{ service.name }}</text>
<image src="https://static.hshuishang.com/property-img-file/index_bottom2.png" <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/index_bottom2.png"
class="service-image2"></image> class="service-image2"></image>
<text class="service-tag">{{ service.tag }}</text> <text class="service-tag">{{ service.tag }}</text>
</view> </view>
@ -127,7 +127,7 @@
<!-- 回到顶部 --> <!-- 回到顶部 -->
<div class="toUp" @click="scrollToTop"> <div class="toUp" @click="scrollToTop">
<u-badge numberType="limit" type="error" max="99" :value="value"></u-badge> <u-badge numberType="limit" type="error" max="99" :value="value"></u-badge>
<image src="https://static.hshuishang.com/property-img-file/toUp.png"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/toUp.png"></image>
</div> </div>
</view> </view>
</template> </template>
@ -158,17 +158,17 @@ export default {
homeLeftList: [ homeLeftList: [
{ {
title: "", title: "",
pic_src: "https://static.hshuishang.com/property-img-file/guanggao1.png", pic_src: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/guanggao1.png",
}, },
], ],
homeRightList: [ homeRightList: [
{ {
title: "", title: "",
pic_src: "https://static.hshuishang.com/property-img-file/guanggao2.png", pic_src: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/guanggao2.png",
}, },
{ {
title: "", title: "",
pic_src: "https://static.hshuishang.com/property-img-file/guanggao3.png", pic_src: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/guanggao3.png",
}, },
], ],
// 热门服务数据 // 热门服务数据

View File

@ -30,7 +30,7 @@
<swiper> <swiper>
<swiper-item> <swiper-item>
<image <image
src="https://static.hshuishang.com/property-img-file/homeServer_banner.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_banner.png"
></image> ></image>
</swiper-item> </swiper-item>
</swiper> </swiper>
@ -44,7 +44,7 @@
<div class="master_info"> <div class="master_info">
<div class="master_info_left"> <div class="master_info_left">
<image <image
src="https://static.hshuishang.com/property-img-file/home_icon12.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/home_icon12.png"
></image> ></image>
<div class="state state1">待服务</div> <div class="state state1">待服务</div>
<div class="state state2" v-if="false">休息中</div> <div class="state state2" v-if="false">休息中</div>
@ -55,17 +55,17 @@
林师傅 林师傅
<image <image
class="Medal" class="Medal"
src="https://static.hshuishang.com/property-img-file/homeServer_Champion.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_Champion.png"
></image> ></image>
<image <image
class="Medal" class="Medal"
v-if="false" v-if="false"
src="https://static.hshuishang.com/property-img-file/homeServer_RunnerUp.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_RunnerUp.png"
> >
</image> </image>
<image <image
class="star" class="star"
src="https://static.hshuishang.com/property-img-file/local_start1.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/local_start1.png"
></image> ></image>
<span>4.8</span> <span>4.8</span>
</div> </div>
@ -110,28 +110,28 @@
<div class="master_msg"> <div class="master_msg">
<div class="master_msg_item"> <div class="master_msg_item">
<image <image
src="https://static.hshuishang.com/property-img-file/homeServer_masterIcon1.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_masterIcon1.png"
></image> ></image>
<div class="master_msg_itemText">52岁</div> <div class="master_msg_itemText">52岁</div>
<div>广东梅州人</div> <div>广东梅州人</div>
</div> </div>
<div class="master_msg_item"> <div class="master_msg_item">
<image <image
src="https://static.hshuishang.com/property-img-file/homeServer_masterIcon2.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_masterIcon2.png"
></image> ></image>
<div class="master_msg_itemText">5-10年</div> <div class="master_msg_itemText">5-10年</div>
<div>服务经验</div> <div>服务经验</div>
</div> </div>
<div class="master_msg_item"> <div class="master_msg_item">
<image <image
src="https://static.hshuishang.com/property-img-file/homeServer_masterIcon3.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_masterIcon3.png"
></image> ></image>
<div class="master_msg_itemText">500+</div> <div class="master_msg_itemText">500+</div>
<div>成功预约</div> <div>成功预约</div>
</div> </div>
<div class="master_msg_item"> <div class="master_msg_item">
<image <image
src="https://static.hshuishang.com/property-img-file/homeServer_masterIcon4.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_masterIcon4.png"
></image> ></image>
<div class="master_msg_itemText">100+</div> <div class="master_msg_itemText">100+</div>
<div>用户评价</div> <div>用户评价</div>
@ -149,7 +149,7 @@
<div class="imgList"> <div class="imgList">
<div class="imgItem" v-for="(item, index) in 5" :key="index"> <div class="imgItem" v-for="(item, index) in 5" :key="index">
<image <image
src="https://static.hshuishang.com/property-img-file/com_MsgImg1.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_MsgImg1.png"
></image> ></image>
</div> </div>
</div> </div>
@ -160,7 +160,7 @@
<div class="master_info mt20" v-for="(item, index) in 3" :key="index"> <div class="master_info mt20" v-for="(item, index) in 3" :key="index">
<div class="master_info_left"> <div class="master_info_left">
<image <image
src="https://static.hshuishang.com/property-img-file/home_icon12.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/home_icon12.png"
></image> ></image>
<div class="state state1">待服务</div> <div class="state state1">待服务</div>
<div class="state state2" v-if="false">休息中</div> <div class="state state2" v-if="false">休息中</div>
@ -172,17 +172,17 @@
林师傅 林师傅
<image <image
class="Medal" class="Medal"
src="https://static.hshuishang.com/property-img-file/homeServer_Champion.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_Champion.png"
></image> ></image>
<image <image
class="Medal" class="Medal"
v-if="false" v-if="false"
src="https://static.hshuishang.com/property-img-file/homeServer_RunnerUp.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_RunnerUp.png"
> >
</image> </image>
<image <image
class="star" class="star"
src="https://static.hshuishang.com/property-img-file/local_start1.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/local_start1.png"
></image> ></image>
<span>4.8</span> <span>4.8</span>
</div> </div>
@ -215,7 +215,7 @@
<div class="master_info"> <div class="master_info">
<div class="master_info_left"> <div class="master_info_left">
<image <image
src="https://static.hshuishang.com/property-img-file/home_icon12.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/home_icon12.png"
></image> ></image>
<div class="state state1">待服务</div> <div class="state state1">待服务</div>
<div class="state state2" v-if="false">休息中</div> <div class="state state2" v-if="false">休息中</div>
@ -226,17 +226,17 @@
林师傅 林师傅
<image <image
class="Medal" class="Medal"
src="https://static.hshuishang.com/property-img-file/homeServer_Champion.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_Champion.png"
></image> ></image>
<image <image
class="Medal" class="Medal"
v-if="false" v-if="false"
src="https://static.hshuishang.com/property-img-file/homeServer_RunnerUp.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_RunnerUp.png"
> >
</image> </image>
<image <image
class="star" class="star"
src="https://static.hshuishang.com/property-img-file/local_start1.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/local_start1.png"
></image> ></image>
<span>4.8</span> <span>4.8</span>
</div> </div>
@ -282,28 +282,28 @@
<div class="master_msg"> <div class="master_msg">
<div class="master_msg_item"> <div class="master_msg_item">
<image <image
src="https://static.hshuishang.com/property-img-file/homeServer_masterIcon1.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_masterIcon1.png"
></image> ></image>
<div class="master_msg_itemText">52岁</div> <div class="master_msg_itemText">52岁</div>
<div>广东梅州人</div> <div>广东梅州人</div>
</div> </div>
<div class="master_msg_item"> <div class="master_msg_item">
<image <image
src="https://static.hshuishang.com/property-img-file/homeServer_masterIcon2.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_masterIcon2.png"
></image> ></image>
<div class="master_msg_itemText">5-10年</div> <div class="master_msg_itemText">5-10年</div>
<div>服务经验</div> <div>服务经验</div>
</div> </div>
<div class="master_msg_item"> <div class="master_msg_item">
<image <image
src="https://static.hshuishang.com/property-img-file/homeServer_masterIcon3.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_masterIcon3.png"
></image> ></image>
<div class="master_msg_itemText">500+</div> <div class="master_msg_itemText">500+</div>
<div>成功预约</div> <div>成功预约</div>
</div> </div>
<div class="master_msg_item"> <div class="master_msg_item">
<image <image
src="https://static.hshuishang.com/property-img-file/homeServer_masterIcon4.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_masterIcon4.png"
></image> ></image>
<div class="master_msg_itemText">100+</div> <div class="master_msg_itemText">100+</div>
<div>用户评价</div> <div>用户评价</div>
@ -323,7 +323,7 @@
<div class="evaluateItem_header"> <div class="evaluateItem_header">
<div class="evaluateItem_ava"> <div class="evaluateItem_ava">
<image <image
src="https://static.hshuishang.com/property-img-file/com_MsgImg1.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_MsgImg1.png"
></image> ></image>
</div> </div>
<div class="evaluateItem_msg"> <div class="evaluateItem_msg">
@ -332,7 +332,7 @@
<image <image
v-for="(item, index) in 5" v-for="(item, index) in 5"
:key="index" :key="index"
src="https://static.hshuishang.com/property-img-file/homeServer_stait.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_stait.png"
></image> ></image>
<span class="evaluateItem_msg3">技术评级:100分</span> <span class="evaluateItem_msg3">技术评级:100分</span>
</div> </div>
@ -349,7 +349,7 @@
<div class="imgList"> <div class="imgList">
<div class="imgItem" v-for="(item, index) in 5" :key="index"> <div class="imgItem" v-for="(item, index) in 5" :key="index">
<image <image
src="https://static.hshuishang.com/property-img-file/com_MsgImg1.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_MsgImg1.png"
></image> ></image>
</div> </div>
</div> </div>
@ -361,14 +361,14 @@
<div class="footerIcon" @click="Vendor"> <div class="footerIcon" @click="Vendor">
<image <image
id="footerIcon1" id="footerIcon1"
src="https://static.hshuishang.com/property-img-file/footer_shop.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/footer_shop.png"
></image> ></image>
店铺 店铺
</div> </div>
<div class="footerIcon"> <div class="footerIcon">
<image <image
id="footerIcon2" id="footerIcon2"
src="https://static.hshuishang.com/property-img-file/homeServer_CollectIcon.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_CollectIcon.png"
></image> ></image>
收藏 收藏
</div> </div>
@ -376,7 +376,7 @@
<image <image
@click="openSave" @click="openSave"
id="footerIcon2" id="footerIcon2"
src="https://static.hshuishang.com/property-img-file/shop_share.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/shop_share.png"
></image> ></image>
分享 分享
</div> </div>
@ -393,7 +393,7 @@
<view class="boxshadow_text">好友对方可以直接查看详情</view> <view class="boxshadow_text">好友对方可以直接查看详情</view>
<view class="boxshadow_text2">张师傅</view> <view class="boxshadow_text2">张师傅</view>
<view class="boxshadow_img"> <view class="boxshadow_img">
<image src="https://static.hshuishang.com/erweima.png"> </image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/erweima.png"> </image>
</view> </view>
<view class="boxshadow_text2">扫描二维码查看服务详情</view> <view class="boxshadow_text2">扫描二维码查看服务详情</view>
<view class="boxshadow_btnList"> <view class="boxshadow_btnList">

View File

@ -29,7 +29,7 @@
<div class="EvaluateItem" v-for="(item, index) in 3" :key="index"> <div class="EvaluateItem" v-for="(item, index) in 3" :key="index">
<div class="evaluateItem_header"> <div class="evaluateItem_header">
<div class="evaluateItem_ava"> <div class="evaluateItem_ava">
<image src="https://static.hshuishang.com/property-img-file/com_MsgImg1.png"></image> <image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_MsgImg1.png"></image>
</div> </div>
<div class="evaluateItem_msg"> <div class="evaluateItem_msg">
<div class="evaluateItem_msg1">TP</div> <div class="evaluateItem_msg1">TP</div>
@ -37,7 +37,7 @@
<image <image
v-for="(item, index) in 5" v-for="(item, index) in 5"
:key="index" :key="index"
src="https://static.hshuishang.com/property-img-file/homeServer_stait.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_stait.png"
></image> ></image>
</div> </div>
</div> </div>

View File

@ -8,7 +8,7 @@
<view class="notice-content">{{ item.content }}</view> <view class="notice-content">{{ item.content }}</view>
<view class="notice-date"> <view class="notice-date">
<image <image
src="https://static.hshuishang.com/time.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/time.png"
class="date-image" class="date-image"
></image> ></image>
<view>{{ item.date }}</view> <view>{{ item.date }}</view>
@ -31,13 +31,13 @@ export default {
return { return {
noticeList: [ noticeList: [
{ {
image: "https://static.hshuishang.com/test.png", image: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/test.png",
title: "公告标题1", title: "公告标题1",
content: "公告内容", content: "公告内容",
date: "2023-01-01", date: "2023-01-01",
}, },
{ {
image: "https://static.hshuishang.com/test.png", image: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/test.png",
title: "公告标题2", title: "公告标题2",
content: "公告内容", content: "公告内容",
date: "2023-01-02", date: "2023-01-02",

View File

@ -105,7 +105,7 @@
.active2::after { .active2::after {
content: ''; content: '';
background: url(https://static.hshuishang.com/property-img-file/com_active.png) no-repeat; background: url(https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_active.png) no-repeat;
background-size: 100% 100%; background-size: 100% 100%;
width: 52rpx; width: 52rpx;
height: 22rpx; height: 22rpx;

View File

@ -12,7 +12,7 @@
></u-icon> ></u-icon>
<view class="search-input-container"> <view class="search-input-container">
<image <image
src="https://static.hshuishang.com/property-img-file/com_communitySearchIcon.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_communitySearchIcon.png"
class="search-icon" class="search-icon"
></image> ></image>
<input <input
@ -100,7 +100,7 @@
@click="navigateToReservation(service)" @click="navigateToReservation(service)"
> >
<image <image
src="https://static.hshuishang.com/property-img-file/ceshi.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/ceshi.png"
class="service-image" class="service-image"
/> />
<view class="service-info"> <view class="service-info">
@ -108,7 +108,7 @@
<view class="service-info-left-top"> <view class="service-info-left-top">
<text class="service-name">{{ service.name }}</text> <text class="service-name">{{ service.name }}</text>
<image <image
src="https://static.hshuishang.com/property-img-file/index_bottom2.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/index_bottom2.png"
class="service-image2" class="service-image2"
></image> ></image>
<text class="service-tag">{{ service.tag }}</text> <text class="service-tag">{{ service.tag }}</text>
@ -153,7 +153,7 @@
:value="value" :value="value"
></u-badge> ></u-badge>
<image <image
src="https://static.hshuishang.com/property-img-file/toUp.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/toUp.png"
></image> ></image>
</div> --> </div> -->
</view> </view>
@ -177,15 +177,15 @@ export default {
specifiedContent: [ specifiedContent: [
{ {
name: "服务", name: "服务",
icon: "https://static.hshuishang.com/property-img-file/com_communitySearchIcon.png", icon: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_communitySearchIcon.png",
}, },
{ {
name: "阿石", name: "阿石",
icon: "https://static.hshuishang.com/property-img-file/com_communitySearchIcon.png", icon: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_communitySearchIcon.png",
}, },
{ {
name: "阿榴", name: "阿榴",
icon: "https://static.hshuishang.com/property-img-file/com_communitySearchIcon.png", icon: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_communitySearchIcon.png",
}, },
], ],
searchHistory: [], searchHistory: [],

View File

@ -205,86 +205,71 @@ page {
padding: 20rpx 30rpx; padding: 20rpx 30rpx;
border-bottom: 1rpx solid #f5f5f5; border-bottom: 1rpx solid #f5f5f5;
} }
.filter-title { .filter-title {
font-size: 28rpx; font-size: 28rpx;
color: #333; color: #333;
margin-bottom: 20rpx; margin-bottom: 20rpx;
font-weight: bold; font-weight: bold;
} }
.filter-options { .filter-options {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
gap: 15rpx; gap: 15rpx;
} }
.filter-option { .filter-option {
border-radius: 10rpx; background: #f5f5f5;
border: 1rpx solid #cccccc; border-radius: 50rpx;
padding: 12rpx 30rpx; padding: 12rpx 30rpx;
font-size: 24rpx; font-size: 24rpx;
color: #666; color: #666;
white-space: nowrap; white-space: nowrap;
} }
.filter-option.active { .filter-option.active {
background: #ff370b; background: #ff370b;
color: white; color: white;
} }
.price-range { .price-range {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 20rpx; gap: 20rpx;
margin-top: 10rpx; margin-top: 10rpx;
} }
.price-input { .price-input {
flex: 1; flex: 1;
height: 60rpx; height: 60rpx;
border: 1rpx solid #cccccc; background: #f5f5f5;
border-radius: 10rpx; border-radius: 10rpx;
padding: 0 20rpx; padding: 0 20rpx;
font-size: 24rpx; font-size: 24rpx;
border: none;
} }
.price-separator { .price-separator {
font-size: 28rpx; font-size: 28rpx;
color: #999; color: #999;
} }
.filter-buttons { .filter-buttons {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
padding: 20rpx 30rpx; padding: 20rpx 30rpx;
margin-top: 10rpx; margin-top: 10rpx;
} }
.reset-button { .reset-button {
width: 200rpx; width: 200rpx;
height: 70rpx; height: 70rpx;
border: 1rpx solid #cccccc; border: 1rpx solid #7abbff;
border-radius: 50rpx; border-radius: 50rpx;
background: #d9d9d9; background: #f0f7ff;
color: black; color: #409eff;
display: flex;
align-items: center;
justify-content: center;
font-size: 28rpx; font-size: 28rpx;
} }
.confirm-button { .confirm-button {
width: 200rpx; width: 200rpx;
height: 70rpx; height: 70rpx;
background: #ff370b; background: #409eff;
border-radius: 50rpx; border-radius: 50rpx;
color: white; color: white;
font-size: 28rpx; font-size: 28rpx;
display: flex; border: none;
align-items: center;
justify-content: center;
font-size: 28rpx;
} }
.MasterItem_Info_right_1 { .MasterItem_Info_right_1 {
@ -416,7 +401,6 @@ page {
.local span { .local span {
font-weight: 700; font-weight: 700;
margin: 0 10rpx;
} }
.filterMore1 { .filterMore1 {
@ -425,32 +409,27 @@ page {
overflow: hidden; overflow: hidden;
overflow-x: auto; overflow-x: auto;
white-space: nowrap; white-space: nowrap;
margin: 40rpx 0 20rpx 0; margin-top: 20rpx;
} }
.filterMoreItem { .filterMoreItem {
font-size: 26rpx; font-size: 28rpx;
color: #222222; color: #222222;
display: flex; display: flex;
align-items: center; align-items: center;
background-color: #f6f6fa;
padding: 0 20rpx; padding: 0 20rpx;
margin-right: 10rpx; margin-right: 10rpx;
margin-right: 20rpx; margin-right: 20rpx;
border-radius: 10rpx; border-radius: 20rpx;
border: 1rpx solid #cccccc;
padding: 10rpx 20rpx; padding: 10rpx 20rpx;
} }
.filterMoreItem-active {
color: #ff702c !important;
border: 1rpx solid #ff702c;
}
.filterMore2_item { .filterMore2_item {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
margin: 0 10rpx 45rpx 10rpx; margin-bottom: 20rpx;
color: #999; color: #999;
} }

View File

@ -1,178 +1,179 @@
<template> <template>
<view class="container2"> <view class="container2">
<view class="header"> <div class="header">
<view class="Filter"> <div class="Filter">
<view class="Filter_left"> <div class="Filter_left">
<view <div
v-for="filter in filters" v-for="filter in filters"
:key="filter.id" :key="filter.id"
class="FilterItem" class="FilterItem"
:class="{ active: selectedFilter === filter.id }" :class="{ active: selectedFilter === filter.id }"
@click=" @click="
showDialog(filter.id); showDialog(filter.id);
selectedFilter = filter.id;
" "
> >
{{ filter.label }} {{ filter.label }}
<image <image
:src=" :src="
selectedFilter === filter.id selectedFilter === filter.id
? 'https://static.hshuishang.com/search_up.png' ? 'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/search_up.png'
: 'https://static.hshuishang.com/property-img-file/homeServer_filterMore.png' : 'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_filterMore.png'
" "
:class="{ iconStyle: selectedFilter === filter.id }" :class="{ iconStyle: selectedFilter === filter.id }"
></image> ></image>
</view> </div>
</view> </div>
<view class="Filter_right" @click="showDialog(6)"> <div class="Filter_right" @click="showDialog(6)">
<text :class="{ activeFilter: show6 }">筛选</text> <text :class="{ activeFilter: show6 }">筛选</text>
<image <image
src="https://static.hshuishang.com/property-img-file/homeServer_filter.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_filter.png"
></image> ></image>
</view> </div>
</view> </div>
<!-- 位置筛选 --> <!-- 位置筛选 -->
<view class="FilterMore" v-if="show1"> <div class="FilterMore" v-if="show1">
<view class="local">距离 <span>上海公馆</span> ></view> <div class="local">距离 <span>上海公馆</span></div>
<view class="filterMore1"> <div class="filterMore1">
<view class="filterMoreItem filterMoreItem-active">附近</view> <div class="filterMoreItem">附近</div>
<view class="filterMoreItem">500m</view> <div class="filterMoreItem">500m</div>
<view class="filterMoreItem">1km</view> <div class="filterMoreItem">1km</div>
<view class="filterMoreItem">3km</view> <div class="filterMoreItem">3km</div>
<view class="filterMoreItem">5km</view> <div class="filterMoreItem">5km</div>
<view class="filterMoreItem">10km</view> <div class="filterMoreItem">10km</div>
</view> </div>
</view> </div>
<!-- 综合筛选 --> <!-- 综合筛选 -->
<view class="FilterMore" v-if="show2"> <div class="FilterMore" v-if="show2">
<view class="filterMore2_item"> <div class="filterMore2_item">
<view class="filterMore2_item_left">综合</view> <div class="filterMore2_item_left">综合</div>
<view class="filterMore2_item_right"> <div class="filterMore2_item_right">
<u-icon name="checkmark-circle-fill" color="#ff702c"></u-icon> <u-icon name="checkmark-circle-fill" color="#ff702c"></u-icon>
</view> </div>
</view> </div>
<view class="filterMore2_item"> <div class="filterMore2_item">
<view class="filterMore2_item_left active3">从高到低</view> <div class="filterMore2_item_left active3">从高到低</div>
<view class="filterMore2_item_right"> <div class="filterMore2_item_right">
<u-icon name="checkmark-circle-fill" color="#ff702c"></u-icon> <u-icon name="checkmark-circle-fill" color="#ff702c"></u-icon>
</view> </div>
</view> </div>
<view class="filterMore2_item"> <div class="filterMore2_item">
<view class="filterMore2_item_left">从低到高</view> <div class="filterMore2_item_left">从低到高</div>
<view class="filterMore2_item_right"> <div class="filterMore2_item_right">
<u-icon name="checkmark-circle-fill" color="#ff702c"></u-icon> <u-icon name="checkmark-circle-fill" color="#ff702c"></u-icon>
</view> </div>
</view> </div>
</view> </div>
<!-- 排序筛选 --> <!-- 排序筛选 -->
<view class="FilterMore" v-if="show3"> <div class="FilterMore" v-if="show3">
<view class="filterMore2_item"> <div class="filterMore2_item">
<view class="filterMore2_item_left2">智能排序</view> <div class="filterMore2_item_left2">智能排序</div>
<view class="filterMore2_item_right"> <div class="filterMore2_item_right">
<u-icon name="checkmark-circle-fill" color="#ff702c"></u-icon> <u-icon name="checkmark-circle-fill" color="#ff702c"></u-icon>
</view> </div>
</view> </div>
<view class="filterMore2_item"> <div class="filterMore2_item">
<view class="filterMore2_item_left2 active3">距离优先</view> <div class="filterMore2_item_left2 active3">距离优先</div>
<view class="filterMore2_item_right"> <div class="filterMore2_item_right">
<u-icon name="checkmark-circle-fill" color="#ff702c"></u-icon> <u-icon name="checkmark-circle-fill" color="#ff702c"></u-icon>
</view> </div>
</view> </div>
<view class="filterMore2_item"> <div class="filterMore2_item">
<view class="filterMore2_item_left2">好评优先</view> <div class="filterMore2_item_left2">好评优先</div>
<view class="filterMore2_item_right"> <div class="filterMore2_item_right">
<u-icon name="checkmark-circle-fill" color="#ff702c"></u-icon> <u-icon name="checkmark-circle-fill" color="#ff702c"></u-icon>
</view> </div>
</view> </div>
<view class="filterMore2_item"> <div class="filterMore2_item">
<view class="filterMore2_item_left2">销量优先</view> <div class="filterMore2_item_left2">销量优先</div>
<view class="filterMore2_item_right"> <div class="filterMore2_item_right">
<u-icon name="checkmark-circle-fill" color="#ff702c"></u-icon> <u-icon name="checkmark-circle-fill" color="#ff702c"></u-icon>
</view> </div>
</view> </div>
</view> </div>
<!-- 高级筛选面板 --> <!-- 高级筛选面板 -->
<view class="FilterMore" v-if="show6"> <div class="FilterMore" v-if="show6">
<view class="filter-section"> <div class="filter-section">
<view class="filter-title">满意度</view> <div class="filter-title">满意度</div>
<view class="filter-options"> <div class="filter-options">
<view <div
class="filter-option" class="filter-option"
:class="{ active: selectedSatisfaction.includes('5+') }" :class="{ active: selectedSatisfaction.includes('5+') }"
@click="toggleSatisfaction('5+')" @click="toggleSatisfaction('5+')"
> >
5分及以上 5分及以上
</view> </div>
<view <div
class="filter-option" class="filter-option"
:class="{ active: selectedSatisfaction.includes('4.9+') }" :class="{ active: selectedSatisfaction.includes('4.9+') }"
@click="toggleSatisfaction('4.9+')" @click="toggleSatisfaction('4.9+')"
> >
4.9分及以上 4.9分及以上
</view> </div>
<view <div
class="filter-option" class="filter-option"
:class="{ active: selectedSatisfaction.includes('4.8+') }" :class="{ active: selectedSatisfaction.includes('4.8+') }"
@click="toggleSatisfaction('4.8+')" @click="toggleSatisfaction('4.8+')"
> >
4.8分及以上 4.8分及以上
</view> </div>
<view <div
class="filter-option" class="filter-option"
:class="{ active: selectedSatisfaction.includes('4.7+') }" :class="{ active: selectedSatisfaction.includes('4.7+') }"
@click="toggleSatisfaction('4.7+')" @click="toggleSatisfaction('4.7+')"
> >
4.7分及以上 4.7分及以上
</view> </div>
<view <div
class="filter-option" class="filter-option"
:class="{ active: selectedSatisfaction.includes('4.6+') }" :class="{ active: selectedSatisfaction.includes('4.6+') }"
@click="toggleSatisfaction('4.6+')" @click="toggleSatisfaction('4.6+')"
> >
4.6分及以上 4.6分及以上
</view> </div>
<view <div
class="filter-option" class="filter-option"
:class="{ active: selectedSatisfaction.includes('4.5+') }" :class="{ active: selectedSatisfaction.includes('4.5+') }"
@click="toggleSatisfaction('4.5+')" @click="toggleSatisfaction('4.5+')"
> >
4.5分及以上 4.5分及以上
</view> </div>
</view> </div>
</view> </div>
<view class="filter-section"> <div class="filter-section">
<view class="filter-title">评论数量</view> <div class="filter-title">评论数量</div>
<view class="filter-options"> <div class="filter-options">
<view <div
class="filter-option" class="filter-option"
:class="{ active: selectedReviewCount === '1-100' }" :class="{ active: selectedReviewCount === '1-100' }"
@click="selectedReviewCount = '1-100'" @click="selectedReviewCount = '1-100'"
> >
1-100 1-100
</view> </div>
<view <div
class="filter-option" class="filter-option"
:class="{ active: selectedReviewCount === '100-500' }" :class="{ active: selectedReviewCount === '100-500' }"
@click="selectedReviewCount = '100-500'" @click="selectedReviewCount = '100-500'"
> >
100-500 100-500
</view> </div>
<view <div
class="filter-option" class="filter-option"
:class="{ active: selectedReviewCount === '500+' }" :class="{ active: selectedReviewCount === '500+' }"
@click="selectedReviewCount = '500+'" @click="selectedReviewCount = '500+'"
> >
500以上 500以上
</view> </div>
</view> </div>
</view> </div>
<view class="filter-section"> <div class="filter-section">
<view class="filter-title">价格范围</view> <div class="filter-title">价格范围</div>
<view class="price-range"> <div class="price-range">
<input <input
type="number" type="number"
v-model="minPrice" v-model="minPrice"
@ -188,111 +189,111 @@
class="price-input" class="price-input"
@input="validatePriceRange" @input="validatePriceRange"
/> />
</view> </div>
</view> </div>
<view class="filter-section"> <div class="filter-section">
<view class="filter-title">类别</view> <div class="filter-title">类别</div>
<view class="filter-options"> <div class="filter-options">
<view <div
class="filter-option" class="filter-option"
:class="{ active: selectedCategory === 'airConditioner' }" :class="{ active: selectedCategory === 'airConditioner' }"
@click="selectedCategory = 'airConditioner'" @click="selectedCategory = 'airConditioner'"
> >
空调维修 空调维修
</view> </div>
<view <div
class="filter-option" class="filter-option"
:class="{ active: selectedCategory === 'refrigerator' }" :class="{ active: selectedCategory === 'refrigerator' }"
@click="selectedCategory = 'refrigerator'" @click="selectedCategory = 'refrigerator'"
> >
冰箱维修 冰箱维修
</view> </div>
</view> </div>
</view> </div>
<view class="filter-buttons"> <div class="filter-buttons">
<button class="reset-button" @click="resetFilters">重置</button> <button class="reset-button" @click="resetFilters">重置</button>
<button class="confirm-button" @click="applyFilters">确定</button> <button class="confirm-button" @click="applyFilters">确定</button>
</view> </div>
</view> </div>
</view> </div>
<view class="main"> <div class="main">
<!-- 遮罩 --> <!-- 遮罩 -->
<view class="dialogBox" v-if="isShowDia" @click="closeAllFilters"></view> <div class="dialogBox" v-if="isShowDia"></div>
<view class="MasterList"> <div class="MasterList">
<view class="MasterItem" v-for="(item, index) in 5" :key="index"> <div class="MasterItem" v-for="(item, index) in 5" :key="index">
<view class="MasterItem_right"> <div class="MasterItem_right">
<view class="MasterItem_info"> <div class="MasterItem_info">
<view class="MasterItem_Info_left"> <div class="MasterItem_Info_left">
<image <image
src="https://static.hshuishang.com/property-img-file/home_icon12.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/home_icon12.png"
></image> ></image>
<view class="state state1">待服务</view> <div class="state state1">待服务</div>
<view class="state state2" v-if="false">休息中</view> <div class="state state2" v-if="false">休息中</div>
<view class="state state3" v-if="false">服务中</view> <div class="state state3" v-if="false">服务中</div>
</view> </div>
<view class="MasterItem_Info_right"> <div class="MasterItem_Info_right">
<view class="MasterItem_Info_right_1"> <div class="MasterItem_Info_right_1">
<view class="master_info_right_left"> <div class="master_info_right_left">
林师傅 林师傅
<image <image
class="Medal" class="Medal"
src="https://static.hshuishang.com/property-img-file/homeServer_Champion.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_Champion.png"
> >
</image> </image>
<image <image
class="Medal" class="Medal"
v-if="false" v-if="false"
src="https://static.hshuishang.com/property-img-file/homeServer_RunnerUp.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_RunnerUp.png"
> >
</image> </image>
<image <image
class="star" class="star"
src="https://static.hshuishang.com/property-img-file/local_start1.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/local_start1.png"
></image> ></image>
<span>4.8</span> <span>4.8</span>
</view> </div>
<view class="master_info_right_right" @click="masterInfo"> <div class="master_info_right_right" @click="masterInfo">
查看资料 查看资料
</view> </div>
</view> </div>
<view class="MasterItem_Info_right_2"> <div class="MasterItem_Info_right_2">
52岁 广东梅州人 5-10年 52岁 广东梅州人 5-10年
</view> </div>
<view class="MasterItem_Info_right_3"> <div class="MasterItem_Info_right_3">
<span>500+</span>预定 <span>100+</span>评价 <span>500+</span>预定 <span>100+</span>评价
</view> </div>
<view class="MasterItem_Info_right_4"> <div class="MasterItem_Info_right_4">
<view class="tagItem tag1">积极主动</view> <div class="tagItem tag1">积极主动</div>
<view class="tagItem tag2">技术精湛</view> <div class="tagItem tag2">技术精湛</div>
<view class="tagItem tag3">技术精湛</view> <div class="tagItem tag3">技术精湛</div>
</view> </div>
<view class="MasterItem_Info_right_5"> <div class="MasterItem_Info_right_5">
价格范围: <span>¥500-¥800</span> 价格范围: <span>¥500-¥800</span>
</view> </div>
<view class="MasterItem_Info_right_6"> <div class="MasterItem_Info_right_6">
<image <image
src="https://static.hshuishang.com/property-img-file/com_MsgImg1.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_MsgImg1.png"
></image> ></image>
<image <image
src="https://static.hshuishang.com/property-img-file/com_MsgImg1.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_MsgImg1.png"
></image> ></image>
<image <image
src="https://static.hshuishang.com/property-img-file/com_MsgImg1.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_MsgImg1.png"
></image> ></image>
</view> </div>
</view> </div>
</view> </div>
</view> </div>
</view> </div>
</view> </div>
</view> </div>
</view> </view>
</template> </template>
@ -338,8 +339,18 @@ export default {
}; };
}, },
watch: { watch: {
// 修改watch逻辑,只在点击空白区域关闭筛选器时清除选中状态 show1(val) {
// 而不是在切换不同筛选器时清除 if (!val) this.selectedFilter = null;
},
show2(val) {
if (!val) this.selectedFilter = null;
},
show3(val) {
if (!val) this.selectedFilter = null;
},
show6(val) {
if (!val) this.selectedFilter = null;
},
}, },
methods: { methods: {
masterInfo() { masterInfo() {
@ -390,9 +401,6 @@ export default {
this.isShowDia = false; this.isShowDia = false;
}, },
showDialog(index) { showDialog(index) {
// 先更新选中的过滤器ID
this.selectedFilter = index;
// 然后处理显示状态
this[`show${index}`] = !this[`show${index}`]; this[`show${index}`] = !this[`show${index}`];
this.logOtherButtons(index); this.logOtherButtons(index);
this.isShowDia = this[`show${index}`]; this.isShowDia = this[`show${index}`];
@ -404,14 +412,6 @@ export default {
} }
} }
}, },
closeAllFilters() {
// 关闭所有筛选面板并重置选中状态
for (let i = 1; i <= 6; i++) {
this[`show${i}`] = false;
}
this.isShowDia = false;
this.selectedFilter = null;
},
}, },
onReady() {}, onReady() {},

View File

@ -16,7 +16,7 @@
</view> </view>
<div class="iptBox"> <div class="iptBox">
<image <image
src="https://static.hshuishang.com/property-img-file/com_communitySearchIcon.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_communitySearchIcon.png"
></image> ></image>
<u--input <u--input
placeholder="请输入内容" placeholder="请输入内容"
@ -31,42 +31,42 @@
<div class="FilterItem" @click="showDialog(1)"> <div class="FilterItem" @click="showDialog(1)">
附近 附近
<image <image
src="https://static.hshuishang.com/property-img-file/homeServer_filterMore.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_filterMore.png"
></image> ></image>
</div> </div>
<div class="FilterItem" @click="showDialog(2)"> <div class="FilterItem" @click="showDialog(2)">
综合 综合
<image <image
src="https://static.hshuishang.com/property-img-file/homeServer_filterMore.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_filterMore.png"
></image> ></image>
</div> </div>
<div class="FilterItem" @click="showDialog(3)"> <div class="FilterItem" @click="showDialog(3)">
排序 排序
<image <image
src="https://static.hshuishang.com/property-img-file/homeServer_filterMore.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_filterMore.png"
></image> ></image>
</div> </div>
<div class="FilterItem" @click="showDialog(4)"> <div class="FilterItem" @click="showDialog(4)">
分类 分类
<image <image
src="https://static.hshuishang.com/property-img-file/homeServer_filterMore.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_filterMore.png"
></image> ></image>
</div> </div>
<div class="FilterItem" @click="showDialog(5)"> <div class="FilterItem" @click="showDialog(5)">
性别 性别
<image <image
src="https://static.hshuishang.com/property-img-file/homeServer_filterMore.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_filterMore.png"
></image> ></image>
</div> </div>
<div class="FilterItem" @click="showDialog(6)"> <div class="FilterItem" @click="showDialog(6)">
地区 地区
<image <image
src="https://static.hshuishang.com/property-img-file/homeServer_filterMore.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_filterMore.png"
></image> ></image>
</div> </div>
</div> </div>
@ -74,7 +74,7 @@
<div class="Filter_right"> <div class="Filter_right">
筛选 筛选
<image <image
src="https://static.hshuishang.com/property-img-file/homeServer_filter.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_filter.png"
></image> ></image>
</div> </div>
</div> </div>
@ -202,7 +202,7 @@
<div class="MasterItem_info"> <div class="MasterItem_info">
<div class="MasterItem_Info_left"> <div class="MasterItem_Info_left">
<image <image
src="https://static.hshuishang.com/property-img-file/home_icon12.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/home_icon12.png"
></image> ></image>
<div class="state state1">待服务</div> <div class="state state1">待服务</div>
<div class="state state2" v-if="false">休息中</div> <div class="state state2" v-if="false">休息中</div>
@ -214,18 +214,18 @@
林师傅 林师傅
<image <image
class="Medal" class="Medal"
src="https://static.hshuishang.com/property-img-file/homeServer_Champion.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_Champion.png"
> >
</image> </image>
<image <image
class="Medal" class="Medal"
v-if="false" v-if="false"
src="https://static.hshuishang.com/property-img-file/homeServer_RunnerUp.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/homeServer_RunnerUp.png"
> >
</image> </image>
<image <image
class="star" class="star"
src="https://static.hshuishang.com/property-img-file/local_start1.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/local_start1.png"
></image> ></image>
<span>4.8</span> <span>4.8</span>
</div> </div>
@ -252,13 +252,13 @@
<div class="MasterItem_Info_right_6"> <div class="MasterItem_Info_right_6">
<image <image
src="https://static.hshuishang.com/property-img-file/com_MsgImg1.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_MsgImg1.png"
></image> ></image>
<image <image
src="https://static.hshuishang.com/property-img-file/com_MsgImg1.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_MsgImg1.png"
></image> ></image>
<image <image
src="https://static.hshuishang.com/property-img-file/com_MsgImg1.png" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_MsgImg1.png"
></image> ></image>
</div> </div>
</div> </div>

View File

@ -37,7 +37,7 @@ export default {
shops: [ shops: [
{ {
id: 1, id: 1,
image: "https://static.hshuishang.com/test.png", image: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/test.png",
title: "专业到家服务", title: "专业到家服务",
ratingCount: 5, ratingCount: 5,
rating: 4.8, rating: 4.8,
@ -46,7 +46,7 @@ export default {
}, },
{ {
id: 2, id: 2,
image: "https://static.hshuishang.com/test.png", image: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/test.png",
title: "专业到家服务", title: "专业到家服务",
ratingCount: 5, ratingCount: 5,
rating: 4.8, rating: 4.8,
@ -55,7 +55,7 @@ export default {
}, },
{ {
id: 3, id: 3,
image: "https://static.hshuishang.com/test.png", image: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/test.png",
title: "专业到家服务", title: "专业到家服务",
ratingCount: 5, ratingCount: 5,
rating: 4.8, rating: 4.8,
@ -64,7 +64,7 @@ export default {
}, },
{ {
id: 4, id: 4,
image: "https://static.hshuishang.com/test.png", image: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/test.png",
title: "专业到家服务", title: "专业到家服务",
ratingCount: 5, ratingCount: 5,
rating: 4.8, rating: 4.8,
@ -73,7 +73,7 @@ export default {
}, },
{ {
id: 5, id: 5,
image: "https://static.hshuishang.com/test.png", image: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/test.png",
title: "专业到家服务", title: "专业到家服务",
ratingCount: 5, ratingCount: 5,
rating: 4.8, rating: 4.8,
@ -82,7 +82,7 @@ export default {
}, },
{ {
id: 6, id: 6,
image: "https://static.hshuishang.com/test.png", image: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/test.png",
title: "专业到家服务", title: "专业到家服务",
ratingCount: 5, ratingCount: 5,
rating: 4.8, rating: 4.8,
@ -91,7 +91,7 @@ export default {
}, },
{ {
id: 7, id: 7,
image: "https://static.hshuishang.com/test.png", image: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/test.png",
title: "专业到家服务", title: "专业到家服务",
ratingCount: 5, ratingCount: 5,
rating: 4.8, rating: 4.8,
@ -100,7 +100,7 @@ export default {
}, },
{ {
id: 7, id: 7,
image: "https://static.hshuishang.com/test.png", image: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/test.png",
title: "专业到家服务", title: "专业到家服务",
ratingCount: 5, ratingCount: 5,
rating: 4.8, rating: 4.8,
@ -109,7 +109,7 @@ export default {
}, },
{ {
id: 7, id: 7,
image: "https://static.hshuishang.com/test.png", image: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/test.png",
title: "专业到家服务", title: "专业到家服务",
ratingCount: 5, ratingCount: 5,
rating: 4.8, rating: 4.8,
@ -118,7 +118,7 @@ export default {
}, },
{ {
id: 7, id: 7,
image: "https://static.hshuishang.com/test.png", image: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/test.png",
title: "专业到家服务", title: "专业到家服务",
ratingCount: 5, ratingCount: 5,
rating: 4.8, rating: 4.8,
@ -127,7 +127,7 @@ export default {
}, },
{ {
id: 7, id: 7,
image: "https://static.hshuishang.com/test.png", image: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/test.png",
title: "专业到家服务", title: "专业到家服务",
ratingCount: 5, ratingCount: 5,
rating: 4.8, rating: 4.8,
@ -136,7 +136,7 @@ export default {
}, },
{ {
id: 7, id: 7,
image: "https://static.hshuishang.com/test.png", image: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/test.png",
title: "专业到家服务", title: "专业到家服务",
ratingCount: 5, ratingCount: 5,
rating: 4.8, rating: 4.8,
@ -145,7 +145,7 @@ export default {
}, },
{ {
id: 7, id: 7,
image: "https://static.hshuishang.com/test.png", image: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/test.png",
title: "专业到家服务", title: "专业到家服务",
ratingCount: 5, ratingCount: 5,
rating: 4.8, rating: 4.8,
@ -154,7 +154,7 @@ export default {
}, },
{ {
id: 7, id: 7,
image: "https://static.hshuishang.com/test.png", image: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/test.png",
title: "专业到家服务", title: "专业到家服务",
ratingCount: 5, ratingCount: 5,
rating: 4.8, rating: 4.8,
@ -163,7 +163,7 @@ export default {
}, },
{ {
id: 7, id: 7,
image: "https://static.hshuishang.com/test.png", image: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/test.png",
title: "专业到家服务", title: "专业到家服务",
ratingCount: 5, ratingCount: 5,
rating: 4.8, rating: 4.8,
@ -172,7 +172,7 @@ export default {
}, },
{ {
id: 7, id: 7,
image: "https://static.hshuishang.com/test.png", image: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/test.png",
title: "专业到家服务", title: "专业到家服务",
ratingCount: 5, ratingCount: 5,
rating: 4.8, rating: 4.8,
@ -181,7 +181,7 @@ export default {
}, },
{ {
id: 7, id: 7,
image: "https://static.hshuishang.com/test.png", image: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/test.png",
title: "专业到家服务", title: "专业到家服务",
ratingCount: 5, ratingCount: 5,
rating: 4.8, rating: 4.8,
@ -190,7 +190,7 @@ export default {
}, },
{ {
id: 7, id: 7,
image: "https://static.hshuishang.com/test.png", image: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/test.png",
title: "专业到家服务", title: "专业到家服务",
ratingCount: 5, ratingCount: 5,
rating: 4.8, rating: 4.8,

View File

@ -253,7 +253,7 @@
.active2::after { .active2::after {
content: ''; content: '';
background: url(https://static.hshuishang.com/property-img-file/com_active.png) no-repeat; background: url(https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_active.png) no-repeat;
background-size: 100% 100%; background-size: 100% 100%;
width: 52rpx; width: 52rpx;
height: 22rpx; height: 22rpx;

Some files were not shown because too many files have changed in this diff Show More