li.shaoyi 2 yıl önce
ebeveyn
işleme
383e66a274
27 değiştirilmiş dosya ile 606 ekleme ve 111 silme
  1. 11 1
      doc/android/fxgl.txt
  2. 2 2
      oem/gstj/manifest.json
  3. 1 1
      oem/sbyj/config/appconfig.json
  4. 1 1
      oem/sbyj/manifest.json
  5. 24 0
      src/packages/mobile/views/goods/detail/components/listing/Index.vue
  6. 2 2
      src/packages/pc/components/layouts/header/index.vue
  7. 1 1
      src/packages/pc/views/market/trade/goods/list/listing/index.less
  8. 23 1
      src/packages/pc/views/market/trade/goods/list/listing/index.vue
  9. 7 34
      src/packages/qdhs/router/index.ts
  10. 12 0
      src/packages/qdhs/views/bank/wallet/Index.vue
  11. 144 0
      src/packages/qdhs/views/bank/wallet/components/deposit/Index.vue
  12. 35 0
      src/packages/qdhs/views/bank/wallet/components/deposit/index.less
  13. 106 0
      src/packages/qdhs/views/bank/wallet/components/withdraw/Index.vue
  14. 22 0
      src/packages/qdhs/views/bank/wallet/components/withdraw/index.less
  15. 62 0
      src/packages/qdhs/views/goods/detail/index.vue
  16. 115 0
      src/packages/qdhs/views/goods/list/index.vue
  17. 6 12
      src/packages/qdhs/views/home/Index.vue
  18. 1 41
      src/packages/qdhs/views/home/main/Index.vue
  19. 4 10
      src/packages/qdhs/views/mine/Index.vue
  20. 2 0
      src/packages/sbyj/views/delivery/components/processing/list/index.vue
  21. 1 1
      src/packages/sbyj/views/home/main/index.less
  22. 2 2
      src/packages/sbyj/views/market/list/index.vue
  23. 1 1
      src/packages/sbyj/views/order/detail/index.vue
  24. 1 1
      src/packages/sbyj/views/order/list/components/supplement-deposit/index.vue
  25. 16 0
      src/stores/modules/futures.ts
  26. 2 0
      src/types/model/goods.d.ts
  27. 2 0
      src/types/model/market.d.ts

+ 11 - 1
doc/android/fxgl.txt

@@ -16,7 +16,11 @@ http://103.40.249.126:18280/cfg?key=mtp_20
 
 
 甘肃碳交
+实盘
 cn.muchinfo.gstj_release_v1.0.0.apk
+http://8.130.69.63:8280/cfg?key=gstj
+模拟盘
+cn.muchinfo.gstj_demo_v1.0.0.apk
 http://8.130.36.162:8280/cfg?key=mtp_20
 
 
@@ -40,4 +44,10 @@ http://122.5.68.230:53005/cfg?key=zrwyt_sp
 
 青岛海商
 cn.muchinfo.qdhs_demo_v1.0.0.apk
-http://47.104.156.140:8280/cfg?key=qdsp_demo
+http://47.104.156.140:8280/cfg?key=qdsp_demo
+
+
+探茶
+实盘
+cn.muchinfo.tc_release_v1.0.0.apk
+http://39.108.156.35:8280/cfg?key=tc_sp

+ 2 - 2
oem/gstj/manifest.json

@@ -5,9 +5,9 @@
     "name" : "甘肃碳交",
     /*应用名称,程序桌面图标名称*/
     "version" : {
-        "name" : "1.0.0",
+        "name" : "1.0.4",
         /*应用版本名称*/
-        "code" : 100000
+        "code" : 100004
     },
     "description" : "",
     /*应用描述信息*/

+ 1 - 1
oem/sbyj/config/appconfig.json

@@ -1,5 +1,5 @@
 {
   "version": "1.0.0",
   "versionCode": "100000",
-  "apiUrl": "http://218.17.158.45:25040/cfg?key=test_171"
+  "apiUrl": "http://218.17.158.45:25040/cfg?key=test_yjhj"
 }

+ 1 - 1
oem/sbyj/manifest.json

@@ -2,7 +2,7 @@
     "@platforms" : [ "android", "iPhone", "iPad" ],
     "id" : "H5E4A9458",
     /*应用的标识*/
-    "name" : "多元世纪",
+    "name" : "水贝亿爵演示版",
     /*应用名称,程序桌面图标名称*/
     "version" : {
         "name" : "1.0.0",

+ 24 - 0
src/packages/mobile/views/goods/detail/components/listing/Index.vue

@@ -28,6 +28,11 @@
                             </div>
                         </template>
                     </Field>
+                    <Field label="可买/卖量">
+                        <template #input>
+                            <span>{{ enableQty }}</span>
+                        </template>
+                    </Field>
                     <Field label="可用资金">
                         <template #input>
                             <span>{{ accountStore.currentAccount.avaiableMoney?.toFixed(2) }}</span>
@@ -108,6 +113,25 @@ const priceStep = computed(() => {
     return 1
 })
 
+// 订立可用数量
+const enableQty = computed(() => {
+    const { avaiableMoney = 0 } = accountStore.currentAccount
+    const { marketmarginalgorithm = 0, marketmarginvalue = 0, last = 0, presettle = 0, agreeunit = 0 } = quote.value ?? {}
+
+    const fixed = agreeunit * marketmarginvalue
+    const ratio = fixed * (last || presettle)
+
+    if (fixed && ratio) {
+        if (marketmarginalgorithm === 1) {
+            return Math.trunc(avaiableMoney / ratio)
+        }
+        if (marketmarginalgorithm === 2) {
+            return Math.trunc(avaiableMoney / fixed)
+        }
+    }
+    return 0
+})
+
 // 买方向持仓数量
 const buyQty = computed(() => getOrderQty(BuyOrSell.Buy, props.goodsCode))
 

+ 2 - 2
src/packages/pc/components/layouts/header/index.vue

@@ -10,7 +10,7 @@
                 <el-badge type="danger" :is-dot="noticeStore.unreadList.length > 0">
                     <app-icon icon="g-icon--notice" @click="openComponent('notice')" />
                 </el-badge>
-                <app-icon icon="Tickets" @click="openComponent('report')" />
+                <!-- <app-icon icon="Tickets" @click="openComponent('report')" /> -->
                 <app-icon icon="Setting" @click="openComponent('setting')" />
                 <span class="g-icon--minimize" @click="exitFullSreen" v-if="fullScreen"></span>
                 <span class="g-icon--maximize" @click="setFullSreen" v-else></span>
@@ -80,7 +80,7 @@ const exitFullSreen = () => {
 onMounted(() => {
     /// 如果未同意 或者跨天
     if (!localData.getValue('isReportAgree') || diffDays(localData.getValue('reportTime')) > 0) {
-        openComponent('report')
+        //openComponent('report')
     }
     // 监听全屏变化
     window.addEventListener('fullscreenchange', () => {

+ 1 - 1
src/packages/pc/views/market/trade/goods/list/listing/index.less

@@ -28,7 +28,7 @@
 
         .header-title {
             text-align: center;
-            margin-bottom: 15px;
+            margin-bottom: 10px;
         }
 
         .row-price {

+ 23 - 1
src/packages/pc/views/market/trade/goods/list/listing/index.vue

@@ -43,6 +43,7 @@
                         <el-radio-group size="small" v-model="qtyStep" :validate-event="false" @change="onRadioChange">
                             <el-radio v-for="(value, index) in qtyStepList" :key="index" :label="value" border />
                         </el-radio-group>
+                        <div style="line-height: 1;font-size: 12px;color: #7a8a94;">可用资金订立量:{{ enableQty }}</div>
                     </div>
                 </el-form-item>
                 <el-form-item class="footer-btnbar">
@@ -81,12 +82,14 @@ import { EPriceMode, EListingSelectType, EDelistingType, EBuildType, EValidType,
 import { BuyOrSell, getBuyOrSellList } from '@/constants/order'
 import { useOrder } from '@/business/trade'
 import { usePosition } from '@/business/position'
-import { useFuturesStore, useSettingStore } from '@/stores'
+import { useFuturesStore, useSettingStore, useAccountStore } from '@/stores'
 import Forex from '@pc/components/modules/quote/forex/index.vue'
 import Icon from '@pc/components/base/icon/index.vue'
 
+const accountStore = useAccountStore()
 const settingStore = useSettingStore()
 const futuresStore = useFuturesStore()
+
 const { selectedGoodsId, selectedGoods, marketGoodsList } = futuresStore.$toRefs()
 const { formData, loading, formSubmit } = useOrder()
 const { getOrderQty } = usePosition(50)
@@ -107,6 +110,25 @@ const priceStep = computed(() => {
     return 1
 })
 
+// 订立可用数量
+const enableQty = computed(() => {
+    const { avaiableMoney = 0 } = accountStore.currentAccount
+    const { marketmarginalgorithm = 0, marketmarginvalue = 0, last = 0, presettle = 0, agreeunit = 0 } = selectedGoods.value ?? {}
+
+    const fixed = agreeunit * marketmarginvalue
+    const ratio = fixed * (last || presettle)
+
+    if (fixed && ratio) {
+        if (marketmarginalgorithm === 1) {
+            return Math.trunc(avaiableMoney / ratio)
+        }
+        if (marketmarginalgorithm === 2) {
+            return Math.trunc(avaiableMoney / fixed)
+        }
+    }
+    return 0
+})
+
 // 买方向持仓数量
 const buyQty = computed(() => getOrderQty(BuyOrSell.Buy, selectedGoodsId.value))
 

+ 7 - 34
src/packages/qdhs/router/index.ts

@@ -42,31 +42,14 @@ const routes: Array<RouteRecordRaw> = [
             },
           },
           {
-            path: '50101',
-            name: 'home-50101',
-            component: () => import('@mobile/views/goods/list/Index.vue'),
-            props: {
-              title: '日清挂牌',
-              marketId: 50101
-            }
+            path: 'goods',
+            name: 'home-goods',
+            component: () => import('../views/goods/list/index.vue'),
           },
           {
-            path: '50103',
-            name: 'home-50103',
-            component: () => import('@mobile/views/goods/list/Index.vue'),
-            props: {
-              title: '周清挂牌',
-              marketId: 50103
-            }
-          },
-          {
-            path: '50104',
-            name: 'home-50104',
-            component: () => import('@mobile/views/goods/list/Index.vue'),
-            props: {
-              title: '月清挂牌',
-              marketId: 50104
-            }
+            path: 'trade',
+            name: 'home-trade',
+            component: () => import('../views/goods/detail/index.vue'),
           },
           {
             path: 'mine',
@@ -160,16 +143,6 @@ const routes: Array<RouteRecordRaw> = [
     component: Page,
     children: [
       {
-        path: '50102',
-        name: 'goods-50102',
-        component: () => import('@mobile/views/goods/list/Index.vue'),
-        props: {
-          title: '中远期挂牌',
-          marketId: 50102,
-          showBackButton: true
-        }
-      },
-      {
         path: 'detail',
         name: 'goods-detail',
         component: () => import('@mobile/views/goods/detail/Index.vue'),
@@ -188,7 +161,7 @@ const routes: Array<RouteRecordRaw> = [
       {
         path: 'wallet',
         name: 'bank-wallet',
-        component: () => import('@mobile/views/bank/wallet/Index.vue'),
+        component: () => import('../views/bank/wallet/Index.vue'),
       },
       {
         path: 'sign',

+ 12 - 0
src/packages/qdhs/views/bank/wallet/Index.vue

@@ -0,0 +1,12 @@
+<template>
+    <app-view>
+        <template #header>
+            <app-navbar title="出金" />
+        </template>
+        <app-withdraw />
+    </app-view>
+</template>
+
+<script lang="ts" setup>
+import AppWithdraw from '@mobile/views/bank/wallet/components/withdraw/Index.vue'
+</script>

+ 144 - 0
src/packages/qdhs/views/bank/wallet/components/deposit/Index.vue

@@ -0,0 +1,144 @@
+<template>
+    <app-view class="g-form bank-wallet-deposit">
+        <Form ref="formRef" v-if="cusBank.caninamount === 1" class="g-form__container" @submit="formSubmit">
+            <CellGroup inset>
+                <Field type="number" v-model="formData.Amount" label="充值金额" placeholder="请填写充值金额"
+                    :rules="formRules.Amount" />
+                <Field label="凭证" :rules="formRules.filePath">
+                    <template #input>
+                        <app-uploader @success="onUploadSuccess" />
+                    </template>
+                </Field>
+                <template v-for="(item, index) in configs" :key="index">
+                    <Field v-if="item.usabletype === 1 || item.usabletype === userStore.userInfo?.userinfotype"
+                        :name="item.fieldcode" :label="item.fieldname" v-model="item.value"
+                        :placeholder="`请输入${item.fieldname}`" />
+                </template>
+            </CellGroup>
+        </Form>
+        <div class="g-form__bank" v-if="cusBank.caninamount === 0">
+            <span>{{ msg }}</span>
+        </div>
+        <div class="g-form__time">
+            <label>充值提现时间:{{ start }}-{{ end }}</label>
+        </div>
+        <div class="g-form__bank" v-if="false">
+            <table cellspacing="10" cellpadding="0">
+                <tr>
+                    <td>
+                        <span>企业名称:</span>
+                        <span>上海徽行供应链有限公司</span>
+                    </td>
+                    <td>
+                        <button type="button" data-clipboard-text="上海徽行供应链有限公司" v-copy="onCopy">复制</button>
+                    </td>
+                </tr>
+                <tr>
+                    <td colspan="2">
+                        <span>开户银行:</span>
+                        <span>中信银行上海虹口支行</span>
+                    </td>
+                </tr>
+                <tr>
+                    <td>
+                        <span>银行账户:</span>
+                        <span>8110201012101533442</span>
+                    </td>
+                    <td>
+                        <button ref="copy2" type="button" data-clipboard-text="8110201012101533442"
+                            v-copy="onCopy">复制</button>
+                    </td>
+                </tr>
+                <tr>
+                    <td colspan="2">
+                        <span>(汇款备注:预付货款或合同转让款)</span>
+                    </td>
+                </tr>
+                <tr>
+                    <td colspan="2">
+                        <span>电话: 021-63138889, 13681901188</span>
+                    </td>
+                </tr>
+            </table>
+        </div>
+        <template #footer>
+            <div class="g-form__footer inset">
+                <Button round block type="danger" @click="formRef?.submit()">确定</Button>
+            </div>
+        </template>
+    </app-view>
+</template>
+
+<script lang="ts" setup>
+import { shallowRef, ref } from 'vue'
+import { Form, Field, CellGroup, Button, FieldRule, FormInstance, showFailToast, showSuccessToast } from 'vant'
+import { useDoDeposit, useDoCusBankExtendConfigs, useQueryCusBankSignBank } from '@/business/bank'
+import { fullloading, dialog } from '@/utils/vant'
+import { useNavigation } from '@mobile/router/navigation'
+import { useUserStore } from '@/stores'
+import AppUploader from '@mobile/components/base/uploader/index.vue'
+
+const formRef = shallowRef<FormInstance>()
+const { formData, onSubmit } = useDoDeposit()
+const { router } = useNavigation()
+const { getSystemParamValue } = useUserStore()
+const start = getSystemParamValue('012')
+const end = getSystemParamValue('013')
+const msg = getSystemParamValue('302')
+const { configs } = useDoCusBankExtendConfigs(2)
+const certificate_photo_url = ref('')
+const userStore = useUserStore()
+/// 查询托管银行信息
+const { cusBank } = useQueryCusBankSignBank()
+
+// 表单验证规则
+const formRules: { [key in keyof Proto.t2bBankDepositReq | 'filePath']?: FieldRule[] } = {
+    Amount: [{
+        required: true,
+        message: '请填写充值金额',
+    }],
+    filePath: [{
+        message: '请上传转账凭证',
+        validator: () => {
+            return !!certificate_photo_url.value
+        }
+    }]
+}
+
+const onCopy = (status: boolean) => {
+    if (status) {
+        showSuccessToast('复制成功')
+    } else {
+        showFailToast('复制失败')
+    }
+}
+
+const onUploadSuccess = (filePath: string) => {
+    certificate_photo_url.value = filePath
+}
+
+const formSubmit = () => {
+    fullloading((hideLoading) => {
+        const obj: { [key: string]: unknown } = Object.create({})
+        configs.value.forEach((e) => {
+            if (e.value) {
+                obj[e.fieldcode] = e.value
+            }
+        })
+        obj['certificate_photo_url'] = certificate_photo_url.value
+        formData.extend_info = JSON.stringify(obj)
+        onSubmit().then(() => {
+            hideLoading()
+            dialog('充值申请提交成功,请等待审核。').then(() => {
+                router.back()
+            })
+        }).catch(() => {
+            hideLoading('充值失败', 'fail')
+        })
+    })
+}
+</script>
+
+<style lang="less">
+@import './index.less';
+</style>

+ 35 - 0
src/packages/qdhs/views/bank/wallet/components/deposit/index.less

@@ -0,0 +1,35 @@
+.bank-wallet-deposit {
+    .g-form__time {
+        color: #999;
+        padding-left: 15px;
+    }
+
+    .g-form__bank {
+        padding: 16px;
+
+        table {
+            width: 100%;
+            font-size: .24rem;
+            border: 1px dashed #ddd;
+            border-radius: .1rem;
+
+            td {
+                &:not(:first-child) {
+                    text-align: right;
+                }
+
+                span {
+                    &:first-child {
+                        color: #999;
+                    }
+                }
+
+                button {
+                    background-color: #e1e1e1;
+                    border-radius: .1rem;
+                    padding: .04rem .2rem;
+                }
+            }
+        }
+    }
+}

+ 106 - 0
src/packages/qdhs/views/bank/wallet/components/withdraw/Index.vue

@@ -0,0 +1,106 @@
+<template>
+    <app-view class="g-form bank-wallet-withdraw">
+        <Form ref="formRef" v-if="cusBank.canoutamount === 1" class="g-form__container" @submit="formSubmit">
+            <CellGroup inset>
+                <Field class="form-field" type="number" label="提现金额" v-model="formData.Amount" :rules="formRules.Amount">
+                    <template #input>
+                        <input v-model="formData.Amount" placeholder="请填写提现金额" />
+                        <span class="form-field__tips">可出金额:{{ fund.AvailableOutMoney }}</span>
+                    </template>
+                </Field>
+                <Field label="开户银行">
+                    <template #input>
+                        {{ sign.bankname }}
+                    </template>
+                </Field>
+                <Field label="银行卡号">
+                    <template #input>
+                        {{ sign.bankaccountno }}
+                    </template>
+                </Field>
+                <Field label="姓名">
+                    <template #input>
+                        {{ sign.bankaccountname }}
+                    </template>
+                </Field>
+                <template v-for="(item, index) in configs" :key="index">
+                    <Field v-if="item.usabletype === 1 || item.usabletype === userStore.userInfo?.userinfotype"
+                        :name="item.fieldcode" :label="item.fieldname" v-model="item.value"
+                        :placeholder="`请输入${item.fieldname}`" />
+                </template>
+            </CellGroup>
+        </Form>
+        <div class="g-form__bank" v-if="cusBank.canoutamount === 0">
+            <span>{{ msg }}</span>
+        </div>
+        <div class="g-form__time">
+            <label>充值提现时间:{{ start }}-{{ end }}</label>
+        </div>
+        <template #footer>
+            <div class="g-form__footer inset">
+                <Button round block type="danger" @click="formRef?.submit()">确定</Button>
+            </div>
+        </template>
+    </app-view>
+</template>
+
+<script lang="ts" setup>
+import { useDoWithdraw, useAccountFundInfo, useDoCusBankExtendConfigs, useQueryCusBankSignBank } from '@/business/bank';
+import { Form, Field, CellGroup, FormInstance, Button, FieldRule } from 'vant'
+import { shallowRef } from 'vue'
+import { fullloading, dialog } from '@/utils/vant'
+import { useNavigation } from '@mobile/router/navigation'
+import { useUserStore } from '@/stores'
+
+const { formData, onSubmit, sign } = useDoWithdraw()
+const { configs } = useDoCusBankExtendConfigs(3)
+/// 资金账户信息
+const { fund } = useAccountFundInfo()
+const { router } = useNavigation()
+const formRef = shallowRef<FormInstance>()
+const { getSystemParamValue } = useUserStore()
+const start = getSystemParamValue('012')
+const end = getSystemParamValue('013')
+const msg = getSystemParamValue('302')
+const userStore = useUserStore()
+/// 查询托管银行信息
+const { cusBank } = useQueryCusBankSignBank()
+
+// 表单验证规则
+const formRules: { [key in keyof Proto.t2bBankWithdrawReq]?: FieldRule[] } = {
+    Amount: [{
+        required: true,
+        message: '请输入出金金额',
+        validator: (val) => {
+            if (val <= (fund.value.AvailableOutMoney ?? 0.0)) {
+                return true
+            }
+            return '超过可出金额'
+        }
+    }]
+}
+
+const formSubmit = () => {
+    const obj: { [key: string]: unknown } = Object.create({})
+    configs.value.forEach((e) => {
+        if (e.value) {
+            obj[e.fieldcode] = e.value
+        }
+    })
+    formData.extend_info = JSON.stringify(obj)
+    fullloading((hideLoading) => {
+        onSubmit().then(() => {
+            hideLoading()
+            dialog('出金提交申请成功,请耐心等待审核。').then(() => {
+                router.back()
+            })
+        }).catch(() => {
+            hideLoading('出金失败', 'fail')
+        })
+    })
+}
+</script>
+
+<style lang="less">
+@import './index.less';
+</style>

+ 22 - 0
src/packages/qdhs/views/bank/wallet/components/withdraw/index.less

@@ -0,0 +1,22 @@
+.bank-wallet-withdraw {
+    .form-field {
+        .van-field__control {
+            display: flex;
+            flex-direction: column;
+            align-items: flex-start;
+        }
+
+        &__tips {
+            font-size: .24rem;
+        }
+    }
+
+    .g-form__bank {
+        padding: 16px;
+    }
+
+    .g-form__time {
+        color: #999;
+        padding-left: 15px;
+    }
+}

+ 62 - 0
src/packages/qdhs/views/goods/detail/index.vue

@@ -0,0 +1,62 @@
+<template>
+    <app-view class="goods-detail g-form">
+        <template #header>
+            <app-navbar :title="quote ? quote.goodscode + '/' + quote.goodsname : '挂牌大厅'" />
+        </template>
+        <component :is="Price" v-bind="{ goodsCode }" />
+        <component :is="Chart" v-bind="{ goodsCode }" />
+        <component :is="Forex" v-bind="{ goodsCode }" @more-click="onMoreClick" />
+        <component :is="Tik" v-bind="{ goodsCode }" />
+        <template #footer>
+            <div class="g-form__footer">
+                <Button block type="danger" square @click="onListing(BuyOrSell.Buy)">买入</Button>
+                <Button block type="primary" square @click="onListing(BuyOrSell.Sell)">卖出</Button>
+            </div>
+            <component ref="componentRef" :is="componentMap.get(componentId)" v-bind="{ goodsCode, buyOrSell }"
+                @closed="closeComponent" v-if="componentId" />
+        </template>
+    </app-view>
+</template>
+
+<script lang="ts" setup>
+import { shallowRef, defineAsyncComponent, computed } from 'vue'
+import { Button } from 'vant'
+import { useNavigation } from '@mobile/router/navigation'
+import { useComponent } from '@/hooks/component'
+import { BuyOrSell } from '@/constants/order'
+import { useFuturesStore } from '@/stores'
+
+const Price = defineAsyncComponent(() => import('@mobile/components/modules/quote/price/index.vue'))
+const Chart = defineAsyncComponent(() => import('@mobile/components/modules/quote/chart/index.vue'))
+const Forex = defineAsyncComponent(() => import('@mobile/components/modules/quote/forex/index.vue'))
+const Tik = defineAsyncComponent(() => import('@mobile/components/modules/quote/tik/index.vue'))
+
+const componentMap = new Map<string, unknown>([
+    ['listing', defineAsyncComponent(() => import('@mobile/views/goods/detail/components/listing/Index.vue'))],
+])
+
+const { router, getQueryStringToNumber } = useNavigation()
+const futuresStore = useFuturesStore()
+const goodsid = getQueryStringToNumber('goodsid')
+const quote = futuresStore.getGoodsQuote(goodsid)
+const buyOrSell = shallowRef<BuyOrSell>()
+
+const goodsCode = computed(() => quote.value?.goodscode ?? '')
+
+const { componentRef, componentId, openComponent, closeComponent } = useComponent()
+
+const onListing = (type: BuyOrSell) => {
+    buyOrSell.value = type
+    openComponent('listing')
+}
+
+const onMoreClick = (buyorsell: BuyOrSell) => {
+    router.push({
+        name: 'goods-trade',
+        query: {
+            goodsid,
+            buyorsell,
+        }
+    })
+}
+</script>

+ 115 - 0
src/packages/qdhs/views/goods/list/index.vue

@@ -0,0 +1,115 @@
+<template>
+    <app-view>
+        <template #header>
+            <app-navbar title="行情" :show-back-button="false" />
+        </template>
+        <app-list :columns="columns" :data-list="goodsList" @row-click="rowClick">
+            <!-- 商品名称/代码 -->
+            <template #goodsname="{ row }">
+                <span>{{ row.goodsname }}</span>
+                <span class="text-small">{{ row.goodscode }}</span>
+            </template>
+            <!-- 买价 -->
+            <template #bid="{ row }">
+                <span :class="row.bidColor">{{ handleNumberValue(formatDecimal(row.bid, row.decimalplace)) }}</span>
+            </template>
+            <!-- 买量 -->
+            <template #bidvolume="{ row }">
+                <span :class="row.bidvolumeColor">{{ handleNumberValue(row.bidvolume) }}</span>
+            </template>
+            <!-- 卖价 -->
+            <template #ask="{ row }">
+                <span :class="row.askColor">{{ handleNumberValue(formatDecimal(row.ask, row.decimalplace)) }}</span>
+            </template>
+            <!-- 卖量 -->
+            <template #askvolume="{ row }">
+                <span :class="row.askvolumeColor">{{ handleNumberValue(row.askvolume) }}</span>
+            </template>
+            <!-- 当前价 -->
+            <template #last="{ row }">
+                <span :class="row.lastColor">{{ handleNumberValue(formatDecimal(row.last, row.decimalplace)) }}</span>
+            </template>
+            <!-- 涨跌 -->
+            <template #rise="{ row }">
+                <span :class="row.lastColor">{{ formatDecimal(row.rise, row.decimalplace) }}</span>
+            </template>
+            <!-- 涨跌幅 -->
+            <template #change="{ row }">
+                <span :class="row.lastColor">{{ parsePercent(row.change) }}</span>
+            </template>
+            <!-- 今开 -->
+            <template #opened="{ row }">
+                <span :class="row.openedColor">{{ handleNumberValue(formatDecimal(row.opened, row.decimalplace)) }}</span>
+            </template>
+            <!-- 最低 -->
+            <template #lowest="{ row }">
+                <span :class="row.lowestColor">{{ handleNumberValue(formatDecimal(row.lowest, row.decimalplace)) }}</span>
+            </template>
+            <!-- 最高 -->
+            <template #highest="{ row }">
+                <span :class="row.highestColor">{{ handleNumberValue(formatDecimal(row.highest, row.decimalplace)) }}</span>
+            </template>
+            <!-- 振幅 -->
+            <template #amplitude="{ value }">
+                <span>{{ parsePercent(value) }}</span>
+            </template>
+            <!-- 涨停 -->
+            <template #limitup="{ value }">
+                <span class="g-price-up">{{ handleNumberValue(value) }}</span>
+            </template>
+            <!-- 跌停 -->
+            <template #limitdown="{ value }">
+                <span class="g-price-down">{{ handleNumberValue(value) }}</span>
+            </template>
+        </app-list>
+    </app-view>
+</template>
+
+<script lang="ts" setup>
+import { onUnmounted, onActivated,  computed } from 'vue'
+import { parsePercent, handleNumberValue, formatDecimal } from '@/filters'
+import { useNavigation } from '@mobile/router/navigation'
+import { useFuturesStore } from '@/stores'
+import quoteSocket from '@/services/websocket/quote'
+import AppList from '@mobile/components/base/list/index.vue'
+
+const { router } = useNavigation()
+const subscribe = quoteSocket.createSubscribe()
+const futuresStore = useFuturesStore()
+
+const goodsList = computed(() => futuresStore.getGoodsListByTradeMode(50))
+
+const columns: Model.TableColumn[] = [
+    { prop: 'goodsname', label: '商品名称/代码' },
+    { prop: 'bid', label: '买价' },
+    { prop: 'bidvolume', label: '买量' },
+    { prop: 'ask', label: '卖价' },
+    { prop: 'askvolume', label: '卖量' },
+    { prop: 'last', label: '当前价' },
+    { prop: 'rise', label: '涨跌' },
+    { prop: 'change', label: '幅度' },
+    { prop: 'opened', label: '今开' },
+    { prop: 'presettle', label: '昨结' },
+    { prop: 'lowest', label: '最低' },
+    { prop: 'highest', label: '最高' },
+    { prop: 'amplitude', label: '振幅' },
+    { prop: 'limitup', label: '涨停价' },
+    { prop: 'limitdown', label: '跌停价' },
+]
+
+const rowClick = (row: Model.QuoteGoodsListRsp) => {
+    router.push({
+        name: 'goods-detail',
+        query: {
+            goodsid: row.goodsid
+        }
+    })
+}
+
+onActivated(() => {
+    const goodsCodes = goodsList.value.map((e) => e.goodscode)
+    subscribe.start(...goodsCodes)
+})
+
+onUnmounted(() => subscribe.stop())
+</script>

+ 6 - 12
src/packages/qdhs/views/home/Index.vue

@@ -39,20 +39,14 @@ const tabList: Tabbar[] = [
     activeIcon: 'g-icon-home--fill',
   },
   {
-    name: 'home-50101',
-    label: '日清挂牌',
-    icon: 'g-icon-listing--line',
-    activeIcon: 'g-icon-listing--fill',
-  },
-  {
-    name: 'home-50103',
-    label: '周清挂牌',
-    icon: 'g-icon-listing--line',
-    activeIcon: 'g-icon-listing--fill',
+    name: 'home-goods',
+    label: '行情',
+    icon: 'g-icon-quote--line',
+    activeIcon: 'g-icon-quote--fill',
   },
   {
-    name: 'home-50104',
-    label: '月清挂牌',
+    name: 'home-trade',
+    label: '交易',
     icon: 'g-icon-listing--line',
     activeIcon: 'g-icon-listing--fill',
   },

+ 1 - 41
src/packages/qdhs/views/home/main/Index.vue

@@ -8,22 +8,6 @@
       <app-block>
         <Cell title="通知公告" value="更多" :to="{ name: 'notice-list' }" icon="volume" is-link />
       </app-block>
-      <app-block class="home-main__iconbar bg">
-        <ul>
-          <li @click="switchTab(1)">
-            <Iconfont label-direction="bottom" icon="g-icon-listing--line m50101">日清挂牌</Iconfont>
-          </li>
-          <li @click="switchTab(2)">
-            <Iconfont label-direction="bottom" icon="g-icon-listing--line m50103">周清挂牌</Iconfont>
-          </li>
-          <li @click="switchTab(3)">
-            <Iconfont label-direction="bottom" icon="g-icon-listing--line m50104">月清挂牌</Iconfont>
-          </li>
-          <li @click="routerTo('goods-50102')">
-            <Iconfont label-direction="bottom" icon="g-icon-listing--line m50102">中远期挂牌</Iconfont>
-          </li>
-        </ul>
-      </app-block>
       <app-block class="home-main__news">
         <CellGroup class="article">
           <Cell class="home-main__titlebar" title="市场资讯" value="更多" icon="fire" :to="{ name: 'news-list' }" is-link />
@@ -41,40 +25,16 @@
 import { shallowRef } from "vue";
 import { Cell, CellGroup, PullRefresh } from "vant";
 import { formatDate } from "@/filters";
-import { useNavigation } from '@mobile/router/navigation';
 import { queryImageConfigs } from "@/services/api/common";
 import { queryNewTitles } from "@/services/api/news";
-import { useLoginStore, useGlobalStore } from '@/stores'
+import {  useGlobalStore } from '@/stores'
 import Banner from '@mobile/components/base/banner/index.vue'
-import Iconfont from '@mobile/components/base/iconfont/index.vue'
 
 const globalStore = useGlobalStore()
-const loginStore = useLoginStore();
-const { routerTo, setGlobalUrlParams } = useNavigation();
 const refreshing = shallowRef(false); // 是否处于加载中状态
 const topBanners = shallowRef<string[]>([]); // 轮播图列表
 const newsList = shallowRef<Model.NewTitlesRsp[]>([]); // 资讯列表
 
-// 跳转导航页面
-const switchTab = (tabIndex: number) => {
-  if (loginStore.token) {
-    setGlobalUrlParams({ tabIndex })
-    switch (tabIndex) {
-      case 1:
-        routerTo('home-50101', true)
-        break
-      case 2:
-        routerTo('home-50103', true)
-        break
-      case 3:
-        routerTo('home-50104', true)
-        break
-    }
-  } else {
-    routerTo('user-login')
-  }
-}
-
 // 下拉刷新
 const onRefresh = () => {
   if (!topBanners.value.length) {

+ 4 - 10
src/packages/qdhs/views/mine/Index.vue

@@ -38,16 +38,10 @@
                         <span>可用</span>
                         <span>{{ currentAccount.avaiableMoney?.toFixed(2) }}</span>
                     </div>
-                    <div class="bank-item">
-                        <span>
-                            <a @click="routerTo('bank-statement')">资金流水</a>
-                        </span>
-                        <span></span>
-                    </div>
                 </div>
                 <div class="button">
-                    <Button size="small" round @click="doInOutMoney('0')">充值</Button>
-                    <Button type="danger" size="small" round @click="doInOutMoney('1')">提现</Button>
+                    <Button size="small" round @click="routerTo('bank-statement')">资金流水</Button>
+                    <Button type="danger" size="small" round @click="doInOutMoney">出金</Button>
                 </div>
             </div>
         </div>
@@ -141,7 +135,7 @@ const onReady = (el: HTMLDivElement) => {
 }
 
 /// 进行出入金操作判断
-const doInOutMoney = (tab: string) => {
+const doInOutMoney = () => {
     if (authStatus.value === AuthStatus.Certified) {
         fullloading((hideLoading) => {
             queryBankAccountSign().then((res) => {
@@ -149,7 +143,7 @@ const doInOutMoney = (tab: string) => {
                 const { signstatus } = res.data[0] ?? {}
                 /// 只有已签约的情况下才可以进行出入金
                 if (signstatus && signstatus === 4) {
-                    router.push({ name: 'bank-wallet', query: { tab } })
+                    router.push({ name: 'bank-wallet' })
                 } else {
                     dialog({
                         message: '请先添加签约账户信息!',

+ 2 - 0
src/packages/sbyj/views/delivery/components/processing/list/index.vue

@@ -72,6 +72,8 @@ import { fullloading, dialog } from '@/utils/vant'
 import AppPullRefresh from '@mobile/components/base/pull-refresh/index.vue'
 import { deliveryClientOperator } from '@/services/api/trade'
 
+// 买 确认 未付款 显示截止时间
+
 const dataList = shallowRef<Model.MyTradeGoodsDeliveryOfflineRsp[]>([])
 const selectedRow = shallowRef<Model.MyTradeGoodsDeliveryOfflineRsp>()
 const error = shallowRef(false)

+ 1 - 1
src/packages/sbyj/views/home/main/index.less

@@ -4,7 +4,7 @@
     &__banner {
         position: relative;
         overflow: hidden;
-        padding: .4rem;
+        padding: .32rem;
         padding-bottom: 0;
 
         &::before {

+ 2 - 2
src/packages/sbyj/views/market/list/index.vue

@@ -73,9 +73,9 @@ const { run: getTouristQuoteDay } = useRequest(queryTouristQuoteDay, {
 })
 
 // 构建游客交易商品
-const touristTradeGoodsList = computed(() => futuresStore.goodsQuoteList.filter((e) => e.trademode === 52))
+const touristTradeGoodsList = computed(() => futuresStore.getGoodsListByTradeMode(52))
 // 构建游客参考行情商品
-const touristRefGoodsList = computed(() => futuresStore.goodsQuoteList.filter((e) => e.trademode === 99))
+const touristRefGoodsList = computed(() => futuresStore.getGoodsListByTradeMode(99))
 
 const columns: Model.TableColumn[] = [
     { prop: 'goodsname', label: '商品' },

+ 1 - 1
src/packages/sbyj/views/order/detail/index.vue

@@ -21,7 +21,7 @@
                     <Cell title="滞纳金" :value="detail.tHDetailEx.callAteFee" />
                     <Cell title="定金率">
                         <template #value>
-                            <span :class="detail.tHDetailEx.depositRate <= 0.4 ? 'g-price-up' : ''">
+                            <span :class="detail.tHDetailEx.depositRate <= detail.tHDetailEx.promptDepositRate ? 'g-price-up' : ''">
                                 {{ parsePercent(detail.tHDetailEx.depositRate) }}
                             </span>
                         </template>

+ 1 - 1
src/packages/sbyj/views/order/list/components/supplement-deposit/index.vue

@@ -9,7 +9,7 @@
                 <CellGroup inset>
                     <Cell title="定金率">
                         <template #value>
-                            <span :class="selectedRow.tHDetailEx.depositRate <= 0.4 ? 'g-price-up' : ''">{{
+                            <span :class="selectedRow.tHDetailEx.depositRate <= selectedRow.tHDetailEx.promptDepositRate ? 'g-price-up' : ''">{{
                                 parsePercent(selectedRow.tHDetailEx.depositRate) }}</span>
                         </template>
                     </Cell>

+ 16 - 0
src/stores/modules/futures.ts

@@ -59,6 +59,16 @@ export const useFuturesStore = defineStore(() => {
         }
     }
 
+    const getGoodsListByMarketId = (...marketId: number[]) => {
+        const list = state.goodsQuoteList.filter((e) => marketId.includes(e.marketid))
+        return list.sort((a, b) => a.goodscode.localeCompare(b.goodscode)) // 根据 goodscode 字母升序排序
+    }
+
+    const getGoodsListByTradeMode = (...tradeMode: number[]) => {
+        const list = state.goodsQuoteList.filter((e) => tradeMode.includes(e.trademode))
+        return list.sort((a, b) => a.goodscode.localeCompare(b.goodscode)) // 根据 goodscode 字母升序排序
+    }
+
     // 获取商品列表
     const getGoodsList = () => {
         state.loading = true
@@ -200,6 +210,8 @@ export const useFuturesStore = defineStore(() => {
             totalvolume: quote.totalvolume ?? 0,
             totalturnover: quote.totalturnover ?? 0,
             holdvolume: quote.holdvolume ?? 0,
+            marketmarginalgorithm: 0,
+            marketmarginvalue: 0,
             rise: 0,
             change: 0,
             amplitude: 0,
@@ -244,6 +256,8 @@ export const useFuturesStore = defineStore(() => {
                     decimalplace: item.decimalplace,
                     quoteminunit: item.quoteminunit,
                     quotegear: item.quotegear,
+                    marketmarginalgorithm: item.marketmarginalgorithm,
+                    marketmarginvalue: item.marketmarginvalue,
                 } = goods)
 
                 // 向列表添加新数据
@@ -382,6 +396,8 @@ export const useFuturesStore = defineStore(() => {
         getGoodsQuote,
         getGoodsName,
         getGoodsMarket,
+        getGoodsListByMarketId,
+        getGoodsListByTradeMode,
         updateGoodsQuote,
         quoteWatch,
         quotePushNotify,

+ 2 - 0
src/types/model/goods.d.ts

@@ -43,6 +43,8 @@ declare namespace Model {
         listingdate: string;//交易开始日期
         marketid: number;//所属市场ID
         modifierid: number;//修改人
+        marketmarginalgorithm:number; // 保证金计算方式
+        marketmarginvalue:number; // 即市保证金值
         modifystatus: number;//变更状态 - 1:未变更 2:变更中 3:待审核 4:已审核
         modifytime: string;//修改时间
         outerdealmode: number;//外部成交方式[通道交易]- 1:净头寸 2:开平 3:平今

+ 2 - 0
src/types/model/market.d.ts

@@ -128,5 +128,7 @@ declare namespace Model {
         totalvolume: number; // 总量
         totalturnover: number; // 总金额
         holdvolume: number; // 持仓
+        marketmarginalgorithm:number; // 保证金计算方式
+        marketmarginvalue:number; // 即市保证金值
     }
 }