li.shaoyi 1 рік тому
батько
коміт
dacdcfe937

+ 1 - 1
public/config/appconfig.json

@@ -4,7 +4,7 @@
   "appTitle": "多元世纪交易中心",
   "version": "1.0.8",
   "versionCode": "10008",
-  "apiUrl": "http://192.168.31.158:16240/cfg?key=dev_104",
+  "apiUrl": "http://192.168.31.204:8080/cfg?key=test_204",
   "tradeChannel": "ws",
   "modules": [
     "register",

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

@@ -23,7 +23,7 @@ const componentMap = new Map<string, unknown>([
     ['tradeModel_17', defineAsyncComponent(() => import('./spot/index.vue'))], // 现货挂牌
     ['tradeModel_46', defineAsyncComponent(() => import('./swap/index.vue'))], // 掉期市场
     ['tradeModel_99', defineAsyncComponent(() => import('./market/index.vue'))], // 参考行情
-    ['tradeModel_10', defineAsyncComponent(() => import('./pricing/index.vue'))], // 挂牌点价
+    ['tradeModel_10', defineAsyncComponent(() => import('./pricing/v2/index.vue'))], // 挂牌点价
 ])
 
 const futuresStore = useFuturesStore()

+ 42 - 0
src/packages/pc/views/market/trade/pricing/v2/index.less

@@ -0,0 +1,42 @@
+.market-trade-pricing {
+    display: flex;
+    flex-wrap: wrap;
+    color: #e5e5e5;
+    line-height: normal;
+    padding: 15px 15px 0 0;
+
+    article {
+        width: 200px;
+        background-color: #202831;
+        border-radius: 3px;
+        cursor: pointer;
+        margin: 0 0 15px 15px;
+        padding: 10px;
+
+        h3 {
+            display: flex;
+            justify-content: space-between;
+            align-items: center;
+            font-size: 14px;
+            border-bottom: 1px solid #414851;
+            padding-bottom: 10px;
+        }
+
+        section {
+            display: flex;
+            justify-content: space-between;
+            padding-top: 10px;
+
+            dl {
+                dt {
+                    color: #71848f;
+                }
+
+                dd {
+                    font-size: 16px;
+                    padding-top: 10px;
+                }
+            }
+        }
+    }
+}

+ 79 - 0
src/packages/pc/views/market/trade/pricing/v2/index.vue

@@ -0,0 +1,79 @@
+<!-- 交易市场 - 挂牌点价 -->
+<template>
+    <el-scrollbar>
+        <div class="market-trade-pricing">
+            <article v-for="(item, index) in futuresStore.marketGoodsList" :key="index">
+                <h3 @click="openImageViewer(item.pictureurl)">
+                    <span>{{ item.goodscode }}</span>
+                    <app-icon icon="PictureFilled" v-if="item.pictureurl" />
+                </h3>
+                <section @click="onRowClick(item)">
+                    <dl>
+                        <dt>{{ t('quote.ask') }}</dt>
+                        <dd :class="item.bidColor">{{ handleNumberValue(formatDecimal(item.bid, item.decimalplace)) }}
+                        </dd>
+                    </dl>
+                    <dl>
+                        <dt>{{ t('quote.bid') }}</dt>
+                        <dd :class="item.askColor">{{ handleNumberValue(formatDecimal(item.ask, item.decimalplace)) }}
+                        </dd>
+                    </dl>
+                </section>
+            </article>
+        </div>
+        <el-image-viewer :url-list="viewerList" @close="showViewer = false" teleported v-if="showViewer" />
+        <component ref="componentRef" v-bind="{ goodsId: futuresStore.selectedGoodsId }"
+            :is="componentMap.get(componentId)" @closed="closeComponent" v-if="componentId" />
+    </el-scrollbar>
+</template>
+
+<script lang="ts" setup>
+import { shallowRef, onMounted, onUnmounted, defineAsyncComponent } from 'vue'
+import { getFileUrl } from '@/filters'
+import { useComponent } from '@/hooks/component'
+import { handleNumberValue, formatDecimal } from '@/filters'
+import { useUserStore, useFuturesStore, useGlobalStore, i18n } from '@/stores'
+import AppIcon from '@pc/components/base/icon/index.vue'
+
+const t = i18n.global.t
+const futuresStore = useFuturesStore()
+const globalStore = useGlobalStore()
+const userStore = useUserStore()
+const showViewer = shallowRef(false)
+const viewerList = shallowRef<string[]>([])
+
+// 任务 #6289
+const param1012 = userStore.getSystemParamValue('1012')
+
+const { componentRef, componentId, openComponent, closeComponent } = useComponent(() => true, false)
+
+const componentMap = new Map<string, unknown>([
+    ['detail', defineAsyncComponent(() => import('@pc/components/modules/goods-detail/index.vue'))], // 详情
+])
+
+const onRowClick = (row: Model.GoodsQuote) => {
+    if (param1012 !== '0') {
+        futuresStore.selectedGoodsId = row.goodsid
+        openComponent('detail')
+    }
+}
+
+const openImageViewer = (url?: string) => {
+    if (url) {
+        viewerList.value = [getFileUrl(url)]
+        showViewer.value = true
+    }
+}
+
+onMounted(() => {
+    globalStore.showPricingListing = true
+})
+
+onUnmounted(() => {
+    globalStore.showPricingListing = false
+})
+</script>
+
+<style lang="less">
+@import './index.less';
+</style>

+ 4 - 2
src/stores/modules/futures.ts

@@ -317,6 +317,7 @@ export const useFuturesStore = defineStore(() => {
             openedColor: '',
             highestColor: '',
             lowestColor: '',
+            pictureurl: '',
             traderules: []
         }
 
@@ -354,6 +355,7 @@ export const useFuturesStore = defineStore(() => {
                     provideruserid: item.provideruserid,
                     goodstradetype: item.goodstradetype,
                     currencyid: item.currencyid,
+                    pictureurl: item.pictureurl,
                     traderules: item.traderules
                 } = goods)
 
@@ -366,7 +368,7 @@ export const useFuturesStore = defineStore(() => {
         }
 
         // 任务 #5677 任务 #6268
-        const hprice = (item.trademode === 52 || item.trademode === 10) ? item.ask : item.last 
+        const hprice = (item.trademode === 52 || item.trademode === 10) ? item.ask : item.last
         const lprice = (item.trademode === 52 || item.trademode === 10) ? item.bid : item.last
         item.opened = item.opened || item.last // 没有开盘价默认取最新价
         item.highest = item.highest || hprice // 没有最高价默认取最新价
@@ -377,7 +379,7 @@ export const useFuturesStore = defineStore(() => {
             if (hprice > item.highest) {
                 item.highest = hprice
             }
-            if (lprice < item.lowest) {                           
+            if (lprice < item.lowest) {
                 item.lowest = lprice
             }
         }

+ 56 - 52
src/types/model/goods.d.ts

@@ -8,63 +8,67 @@ declare namespace Model {
 
     /** 查询企业风管期货商品信息 响应 */
     interface GoodsRsp {
-        agreeunit: number;//合约单位
-        auditaccountid: number;//审核操作员账号
-        audittime: string;//审核时间
-        cancelaccountid: number;//注销操作员账号
-        canceltime: string;//注销时间
-        canautoadddeposit?: number; // 允许自动补定金 是(1),否(0)
-        canautorefunddeposit?: number; // 允许自动退定金 是(1),否(0)
-        closepricemode: number;//强平价格方式 - 1:市价 2:最新价 3:涨跌停(未实现)
-        closepriceparam: number;//强平最新价浮动比例 - 方式为2时使用 (<1)买 上浮 (1+x)最新价卖 下浮 (1-x)最新价
-        createtime: string;//创建时间
-        creatorid: number;//创建人
-        currencyid: number;//报价货币ID
-        cutmode: number;//斩仓方式 - 1:不斩仓 2:自动斩仓 3:半自动斩仓
-        decimalplace: number;//报价小数位
-        delistingdate: string;//商品退市时间(状态:退市) – 已作废
-        delistingmode: number;//退市方式 - 1:退市平仓 2:退市交收 3:不处理(仅期权\币币兑换)
-        deliveryflag: number;//交割标志 - number;0:不可交割 1:可交割
-        forceclosemode: number;//定期强平方式 - 1:无 2:每日 3:每周 4:每月[收益权]
-        forceclosevalue: number;//定期强平参数 [收益权]
-        goodscode: string;//商品代码(内部)
-        goodscurrencyid: number;//合约货币ID
-        goodsgroupid: number;//所属商品组ID
-        goodsid: number;//商品ID(自增ID SEQ_GOODS)
-        goodsname: string;//商品名称
+        agreeunit: number; // 合约单位
+        areauserid: number; // 所属机构
+        auditaccountid: number; // 审核操作员账号
+        audittime: string; // 审核时间
+        canautoadddeposit: number; // 是否允许自动追加定金: 0-否 1-是(52)
+        canautorefunddeposit: number; // 是否允许自动退还定金: 0-否 1-是(52)
+        cancelaccountid: number; // 注销操作员账号
+        canceltime: string; // 注销时间
+        closepricemode: number; // 强平价格方式 - 1:市价 2:最新价 3:涨跌停(未实现)
+        closepriceparam: number; // 强平最新价浮动比例 - 方式为2时使用 (<1)买 上浮 (1+x)最新价卖 下浮 (1-x)最新价
+        createtime: string; // 创建时间
+        creatorid: number; // 创建人
+        currencyid: number; // 报价货币ID
+        cutmode: number; // 斩仓方式 - 1:不斩仓 2:自动斩仓 3:半自动斩仓
+        decimalplace: number; // 报价小数位
+        delistingdate: string; // 商品退市时间(状态:退市) -- 已作废
+        delistingmode: number; // 退市方式 - 1:退市平仓 2:退市交收 3:不处理(仅期权\币币兑换)
+        deliveryflag: number; // 交割标志 - 0:不可交割 1:可交割
+        enumdicname: string; // 单位名称
+        forceclosemode: number; // 定期强平方式 - 1:无 2:每日 3:每周 4:每月[收益权]
+        forceclosevalue: number; // 定期强平参数 [收益权]
+        goodscode: string; // 商品代码(内部)
+        goodscurrencyid: number; // 合约货币ID
+        goodsgroupid: number; // 所属商品组ID
+        goodsid: number; // 商品ID(自增ID SEQ_GOODS)
+        goodsname: string; // 商品名称
         goodsorder: string; // 商品显示顺序(99)
-        goodsquotetype: number;//合约报价类型: 1-直接报价 2-间接报价
-        goodsstatus: number;//商品状态- 1:待审核 2:未上市 3:上市 4:已注销 5:审核拒绝 6:退市 7:待退市
-        goodstradetype: number;//商品交易权限类型 - 1:可建可平 3:不可建可平
-        goodunitid: number;//报价单位ID
-        hasquoter: number;//是否有报价商 - number 无报价商 1:有报价商
-        hqprotecttime: number;//行情保护时间(秒)
-        innerdealmode: number;//内部成交方式[通道交易] - 1:净头寸 2:开平 3:平今
-        isbuylimited: number;//是否限制建仓量 - number 不限制 1:限制
-        lasttradedate: string;//最后交易日期(状态:待退市)
-        listingdate: string;//交易开始日期
-        marketid: number;//所属市场ID
-        modifierid: number;//修改人
+        goodsquotetype: number; // 合约报价类型: 1-直接报价 2-间接报价
+        goodsstatus: number; // 商品状态- 1:待审核 2:未上市 3:上市 4:已注销 5:审核拒绝 6:退市 7:待退市
+        goodstradetype: number; // 商品交易权限类型 - 1:可建可平 3:不可建可平
+        goodunitid: number; // 报价单位ID
+        hasquoter: number; // 是否有报价商 - 0:无报价商 1:有报价商
+        hqprotecttime: number; // 行情保护时间(秒)
+        innerdealmode: number; // 内部成交方式[通道交易] - 1:净头寸 2:开平 3:平今
+        isbuylimited: number; // 是否限制建仓量 - 0:不限制 1:限制
+        isvisible: number; // 游客是否可见 - 0:不可见 1:可见
+        lasttradedate: string; // 最后交易日期(状态:待退市)
+        listingdate: string; // 交易开始日期
+        marketid: number; // 所属市场ID
         marketmarginalgorithm: number; // 保证金计算方式
         marketmarginvalue: number; // 即市保证金值
-        maxspread: number // 点差上限(46)
-        modifystatus: number;//变更状态 - 1:未变更 2:变更中 3:待审核 4:已审核
-        modifytime: string;//修改时间
-        mindeliverylot: number;//最小交收手数(50模式)
-        minspread: number // 点差下限(46)
-        outerdealmode: number;//外部成交方式[通道交易]- 1:净头寸 2:开平 3:平今
-        outgoodscode: string;//商品代码(外部)
-        qtydecimalplace: number;//成交量小数位
-        quotegear: number;//行情档位(1-1number)
-        quoteminunit: number;//行情最小变动单位 [整数,报价小数位一起使用]
-        quoteshowtype: number;//行情报价类型: 1:成交价 2:买卖中间价 3:含买价 4:含卖价做市模式固定为3:含买价
-        quoteshowtypeinterval: number;//行情报价间隔时间(秒)(成交价时为number)
-        remark: string;//备注
-        trademode: number;//交易模式 - 10:做市 13:竞价 15:通道交易 16:挂牌点选 17:仓单贸易 18:期权 19:竞拍-降价式 20:竞拍-竞价式 21:竞拍-大宗式 22:受托竞价
-        goodsorder: string; // 商品显示顺序(99)
-        tradeproperty: number; // 交易属性 - 1:收益权(可做空) 2:所有权(不可做空) 3:期权 4:现货 5:参考行情 6:通道交易 7:币交易 8:场外期权
+        maxspread: number; // 点差上限(46)
+        mindeliverylot: number; // 最小交收手数(50模式)
+        minspread: number; // 点差下限(46)
+        modifierid: number; // 修改人
+        modifystatus: number; // 变更状态 - 1:未变更 2:变更中 3:待审核 4:已审核
+        modifytime: string; // 修改时间
+        outerdealmode: number; // 外部成交方式[通道交易]- 1:净头寸 2:开平 3:平今
+        outgoodscode: string; // 商品代码(外部)
+        pictureurl: string; // 商品图片
         provideraccountid: number; // 发售方资金账户ID(49)\供货商资金账户ID(50)
         provideruserid: number; // 发售方用户ID(49)\供货商(50)
+        qtydecimalplace: number; // 成交量小数位
+        quotegear: number; // 行情档位(1-10)
+        quoteminunit: number; // 行情最小变动单位 [整数,报价小数位一起使用]
+        quoteshowtype: number; // 行情报价类型: 1:成交价 2:买卖中间价 3:含买价 4:含卖价做市模式固定为3:含买价
+        quoteshowtypeinterval: number; // 行情报价间隔时间(秒)(成交价时为0)
+        relatedgoodsid: number; // 关联参考商品ID
+        remark: string; // 备注
+        trademode: number; // 交易模式 - 10:做市 13:竞价 15:通道交易 16:挂牌点选 17:仓单贸易 18:期权 19:竞拍-降价式 20:竞拍-竞价式 21:竞拍-大宗式 22:受托竞价
+        tradeproperty: number; // 交易属性 - 1:收益权(可做空) 2:所有权(不可做空) 3:期权 4:现货 5:参考行情 6:通道交易 7:币交易 8:场外期权
         traderules: Proto.TradeRuleInfoStruct['TradeRules'] // 交易规则
     }
 

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

@@ -141,6 +141,7 @@ declare namespace Model {
         tradeproperty: number; // 交易属性 - 1:收益权(可做空) 2:所有权(不可做空) 3:期权 4:现货 5:参考行情 6:通道交易 7:币交易 8:场外期权
         provideraccountid: number; // 发售方资金账户ID(49)\供货商资金账户ID(50)
         provideruserid: number; // 发售方用户ID(49)\供货商(50)
+        pictureurl: string; // 商品图片
         goodstradetype: number;//商品交易权限类型 - 1:可建可平 3:不可建可平
         currencyid: number;//报价货币ID
         traderules: Proto.TradeRuleInfoStruct['TradeRules'] // 交易规则