dbOptions.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. /**
  2. * 地磅表单 options(对齐 H5 pickers:CRM 客户/产品 + 运输车辆)
  3. */
  4. import { request, parseResponseJson } from '@/utils/request'
  5. import db from '@/utils/dbRequest'
  6. function extractOptions(res) {
  7. if (Array.isArray(res)) return res
  8. if (!res || typeof res !== 'object') return []
  9. return res.list || res.rows || res.items || res.data?.list || res.data?.rows || []
  10. }
  11. function unwrapPortal(res) {
  12. const result = parseResponseJson(res)
  13. if (result && typeof result === 'object' && 'code' in result) {
  14. if (result.code === 200 || result.code === 0) {
  15. return result.data !== undefined ? result.data : result
  16. }
  17. const msg = result.message || result.msg || '请求失败'
  18. uni.showToast({ title: String(msg).slice(0, 40), icon: 'none' })
  19. throw new Error(msg)
  20. }
  21. return result
  22. }
  23. /** CRM 客户下拉 */
  24. export async function fetchCustomerOptions(keyword) {
  25. const res = await request({
  26. url: '/web/crm/customer/options',
  27. method: 'POST',
  28. data: {
  29. limit: keyword?.trim() ? 50 : 20,
  30. ...(keyword?.trim() ? { keyword: keyword.trim() } : {})
  31. }
  32. })
  33. return extractOptions(unwrapPortal(res))
  34. }
  35. /** CRM 产品下拉(上架) */
  36. export async function fetchProductOptions(keyword) {
  37. const res = await request({
  38. url: '/web/crm/products/options',
  39. method: 'POST',
  40. data: {
  41. limit: keyword?.trim() ? 50 : 20,
  42. ...(keyword?.trim() ? { keyword: keyword.trim() } : {})
  43. }
  44. })
  45. return extractOptions(unwrapPortal(res))
  46. }
  47. /**
  48. * 运输车辆车牌
  49. * @param {string} [q] 车牌模糊搜索
  50. * @param {{ vehicleType?: string }} [opts] vehicleType: self-自有 / carrier-三方
  51. */
  52. export async function fetchVehicleOptions(q, opts = {}) {
  53. const params = {
  54. ...(q?.trim() ? { q: q.trim() } : {}),
  55. ...(opts.vehicleType ? { vehicleType: opts.vehicleType } : {}),
  56. ...(opts.mineVehicles ? { mineVehicles: true } : {}),
  57. page: 1,
  58. pageSize: 100
  59. }
  60. try {
  61. const data = await db.get('/transport/vehicle', params)
  62. return extractOptions(data)
  63. } catch (e) {
  64. // 兼容门户信封
  65. const res = await request({
  66. url: '/transport/vehicle',
  67. method: 'GET',
  68. data: params
  69. })
  70. return extractOptions(unwrapPortal(res))
  71. }
  72. }