feat: 重构核心租住流程页面与交互体验

统一注册、看房、申请与入住等核心页面的视觉和流程衔接,补齐支付、签约与状态流转闭环,提升移动端操作连贯性。
This commit is contained in:
liangjian
2026-07-29 09:05:38 +08:00
parent da6bdc6a02
commit 1111ac148b
34 changed files with 8734 additions and 2801 deletions

View File

@@ -144,22 +144,23 @@ export function formatOrderDate(value) {
}
function normalizeStatusKey(order = {}) {
const rawStatus = String(order.status || order.orderStatus || '').trim()
const safeOrder = order || {}
const rawStatus = String(safeOrder.status || safeOrder.orderStatus || '').trim()
if (['pending_review', 'approved_wait_assign', 'assigned_wait_room', 'rejected', 'contract_signed'].includes(rawStatus)) {
return rawStatus
}
const contractStatus = Number(order.contractStatus)
const contractStatus = Number(safeOrder.contractStatus)
if (contractStatus === 1) {
return 'contract_signed'
}
const approvalStatus = Number(
order.approvalStatus !== undefined
? order.approvalStatus
: order.auditStatus !== undefined
? order.auditStatus
: order.statusCode
safeOrder.approvalStatus !== undefined
? safeOrder.approvalStatus
: safeOrder.auditStatus !== undefined
? safeOrder.auditStatus
: safeOrder.statusCode
)
if (approvalStatus === -1 || /reject|refuse|驳回/i.test(rawStatus)) {
@@ -169,12 +170,12 @@ function normalizeStatusKey(order = {}) {
return 'pending_review'
}
if (
order.roomNo ||
order.roomCode ||
order.roomName ||
order.checkinDate ||
order.startDate ||
order.start
safeOrder.roomNo ||
safeOrder.roomCode ||
safeOrder.roomName ||
safeOrder.checkinDate ||
safeOrder.startDate ||
safeOrder.start
) {
return 'assigned_wait_room'
}
@@ -182,17 +183,18 @@ function normalizeStatusKey(order = {}) {
}
function resolveStatusText(order = {}, statusKey, language = getCurrentLanguage()) {
const safeOrder = order || {}
const contractStatus = Number(order.contractStatus)
if (contractStatus === 1 && order.contractStatusDesc && language !== 'en') {
return order.contractStatusDesc
const contractStatus = Number(safeOrder.contractStatus)
if (contractStatus === 1 && safeOrder.contractStatusDesc && language !== 'en') {
return safeOrder.contractStatusDesc
}
if (language !== 'en' && order.approvalStatusDesc) {
return order.approvalStatusDesc
if (language !== 'en' && safeOrder.approvalStatusDesc) {
return safeOrder.approvalStatusDesc
}
if (language !== 'en' && order.statusDesc) {
return order.statusDesc
if (language !== 'en' && safeOrder.statusDesc) {
return safeOrder.statusDesc
}
const map = {
pending_review: getBookingText('pendingReview', language),
@@ -218,35 +220,39 @@ function resolveTagType(statusKey) {
}
function getBuildingFloorText(order = {}, language = getCurrentLanguage()) {
const safeOrder = order || {}
const isEn = language === 'en'
const building = [
isEn
? (order.buildingNameEn || order.buildingEn || order.buildingSectionNameEn || order.buildingName || order.building || order.buildingSectionName || '')
: (order.buildingName || order.building || order.buildingSectionName || ''),
? (safeOrder.buildingNameEn || safeOrder.buildingEn || safeOrder.buildingSectionNameEn || safeOrder.buildingName || safeOrder.building || safeOrder.buildingSectionName || '')
: (safeOrder.buildingName || safeOrder.building || safeOrder.buildingSectionName || ''),
isEn
? (order.floorNameEn || order.floorEn || order.floorName || order.floor || '')
: (order.floorName || order.floor || '')
? (safeOrder.floorNameEn || safeOrder.floorEn || safeOrder.floorName || safeOrder.floor || '')
: (safeOrder.floorName || safeOrder.floor || '')
].filter(Boolean).join(' ')
return building || '--'
}
function getRoomTypeText(order = {}, language = getCurrentLanguage()) {
const safeOrder = order || {}
const isEn = language === 'en'
if (isEn) {
return order.roomTypeNameEn || order.styleNameEn || order.roomNameEn || order.roomTypeName || order.styleNameZh || order.roomType || order.roomName || '--'
return safeOrder.roomTypeNameEn || safeOrder.styleNameEn || safeOrder.roomNameEn || safeOrder.roomTypeName || safeOrder.styleNameZh || safeOrder.roomType || safeOrder.roomName || '--'
}
return order.roomTypeName || order.styleNameZh || order.roomType || order.roomName || '--'
return safeOrder.roomTypeName || safeOrder.styleNameZh || safeOrder.roomType || safeOrder.roomName || '--'
}
function getOrderNo(order = {}) {
return order.orderNo || order.no || order.code || '--'
const safeOrder = order || {}
return safeOrder.orderNo || safeOrder.no || safeOrder.code || '--'
}
export function getOrderStatusCode(order = {}) {
const safeOrder = order || {}
const candidates = [
order.orderStatus,
order.statusCode,
order.status
safeOrder.orderStatus,
safeOrder.statusCode,
safeOrder.status
]
for (let index = 0; index < candidates.length; index += 1) {
@@ -264,14 +270,15 @@ export function getOrderStatusCode(order = {}) {
}
export function getOrderTime(order = {}) {
const checkInPeriod = order.checkInPeriod || {}
const safeOrder = order || {}
const checkInPeriod = safeOrder.checkInPeriod || {}
const candidates = [
order.updateTime,
order.createTime,
order.createdAt,
order.startDate,
order.start,
order.checkinDate,
safeOrder.updateTime,
safeOrder.createTime,
safeOrder.createdAt,
safeOrder.startDate,
safeOrder.start,
safeOrder.checkinDate,
checkInPeriod.start
]
@@ -287,13 +294,14 @@ export function sortOrdersByLatest(orderList = []) {
}
function hasStayFields(order = {}) {
const safeOrder = order || {}
return !!(
order.roomNo
|| order.roomCode
|| order.slotCode
|| order.contractNo
|| order.actualCheckInTime
|| order.checkinTime
safeOrder.roomNo
|| safeOrder.roomCode
|| safeOrder.slotCode
|| safeOrder.contractNo
|| safeOrder.actualCheckInTime
|| safeOrder.checkinTime
)
}
@@ -336,32 +344,33 @@ export function isCurrentBookingOrder(order = {}) {
}
export function normalizeBookingOrder(order = {}, language = getCurrentLanguage()) {
const statusKey = normalizeStatusKey(order)
const statusCode = getOrderStatusCode(order)
const checkInPeriod = order.checkInPeriod || {}
const startDate = order.startDate || order.start || order.checkinDate || checkInPeriod.start
const endDate = order.endDate || order.end || order.checkoutDate || checkInPeriod.end
const safeOrder = order || {}
const statusKey = normalizeStatusKey(safeOrder)
const statusCode = getOrderStatusCode(safeOrder)
const checkInPeriod = safeOrder.checkInPeriod || {}
const startDate = safeOrder.startDate || safeOrder.start || safeOrder.checkinDate || checkInPeriod.start
const endDate = safeOrder.endDate || safeOrder.end || safeOrder.checkoutDate || checkInPeriod.end
return {
...order,
orderNo: getOrderNo(order),
roomTypeText: getRoomTypeText(order, language),
buildingFloorText: getBuildingFloorText(order, language),
...safeOrder,
orderNo: getOrderNo(safeOrder),
roomTypeText: getRoomTypeText(safeOrder, language),
buildingFloorText: getBuildingFloorText(safeOrder, language),
startDateText: formatOrderDate(startDate),
endDateText: formatOrderDate(endDate),
createdAtText: formatOrderDateTime(order.createTime || order.updateTime || order.createdAt),
createdAtText: formatOrderDateTime(safeOrder.createTime || safeOrder.updateTime || safeOrder.createdAt),
roomNoText: language === 'en'
? (order.roomNoEn || order.roomCodeEn || order.roomNameEn || order.roomNo || order.roomCode || order.roomName || '--')
: (order.roomNo || order.roomCode || order.roomName || order.roomNoEn || order.roomCodeEn || order.roomNameEn || '--'),
? (safeOrder.roomNoEn || safeOrder.roomCodeEn || safeOrder.roomNameEn || safeOrder.roomNo || safeOrder.roomCode || safeOrder.roomName || '--')
: (safeOrder.roomNo || safeOrder.roomCode || safeOrder.roomName || safeOrder.roomNoEn || safeOrder.roomCodeEn || safeOrder.roomNameEn || '--'),
areaText: language === 'en'
? (order.areaNameEn || order.campusNameEn || order.areaName || order.campusName || '--')
: (order.areaName || order.campusName || '--'),
rejectReasonText: order.rejectReason || order.approveReason || order.remark || '',
? (safeOrder.areaNameEn || safeOrder.campusNameEn || safeOrder.areaName || safeOrder.campusName || '--')
: (safeOrder.areaName || safeOrder.campusName || '--'),
rejectReasonText: safeOrder.rejectReason || safeOrder.approveReason || safeOrder.remark || '',
startDate,
endDate,
status: statusKey,
statusCode,
statusKey,
statusText: resolveStatusText(order, statusKey, language),
statusText: resolveStatusText(safeOrder, statusKey, language),
tagType: resolveTagType(statusKey)
}
}