dining.js 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. import { api } from '@/utils/request.js';
  2. import { BASE_API_URL } from '@/settings/siteSetting.js';
  3. import { useUserStore } from '@/store/user.js';
  4. // 微信登录
  5. export const DiningUserWechatLogin = (params) => api.post({ url: '/dining/user/wechatLogin', params });
  6. // 获取用户信息(GET /dining/user/getUserInfo),登录后调用以拿到头像等
  7. export const GetUserInfo = () => api.get({ url: '/dining/user/getUserInfo' });
  8. // 更新用户个人信息(POST /dining/user/updateProfile,body 为 dto)
  9. export const PostUpdateProfile = (dto) =>
  10. api.post({ url: '/dining/user/updateProfile', params: dto });
  11. // 文件上传(POST /file/upload,multipart,返回图片 URL/path 供 avatarUrl 使用)
  12. function uploadFileToServerImpl(filePath) {
  13. const userStore = useUserStore();
  14. return new Promise((resolve, reject) => {
  15. uni.uploadFile({
  16. url: BASE_API_URL+'/dining/file/upload',
  17. filePath,
  18. name: 'file',
  19. header: { Authorization: userStore.getToken || '' },
  20. success: (res) => {
  21. if (res.statusCode === 200) {
  22. try {
  23. const data = typeof res.data === 'string' ? JSON.parse(res.data) : res.data;
  24. const payload = data?.data ?? data;
  25. const url = payload?.url ?? payload?.path ?? payload?.relativePath ?? (typeof payload === 'string' ? payload : '');
  26. resolve(url || '');
  27. } catch (e) {
  28. reject(e);
  29. }
  30. } else {
  31. reject(new Error(res.data || '上传失败'));
  32. }
  33. },
  34. fail: reject
  35. });
  36. });
  37. }
  38. export const uploadFileToServer = uploadFileToServerImpl;
  39. export const uploadFileToSever = uploadFileToServerImpl; // 兼容拼写错误
  40. // 点餐页数据(入参 dinerCount 就餐人数、tableId 桌号)
  41. export const DiningOrderFood = (params) => api.get({ url: '/store/dining/page-info', params });
  42. // 门店详情(GET /store/info/detail/{storeId},入参 storeId)
  43. export const GetStoreDetail = (storeId) =>
  44. api.get({ url: `/store/info/detail/${encodeURIComponent(storeId)}` });
  45. // 菜品种类(入参 storeId,GET /store/info/categories?storeId=)
  46. export const GetStoreCategories = (params) => api.get({ url: '/store/info/categories', params });
  47. // 根据菜品种类获取菜品(入参 categoryId,GET /store/info/cuisines?categoryId=)
  48. export const GetStoreCuisines = (params) => api.get({ url: '/store/info/cuisines', params });
  49. // 菜品详情(GET /store/dining/cuisine/{cuisineId},入参 cuisineId 菜品ID、tableId 桌号ID 传 query)
  50. export const GetCuisineDetail = (cuisineId, tableId) => {
  51. const id = cuisineId != null ? encodeURIComponent(cuisineId) : '';
  52. const url = id ? `/store/dining/cuisine/${id}` : '/store/dining/cuisine/0';
  53. const params = tableId != null && tableId !== '' ? { tableId } : {};
  54. return api.get({ url, params });
  55. };
  56. // 门店全部优惠券列表(GET /dining/coupon/getStoreAllCouponList,分页 page、size 每页10条)
  57. function getStoreAllCouponListImpl(params) {
  58. return api.get({
  59. url: '/dining/coupon/getStoreAllCouponList',
  60. params: {
  61. storeId: params?.storeId,
  62. tab: 1,
  63. page: params?.page ?? 1,
  64. size: params?.size ?? 10
  65. }
  66. });
  67. }
  68. export const GetStoreAllCouponList = getStoreAllCouponListImpl;
  69. // 兼容旧引用
  70. export const GetStoreUsableCouponList = getStoreAllCouponListImpl;
  71. // 用户已领/可用优惠券(GET /dining/coupon/userOwnedByStore,入参 storeId 门店ID)
  72. function getUserOwnedCouponListImpl(params) {
  73. return api.get({
  74. url: '/dining/coupon/userOwnedByStore',
  75. params: {
  76. storeId: params?.storeId
  77. }
  78. });
  79. }
  80. export const GetUserOwnedCouponList = getUserOwnedCouponListImpl;
  81. // 获取购物车(GET /store/order/cart/{tableId},建立 SSE 连接之后调用)
  82. export const GetOrderCart = (tableId) =>
  83. api.get({ url: `/store/order/cart/${encodeURIComponent(tableId)}` });
  84. // 加入购物车(POST /store/order/cart/add,dto: { cuisineId 菜品ID, quantity 数量, tableId 桌号ID })
  85. export const PostOrderCartAdd = (dto) =>
  86. api.post({ url: '/store/order/cart/add', params: dto });
  87. // 更新购物车(PUT /store/order/cart/update,请求类型 x-www-form-urlencoded,由 request 层 formUrlEncoded 封装)
  88. export const PostOrderCartUpdate = (params) =>
  89. api.put({ url: '/store/order/cart/update', params, formUrlEncoded: true });
  90. // 更新餐具数量(PUT /store/order/cart/update-tableware,入参 quantity 餐具数量/用餐人数、tableId 桌号ID,form-urlencoded)
  91. export const PutOrderCartUpdateTableware = (params) =>
  92. api.put({ url: '/store/order/cart/update-tableware', params, formUrlEncoded: true });
  93. // 清空购物车(DELETE /store/order/cart/clear,入参 tableId:query + body 双传,兼容不同后端)
  94. export const PostOrderCartClear = (tableId) => {
  95. const id = tableId != null ? String(tableId) : '';
  96. const url = id ? `/store/order/cart/clear?tableId=${encodeURIComponent(id)}` : '/store/order/cart/clear';
  97. return api.delete({ url, params: id ? { tableId: id } : {} });
  98. };
  99. // 锁定订单(POST /store/dining/order/lock,入参 tableId 桌号ID)
  100. function postOrderLockImpl(params) {
  101. const tableId = params?.tableId != null ? String(params.tableId) : '';
  102. const url = tableId ? `/store/dining/order/lock?tableId=${encodeURIComponent(tableId)}` : '/store/dining/order/lock';
  103. return api.post({ url, params: {} });
  104. }
  105. export const PostOrderLock = postOrderLockImpl;
  106. // 解锁订单(POST /store/dining/order/unlock,入参 tableId 桌号ID,与 lock 请求方式一致)
  107. function postOrderUnlockImpl(params) {
  108. const tableId = params?.tableId != null ? String(params.tableId) : '';
  109. const url = tableId ? `/store/dining/order/unlock?tableId=${encodeURIComponent(tableId)}` : '/store/dining/order/unlock';
  110. return api.post({ url, params: {} });
  111. }
  112. export const PostOrderUnlock = postOrderUnlockImpl;
  113. // 兼容:通过 diningApi.postOrderUnlock 调用
  114. export const postOrderUnlock = postOrderUnlockImpl;
  115. // 结算页锁定订单(POST /store/dining/order/settlement/lock,入参 orderId 订单ID)
  116. function postOrderSettlementLockImpl(params) {
  117. const orderId = params?.orderId != null ? String(params.orderId) : '';
  118. const url = orderId ? `/store/dining/order/settlement/lock?orderId=${encodeURIComponent(orderId)}` : '/store/dining/order/settlement/lock';
  119. return api.post({ url, params: {} });
  120. }
  121. export const PostOrderSettlementLock = postOrderSettlementLockImpl;
  122. // 结算页解锁订单(POST /store/dining/order/settlement/unlock,入参 orderId 订单ID)
  123. function postOrderSettlementUnlockImpl(params) {
  124. const orderId = params?.orderId != null ? String(params.orderId) : '';
  125. const url = orderId ? `/store/dining/order/settlement/unlock?orderId=${encodeURIComponent(orderId)}` : '/store/dining/order/settlement/unlock';
  126. return api.post({ url, params: {} });
  127. }
  128. export const PostOrderSettlementUnlock = postOrderSettlementUnlockImpl;
  129. // 创建订单(POST /store/order/create,入参 dto:tableId、contactPhone、couponId、discountAmount 优惠金额、tablewareFee 餐具费、payAmount 实付金额(菜品总价-优惠金额+餐具费)、dinerCount、immediatePay、remark)
  130. export const PostOrderCreate = (dto) =>
  131. api.post({ url: '/store/order/create', params: dto });
  132. // 订单分页列表(GET /store/order/page,入参 current 页码、size 每页数量、orderStatus 订单状态、storeId 门店ID、tableId 桌号ID)
  133. export const GetOrderPage = (params) =>
  134. api.get({ url: '/store/order/page', params });
  135. // 我的订单(GET /store/order/my-orders,入参 current 页码、size 每页数量、type 订单类型 0未支付 1历史)
  136. export const GetMyOrders = (params) =>
  137. api.get({ url: '/store/order/my-orders', params });
  138. // 订单详情(GET /store/order/info/{orderId},入参 orderId 订单ID)
  139. export const GetOrderInfo = (orderId) =>
  140. api.get({ url: `/store/order/info/${encodeURIComponent(orderId)}` });
  141. // 订单支付(POST /payment/prePay,入参 orderNo 订单号、payType 支付类型 默认 wechatPayMininProgram、payer 支付用户 openid、price 订单金额、subject 订单标题;返回微信支付调起参数)
  142. export const PostOrderPay = (params) =>
  143. api.get({
  144. url: '/payment/prePay',
  145. params: {
  146. orderNo: params.orderNo,
  147. payType: 'wechatPayMininProgram',
  148. payer: params.payer,
  149. price: params.price,
  150. subject: params.subject ?? '订单支付'
  151. }
  152. });
  153. // 根据第三方订单号查询支付结果(GET /payment/searchOrderByOutTradeNoPath,入参 payType、transactionId)
  154. // 支付页调用时不显示全局 loading
  155. export const GetSearchOrderByOutTradeNoPath = (params) =>
  156. api.get({
  157. url: '/payment/searchOrderByOutTradeNoPath',
  158. params: {
  159. payType: params.payType ?? 'wechatPayMininProgram',
  160. transactionId: params.transactionId
  161. },
  162. loading: false
  163. });
  164. // 订单翻转/完成(POST /store/order/complete/{orderId},入参 orderId)
  165. // 支付页调用时不显示全局 loading
  166. export const PostOrderComplete = (orderId) =>
  167. api.post({ url: `/store/order/complete/${encodeURIComponent(orderId)}`, loading: false });
  168. /**
  169. * 订单 SSE 接口配置(GET /store/order/sse/{tableId})
  170. * 仅提供 URL 与 header,实际连接请使用 utils/sse.js 的 createSSEConnection 封装
  171. */
  172. export function getOrderSseConfig(tableId) {
  173. const userStore = useUserStore();
  174. return {
  175. url: `${BASE_API_URL}/store/order/sse/${encodeURIComponent(tableId)}`,
  176. header: { Authorization: userStore.getToken || '' },
  177. timeout: 0
  178. };
  179. }