index.ts 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import dayjs from "dayjs";
  2. import PageContainerBehavior from "../../../../core/behavior/page-container.behavior";
  3. // module/chats/pages/index/index.ts
  4. interface ScrollIntoViewEvent {
  5. detail: string;
  6. }
  7. interface HandleEvent {
  8. detail: { component: "guide" | "questionnaire"; scroll?: boolean };
  9. }
  10. interface NextTypeEvent {
  11. detail: { messageType: number };
  12. }
  13. interface Message extends Omit<HandleEvent["detail"], "scroll"> {
  14. id: string;
  15. }
  16. function getScrollcontext(this: any) {
  17. return this as {
  18. scroll: WechatMiniprogram.ScrollViewContext;
  19. timer: number;
  20. };
  21. }
  22. Component({
  23. behaviors: [PageContainerBehavior],
  24. lifetimes: {
  25. attached() {
  26. this.setData({
  27. date: dayjs().format("MM-DD HH:mm:ss"),
  28. });
  29. const component = this.data.component as "guide" | "questionnaire";
  30. this.handle({ detail: { component, scroll: true } });
  31. console.log("id-index",this.data);
  32. },
  33. ready() {
  34. wx.createSelectorQuery()
  35. .select("#scrollview")
  36. .node()
  37. .exec((res) => {
  38. getScrollcontext.call(this).scroll = res[0].node;
  39. });
  40. },
  41. },
  42. properties: {
  43. component: { type: String, value: "guide" },
  44. messageType: { type: Number, value: 0 },
  45. isShowGuide: { type: Boolean, value: false },
  46. id: { type: Number, value: 0 },
  47. },
  48. data: {
  49. date: "",
  50. messages: {} as Record<number, Message>,
  51. lastId: "",
  52. inputBoxBottom:0,
  53. tabbarValue:"/module/chats/pages/index/index",
  54. analysisCount: 0,
  55. },
  56. observers: {
  57. "messages.**"(messages) {
  58. const message = Object.values(messages).pop() as Message;
  59. this.setData({ lastId: message?.id });
  60. },
  61. },
  62. methods: {
  63. boxBottom(event: boxBottom) {
  64. console.log(event, "监听页面index高度event");
  65. this.setData({ inputBoxBottom: event.detail.inputBoxBottom+60 });
  66. console.log(this.data.inputBoxBottom, "监听页面index高度boxbottom");
  67. },
  68. nextType(event: NextTypeEvent) {
  69. this.setData({ messageType: event.detail.MessageType });
  70. },
  71. getCount(event: GetCountEvent) {
  72. this.setData({ analysisCount: event.detail.analysisCount });
  73. console.log(this.data.analysisCount, "监听页面index高度getCount");
  74. },
  75. handle(event: HandleEvent) {
  76. const index = Object.keys(this.data.messages).length;
  77. this.setData({
  78. [`messages.${index}`]: <Message>{
  79. id: `${this.is.replace(/\//g, "_")}-${index}`,
  80. component: event.detail?.component,
  81. },
  82. });
  83. if (event.detail?.scroll) this.scrollIntoView();
  84. },
  85. scrollIntoView(event?: ScrollIntoViewEvent) {
  86. clearTimeout(getScrollcontext.call(this).timer);
  87. const id = event?.detail ?? this.data.lastId;
  88. getScrollcontext.call(this).timer = setTimeout(() => {
  89. getScrollcontext
  90. .call(this)
  91. .scroll?.scrollIntoView(`#${id}`, { alignment: "end" });
  92. }, 300);
  93. },
  94. },
  95. });