im.ts 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. import Status from './const/status';
  2. export default <LibMixins>{
  3. data(){
  4. return {
  5. // 当前状态
  6. status: Status.default,
  7. // 是否使用唯一值
  8. status_unique: true,
  9. // 请求的名称
  10. status_fetch_key:'getMessages',
  11. // 常量
  12. constStatus: Status,
  13. // 最大数量
  14. pageSize:20
  15. }
  16. },
  17. methods:{
  18. // 设置状态变更
  19. setStatus(status,data?:any){
  20. if (status !== this._status) {
  21. clearTimeout(this._statusTime);
  22. this._status = status;
  23. if (this[this.status_async_key] && status === Status.loading) {
  24. this._statusTime = setTimeout(()=>{
  25. this.status = this._status;
  26. },this[this.status_async_key]);
  27. } else {
  28. this.status = status;
  29. }
  30. this.triggerChangeStatus && this.triggerChangeStatus(status,data);
  31. }
  32. },
  33. // 开启请求
  34. statusFetch:function (must:boolean=false,data:any) {
  35. // 如果当前状态为请求中就结束本次请求
  36. if ((this._status === Status.loading || this._status === Status.none) && !must) return;
  37. let unique = '';
  38. if (this.status_unique) {
  39. unique = new Date().getTime() + '-' + Math.floor(Math.random() * 10000);
  40. this._statusUseUnique = unique;
  41. }
  42. this.setStatus(Status.loading);
  43. return this[this.status_fetch_key] && this[this.status_fetch_key]({
  44. success:(data?:any)=> {
  45. if (!this.status_unique || unique === this._statusUseUnique) {
  46. if (data && data.length < this.pageSize) {
  47. return this.setStatus(Status.none,data);
  48. } else {
  49. return this.setStatus(Status.success,data);
  50. }
  51. }
  52. // @ts-ignore
  53. unique = null;
  54. },
  55. fail:()=> {
  56. if (!this.status_unique || unique === this._statusUseUnique) {
  57. return this.setStatus(Status.fail);
  58. }
  59. // @ts-ignore
  60. unique = null;
  61. },
  62. none:()=>{
  63. if (!this.status_unique || unique === this._statusUseUnique) {
  64. return this.setStatus(Status.none);
  65. }
  66. // @ts-ignore
  67. unique = null;
  68. },
  69. unique,
  70. data:{
  71. ...(data || {}),
  72. pageSize: this.pageSize
  73. }
  74. });
  75. }
  76. },
  77. created(){
  78. this._status = Status.default;
  79. }
  80. }