feat: 门票组件封装

This commit is contained in:
duanshuwen committed 2025-07-15 16:48:32 +08:00
1 parent b31b04f2e2
commit 591287e757
40 files changed
+420 -50

No files matched your search

@@ -1 +1 @@
{"version":3,"file":"assets.js","sources":["static/quick/quick_icon_bg.png","pages/order/images/back.png","static/logo.png","static/input_voice_icon.png","static/input_send_icon.png","E:/static/icons/clock.png","pages/order/components/GoodsInfo/images/icon_house.png","pages/order/components/NoticeInfo/images/icon_clock.png","pages/order/components/NoticeInfo/images/icon_card.png","pages/order/components/NoticeInfo/images/icon_arrow.png","static/hello_xiaomu_icon@2x.png","static/hello_logo_icon@2x.png","static/top_bg_icon.png","static/drawer_icon.png","static/wave_icon.png","static/test/mk_img_1.png","components/Stepper/images/icon_minus.webp","components/Stepper/images/icon_plus.webp"],"sourcesContent":["export default \"__VITE_ASSET__ff753b35__\"","export default \"__VITE_ASSET__6961004c__\"","export default \"__VITE_ASSET__46719607__\"","export default \"__VITE_ASSET__76f969d6__\"","export default \"__VITE_ASSET__e6bd7a29__\"","export default \"/static/icons/clock.png\"","export default \"__VITE_ASSET__8779a05f__\"","export default \"__VITE_ASSET__50bb3f13__\"","export default \"__VITE_ASSET__c038c52d__\"","export default \"__VITE_ASSET__228274ee__\"","export default \"__VITE_ASSET__2eba501c__\"","export default \"__VITE_ASSET__51733f19__\"","export default \"__VITE_ASSET__ead16fdc__\"","export default \"__VITE_ASSET__a9576f2b__\"","export default \"__VITE_ASSET__d889f8a8__\"","export default \"__VITE_ASSET__c4efe7df__\"","export default \"__VITE_ASSET__39163fc0__\"","export default \"__VITE_ASSET__1502ee7d__\""],"names":[],"mappings":";AAAA,MAAe,eAAA;ACAf,MAAe,eAAA;ACAf,MAAe,eAAA;ACAf,MAAe,eAAA;ACAf,MAAe,eAAA;ACAf,MAAe,eAAA;ACAf,MAAe,eAAA;ACAf,MAAe,eAAA;ACAf,MAAe,eAAA;ACAf,MAAe,aAAA;ACAf,MAAe,eAAA;ACAf,MAAe,eAAA;ACAf,MAAe,eAAA;ACAf,MAAe,eAAA;ACAf,MAAe,eAAA;ACAf,MAAe,eAAA;ACAf,MAAe,aAAA;ACAf,MAAe,aAAA;;;;;;;;;;;;;;;;;;;"}
{"version":3,"file":"assets.js","sources":["static/quick/quick_icon_bg.png","pages/order/images/back.png","static/logo.png","static/input_voice_icon.png","static/input_send_icon.png","E:/static/icons/clock.png","pages/order/components/GoodsInfo/images/icon_house.png","pages/order/components/NoticeInfo/images/icon_clock.png","pages/order/components/NoticeInfo/images/icon_card.png","pages/order/components/NoticeInfo/images/icon_arrow.png","static/hello_xiaomu_icon@2x.png","static/hello_logo_icon@2x.png","static/top_bg_icon.png","static/drawer_icon.png","static/wave_icon.png","static/test/mk_img_1.png","components/Stepper/images/icon_minus.png","components/Stepper/images/icon_plus.png","components/FormCard/images/icon_minus.png"],"sourcesContent":["export default \"__VITE_ASSET__ff753b35__\"","export default \"__VITE_ASSET__6961004c__\"","export default \"__VITE_ASSET__46719607__\"","export default \"__VITE_ASSET__76f969d6__\"","export default \"__VITE_ASSET__e6bd7a29__\"","export default \"/static/icons/clock.png\"","export default \"__VITE_ASSET__8779a05f__\"","export default \"__VITE_ASSET__50bb3f13__\"","export default \"__VITE_ASSET__c038c52d__\"","export default \"__VITE_ASSET__228274ee__\"","export default \"__VITE_ASSET__2eba501c__\"","export default \"__VITE_ASSET__51733f19__\"","export default \"__VITE_ASSET__ead16fdc__\"","export default \"__VITE_ASSET__a9576f2b__\"","export default \"__VITE_ASSET__d889f8a8__\"","export default \"__VITE_ASSET__c4efe7df__\"","export default \"__VITE_ASSET__ce3e600b__\"","export default \"__VITE_ASSET__d8ff016f__\"","export default \"__VITE_ASSET__4a11986d__\""],"names":[],"mappings":";AAAA,MAAe,eAAA;ACAf,MAAe,eAAA;ACAf,MAAe,eAAA;ACAf,MAAe,eAAA;ACAf,MAAe,eAAA;ACAf,MAAe,eAAA;ACAf,MAAe,eAAA;ACAf,MAAe,eAAA;ACAf,MAAe,eAAA;ACAf,MAAe,aAAA;ACAf,MAAe,eAAA;ACAf,MAAe,eAAA;ACAf,MAAe,eAAA;ACAf,MAAe,eAAA;ACAf,MAAe,eAAA;ACAf,MAAe,eAAA;ACAf,MAAe,eAAA;ACAf,MAAe,aAAA;ACAf,MAAe,aAAA;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1 @@
{"version":3,"file":"index.js","sources":["components/FormCard/index.vue","E:/Program Files/HBuilderX/plugins/uniapp-cli-vite/uniComponent:/RDovWUdDaGF0Q1MvY29tcG9uZW50cy9Gb3JtQ2FyZC9pbmRleC52dWU"],"sourcesContent":["<template>\r\n <view class=\"form-wrapper\">\r\n <view class=\"form-header\">\r\n <image class=\"form-icon\" src=\"./images/icon_minus.png\"></image>\r\n <text class=\"form-title\">游客1</text>\r\n </view>\r\n <view class=\"form-item\">\r\n <text class=\"form-label\">姓 名</text>\r\n <input class=\"form-input\" v-model=\"name\" placeholder=\"请输入姓名\" />\r\n </view>\r\n <view class=\"form-item\">\r\n <text class=\"form-label\">手机号</text>\r\n <input\r\n class=\"form-input\"\r\n v-model=\"phone\"\r\n placeholder=\"请输入手机号\"\r\n @blur=\"validatePhone\"\r\n />\r\n </view>\r\n </view>\r\n</template>\r\n\r\n<script setup>\r\nimport { ref } from \"vue\";\r\n\r\n// Local state\r\nconst name = ref(\"\");\r\nconst phone = ref(\"\");\r\nconst phoneError = ref(\"\");\r\n\r\n// Methods\r\nconst validatePhone = () => {\r\n const phoneRegex = /^1[3-9]\\d{9}$/;\r\n if (!phone.value) {\r\n phoneError.value = \"手机号不能为空\";\r\n } else if (!phoneRegex.test(phone.value)) {\r\n phoneError.value = \"请输入正确的手机号\";\r\n } else {\r\n phoneError.value = \"\";\r\n }\r\n};\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n@import \"./styles/index.scss\";\r\n</style>\r\n","import Component from 'D:/YGChatCS/components/FormCard/index.vue'\nwx.createComponent(Component)"],"names":["ref"],"mappings":";;;;;;AA0BA,UAAM,OAAOA,cAAAA,IAAI,EAAE;AACnB,UAAM,QAAQA,cAAAA,IAAI,EAAE;AACpB,UAAM,aAAaA,cAAAA,IAAI,EAAE;AAGzB,UAAM,gBAAgB,MAAM;AAC1B,YAAM,aAAa;AACnB,UAAI,CAAC,MAAM,OAAO;AAChB,mBAAW,QAAQ;AAAA,MACpB,WAAU,CAAC,WAAW,KAAK,MAAM,KAAK,GAAG;AACxC,mBAAW,QAAQ;AAAA,MACvB,OAAS;AACL,mBAAW,QAAQ;AAAA,MACpB;AAAA,IACH;;;;;;;;;;;;;;ACvCA,GAAG,gBAAgB,SAAS;"}
@@ -1 +1 @@
{"version":3,"file":"index.js","sources":["components/Stepper/index.vue","E:/Program Files/HBuilderX/plugins/uniapp-cli-vite/uniComponent:/RDovWUdDaGF0Q1MvY29tcG9uZW50cy9TdGVwcGVyL2luZGV4LnZ1ZQ"],"sourcesContent":["<template>\r\n <view class=\"stepper-wrapper\">\r\n <image\r\n class=\"stepper-btn stepper-btn-minus\"\r\n src=\"./images/icon_minus.webp\"\r\n mode=\"aspectFill\"\r\n @click=\"decrease\"\r\n ></image>\r\n <text class=\"stepper-text\">{{ value }}</text>\r\n <image\r\n class=\"stepper-btn stepper-btn-plus\"\r\n src=\"./images/icon_plus.webp\"\r\n mode=\"aspectFill\"\r\n @click=\"increase\"\r\n ></image>\r\n </view>\r\n</template>\r\n\r\n<script setup>\r\nimport { ref, defineProps, defineEmits } from \"vue\";\r\n\r\n// Props\r\nconst props = defineProps({\r\n modelValue: {\r\n type: Number,\r\n default: 1,\r\n },\r\n min: {\r\n type: Number,\r\n default: 1,\r\n },\r\n max: {\r\n type: Number,\r\n default: 100,\r\n },\r\n});\r\n\r\n// Emit\r\nconst emit = defineEmits([\"update:modelValue\"]);\r\n\r\n// Local state\r\nconst value = ref(props.modelValue);\r\n\r\n// Methods\r\nconst decrease = () => {\r\n if (value.value === 1) return;\r\n\r\n if (value.value > props.min) {\r\n value.value--;\r\n emit(\"update:modelValue\", value.value);\r\n }\r\n};\r\n\r\nconst increase = () => {\r\n if (value.value < props.max) {\r\n value.value++;\r\n emit(\"update:modelValue\", value.value);\r\n }\r\n};\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n@import \"./styles/index.scss\";\r\n</style>\r\n","import Component from 'D:/YGChatCS/components/Stepper/index.vue'\nwx.createComponent(Component)"],"names":["ref"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAsBA,UAAM,QAAQ;AAgBd,UAAM,OAAO;AAGb,UAAM,QAAQA,cAAG,IAAC,MAAM,UAAU;AAGlC,UAAM,WAAW,MAAM;AACrB,UAAI,MAAM,UAAU;AAAG;AAEvB,UAAI,MAAM,QAAQ,MAAM,KAAK;AAC3B,cAAM;AACN,aAAK,qBAAqB,MAAM,KAAK;AAAA,MACtC;AAAA,IACH;AAEA,UAAM,WAAW,MAAM;AACrB,UAAI,MAAM,QAAQ,MAAM,KAAK;AAC3B,cAAM;AACN,aAAK,qBAAqB,MAAM,KAAK;AAAA,MACtC;AAAA,IACH;;;;;;;;;;;;;ACzDA,GAAG,gBAAgB,SAAS;"}
{"version":3,"file":"index.js","sources":["components/Stepper/index.vue","E:/Program Files/HBuilderX/plugins/uniapp-cli-vite/uniComponent:/RDovWUdDaGF0Q1MvY29tcG9uZW50cy9TdGVwcGVyL2luZGV4LnZ1ZQ"],"sourcesContent":["<template>\r\n <view class=\"stepper-wrapper\">\r\n <image\r\n class=\"stepper-btn stepper-btn-minus\"\r\n src=\"./images/icon_minus.png\"\r\n mode=\"aspectFill\"\r\n @click=\"decrease\"\r\n ></image>\r\n <text class=\"stepper-text\">{{ value }}</text>\r\n <image\r\n class=\"stepper-btn stepper-btn-plus\"\r\n src=\"./images/icon_plus.png\"\r\n mode=\"aspectFill\"\r\n @click=\"increase\"\r\n ></image>\r\n </view>\r\n</template>\r\n\r\n<script setup>\r\nimport { ref, defineProps, defineEmits } from \"vue\";\r\n\r\n// Props\r\nconst props = defineProps({\r\n modelValue: {\r\n type: Number,\r\n default: 1,\r\n },\r\n min: {\r\n type: Number,\r\n default: 1,\r\n },\r\n max: {\r\n type: Number,\r\n default: 100,\r\n },\r\n});\r\n\r\n// Emit\r\nconst emit = defineEmits([\"update:modelValue\"]);\r\n\r\n// Local state\r\nconst value = ref(props.modelValue);\r\n\r\n// Methods\r\nconst decrease = () => {\r\n if (value.value === 1) return;\r\n\r\n if (value.value > props.min) {\r\n value.value--;\r\n emit(\"update:modelValue\", value.value);\r\n }\r\n};\r\n\r\nconst increase = () => {\r\n if (value.value < props.max) {\r\n value.value++;\r\n emit(\"update:modelValue\", value.value);\r\n }\r\n};\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n@import \"./styles/index.scss\";\r\n</style>\r\n","import Component from 'D:/YGChatCS/components/Stepper/index.vue'\nwx.createComponent(Component)"],"names":["ref"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAsBA,UAAM,QAAQ;AAgBd,UAAM,OAAO;AAGb,UAAM,QAAQA,cAAG,IAAC,MAAM,UAAU;AAGlC,UAAM,WAAW,MAAM;AACrB,UAAI,MAAM,UAAU;AAAG;AAEvB,UAAI,MAAM,QAAQ,MAAM,KAAK;AAC3B,cAAM;AACN,aAAK,qBAAqB,MAAM,KAAK;AAAA,MACtC;AAAA,IACH;AAEA,UAAM,WAAW,MAAM;AACrB,UAAI,MAAM,QAAQ,MAAM,KAAK;AAC3B,cAAM;AACN,aAAK,qBAAqB,MAAM,KAAK;AAAA,MACtC;AAAA,IACH;;;;;;;;;;;;;ACzDA,GAAG,gBAAgB,SAAS;"}
@@ -0,0 +1 @@
{"version":3,"file":"index.js","sources":["E:/Program Files/HBuilderX/plugins/uniapp-cli-vite/uniComponent:/RDovWUdDaGF0Q1MvY29tcG9uZW50cy9TdW1DYXJkL2luZGV4LnZ1ZQ"],"sourcesContent":["import Component from 'D:/YGChatCS/components/SumCard/index.vue'\nwx.createComponent(Component)"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AACA,GAAG,gBAAgB,SAAS;"}
@@ -1 +1 @@
{"version":3,"file":"ChatMainList.js","sources":["pages/chat/ChatMainList.vue","E:/Program Files/HBuilderX/plugins/uniapp-cli-vite/uniComponent:/RDovWUdDaGF0Q1MvcGFnZXMvY2hhdC9DaGF0TWFpbkxpc3QudnVl"],"sourcesContent":["<template>\n <view class=\"chat-container\" @touchend=\"handleTouchEnd\">\n <!-- 顶部的背景 -->\n <chat-top-bg-img class=\"chat-container-bg\"></chat-top-bg-img>\n\n <!-- 顶部自定义导航栏 -->\n <view\n class=\"nav-bar-container\"\n :style=\"{\n paddingTop: statusBarHeight + 'px',\n backgroundColor: navBgColor,\n }\"\n >\n <chat-top-nav-bar @openDrawer=\"openDrawer\"></chat-top-nav-bar>\n </view>\n\n <view class=\"chat-container-msg-list\">\n <!-- logo栏 -->\n <chat-top-banner class=\"chat-container-top-bannar\"></chat-top-banner>\n\n <!-- 消息列表(可滚动区域) -->\n <scroll-view\n scroll-y\n :scroll-into-view=\"lastMsgId\"\n :scroll-with-animation=\"true\"\n class=\"area-msg-list\"\n >\n <view style=\"padding: 6px 12px\">\n <OneFeelMK001></OneFeelMK001>\n </view>\n <view style=\"padding: 6px 12px\">\n <OneFeelMK001></OneFeelMK001>\n </view>\n <view style=\"padding: 6px 12px\">\n <OneFeelMK001></OneFeelMK001>\n </view>\n\n <ResponseWrapper>\n <ResponseIntro />\n <ImageSwiper />\n <Stepper />\n </ResponseWrapper>\n\n <view\n class=\"area-msg-list-content\"\n v-for=\"item in chatMsgList\"\n :key=\"item.msgId\"\n :id=\"item.msgId\"\n >\n <template v-if=\"item.msgType === MessageRole.AI\">\n <ChatCardAI class=\"message-item message-item-ai\" :text=\"item.msg\">\n <image\n v-if=\"\n item.msgContent && item.msgContent.type === MessageType.IMAGE\n \"\n src=\"/static/logo.png\"\n style=\"width: 100px; height: 100px\"\n ></image>\n <OneFeelMK001></OneFeelMK001>\n </ChatCardAI>\n </template>\n\n <template v-else-if=\"item.msgType === MessageRole.ME\">\n <ChatCardMine\n class=\"message-item message-item-mine\"\n :text=\"item.msg\"\n >\n </ChatCardMine>\n </template>\n <template v-else>\n <text class=\"message-item message-item-other\">{{ item.msg }}</text>\n </template>\n </view>\n <!-- 底部锚点(用于滚动到底部) -->\n <view :id=\"lastMsgId\"></view>\n </scroll-view>\n\n <!-- 输入框区域 -->\n <view class=\"footer-area\">\n <ChatMoreTips @replySent=\"handleReply\"></ChatMoreTips>\n <ChatQuickAccess @replySent=\"handleReply\"></ChatQuickAccess>\n\n <view class=\"area-input\">\n <!-- 发送语音 -->\n <view class=\"input-container-voice\">\n <image src=\"/static/input_voice_icon.png\"></image>\n </view>\n <!-- 输入框 -->\n <textarea\n class=\"textarea\"\n type=\"text\"\n placeholder=\"快速订票,呼叫服务\"\n cursor-spacing=\"65\"\n confirm-type=\"done\"\n v-model=\"inputMessage\"\n @confirm=\"sendMessage\"\n @touchend=\"handleNoHideKeyboard\"\n :confirm-hold=\"true\"\n auto-height\n :show-confirm-bar=\"false\"\n :hold-keyboard=\"holdKeyboard\"\n maxlength=\"300\"\n />\n <view class=\"input-container-send\" @click=\"sendMessage\">\n <image src=\"/static/input_send_icon.png\"></image>\n </view>\n </view>\n </view>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, getCurrentInstance, nextTick } from \"vue\";\nimport { ref, watch } from \"vue\";\nimport { defineEmits } from \"vue\";\nimport { onLoad } from \"@dcloudio/uni-app\";\nimport ChatTopBanner from \"./ChatTopBanner.vue\";\nimport ChatTopBgImg from \"./ChatTopBgImg.vue\";\nimport ChatTopNavBar from \"./ChatTopNavBar.vue\";\nimport ChatCardAI from \"./ChatCardAI.vue\";\nimport ChatCardMine from \"./ChatCardMine.vue\";\nimport ChatQuickAccess from \"./ChatQuickAccess.vue\";\nimport ChatMoreTips from \"./ChatMoreTips.vue\";\n\nimport { MessageRole, ChatModel, MessageType } from \"../../model/ChatModel\";\n\nimport OneFeelMK001 from \"../module/OneFeelMK001.vue\";\nimport ResponseIntro from \"@/components/ResponseIntro/index.vue\";\nimport ResponseWrapper from \"@/components/ResponseWrapper/index.vue\";\nimport ImageSwiper from \"@/components/ImageSwiper/index.vue\";\nimport Stepper from \"@/components/Stepper/index.vue\";\n\nconst instance = getCurrentInstance(); // 获取当前组件实例\n\n// 导航栏相关\nconst statusBarHeight = ref(20Line truncated
{"version":3,"file":"ChatMainList.js","sources":["pages/chat/ChatMainList.vue","E:/Program Files/HBuilderX/plugins/uniapp-cli-vite/uniComponent:/RDovWUdDaGF0Q1MvcGFnZXMvY2hhdC9DaGF0TWFpbkxpc3QudnVl"],"sourcesContent":["<template>\n <view class=\"chat-container\" @touchend=\"handleTouchEnd\">\n <!-- 顶部的背景 -->\n <chat-top-bg-img class=\"chat-container-bg\"></chat-top-bg-img>\n\n <!-- 顶部自定义导航栏 -->\n <view\n class=\"nav-bar-container\"\n :style=\"{\n paddingTop: statusBarHeight + 'px',\n backgroundColor: navBgColor,\n }\"\n >\n <chat-top-nav-bar @openDrawer=\"openDrawer\"></chat-top-nav-bar>\n </view>\n\n <view class=\"chat-container-msg-list\">\n <!-- logo栏 -->\n <chat-top-banner class=\"chat-container-top-bannar\"></chat-top-banner>\n\n <!-- 消息列表(可滚动区域) -->\n <scroll-view\n scroll-y\n :scroll-into-view=\"lastMsgId\"\n :scroll-with-animation=\"true\"\n class=\"area-msg-list\"\n >\n <view style=\"padding: 6px 12px\">\n <OneFeelMK001></OneFeelMK001>\n </view>\n <view style=\"padding: 6px 12px\">\n <OneFeelMK001></OneFeelMK001>\n </view>\n <view style=\"padding: 6px 12px\">\n <OneFeelMK001></OneFeelMK001>\n </view>\n\n <ResponseWrapper>\n <ResponseIntro />\n <ImageSwiper />\n <Stepper />\n <SumCard :referencePrice=\"700\" :discount=\"10\" />\n <FormCard />\n </ResponseWrapper>\n\n <view\n class=\"area-msg-list-content\"\n v-for=\"item in chatMsgList\"\n :key=\"item.msgId\"\n :id=\"item.msgId\"\n >\n <template v-if=\"item.msgType === MessageRole.AI\">\n <ChatCardAI class=\"message-item message-item-ai\" :text=\"item.msg\">\n <image\n v-if=\"\n item.msgContent && item.msgContent.type === MessageType.IMAGE\n \"\n src=\"/static/logo.png\"\n style=\"width: 100px; height: 100px\"\n ></image>\n <OneFeelMK001></OneFeelMK001>\n </ChatCardAI>\n </template>\n\n <template v-else-if=\"item.msgType === MessageRole.ME\">\n <ChatCardMine\n class=\"message-item message-item-mine\"\n :text=\"item.msg\"\n >\n </ChatCardMine>\n </template>\n <template v-else>\n <text class=\"message-item message-item-other\">{{ item.msg }}</text>\n </template>\n </view>\n <!-- 底部锚点(用于滚动到底部) -->\n <view :id=\"lastMsgId\"></view>\n </scroll-view>\n\n <!-- 输入框区域 -->\n <view class=\"footer-area\">\n <ChatMoreTips @replySent=\"handleReply\"></ChatMoreTips>\n <ChatQuickAccess @replySent=\"handleReply\"></ChatQuickAccess>\n\n <view class=\"area-input\">\n <!-- 发送语音 -->\n <view class=\"input-container-voice\">\n <image src=\"/static/input_voice_icon.png\"></image>\n </view>\n <!-- 输入框 -->\n <textarea\n class=\"textarea\"\n type=\"text\"\n placeholder=\"快速订票,呼叫服务\"\n cursor-spacing=\"65\"\n confirm-type=\"done\"\n v-model=\"inputMessage\"\n @confirm=\"sendMessage\"\n @touchend=\"handleNoHideKeyboard\"\n :confirm-hold=\"true\"\n auto-height\n :show-confirm-bar=\"false\"\n :hold-keyboard=\"holdKeyboard\"\n maxlength=\"300\"\n />\n <view class=\"input-container-send\" @click=\"sendMessage\">\n <image src=\"/static/input_send_icon.png\"></image>\n </view>\n </view>\n </view>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, getCurrentInstance, nextTick } from \"vue\";\nimport { ref, watch } from \"vue\";\nimport { defineEmits } from \"vue\";\nimport { onLoad } from \"@dcloudio/uni-app\";\nimport ChatTopBanner from \"./ChatTopBanner.vue\";\nimport ChatTopBgImg from \"./ChatTopBgImg.vue\";\nimport ChatTopNavBar from \"./ChatTopNavBar.vue\";\nimport ChatCardAI from \"./ChatCardAI.vue\";\nimport ChatCardMine from \"./ChatCardMine.vue\";\nimport ChatQuickAccess from \"./ChatQuickAccess.vue\";\nimport ChatMoreTips from \"./ChatMoreTips.vue\";\n\nimport { MessageRole, ChatModel, MessageType } from \"../../model/ChatModel\";\n\nimport OneFeelMK001 from \"../module/OneFeelMK001.vue\";\nimport ResponseIntro from \"@/components/ResponseIntro/index.vue\";\nimport ResponseWrapper from \"@/components/ResponseWrapper/index.vue\";\nimport ImageSwiper from \"@/components/ImageSwiper/index.vue\";\nimport Stepper from \"@/components/Stepper/index.vue\";\nimport SumCard from \"@/componentsLine truncated