resultInfo.ts 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. import { message } from 'ant-design-vue'
  2. import { Ref } from 'vue'
  3. import { ResultInfo } from './interface'
  4. /**
  5. * 获取请求接口时候成功或者失败信息
  6. * @param map 提示信息数据集合
  7. * @param type 数据集合 的key
  8. * @returns [成功信息, 失败信息]
  9. */
  10. export function getRequestResultInfo(map: Map<number, ResultInfo>, type: number): ResultInfo {
  11. if (map.has(type)) {
  12. const result = map.get(type) as ResultInfo
  13. return result
  14. } else {
  15. return ['成功', '失败']
  16. }
  17. }
  18. /**
  19. * 请求接口通用信息处理(此方法用于不关心请求结果,只关心成功或者失败状态)
  20. * @param fn 处理服务接口的函数
  21. * @param sign 自定义成功和失败的信息
  22. * @param loading loading状态
  23. */
  24. export function commonResultInfo(fn: Promise<any>, sign: ResultInfo, loading: Ref<boolean>): Promise<string> {
  25. return fn.then(() => {
  26. message.success(sign[0])
  27. return Promise.resolve(sign[0])
  28. })
  29. .catch((err: string) => {
  30. console.warn(`${fn}调用失败: err`);
  31. message.error(sign[1] + err)
  32. return Promise.reject(sign[1] + err)
  33. }).finally(() => {
  34. loading.value = false
  35. })
  36. }
  37. /**
  38. * 控制 请求接口 打开与关闭loading
  39. * @param fn 请求接口 函数
  40. * @param param 请求接口 参数
  41. * @param loading
  42. * @returns
  43. */
  44. export async function controlLoading(fn: Function, loading: Ref<boolean>, param?: any,): Promise<any> {
  45. loading.value = true;
  46. try {
  47. return await param ? fn(param) : fn()
  48. } catch (err) {
  49. Promise.resolve(err)
  50. } finally {
  51. loading.value = false;
  52. }
  53. }
  54. /**
  55. * 控制服务请求成功和失败的弹窗提示
  56. * @param fn 请求接口 函数
  57. * @param msgInfo [成功结果, 失败结果]
  58. * @returns
  59. */
  60. export function controlResultInfo(fn: Promise<any>, msgInfo: [string, string] = ['成功', '失败']) {
  61. const [sucInfo, errInfo] = msgInfo
  62. return fn.then(res => {
  63. message.success(sucInfo)
  64. return res;
  65. }).catch(err => {
  66. console.warn(`${fn}调用失败: err`);
  67. const result = errInfo + err
  68. message.error(result)
  69. Promise.reject(result)
  70. })
  71. }
  72. /**
  73. * 用户查询数据,成功返回数据,失败提示
  74. * @param fn
  75. * @returns
  76. */
  77. export function controlResultErrInfo(fn: Promise<any>) {
  78. return fn.then(res => {
  79. let result = res
  80. if (Array.isArray(res)) {
  81. // 列表数据需要一个key,要不然会报错,统一处理
  82. result = res.map((e: any, i: number) => {
  83. if (e.hasOwnProperty('key')) {
  84. return e
  85. } else {
  86. return { ...e, key: String(i) };
  87. }
  88. })
  89. }
  90. console.log('查询数据成功:', result)
  91. return result
  92. }).catch(err => {
  93. console.error('查询数据失败:', err)
  94. message.error(err.message)
  95. })
  96. }
  97. /**
  98. * 处理服务请求时候的loading和 成功和失败提示
  99. * @param fn
  100. * @param param
  101. * @param loading
  102. * @param messageInfo
  103. * @returns
  104. */
  105. export function requestResultLoadingAndInfo(fn: Function, param: any, loading: Ref<boolean>, messageInfo: [string, string] = ['成功', '失败']) {
  106. return controlResultInfo(controlLoading(fn, loading, param), messageInfo)
  107. }
  108. /**
  109. * 查询数据 loading 成功和失败提示
  110. * @param fn
  111. * @param loading
  112. * @param param
  113. * @returns
  114. */
  115. export function queryResultLoadingAndInfo(fn: Function, loading: Ref<boolean>, param?: any) {
  116. return controlResultErrInfo(controlLoading(fn, loading, param))
  117. }