diningTable.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import { http } from '@/common/service/service.js'
  2. import { USER_INFO } from '@/common/util/constants.js'
  3. /** 线上下单模式:与后端 DiningMode 枚举一致 */
  4. export const DINING_MODE = {
  5. ORDER_ONLY: 'ORDER_ONLY',
  6. ORDER_AND_PAY: 'ORDER_AND_PAY'
  7. }
  8. export function getMerchantId() {
  9. const info = uni.getStorageSync(USER_INFO) || {}
  10. return info.merchantId || ''
  11. }
  12. /** 前端下单类型 -> 后端 diningMode */
  13. export function mapOrderModeToDiningMode(orderMode) {
  14. return orderMode === 'orderPay' ? DINING_MODE.ORDER_AND_PAY : DINING_MODE.ORDER_ONLY
  15. }
  16. /** 后端 diningMode -> 前端下单类型 */
  17. export function mapDiningModeToOrderMode(diningMode) {
  18. return diningMode === DINING_MODE.ORDER_AND_PAY ? 'orderPay' : 'orderOnly'
  19. }
  20. /** 查询门店扫码点餐配置 */
  21. export function fetchDiningConfig(merchantId) {
  22. return http.get('/api/v2/merchant/dining-config', {
  23. params: { merchantId }
  24. })
  25. }
  26. /** 保存门店扫码点餐配置 POST /api/v2/merchant/dining-config */
  27. export function saveDiningConfig(data) {
  28. return http.post('/api/v2/merchant/dining-config', data)
  29. }
  30. /** 解析配置接口 result */
  31. export function parseDiningConfigResponse(result = {}) {
  32. return {
  33. diningMode: result.diningMode || ''
  34. }
  35. }
  36. /** 批量添加门店桌号 */
  37. export function batchCreateTables(data) {
  38. return http.post('/api/v2/merchant/dining-tables/batch', data)
  39. }
  40. /** 查询门店桌号列表 GET /jeecg-boot/api/v2/merchant/dining-tables */
  41. export function fetchTableList(merchantId, { pageNo = 1, pageSize = 10 } = {}) {
  42. return http.get('/api/v2/merchant/dining-tables', {
  43. params: { merchantId, pageNo, pageSize }
  44. })
  45. }
  46. /** 解析列表接口 result(兼容分页与普通数组) */
  47. export function parseTableListResponse(result) {
  48. if (!result) {
  49. return { list: [], diningMode: '', total: 0, current: 1, pages: 0, hasMore: false }
  50. }
  51. if (Array.isArray(result)) {
  52. return {
  53. list: result,
  54. diningMode: '',
  55. total: result.length,
  56. current: 1,
  57. pages: 1,
  58. hasMore: false
  59. }
  60. }
  61. const list = result.records || result.list || result.items || []
  62. const total = result.total != null ? result.total : list.length
  63. const current = result.current != null ? result.current : (result.pageNo != null ? result.pageNo : 1)
  64. const size = result.size != null ? result.size : (result.pageSize != null ? result.pageSize : list.length || 1)
  65. const pages = result.pages != null ? result.pages : Math.ceil(total / size)
  66. return {
  67. list,
  68. diningMode: result.diningMode || '',
  69. total,
  70. current,
  71. pages,
  72. hasMore: current < pages
  73. }
  74. }
  75. /** 归一化桌号列表项 */
  76. export function normalizeTableItem(row = {}) {
  77. const code = row.tableCode != null ? String(row.tableCode) : (row.tableNo != null ? String(row.tableNo) : String(row.no || ''))
  78. return {
  79. id: row.id,
  80. no: code,
  81. tableCode: code,
  82. miniQrUrl: row.miniQrUrl || row.miniProgramQrUrl || '',
  83. officialQrUrl: row.officialQrUrl || row.mpQrUrl || ''
  84. }
  85. }
  86. export function normalizeTableList(list) {
  87. if (!Array.isArray(list)) return []
  88. return list.map(normalizeTableItem).sort((a, b) => parseInt(a.no, 10) - parseInt(b.no, 10))
  89. }