fix:最新优化

This commit is contained in:
Your Name 2026-06-29 16:28:54 +08:00
parent 6a7e01c0bf
commit 84077c1b4c
30 changed files with 635 additions and 40 deletions

View File

@ -1,5 +1,5 @@
NODE_ENV= development NODE_ENV= development
VITE_HTTP_BASE_URL = http://10.39.13.78:8002/api/ # VITE_HTTP_BASE_URL = http://10.39.13.78:8002/api/
# VITE_HTTP_BASE_URL = http://test-weapp-api.linyikj.com.cn/api/ VITE_HTTP_BASE_URL = http://test-weapp-api.linyikj.com.cn/api/
# VITE_HTTP_BASE_URL = https://weapp-api.linyikj.com.cn/api/ # VITE_HTTP_BASE_URL = https://weapp-api.linyikj.com.cn/api/
VITE_ACCESS_TOKEN_KEY= 'ACCESS_TOKEN_CUSTOMER' VITE_ACCESS_TOKEN_KEY= 'ACCESS_TOKEN_CUSTOMER'

View File

@ -1,3 +1,3 @@
{ {
"version": "0.0.108" "version": "0.0.113"
} }

View File

@ -96,19 +96,51 @@ export default {
}, },
handleSubmitOrder() { handleSubmitOrder() {
let bill_ids: any = [] let bill_ids: any = []
let selectedHouseName = '' // 记录选中的房屋名称
let hasSelectedBills = false // 是否有选中的账单
console.log(model?.items?.value,'model?.items?.value')
model?.items?.value?.map((res: any) => { model?.items?.value?.map((res: any) => {
res?.bills?.map((k: any) => { res?.bills?.map((k: any) => {
k?.details?.map((i: any) => { k?.details?.map((i: any) => {
if (k?.checked) { if (k?.checked) {
// 检查是否跨房屋
if (!hasSelectedBills) {
// 第一次选中,记录房屋名称
selectedHouseName = res?.house_name
hasSelectedBills = true
} else if (selectedHouseName !== res?.house_name) {
// 发现跨房屋的情况
showToast('不能跨房屋提交账单,请选择同一房屋的账单进行支付!')
return
}
bill_ids.push(i?.id) bill_ids.push(i?.id)
} }
}) })
}) })
}) })
console.log(bill_ids)
if (!bill_ids?.length) { if (!bill_ids?.length) {
showToast('至少选择一个账单!') showToast('至少选择一个账单!')
return return
} }
// 再次检查是否跨房屋(双重检查)
const houseSet = new Set<string>()
model?.items?.value?.forEach((res: any) => {
res?.bills?.forEach((k: any) => {
if (k?.checked) {
houseSet.add(res?.house_name)
}
})
})
if (houseSet.size > 1) {
showToast('不能跨房屋提交账单,请选择同一房屋的账单进行支付!')
return
}
getApiLoading(Apis.HouseOrder.HouseOrders.Store, { getApiLoading(Apis.HouseOrder.HouseOrders.Store, {
bill_ids: bill_ids, bill_ids: bill_ids,
amount: model?.total_amount?.value, amount: model?.total_amount?.value,

View File

@ -1,9 +1,13 @@
<template> <template>
<view> <view>
<view class="pay_title">支付金额</view> <view class="house_title">
{{ useModel?.houseInfo?.value?.asset_house?.full_name || '-' }}
</view>
<view class="pay_price"> <view class="pay_price">
<text>¥</text>{{ useModel?.orderShow.value?.total_payable_amount || '0.00' }} <text>¥</text>{{ useModel?.orderShow.value?.total_payable_amount || '0.00' }}
</view> </view>
<view class="pay_title_sub">支付金额</view>
<view class="pay_type"> <view class="pay_type">
<view class="pay_label"> <view class="pay_label">
<image src="/static/svg/wx_pay.svg" mode="heightFix" /> <image src="/static/svg/wx_pay.svg" mode="heightFix" />

View File

@ -7,6 +7,7 @@ const getShow = (timer?: any) => {
Apis.HouseOrder.HouseOrders.Show({ id: useModel?.OrderInfo?.value?.id }).then(res => { Apis.HouseOrder.HouseOrders.Show({ id: useModel?.OrderInfo?.value?.id }).then(res => {
useModel.loadingShowNumber.value += 1 useModel.loadingShowNumber.value += 1
useModel.orderShow.value = res?.data useModel.orderShow.value = res?.data
useModel.houseInfo.value = res?.data?.house_order_items[0]
if (res?.data?.order_status === 'Paid') { if (res?.data?.order_status === 'Paid') {
useModel.payDisabled.value = false useModel.payDisabled.value = false
clearInterval(timer) clearInterval(timer)

View File

@ -8,5 +8,6 @@ export default {
payDisabled: ref(false), payDisabled: ref(false),
hideStatus: ref(false), hideStatus: ref(false),
loadingLabel: ref(''), loadingLabel: ref(''),
timer: ref<any>() timer: ref<any>(),
houseInfo: ref<any>({}),
} }

View File

@ -2,13 +2,25 @@ page {
background-color: #f3f3f4; background-color: #f3f3f4;
} }
.house_title{
text-align: center;
font-size:34rpx;
padding:70rpx 0 40rpx 0;
font-weight: 600;
}
.pay_title{ .pay_title{
font-size:30rpx; font-size:30rpx;
text-align: center; text-align: center;
font-weight: 600; font-weight: 600;
padding:70rpx 0 40rpx 0; padding: 40rpx 0;
}
.pay_title_sub{
font-size:24rpx;
color:#999;
text-align: center;
} }
.pay_price{ .pay_price{
font-size: 50rpx; font-size: 50rpx;

View File

@ -0,0 +1,81 @@
<template>
<view>
<view class="house_title">
<!-- {{ useModel?.houseInfo?.value?.remark || '-' }} -->
<hs-enum-tag
:value="useModel?.orderShow?.value?.type"
:Enums="BillPaymentsTypeEnum"
/>
</view>
<view class="pay_price">
<text>¥</text>{{ useModel?.orderShow.value?.amount || '0.00' }}
</view>
<view class="pay_title_sub">支付金额</view>
<view class="pay_type">
<view class="pay_label">
<image src="/static/svg/wx_pay.svg" mode="heightFix" />
<text>微信支付</text>
</view>
<uni-icons type="checkbox-filled" size="23" color="#48B338"></uni-icons>
</view>
<view class="footer_btn">
<hs-button
type="primary"
size="md"
:disabled="useModel?.payDisabled?.value"
:loading="useModel?.payDisabled?.value"
:loading_label="useModel?.loadingLabel?.value"
label="立即支付"
@click="method.onPay"
/>
</view>
</view>
</template>
<script lang="ts" setup>
import { onHide, onLoad, onShow, onUnload } from '@dcloudio/uni-app'
import { getCurrentInstance } from 'vue'
import method from './method'
import useModel from './model'
import { BillPaymentsTypeEnum } from '@/gen/Enums'
onLoad(async e => {
console.log('onLoad', e)
await getCurrentInstance()?.appContext.config.globalProperties.$onLaunched
useModel.loadingLabel.value = ''
useModel.loadingShowNumber.value = 0
useModel.hideStatus.value = false
useModel.payDisabled.value = false
useModel.OrderInfo.value = e
method?.getShow()
})
onShow(() => {
if (useModel?.hideStatus?.value) {
//-
useModel.hideStatus.value = false
//
method?.getShow(null)
method?.loadShow()
}
console.log('onShow')
})
onHide(() => {
if (useModel?.payDisabled?.value) {
//
useModel.hideStatus.value = true
}
})
onUnload(() => {
useModel.loadingLabel.value = ''
useModel.loadingShowNumber.value = 0
useModel.hideStatus.value = false
useModel.payDisabled.value = false
clearInterval(useModel.timer.value)
})
</script>
<style lang="scss">
@import './style.scss';
</style>

View File

@ -0,0 +1,66 @@
import { Apis } from '@/gen/Apis'
import useModel from './model'
import { getApiLoading } from '@/common/libraries/apiLoading'
import { tongLianPay } from '@/common/libraries/pay'
const getShow = (timer?: any) => {
Apis.Bill.Bills.Show({ bill_id: useModel?.OrderInfo?.value?.id }).then(res => {
useModel.loadingShowNumber.value += 1
useModel.orderShow.value = res?.data
// useModel.houseInfo.value = res?.data?.house_order_items[0]
if (res?.data?.payment_status === 'Paid') {
useModel.payDisabled.value = false
clearInterval(timer)
useModel.loadingLabel.value = ''
uni.hideLoading()
uni.redirectTo({
url: '/INDEX/pay/success'
})
}
console.log('orderShow', res?.data)
})
}
const loadShow = () => {
useModel.loadingLabel.value = '更新账单中...'
useModel.timer.value = setInterval(() => {
if (
useModel?.loadingShowNumber?.value > 5 &&
useModel?.orderShow?.value?.order_status === 'Pending'
) {
useModel.loading.value = false
useModel.payDisabled.value = false
useModel.loadingShowNumber.value = 0
useModel.loadingLabel.value = ''
uni.hideLoading()
clearInterval(useModel.timer.value)
return
}
if (useModel.loadingShowNumber.value <= 5) {
getShow(useModel.timer.value)
}
}, 1500)
}
export default {
onPay() {
useModel.loading.value = true
getApiLoading(Apis.Bill.Bills.Payment, { bill_id: useModel?.OrderInfo?.value?.id,payment_method:useModel?.orderShow?.value?.payment_method }).then(
res => {
console.log('onPay', res?.data)
useModel.loading.value = false
useModel.payDisabled.value = true
tongLianPay(
res?.data,
() => {},
() => {
useModel.loading.value = false
useModel.payDisabled.value = false
}
)
}
)
},
loadShow,
getShow
}

View File

@ -0,0 +1,13 @@
import { ref } from 'vue'
export default {
loading: ref(false),
loadingShowNumber: ref(-1),
OrderInfo: ref<any>({}),
orderShow: ref<any>({}),
payDisabled: ref(false),
hideStatus: ref(false),
loadingLabel: ref(''),
timer: ref<any>(),
houseInfo: ref<any>({}),
}

View File

@ -0,0 +1,70 @@
page {
background-color: #f3f3f4;
}
.house_title{
text-align: center;
font-size:34rpx;
padding:70rpx 0 40rpx 0;
font-weight: 600;
}
.pay_title{
font-size:30rpx;
text-align: center;
font-weight: 600;
padding: 40rpx 0;
}
.pay_title_sub{
font-size:24rpx;
color:#999;
text-align: center;
}
.pay_price{
font-size: 50rpx;
text-align: center;
font-weight: 600;
color:#DF3600;
text{
font-size: 30rpx;
}
}
.pay_type{
display: flex;
align-items: center;
justify-content: space-between;
background-color: #fff;
border-radius: 10rpx;
margin:100rpx 30rpx 0 30rpx;
padding:30rpx;
.pay_label{
display: flex;
align-items: center;
font-size:28rpx;
image{
width:60rpx;
height:60rpx;
}
text{
padding-left:10rpx;
}
}
}
.footer_btn {
position: fixed;
bottom: 0;
z-index: 100;
background-color: #fff;
padding: 25rpx 30rpx;
left: 0;
right: 0;
border-top-left-radius: 15rpx;
border-top-right-radius: 15rpx;
padding-bottom: calc(25rpx + constant(safe-area-inset-bottom));
padding-bottom: calc(25rpx + env(safe-area-inset-bottom));
}

View File

@ -0,0 +1,33 @@
<template>
<view class="success_page">
<view>
<uni-icons type="checkbox-filled" size="70" color="#48B338"></uni-icons>
</view>
<view class="success_label"> 支付成功 </view>
<view class="success_des"> 您的物业费账单已实时更新 </view>
<hs-footer btnParimaryName="返回首页" @handleParmaryClick="onBackHome" />
</view>
</template>
<script lang="ts" setup>
const onBackHome = () => {
uni.switchTab({
url: '/pages/index/index'
})
}
</script>
<style lang="scss" scoped>
.success_page {
text-align: center;
padding-top: 30%;
.success_label {
font-size: 36rpx;
padding: 15rpx 0;
}
.success_des {
color: #666;
font-size: 28rpx;
}
}
</style>

View File

@ -89,6 +89,9 @@ export default {
if (!data?.visitor_phone) { if (!data?.visitor_phone) {
return showToast('请设置访客手机号!') return showToast('请设置访客手机号!')
} }
if (auth?.data?.user?.phone === data?.visitor_phone) {
return showToast('当前访客手机号已是住户!')
}
if (!data?.visit_reason) { if (!data?.visit_reason) {
return showToast('请添加来访事由!') return showToast('请添加来访事由!')
} }

View File

@ -59,7 +59,7 @@
</view> </view>
</view> </view>
<view v-if="i?.status !== 'Pending'" class="footer_items"> <view v-if="i?.status !== 'Pending' && i?.construction_status !== 'CompletedConstruction'" class="footer_items">
<template v-if="i?.status === 'Draft' || i?.status === 'Rejected'"> <template v-if="i?.status === 'Draft' || i?.status === 'Rejected'">
<hs-button <hs-button
:label="i?.status === 'Rejected' ? '重新编辑' : '继续编辑'" :label="i?.status === 'Rejected' ? '重新编辑' : '继续编辑'"
@ -68,6 +68,7 @@
/> />
</template> </template>
<template v-if="i?.status === 'Approved'"> <template v-if="i?.status === 'Approved'">
<template v-if="i?.status === 'Approved' && i?.construction_status !== 'CompletedConstruction'">
<hs-button <hs-button
label="添加工人" label="添加工人"
type="ghost" type="ghost"
@ -80,6 +81,7 @@
<hs-button label="装修延期" type="ghost" @click="method.handleExtension(i)" /> <hs-button label="装修延期" type="ghost" @click="method.handleExtension(i)" />
</view> </view>
</template> </template>
</template>
</view> </view>
</view> </view>
</cc-scroll-loading> </cc-scroll-loading>

View File

@ -135,7 +135,7 @@
<hs-footer <hs-footer
v-if=" v-if="
useModel?.showData?.value?.status === 'Approved' && useModel?.showData?.value?.status === 'Approved' &&
!useModel?.showData?.value?.house_work_orders?.length !useModel?.showData?.value?.house_work_orders?.length && useModel?.showData?.value?.construction_status !== 'CompletedConstruction'
" "
btnOtherShow btnOtherShow
btnParimaryName="申请验收" btnParimaryName="申请验收"
@ -146,7 +146,8 @@
<hs-footer <hs-footer
v-if=" v-if="
useModel?.showData?.value?.status === 'Approved' && useModel?.showData?.value?.status === 'Approved' &&
useModel?.showData?.value?.house_work_orders?.length useModel?.showData?.value?.house_work_orders?.length &&
useModel?.showData?.value?.construction_status !== 'CompletedConstruction'
" "
btnParimaryName="装修延期" btnParimaryName="装修延期"
@handleParmaryClick="method.handleExtension" @handleParmaryClick="method.handleExtension"

View File

@ -0,0 +1,69 @@
<template>
<view class="release_items_page">
<cc-scroll-loading :meta="useModel?.metaData?.value" @load="method?.loadMore">
<view v-for="(i, index) in useModel?.listData?.value" :key="`items_${index}`" class="items">
<view class="cell_items">
<view class="label"> 状态 </view>
<view :class="`value status status_${i.payment_status}`">
{{ HouseOrdersOrderStatusEnum[i.payment_status as keyof typeof HouseOrdersOrderStatusEnum]?.text }}
</view>
</view>
<view class="cell_items">
<view class="label"> 支付金额 </view>
<view class="value"> ¥{{ i?.amount || '-' }} </view>
</view>
<view class="cell_items">
<view class="label"> 订单号 </view>
<view class="value">
{{ i?.payment_no || '-' }}
</view>
</view>
<!-- <view class="cell_items">
<view class="label"> 支付方式 </view>
<view class="value"> {{ HouseOrdersPaymentMethodEnum[i.payment_method as keyof typeof HouseOrdersPaymentMethodEnum]?.text }} </view>
</view> -->
<view class="cell_items">
<view class="label"> 支付时间 </view>
<view class="value"> {{ i?.paid_time || '-' }} </view>
</view>
<view class="cell_items">
<view class="label"> 创建日期 </view>
<view class="value"> {{ i?.created_at || '-' }} </view>
</view>
<view class="cell_items">
<view class="label"> 其他备注 </view>
<view class="value"> {{ i?.remark || '-' }} </view>
</view>
</view>
</cc-scroll-loading>
</view>
</template>
<script setup lang="ts">
import { onLoad, onShow, onUnload } from '@dcloudio/uni-app'
import method from './method'
import useModel from './model'
import { HouseOrdersOrderStatusEnum, HouseOrdersPaymentMethodEnum } from '@/gen/Enums'
onLoad(() => {
method?.getList()
})
onShow(() => {
if (useModel?.loadingStatus?.value) {
useModel.listData.value = []
useModel.formData.value = { page: 1 }
method?.getList()
}
})
onUnload(() => {
useModel.loadingStatus.value = false
useModel.listData.value = []
useModel.formData.value = { page: 1 }
})
</script>
<style lang="scss">
@import './style.scss';
</style>

View File

@ -0,0 +1,29 @@
import { Apis } from '@/gen/Apis'
import useModel from './model'
import { useWeAppAuthStore } from '@/common'
import { getApiLoading } from '@/common/libraries/apiLoading'
import userLoginStatus from '@/common/libraries/userUserLogin'
import { showToastBack, showToast } from '@/common/libraries/naviHelper'
const auth = useWeAppAuthStore()
const getList = () => {
getApiLoading(Apis.Bill.Bills.List, useModel?.formData?.value).then(res => {
useModel.listData.value = [...useModel.listData.value, ...res.data]
useModel.metaData.value = res.meta
useModel.loadingStatus.value = true
console.log(res)
})
}
export default {
getList,
loadMore(page: number) {
useModel.formData.value.page = page
this.getList()
},
showPassedDoc(res: { id: string }) {
uni.navigateTo({
url: `/ME/release_items/show/index?id=${res?.id}`
})
}
}

View File

@ -0,0 +1,8 @@
import { reactive, ref } from 'vue'
export default {
listData: ref<any>([]),
formData: ref({ page: 1 }),
metaData: ref({}),
currentTabs: ref(0),
loadingStatus: ref(false)
}

View File

@ -0,0 +1,41 @@
page {
background-color: #f8f8f8;
}
.release_items_page {
padding-bottom: calc(130rpx + constant(safe-area-inset-bottom));
padding-bottom: calc(130rpx + env(safe-area-inset-bottom));
}
.items {
margin: 30rpx 30rpx 0 30rpx;
background-color: #fff;
border-radius: 15rpx;
padding: 30rpx 30rpx 0 30rpx;
.cell_items {
display: flex;
align-items: center;
justify-content: space-between;
color: #3d3d3d;
font-size: 28rpx;
padding-bottom: 25rpx;
}
.footer_items {
display: flex;
align-items: center;
justify-content: flex-end;
border-top: 1px solid #eee;
padding: 25rpx 0;
}
.status {
color: #fff;
border-radius: 8rpx;
padding: 6rpx 12rpx;
font-size: 23rpx;
background-color: #c5c5c5;
}
.status_Pending {
background-color: #ff8d1a;
}
.status_Paid {
background-color: #52c41a;
}
}

View File

@ -15,10 +15,8 @@ const bindPickerChange = (e: any) => {
let data = useModel?.listData?.value[e.detail.value] || {} let data = useModel?.listData?.value[e.detail.value] || {}
console.log(data, 'data') console.log(data, 'data')
useModel.currentHouse.value = data useModel.currentHouse.value = data
if (data?.type === 2) {
method?.getQrCode() method?.getQrCode()
} }
}
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.switch_select_house { .switch_select_house {

View File

@ -26,6 +26,12 @@
<view class="pass_address_label"> <view class="pass_address_label">
{{ useModel?.currentHouse?.value?.full_name || '' }} {{ useModel?.currentHouse?.value?.full_name || '' }}
</view> </view>
<view class="qr_code">
<image :src="useModel?.qrCode?.value" mode="widthFix" />
</view>
<view class="qr_code_label"> 请出示二维码协助员工扫码 </view>
<template v-if="useModel?.currentHouse?.value?.type === 1"> <template v-if="useModel?.currentHouse?.value?.type === 1">
<view class="house_relation_time"> <view class="house_relation_time">
<view class="house_relation_label"> <view class="house_relation_label">
@ -42,10 +48,7 @@
</view> </view>
</template> </template>
<template v-if="useModel?.currentHouse?.value?.type === 2"> <template v-if="useModel?.currentHouse?.value?.type === 2">
<view class="qr_code">
<image :src="useModel?.qrCode?.value" mode="widthFix" />
</view>
<view class="qr_code_label"> 请出示二维码协助员工扫码 </view>
<view class="user_qr_code"> <view class="user_qr_code">
<image <image
:src=" :src="

View File

@ -24,16 +24,22 @@ const getList = () => {
useModel.listData.value = [...useModel.listData.value, ...data] useModel.listData.value = [...useModel.listData.value, ...data]
if (useModel.listData.value?.length) { if (useModel.listData.value?.length) {
useModel.currentHouse.value = useModel?.listData?.value[0] useModel.currentHouse.value = useModel?.listData?.value[0]
if (useModel?.currentHouse?.value?.type === 2) {
getQrCode() getQrCode()
} // if (useModel?.currentHouse?.value?.type === 2) {
// getQrCode()
// }
// if (useModel?.currentHouse?.value?.type === 1) {
// getQrCode()
// }
} }
}) })
} }
const getQrCode = () => { const getQrCode = () => {
getApiLoading(Apis.Visitor.VisitorApplies.VisitorQrCode, { let url = useModel?.currentHouse?.value?.type === 2?Apis.Visitor.VisitorApplies.VisitorQrCode:Apis.Visitor.VisitorApplies.ResidentQrCode
id: useModel?.currentHouse?.value?.id getApiLoading(url, {
id: useModel?.currentHouse?.value?.id,
asset_houses_id: useModel?.currentHouse?.value?.id
}).then(res => { }).then(res => {
useModel.qrCode.value = res?.data?.qr_code useModel.qrCode.value = res?.data?.qr_code
console.log(res) console.log(res)

View File

@ -94,9 +94,9 @@ declare namespace ApiTypes {
namespace Asset { namespace Asset {
namespace AssetHouses { namespace AssetHouses {
type GetCities = { type GetCities = {
"city"?: string; // - "city"?: string; // 城市
"city_id"?: string; // - "city_id"?: string; // 城市ID
"app_id": string; // - "app_id": string; // 小程序ID
}; };
type SelectProject = { type SelectProject = {
"name"?: string; // - "name"?: string; // -
@ -574,6 +574,9 @@ declare namespace ApiTypes {
type VisitorQrCode = { type VisitorQrCode = {
"id": number; // id "id": number; // id
}; };
type ResidentQrCode = {
"asset_houses_id": number; // 房屋ID
};
} }
} }
namespace WechatWork { namespace WechatWork {

View File

@ -296,6 +296,9 @@ export const Apis = {
HsbPaymentCallback(): Promise<MyResponseType> { HsbPaymentCallback(): Promise<MyResponseType> {
return request('customer/loop/c_c_b/hsb_payment_callback', {}); return request('customer/loop/c_c_b/hsb_payment_callback', {});
}, },
ReconciliationCallback(): Promise<MyResponseType> {
return request('customer/loop/c_c_b/reconciliation_callback', {});
},
}, },
}, },
Msg: { Msg: {
@ -401,6 +404,9 @@ export const Apis = {
VisitorQrCode(data: ApiTypes.Visitor.VisitorApplies.VisitorQrCode): Promise<MyResponseType> { VisitorQrCode(data: ApiTypes.Visitor.VisitorApplies.VisitorQrCode): Promise<MyResponseType> {
return request('customer/visitor/visitor_applies/visitor_qr_code', { data }); return request('customer/visitor/visitor_applies/visitor_qr_code', { data });
}, },
ResidentQrCode(data: ApiTypes.Visitor.VisitorApplies.ResidentQrCode): Promise<MyResponseType> {
return request('customer/visitor/visitor_applies/resident_qr_code', { data });
},
}, },
}, },
WechatWork: { WechatWork: {

View File

@ -71,6 +71,7 @@ export const ApprovalTemplatesTypeEnum = {
'ContractPayment': {"text":"合同支付","color":"#00bcd4","value":"ContractPayment"}, 'ContractPayment': {"text":"合同支付","color":"#00bcd4","value":"ContractPayment"},
'OtherContractSeal': {"text":"其它合同用印","color":"#795548","value":"OtherContractSeal"}, 'OtherContractSeal': {"text":"其它合同用印","color":"#795548","value":"OtherContractSeal"},
'HouseBillUpdate': {"text":"物业账单修改","color":"#607d8b","value":"HouseBillUpdate"}, 'HouseBillUpdate': {"text":"物业账单修改","color":"#607d8b","value":"HouseBillUpdate"},
'BillUpdate': {"text":"其他账单修改","color":"#795548","value":"BillUpdate"},
}; };
// 车位产权类型 // 车位产权类型
@ -292,9 +293,50 @@ export const BannersTypeEnum = {
'Text': {"text":"文本","color":"#0000ff","value":"Text"}, 'Text': {"text":"文本","color":"#0000ff","value":"Text"},
}; };
// BillPaymentsStatusEnum
export const BillPaymentsStatusEnum = {
'Pending': {"text":"待审","color":"#faad14","value":"Pending"},
'Approved': {"text":"已审","color":"#52c41a","value":"Approved"},
'Rejected': {"text":"驳回","color":"#f5222d","value":"Rejected"},
};
// BillPaymentsTypeEnum
export const BillPaymentsTypeEnum = {
'DoorCard': {"text":"门卡","color":"#2196f3","value":"DoorCard"},
'ResourceOrder': {"text":"资源订单","color":"#4caf50","value":"ResourceOrder"},
'EmergencyEvent': {"text":"突发事件","color":"#ef4444","value":"EmergencyEvent"},
'RenovationDeposit': {"text":"装修押金","color":"#f59e0b","value":"RenovationDeposit"},
};
// BillsFlowTypeEnum
export const BillsFlowTypeEnum = {
'Income': {"text":"收入","color":"#10b981","value":"Income"},
'Expense': {"text":"支出","color":"#ef4444","value":"Expense"},
};
// BillsRefundStatusEnum
export const BillsRefundStatusEnum = {
'Requested': {"text":"已申请","color":"#2196f3","value":"Requested"},
'Reviewing': {"text":"审核中","color":"#ff9800","value":"Reviewing"},
'Rejected': {"text":"已拒绝","color":"#f44336","value":"Rejected"},
'Processing': {"text":"退款中","color":"#9c27b0","value":"Processing"},
'Refunded': {"text":"已退款","color":"#4caf50","value":"Refunded"},
'Failed': {"text":"退款失败","color":"#e91e63","value":"Failed"},
};
// BillsStatusEnum
export const BillsStatusEnum = {
'PendingPayment': {"text":"待支付","color":"#facc15","value":"PendingPayment"},
'Paid': {"text":"已支付","color":"#10b981","value":"Paid"},
'ToBeConfirmed': {"text":"待确认","color":"#f97316","value":"ToBeConfirmed"},
'Overdue': {"text":"已逾期","color":"#ef4444","value":"Overdue"},
'UnderApproval': {"text":"审批中","color":"#8b5cf6","value":"UnderApproval"},
'Cancelled': {"text":"已取消","color":"#9ca3af","value":"Cancelled"},
};
// 缓存类型 // 缓存类型
export const CacheTypeEnum = { export const CacheTypeEnum = {
'MobilePhoneVerificationCode': {"text":"手机验证码","color":"#16df7a","value":"MobilePhoneVerificationCode"}, 'MobilePhoneVerificationCode': {"text":"手机验证码","color":"#68b5f8","value":"MobilePhoneVerificationCode"},
}; };
// CompaniesMerchantTypeEnum // CompaniesMerchantTypeEnum
@ -558,6 +600,25 @@ export const ConvenienceServicesTypeEnum = {
'GovernmentConsulting': {"text":"政务咨询","color":"#10b981","value":"GovernmentConsulting"}, 'GovernmentConsulting': {"text":"政务咨询","color":"#10b981","value":"GovernmentConsulting"},
}; };
// CooperationSuggestionEnum
export const CooperationSuggestionEnum = {
'Recommend': {"text":"建议合作","color":"#28a745","value":"Recommend"},
'Restrict': {"text":"建议限制合作","color":"#ffc107","value":"Restrict"},
'Pause': {"text":"建议暂不合作","color":"#fd7e14","value":"Pause"},
'Eliminate': {"text":"建议淘汰","color":"#dc3545","value":"Eliminate"},
};
// CreditRatingEnum
export const CreditRatingEnum = {
'AAA': {"text":"AAA","color":"#28a745","value":"AAA"},
'AA': {"text":"AA","color":"#28a745","value":"AA"},
'A': {"text":"A","color":"#28a745","value":"A"},
'BBB': {"text":"BBB","color":"#ffc107","value":"BBB"},
'BB': {"text":"BB","color":"#ffc107","value":"BB"},
'B': {"text":"B","color":"#ffc107","value":"B"},
'CCC': {"text":"CCC","color":"#dc3545","value":"CCC"},
};
// CustomerBacklogsStatusEnum // CustomerBacklogsStatusEnum
export const CustomerBacklogsStatusEnum = { export const CustomerBacklogsStatusEnum = {
'Pending': {"text":"待办","color":"#faad14","value":"Pending"}, 'Pending': {"text":"待办","color":"#faad14","value":"Pending"},
@ -1078,6 +1139,13 @@ export const HouseWorkOrdersTypeEnum = {
'SecurityInspection': {"text":"安全巡检","color":"#e67e22","value":"SecurityInspection"}, 'SecurityInspection': {"text":"安全巡检","color":"#e67e22","value":"SecurityInspection"},
}; };
// InfoVerificationEnum
export const InfoVerificationEnum = {
'Authentic': {"text":"真实完整","color":"#28a745","value":"Authentic"},
'Discrepancy': {"text":"存在差异","color":"#ffc107","value":"Discrepancy"},
'Fake': {"text":"信息造假","color":"#dc3545","value":"Fake"},
};
// 公告阅读者类型 // 公告阅读者类型
export const MsgPropertyAnnouncementReadsReaderTypeEnum = { export const MsgPropertyAnnouncementReadsReaderTypeEnum = {
'Customer': {"text":"客户","color":"#3b82f6","value":"Customer"}, 'Customer': {"text":"客户","color":"#3b82f6","value":"Customer"},
@ -1139,12 +1207,27 @@ export const PayTypeEnum = {
'Alipay': {"text":"支付宝","color":"#1677ff","value":"Alipay"}, 'Alipay': {"text":"支付宝","color":"#1677ff","value":"Alipay"},
}; };
// QualificationEvaluationEnum
export const QualificationEvaluationEnum = {
'Compliant': {"text":"合规","color":"#28a745","value":"Compliant"},
'BasicCompliant': {"text":"基本合规","color":"#ffc107","value":"BasicCompliant"},
'NonCompliant': {"text":"不合规","color":"#dc3545","value":"NonCompliant"},
};
// 题目类型枚举 // 题目类型枚举
export const QuestionsTypeEnum = { export const QuestionsTypeEnum = {
'Score': {"text":"评分题","color":"#4caf50","value":"Score"}, 'Score': {"text":"评分题","color":"#4caf50","value":"Score"},
'Fill': {"text":"填空题","color":"#2196f3","value":"Fill"}, 'Fill': {"text":"填空题","color":"#2196f3","value":"Fill"},
}; };
// RatingOutlookEnum
export const RatingOutlookEnum = {
'Stable': {"text":"稳定","color":"#28a745","value":"Stable"},
'Positive': {"text":"正面","color":"#17a2b8","value":"Positive"},
'Negative': {"text":"负面","color":"#dc3545","value":"Negative"},
'Observation': {"text":"观察","color":"#ffc107","value":"Observation"},
};
// 退款状态枚举 // 退款状态枚举
export const RefundsStatusEnum = { export const RefundsStatusEnum = {
'Pending': {"text":"待审批","color":"#ff9800","value":"Pending"}, 'Pending': {"text":"待审批","color":"#ff9800","value":"Pending"},
@ -1267,6 +1350,13 @@ export const ResourcesReservationStatusEnum = {
'Not': {"text":"无预约","color":"#f44336","value":"Not"}, 'Not': {"text":"无预约","color":"#f44336","value":"Not"},
}; };
// RiskLevelEnum
export const RiskLevelEnum = {
'Low': {"text":"低风险","color":"#28a745","value":"Low"},
'Medium': {"text":"中风险","color":"#ffc107","value":"Medium"},
'High': {"text":"高风险","color":"#dc3545","value":"High"},
};
// 性别 // 性别
export const SexEnum = { export const SexEnum = {
'Male': {"text":"男","color":"#0000ff","value":"Male"}, 'Male': {"text":"男","color":"#0000ff","value":"Male"},

View File

@ -278,6 +278,11 @@
"style": { "style": {
"navigationBarTitleText": "放行详情" "navigationBarTitleText": "放行详情"
} }
},{
"path": "incidental_expenses/index",
"style": {
"navigationBarTitleText": "缴费记录"
}
} }
] ]
}, },
@ -351,6 +356,12 @@
"navigationBarTitleText": "收银台" "navigationBarTitleText": "收银台"
} }
}, },
{
"path": "pay_general/index",
"style": {
"navigationBarTitleText": "通用收费"
}
},
{ {
"path": "pay/success", "path": "pay/success",
"style": { "style": {

View File

@ -68,6 +68,11 @@ const area_functional: any = [
label: '意见反馈', label: '意见反馈',
icon: 'Feedback', icon: 'Feedback',
url: '/ME/feedback/index' url: '/ME/feedback/index'
},
{
label: '支付记录',
icon: 'incidental_expenses',
url: '/ME/incidental_expenses/index'
} }
] ]
const goToPage = (url: string) => { const goToPage = (url: string) => {

View File

@ -5,9 +5,9 @@
:style="`padding-top:${capsuleRect.top + capsuleRect.height}px;`" :style="`padding-top:${capsuleRect.top + capsuleRect.height}px;`"
> >
<view v-if="userData?.user" class="user_info_avatar"> <view v-if="userData?.user" class="user_info_avatar">
<view <view>
><up-avatar size="60" :src="userData?.user?.avatar && userData?.user?.avatar[0]?.url" <up-avatar size="60" :src="userData?.user?.avatar && userData?.user?.avatar[0]?.url" />
/></view> </view>
<view class="user_info_name_phone"> <view class="user_info_name_phone">
<view class="name" v-if="userData?.user?.name"> <view class="name" v-if="userData?.user?.name">
{{ userData?.user?.name || '比较懒还没设置名字' }} {{ userData?.user?.name || '比较懒还没设置名字' }}

View File

@ -29,6 +29,12 @@ onShow(async () => {
url: `/INDEX/pay/index?id=${data[1]}` url: `/INDEX/pay/index?id=${data[1]}`
}) })
} }
if (data[0] === '2') {
//-
uni.redirectTo({
url: `/INDEX/pay_general/index?id=${data[1]}`
})
}
} }
} else { } else {
uni.showModal({ uni.showModal({

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="20" height="20" viewBox="0 0 20 20"><path d="M13.244798660620116,11.328916592913817L10.988408060620117,11.328916592913817L10.988408060620117,10.055605892913817L13.244800560620117,10.055605892913817C13.653592560620117,10.055605892913817,13.985815960620117,9.72338389291382,13.985815960620117,9.314590492913819C13.985815960620117,8.905797492913818,13.653592560620117,8.573575492913818,13.244800560620117,8.573575492913818L11.882567360620117,8.573575492913818L13.393002060620116,6.850715292913819C13.663236660620118,6.543137672913819,13.632816360620117,6.0746954729138185,13.325075660620117,5.804648612913819C13.017261960620118,5.535114354913818,12.549381760620118,5.565496246913819,12.279009360620117,5.872575372913818L10.247391660620117,8.189482492913818L8.214540160620118,5.873809722913818C7.944493260620117,5.566069129913818,7.476051030620117,5.535650476913818,7.168473360620117,5.8058829629138184C6.860732790620117,6.075929822913818,6.830314130620117,6.544372082913818,7.100546540620117,6.851949592913819L8.610981960620117,8.574809792913818L7.249985520620117,8.574809792913818C6.841192390620117,8.574809792913818,6.508970260620117,8.907031992913819,6.508970260620117,9.315824992913818C6.508970260620117,9.724618392913818,6.841192390620117,10.056840392913818,7.249985520620117,10.056840392913818L9.506376960620116,10.056840392913818L9.506376960620116,11.33015109291382L7.249985520620117,11.33015109291382C6.841192390620117,11.33015109291382,6.508970260620117,11.662373492913819,6.508970260620117,12.07116599291382C6.508970260620117,12.479958992913819,6.841192390620117,12.812181492913819,7.249985520620117,12.812181492913819L9.506376960620116,12.812181492913819L9.506376960620116,14.131187892913818C9.506376960620116,14.539982292913818,9.838599660620117,14.872203392913818,10.247393160620117,14.872203392913818C10.656185660620118,14.872203392913818,10.988408060620117,14.539982292913818,10.988408060620117,14.131187892913818L10.988408060620117,12.812181492913819L13.244800560620117,12.812181492913819C13.653592560620117,12.812181492913819,13.985815960620117,12.479958992913819,13.985815960620117,12.07116599291382C13.985815960620117,11.662373492913819,13.653592560620117,11.328916092913818,13.244798660620116,11.328916592913817Z" fill="#2A7EFB" fill-opacity="1"/><path d="M18.509325,20L10,20C4.4856119,20,0,15.513154,0,10C0,4.4868479,4.4868479,0,10,0C15.513154,0,20,4.4868479,20,10C20,11.393108,19.718414,12.741757,19.163891,14.007656C19.000011,14.382636,18.563023,14.553562,18.188223,14.389279C17.81324,14.225406,17.642317,13.788411,17.806599,13.41361C18.278379,12.335432,18.517971,11.186861,18.517971,10C18.517971,5.3031988,14.696803,1.4820296,10.000002,1.4820296C5.3032007,1.4820296,1.480796,5.3019652,1.480796,10.000002C1.480796,14.698039,5.3019643,18.517971,9.9987669,18.517971L16.719772,18.517971L14.704213,16.502409C14.415217,16.213415,14.415217,15.744104,14.704213,15.453873C14.993209,15.164878,15.462518,15.164878,15.752749,15.453873L19.032978,18.734102C19.245401,18.946526,19.308388,19.265163,19.193529,19.541807C19.078674,19.818451,18.809443,20,18.509325,20Z" fill="#333333" fill-opacity="1"/></svg>

After

Width:  |  Height:  |  Size: 3.2 KiB