ylong 6 bulan lalu
induk
melakukan
158d9d8afd
90 mengubah file dengan 295 tambahan dan 220 penghapusan
  1. 1 1
      App.vue
  2. 1 1
      config/request.js
  3. 1 1
      pages/index/audit/express-order.vue
  4. 1 1
      pages/index/audit/scan-order.vue
  5. 1 1
      pages/index/detail/book-audit.vue
  6. 1 1
      pages/index/detail/components/BookInfo.vue
  7. 1 1
      pages/index/detail/components/UserInfoCard.vue
  8. 1 1
      pages/index/detail/index.vue
  9. 1 1
      pages/index/express/components/ExceptionItem.vue
  10. 1 1
      pages/index/express/quick-unpack.vue
  11. 1 1
      pages/index/index.vue
  12. 2 3
      pages/index/wms/bad-in.vue
  13. 1 1
      pages/index/wms/bad-off.vue
  14. 1 1
      pages/index/wms/bad-out.vue
  15. 1 1
      pages/index/wms/components/LocationOrderItem.vue
  16. 1 1
      pages/index/wms/location-order.vue
  17. 1 1
      pages/index/wms/order-query.vue
  18. 1 1
      pages/index/wms/speedy-check.vue
  19. 6 8
      pages/index/wms/task-detail.vue
  20. 2 2
      pages/my/components/orderItem.vue
  21. 1 1
      pages/my/my.vue
  22. 112 64
      pages/my/page/volume.vue
  23. 1 1
      pages/order/index.vue
  24. TEMPAT SAMPAH
      unpackage/cache/apk/__UNI__65C1C73_cm.apk
  25. 1 1
      unpackage/cache/apk/apkurl
  26. 0 0
      unpackage/cache/apk/cmManifestCache.json
  27. 0 1
      unpackage/cache/wgt/__UNI__65C1C73/app-config-service.js
  28. 0 0
      unpackage/cache/wgt/__UNI__65C1C73/app-service.js
  29. 0 0
      unpackage/cache/wgt/__UNI__65C1C73/manifest.json
  30. 0 0
      unpackage/cache/wgt/__UNI__65C1C73/pages/book/index.css
  31. 0 0
      unpackage/cache/wgt/__UNI__65C1C73/pages/index/audit/confirm-receipt.css
  32. 0 0
      unpackage/cache/wgt/__UNI__65C1C73/pages/index/audit/express-order.css
  33. 0 0
      unpackage/cache/wgt/__UNI__65C1C73/pages/index/audit/scan-order.css
  34. 0 0
      unpackage/cache/wgt/__UNI__65C1C73/pages/index/detail/batch-audit.css
  35. 0 0
      unpackage/cache/wgt/__UNI__65C1C73/pages/index/detail/book-audit.css
  36. 0 0
      unpackage/cache/wgt/__UNI__65C1C73/pages/index/detail/index.css
  37. 0 0
      unpackage/cache/wgt/__UNI__65C1C73/pages/index/entry/commodity-scan.css
  38. 0 0
      unpackage/cache/wgt/__UNI__65C1C73/pages/index/entry/scan-book.css
  39. 0 0
      unpackage/cache/wgt/__UNI__65C1C73/pages/index/express/quick-check.css
  40. 0 0
      unpackage/cache/wgt/__UNI__65C1C73/pages/index/express/quick-unpack.css
  41. 0 0
      unpackage/cache/wgt/__UNI__65C1C73/pages/index/express/route-exception.css
  42. 0 0
      unpackage/cache/wgt/__UNI__65C1C73/pages/index/express/transfer-sign.css
  43. 0 0
      unpackage/cache/wgt/__UNI__65C1C73/pages/index/express/warehouse-sign.css
  44. 0 0
      unpackage/cache/wgt/__UNI__65C1C73/pages/index/express/weight-modify.css
  45. 1 1
      unpackage/cache/wgt/__UNI__65C1C73/pages/index/index.css
  46. 0 0
      unpackage/cache/wgt/__UNI__65C1C73/pages/index/offline/check-order.css
  47. 0 0
      unpackage/cache/wgt/__UNI__65C1C73/pages/index/wms/bad-in.css
  48. 0 0
      unpackage/cache/wgt/__UNI__65C1C73/pages/index/wms/bad-out-order.css
  49. 0 0
      unpackage/cache/wgt/__UNI__65C1C73/pages/index/wms/location-order-list.css
  50. 0 0
      unpackage/cache/wgt/__UNI__65C1C73/pages/index/wms/location-order.css
  51. 0 0
      unpackage/cache/wgt/__UNI__65C1C73/pages/index/wms/location-select.css
  52. 0 0
      unpackage/cache/wgt/__UNI__65C1C73/pages/index/wms/order-query-list.css
  53. 0 0
      unpackage/cache/wgt/__UNI__65C1C73/pages/index/wms/order-query.css
  54. 0 0
      unpackage/cache/wgt/__UNI__65C1C73/pages/index/wms/speedy-check.css
  55. 0 0
      unpackage/cache/wgt/__UNI__65C1C73/pages/index/wms/task-detail.css
  56. 0 0
      unpackage/cache/wgt/__UNI__65C1C73/pages/my/page/warehouse.css
  57. 0 1
      unpackage/dist/build/app-plus/app-config-service.js
  58. 0 0
      unpackage/dist/build/app-plus/app-service.js
  59. 1 1
      unpackage/dist/build/app-plus/manifest.json
  60. 0 0
      unpackage/dist/build/app-plus/pages/book/index.css
  61. 0 0
      unpackage/dist/build/app-plus/pages/index/audit/confirm-receipt.css
  62. 0 0
      unpackage/dist/build/app-plus/pages/index/audit/express-order.css
  63. 0 0
      unpackage/dist/build/app-plus/pages/index/audit/scan-order.css
  64. 0 0
      unpackage/dist/build/app-plus/pages/index/detail/batch-audit.css
  65. 0 0
      unpackage/dist/build/app-plus/pages/index/detail/book-audit.css
  66. 0 0
      unpackage/dist/build/app-plus/pages/index/detail/index.css
  67. 0 0
      unpackage/dist/build/app-plus/pages/index/entry/commodity-scan.css
  68. 0 0
      unpackage/dist/build/app-plus/pages/index/entry/scan-book.css
  69. 0 0
      unpackage/dist/build/app-plus/pages/index/express/quick-check.css
  70. 0 0
      unpackage/dist/build/app-plus/pages/index/express/quick-unpack.css
  71. 0 0
      unpackage/dist/build/app-plus/pages/index/express/route-exception.css
  72. 0 0
      unpackage/dist/build/app-plus/pages/index/express/transfer-sign.css
  73. 0 0
      unpackage/dist/build/app-plus/pages/index/express/warehouse-sign.css
  74. 0 0
      unpackage/dist/build/app-plus/pages/index/express/weight-modify.css
  75. 1 1
      unpackage/dist/build/app-plus/pages/index/index.css
  76. 0 0
      unpackage/dist/build/app-plus/pages/index/offline/check-order.css
  77. 0 0
      unpackage/dist/build/app-plus/pages/index/wms/bad-in.css
  78. 0 0
      unpackage/dist/build/app-plus/pages/index/wms/bad-out-order.css
  79. 0 0
      unpackage/dist/build/app-plus/pages/index/wms/location-order-list.css
  80. 0 0
      unpackage/dist/build/app-plus/pages/index/wms/location-order.css
  81. 0 0
      unpackage/dist/build/app-plus/pages/index/wms/location-select.css
  82. 0 0
      unpackage/dist/build/app-plus/pages/index/wms/order-query-list.css
  83. 0 0
      unpackage/dist/build/app-plus/pages/index/wms/order-query.css
  84. 0 0
      unpackage/dist/build/app-plus/pages/index/wms/speedy-check.css
  85. 0 0
      unpackage/dist/build/app-plus/pages/index/wms/task-detail.css
  86. 0 0
      unpackage/dist/build/app-plus/pages/my/page/warehouse.css
  87. 127 118
      unpackage/dist/dev/app-plus/app-service.js
  88. TEMPAT SAMPAH
      unpackage/release/apk/__UNI__65C1C73__20250531174034.apk
  89. TEMPAT SAMPAH
      unpackage/release/apk/__UNI__65C1C73__20250531224515.apk
  90. 23 0
      utils/VolumeTTS.js

+ 1 - 1
App.vue

@@ -19,7 +19,7 @@ onLaunch(() => {
 
     // #ifdef APP-PLUS
     // 初始化扫码模块
-    useInit();
+    // useInit();
     // #endif
 });
 onShow(() => {});

+ 1 - 1
config/request.js

@@ -1,7 +1,7 @@
 /**
  * 文档地址:https://uiadmin.net/uview-plus/js/http.html
  */
-const baseUrl = "https://bk.shuhi.com";
+const baseUrl = "https://bpi.shuhi.com";
 export function initRequest() {
     console.log("初始化了 http 请求代码");
     // 初始化请求配置

+ 1 - 1
pages/index/audit/express-order.vue

@@ -66,7 +66,7 @@ const handleSearch = () => {
     }).then(res => {
         if (res.code == 200) {
             uni.setStorageSync('orderDetail', res.data)
-            uni.navigateTo({
+            uni.redirectTo({
                 url: `/pages/index/detail/index?id=${res.data.orderId}`
             })
         } else {

+ 1 - 1
pages/index/audit/scan-order.vue

@@ -134,7 +134,7 @@ const handleQuery = () => {
         return;
     }
     uni.setStorageSync('isbnList', isbnList.value);
-    uni.navigateTo({
+    uni.redirectTo({
         url: '/pages/index/audit/isbn-order'
     });
 };

+ 1 - 1
pages/index/detail/book-audit.vue

@@ -159,7 +159,7 @@ function handleScan(isbn) {
 
             scannedBooks.value.push(isbn);
             uni.setStorageSync("scannedBooks", scannedBooks.value);
-            uni.navigateTo({
+            uni.redirectTo({
                 url: `/pages/index/detail/batch-audit?orderId=${orderId.value}`,
             });
         }

+ 1 - 1
pages/index/detail/components/BookInfo.vue

@@ -60,7 +60,7 @@ function handleBookClick(book) {
         return;
     }
 
-    uni.navigateTo({
+    uni.redirectTo({
         url: `/pages/index/detail/book-audit?isbn=${book.isbn}&orderId=${props.detail.orderId}`,
     });
     uni.setStorageSync("auditBook", book);

+ 1 - 1
pages/index/detail/components/UserInfoCard.vue

@@ -83,7 +83,7 @@ const props = defineProps({
 });
 
 const handleUserOrders = () => {
-    uni.navigateTo({
+    uni.redirectTo({
         url: `/pages/index/detail/user-orders?userId=${props.detail.userId}`,
     });
 };

+ 1 - 1
pages/index/detail/index.vue

@@ -314,7 +314,7 @@ function handleScan(isbn) {
             uni.$u.ttsModule.speak(text);
         }
 
-        uni.navigateTo({
+        uni.redirectTo({
             url: `/pages/index/detail/book-audit?isbn=${isbn}&orderId=${orderDetail.value.orderId}`,
         });
         uni.setStorageSync("auditBook", book);

+ 1 - 1
pages/index/express/components/ExceptionItem.vue

@@ -59,7 +59,7 @@ const emit = defineEmits(['refresh']);
 
 // 查看物流
 const handleCheckLogistics = () => {
-    uni.navigateTo({
+    uni.redirectTo({
         url: `/pages/index/express/logistics-detail?orderId=${props.order.orderId}&status=${props.order.checkStatus}&id=${props.order.id}`
     });
 };

+ 1 - 1
pages/index/express/quick-unpack.vue

@@ -38,7 +38,7 @@ import {
 
 //跳转至扫码页面
 function goScan() {
-    uni.navigateTo({
+    uni.redirectTo({
         url: '/pages/index/express/scan'
     })
 }

+ 1 - 1
pages/index/index.vue

@@ -284,7 +284,7 @@ const entryOperations = ref([
 
 // 页面跳转方法
 const handleNavigation = (path) => {
-    uni.navigateTo({
+    uni.redirectTo({
         url: path,
         fail: () => {
             uni.showToast({

+ 2 - 3
pages/index/wms/bad-in.vue

@@ -67,7 +67,6 @@ import {
 } from 'vue';
 import { onShow, onUnload } from '@dcloudio/uni-app';
 import BadItem from './components/BadItem.vue';
-import VolumeTTS from '@/utils/VolumeTTS.js'
 import RemarkDialog from './components/RemarkDialog.vue'
 
 const waybillCode = ref()
@@ -227,7 +226,7 @@ function selectLocation() {
         return
     }
     //如果有库位,也带过去
-    uni.navigateTo({
+    uni.redirectTo({
         url: "/pages/index/wms/location-select?godownId=" + formData.godownId + "&positionCode=" + formData.positionCode
     })
 }
@@ -285,7 +284,7 @@ const handleRemarkConfirm = (remark) => {
 
 // 打开仓库选择页面
 const selectWarehouse = () => {
-    uni.navigateTo({
+    uni.redirectTo({
         url: '/pages/index/wms/warehouse-select?godownId=' + formData.godownId
     })
 }

+ 1 - 1
pages/index/wms/bad-off.vue

@@ -142,7 +142,7 @@ const handleTaskClick = (task) => {
                 try {
                     const response = await uni.$u.http.post(`/app/appstock/lockStockTask?taskCode=${task.taskCode}`);
                     if (response.code === 200) {
-                        uni.navigateTo({
+                        uni.redirectTo({
                             url: `/pages/index/wms/task-detail?taskCode=${task.taskCode}`,
                         });
                     } else {

+ 1 - 1
pages/index/wms/bad-out.vue

@@ -43,7 +43,7 @@ function playGlobalSound(){
 // 搜索处理
 const onSearch = () => {
     // 实现搜索逻辑
-    uni.navigateTo({
+    uni.redirectTo({
         url: `/pages/index/wms/bad-out-order?searchText=${searchText.value}&searchType=${searchType.value}`,
     });
 };

+ 1 - 1
pages/index/wms/components/LocationOrderItem.vue

@@ -63,7 +63,7 @@ const toggleSelect = () => {
 }
 
 const handleQuickJump = () => {
-    uni.navigateTo({
+    uni.redirectTo({
         url: `/pages/index/wms/order-query-list?id=${props.item.orderId}`
     })
 }

+ 1 - 1
pages/index/wms/location-order.vue

@@ -24,7 +24,7 @@ const positionCode = ref('')
 
 const onSearch = () => {
     if (positionCode.value) {
-        uni.navigateTo({
+        uni.redirectTo({
             url: '/pages/index/wms/location-order-list?positionCode=' + positionCode.value
         })
     } else {

+ 1 - 1
pages/index/wms/order-query.vue

@@ -29,7 +29,7 @@ const orderQuery = () => {
         uni.$u.toast('请输入快递单号/订单编号')
         return
     }
-    uni.navigateTo({
+    uni.redirectTo({
         url: `/pages/index/wms/order-query-list?id=${query.search}`
     })
 }

+ 1 - 1
pages/index/wms/speedy-check.vue

@@ -308,7 +308,7 @@ function handleAdd() {
         uni.$u.toast("请选择库位");
         return;
     }
-    uni.navigateTo({
+    uni.redirectTo({
         url: "/pages/index/wms/speedy-check-add?location=" + location.value,
     });
 }

+ 6 - 8
pages/index/wms/task-detail.vue

@@ -86,7 +86,6 @@
 <script setup>
 import { ref, onMounted } from "vue";
 import BadOutCard from "@/pages/index/wms/components/BadOutCard.vue";
-import VolumeTTS from "@/utils/VolumeTTS.js";
 import { onLoad, onUnload, onShow } from "@dcloudio/uni-app";
 
 // 任务进度
@@ -101,7 +100,7 @@ const ttsModule = ref(null);
 const taskCode = ref("");
 
 onUnload(() => {
-    ttsModule.value.stop();
+    uni.$u.ttsModule.stop();
     uni.$u.cleanupOnPageUnload();
 });
 
@@ -122,7 +121,7 @@ const handleNextTask = () => {
         currentTask.value++;
 
         if (currentTask.value == totalTasks.value) {
-            ttsModule.value.speak("任务完成");
+            uni.$u.ttsModule.speak("任务完成");
         } else {
             curTaskInfo.value = orderList.value[currentTask.value];
             badList.value = curTaskInfo.value.detailVoList || [];
@@ -163,7 +162,7 @@ const confirmStockTask = () => {
 
             handleNextTask();
             isFirstScan.value = false;
-            ttsModule.value.speak("下架成功");
+            uni.$u.ttsModule.speak("下架成功");
         } else {
             uni.showToast({
                 title: res.msg,
@@ -199,7 +198,7 @@ const onSubmit = () => {
             playGlobalSound()
             if (res.confirm) {
                 uni.navigateBack();
-                ttsModule.value.speak("任务已提交");
+                uni.$u.ttsModule.speak("任务已提交");
                 unlockTask();
             }
         },
@@ -214,7 +213,7 @@ function goBack() {
             playGlobalSound()
             if (res.confirm) {
                 uni.navigateBack();
-                ttsModule.value.speak("任务已放弃");
+                uni.$u.ttsModule.speak("任务已放弃");
                 unlockTask();
             }
         },
@@ -246,7 +245,7 @@ const checkScanText = (scanText) => {
         }
     }
     if (!isFirstScan.value) {
-        ttsModule.value.speak("请先校验库位号");
+        uni.$u.ttsModule.speak("请先校验库位号");
         return;
     }
 
@@ -295,7 +294,6 @@ onLoad((opts) => {
     taskCode.value = opts.taskCode;
     onSearch();
     // #ifdef APP-PLUS
-    ttsModule.value = new VolumeTTS();
 
     uni.$u.useGlobalEvent((e) => {
         if (e.barcode) {

+ 2 - 2
pages/my/components/orderItem.vue

@@ -101,7 +101,7 @@ const copyToClipboard = (text) => {
 // 到货审核
 const handleAudit = () => {
     // 处理到货审核逻辑
-    uni.navigateTo({
+    uni.redirectTo({
         url: `/pages/index/detail/index?id=${props.item.orderId}`,
     });
 };
@@ -109,7 +109,7 @@ const handleAudit = () => {
 // 查看
 const handleView = () => {
     // 处理查看逻辑 type=2 表示查看订单
-    uni.navigateTo({
+    uni.redirectTo({
         url: `/pages/index/detail/index?id=${props.item.orderId}&type=2`,
     });
 };

+ 1 - 1
pages/my/my.vue

@@ -141,7 +141,7 @@ const handleClick = (item) => {
         });
         return;
     }
-    uni.navigateTo({
+    uni.redirectTo({
         url: item.path,
     });
 };

+ 112 - 64
pages/my/page/volume.vue

@@ -4,31 +4,47 @@
         <view class="settings-section">
             <u-cell-group :border="false">
                 <!-- 语音播报设置 -->
-                <u-cell title="语音播报" label="控制除app启动提示外所有语音播报的开关" :border-bottom="true">
+                <u-cell
+                    title="语音播报"
+                    label="控制除app启动提示外所有语音播报的开关"
+                    :border-bottom="true"
+                >
                     <template #right-icon>
-                        <u-switch v-model="settings.audioPlay" activeColor="#4cd964"></u-switch>
+                        <u-switch
+                            v-model="settings.audioPlay"
+                            activeColor="#4cd964"
+                        ></u-switch>
                     </template>
                 </u-cell>
 
                 <!-- 点击音效设置 -->
                 <u-cell title="点击音效" :border-bottom="true">
                     <template #right-icon>
-                        <u-switch v-model="settings.audioClick" activeColor="#4cd964"></u-switch>
+                        <u-switch
+                            v-model="settings.audioClick"
+                            activeColor="#4cd964"
+                        ></u-switch>
                     </template>
                 </u-cell>
 
                 <!-- 启动提示语设置 -->
                 <u-cell title="启动提示语" :border-bottom="true">
                     <template #right-icon>
-                        <u-switch v-model="settings.audioStartSwitch" activeColor="#4cd964"></u-switch>
+                        <u-switch
+                            v-model="settings.audioStartSwitch"
+                            activeColor="#4cd964"
+                        ></u-switch>
                     </template>
                 </u-cell>
             </u-cell-group>
 
             <!-- 启动提示语输入框 -->
             <view class="input-section">
-                <u-textarea v-model="settings.audioStart" placeholder="输入启动时要说的内容,比如:欢迎使用书嗨/很开心又见到你啦"
-                    height="100"></u-textarea>
+                <u-textarea
+                    v-model="settings.audioStart"
+                    placeholder="输入启动时要说的内容,比如:欢迎使用书嗨/很开心又见到你啦"
+                    height="100"
+                ></u-textarea>
             </view>
 
             <!-- 语速设置 -->
@@ -37,7 +53,14 @@
                     <text>设置语速</text>
                     <text class="subtitle">(部分机型不支持)</text>
                 </view>
-                <u-slider :value="settings.audioSpeed" :max="20" :min="5" :step="1" showValue @change="changeSpeed"></u-slider>
+                <u-slider
+                    :value="settings.audioSpeed"
+                    :max="20"
+                    :min="5"
+                    :step="1"
+                    showValue
+                    @change="changeSpeed"
+                ></u-slider>
             </view>
 
             <!-- 音调设置 -->
@@ -46,135 +69,160 @@
                     <text>设置音调</text>
                     <text class="subtitle">(部分机型不支持)</text>
                 </view>
-                <u-slider :value="settings.audioVolume" :max="10" :min="1" :step="1" showValue @change="changeVolume"></u-slider>
+                <u-slider
+                    :value="settings.audioVolume"
+                    :max="10"
+                    :min="1"
+                    :step="1"
+                    showValue
+                    @change="changeVolume"
+                ></u-slider>
             </view>
 
             <!-- 操作按钮 -->
             <view class="button-group">
-                <u-button type="primary" text="保存设置并试听" @click="saveVoiceBroadcast"></u-button>
-                <u-button type="warning" text="停止播放" @click="stopPlayback" :plain="true"></u-button>
-                <u-button type="error" text="重启app" @click="restartApp" :plain="true"></u-button>
+                <u-button
+                    type="primary"
+                    text="保存设置并试听"
+                    @click="saveVoiceBroadcast"
+                ></u-button>
+                <u-button
+                    type="warning"
+                    text="停止播放"
+                    @click="stopPlayback"
+                    :plain="true"
+                ></u-button>
+                <u-button
+                    type="error"
+                    text="重启app"
+                    @click="restartApp"
+                    :plain="true"
+                ></u-button>
             </view>
         </view>
     </view>
 </template>
 
 <script setup>
-import {
-    ref,
-    reactive,
-    onMounted
-} from 'vue'
-import VolumeTTS from '@/utils/VolumeTTS';
+import { ref, reactive, onMounted } from "vue";
+import VolumeTTS from "@/utils/VolumeTTS";
+import { onUnload } from "@dcloudio/uni-app";
 
 // 设置状态
 const settings = ref({
     audioStartSwitch: true,
-    audioStart: '书嗨,不辜负每一个爱书的人',
+    audioStart: "书嗨,不辜负每一个爱书的人",
     audioSpeed: 10,
     audioVolume: 5,
-    "audioPlay": false,
-    "audioClick": false,
-})
+    audioPlay: false,
+    audioClick: false,
+});
 
 function changeSpeed(value) {
-    settings.value.audioSpeed = value
+    settings.value.audioSpeed = value;
 }
 
 function changeVolume(value) {
-    settings.value.audioVolume = value
+    settings.value.audioVolume = value;
 }
 
 // 获取语音播报内容
 const getVoiceBroadcast = () => {
-    uni.$u.http.get('/app/appConf/getAudioConfig').then(res => {
+    uni.$u.http.get("/app/appConf/getAudioConfig").then((res) => {
         if (res.code == 200) {
-            settings.value = res.data
+            settings.value = res.data;
         }
-    })
-}
-getVoiceBroadcast()
+    });
+};
+getVoiceBroadcast();
 // 保存语音播报内容
 const saveVoiceBroadcast = () => {
-    uni.$u.http.post('/app/appConf/setAudioConfig', settings.value).then(res => {
-        if (res.code == 200) {
-            uni.showToast({
-                title: '设置成功',
-                icon: 'success'
-            })
-            initTTS()
-        }
-    })
-}
+    uni.$u.http
+        .post("/app/appConf/setAudioConfig", settings.value)
+        .then((res) => {
+            if (res.code == 200) {
+                uni.showToast({
+                    title: "设置成功",
+                    icon: "success",
+                });
+                initTTS();
+            }
+        });
+};
 
 //初始化tts
-const tts = ref(null)
+const tts = ref(null);
 const initTTS = () => {
     let params = {
         speed: settings.value.audioSpeed / 10, // 将 0-10 转换为 0-1
         pitch: settings.value.audioVolume, // 将 0-10 转换为 0-1
         volume: 1,
-    }
-    tts.value = new VolumeTTS(params)
+    };
+    tts.value = new VolumeTTS(params);
 
-    settings.value.audioStartSwitch && tts.value.speak(settings.value.audioStart)
-}
+    settings.value.audioStartSwitch &&
+        tts.value.speak(settings.value.audioStart);
+};
 
 // 停止播放
 function stopPlayback() {
-    tts.value && tts.value.stop()
+    tts.value && tts.value.stop();
     uni.showToast({
-        title: '已停止播放',
-        icon: 'none'
-    })
+        title: "已停止播放",
+        icon: "none",
+    });
 }
 
 // 重启应用
 function restartApp() {
     uni.showModal({
-        title: '提示',
-        content: '确定要重启应用吗?',
+        title: "提示",
+        content: "确定要重启应用吗?",
         success: function (res) {
             if (res.confirm) {
                 // #ifdef APP-PLUS
-                plus.runtime.restart()
+                plus.runtime.restart();
                 // #endif
 
                 // #ifdef H5 || MP-WEIXIN
                 uni.reLaunch({
-                    url: '/pages/index/index'
-                })
+                    url: "/pages/index/index",
+                });
                 // #endif
             }
-        }
-    })
+        },
+    });
 }
 
 // 加载保存的设置
 function loadSettings() {
     try {
-        const savedSettings = uni.getStorageSync('tts_settings')
+        const savedSettings = uni.getStorageSync("tts_settings");
         if (savedSettings) {
-            Object.assign(settings, savedSettings)
+            Object.assign(settings, savedSettings);
         }
     } catch (error) {
-        console.error('加载设置失败:', error)
+        console.error("加载设置失败:", error);
     }
 }
 
 // 播放点击音效
 function playClickSound() {
-    if (!settings.audioClick) return
+    if (!settings.audioClick) return;
 
-    const audio = uni.createInnerAudioContext()
-    audio.src = '/static/audio/click.mp3' // 确保添加点击音效文件
-    audio.play()
+    const audio = uni.createInnerAudioContext();
+    audio.src = "/static/audio/click.mp3"; // 确保添加点击音效文件
+    audio.play();
 }
 
 // 生命周期钩子
 onMounted(async () => {
-    loadSettings()
-})
+    loadSettings();
+});
+
+onUnload(() => {
+    tts.value && tts.value.destroy();
+});
 </script>
 
 <style lang="scss" scoped>
@@ -234,4 +282,4 @@ onMounted(async () => {
         }
     }
 }
-</style>
+</style>

+ 1 - 1
pages/order/index.vue

@@ -83,7 +83,7 @@
 
 	// 页面跳转
 	const navigateToDetail = (path) => {
-		uni.navigateTo({
+		uni.redirectTo({
 			url: path
 		})
 	}

TEMPAT SAMPAH
unpackage/cache/apk/__UNI__65C1C73_cm.apk


+ 1 - 1
unpackage/cache/apk/apkurl

@@ -1 +1 @@
-https://app.liuyingyong.cn/build/download/9b4ce1f0-3871-11f0-a8bf-d5dfad5d65eb
+https://app.liuyingyong.cn/build/download/dd5ba7b0-3e2d-11f0-9f88-b73cc37a872c

File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/cache/apk/cmManifestCache.json


File diff ditekan karena terlalu besar
+ 0 - 1
unpackage/cache/wgt/__UNI__65C1C73/app-config-service.js


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/cache/wgt/__UNI__65C1C73/app-service.js


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/cache/wgt/__UNI__65C1C73/manifest.json


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/cache/wgt/__UNI__65C1C73/pages/book/index.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/cache/wgt/__UNI__65C1C73/pages/index/audit/confirm-receipt.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/cache/wgt/__UNI__65C1C73/pages/index/audit/express-order.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/cache/wgt/__UNI__65C1C73/pages/index/audit/scan-order.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/cache/wgt/__UNI__65C1C73/pages/index/detail/batch-audit.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/cache/wgt/__UNI__65C1C73/pages/index/detail/book-audit.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/cache/wgt/__UNI__65C1C73/pages/index/detail/index.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/cache/wgt/__UNI__65C1C73/pages/index/entry/commodity-scan.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/cache/wgt/__UNI__65C1C73/pages/index/entry/scan-book.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/cache/wgt/__UNI__65C1C73/pages/index/express/quick-check.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/cache/wgt/__UNI__65C1C73/pages/index/express/quick-unpack.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/cache/wgt/__UNI__65C1C73/pages/index/express/route-exception.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/cache/wgt/__UNI__65C1C73/pages/index/express/transfer-sign.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/cache/wgt/__UNI__65C1C73/pages/index/express/warehouse-sign.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/cache/wgt/__UNI__65C1C73/pages/index/express/weight-modify.css


+ 1 - 1
unpackage/cache/wgt/__UNI__65C1C73/pages/index/index.css

@@ -1 +1 @@
-.operation-container[data-v-5ed4a2b1]{padding:.625rem;box-sizing:border-box}.section[data-v-5ed4a2b1]{margin-bottom:.9375rem;background:#fff;border-radius:.5rem;padding:.625rem;padding-right:0;box-shadow:0 .0625rem .375rem rgba(0,0,0,.05)}.section .section-title[data-v-5ed4a2b1]{font-size:1.5625rem;font-weight:600;color:#333;padding:.625rem;padding-top:0;border-bottom:.0625rem solid #f0f0f0;margin-bottom:.625rem}.section .grid-container[data-v-5ed4a2b1]{display:flex;flex-wrap:wrap;padding:.3125rem}.section .grid-container .grid-item[data-v-5ed4a2b1]{width:calc(50% - .625rem);min-height:4.625rem;display:flex;align-items:center;justify-content:center;text-align:center;padding:.625rem .9375rem;line-height:1.875rem;font-size:1.5625rem;border-radius:.375rem;color:#fff;transition:all .3s;white-space:pre-wrap;box-sizing:border-box;margin-right:.625rem;margin-bottom:.625rem}.section .grid-container .grid-item[style*="grid-column: span 2"][data-v-5ed4a2b1]{width:calc(100% - .625rem);margin-right:.625rem}.section .grid-container .grid-item.primary[data-v-5ed4a2b1]{background:linear-gradient(135deg,#4cd964,#3ac555)}.section .grid-container .grid-item.primary[data-v-5ed4a2b1]:active{background:linear-gradient(135deg,#3ac555,#2fb548)}.section .grid-container .grid-item.warning[data-v-5ed4a2b1]{background:linear-gradient(135deg,#ff9500,#ff8000)}.section .grid-container .grid-item.warning[data-v-5ed4a2b1]:active{background:linear-gradient(135deg,#ff8000,#e67300)}.section .grid-container .grid-item[data-v-5ed4a2b1]:active{transform:scale(.98)}
+.operation-container[data-v-28c08b76]{padding:.625rem;box-sizing:border-box}.section[data-v-28c08b76]{margin-bottom:.9375rem;background:#fff;border-radius:.5rem;padding:.625rem;padding-right:0;box-shadow:0 .0625rem .375rem rgba(0,0,0,.05)}.section .section-title[data-v-28c08b76]{font-size:1.5625rem;font-weight:600;color:#333;padding:.625rem;padding-top:0;border-bottom:.0625rem solid #f0f0f0;margin-bottom:.625rem}.section .grid-container[data-v-28c08b76]{display:flex;flex-wrap:wrap;padding:.3125rem}.section .grid-container .grid-item[data-v-28c08b76]{width:calc(50% - .625rem);min-height:4.625rem;display:flex;align-items:center;justify-content:center;text-align:center;padding:.625rem .9375rem;line-height:1.875rem;font-size:1.5625rem;border-radius:.375rem;color:#fff;transition:all .3s;white-space:pre-wrap;box-sizing:border-box;margin-right:.625rem;margin-bottom:.625rem}.section .grid-container .grid-item[style*="grid-column: span 2"][data-v-28c08b76]{width:calc(100% - .625rem);margin-right:.625rem}.section .grid-container .grid-item.primary[data-v-28c08b76]{background:linear-gradient(135deg,#4cd964,#3ac555)}.section .grid-container .grid-item.primary[data-v-28c08b76]:active{background:linear-gradient(135deg,#3ac555,#2fb548)}.section .grid-container .grid-item.warning[data-v-28c08b76]{background:linear-gradient(135deg,#ff9500,#ff8000)}.section .grid-container .grid-item.warning[data-v-28c08b76]:active{background:linear-gradient(135deg,#ff8000,#e67300)}.section .grid-container .grid-item[data-v-28c08b76]:active{transform:scale(.98)}

File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/cache/wgt/__UNI__65C1C73/pages/index/offline/check-order.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/cache/wgt/__UNI__65C1C73/pages/index/wms/bad-in.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/cache/wgt/__UNI__65C1C73/pages/index/wms/bad-out-order.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/cache/wgt/__UNI__65C1C73/pages/index/wms/location-order-list.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/cache/wgt/__UNI__65C1C73/pages/index/wms/location-order.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/cache/wgt/__UNI__65C1C73/pages/index/wms/location-select.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/cache/wgt/__UNI__65C1C73/pages/index/wms/order-query-list.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/cache/wgt/__UNI__65C1C73/pages/index/wms/order-query.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/cache/wgt/__UNI__65C1C73/pages/index/wms/speedy-check.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/cache/wgt/__UNI__65C1C73/pages/index/wms/task-detail.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/cache/wgt/__UNI__65C1C73/pages/my/page/warehouse.css


File diff ditekan karena terlalu besar
+ 0 - 1
unpackage/dist/build/app-plus/app-config-service.js


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/dist/build/app-plus/app-service.js


+ 1 - 1
unpackage/dist/build/app-plus/manifest.json

@@ -171,7 +171,7 @@
     "uni-app": {
       "control": "uni-v3",
       "vueVersion": "3",
-      "compilerVersion": "4.65",
+      "compilerVersion": "4.66",
       "nvueCompiler": "uni-app",
       "renderer": "auto",
       "nvue": {

File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/dist/build/app-plus/pages/book/index.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/dist/build/app-plus/pages/index/audit/confirm-receipt.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/dist/build/app-plus/pages/index/audit/express-order.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/dist/build/app-plus/pages/index/audit/scan-order.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/dist/build/app-plus/pages/index/detail/batch-audit.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/dist/build/app-plus/pages/index/detail/book-audit.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/dist/build/app-plus/pages/index/detail/index.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/dist/build/app-plus/pages/index/entry/commodity-scan.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/dist/build/app-plus/pages/index/entry/scan-book.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/dist/build/app-plus/pages/index/express/quick-check.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/dist/build/app-plus/pages/index/express/quick-unpack.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/dist/build/app-plus/pages/index/express/route-exception.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/dist/build/app-plus/pages/index/express/transfer-sign.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/dist/build/app-plus/pages/index/express/warehouse-sign.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/dist/build/app-plus/pages/index/express/weight-modify.css


+ 1 - 1
unpackage/dist/build/app-plus/pages/index/index.css

@@ -1 +1 @@
-.operation-container[data-v-5ed4a2b1]{padding:.625rem;box-sizing:border-box}.section[data-v-5ed4a2b1]{margin-bottom:.9375rem;background:#fff;border-radius:.5rem;padding:.625rem;padding-right:0;box-shadow:0 .0625rem .375rem rgba(0,0,0,.05)}.section .section-title[data-v-5ed4a2b1]{font-size:1.5625rem;font-weight:600;color:#333;padding:.625rem;padding-top:0;border-bottom:.0625rem solid #f0f0f0;margin-bottom:.625rem}.section .grid-container[data-v-5ed4a2b1]{display:flex;flex-wrap:wrap;padding:.3125rem}.section .grid-container .grid-item[data-v-5ed4a2b1]{width:calc(50% - .625rem);min-height:4.625rem;display:flex;align-items:center;justify-content:center;text-align:center;padding:.625rem .9375rem;line-height:1.875rem;font-size:1.5625rem;border-radius:.375rem;color:#fff;transition:all .3s;white-space:pre-wrap;box-sizing:border-box;margin-right:.625rem;margin-bottom:.625rem}.section .grid-container .grid-item[style*="grid-column: span 2"][data-v-5ed4a2b1]{width:calc(100% - .625rem);margin-right:.625rem}.section .grid-container .grid-item.primary[data-v-5ed4a2b1]{background:linear-gradient(135deg,#4cd964,#3ac555)}.section .grid-container .grid-item.primary[data-v-5ed4a2b1]:active{background:linear-gradient(135deg,#3ac555,#2fb548)}.section .grid-container .grid-item.warning[data-v-5ed4a2b1]{background:linear-gradient(135deg,#ff9500,#ff8000)}.section .grid-container .grid-item.warning[data-v-5ed4a2b1]:active{background:linear-gradient(135deg,#ff8000,#e67300)}.section .grid-container .grid-item[data-v-5ed4a2b1]:active{transform:scale(.98)}
+.operation-container[data-v-28c08b76]{padding:.625rem;box-sizing:border-box}.section[data-v-28c08b76]{margin-bottom:.9375rem;background:#fff;border-radius:.5rem;padding:.625rem;padding-right:0;box-shadow:0 .0625rem .375rem rgba(0,0,0,.05)}.section .section-title[data-v-28c08b76]{font-size:1.5625rem;font-weight:600;color:#333;padding:.625rem;padding-top:0;border-bottom:.0625rem solid #f0f0f0;margin-bottom:.625rem}.section .grid-container[data-v-28c08b76]{display:flex;flex-wrap:wrap;padding:.3125rem}.section .grid-container .grid-item[data-v-28c08b76]{width:calc(50% - .625rem);min-height:4.625rem;display:flex;align-items:center;justify-content:center;text-align:center;padding:.625rem .9375rem;line-height:1.875rem;font-size:1.5625rem;border-radius:.375rem;color:#fff;transition:all .3s;white-space:pre-wrap;box-sizing:border-box;margin-right:.625rem;margin-bottom:.625rem}.section .grid-container .grid-item[style*="grid-column: span 2"][data-v-28c08b76]{width:calc(100% - .625rem);margin-right:.625rem}.section .grid-container .grid-item.primary[data-v-28c08b76]{background:linear-gradient(135deg,#4cd964,#3ac555)}.section .grid-container .grid-item.primary[data-v-28c08b76]:active{background:linear-gradient(135deg,#3ac555,#2fb548)}.section .grid-container .grid-item.warning[data-v-28c08b76]{background:linear-gradient(135deg,#ff9500,#ff8000)}.section .grid-container .grid-item.warning[data-v-28c08b76]:active{background:linear-gradient(135deg,#ff8000,#e67300)}.section .grid-container .grid-item[data-v-28c08b76]:active{transform:scale(.98)}

File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/dist/build/app-plus/pages/index/offline/check-order.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/dist/build/app-plus/pages/index/wms/bad-in.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/dist/build/app-plus/pages/index/wms/bad-out-order.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/dist/build/app-plus/pages/index/wms/location-order-list.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/dist/build/app-plus/pages/index/wms/location-order.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/dist/build/app-plus/pages/index/wms/location-select.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/dist/build/app-plus/pages/index/wms/order-query-list.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/dist/build/app-plus/pages/index/wms/order-query.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/dist/build/app-plus/pages/index/wms/speedy-check.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/dist/build/app-plus/pages/index/wms/task-detail.css


File diff ditekan karena terlalu besar
+ 0 - 0
unpackage/dist/build/app-plus/pages/my/page/warehouse.css


+ 127 - 118
unpackage/dist/dev/app-plus/app-service.js

@@ -5042,7 +5042,7 @@ if (uni.restoreGlobal) {
         }
       ]);
       const handleNavigation = (path) => {
-        uni.navigateTo({
+        uni.redirectTo({
           url: path,
           fail: () => {
             uni.showToast({
@@ -6107,7 +6107,7 @@ if (uni.restoreGlobal) {
           });
           return;
         }
-        uni.navigateTo({
+        uni.redirectTo({
           url: item.path
         });
       };
@@ -9411,7 +9411,7 @@ This will fail in production.`);
         }
       ]);
       const navigateToDetail = (path) => {
-        uni.navigateTo({
+        uni.redirectTo({
           url: path
         });
       };
@@ -10888,7 +10888,7 @@ This will fail in production.`);
     );
   }
   const __easycom_0$7 = /* @__PURE__ */ _export_sfc(_sfc_main$1I, [["render", _sfc_render$1H], ["__scopeId", "data-v-c8491d64"], ["__file", "/Users/ylong/Documents/2025项目/书嗨/book-hi-pda/uni_modules/uview-plus/components/u-upload/u-upload.vue"]]);
-  const baseUrl = "https://bk.shuhi.com";
+  const baseUrl = "https://bpi.shuhi.com";
   function initRequest() {
     formatAppLog("log", "at config/request.js:6", "初始化了 http 请求代码");
     uni.$u.http.setConfig((config2) => {
@@ -12994,7 +12994,7 @@ This will fail in production.`);
     setup(__props, { expose: __expose }) {
       __expose();
       function goScan() {
-        uni.navigateTo({
+        uni.redirectTo({
           url: "/pages/index/express/scan"
         });
       }
@@ -14293,7 +14293,7 @@ This will fail in production.`);
       const props2 = __props;
       const emit2 = __emit;
       const handleCheckLogistics = () => {
-        uni.navigateTo({
+        uni.redirectTo({
           url: `/pages/index/express/logistics-detail?orderId=${props2.order.orderId}&status=${props2.order.checkStatus}&id=${props2.order.id}`
         });
       };
@@ -15683,7 +15683,7 @@ This will fail in production.`);
           return;
         }
         uni.setStorageSync("isbnList", isbnList.value);
-        uni.navigateTo({
+        uni.redirectTo({
           url: "/pages/index/audit/isbn-order"
         });
       };
@@ -15915,12 +15915,12 @@ This will fail in production.`);
         });
       };
       const handleAudit = () => {
-        uni.navigateTo({
+        uni.redirectTo({
           url: `/pages/index/detail/index?id=${props2.item.orderId}`
         });
       };
       const handleView = () => {
-        uni.navigateTo({
+        uni.redirectTo({
           url: `/pages/index/detail/index?id=${props2.item.orderId}&type=2`
         });
       };
@@ -16182,7 +16182,7 @@ This will fail in production.`);
         }).then((res2) => {
           if (res2.code == 200) {
             uni.setStorageSync("orderDetail", res2.data);
-            uni.navigateTo({
+            uni.redirectTo({
               url: `/pages/index/detail/index?id=${res2.data.orderId}`
             });
           } else {
@@ -17760,7 +17760,7 @@ This will fail in production.`);
       __expose();
       const props2 = __props;
       const handleUserOrders = () => {
-        uni.navigateTo({
+        uni.redirectTo({
           url: `/pages/index/detail/user-orders?userId=${props2.detail.userId}`
         });
       };
@@ -18683,7 +18683,7 @@ This will fail in production.`);
           uni.$u.ttsModule.speak("订单已审核完成");
           return;
         }
-        uni.navigateTo({
+        uni.redirectTo({
           url: `/pages/index/detail/book-audit?isbn=${book.isbn}&orderId=${props2.detail.orderId}`
         });
         uni.setStorageSync("auditBook", book);
@@ -19436,7 +19436,7 @@ This will fail in production.`);
             let text = `请注意${isbnStr}需要取出`;
             uni.$u.ttsModule.speak(text);
           }
-          uni.navigateTo({
+          uni.redirectTo({
             url: `/pages/index/detail/book-audit?isbn=${isbn}&orderId=${orderDetail.value.orderId}`
           });
           uni.setStorageSync("auditBook", book);
@@ -19952,7 +19952,7 @@ This will fail in production.`);
             }
             scannedBooks.value.push(isbn);
             uni.setStorageSync("scannedBooks", scannedBooks.value);
-            uni.navigateTo({
+            uni.redirectTo({
               url: `/pages/index/detail/batch-audit?orderId=${orderId.value}`
             });
           }
@@ -26230,84 +26230,6 @@ This will fail in production.`);
     ]);
   }
   const BadItem = /* @__PURE__ */ _export_sfc(_sfc_main$J, [["render", _sfc_render$I], ["__scopeId", "data-v-93494456"], ["__file", "/Users/ylong/Documents/2025项目/书嗨/book-hi-pda/pages/index/wms/components/BadItem.vue"]]);
-  class VolumeTTS {
-    constructor(opts) {
-      __publicField(this, "ttsParams", {
-        lang: "zh-CN",
-        speed: 1,
-        // 将 0-10 转换为 0-1
-        pitch: 1,
-        // 将 0-10 转换为 0-1
-        volume: 1
-      });
-      __publicField(this, "TTSModule");
-      __publicField(this, "platform", uni.getSystemInfoSync().platform);
-      let audioConfig = uni.getStorageSync("audioConfig");
-      if (opts) {
-        this.ttsParams = opts;
-      } else if (audioConfig) {
-        this.ttsParams = {
-          lang: "zh-CN",
-          speed: audioConfig.audioSpeed / 10,
-          pitch: audioConfig.audioVolume,
-          volume: 1
-        };
-      }
-      this.init();
-    }
-    init() {
-      this.TTSModule = requireNativePlugin("nrb-tts-plugin");
-      this.TTSModule && this.TTSModule.init(
-        {
-          lang: "zh",
-          country: "CN"
-        },
-        (res2) => {
-          if (res2.success == 0) {
-            formatAppLog("log", "at utils/VolumeTTS.js:39", "TTS初始化成功");
-          }
-        }
-      );
-    }
-    //加一个text的预处理,将text中的数字替换成 零一二三四五六七八九十
-    preprocessText(text) {
-      const digitMap = {
-        0: "零",
-        1: "一",
-        2: "二",
-        3: "三",
-        4: "四",
-        5: "五",
-        6: "六",
-        7: "七",
-        8: "八",
-        9: "九"
-      };
-      return text.replace(/\d+/g, (match) => {
-        return match.split("").map((digit) => digitMap[digit] || digit).join("");
-      });
-    }
-    speak(text) {
-      text = this.preprocessText(text);
-      let opts = this.platform == "ios" ? {
-        rate: this.ttsParams.speed,
-        lang: "zh-CN",
-        volume: 1
-      } : {
-        pitch: this.ttsParams.pitch,
-        speechRate: this.ttsParams.speed,
-        queueMode: 1
-      };
-      this.TTSModule.speak(text, opts, (e) => {
-        formatAppLog("log", "at utils/VolumeTTS.js:98", e, "读取成功");
-      });
-    }
-    stop() {
-      if (this.TTSModule) {
-        this.TTSModule.stop();
-      }
-    }
-  }
   const _sfc_main$I = {
     __name: "RemarkDialog",
     props: {
@@ -26572,7 +26494,7 @@ This will fail in production.`);
           uni.$u.ttsModule.speak("请先选择仓库");
           return;
         }
-        uni.navigateTo({
+        uni.redirectTo({
           url: "/pages/index/wms/location-select?godownId=" + formData.godownId + "&positionCode=" + formData.positionCode
         });
       }
@@ -26615,7 +26537,7 @@ This will fail in production.`);
         currentRemark.value = "";
       };
       const selectWarehouse = () => {
-        uni.navigateTo({
+        uni.redirectTo({
           url: "/pages/index/wms/warehouse-select?godownId=" + formData.godownId
         });
       };
@@ -26623,9 +26545,7 @@ This will fail in production.`);
         return onShow;
       }, get onUnload() {
         return onUnload;
-      }, BadItem, get VolumeTTS() {
-        return VolumeTTS;
-      }, RemarkDialog };
+      }, BadItem, RemarkDialog };
       Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
       return __returned__;
     }
@@ -26819,7 +26739,7 @@ This will fail in production.`);
         uni.$u.playClickSound();
       }
       const onSearch = () => {
-        uni.navigateTo({
+        uni.redirectTo({
           url: `/pages/index/wms/bad-out-order?searchText=${searchText.value}&searchType=${searchType.value}`
         });
       };
@@ -27406,7 +27326,7 @@ This will fail in production.`);
               try {
                 const response = await uni.$u.http.post(`/app/appstock/lockStockTask?taskCode=${task.taskCode}`);
                 if (response.code === 200) {
-                  uni.navigateTo({
+                  uni.redirectTo({
                     url: `/pages/index/wms/task-detail?taskCode=${task.taskCode}`
                   });
                 } else {
@@ -27542,7 +27462,7 @@ This will fail in production.`);
           uni.$u.toast("请输入快递单号/订单编号");
           return;
         }
-        uni.navigateTo({
+        uni.redirectTo({
           url: `/pages/index/wms/order-query-list?id=${query.search}`
         });
       };
@@ -28263,7 +28183,7 @@ This will fail in production.`);
       const positionCode = vue.ref("");
       const onSearch = () => {
         if (positionCode.value) {
-          uni.navigateTo({
+          uni.redirectTo({
             url: "/pages/index/wms/location-order-list?positionCode=" + positionCode.value
           });
         } else {
@@ -28360,7 +28280,7 @@ This will fail in production.`);
         emit2("select", props2.item);
       };
       const handleQuickJump = () => {
-        uni.navigateTo({
+        uni.redirectTo({
           url: `/pages/index/wms/order-query-list?id=${props2.item.orderId}`
         });
       };
@@ -28975,7 +28895,7 @@ This will fail in production.`);
           uni.$u.toast("请选择库位");
           return;
         }
-        uni.navigateTo({
+        uni.redirectTo({
           url: "/pages/index/wms/speedy-check-add?location=" + location2.value
         });
       }
@@ -30579,7 +30499,7 @@ This will fail in production.`);
       const ttsModule2 = vue.ref(null);
       const taskCode = vue.ref("");
       onUnload(() => {
-        ttsModule2.value.stop();
+        uni.$u.ttsModule.stop();
         uni.$u.cleanupOnPageUnload();
       });
       function playGlobalSound() {
@@ -30591,7 +30511,7 @@ This will fail in production.`);
         if (currentTask.value < totalTasks.value) {
           currentTask.value++;
           if (currentTask.value == totalTasks.value) {
-            ttsModule2.value.speak("任务完成");
+            uni.$u.ttsModule.speak("任务完成");
           } else {
             curTaskInfo.value = orderList.value[currentTask.value];
             badList.value = curTaskInfo.value.detailVoList || [];
@@ -30622,7 +30542,7 @@ This will fail in production.`);
             orderList.value[currentTask.value] = curTaskInfo.value;
             handleNextTask();
             isFirstScan.value = false;
-            ttsModule2.value.speak("下架成功");
+            uni.$u.ttsModule.speak("下架成功");
           } else {
             uni.showToast({
               title: res2.msg,
@@ -30654,7 +30574,7 @@ This will fail in production.`);
             playGlobalSound();
             if (res2.confirm) {
               uni.navigateBack();
-              ttsModule2.value.speak("任务已提交");
+              uni.$u.ttsModule.speak("任务已提交");
               unlockTask();
             }
           }
@@ -30668,7 +30588,7 @@ This will fail in production.`);
             playGlobalSound();
             if (res2.confirm) {
               uni.navigateBack();
-              ttsModule2.value.speak("任务已放弃");
+              uni.$u.ttsModule.speak("任务已放弃");
               unlockTask();
             }
           }
@@ -30676,7 +30596,7 @@ This will fail in production.`);
       }
       let isFirstScan = vue.ref(false);
       const checkScanText = (scanText) => {
-        formatAppLog("log", "at pages/index/wms/task-detail.vue:228", scanText, "scanText");
+        formatAppLog("log", "at pages/index/wms/task-detail.vue:227", scanText, "scanText");
         let length = scanText ? scanText.length : 0;
         let isPositionCode = scanText.indexOf("-") > -1 && length == 9;
         let isWaybillCode = /^(?=.*[A-Z])(?=.*\d)[A-Z0-9]+$/.test(scanText);
@@ -30694,7 +30614,7 @@ This will fail in production.`);
           }
         }
         if (!isFirstScan.value) {
-          ttsModule2.value.speak("请先校验库位号");
+          uni.$u.ttsModule.speak("请先校验库位号");
           return;
         }
         if (isWaybillCode || isOrderId) {
@@ -30728,7 +30648,6 @@ This will fail in production.`);
       onLoad((opts) => {
         taskCode.value = opts.taskCode;
         onSearch();
-        ttsModule2.value = new VolumeTTS();
         uni.$u.useGlobalEvent((e) => {
           if (e.barcode) {
             searchText.value = e.barcode;
@@ -30743,9 +30662,7 @@ This will fail in production.`);
         return isFirstScan;
       }, set isFirstScan(v) {
         isFirstScan = v;
-      }, checkScanText, openScan, ref: vue.ref, onMounted: vue.onMounted, BadOutCard, get VolumeTTS() {
-        return VolumeTTS;
-      }, get onLoad() {
+      }, checkScanText, openScan, ref: vue.ref, onMounted: vue.onMounted, BadOutCard, get onLoad() {
         return onLoad;
       }, get onUnload() {
         return onUnload;
@@ -31885,6 +31802,94 @@ This will fail in production.`);
     );
   }
   const __easycom_4 = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["render", _sfc_render$a], ["__scopeId", "data-v-7b84e269"], ["__file", "/Users/ylong/Documents/2025项目/书嗨/book-hi-pda/uni_modules/uview-plus/components/u-slider/u-slider.vue"]]);
+  class VolumeTTS {
+    constructor(opts) {
+      __publicField(this, "ttsParams", {
+        lang: "zh-CN",
+        speed: 1,
+        // 将 0-10 转换为 0-1
+        pitch: 1,
+        // 将 0-10 转换为 0-1
+        volume: 1
+      });
+      __publicField(this, "TTSModule");
+      __publicField(this, "platform", uni.getSystemInfoSync().platform);
+      let audioConfig = uni.getStorageSync("audioConfig");
+      if (opts) {
+        this.ttsParams = opts;
+      } else if (audioConfig) {
+        this.ttsParams = {
+          lang: "zh-CN",
+          speed: audioConfig.audioSpeed / 10,
+          pitch: audioConfig.audioVolume,
+          volume: 1
+        };
+      }
+      this.init();
+    }
+    init() {
+      this.TTSModule = requireNativePlugin("nrb-tts-plugin");
+      this.TTSModule && this.TTSModule.init(
+        {
+          lang: "zh",
+          country: "CN"
+        },
+        (res2) => {
+          if (res2.success == 0) {
+            formatAppLog("log", "at utils/VolumeTTS.js:39", "TTS初始化成功");
+          }
+        }
+      );
+    }
+    //加一个text的预处理,将text中的数字替换成 零一二三四五六七八九十
+    preprocessText(text) {
+      const digitMap = {
+        0: "零",
+        1: "一",
+        2: "二",
+        3: "三",
+        4: "四",
+        5: "五",
+        6: "六",
+        7: "七",
+        8: "八",
+        9: "九"
+      };
+      return text.replace(/\d+/g, (match) => {
+        return match.split("").map((digit) => digitMap[digit] || digit).join("");
+      });
+    }
+    speak(text) {
+      text = this.preprocessText(text);
+      let opts = this.platform == "ios" ? {
+        rate: this.ttsParams.speed,
+        lang: "zh-CN",
+        volume: 1
+      } : {
+        pitch: this.ttsParams.pitch,
+        speechRate: this.ttsParams.speed,
+        queueMode: 1
+      };
+      this.TTSModule.speak(text, opts, (e) => {
+        formatAppLog("log", "at utils/VolumeTTS.js:98", e, "读取成功");
+      });
+    }
+    stop() {
+      if (this.TTSModule) {
+        this.TTSModule.stop();
+      }
+    }
+    destroy() {
+      this.stop();
+      this.TTSModule = null;
+      this.ttsParams = {
+        lang: "zh-CN",
+        speed: 1,
+        pitch: 1,
+        volume: 1
+      };
+    }
+  }
   const _sfc_main$a = {
     __name: "volume",
     setup(__props, { expose: __expose }) {
@@ -31894,8 +31899,8 @@ This will fail in production.`);
         audioStart: "书嗨,不辜负每一个爱书的人",
         audioSpeed: 10,
         audioVolume: 5,
-        "audioPlay": false,
-        "audioClick": false
+        audioPlay: false,
+        audioClick: false
       });
       function changeSpeed(value2) {
         settings.value.audioSpeed = value2;
@@ -31959,7 +31964,7 @@ This will fail in production.`);
             Object.assign(settings, savedSettings);
           }
         } catch (error2) {
-          formatAppLog("error", "at pages/my/page/volume.vue:161", "加载设置失败:", error2);
+          formatAppLog("error", "at pages/my/page/volume.vue:205", "加载设置失败:", error2);
         }
       }
       function playClickSound2() {
@@ -31972,8 +31977,13 @@ This will fail in production.`);
       vue.onMounted(async () => {
         loadSettings();
       });
+      onUnload(() => {
+        tts.value && tts.value.destroy();
+      });
       const __returned__ = { settings, changeSpeed, changeVolume, getVoiceBroadcast, saveVoiceBroadcast, tts, initTTS, stopPlayback, restartApp, loadSettings, playClickSound: playClickSound2, ref: vue.ref, reactive: vue.reactive, onMounted: vue.onMounted, get VolumeTTS() {
         return VolumeTTS;
+      }, get onUnload() {
+        return onUnload;
       } };
       Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
       return __returned__;
@@ -32752,7 +32762,6 @@ This will fail in production.`);
             }
           }
         }
-        useInit();
       });
       onShow(() => {
       });

TEMPAT SAMPAH
unpackage/release/apk/__UNI__65C1C73__20250531174034.apk


TEMPAT SAMPAH
unpackage/release/apk/__UNI__65C1C73__20250531224515.apk


+ 23 - 0
utils/VolumeTTS.js

@@ -105,6 +105,29 @@ class VolumeTTS {
             this.TTSModule.stop();
         }
     }
+
+    destroy() {
+        // 停止当前的语音合成
+        this.stop();
+        
+        // #ifdef H5
+        // H5端取消所有语音合成
+        if ("speechSynthesis" in window) {
+            speechSynthesis.cancel();
+        }
+        // #endif
+        
+        // 清理TTSModule引用
+        this.TTSModule = null;
+        
+        // 重置参数
+        this.ttsParams = {
+            lang: "zh-CN",
+            speed: 1,
+            pitch: 1,
+            volume: 1,
+        };
+    }
 }
 
 export default VolumeTTS;

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini