li.shaoyi 1 年之前
父節點
當前提交
6b96123c74

+ 2 - 2
oem/tss/config/appconfig.json

@@ -1,8 +1,8 @@
 {
   "appId": "com.muchinfo.tss",
   "appName": "TCE",
-  "version": "1.0.4",
-  "versionCode": "100004",
+  "version": "1.0.6",
+  "versionCode": "100006",
   "apiUrl": "http://192.168.31.204:8080/cfg?key=test_204",
   "tradeChannel": "ws",
   "modules": [

+ 10 - 5
package-lock.json

@@ -26,7 +26,7 @@
         "qrcode": "^1.5.1",
         "sortablejs": "^1.15.0",
         "uuid": "^8.3.2",
-        "vant": "^4.5.0",
+        "vant": "^4.9.4",
         "vue": "^3.2.13",
         "vue-class-component": "^8.0.0-0",
         "vue-i18n": "^9.13.1",
@@ -18982,18 +18982,23 @@
       }
     },
     "node_modules/vant": {
-      "version": "4.7.0",
-      "resolved": "https://registry.npmjs.org/vant/-/vant-4.7.0.tgz",
-      "integrity": "sha512-oAKfVVfspsRg4MkemGMFm92MXnZb0h8RyvqonPKQkoCMDbMmZvRYmWDfXmfxOnOXVCW308Cqp5HDoDIlcMc3Ag==",
+      "version": "4.9.4",
+      "resolved": "https://registry.npmjs.org/vant/-/vant-4.9.4.tgz",
+      "integrity": "sha512-dUu3yopMf2a6MkrdBWxGfDIcHmSs/ULgvBkBcfK8gE29QZ/A6kFyhnUzcMU2yklMGUUwAygzx44TPEfhp7hkfQ==",
       "dependencies": {
         "@vant/popperjs": "^1.3.0",
         "@vant/use": "^1.6.0",
-        "@vue/shared": "^3.0.0"
+        "@vue/shared": "^3.4.33"
       },
       "peerDependencies": {
         "vue": "^3.0.0"
       }
     },
+    "node_modules/vant/node_modules/@vue/shared": {
+      "version": "3.4.36",
+      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.36.tgz",
+      "integrity": "sha512-fdPLStwl1sDfYuUftBaUVn2pIrVFDASYerZSrlBvVBfylObPA1gtcWJHy5Ox8jLEJ524zBibss488Q3SZtU1uA=="
+    },
     "node_modules/vary": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",

+ 1 - 1
package.json

@@ -30,7 +30,7 @@
     "qrcode": "^1.5.1",
     "sortablejs": "^1.15.0",
     "uuid": "^8.3.2",
-    "vant": "^4.5.0",
+    "vant": "^4.9.4",
     "vue": "^3.2.13",
     "vue-class-component": "^8.0.0-0",
     "vue-i18n": "^9.13.1",

+ 8 - 3
src/packages/mobile/components/base/uploader/index.vue

@@ -1,9 +1,10 @@
 <template>
     <div class="app-uploader">
-        <span class="app-uploader__button" @click="onClickUpload"></span>
+        <span class="app-uploader__button" @click="onClickUpload" v-if="!hasPermission"></span>
         <Uploader ref="uploaderRef" v-model="fileList" :max-count="maxCount" :max-size="5 * 1024 * 1024"
-            @oversize="onOversize" :after-read="onAfterRead" @delete="onDelete" />
-        <Notify v-model:show="showNotify" :duration="0" title="存储空间/照片权限说明" content="用于在添加、制作、上传、发布、分享、下载、搜索、识别图片和视频等场景中读取和写入相册和文件内容" />
+            @oversize="onOversize" :after-read="onAfterRead" @delete="onDelete" reupload />
+        <Notify v-model:show="showNotify" :duration="0" title="存储空间/照片权限说明"
+            content="用于在添加、制作、上传、发布、分享、下载、搜索、识别图片和视频等场景中读取和写入相册和文件内容" />
     </div>
 </template>
 
@@ -29,6 +30,9 @@ const uploaderRef = ref()
 const showNotify = ref(false)
 const fileList = ref<UploaderFileListItem[]>([])
 
+const storagePermission = globalStore.getAndroidPermissions('READ_EXTERNAL_STORAGE')
+const hasPermission = ref(storagePermission === 1) // 是否已授权存储权限
+
 const onOversize = () => {
     showFailToast('图片大小不能超过 5Mb')
 }
@@ -51,6 +55,7 @@ const onClickUpload = () => {
             break
         }
         case 1: {
+            hasPermission.value = true
             uploaderRef.value.chooseFile()
             break
         }

+ 1 - 1
src/packages/pc/views/market/trade/presell/index.vue

@@ -1,4 +1,4 @@
-<!-- 交易市场-预售转让 -->
+<!-- 交易市场-预售转让(暂无用) -->
 <template>
     <app-auth-component direction="bottom" v-bind="{ code }" />
 </template>

+ 14 - 45
src/packages/pc/views/market/trade/pricing/index.vue

@@ -1,37 +1,41 @@
 <!-- 交易市场 - 挂牌点价 -->
 <template>
-    <app-table :data="tableList" v-model:columns="tableColumns" @row-click="onRowClick" showIndex>
+    <app-table :data="futuresStore.marketGoodsList" v-model:columns="tableColumns" @row-click="onRowClick" showIndex>
         <!-- 当前价 -->
         <template #last="{ row }">
-            <span :class="row.lastColor">{{ row.last }}</span>
+            <span :class="row.lastColor">{{ handleNumberValue(formatDecimal(row.last, row.decimalplace)) }}</span>
         </template>
         <!-- 涨跌 -->
         <template #rise="{ row }">
-            <span :class="row.lastColor">{{ row.rise }}</span>
+            <span :class="row.lastColor">{{ formatDecimal(row.rise, row.decimalplace) }}</span>
         </template>
         <!-- 幅度 -->
         <template #change="{ row }">
-            <span :class="row.lastColor">{{ row.change }}</span>
+            <span :class="row.lastColor">{{ parsePercent(row.change) }}</span>
         </template>
         <!-- 今开 -->
         <template #opened="{ row }">
-            <span :class="row.openedColor">{{ row.opened }}</span>
+            <span :class="row.openedColor">{{ handleNumberValue(formatDecimal(row.opened, row.decimalplace)) }}</span>
         </template>
         <!-- 最低 -->
         <template #lowest="{ row }">
-            <span :class="row.lowestColor">{{ row.lowest }}</span>
+            <span :class="row.lowestColor">{{ handleNumberValue(formatDecimal(row.opened, row.decimalplace)) }}</span>
         </template>
         <!-- 最高 -->
         <template #highest="{ row }">
-            <span :class="row.highestColor">{{ row.highest }}</span>
+            <span :class="row.highestColor">{{ handleNumberValue(formatDecimal(row.lowest, row.decimalplace)) }}</span>
         </template>
         <!-- 买价 -->
         <template #ask="{ row }">
-            <span :class="row.askColor">{{ row.ask }}</span>
+            <span :class="row.askColor">{{ handleNumberValue(formatDecimal(row.ask, row.decimalplace)) }}</span>
         </template>
         <!-- 卖价 -->
         <template #bid="{ row }">
-            <span :class="row.bidColor">{{ row.bid }}</span>
+            <span :class="row.bidColor">{{ handleNumberValue(formatDecimal(row.bid, row.decimalplace)) }}</span>
+        </template>
+        <!-- 振幅 -->
+        <template #amplitude="{ value }">
+            <span>{{ parsePercent(value) }}</span>
         </template>
         <template #footer>
             <component ref="componentRef" v-bind="{ goodsId: futuresStore.selectedGoodsId }"
@@ -41,15 +45,12 @@
 </template>
 
 <script lang="ts" setup>
-import { shallowRef, onMounted, onUnmounted, defineAsyncComponent, computed } from 'vue'
+import { shallowRef, onMounted, onUnmounted, defineAsyncComponent } from 'vue'
 import { useComponent } from '@/hooks/component'
 import { parsePercent, handleNumberValue, formatDecimal } from '@/filters'
 import { useFuturesStore, useGlobalStore } from '@/stores'
-import { ETradeMode } from '@/constants/client'
-import quoteSocket from '@/services/websocket/quote'
 import AppTable from '@pc/components/base/table/index.vue'
 
-const subscribe = quoteSocket.createSubscribe()
 const futuresStore = useFuturesStore()
 const globalStore = useGlobalStore()
 
@@ -59,36 +60,6 @@ const componentMap = new Map<string, unknown>([
     ['detail', defineAsyncComponent(() => import('@pc/components/modules/goods-detail/index.vue'))], // 详情
 ])
 
-const dataList = computed(() => {
-    return futuresStore.getGoodsListByTradeMode(ETradeMode.TRADEMODE_MARKETMAKE)
-}) 
-
-const tableList = computed(() => {
-    return dataList.value.map((item ) => {
-        const quote = futuresStore.getGoodsQuote(item.goodscode)
-        const { lastColor, openedColor, lowestColor, highestColor, last = 0, presettle = 0, rise = 0, change, amplitude, highest = 0, lowest = 0, opened = 0, ask = 0, bid = 0, bidColor, askColor, decimalplace } = quote.value ?? {}
-        return {
-            ...item,
-            lastColor,
-            openedColor,
-            lowestColor,
-            highestColor,
-            last: handleNumberValue(formatDecimal(last, decimalplace)),
-            rise: handleNumberValue(formatDecimal(rise, decimalplace)),
-            change: parsePercent(change),
-            opened: handleNumberValue(formatDecimal(opened, decimalplace)),
-            presettle: handleNumberValue(formatDecimal(presettle, decimalplace)),
-            lowest: handleNumberValue(formatDecimal(lowest, decimalplace)),
-            highest: handleNumberValue(formatDecimal(highest, decimalplace)),
-            amplitude: parsePercent(amplitude),
-            ask: handleNumberValue(formatDecimal(ask, decimalplace)),
-            bid: handleNumberValue(formatDecimal(bid, decimalplace)),
-            bidColor,
-            askColor
-        }
-    })
-})
-
 const tableColumns = shallowRef<Model.TableColumn[]>([
     { field: 'goodsname', label: 'quote.goodsname' },
     { field: 'last', label: 'quote.last' },
@@ -115,6 +86,4 @@ onMounted(() => {
 onUnmounted(() => {
     globalStore.showPricingListing = false
 })
-
-onUnmounted(() => subscribe.stop())
 </script>

+ 5 - 1
src/services/websocket/package/package50/proto.ts

@@ -1,4 +1,5 @@
 // protobufjs 版本只用能 6.x 或以下
+// https://chinabigpan.github.io/protobuf_docs_zh_cn/routes/examples.html
 const $protoRoot = require('@public/proto/mtp.js')
 
 /**
@@ -20,5 +21,8 @@ export async function encodeProto<T>(protoName: string, payload: T): Promise<Uin
  */
 export async function decodeProto<T>(protoName: string, content?: Uint8Array): Promise<T> {
     const build = await $protoRoot.lookup(protoName)
-    return build.decode(content)
+    // 注意:返回的结果是 Message 对象,直接使用可能会有数据结构问题
+    const message = build.decode(content)
+    // 使用 toJSON() 转换成普通对象
+    return message.toJSON()
 }