feat: 优化首页服务入口与租住业务流程
补齐首页待办跳转、押金支付引导和多类租住服务页面能力,统一租客端关键业务流程体验。
This commit is contained in:
90
utils/deposit-other-payment.js
Normal file
90
utils/deposit-other-payment.js
Normal file
@@ -0,0 +1,90 @@
|
||||
import { sysdictPage } from '@/api/index.js'
|
||||
|
||||
export const MOBILE_DEPOSIT_OTHER_PAYMENT_CONFIG_TYPE = 'MobileDepositOtherPaymentConfig'
|
||||
export const MOBILE_PROVIDER_TYPE = 'WechatMiniProgram'
|
||||
export const DEPOSIT_OTHER_PAYMENT_CONFIG_KEY = 'depositOtherPayment'
|
||||
|
||||
function normalizeText(value) {
|
||||
return String(value || '').trim()
|
||||
}
|
||||
|
||||
function parseJsonStringMaybe(value) {
|
||||
const text = normalizeText(value)
|
||||
if (!text) {
|
||||
return {}
|
||||
}
|
||||
try {
|
||||
const parsed = JSON.parse(text)
|
||||
return parsed && typeof parsed === 'object' && !Array.isArray(parsed) ? parsed : {}
|
||||
} catch (error) {
|
||||
return {}
|
||||
}
|
||||
}
|
||||
|
||||
function normalizeRows(response) {
|
||||
const payload = response && response.data !== undefined ? response.data : response
|
||||
if (Array.isArray(payload)) {
|
||||
return payload
|
||||
}
|
||||
if (payload && Array.isArray(payload.data)) {
|
||||
return payload.data
|
||||
}
|
||||
if (payload && payload.data && Array.isArray(payload.data.data)) {
|
||||
return payload.data.data
|
||||
}
|
||||
return []
|
||||
}
|
||||
|
||||
function getProviderType(row = {}) {
|
||||
return normalizeText(row.providerType || row.ProviderType)
|
||||
}
|
||||
|
||||
export function createDefaultDepositOtherPaymentConfig() {
|
||||
return {
|
||||
code: '',
|
||||
key: DEPOSIT_OTHER_PAYMENT_CONFIG_KEY,
|
||||
phone: '',
|
||||
qrCode: '',
|
||||
contentZh: '',
|
||||
contentEn: ''
|
||||
}
|
||||
}
|
||||
|
||||
export function normalizeDepositOtherPaymentConfig(row = {}) {
|
||||
const defaults = createDefaultDepositOtherPaymentConfig()
|
||||
const extra = parseJsonStringMaybe(row.extraInfo || row.extraConfig || row.ExtraConfig)
|
||||
|
||||
return {
|
||||
code: normalizeText(row.code),
|
||||
key: normalizeText(row.key) || defaults.key,
|
||||
phone: normalizeText(extra.phone || row.description),
|
||||
qrCode: normalizeText(extra.qrCode || extra.qrCodeImage || extra.qrImage),
|
||||
contentZh: normalizeText(extra.contentZh || extra.content || defaults.contentZh),
|
||||
contentEn: normalizeText(extra.contentEn || defaults.contentEn)
|
||||
}
|
||||
}
|
||||
|
||||
function findMatchedRow(rows = []) {
|
||||
const providerRows = rows.filter(item => getProviderType(item) === MOBILE_PROVIDER_TYPE)
|
||||
const legacyRows = rows.filter(item => !getProviderType(item))
|
||||
return (
|
||||
providerRows.find(item => normalizeText(item && item.key) === DEPOSIT_OTHER_PAYMENT_CONFIG_KEY)
|
||||
|| providerRows[0]
|
||||
|| legacyRows.find(item => normalizeText(item && item.key) === DEPOSIT_OTHER_PAYMENT_CONFIG_KEY)
|
||||
|| legacyRows[0]
|
||||
|| null
|
||||
)
|
||||
}
|
||||
|
||||
export function loadDepositOtherPaymentConfig(language) {
|
||||
return sysdictPage({
|
||||
Type: MOBILE_DEPOSIT_OTHER_PAYMENT_CONFIG_TYPE,
|
||||
ProviderType: MOBILE_PROVIDER_TYPE,
|
||||
PageIndex: 1,
|
||||
PageSize: 100
|
||||
}, language).then((response) => {
|
||||
const rows = normalizeRows(response)
|
||||
const matchedRow = findMatchedRow(rows)
|
||||
return normalizeDepositOtherPaymentConfig(matchedRow || {})
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user