77 lines
2.1 KiB
JavaScript
77 lines
2.1 KiB
JavaScript
/**
|
||
* 地磅表单 options(对齐 H5 pickers:CRM 客户/产品 + 运输车辆)
|
||
*/
|
||
import { request, parseResponseJson } from '@/utils/request'
|
||
import db from '@/utils/dbRequest'
|
||
|
||
function extractOptions(res) {
|
||
if (Array.isArray(res)) return res
|
||
if (!res || typeof res !== 'object') return []
|
||
return res.list || res.rows || res.items || res.data?.list || res.data?.rows || []
|
||
}
|
||
|
||
function unwrapPortal(res) {
|
||
const result = parseResponseJson(res)
|
||
if (result && typeof result === 'object' && 'code' in result) {
|
||
if (result.code === 200 || result.code === 0) {
|
||
return result.data !== undefined ? result.data : result
|
||
}
|
||
const msg = result.message || result.msg || '请求失败'
|
||
uni.showToast({ title: String(msg).slice(0, 40), icon: 'none' })
|
||
throw new Error(msg)
|
||
}
|
||
return result
|
||
}
|
||
|
||
/** CRM 客户下拉 */
|
||
export async function fetchCustomerOptions(keyword) {
|
||
const res = await request({
|
||
url: '/web/crm/customer/options',
|
||
method: 'POST',
|
||
data: {
|
||
limit: keyword?.trim() ? 50 : 20,
|
||
...(keyword?.trim() ? { keyword: keyword.trim() } : {})
|
||
}
|
||
})
|
||
return extractOptions(unwrapPortal(res))
|
||
}
|
||
|
||
/** CRM 产品下拉(上架) */
|
||
export async function fetchProductOptions(keyword) {
|
||
const res = await request({
|
||
url: '/web/crm/products/options',
|
||
method: 'POST',
|
||
data: {
|
||
limit: keyword?.trim() ? 50 : 20,
|
||
...(keyword?.trim() ? { keyword: keyword.trim() } : {})
|
||
}
|
||
})
|
||
return extractOptions(unwrapPortal(res))
|
||
}
|
||
|
||
/**
|
||
* 运输车辆车牌
|
||
* @param {string} [q] 车牌模糊搜索
|
||
* @param {{ vehicleType?: string }} [opts] vehicleType: self-自有 / carrier-三方
|
||
*/
|
||
export async function fetchVehicleOptions(q, opts = {}) {
|
||
const params = {
|
||
...(q?.trim() ? { q: q.trim() } : {}),
|
||
...(opts.vehicleType ? { vehicleType: opts.vehicleType } : {}),
|
||
page: 1,
|
||
pageSize: 100
|
||
}
|
||
try {
|
||
const data = await db.get('/transport/vehicle', params)
|
||
return extractOptions(data)
|
||
} catch (e) {
|
||
// 兼容门户信封
|
||
const res = await request({
|
||
url: '/transport/vehicle',
|
||
method: 'GET',
|
||
data: params
|
||
})
|
||
return extractOptions(unwrapPortal(res))
|
||
}
|
||
}
|