前端转vue
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

EntryBase.ts 2.9KB

6 days ago
3 weeks ago
3 weeks ago
3 weeks ago
2 weeks ago
3 weeks ago
2 weeks ago
3 weeks ago
2 weeks ago
2 weeks ago
3 weeks ago
2 weeks ago
3 weeks ago
3 weeks ago
2 weeks ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import Message from "@/views/front/develop/Communication/Message";
  2. import type { PageBase } from './PageBase'
  3. import type { ITradeHelper } from './ITradeHelper'
  4. import type { TradeBusHelper } from './TradeBusHelper'
  5. import type { TradeInfoHelper } from './TradeInfoHelper'
  6. import type { TradeResourcesHelper } from './TradeResourcesHelper'
  7. import TradeAPIsHelper from "./TradeAPIsHelper";
  8. import { reactive } from "vue";
  9. /**
  10. * 入口基类,包括Message和PageBase
  11. */
  12. export class EntryBase implements ITradeHelper {
  13. TradeResources: TradeAPIsHelper;
  14. //#region 数据属性
  15. private _messageData: Message | null = null
  16. private _pageData: PageBase | null = null
  17. public get MessageData(): Message | null {
  18. return this._messageData
  19. }
  20. private set MessageData(value: Message | null) {
  21. this._messageData = value
  22. }
  23. public get PageData(): PageBase | null {
  24. return this._pageData
  25. }
  26. private set PageData(value: PageBase | null) {
  27. this._pageData = value
  28. }
  29. #endregion
  30. /**
  31. * 加载数据
  32. * @param page
  33. * @param message
  34. * @returns
  35. */
  36. public LoadData(page: PageBase, message: Message): boolean {
  37. let flag = true
  38. // 检测参数变化
  39. if (page !== null && page === this.PageData) {
  40. if (message === this.MessageData ||
  41. (message.fileData === this.MessageData?.fileData &&
  42. this.getDiffFields(message, this.MessageData).length === 0)) {
  43. flag = false // 参数与历史登记一致,未作修改
  44. }
  45. }
  46. this.PageData = page
  47. this.MessageData = message
  48. return this.OnLoadData(flag)
  49. }
  50. private getDiffFields(newMsg: Message, oldMsg: Message): string[] {
  51. const newFields = Object.keys(newMsg)
  52. const oldFields = Object.keys(oldMsg)
  53. return newFields.filter(key => newMsg[key] !== oldMsg[key])
  54. }
  55. /**
  56. * 加载数据时触发
  57. * @param changed 标识数据是否发生改变
  58. * @returns
  59. */
  60. protected OnLoadData(changed: boolean): boolean {
  61. return true
  62. }
  63. public get TradeBus(): TradeBusHelper {
  64. if (!this.PageData) throw new Error('PageData is null')
  65. return this.PageData.TradeBus
  66. }
  67. public get TradeInfo(): TradeInfoHelper {
  68. if (!this.PageData) throw new Error('PageData is null')
  69. return this.PageData.TradeInfo
  70. }
  71. public get TradeAPIs(): TradeAPIsHelper {
  72. if (!this.PageData) throw new Error('PageData is null')
  73. return this.PageData.TradeAPIs
  74. }
  75. // public get TradeResources(): TradeResourcesHelper {
  76. // if (!this.PageData) throw new Error('PageData is null')
  77. // return this.PageData.TradeResources
  78. // } hulei-/暂时注释
  79. }
  80. // Vue组件封装
  81. export const useEntryBase = () => {
  82. return {
  83. EntryBase,
  84. createEntry: () => reactive(new EntryBase())
  85. }
  86. }