4
0

59 Коммиты 77fcdd37c9 ... f535a9fe65

Автор SHA1 Сообщение Дата
  张田田 f535a9fe65 修复注册信息是提交按钮报错 3 недель назад
  张田田 903c4f7e86 提交 2 месяцев назад
  张田田 9736020728 上传 2 месяцев назад
  张田田 ff9b6806bf 把vantui去除掉了,减少包体积 2 месяцев назад
  张田田 24b2dc6fe8 售后 2 месяцев назад
  张田田 7a2536ddf2 Merge branch 'story-234' of ssh://121.43.162.141:10022/six.fe/health.applet into story-afterSale 2 месяцев назад
  张田田 231d0bd8a8 优化我的页面登录 2 месяцев назад
  张田田 66f8a68159 售后 2 месяцев назад
  张田田 a606b7ad12 售后 2 месяцев назад
  张田田 7dafa243c7 售后 2 месяцев назад
  张田田 3873253768 提交修改 2 месяцев назад
  张田田 5275cca25c 提交修改 2 месяцев назад
  张田田 48f3ada7a7 协商历史图片可以放大轮播查看 2 месяцев назад
  张田田 529a66ccb5 Merge branch 'story-234' of ssh://121.43.162.141:10022/six.fe/health.applet into story-afterSale 2 месяцев назад
  张田田 2b0621b2c5 售后 2 месяцев назад
  张田田 dcb51e3e54 bug-627 3 месяцев назад
  张田田 3c3e852f03 Merge branch 'story-238' of ssh://121.43.162.141:10022/six.fe/health.applet into story-234 3 месяцев назад
  张田田 8b6ccb2ca7 优化错误提示 3 месяцев назад
  张田田 72f715ee8f 优化评价样式 3 месяцев назад
  张田田 29e2adf927 bug-622 3 месяцев назад
  张田田 2a49c7233f 物流 3 месяцев назад
  张田田 459a3dbb9a bug-625 3 месяцев назад
  张田田 c1b29ff61f 优化物流样式 3 месяцев назад
  张田田 2904b6c952 物流 3 месяцев назад
  张田田 8a2514fb20 调整评价样式 3 месяцев назад
  张田田 966db4ec0b 物流 3 месяцев назад
  张田田 b2da3c8e91 售后 3 месяцев назад
  张田田 bd05dcf210 售后 3 месяцев назад
  张田田 c0bcb9efe2 售后 3 месяцев назад
  张田田 1cf8bb3558 物流 3 месяцев назад
  张田田 d90c386c1d 1 3 месяцев назад
  张田田 3c051ac179 Merge branch 'story-237' of ssh://121.43.162.141:10022/six.fe/health.applet into story-238 3 месяцев назад
  张田田 0d6bf52415 取消预约功能 3 месяцев назад
  张田田 ed89425c13 bug-611 3 месяцев назад
  张田田 14320a0af2 bug-612 3 месяцев назад
  张田田 c8e8cc9e9f bug-616 3 месяцев назад
  张田田 b895f086fe Merge branch 'develop' of ssh://121.43.162.141:10022/six.fe/health.applet into story-237 3 месяцев назад
  张田田 d56112b2ee 优化主包大小 3 месяцев назад
  张田田 20026ef102 优化足迹中健康宣教的点击 3 месяцев назад
  张田田 fa515b38ab 1 3 месяцев назад
  张田田 37e83d344e 预约功能 3 месяцев назад
  张田田 0d87425c52 Merge branch 'story-237' of ssh://121.43.162.141:10022/six.fe/health.applet into story-238 3 месяцев назад
  张田田 1aefa2fed2 优化小程序主包大小 3 месяцев назад
  张田田 b0f1e91596 去除测试 3 месяцев назад
  张田田 9414b7c151 Merge branch 'develop' of ssh://121.43.162.141:10022/six.fe/health.applet into story-237 3 месяцев назад
  张田田 c956197260 1 3 месяцев назад
  张田田 0304de8e10 优化订单词语替换 3 месяцев назад
  张田田 994eee073e 取消预约 3 месяцев назад
  张田田 5627ceffb8 变更 3 месяцев назад
  张田田 6ddbae23b5 Merge branch 'develop' of ssh://121.43.162.141:10022/six.fe/health.applet into story-237 3 месяцев назад
  张田田 e860be1b15 提交 3 месяцев назад
  张田田 bfba0a9358 订单部分词语替换 3 месяцев назад
  张田田 2bddede525 Merge branch 'develop' of ssh://121.43.162.141:10022/six.fe/health.applet into story-237 3 месяцев назад
  张田田 7165e99ba4 Merge tag '2.3.0' into develop 3 месяцев назад
  张田田 4cf5d6ab75 评价 3 месяцев назад
  张田田 2285057a1b 评价 3 месяцев назад
  张田田 2cb78e689d 评价 3 месяцев назад
  张田田 5cd10ed878 去除test页面 3 месяцев назад
  张田田 427bd59847 评价 4 месяцев назад
100 измененных файлов с 1354 добавлено и 364 удалено
  1. 0 1
      .cloudbase/container/debug.json
  2. 7 0
      .gitignore
  3. 0 6
      .idea/vcs.xml
  4. 0 79
      .idea/workspace.xml
  5. 1 1
      miniprogram/app.config.ts
  6. 12 4
      miniprogram/app.json
  7. 16 0
      miniprogram/module/afterSale/pages/questionnaire/questionnaire.json
  8. 208 0
      miniprogram/module/afterSale/pages/questionnaire/questionnaire.scss
  9. 223 0
      miniprogram/module/afterSale/pages/questionnaire/questionnaire.ts
  10. 68 0
      miniprogram/module/afterSale/pages/questionnaire/questionnaire.wxml
  11. 20 0
      miniprogram/module/afterSale/request.ts
  12. 1 2
      miniprogram/module/article/pages/add-address/add-address.json
  13. 51 31
      miniprogram/module/article/pages/add-address/add-address.ts
  14. 1 7
      miniprogram/module/article/pages/add-address/add-address.wxml
  15. 0 3
      miniprogram/module/article/pages/confirm-receiving/confirm-receiving.ts
  16. 20 10
      miniprogram/module/article/pages/foot-print/foot-print.ts
  17. 0 1
      miniprogram/module/article/pages/order-detail/order-detail.ts
  18. 0 48
      miniprogram/module/article/pages/order-list/order-list.scss
  19. 11 1
      miniprogram/module/article/pages/order-list/order-list.ts
  20. 7 7
      miniprogram/module/article/pages/order-list/order-list.wxml
  21. 0 1
      miniprogram/module/article/pages/success-page/success-page.ts
  22. 13 0
      miniprogram/module/care/pages/cancelAppointment/cancelAppointment.json
  23. 229 0
      miniprogram/module/care/pages/cancelAppointment/cancelAppointment.scss
  24. 36 0
      miniprogram/module/care/pages/cancelAppointment/cancelAppointment.ts
  25. 41 0
      miniprogram/module/care/pages/cancelAppointment/cancelAppointment.wxml
  26. 50 4
      miniprogram/module/care/pages/care/verifyRecord.scss
  27. 79 4
      miniprogram/module/care/pages/care/verifyRecord.ts
  28. 89 68
      miniprogram/module/care/pages/care/verifyRecord.wxml
  29. 0 1
      miniprogram/module/care/pages/careDetail/careDetail.ts
  30. 14 24
      miniprogram/module/care/pages/offlineTreatment/offlineTreatment.ts
  31. 2 1
      miniprogram/module/care/pages/offlineTreatment/offlineTreatment.wxml
  32. 0 1
      miniprogram/module/care/pages/reportRecord/reportRecord.ts
  33. 31 1
      miniprogram/module/care/request.ts
  34. 0 1
      miniprogram/module/charts/components/record-index/health-index.ts
  35. 14 8
      miniprogram/module/chats/components/guide/guide.wxml
  36. 2 1
      miniprogram/module/chats/components/message-consult/message-consult.json
  37. 0 4
      miniprogram/module/chats/components/questionnaire/questionnaire.ts
  38. 3 2
      miniprogram/module/chats/pages/consultation-record/consultation-record.json
  39. 69 19
      miniprogram/module/chats/pages/consultation-record/consultation-record.scss
  40. 0 3
      miniprogram/module/chats/pages/consultation-record/consultation-record.ts
  41. 21 18
      miniprogram/module/chats/pages/consultation-record/consultation-record.wxml
  42. 2 2
      miniprogram/module/chats/pages/index/index.scss
  43. 0 0
      miniprogram/module/chats/towxml/audio-player/Audio.js
  44. 0 0
      miniprogram/module/chats/towxml/audio-player/audio-player.js
  45. 0 0
      miniprogram/module/chats/towxml/audio-player/audio-player.json
  46. 0 0
      miniprogram/module/chats/towxml/audio-player/audio-player.wxml
  47. 0 0
      miniprogram/module/chats/towxml/audio-player/audio-player.wxss
  48. 0 0
      miniprogram/module/chats/towxml/audio-player/loading.svg
  49. 0 0
      miniprogram/module/chats/towxml/config.js
  50. 0 0
      miniprogram/module/chats/towxml/decode.js
  51. 13 0
      miniprogram/module/chats/towxml/decode.json
  52. 0 0
      miniprogram/module/chats/towxml/decode.wxml
  53. 0 0
      miniprogram/module/chats/towxml/decode.wxss
  54. 0 0
      miniprogram/module/chats/towxml/echarts/dark.js
  55. 0 0
      miniprogram/module/chats/towxml/echarts/echarts.js
  56. 0 0
      miniprogram/module/chats/towxml/echarts/echarts.json
  57. 0 0
      miniprogram/module/chats/towxml/echarts/echarts.wxml
  58. 0 0
      miniprogram/module/chats/towxml/echarts/echarts.wxss
  59. 0 0
      miniprogram/module/chats/towxml/echarts/wx-canvas.js
  60. 0 0
      miniprogram/module/chats/towxml/echarts/wx-echarts.js
  61. 0 0
      miniprogram/module/chats/towxml/img/img.js
  62. 0 0
      miniprogram/module/chats/towxml/img/img.json
  63. 0 0
      miniprogram/module/chats/towxml/img/img.wxml
  64. 0 0
      miniprogram/module/chats/towxml/img/img.wxss
  65. 0 0
      miniprogram/module/chats/towxml/index.js
  66. 0 0
      miniprogram/module/chats/towxml/latex/latex.js
  67. 0 0
      miniprogram/module/chats/towxml/latex/latex.json
  68. 0 0
      miniprogram/module/chats/towxml/latex/latex.wxml
  69. 0 0
      miniprogram/module/chats/towxml/latex/latex.wxss
  70. 0 0
      miniprogram/module/chats/towxml/parse/highlight/highlight.js
  71. 0 0
      miniprogram/module/chats/towxml/parse/highlight/index.js
  72. 0 0
      miniprogram/module/chats/towxml/parse/highlight/languages/bash.js
  73. 0 0
      miniprogram/module/chats/towxml/parse/highlight/languages/c-like.js
  74. 0 0
      miniprogram/module/chats/towxml/parse/highlight/languages/c.js
  75. 0 0
      miniprogram/module/chats/towxml/parse/highlight/languages/css.js
  76. 0 0
      miniprogram/module/chats/towxml/parse/highlight/languages/dart.js
  77. 0 0
      miniprogram/module/chats/towxml/parse/highlight/languages/go.js
  78. 0 0
      miniprogram/module/chats/towxml/parse/highlight/languages/htmlbars.js
  79. 0 0
      miniprogram/module/chats/towxml/parse/highlight/languages/java.js
  80. 0 0
      miniprogram/module/chats/towxml/parse/highlight/languages/javascript.js
  81. 0 0
      miniprogram/module/chats/towxml/parse/highlight/languages/json.js
  82. 0 0
      miniprogram/module/chats/towxml/parse/highlight/languages/less.js
  83. 0 0
      miniprogram/module/chats/towxml/parse/highlight/languages/nginx.js
  84. 0 0
      miniprogram/module/chats/towxml/parse/highlight/languages/php.js
  85. 0 0
      miniprogram/module/chats/towxml/parse/highlight/languages/python-repl.js
  86. 0 0
      miniprogram/module/chats/towxml/parse/highlight/languages/python.js
  87. 0 0
      miniprogram/module/chats/towxml/parse/highlight/languages/scss.js
  88. 0 0
      miniprogram/module/chats/towxml/parse/highlight/languages/shell.js
  89. 0 0
      miniprogram/module/chats/towxml/parse/highlight/languages/typescript.js
  90. 0 0
      miniprogram/module/chats/towxml/parse/highlight/languages/xml.js
  91. 0 0
      miniprogram/module/chats/towxml/parse/highlight/style/github.wxss
  92. 0 0
      miniprogram/module/chats/towxml/parse/highlight/style/monokai.wxss
  93. 0 0
      miniprogram/module/chats/towxml/parse/index.js
  94. 0 0
      miniprogram/module/chats/towxml/parse/markdown/index.js
  95. 0 0
      miniprogram/module/chats/towxml/parse/markdown/markdown.js
  96. 0 0
      miniprogram/module/chats/towxml/parse/markdown/plugins/echarts.js
  97. 0 0
      miniprogram/module/chats/towxml/parse/markdown/plugins/emoji.js
  98. 0 0
      miniprogram/module/chats/towxml/parse/markdown/plugins/ins.js
  99. 0 0
      miniprogram/module/chats/towxml/parse/markdown/plugins/latex.js
  100. 0 0
      miniprogram/module/chats/towxml/parse/markdown/plugins/mark.js

+ 0 - 1
.cloudbase/container/debug.json

@@ -1 +0,0 @@
-{"containers":[],"config":{}}

+ 7 - 0
.gitignore

@@ -13,4 +13,11 @@ $RECYCLE.BIN/
 # Node.js
 node_modules/
 miniprogram_npm
+npm*-debug.log
 project.private.config.json
+
+# WeChat DevTools
+.cloudbase/
+
+# IDE
+.idea/

+ 0 - 6
.idea/vcs.xml

@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="VcsDirectoryMappings">
-    <mapping directory="$PROJECT_DIR$" vcs="Git" />
-  </component>
-</project>

+ 0 - 79
.idea/workspace.xml

@@ -1,79 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="AutoImportSettings">
-    <option name="autoReloadType" value="SELECTIVE" />
-  </component>
-  <component name="ChangeListManager">
-    <list default="true" id="ade0a8c5-0639-4f05-956a-aae1181b5d18" name="更改" comment="">
-      <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/miniprogram/app.config.ts" beforeDir="false" afterPath="$PROJECT_DIR$/miniprogram/app.config.ts" afterDir="false" />
-    </list>
-    <option name="SHOW_DIALOG" value="false" />
-    <option name="HIGHLIGHT_CONFLICTS" value="true" />
-    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
-    <option name="LAST_RESOLUTION" value="IGNORE" />
-  </component>
-  <component name="Git.Settings">
-    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
-  </component>
-  <component name="ProjectColorInfo">{
-  &quot;associatedIndex&quot;: 6
-}</component>
-  <component name="ProjectId" id="2y83hfQWdk0KL1ry1ltAyuUZcIM" />
-  <component name="ProjectViewState">
-    <option name="hideEmptyMiddlePackages" value="true" />
-    <option name="showLibraryContents" value="true" />
-  </component>
-  <component name="PropertiesComponent"><![CDATA[{
-  "keyToString": {
-    "ModuleVcsDetector.initialDetectionPerformed": "true",
-    "RunOnceActivity.ShowReadmeOnStart": "true",
-    "RunOnceActivity.git.unshallow": "true",
-    "git-widget-placeholder": "release/2.0.1",
-    "junie.onboarding.icon.badge.shown": "true",
-    "last_opened_file_path": "/Users/zhangtiantian/Desktop/six-health.applet",
-    "node.js.detected.package.eslint": "true",
-    "node.js.detected.package.tslint": "true",
-    "node.js.selected.package.eslint": "(autodetect)",
-    "node.js.selected.package.tslint": "(autodetect)",
-    "nodejs_package_manager_path": "npm",
-    "ts.external.directory.path": "/Applications/WebStorm.app/Contents/plugins/javascript-plugin/jsLanguageServicesImpl/external",
-    "vue.rearranger.settings.migration": "true"
-  }
-}]]></component>
-  <component name="SharedIndexes">
-    <attachedChunks>
-      <set>
-        <option value="bundled-js-predefined-d6986cc7102b-6a121458b545-JavaScript-WS-251.25410.117" />
-      </set>
-    </attachedChunks>
-  </component>
-  <component name="TaskManager">
-    <task active="true" id="Default" summary="默认任务">
-      <changelist id="ade0a8c5-0639-4f05-956a-aae1181b5d18" name="更改" comment="" />
-      <created>1749202493163</created>
-      <option name="number" value="Default" />
-      <option name="presentableId" value="Default" />
-      <updated>1749202493163</updated>
-      <workItem from="1749202494220" duration="720000" />
-      <workItem from="1749523832830" duration="2478000" />
-      <workItem from="1754882475936" duration="7606000" />
-    </task>
-    <servers />
-  </component>
-  <component name="TypeScriptGeneratedFilesManager">
-    <option name="version" value="3" />
-    <option name="exactExcludedFiles">
-      <list>
-        <option value="$PROJECT_DIR$/miniprogram/module/care/pages/careDetail/careDetail.js" />
-        <option value="$PROJECT_DIR$/miniprogram/module/charts/compoments/record-index/record-index.js" />
-        <option value="$PROJECT_DIR$/miniprogram/module/charts/compoments/record-index/chalk.theme.js" />
-        <option value="$PROJECT_DIR$/miniprogram/module/charts/record-care/record-care.js" />
-        <option value="$PROJECT_DIR$/miniprogram/module/charts/record-care/record-care.js" />
-      </list>
-    </option>
-  </component>
-  <component name="UnknownFeatures">
-    <option featureType="com.intellij.fileTypeFactory" implementationName="*.wxml" />
-  </component>
-</project>

+ 1 - 1
miniprogram/app.config.ts

@@ -7,8 +7,8 @@ if (env === "trial") {
   host = "test.hzliuzhi.com";
 } else if (env === "develop") {
   host = "wx.hzliuzhi.com:4433";
+  // host="test.hzliuzhi.com"
 }
-console.log("host",host)
 export const HOST = host;
 export const Base_URL = `https://${host}/manager/fdhb-mobile`;
 export const Upload_URL = `https://${host}/manager/file`;

+ 12 - 4
miniprogram/app.json

@@ -83,7 +83,8 @@
         "pages/care/verifyRecord",
         "pages/offlineTreatment/offlineTreatment",
         "pages/careDetail/careDetail",
-        "pages/reportRecord/reportRecord"
+        "pages/reportRecord/reportRecord",
+        "pages/cancelAppointment/cancelAppointment"
       ]
     },
     {
@@ -95,7 +96,15 @@
         "pages/other-detail/other-detail",
         "pages/confirme-order/confirme-order",
         "pages/appointment/appointment",
-        "pages/appointment-success/appointment-success"
+        "pages/appointment-success/appointment-success",
+        "pages/goods-evaluate/goods-evaluate",
+        "pages/goods-evaluateDetail/goods-evaluateDetail",
+        "pages/offline-evaluate/offline-evaluate",
+        "pages/offline-evaluateDetail/offline-evaluateDetail",
+        "pages/logistics-detail/logistics-detail",
+        "pages/refund-success/refund-success",
+        "pages/refund-processing/refund-processing",
+        "pages/negotiation-history/negotiation-history"
       ]
     }
   ],
@@ -131,8 +140,7 @@
     "t-navbar": "tdesign-miniprogram/navbar/navbar",
     "t-message": "tdesign-miniprogram/message/message",
     "popup-user-auth": "./components/popup-user-auth/popup-user-auth",
-    "popup-privacy": "./components/popup-privacy/popup-privacy",
-    "towxml": "./towxml/towxml"
+    "popup-privacy": "./components/popup-privacy/popup-privacy"
   },
   "requiredPrivateInfos": [
     "getFuzzyLocation",

+ 16 - 0
miniprogram/module/afterSale/pages/questionnaire/questionnaire.json

@@ -0,0 +1,16 @@
+{
+  "renderer": "skyline",
+  "navigationBarTextStyle": "white",
+  "navigationBarBackgroundColor": "#0f2226",
+  "backgroundColor": "#0f2226",
+  "backgroundColorContent": "#ffffff",
+  "backgroundColorTop": "#0f2226",
+  "backgroundColorBottom": "#0f2226",
+  "component": true,
+  "usingComponents": {
+    "t-icon": "tdesign-miniprogram/icon/icon",
+    "t-navbar": "tdesign-miniprogram/navbar/navbar",
+    "t-radio": "tdesign-miniprogram/radio/radio",
+    "t-radio-group": "tdesign-miniprogram/radio-group/radio-group"
+  }
+}

+ 208 - 0
miniprogram/module/afterSale/pages/questionnaire/questionnaire.scss

@@ -0,0 +1,208 @@
+.page-container {
+  background-color: #f5f5f5;
+  height: calc(100vh - 64px);
+  box-sizing: border-box;
+}
+
+.questionnaire-container {
+  padding: 32rpx;
+  padding-bottom: 180rpx; // 为底部固定按钮留出足够空间(按钮高度88rpx + padding 48rpx + 安全区域 + 额外空间)
+  background-color: #fff;
+  min-height: 100%;
+}
+
+/* 标题 */
+.questionnaire-title {
+  font-size: 40rpx;
+  font-weight: bold;
+  color: #333;
+  text-align: center;
+  margin-bottom: 32rpx;
+}
+
+/* 介绍文字 */
+.questionnaire-intro {
+  font-size: 28rpx;
+  color: black;
+  line-height: 1.8;
+  margin-bottom: 32rpx;
+  text-align: justify;
+}
+
+/* 分数说明 */
+.score-explanation {
+  margin-bottom: 32rpx;
+}
+
+.score-explanation-text {
+  font-size: 28rpx;
+  color: #333;
+  line-height: 1.6;
+  font-weight: bold;
+}
+
+/* 问题组 */
+.question-groups {
+  margin-bottom: 32rpx;
+}
+
+.question-group {
+  margin-bottom: 32rpx;
+}
+
+.group-title {
+  font-size: 35rpx;
+  font-weight: bold;
+  color: #333;
+}
+
+/* 问题列表 */
+.question-list {
+  display: flex;
+  flex-direction: column;
+  gap: 32rpx;
+}
+
+.question-item {
+  padding-bottom: 32rpx;
+  border-bottom: 1px solid #f0f0f0;
+
+  &:last-child {
+    border-bottom: none;
+  }
+}
+
+.question-name {
+  font-size: 28rpx;
+  color: #333;
+  line-height: 1.6;
+  font-weight: bold;
+  margin: 20rpx 0 20rpx 0;
+}
+
+/* 分数选择 */
+.score-radio-group {
+  width: 100%;
+}
+
+.score-options {
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+  flex-wrap: wrap;
+}
+
+.score-radio-item {
+  margin-right: 32rpx;
+
+  &:last-child {
+    margin-right: 0;
+  }
+}
+
+/* 其他意见 */
+.other-comment-section {
+  margin-top: 32rpx;
+  margin-bottom: 32rpx;
+}
+
+.other-comment-title {
+  font-size: 28rpx;
+  color: #333;
+  margin-bottom: 16rpx;
+}
+
+.other-comment-input {
+  width: 100%;
+  min-height: 200rpx;
+  padding: 20rpx;
+  background-color: #f8f8f8;
+  border: 2rpx solid #e0e0e0;
+  border-radius: 8rpx;
+  font-size: 26rpx;
+  color: #333;
+  box-sizing: border-box;
+  line-height: 1.6;
+}
+
+/* 结束语 */
+.questionnaire-end {
+  font-size: 26rpx;
+  color: black;
+  margin-top: 22rpx;
+  margin-bottom: 32rpx;
+  padding-top: 32rpx;
+  border-top: 1px solid #f0f0f0;
+}
+
+/* 加载状态 */
+.loading-container {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  min-height: 400rpx;
+  padding: 32rpx;
+}
+
+.loading-text {
+  font-size: 28rpx;
+  color: #999;
+}
+
+/* 空数据状态 */
+.empty-container {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  min-height: 400rpx;
+  padding: 32rpx;
+}
+
+.empty-text {
+  font-size: 28rpx;
+  color: #999;
+}
+
+/* 保存按钮 */
+.save-button-container {
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  padding: 24rpx 32rpx;
+  padding-bottom: calc(env(safe-area-inset-bottom));
+  background-color: #fff;
+  border-top: 1px solid #f0f0f0;
+  box-shadow: 0 -2rpx 10rpx rgba(0, 0, 0, 0.05);
+  z-index: 100;
+  box-sizing: border-box;
+}
+
+.save-button {
+  width: 100%;
+  height: 88rpx;
+  line-height: 88rpx;
+  background: linear-gradient(135deg, #1d6ff6 0%, #0d5dd8 100%);
+  border-radius: 44rpx;
+  color: #fff;
+  font-size: 32rpx;
+  font-weight: bold;
+  border: none;
+  display: block;
+  text-align: center;
+  transition: all 0.3s;
+
+  &::after {
+    border: none;
+  }
+
+  &[disabled] {
+    background: #ccc;
+    opacity: 0.6;
+  }
+
+  &:not([disabled]):active {
+    opacity: 0.8;
+    transform: scale(0.98);
+  }
+}

+ 223 - 0
miniprogram/module/afterSale/pages/questionnaire/questionnaire.ts

@@ -0,0 +1,223 @@
+
+import {
+  getQuestionnaireMethod,
+  submitQuestionnaireMethod,
+} from "../../request";
+
+export interface Questionnaire {
+  id: number; //	满意度调研问卷ID
+  name: string; //满意度调研问卷名称
+  startSentence: string; //开头语
+  endSentence: string; //结束语
+  suggestion: string; //其他意见
+  groups: Array<{
+    name: string; //	问题组名称
+    items: Array<{
+      name: string;
+      score?: string; // 原始分数(可选)
+      selectedScore?: number | string; // 用户选择的分数
+    }>;
+  }>;
+}
+Page({
+  onLoad(options: { id?: string }) {
+    // 如果没有传递 id,使用默认 id 1,或者可以根据实际情况调整
+    const questionnaireId = options.id ? Number(options.id) : 1;
+    this.setData({
+      "followDetail.id": questionnaireId,
+    });
+    if (questionnaireId) {
+      this.getQuestionnaire(questionnaireId);
+    } else {
+      wx.showToast({
+        title: "问卷ID不能为空",
+        icon: "none",
+        duration: 2000,
+      });
+    }
+  },
+
+  data: {
+    scoreList: [
+      {
+        label: "1分",
+        value: "1",
+      },
+      {
+        label: "2分",
+        value: "2",
+      },
+      {
+        label: "3分",
+        value: "3",
+      },
+      {
+        label: "4分",
+        value: "4",
+      },
+      {
+        label: "5分",
+        value: "5",
+      },
+    ],
+    followDetail: {
+      id: 0,
+    } as Questionnaire,
+    loading: true, // 加载状态
+    showEmpty: false, // 显示空数据
+    saving: false, // 保存状态
+    suggestion: "", // 其他意见
+  },
+
+  async getQuestionnaire(id: number) {
+    // 模拟后端数据(根据图片内容)
+    // const mockData: Questionnaire = {
+    //   id: id,
+    //   name: "就诊体验满意度",
+    //   startSentence:
+    //     "感谢您选择我院就诊,为了持续改进医疗服务质量,我们诚挚地邀请您参与本次满意度调研。您的真实反馈对我们非常重要,我们将严格保密您的个人信息,请您根据实际就诊体验,花费几分钟时间完成本次调研。",
+    //   endSentence:
+    //     "再次感谢您的参与,我们会根据您的反馈持续改进服务质量再次感谢您的参与,我们会根据您的反馈持续改进服务质量。再次感谢您的参与,我们会根据您的反馈持续改进服务质量再次感谢您的参与,我们会根据您的反馈持续改进服务质量再次感谢您的参与,我们会根据您的反馈持续改进服务质量再次感谢您的参与,我们会根据您的反馈持续改进服务质量",
+    //   suggestion: "其他意见",
+    //   groups: [
+    //     {
+    //       name: "一、就诊环境评价",
+    //       items: [
+    //         {
+    //           name: "医院门诊/住院部的整洁度",
+    //           score: "1",
+    //         },
+    //         {
+    //           name: "医院的通风情况",
+    //           score: "2",
+    //         },
+    //         {
+    //           name: "医院的采光情况",
+    //           score: "3",
+    //         },
+    //         {
+    //           name: "医院的噪音控制",
+    //           score: "4",
+    //         },
+    //         {
+    //           name: "候诊区域的舒适度(座椅、空间等)",
+    //           score: "5",
+    //         },
+    //       ],
+    //     },
+    //   ],
+    // };
+
+    // 模拟网络延迟
+    // await new Promise((resolve) => setTimeout(resolve, 500));
+
+    // this.setData({
+    //   followDetail: mockData,
+    //   loading: false,
+    // });
+    // 实际接口调用
+    let list = await getQuestionnaireMethod(id);
+    const questionnaireData = list?.data as Questionnaire;
+    // 确保 id 字段存在,如果后端没有返回 id,使用传入的 id
+    const finalData = questionnaireData
+      ? { ...questionnaireData, id: questionnaireData.id || id }
+      : ({ id } as Questionnaire);
+    this.setData({
+      loading: false,
+      followDetail: finalData,
+      showEmpty: JSON.stringify(list?.data) === "{}" ? true : false,
+    });
+  },
+
+  // 选择分数(radio-group change 事件)
+  onScoreChange(e: WechatMiniprogram.CustomEvent) {
+    const { groupIndex, itemIndex } = e.currentTarget.dataset;
+    const score = e.detail.value;
+    const groups = [...this.data.followDetail.groups];
+    groups[groupIndex].items[itemIndex].selectedScore = score;
+
+    this.setData({
+      "followDetail.groups": groups,
+    });
+  },
+
+  // 输入其他意见
+  onCommentInput(e: WechatMiniprogram.Input) {
+    this.setData({
+      suggestion: e.detail.value,
+    });
+  },
+
+  // 保存问卷
+  async onSave() {
+    // 检查是否所有问题都已回答
+    const groups = this.data.followDetail?.groups || [];
+    // let allAnswered = true;
+    // let unansweredQuestions: string[] = [];
+    // for (const group of groups) {
+    //   for (const item of group.items) {
+    //     if (!item.selectedScore) {
+    //       allAnswered = false;
+    //       unansweredQuestions.push(item.name);
+    //     }
+    //   }
+    // }
+
+    // if (!allAnswered) {
+    //   wx.showToast({
+    //     title: "请完成所有问题的评分",
+    //     icon: "none",
+    //     duration: 2000,
+    //   });
+    //   return;
+    // }
+    // 准备提交数据
+    const submitData = {
+      groups: groups.map((group) => ({
+        name: group.name,
+        items: group.items.map((item) => ({
+          name: item.name,
+          score: item.selectedScore ? String(item.selectedScore) : "",
+        })),
+      })),
+      startSentence: this.data.followDetail.startSentence,
+      endSentence: this.data.followDetail.endSentence,
+      suggestion: this.data.suggestion,
+      name: this.data.followDetail.name,
+    };
+    this.setData({
+      saving: true,
+    });
+
+    try {
+      // 实际接口调用
+      await submitQuestionnaireMethod(
+        this.data.followDetail.id,
+        submitData as AnyObject
+      );
+      wx.showToast({
+        title: "提交成功",
+        icon: "success",
+        duration: 2000,
+      });
+      setTimeout(() => {
+        wx.redirectTo({
+          url: "/pages/home/home",
+        });
+      }, 2000);
+    } catch (error) {
+      wx.showToast({
+        title: "保存失败,请重试",
+        icon: "none",
+        duration: 2000,
+      });
+      this.setData({
+        saving: false,
+      });
+    } finally {
+      this.setData({
+        saving: false,
+      });
+    }
+  },
+});

+ 68 - 0
miniprogram/module/afterSale/pages/questionnaire/questionnaire.wxml

@@ -0,0 +1,68 @@
+<t-navbar title="满意度问卷" left-arrow />
+<scroll-view class="page-container" scroll-y>
+  <!-- 加载状态 -->
+  <view class="loading-container" wx:if="{{loading}}">
+    <view class="loading-text">加载中...</view>
+  </view>
+
+  <!-- 问卷内容 -->
+  <view class="questionnaire-container" wx:elif="{{!showEmpty}}">
+    <!-- 标题 -->
+    <view class="questionnaire-title">{{followDetail.name || '满意度问卷'}}</view>
+
+    <!-- 介绍文字 -->
+    <view class="questionnaire-intro" wx:if="{{followDetail.startSentence}}">
+      {{followDetail.startSentence}}
+    </view>
+
+    <!-- 分数说明 -->
+    <view class="score-explanation">
+      <text class="score-explanation-text">分数说明:1分表示非常不满意,2分表示不满意,3分表示一般,4分表示满意,5分表示非常满意</text>
+    </view>
+
+    <!-- 问题组 -->
+    <view class="question-groups" wx:if="{{followDetail.groups}}">
+      <view class="question-group" wx:for="{{followDetail.groups}}" wx:key="index" wx:for-index="groupIndex">
+        <!-- 问题组标题 -->
+        <view class="group-title">{{item.name}}</view>
+
+        <!-- 问题列表 -->
+        <view class="question-list">
+          <view class="question-item" wx:for="{{item.items}}" wx:key="index" wx:for-index="itemIndex">
+            <!-- 问题名称 -->
+            <view class="question-name">{{itemIndex + 1}}、{{item.name}}</view>
+
+            <!-- 分数选择(单选) -->
+            <t-radio-group value="{{item.selectedScore || item.score}}" borderless t-class="box" bind:change="onScoreChange" data-group-index="{{groupIndex}}" data-item-index="{{itemIndex}}">
+              <t-radio block="{{false}}" :label="{{item.label}}" :value="{{item.value}}" wx:for="{{scoreList}}" wx:key="value" style="margin-right:20rpx" />
+            </t-radio-group>
+          </view>
+        </view>
+      </view>
+    </view>
+
+    <!-- 其他意见 -->
+    <view class="other-comment-section">
+      <view class="other-comment-title">其他意见:</view>
+      <textarea class="other-comment-input" placeholder="请给我们留言您的其他意见" value="{{suggestion}}" bindinput="onCommentInput" maxlength="500" show-confirm-bar="{{false}}" />
+    </view>
+
+    <!-- 结束语 -->
+    <view class="questionnaire-end">
+      {{followDetail.endSentence}}
+    </view>
+  </view>
+
+  <!-- 无数据提示 -->
+  <view class="empty-container" wx:elif="{{showEmpty}}">
+    <view class="empty-text">暂无问卷数据</view>
+  </view>
+</scroll-view>
+
+<!-- 保存按钮 -->
+<view class="save-button-container" wx:if="{{!showEmpty}}">
+  <button class="save-button" bindtap="onSave" disabled="{{saving}}">
+    <text wx:if="{{saving}}">保存中...</text>
+    <text wx:else>保存</text>
+  </button>
+</view>

+ 20 - 0
miniprogram/module/afterSale/request.ts

@@ -0,0 +1,20 @@
+import { Get, Post } from "../../lib/request/method";
+
+// 获取问卷详情
+export function getQuestionnaireMethod(id: number) {
+  return Post(`/satisfiesyManage/getContent/${id}`, {
+    transform({ data }: AnyObject) {
+      return data;
+    },
+  });
+}
+// 满意度调研问卷提交
+export function submitQuestionnaireMethod(id: number, data: AnyObject) {
+  console.log(data, "data===");
+  return Post(`/satisfiesyManage/submitContent/${id}`, {
+    ...data,
+    transform({ data }: AnyObject) {
+      return data;
+    },
+  });
+}

+ 1 - 2
miniprogram/module/article/pages/add-address/add-address.json

@@ -13,7 +13,6 @@
     "t-cell-group": "tdesign-miniprogram/cell-group/cell-group",
     "t-textarea": "tdesign-miniprogram/textarea/textarea",
     "t-picker-item": "tdesign-miniprogram/picker-item/picker-item",
-    "van-area": "@vant/weapp/area/index",
-    "van-popup": "@vant/weapp/popup/index"
+    "t-cascader": "tdesign-miniprogram/cascader/cascader"
   }
 }

+ 51 - 31
miniprogram/module/article/pages/add-address/add-address.ts

@@ -11,6 +11,37 @@ import {
   deleteAddressMethod,
   updateAddressMethod,
 } from "../../request";
+
+// 将 @vant/area-data 扁平格式转为 TDesign Cascader 树形格式
+function convertAreaDataToTree(areaList: { province_list: Record<string, string>; city_list: Record<string, string>; county_list: Record<string, string> }) {
+  const { province_list, city_list, county_list } = areaList;
+
+  const cityMap: Record<string, any[]> = {};
+  for (const cityCode in city_list) {
+    const prefix = cityCode.substring(0, 2);
+    if (!cityMap[prefix]) cityMap[prefix] = [];
+    cityMap[prefix].push({ label: city_list[cityCode], value: cityCode, children: [] });
+  }
+
+  const countyMap: Record<string, any[]> = {};
+  for (const countyCode in county_list) {
+    const prefix = countyCode.substring(0, 4);
+    if (!countyMap[prefix]) countyMap[prefix] = [];
+    countyMap[prefix].push({ label: county_list[countyCode], value: countyCode });
+  }
+
+  const result: any[] = [];
+  for (const provinceCode in province_list) {
+    const children = (cityMap[provinceCode.substring(0, 2)] || []).map((city: any) => ({
+      ...city,
+      children: countyMap[city.value.substring(0, 4)] || [],
+    }));
+    if (children.length > 0) {
+      result.push({ label: province_list[provinceCode], value: provinceCode, children });
+    }
+  }
+  return result;
+}
 // module/diet/pages/delivery-address/delivery-address.ts
 // import parseAddress from '../../utils/smart-parse-address';
 Page({
@@ -20,6 +51,7 @@ Page({
   data: {
     type: "",
     areaList,
+    areaTreeData: convertAreaDataToTree(areaList),
     id: "",
     formData: {
       id: "",
@@ -52,21 +84,23 @@ Page({
     this.setData({ detail: "" });
   },
   onRegionConfirm(e: any) {
+    const selectedOptions = e.detail.selectedOptions;
+    if (!selectedOptions || selectedOptions.length < 3) return;
     this.setData({
       region:
-        e.detail.values[0].name +
+        selectedOptions[0].label +
         ", " +
-        e.detail.values[1].name +
+        selectedOptions[1].label +
         "," +
-        e.detail.values[2].name,
-      regionValue: e.detail.values,
+        selectedOptions[2].label,
+      regionValue: e.detail.value,
       regionPickerVisible: false,
-      "formData.provinceCode": e.detail.values[0].code,
-      "formData.provinceName": e.detail.values[0].name,
-      "formData.cityCode": e.detail.values[1].code,
-      "formData.cityName": e.detail.values[1].name,
-      "formData.areaCode": e.detail.values[2].code,
-      "formData.areaName": e.detail.values[2].name,
+      "formData.provinceCode": selectedOptions[0].value,
+      "formData.provinceName": selectedOptions[0].label,
+      "formData.cityCode": selectedOptions[1].value,
+      "formData.cityName": selectedOptions[1].label,
+      "formData.areaCode": selectedOptions[2].value,
+      "formData.areaName": selectedOptions[2].label,
     });
   },
   onRegionCancel(e: any) {
@@ -172,29 +206,15 @@ Page({
         await this.onAddress(this.data.formData);
       }
       this.setData({ saving: false });
-      // if (this.data.type === "orderDetail") {
-      //   // 订单详情页
-      //   wx.redirectTo({
-      //     url: "/module/article/pages/order-detail/order-detail",
-      //   });
-      // } else if (this.data.type === "orderList") {
-      //   // 订单列表页
-      //   wx.redirectTo({
-      //     url: "/module/article/pages/order-list/order-list",
-      //   });
-      // }
-      // 返回上一页
+      // 返回上一页(避免 redirectTo 造成 manage-address 重复入栈)
       const pages = getCurrentPages();
       if (pages.length > 1) {
-        const prevPage = pages[pages.length - 2];
-        if (
-          prevPage.route ===
-          "module/article/pages/manage-address/manage-address"
-        ) {
-          wx.redirectTo({
-            url: "/module/article/pages/manage-address/manage-address",
-          });
-        }
+        wx.navigateBack();
+      } else {
+        // 极端情况下没有上一页(比如被 reLaunch 打开),兜底回地址管理
+        wx.redirectTo({
+          url: "/module/article/pages/manage-address/manage-address",
+        });
       }
       // 保存成功后可自动跳转或提示
     } catch (error: any) {

+ 1 - 7
miniprogram/module/article/pages/add-address/add-address.wxml

@@ -111,13 +111,7 @@
   </view>
 </scroll-view>
 
-<van-popup show="{{ regionPickerVisible }}" position="bottom" bind:close="onRegionCancel">
-  <van-area
-    area-list="{{ areaList }}"
-    bind:confirm="onRegionConfirm"
-    bind:cancel="onRegionCancel"
-  />
-</van-popup>
+<t-cascader visible="{{ regionPickerVisible }}" title="选择地区" options="{{ areaTreeData }}" value="{{ regionValue }}" bind:change="onRegionConfirm" bind:close="onRegionCancel" />
 
 
 <!-- 底部按钮 -->

+ 0 - 3
miniprogram/module/article/pages/confirm-receiving/confirm-receiving.ts

@@ -19,7 +19,6 @@ Page({
     }>
   },
   async onLoad(options: any) {
-    console.log("onLoad", options)
     if (options.patientConditioningRecordId) {
       this.setData({ patientConditioningRecordId: options.patientConditioningRecordId });
     }
@@ -32,7 +31,6 @@ Page({
       }));
       this.setData({ goodsList: goodsListWithChecked });
     }
-    console.log("goodsList", this.data.goodsList)
   },
   properties: {
   },
@@ -65,7 +63,6 @@ Page({
       wx.showToast({ title: '请至少选择一个商品', icon: 'none' });
       return;
     }
-    console.log(selectedIds, "selectedIds======选中的商品id")
     let that = this;
     wx.showModal({
       title: '提示',

+ 20 - 10
miniprogram/module/article/pages/foot-print/foot-print.ts

@@ -3,6 +3,7 @@ import tickleBehavior, {
   getTickleContext,
 } from "../../../../core/behavior/tickle.behavior";
 import { getFootPrintListMethod } from "../../request";
+import { Get } from "../../../../lib/request/method";
 Page({
   behaviors: [PageContainerBehavior, tickleBehavior],
   lifetimes: {
@@ -10,20 +11,30 @@ Page({
   },
   properties: {},
   data: {
-    articleList: [],
+    articleList: [] as any[],
   },
-  goDetail(e: any) {
+  async goDetail(e: any) {
     const type = e.currentTarget.dataset.type;
     const item = e.currentTarget.dataset.item;
-    // type 1 中医科普 2 药膳 4 茶饮
+    // type ,1-健康宣教 2-药膳 3-膳食 4-茶饮
     // 药膳详情
-    console.log(type, "详情");
     if (type === "1") {
-      wx.navigateTo({
-        url: `/module/article/pages/science-info/science-info?id=${item.sourceId}`,
-      }).then((res) => {
-        res.eventChannel.emit("load", item);
-      });
+      try {
+        const res: any = await Get(`/psarticle/clickPsarticle`, {
+          params: { popularScienceArticleId: item.sourceId },
+        });
+        const url = res?.data;
+        const detailPayload = {
+          url,
+        };
+        wx.navigateTo({
+          url: `/module/article/pages/science-info/science-info`,
+        }).then((res) => {
+          res.eventChannel.emit("load", detailPayload);
+        });
+      } catch (error) {
+        console.log(error);
+      }
     } else if (type === "2" || type === "4") {
       wx.navigateTo({
         url: `/module/article/pages/diet-info/diet-info?id=${item.sourceId}`,
@@ -37,7 +48,6 @@ Page({
     try {
       const res = await getFootPrintListMethod();
       const list = res?.data?.data ?? [];
-      console.log(list, "list",res.data.data);
       this.setData({ articleList: Array.isArray(list) ? list : [] });
     } catch (error: any) {
       getTickleContext.call(this).showWarnMessage(error.errMsg);

+ 0 - 1
miniprogram/module/article/pages/order-detail/order-detail.ts

@@ -12,7 +12,6 @@ import {
 Page({
   behaviors: [PageContainerBehavior, tickleBehavior],
   onLoad(options: any) {
-    console.log(options, "options");
     if (options.id) {
       this.setData({ id: options.id });
     }

+ 0 - 48
miniprogram/module/article/pages/order-list/order-list.scss

@@ -157,58 +157,10 @@
 .order-actions {
   display: flex;
   gap: 20rpx;
-  transition: none !important;
 }
 
 .order-actions .t-button {
   margin: 0 !important;
-  min-width: 120rpx !important;
-  width: 120rpx !important;
-}
-
-// 为立即支付按钮设置固定宽度,防止loading状态时宽度变化
-.order-actions .t-button[data-id] {
-  min-width: 120rpx !important;
-  width: 120rpx !important;
-}
-
-// 节流状态下的按钮样式
-.order-actions .t-button[disabled] {
-  opacity: 1 !important;
-  cursor: not-allowed !important;
-  background-color: #f5f5f5 !important;
-  border-color: #e5e5e5 !important;
-  color: #c0c0c0 !important;
-}
-
-// 针对 t-design 按钮的自定义样式
-.outline-btn {
-  background: #fff !important;
-  border: 1px solid #1890ff !important; // 主色边框
-  color: #1890ff !important; // 主色文字
-  box-shadow: none !important;
-  border-radius: 30rpx !important;
-  transition: none !important;
-  // margin-right: 20rpx !important;
-}
-
-// 让按钮内的 loading 和文字显式为品牌蓝
-.outline-btn .t-loading__spinner,
-.outline-btn .t-loading__text {
-  color: #1890ff !important;
-}
-.outline-btn .t-loading__spinner .t-loading__dot::before,
-.outline-btn .t-loading__spinner--dots .t-loading__dot,
-.outline-btn .t-loading__circular {
-  color: #1890ff !important;
-  background-color: #1890ff !important;
-}
-
-.outline-btn.cancel {
-  border-color: #ccc !important;
-  color: black !important;
-  margin-right: 20rpx;
-  transition: none !important;
 }
 
 .contact {

+ 11 - 1
miniprogram/module/article/pages/order-list/order-list.ts

@@ -8,12 +8,22 @@ import {
   orderCancelMethod,
   orderPayMethod,
 } from "../../request";
+import I18nBehavior from "../../../../i18n/behavior";
 
 // module/article/pages/order-list/order-list.ts
+const i18n = {
+  orderText: {
+    mineOrder: "我的服务",
+    paying: "待确认",
+    paid: "已确认",
+    paySuccess: "已完成",
+  },
+};
 Page({
-  behaviors: [PageContainerBehavior, tickleBehavior],
+  behaviors: [PageContainerBehavior, tickleBehavior,I18nBehavior],
   properties: {},
   data: {
+    i18n,
     showConfirm: false,
     currentTab: "all", // 当前选中的标签
     orders: [],

+ 7 - 7
miniprogram/module/article/pages/order-list/order-list.wxml

@@ -1,10 +1,10 @@
 <!--module/diet/pages/delivery-address/delivery-address.wxml-->
-<t-navbar title="我的订单" left-arrow bindtap="goMine" />
+<t-navbar title="{{i18n.orderText.mineOrder}}" left-arrow bindtap="goMine" />
 <t-tabs value="{{currentTab}}" bindchange="onTabChange">
   <t-tab-panel label="全部" value="all" />
-  <t-tab-panel label="待付款" value="pending" />
-  <t-tab-panel label="已付款" value="paid" />
-  <t-tab-panel label="交易成功" value="completed" />
+  <t-tab-panel label="{{i18n.orderText.paying}}" value="pending" />
+  <t-tab-panel label="{{i18n.orderText.paid}}" value="paid" />
+  <t-tab-panel label="{{i18n.orderText.paySuccess}}" value="completed" />
     <!-- <t-tab-panel label="交易关闭" value=closed" /> -->
 </t-tabs>
 
@@ -85,12 +85,12 @@
       <view class="order-footer">
         <view class="order-price">订单金额:<text class="order-amount">¥{{item.cost}}</text></view>
 
-        <view class="order-actions">
+        <view class="order-actions" style="--td-button-border-radius:30rpx;">
           <!-- 按状态显示不同按钮 -->
-          <t-button wx:if="{{item.orderStatus==='0'}}" size="small" type="default" class="outline-btn cancel" bindtap="onCancel" data-id="{{item.id}}" disabled="{{throttleTimers.cancel}}">
+          <t-button wx:if="{{item.orderStatus==='0'}}" size="small" type="default" class="outline-btn cancel" bindtap="onCancel" data-id="{{item.id}}" disabled="{{throttleTimers.cancel}}" style="--td-button-default-color:#000;--td-button-default-bg-color:#fff;--td-button-default-border-color:#ccc;" hover-class="none">
             取消订单
           </t-button>
-          <t-button wx:if="{{item.orderStatus==='0'}}" size="small" type="primary" bindtap="onPay" class="outline-btn" data-id="{{item.id}}" disabled="{{(payingId===item.id) || throttleTimers.pay}}">
+          <t-button wx:if="{{item.orderStatus==='0'}}" size="small" type="primary" bindtap="onPay" class="outline-btn" data-id="{{item.id}}" disabled="{{(payingId===item.id) || throttleTimers.pay}}" style="--td-button-primary-color:#fff;--td-button-primary-bg-color:#1890ff;--td-button-primary-border-color:#1890ff;" hover-class="none">
             立即支付
           </t-button>
           <!-- <t-button wx:if="{{item.orderStatus==='6' || item.orderStatus==='345'}}" size="small" type="default" class="outline-btn cancel" bindtap="onSeeLogistics" data-id="{{item.id}}" disabled="{{throttleTimers.logistics}}">

+ 0 - 1
miniprogram/module/article/pages/success-page/success-page.ts

@@ -18,7 +18,6 @@ Page({
     successImg: 'https://wx.hzliuzhi.com:4433/manager/file/statics/2025/07/11/img_success@3x_20250711171518A500.png',
   },
   onLoad(options: any) {
-    console.log(options, "options");
     if (options.title) {
       this.setData({ title: options.title });
     }

+ 13 - 0
miniprogram/module/care/pages/cancelAppointment/cancelAppointment.json

@@ -0,0 +1,13 @@
+{
+  "renderer": "skyline",
+  "navigationBarTextStyle": "white",
+  "navigationBarBackgroundColor": "#0f2226",
+  "backgroundColor": "#0f2226",
+  "backgroundColorContent": "#ffffff",
+  "backgroundColorTop": "#0f2226",
+  "backgroundColorBottom": "#0f2226",
+  "component": true,
+  "usingComponents": {
+    "t-icon": "tdesign-miniprogram/icon/icon"
+  }
+}

+ 229 - 0
miniprogram/module/care/pages/cancelAppointment/cancelAppointment.scss

@@ -0,0 +1,229 @@
+.page-container {
+  background-color: #f3f3f3;
+  padding-top: 10px;
+  padding-bottom: 140rpx;
+  height: calc(100vh - 44px);
+  box-sizing: border-box;
+  -webkit-overflow-scrolling: touch;
+  .verify-record-page {
+    background: white;
+    // padding: 24rpx 0;
+    padding-bottom: 50px;
+  }
+  .title {
+    font-size: 32rpx;
+    font-weight: bold;
+    padding: 24rpx 32rpx 12rpx 32rpx;
+    color: #222;
+  }
+  .record-card {
+    background: #fff;
+    border-radius: 16rpx;
+    margin: 0 24rpx 24rpx 24rpx;
+    padding: 24rpx 24rpx 18rpx 24rpx;
+    box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.03);
+  }
+  .record-header {
+    font-size: 28rpx;
+    font-weight: 500;
+    color: #222;
+    margin-bottom: 12rpx;
+    display: flex;
+    align-items: center;
+  }
+  .record-index {
+    margin-right: 8rpx;
+  }
+  .record-time {
+    color: #222;
+  }
+  .record-row {
+    font-size: 26rpx;
+    color: #666;
+    margin-bottom: 8rpx;
+    display: flex;
+    flex-wrap: wrap;
+  }
+
+  .opt-img {
+    display: flex;
+    justify-content: baseline;
+    .img-box {
+      width: 300rpx;
+      height: 200rpx;
+      border-radius: 10rpx;
+    }
+  }
+  .label {
+    color: #999;
+    margin-right: 8rpx;
+  }
+}
+
+.bottom-actions {
+  position: fixed;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  // padding: 24rpx 32rpx calc(24rpx + env(safe-area-inset-bottom));
+  padding: 24rpx 32rpx calc(env(safe-area-inset-bottom));
+  background: #f3f3f3;
+  box-sizing: border-box;
+}
+
+.bottom-btn {
+  height: 88rpx;
+  line-height: 88rpx;
+  border-radius: 12rpx;
+  background: #1976d2;
+  color: #fff;
+  font-size: 30rpx;
+  text-align: center;
+}
+.empty-state {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  min-height: 300rpx;
+  padding: 40rpx;
+
+  .empty-text {
+    color: #999;
+    font-size: 28rpx;
+  }
+}
+// 预约成功卡片
+.appointment-success-card {
+  background: #fff;
+  border-radius: 16rpx;
+  // margin: 24rpx;
+  padding: 30rpx 32rpx 40rpx;
+  box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.03);
+  margin-bottom: 20rpx;
+}
+
+.appointment-actions {
+  margin-top: 30rpx;
+  display: flex;
+  justify-content: center;
+  gap: 24rpx;
+}
+
+.action-btn {
+  min-width: 220rpx;
+  height: 72rpx;
+  line-height: 72rpx;
+  border-radius: 12rpx;
+  font-size: 28rpx;
+  text-align: center;
+  box-sizing: border-box;
+  padding: 0 24rpx;
+}
+
+.action-btn.cancel {
+  background: #fff;
+  color: #1976d2;
+  border: 2rpx solid #1976d2;
+  margin-right: 20px;
+}
+
+.action-btn.modify {
+  background: #1976d2;
+  color: #fff;
+  border: 2rpx solid #1976d2;
+}
+
+.appointment-success-title {
+  font-size: 48rpx;
+  font-weight: 600;
+  color: #000;
+  text-align: center;
+  margin-bottom: 30rpx;
+}
+
+// 二维码容器
+.qr-code-container {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  margin-bottom: 50rpx;
+}
+
+.qr-code-image {
+  width: 400rpx;
+  height: 400rpx;
+  background: #fff;
+}
+
+.qr-code-placeholder {
+  width: 260rpx;
+  height: 260rpx;
+  background: #f5f5f5;
+  border: 2rpx dashed #ddd;
+  border-radius: 8rpx;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+
+.qr-code-text {
+  font-size: 28rpx;
+  color: #999;
+}
+
+// 预约信息
+.appointment-info {
+  margin-bottom: 50rpx;
+  margin-left: 20rpx;
+}
+
+.info-item {
+  display: flex;
+  align-items: flex-start;
+  margin-bottom: 25rpx;
+  font-size: 30rpx;
+  line-height: 1.8;
+}
+
+.info-label {
+  color: #000;
+  margin-right: 16rpx;
+  // min-width: 180rpx;
+  flex-shrink: 0;
+}
+
+.info-value {
+  color: #000;
+  flex: 1;
+  word-break: break-all;
+  font-weight: 600;
+}
+
+// 提示信息
+// .appointment-tip {
+//   margin-top: 50rpx;
+//   padding-top: 40rpx;
+//   border-top: 1rpx solid #eee;
+// }
+
+.tip-text {
+  font-size: 26rpx;
+  color: #000;
+  line-height: 1.8;
+  text-align: center;
+}
+.evaluate-box{
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+.btn-review {
+  padding: 12rpx 40rpx;
+  border-radius: 12rpx;
+  font-size: 26rpx;
+  text-align: center;
+  background-color: #fff;
+  color: #1976d2;
+  border: 1px solid #1976d2;
+  margin-left: 20rpx;
+}

+ 36 - 0
miniprogram/module/care/pages/cancelAppointment/cancelAppointment.ts

@@ -0,0 +1,36 @@
+Page({
+  data: {
+    appointmentInfo: {
+      operateTime: '',
+      operateDuration: '',
+      conditioningProgramSupplierName: '',
+      cpSupplierDetailAddress: '',
+      cpSupplierPhone: '',
+      cpSupplierQrCode: '',
+    },
+  },
+  onLoad(options: any) {
+    if (options.appointmentInfo) {
+      try {
+        const appointmentInfo = JSON.parse(decodeURIComponent(options.appointmentInfo));
+        this.setData({ appointmentInfo });
+        this.generateQRCode(appointmentInfo?.cpSupplierQrCode || "");
+        return;
+      } catch (e) {
+        // 解析失败
+      }
+    }
+  },
+  // 生成二维码
+  generateQRCode(qrCodeUrl: any) {
+    this.setData({
+      qrCodeUrl
+    });
+  },
+  onBack() {
+    wx.redirectTo({
+      url: `/module/care/pages/offlineTreatment/offlineTreatment`,
+    });
+  },
+
+});

+ 41 - 0
miniprogram/module/care/pages/cancelAppointment/cancelAppointment.wxml

@@ -0,0 +1,41 @@
+<t-navbar title="取消预约" left-arrow />
+<scroll-view class="page-container" scroll-y>
+  <!-- 预约成功卡片 -->
+  <view class="appointment-success-card">
+    <!-- 标题 -->
+    <view class="appointment-success-title">取消预约成功</view>
+
+    <!-- 预约详情 -->
+    <view class="appointment-info">
+     <view class="info-item">
+        <text class="info-label">预约项目:</text>
+        <text class="info-value">{{appointmentInfo.arrangeTime}}</text>
+      </view>
+      <view class="info-item" wx:if="{{appointmentInfo.arrangeTime}}">
+        <text class="info-label">开始服务时间:</text>
+        <text class="info-value">{{appointmentInfo.arrangeTime}}</text>
+      </view>
+      <view class="info-item" wx:if="{{appointmentInfo.arrangeDuration}}">
+        <text class="info-label">服务所需时间:</text>
+        <text class="info-value">{{appointmentInfo.arrangeDuration}}分钟</text>
+      </view>
+      <view class="info-item" wx:if="{{appointmentInfo.conditioningProgramSupplierName}}">
+        <text class="info-label">服务机构:</text>
+        <text class="info-value" wx:if="{{appointmentInfo.pieTime}}">{{appointmentInfo.conditioningProgramSupplierName}}</text>
+        <text class="info-value" wx:else>待分配</text>
+      </view>
+      <view class="info-item" wx:if="{{appointmentInfo.cpSupplierDetailAddress}}">
+        <text class="info-label">服务地址:</text>
+        <text class="info-value">{{appointmentInfo.cpSupplierDetailAddress}}</text>
+      </view>
+      <view class="info-item" wx:if="{{appointmentInfo.cpSupplierPhone}}">
+        <text class="info-label">联系电话:</text>
+        <text class="info-value">{{appointmentInfo.cpSupplierPhone}}</text>
+      </view>
+    </view>
+  </view>
+  <!-- 返回按钮 -->
+  <view class="bottom-actions">
+    <view class="bottom-btn" catchtap="onBack">返回</view>
+  </view>
+</scroll-view>

+ 50 - 4
miniprogram/module/care/pages/care/verifyRecord.scss

@@ -43,7 +43,7 @@
     display: flex;
     flex-wrap: wrap;
   }
-  
+
   .opt-img {
     display: flex;
     justify-content: baseline;
@@ -64,7 +64,7 @@
   align-items: center;
   min-height: 300rpx;
   padding: 40rpx;
-  
+
   .empty-text {
     color: #999;
     font-size: 28rpx;
@@ -76,10 +76,41 @@
   border-radius: 16rpx;
   // margin: 24rpx;
   padding: 30rpx 32rpx 40rpx;
-  box-shadow: 0 2rpx 8rpx rgba(0,0,0,0.03);
+  box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.03);
   margin-bottom: 20rpx;
 }
 
+.appointment-actions {
+  margin-top: 30rpx;
+  display: flex;
+  justify-content: center;
+  gap: 24rpx;
+}
+
+.action-btn {
+  min-width: 220rpx;
+  height: 72rpx;
+  line-height: 72rpx;
+  border-radius: 12rpx;
+  font-size: 28rpx;
+  text-align: center;
+  box-sizing: border-box;
+  padding: 0 24rpx;
+}
+
+.action-btn.cancel {
+  background: #fff;
+  color: #1976d2;
+  border: 2rpx solid #1976d2;
+  margin-right: 20px;
+}
+
+.action-btn.modify {
+  background: #1976d2;
+  color: #fff;
+  border: 2rpx solid #1976d2;
+}
+
 .appointment-success-title {
   font-size: 48rpx;
   font-weight: 600;
@@ -158,4 +189,19 @@
   color: #000;
   line-height: 1.8;
   text-align: center;
-}
+}
+.evaluate-box{
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+.btn-review {
+  padding: 12rpx 40rpx;
+  border-radius: 12rpx;
+  font-size: 26rpx;
+  text-align: center;
+  background-color: #fff;
+  color: #1976d2;
+  border: 1px solid #1976d2;
+  margin-left: 20rpx;
+}

+ 79 - 4
miniprogram/module/care/pages/care/verifyRecord.ts

@@ -1,9 +1,15 @@
 import { Post } from "../../../../lib/request/method";
+import { cancelAppointmentMethod } from "../../request";
 Page({
   data: {
-    id: "",
+    id: 0,
+    recordListId: '',
     recordList: [],
     showAppointmentSuccess: true,
+    //是否显示修改预约按钮
+    isShowUpdateButton: false,
+    //isShowCancleButton
+    isShowCancleButton: false,
     qrCodeUrl: "",
     appointmentInfo: {
       operateTime: '',
@@ -17,7 +23,14 @@ Page({
   },
   onLoad(options: any) {
     if (options.id) {
-      this.getVerifyRecordList(options.id);
+      this.setData({
+        id: options?.id
+      })
+    }
+  },
+  onShow() {
+    if (this.data.id) {
+      this.getVerifyRecordList(this.data.id);
     }
   },
   // 生成二维码
@@ -41,8 +54,9 @@ Page({
       if (res && res.patientConditioningSwagItemOffline && JSON.stringify(res.patientConditioningSwagItemOffline) !== '{}') {
         this.setData({
           showAppointmentInfo: true,
-        });
-        this.setData({
+          isShowUpdateButton: res.isShowUpdateButton,
+          isShowCancleButton: res.isShowCancleButton,
+          recordListId: res.patientConditioningSwagItemOffline.id,
           appointmentInfo: res.patientConditioningSwagItemOffline,
         });
         this.generateQRCode(this.data.appointmentInfo.cpSupplierQrCode);
@@ -64,5 +78,66 @@ Page({
       console.error("核销记录列表", error);
     }
   },
+  // 去评价
+  onReview(e: WechatMiniprogram.TouchEvent) {
+    const { evaluateTime } = e.currentTarget.dataset.goods;
+    if (evaluateTime) {
+      // 线下服务评价详情
+      wx.navigateTo({
+        url: `/module/order/pages/offline-evaluateDetail/offline-evaluateDetail?goodsInfo=${encodeURIComponent(JSON.stringify(e.currentTarget.dataset.goods))}`,
+      });
+    } else {
+      // 去线下服务评价
+      wx.navigateTo({
+        url: `/module/order/pages/offline-evaluate/offline-evaluate?goodsInfo=${encodeURIComponent(JSON.stringify(e.currentTarget.dataset.goods))}`,
+      });
+
+    }
+  },
+
+  onCancelAppointment() {
+    wx.showModal({
+      title: "取消预约",
+      content: "预约取消后无法恢复!",
+      showCancel: true,
+      confirmText: "确定",
+      cancelText: "再想想",
+      success: async (res) => {
+        if (!res.confirm) return;
+        try {
+          wx.showLoading({ title: "取消中" });
+          await cancelAppointmentMethod(Number(this.data.recordListId || 0));
+          wx.hideLoading();
+          wx.showToast({ title: "取消成功", icon: "success" });
+          // 取消成功之后到取消预约页面
+          setTimeout(() => {
+            const appointmentInfoParam = encodeURIComponent(
+              JSON.stringify(this.data.appointmentInfo || {})
+            );
+            wx.navigateTo({
+              url: `/module/care/pages/cancelAppointment/cancelAppointment?appointmentInfo=${appointmentInfoParam}`,
+            });
+          }, 300);
+        } catch (error: any) {
+          wx.hideLoading();
+          wx.showToast({
+            title: error?.errMsg || "取消失败",
+            icon: "none",
+          });
+        }
+      },
+    });
+  },
+
+  onModifyAppointment() {
+    const arrangeTime =
+      (this.data.appointmentInfo as any).arrangeTime ||
+      (this.data.appointmentInfo as any).appointmentTime ||
+      "";
+
+    wx.navigateTo({
+      url: `/module/order/pages/appointment/appointment?mode=edit&arrangeTime=${encodeURIComponent(arrangeTime)}`,
+    });
+  },
 
 });

+ 89 - 68
miniprogram/module/care/pages/care/verifyRecord.wxml

@@ -1,82 +1,103 @@
 <t-navbar title="核销记录" left-arrow />
 <scroll-view class="page-container" scroll-y>
   <!-- 预约成功卡片 -->
-    <view class="appointment-success-card" wx:if="{{showAppointmentInfo}}">
-      <!-- 标题 -->
-      <view class="appointment-success-title">预约成功</view>
-      
-      <!-- 二维码 -->
-      <view class="qr-code-container" wx:if="{{qrCodeUrl}}">
-        <image 
-          class="qr-code-image" 
-          src="{{qrCodeUrl}}" 
-          mode="aspectFit"
-        />
-      </view>
-      
-      <!-- 预约详情 -->
-      <view class="appointment-info">
-        <view class="info-item" wx:if="{{appointmentInfo.arrangeTime}}">
-          <text class="info-label">开始服务时间:</text>
-          <text class="info-value">{{appointmentInfo.arrangeTime}}</text>
-        </view>
-        <view class="info-item" wx:if="{{appointmentInfo.arrangeDuration}}">
-          <text class="info-label">服务时长:</text>
-          <text class="info-value">{{appointmentInfo.arrangeDuration}}分钟</text>
-        </view>
-        <view class="info-item" wx:if="{{appointmentInfo.conditioningProgramSupplierName}}">
-          <text class="info-label">服务机构:</text>
-          <text class="info-value" wx:if="{{appointmentInfo.pieTime}}">{{appointmentInfo.conditioningProgramSupplierName}}</text>
-          <text class="info-value" wx:else>待分配</text>
-        </view>
-        <view class="info-item" wx:if="{{appointmentInfo.cpSupplierDetailAddress}}">
-          <text class="info-label">服务地址:</text>
-          <text class="info-value">{{appointmentInfo.cpSupplierDetailAddress}}</text>
-        </view>
-        <view class="info-item" wx:if="{{appointmentInfo.cpSupplierPhone}}">
-          <text class="info-label">联系电话:</text>
-          <text class="info-value">{{appointmentInfo.cpSupplierPhone}}</text>
-        </view>
-      </view>
-      
-      <!-- 提示信息 -->
-      <view class="appointment-tip">
-        <text class="tip-text">为了保证您的服务体验,请提前5分钟到达门店</text>
-      </view>
+  <view class="appointment-success-card" wx:if="{{showAppointmentInfo}}">
+    <!-- 标题 -->
+    <view class="appointment-success-title">预约成功</view>
+
+    <!-- 二维码 -->
+    <view class="qr-code-container" wx:if="{{qrCodeUrl}}">
+      <image class="qr-code-image" src="{{qrCodeUrl}}" mode="aspectFit" />
     </view>
-<view class="verify-record-page" wx:if="{{recordList.length>0}}">
-  <block wx:for="{{recordList}}" wx:key="id">
-    <view class="record-card">
-      <view class="record-header">
-        <text class="record-index">{{index + 1}}、</text>
-        <text class="record-time">{{item.operateTime}}</text>
+
+    <!-- 预约详情 -->
+    <view class="appointment-info">
+      <view class="info-item" wx:if="{{appointmentInfo.arrangeTime}}">
+        <text class="info-label">开始服务时间:</text>
+        <text class="info-value">{{appointmentInfo.arrangeTime}}</text>
       </view>
-      <view class="record-row" wx:if="{{item.operateBy}}">
-        <text class="label">操作人:</text>
-        <text style="color:black">{{item.operateBy}}</text>
+      <view class="info-item" wx:if="{{appointmentInfo.arrangeDuration}}">
+        <text class="info-label">服务时长:</text>
+        <text class="info-value">{{appointmentInfo.arrangeDuration}}分钟</text>
       </view>
-       <!-- 新增加的一列--机构 -->
-        <view class="record-row" wx:if="{{item.operateBy}}">
-        <text class="label">机构:</text>
-        <text style="color:black">{{item.operateBy}}</text>
+      <view class="info-item" wx:if="{{appointmentInfo.conditioningProgramSupplierName}}">
+        <text class="info-label">服务机构:</text>
+        <text class="info-value" wx:if="{{appointmentInfo.pieTime}}">{{appointmentInfo.conditioningProgramSupplierName}}</text>
+        <text class="info-value" wx:else>待分配</text>
       </view>
-       <!-- end -->
-      <view class="record-row" wx:if="{{item.feedback}}">
-        <text class="label">治疗备注:</text>
-        <text style="color:black">{{item.feedback}}</text>
+      <view class="info-item" wx:if="{{appointmentInfo.cpSupplierDetailAddress}}">
+        <text class="info-label">服务地址:</text>
+        <text class="info-value">{{appointmentInfo.cpSupplierDetailAddress}}</text>
       </view>
-      <view class="record-row" wx:if="{{item.acuPointNames}}">
-        <text class="label">穴位:</text>
-        <text style="color:black">{{item.acuPointNames}}</text>
+      <view class="info-item" wx:if="{{appointmentInfo.cpSupplierPhone}}">
+        <text class="info-label">联系电话:</text>
+        <text class="info-value">{{appointmentInfo.cpSupplierPhone}}</text>
+      </view>
+    </view>
+
+    <!-- 提示信息 -->
+    <view class="appointment-tip">
+      <text class="tip-text">为了保证您的服务体验,请提前5分钟到达门店</text>
+    </view>
+    <!-- 取消预约/修改预约 -->
+    <view
+      class="appointment-actions"
+      wx:if="{{isShowCancleButton || isShowUpdateButton}}"
+    >
+      <view
+        class="action-btn cancel"
+        wx:if="{{isShowCancleButton}}"
+        catchtap="onCancelAppointment"
+      >
+        取消预约
       </view>
-       <view class="record-row opt-img" wx:if="{{item.photo}}">
-        <text class="label">操作照片:</text>
-     <image src="{{item.photo}}" class="img-box" />
+      <view
+        class="action-btn modify"
+        wx:if="{{isShowUpdateButton}}"
+        catchtap="onModifyAppointment"
+      >
+        修改预约
       </view>
     </view>
-  </block>
-</view>
- <view wx:else class="empty-state">
+  </view>
+  <view class="verify-record-page" wx:if="{{recordList.length>0}}">
+    <block wx:for="{{recordList}}" wx:key="id">
+      <view class="record-card">
+        <view class="evaluate-box">
+          <view class="record-header">
+            <text class="record-index">{{index + 1}}、</text>
+            <text class="record-time">{{item.operateTime}}</text>
+          </view>
+          <view class="btn-review" catchtap="onReview" data-goods="{{item}}">
+            {{item.evaluateTime ? "已评价" : "评价"}}
+          </view>
+        </view>
+        <view class="record-row" wx:if="{{item.operateBy}}">
+          <text class="label">操作人:</text>
+          <text style="color:black">{{item.operateBy}}</text>
+        </view>
+        <!-- 新增加的一列--机构 -->
+        <view class="record-row" wx:if="{{item.conditioningProgramSupplierName}}">
+          <text class="label">机构:</text>
+          <text style="color:black">{{item.conditioningProgramSupplierName}}</text>
+        </view>
+        <!-- end -->
+        <view class="record-row" wx:if="{{item.feedback}}">
+          <text class="label">治疗备注:</text>
+          <text style="color:black">{{item.feedback}}</text>
+        </view>
+        <view class="record-row" wx:if="{{item.acuPointNames}}">
+          <text class="label">穴位:</text>
+          <text style="color:black">{{item.acuPointNames}}</text>
+        </view>
+        <view class="record-row opt-img" wx:if="{{item.photo}}">
+          <text class="label">操作照片:</text>
+          <image src="{{item.photo}}" class="img-box" />
+        </view>
+      </view>
+    </block>
+  </view>
+  <view wx:else class="empty-state">
     <text class="empty-text">暂无核销数据</text>
   </view>
 </scroll-view>

+ 0 - 1
miniprogram/module/care/pages/careDetail/careDetail.ts

@@ -101,7 +101,6 @@ Page({
 //健康咨询记录
 onChatRecord(e: any) {
   const item = e.currentTarget.dataset.item;
-  console.log(item,"咨询记录数据",e)
   if (item) {
   wx.navigateTo({
       url: `/module/chats/pages/consultation-record/consultation-record?item=${encodeURIComponent(JSON.stringify(item))}`,

+ 14 - 24
miniprogram/module/care/pages/offlineTreatment/offlineTreatment.ts

@@ -13,7 +13,6 @@ Page({
     treatmentId: "",
   },
   async onLoad(options: any) {
-    console.log(options, '传过来的参数')
     if (options.id) {
       this.setData({
         treatmentId: options.id,
@@ -22,11 +21,21 @@ Page({
     // await this.getOfflineTreatmentList("");
   },
   async onShow() {
-    await this.getOfflineTreatmentList("");
+    // 返回本页时要沿用当前 Tab 的筛选条件
+    await this.getOfflineTreatmentList(this.data.currentTab ?? "");
   },
   // 跳转到核销记录
   onRecord(e: any) {
-    const id = e.currentTarget.dataset.id;
+    const { item } = e.currentTarget.dataset;
+    const { id, offlineId, conditioningProgramName, offlineDuration, itemImgSecond, estimatedStartDate } = item;
+    const goodsInfo = {
+      name: conditioningProgramName || '',
+      duration: offlineDuration || 0,
+      image: itemImgSecond || '',
+      offlineId: offlineId || '',
+      serviceTime: estimatedStartDate || '',
+    }
+    wx.setStorageSync('goodsInfo', JSON.stringify(goodsInfo));
     if (id) {
       wx.navigateTo({
         url: `/module/care/pages/care/verifyRecord?id=${id}`,
@@ -35,7 +44,6 @@ Page({
   },
   // 去预约
   goAppointment(e: any) {
-
     const { item } = e.currentTarget.dataset;
     const { offlineId, conditioningProgramName, offlineDuration, itemImgSecond, estimatedStartDate } = item;
     const goodsInfo = {
@@ -45,11 +53,11 @@ Page({
       offlineId: offlineId || '',
       serviceTime: estimatedStartDate || '',
     }
-    console.log(goodsInfo, "goodsInfo======去预约页面")
     if (offlineId) {
+      wx.setStorageSync('goodsInfo', JSON.stringify(goodsInfo));
       // 去预约页面
       wx.navigateTo({
-        url: `/module/order/pages/appointment/appointment?goodsInfo=${JSON.stringify(goodsInfo)}`,
+        url: `/module/order/pages/appointment/appointment`,
       });
     } else {
       wx.showToast({
@@ -57,35 +65,21 @@ Page({
         icon: "none",
       });
     }
-    // const id = e.currentTarget.dataset.id;
-    // if (id) {
-    //   // 跳转到预约页面,传递项目id
-    //   wx.navigateTo({
-    //     url: `/module/care/pages/careDetail/careDetail?id=${id}`,
-    //   });
-    // }
   },
   onTabChange(e: any) {
     const progress = e.detail.value;
     this.setData({
       currentTab: progress,
     });
-    // 不立即清空数据,避免空状态闪烁
     this.getOfflineTreatmentList(progress);
   },
   // 获取线下非药物治疗记录列表
   async getOfflineTreatmentList(progress: string) {
-    // 启用加载态,保留当前列表,避免空态闪烁
     this.setData({ isLoading: true });
     try {
       const res = await getOfflineTreatmentListMethod(progress);
-      console.log(res.data, "res.data")
-      // 确保 res.data 是数组,避免 undefined 或 null 导致的错误
       const list = Array.isArray(res?.data) ? res.data : [];
-      // 如果传入了treatmentId,标记匹配的项目为高亮并置顶
       const treatmentId = this.data.treatmentId;
-      console.log(treatmentId, "treatmentId")
-      console.log(list, "list")
       if (treatmentId && list.length > 0) {
         const highlightedList = list.map((item: any) => ({
           ...item,
@@ -95,7 +89,6 @@ Page({
         const highlightedItem = highlightedList.find((item: any) => item.isHighlighted);
         const otherItems = highlightedList.filter((item: any) => !item.isHighlighted);
         const sortedList = highlightedItem ? [highlightedItem, ...otherItems] : highlightedList;
-        console.log(sortedList, "sortedList")
 
         this.setData({ treatmentList: sortedList, isLoading: false });
       } else {
@@ -103,9 +96,6 @@ Page({
         this.setData({ treatmentList: list, isLoading: false });
       }
     } catch (error: any) {
-
-      console.error('获取数据失败:', error);
-      // 只有在真正出错时才显示错误提示
       wx.showToast({
         title: error.errMsg || "获取数据失败",
         icon: "none",

+ 2 - 1
miniprogram/module/care/pages/offlineTreatment/offlineTreatment.wxml

@@ -10,9 +10,10 @@
     </view>
    <view wx:elif="{{treatmentList.length>0}}">
       <block wx:for="{{treatmentList}}" wx:key="id">
-        <view class="treatment-detail-card {{item.isHighlighted ? 'treatment-detail-card--highlighted' : ''}}" bindtap="onRecord" data-id="{{item.id}}">
+        <view class="treatment-detail-card {{item.isHighlighted ? 'treatment-detail-card--highlighted' : ''}}" bindtap="onRecord" data-item="{{item}}">
           <view>
             <view class="row between" wx:if="{{item.conditioningProgramName}}">
+
               <text class="label bold">项目:{{item.conditioningProgramName}}</text>
             </view>
             <view class="row" wx:if="{{item.operateBy}}">

+ 0 - 1
miniprogram/module/care/pages/reportRecord/reportRecord.ts

@@ -24,7 +24,6 @@ Page({
       wx.showLoading({ title: "加载中" });
       try {
         const data = await healthReportListMethod();
-        console.log("data333",data);
         this.setData({
           "_healthReportList.data": data,
           "_healthReportList.loaded": true,

+ 31 - 1
miniprogram/module/care/request.ts

@@ -20,4 +20,34 @@ export function getOfflineTreatmentListMethod(progress: string) {
       return data;
     }
   })
-}
+}
+//患者线下调理方案修改预约时间  offlineId线下任务id  time预约时间
+export function updateAppointmentMethod(offlineId: string, time: string) {
+  return Post(`/patientCrManage/pofflineCpUpdateApply/${offlineId}`, {}, {
+    params: {
+      time,
+    },
+    transform({ data }: AnyObject) {
+      return data;
+    },
+  })
+}
+  //患者线下调理方案预约取消
+  export function cancelAppointmentMethod(offlineId: number) {
+    return Post(`/patientCrManage/pofflineCpCancleApply/${offlineId}`, {}, {
+      transform({ data }: AnyObject) {
+        return data;
+      }
+    })
+  }
+  //患者线下调理方案预约
+  export function appointmentMethod(offlineId: string, time: string) {
+    return Post(`/patientCrManage/pofflineCpApply/${offlineId}`, {}, {
+      params: {
+        time,
+      },
+      transform({ data }: AnyObject) {
+        return data;
+      }
+    })
+  }

+ 0 - 1
miniprogram/module/charts/components/record-index/health-index.ts

@@ -84,7 +84,6 @@ export function healthIndex2Chart(model: App.Health.Index.Model, index = 0): Any
 
 export function transformHealthIndex2Chart(data: App.Health.Index.Data[]): AnyObject[] {
   const list = gather(data, healthIndex2Chart)
-  console.log(list, 'transformHealthIndex2Chart-->list');
 
   const charts = [];
   for (const item of list) {

+ 14 - 8
miniprogram/module/chats/components/guide/guide.wxml

@@ -2,6 +2,12 @@
   module.exports.getClassName = function (active) {
     return active ? '' : 'disabled';
   }
+  module.exports.cellClass = function (active, isLast) {
+    var cls = 'cell-border-gradient';
+    if (!active) cls += ' disabled';
+    if (isLast) cls += ' no-border';
+    return cls;
+  }
 </wxs>
 <!--module/chats/components/guide/guide.wxml-->
 <view class="chat-card left steward-wrapper">
@@ -36,24 +42,24 @@
     >
       <t-icon name="chevron-right" color="#CCCCCC" size="40rpx" slot="note" />
     </t-cell>
-    <t-cell 
-      t-class="cell-border-gradient {{_.getClassName(active)}}" 
+    <t-cell
+      t-class="{{_.cellClass(active, !i18n.chats.consult)}}"
       t-class-hover="custom-cell-hover"
        t-class-title="health-analysis-title"
-      title="3、{{i18n.chats.healthData}}" 
-      hover="{{active}}" 
+      title="3、{{i18n.chats.healthData}}"
+      hover="{{active}}"
       bind:tap="handleC"
       style="--td-cell-hover-color: #F5F5F5;"
     >
       <t-icon name="chevron-right" color="#CCCCCC" size="40rpx" slot="note" />
     </t-cell>
-    <t-cell 
+    <t-cell
       wx:if="{{i18n.chats.consult}}"
-      t-class="cell-border-gradient no-border {{_.getClassName(active)}}" 
+      t-class="{{_.cellClass(active, true)}}"
       t-class-hover="custom-cell-hover"
        t-class-title="health-analysis-title"
-      title="4、{{i18n.chats.consult}}" 
-      hover="{{active}}" 
+      title="4、{{i18n.chats.consult}}"
+      hover="{{active}}"
       bind:tap="handleE"
       style="--td-cell-hover-color: #F5F5F5;"
     >

+ 2 - 1
miniprogram/module/chats/components/message-consult/message-consult.json

@@ -5,7 +5,8 @@
   "usingComponents": {
     "t-cell": "tdesign-miniprogram/cell/cell",
     "t-icon": "tdesign-miniprogram/icon/icon",
-    "user-avatar": "../../../../components/user-avatar/user-avatar"
+    "user-avatar": "../../../../components/user-avatar/user-avatar",
+    "towxml": "../../towxml/towxml"
   }
 }
 

+ 0 - 4
miniprogram/module/chats/components/questionnaire/questionnaire.ts

@@ -36,7 +36,6 @@ Component({
     attached: function () {
       let isAnalysis: number;
       isAnalysis = wx.getStorageSync("isAnalysis");
-      console.log("isAnalysis", isAnalysis);
       if (isAnalysis === 3 || isAnalysis === 4 || isAnalysis === 5) {
         // 对话管家
         this._start();
@@ -93,9 +92,7 @@ Component({
       this.triggerEvent("to", option.detail.id);
     },
     boxBottom(event: boxBottom) {
-      console.log("event==boxBottom", event);
       this.setData({ inputBoxBottom: event.detail.inputBoxBottom });
-      console.log("this.data.inputBoxBottom", this.data.inputBoxBottom);
       this.triggerEvent("boxBottom", {
         inputBoxBottom: this.data.inputBoxBottom + 100,
       });
@@ -229,7 +226,6 @@ Component({
       }
       try {
         // messageType 1 是随访。messageType 2 是健康评估和对话管家。messageType 3 是在线咨询
-        console.log("this.data.messageType", this.data.messageType);
         if (this.data.messageType === 1) {
           this._createMessage({
             id: `again.${Date.now()}`,

+ 3 - 2
miniprogram/module/chats/pages/consultation-record/consultation-record.json

@@ -3,6 +3,7 @@
   "component": true,
   "usingComponents": {
     "t-navbar": "tdesign-miniprogram/navbar/navbar",
-    "t-avatar": "tdesign-miniprogram/avatar/avatar"
+    "t-avatar": "tdesign-miniprogram/avatar/avatar",
+    "towxml": "../../towxml/towxml"
   }
-}
+}

+ 69 - 19
miniprogram/module/chats/pages/consultation-record/consultation-record.scss

@@ -6,16 +6,20 @@
   box-sizing: border-box;
   overflow-y: auto;
   padding-top: 10px;
+  padding-bottom: env(safe-area-inset-bottom);
   background-color: #f5f5f5;
 }
 
 .consultation-container {
-  padding: 40rpx 30rpx;
-  background-color: #ffffff;
+  padding: 0rpx 0rpx calc(30rpx + env(safe-area-inset-bottom));
+  background-color: #f5f5f5;
 }
 
 .consultation-session {
-  margin-bottom: 60rpx;
+  margin-bottom: 20rpx;
+  background-color: #ffffff;
+  border-radius: 16rpx;
+  padding: 30rpx 24rpx;
 
   &:last-child {
     margin-bottom: 0;
@@ -26,29 +30,66 @@
   text-align: center;
   font-size: 24rpx;
   color: #999999;
-  margin: 0rpx 0 10rpx;
+  margin: 10rpx 0 20rpx;
 }
 
 .status-message {
   text-align: center;
   font-size: 24rpx;
   color: #999999;
-  margin: 15rpx 0 15rpx 0;
+  margin: 10rpx 0 20rpx;
+}
+
+.session-end {
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+  // margin-top: 48rpx;
+  padding-top: 36rpx;
+  border-top: 1rpx solid #f0f0f0;
+  justify-content: center;
+
+  &__line {
+    flex: 1;
+    height: 1rpx;
+    background-color: #e0e0e0;
+    align-self: center;
+  }
+
+  &__content {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    padding: 0 24rpx;
+  }
+
+  &__time {
+    font-size: 24rpx;
+    color: #999999;
+    line-height: 1.5;
+  }
+
+  &__text {
+    font-size: 24rpx;
+    color: #999999;
+    line-height: 1.5;
+  }
 }
 
 .messages-list {
   display: flex;
   flex-direction: column;
-  gap: 30rpx;
+  // gap: 30rpx;
+  // padding-bottom: 50rpx;
 }
 
 .message-item {
   display: flex;
-  align-items: flex-start;
-  margin: 20rpx 0 20rpx 0;
+  // align-items: flex-start;
+  margin-bottom: 30rpx;
 
   &--agent {
-    justify-content: flex-start;
+    // justify-content: flex-start;
   }
 
   &--user {
@@ -61,23 +102,23 @@
 }
 
 .message-bubble {
-  max-width: 500rpx;
+  max-width: 480rpx;
   padding: 20rpx 24rpx;
-  border-radius: 12rpx;
+  border-radius: 16rpx;
   position: relative;
   word-wrap: break-word;
-  margin-left: 20rpx;
 
   &--agent {
     background-color: #ffffff;
     border: 1rpx solid #e5e5e5;
+    margin-left: 16rpx;
 
     // 三角形尾巴(指向左侧头像)
     &::before {
       content: "";
       position: absolute;
       left: -10rpx;
-      top: 16rpx;
+      top: 20rpx;
       width: 0;
       height: 0;
       border-top: 10rpx solid transparent;
@@ -90,8 +131,8 @@
     &::after {
       content: "";
       position: absolute;
-      left: -11rpx;
-      top: 16rpx;
+      left: -12rpx;
+      top: 20rpx;
       width: 0;
       height: 0;
       border-top: 10rpx solid transparent;
@@ -103,13 +144,14 @@
 
   &--user {
     background-color: #409eff;
-    margin-right: 20rpx;
+    margin-right: 16rpx;
+
     // 三角形尾巴(指向右侧头像)
     &::before {
       content: "";
       position: absolute;
       right: -10rpx;
-      top: 16rpx;
+      top: 20rpx;
       width: 0;
       height: 0;
       border-top: 10rpx solid transparent;
@@ -121,27 +163,31 @@
 
 .message-text {
   font-size: 28rpx;
-  color: #000000;
-  line-height: 1.5;
+  color: #333333;
+  line-height: 1.6;
   word-wrap: break-word;
 
   &--user {
     color: #ffffff;
   }
 }
+
 .message-item--system {
   width: 100%;
   align-items: center;
   justify-content: center;
+
   .message-bubble--system {
     width: 100%;
     text-align: center;
+
     .message-text--system {
       color: #999999 !important;
       font-size: 24rpx;
     }
   }
 }
+
 .message-image {
   width: 200rpx;
   height: 200rpx;
@@ -149,3 +195,7 @@
   display: block;
   border-radius: 8rpx;
 }
+
+.bottom-safe-space {
+  height: calc(24rpx + env(safe-area-inset-bottom));
+}

+ 0 - 3
miniprogram/module/chats/pages/consultation-record/consultation-record.ts

@@ -35,7 +35,6 @@ Page({
   },
   observers: {},
   onLoad(options: any) {
-    console.log(options, "咨询记录数据");
     if (options.item) {
       const item = JSON.parse(decodeURIComponent(options.item));
       this.setData({
@@ -58,7 +57,6 @@ Page({
         `/consultManage/pageConsult?pageNum=${this.data.page}&pageSize=${this.data.pageSize}`,
         {}
       );
-      console.log("res=咨询记录列表", res.data.data);
 
       if (res.data && res.data.data && res.data.data.length > 0) {
         // 追加新数据到现有列表
@@ -101,7 +99,6 @@ Page({
   },
 
   onScrollToLower() {
-    console.log("onScrollToLower");
     if (this.data.isPage) {
       this.loadData();
     }

+ 21 - 18
miniprogram/module/chats/pages/consultation-record/consultation-record.wxml

@@ -1,12 +1,12 @@
 <!--module/chats/pages/consultation-record/consultation-record.wxml-->
 <t-navbar title="{{i18n.consultChat.title}}" left-arrow />
-<scroll-view 
-  id="scrollview" 
-  class="page-scroll__container" 
-  type="list" 
-  scroll-y 
-  enhanced="{{true}}" 
-  enable-passive 
+<scroll-view
+  id="scrollview"
+  class="page-scroll__container"
+  type="list"
+  scroll-y
+  enhanced="{{true}}"
+  enable-passive
   style="height: calc(100vh - 180rpx);"
   bindscrolltolower="onScrollToLower"
   lower-threshold="{{50}}"
@@ -17,7 +17,7 @@
       <view class="consultation-session">
         <view class="timestamp">{{item.startTime}}</view>
         <view class="status-message">开始{{i18n.consultChat._}}</view>
-        
+
         <!-- 消息列表 -->
         <view class="messages-list">
           <block wx:for="{{item.items}}" wx:key="id" wx:for-item="message">
@@ -28,10 +28,10 @@
                 <text class="message-text message-text--system">{{message.messageContent}}</text>
               </view>
             </view>
-            
+
             <!-- 患者消息 (sendType === '1') - 右侧显示 -->
             <view wx:elif="{{message.sendType === '1'}}" class="message-item message-item--user">
-              <view class="message-bubble {{message.messageType==='1'?'message-bubble--user':''}}">
+              <view class="message-bubble message-bubble--user">
                 <!-- 文本消息 -->
                 <block wx:if="{{message.messageType === '1'}}">
                   <text class="message-text message-text--user">{{message.messageContent}}</text>
@@ -43,14 +43,14 @@
               </view>
               <t-avatar class="message-avatar" icon="user" size="40px" />
             </view>
-            
+
             <!-- 医生/AI消息 (sendType === '2' 或 '4') - 左侧显示 -->
             <view wx:else class="message-item message-item--agent">
               <t-avatar class="message-avatar message-avatar--agent" icon="{{message.sendType === '2' ? 'user' : 'service'}}" size="40px" />
-              <view class="message-bubble {{message.messageType==='1'?'message-bubble--agent':''}}">
+              <view class="message-bubble message-bubble--agent">
                 <!-- 文本消息 -->
                 <block wx:if="{{message.messageType === '1'}}">
-                  <text class="message-text">{{message.messageContent}}</text>
+                  <towxml markdown="{{message.messageContent}}" theme="light" />
                 </block>
                 <!-- 图片消息 -->
                 <block wx:elif="{{message.messageType === '2'}}">
@@ -60,13 +60,17 @@
             </view>
           </block>
         </view>
-        
+
         <!-- 咨询结束 -->
-        <view class="timestamp">{{item.endTime}}</view>
-        <view class="status-message">{{i18n.consultChat._}}结束</view>
+        <view class="session-end">
+          <view class="session-end__content">
+            <view class="session-end__time">{{item.endTime}}</view>
+            <view class="session-end__text">{{i18n.consultChat._}}结束</view>
+          </view>
+        </view>
       </view>
     </block>
-    
+
     <!-- 加载更多/无更多数据提示 -->
     <view class="loading-container" style="text-align: center; padding: 20rpx; color: #999; font-size: 24rpx;" wx:if="{{isPage}}">
       <view wx:if="{{isLoading}}">加载中...</view>
@@ -75,4 +79,3 @@
   </view>
 </scroll-view>
 
-  

+ 2 - 2
miniprogram/module/chats/pages/index/index.scss

@@ -23,9 +23,9 @@
   right: 0;
   bottom: 0;
   z-index: 100;
-  background-color: #fff;
+  // background-color: #fff;
   padding-bottom: env(safe-area-inset-bottom);
-  box-shadow: 0 -2rpx 6rpx rgba(0, 0, 0, 0.1);
+  // box-shadow: 0 -2rpx 6rpx rgba(0, 0, 0, 0.1);
 }
 
 .chat {

+ 0 - 0
miniprogram/towxml/audio-player/Audio.js → miniprogram/module/chats/towxml/audio-player/Audio.js


+ 0 - 0
miniprogram/towxml/audio-player/audio-player.js → miniprogram/module/chats/towxml/audio-player/audio-player.js


+ 0 - 0
miniprogram/towxml/audio-player/audio-player.json → miniprogram/module/chats/towxml/audio-player/audio-player.json


+ 0 - 0
miniprogram/towxml/audio-player/audio-player.wxml → miniprogram/module/chats/towxml/audio-player/audio-player.wxml


+ 0 - 0
miniprogram/towxml/audio-player/audio-player.wxss → miniprogram/module/chats/towxml/audio-player/audio-player.wxss


+ 0 - 0
miniprogram/towxml/audio-player/loading.svg → miniprogram/module/chats/towxml/audio-player/loading.svg


+ 0 - 0
miniprogram/towxml/config.js → miniprogram/module/chats/towxml/config.js


+ 0 - 0
miniprogram/towxml/decode.js → miniprogram/module/chats/towxml/decode.js


+ 13 - 0
miniprogram/module/chats/towxml/decode.json

@@ -0,0 +1,13 @@
+{
+  "component": true,
+  "usingComponents": {
+    "decode": "./decode",
+    "audio-player": "./audio-player/audio-player",
+    "echarts": "./echarts/echarts",
+    "latex": "./latex/latex",
+    "table": "./table/table",
+    "todogroup": "./todogroup/todogroup",
+    "yuml": "./yuml/yuml",
+    "img": "./img/img"
+  }
+}

+ 0 - 0
miniprogram/towxml/decode.wxml → miniprogram/module/chats/towxml/decode.wxml


+ 0 - 0
miniprogram/towxml/decode.wxss → miniprogram/module/chats/towxml/decode.wxss


+ 0 - 0
miniprogram/towxml/echarts/dark.js → miniprogram/module/chats/towxml/echarts/dark.js


+ 0 - 0
miniprogram/towxml/echarts/echarts.js → miniprogram/module/chats/towxml/echarts/echarts.js


+ 0 - 0
miniprogram/towxml/echarts/echarts.json → miniprogram/module/chats/towxml/echarts/echarts.json


+ 0 - 0
miniprogram/towxml/echarts/echarts.wxml → miniprogram/module/chats/towxml/echarts/echarts.wxml


+ 0 - 0
miniprogram/towxml/echarts/echarts.wxss → miniprogram/module/chats/towxml/echarts/echarts.wxss


+ 0 - 0
miniprogram/towxml/echarts/wx-canvas.js → miniprogram/module/chats/towxml/echarts/wx-canvas.js


+ 0 - 0
miniprogram/towxml/echarts/wx-echarts.js → miniprogram/module/chats/towxml/echarts/wx-echarts.js


+ 0 - 0
miniprogram/towxml/img/img.js → miniprogram/module/chats/towxml/img/img.js


+ 0 - 0
miniprogram/towxml/img/img.json → miniprogram/module/chats/towxml/img/img.json


+ 0 - 0
miniprogram/towxml/img/img.wxml → miniprogram/module/chats/towxml/img/img.wxml


+ 0 - 0
miniprogram/towxml/img/img.wxss → miniprogram/module/chats/towxml/img/img.wxss


+ 0 - 0
miniprogram/towxml/index.js → miniprogram/module/chats/towxml/index.js


+ 0 - 0
miniprogram/towxml/latex/latex.js → miniprogram/module/chats/towxml/latex/latex.js


+ 0 - 0
miniprogram/towxml/latex/latex.json → miniprogram/module/chats/towxml/latex/latex.json


+ 0 - 0
miniprogram/towxml/latex/latex.wxml → miniprogram/module/chats/towxml/latex/latex.wxml


+ 0 - 0
miniprogram/towxml/latex/latex.wxss → miniprogram/module/chats/towxml/latex/latex.wxss


+ 0 - 0
miniprogram/towxml/parse/highlight/highlight.js → miniprogram/module/chats/towxml/parse/highlight/highlight.js


+ 0 - 0
miniprogram/towxml/parse/highlight/index.js → miniprogram/module/chats/towxml/parse/highlight/index.js


+ 0 - 0
miniprogram/towxml/parse/highlight/languages/bash.js → miniprogram/module/chats/towxml/parse/highlight/languages/bash.js


+ 0 - 0
miniprogram/towxml/parse/highlight/languages/c-like.js → miniprogram/module/chats/towxml/parse/highlight/languages/c-like.js


+ 0 - 0
miniprogram/towxml/parse/highlight/languages/c.js → miniprogram/module/chats/towxml/parse/highlight/languages/c.js


+ 0 - 0
miniprogram/towxml/parse/highlight/languages/css.js → miniprogram/module/chats/towxml/parse/highlight/languages/css.js


+ 0 - 0
miniprogram/towxml/parse/highlight/languages/dart.js → miniprogram/module/chats/towxml/parse/highlight/languages/dart.js


+ 0 - 0
miniprogram/towxml/parse/highlight/languages/go.js → miniprogram/module/chats/towxml/parse/highlight/languages/go.js


+ 0 - 0
miniprogram/towxml/parse/highlight/languages/htmlbars.js → miniprogram/module/chats/towxml/parse/highlight/languages/htmlbars.js


+ 0 - 0
miniprogram/towxml/parse/highlight/languages/java.js → miniprogram/module/chats/towxml/parse/highlight/languages/java.js


+ 0 - 0
miniprogram/towxml/parse/highlight/languages/javascript.js → miniprogram/module/chats/towxml/parse/highlight/languages/javascript.js


+ 0 - 0
miniprogram/towxml/parse/highlight/languages/json.js → miniprogram/module/chats/towxml/parse/highlight/languages/json.js


+ 0 - 0
miniprogram/towxml/parse/highlight/languages/less.js → miniprogram/module/chats/towxml/parse/highlight/languages/less.js


+ 0 - 0
miniprogram/towxml/parse/highlight/languages/nginx.js → miniprogram/module/chats/towxml/parse/highlight/languages/nginx.js


+ 0 - 0
miniprogram/towxml/parse/highlight/languages/php.js → miniprogram/module/chats/towxml/parse/highlight/languages/php.js


+ 0 - 0
miniprogram/towxml/parse/highlight/languages/python-repl.js → miniprogram/module/chats/towxml/parse/highlight/languages/python-repl.js


+ 0 - 0
miniprogram/towxml/parse/highlight/languages/python.js → miniprogram/module/chats/towxml/parse/highlight/languages/python.js


+ 0 - 0
miniprogram/towxml/parse/highlight/languages/scss.js → miniprogram/module/chats/towxml/parse/highlight/languages/scss.js


+ 0 - 0
miniprogram/towxml/parse/highlight/languages/shell.js → miniprogram/module/chats/towxml/parse/highlight/languages/shell.js


+ 0 - 0
miniprogram/towxml/parse/highlight/languages/typescript.js → miniprogram/module/chats/towxml/parse/highlight/languages/typescript.js


+ 0 - 0
miniprogram/towxml/parse/highlight/languages/xml.js → miniprogram/module/chats/towxml/parse/highlight/languages/xml.js


+ 0 - 0
miniprogram/towxml/parse/highlight/style/github.wxss → miniprogram/module/chats/towxml/parse/highlight/style/github.wxss


+ 0 - 0
miniprogram/towxml/parse/highlight/style/monokai.wxss → miniprogram/module/chats/towxml/parse/highlight/style/monokai.wxss


+ 0 - 0
miniprogram/towxml/parse/index.js → miniprogram/module/chats/towxml/parse/index.js


+ 0 - 0
miniprogram/towxml/parse/markdown/index.js → miniprogram/module/chats/towxml/parse/markdown/index.js


+ 0 - 0
miniprogram/towxml/parse/markdown/markdown.js → miniprogram/module/chats/towxml/parse/markdown/markdown.js


+ 0 - 0
miniprogram/towxml/parse/markdown/plugins/echarts.js → miniprogram/module/chats/towxml/parse/markdown/plugins/echarts.js


+ 0 - 0
miniprogram/towxml/parse/markdown/plugins/emoji.js → miniprogram/module/chats/towxml/parse/markdown/plugins/emoji.js


+ 0 - 0
miniprogram/towxml/parse/markdown/plugins/ins.js → miniprogram/module/chats/towxml/parse/markdown/plugins/ins.js


+ 0 - 0
miniprogram/towxml/parse/markdown/plugins/latex.js → miniprogram/module/chats/towxml/parse/markdown/plugins/latex.js


+ 0 - 0
miniprogram/towxml/parse/markdown/plugins/mark.js → miniprogram/module/chats/towxml/parse/markdown/plugins/mark.js


Некоторые файлы не были показаны из-за большого количества измененных файлов