瀏覽代碼

登录 添加协议功能

huangbin 4 年之前
父節點
當前提交
d227b20c40

+ 13 - 0
src/services/go/QhjSys/index.ts

@@ -0,0 +1,13 @@
+import { commonSearch_go } from '../index';
+import * as type from './interface';
+
+/**
+ * 查询用户协议节点配置和状态
+ * @param QueryUserNodeCfgAndStatusReq
+ */
+export function queryUserNodeCfgAndStatus(param: type.QueryUserNodeCfgAndStatusReq): Promise<type.QueryUserNodeCfgAndStatusRsp[]> {
+    return commonSearch_go('/QhjSys/QueryUserNodeCfgAndStatus', param)
+        .catch((err: Error) => {
+            throw new Error(`查询用户协议节点配置和状态请求失败:${err}`);
+        });
+}

+ 28 - 0
src/services/go/QhjSys/interface.ts

@@ -0,0 +1,28 @@
+export interface QueryUserNodeCfgAndStatusReq {
+    userid?: number // 客户ID
+    configid?: number // 配置id(SEQ_QHJ_NODEAGREEMENTCONFIG)
+    nodetype?: string // 环节类型(可多个,逗号隔开) - 1:注册 2:登录 3:购买 4:融资购买 5:定投 6:卖出
+    goodsid?: number // 商品ID [默认为0, NodeType>=3 的为商品值]
+    agreementid?: number // 协议ID
+    agreementtype?: number // 协议类型 - 1:注册 2:登录 3:交易
+    agreementversion?: number // 协议版本号
+    agreementno?: number // 协议编号(模糊匹配)
+    agreementname?: number // 协议名称(模糊匹配)
+}
+
+export interface QueryUserNodeCfgAndStatusRsp {
+    agreementcontent: string;//协议内容
+    agreementid: number;//协议ID
+    agreementname: string;//协议名称
+    agreementno: string;//协议编号
+    agreementtype: number;//协议类型 - 1:注册 2:登录 3:交易
+    agreementversion: number;//协议版本号
+    configid: number;//配置(SEQ_QHJ_NODEAGREEMENTCONFIG)
+    createtime: string;//创建时间
+    goodsid: number;//商品ID [默认为number;
+    //, NodeType>=3 的为商品值]
+    nodetype: number;//环节类型 - 1:注册 2:登录 3:购买 4:融资购买 5:定投 6:卖出
+    signtimestamp: string;//签约状态时间戳(最近一次)
+    tradedate: string;//签约交易日(yyyyMMdd)
+    userid: number;//客户ID
+}

+ 1 - 0
src/utils/storage/localStorage.ts

@@ -10,6 +10,7 @@ interface StorageKeyName {
     errorCodeInfos: ErrorCodeList[];
     theme: string; // 主题色
     rowNumber: string; // 数据库错误信息 时间戳
+    readAgreement: string; // 是否阅读协议
 }
 
 /**

+ 78 - 17
src/views/account/login.vue

@@ -44,15 +44,21 @@
                 <router-link to="/resetPassword">《用户协议》</router-link>
               </div>
                         </a-form-item>-->
-                        <a-form-item class="mt20">
+                        <a-form-item class="mt20" name="isRead">
                             <a-button
                                 @click="loginAction"
                                 :loading="loading"
                                 :disabled="goHomeloading"
-                            >登录</a-button>
-                            <div class="register">
-                                <a-checkbox v-model:checked="form.isRead">已阅读并同意</a-checkbox>
-                                <router-link to="/resetPassword">《用户协议》</router-link>
+                            >登录</a-button>‚
+                            <div class="agreement agreement-header">
+                                <a-checkbox v-model:checked="isReadAgreement">已阅读并同意</a-checkbox>
+                            </div>
+                            <div class="agreement">
+                                <a
+                                    v-for="item in agreementList"
+                                    @click="showModal(item)"
+                                    :key="item.agreementid"
+                                >《{{ item.agreementname }}》</a>
                             </div>
                             <div class="register" v-if="isOpenUrl">
                                 还没有账号,
@@ -63,13 +69,27 @@
                 </div>
             </a-col>
         </a-row>
+        <a-modal
+            class="commonModal"
+            v-if="selectedAgreement?.agreementname"
+            :title="selectedAgreement?.agreementname"
+            v-model:visible="visible"
+            centered
+            @cancel="closeModel"
+            :footer="null"
+            width="890px"
+        >
+            <p class="agreement-content">{{ selectedAgreement.agreementcontent }}</p>
+        </a-modal>
     </div>
 </template>
 
 <script lang="ts">
-import { setLoadComplete } from '@/common/methods';
+import { initData, setLoadComplete } from '@/common/methods';
 import { globalDataRefresh } from '@/services/bus/index';
 import { login } from '@/services/bus/login';
+import { queryUserNodeCfgAndStatus } from '@/services/go/QhjSys';
+import { QueryUserNodeCfgAndStatusRsp } from '@/services/go/QhjSys/interface';
 import { isOpenUrl, serviceURL } from '@/services/request/serviceURL';
 import eventBus from '@/utils/eventBus/index';
 import { localStorageUtil } from '@/utils/storage/index';
@@ -98,21 +118,46 @@ function setRememberAccount(): void {
         Object.assign(initForm, { account, isRemember: true });
     }
 }
+function setLogo() {
+    const img = document.querySelector('#logo_img') || document.createElement('img');
+    const obj = {
+        id: 'logo_img',
+        src: './logo.png',
+        style: 'margin-bottom: 180px',
+    };
+    Object.assign(img, obj);
+    document.querySelector('#img')?.appendChild(img);
+}
 
+// 协议
+function useAgreement() {
+    // 协议
+    const agreementList = ref<QueryUserNodeCfgAndStatusRsp[]>([])
+    const selectedAgreement = ref<QueryUserNodeCfgAndStatusRsp | null>(null)
+    const visible = ref<boolean>(false);
+    const showModal = (item: QueryUserNodeCfgAndStatusRsp) => {
+        selectedAgreement.value = item
+        visible.value = true;
+    };
+    const closeModel = () => {
+        visible.value = false
+    }
+    initData(() => {
+        queryUserNodeCfgAndStatus({ nodetype: '2', agreementtype: 2 }).then(res => {
+            if (Array.isArray(res)) {
+                console.log('dddddddddssda', res)
+                agreementList.value = res
+            }
+        })
+    })
+    return { agreementList, showModal, selectedAgreement, visible, closeModel }
+}
 export default defineComponent({
     name: 'login',
     components: {},
     setup() {
-        function setLogo() {
-            const img = document.querySelector('#logo_img') || document.createElement('img');
-            const obj = {
-                id: 'logo_img',
-                src: './logo.png',
-                style: 'margin-bottom: 180px',
-            };
-            Object.assign(img, obj);
-            document.querySelector('#img')?.appendChild(img);
-        }
+        const isReaad = localStorageUtil.getItem('readAgreement') ? true : false
+        const isReadAgreement = ref<boolean>(isReaad)
         onMounted(() => {
             setLogo();
         });
@@ -131,6 +176,11 @@ export default defineComponent({
         const { getQtInfo } = qtAction();
         function loginAction() {
             formDom.value.validate().then(() => {
+                if (!isReadAgreement.value) {
+                    message.error('请阅读并同意协议')
+                    return
+                }
+                localStorageUtil.setItem('readAgreement', true)
                 loading.value = true;
                 const { account, password } = toRaw(form);
                 setLoadComplete(false);
@@ -172,12 +222,19 @@ export default defineComponent({
         function register() {
             window.open(serviceURL.openApiUrl, '_blank');
         }
-        return { form, loginAction, rules, formDom, loading, goHomeloading, goHome, register, isOpenUrl };
+        return { form, loginAction, isReadAgreement, rules, formDom, loading, goHomeloading, goHome, register, isOpenUrl, ...useAgreement() };
     },
 });
 </script>
 
 <style lang="less" scoped>
+.agreement-header {
+    margin-top: -30px;
+}
+.agreement {
+    height: 30px;
+    line-height: 30px;
+}
 .register {
     cursor: pointer;
 }
@@ -200,6 +257,10 @@ export default defineComponent({
     .flex();
 }
 
+.agreement-content {
+    font-size: 14px;
+    color: @m-grey25;
+}
 .login-background {
     width: 275px;
     background: url("../../assets/images/logoBackground.png") no-repeat scroll 0

+ 14 - 61
swagger-to-ts/swagger.ts

@@ -1,63 +1,16 @@
 export interface Name{
-    auctionwrtype	:number;//竞拍仓单类型 - 1:无仓单 2:有仓单 3;有无仓单均可
-canacceptquote	:number;//确认行权是否接收行情 - number;
-//:不接受 1:接受 [可确认权的挂牌期权市场可配置]
-cangoodsexercise	:number;//[期权]是否可现货行权- number;
-//:否 1:是
-cangoodsexercisetype	:number;//可现货行权期权类型 - 1:认购 2认沽 3:认购认沽 [CanGoodsExercise = 1时可设置]
-canmanualquotestrike	:number;//是否可手动报行权价- number;
-//:否 1:是 [期权]
-canmutistage	:number;//是否可多段运行 – number;
-//:不可 1:可 [挂牌期权]
-canpreexercise	:number;//[期权]是否可预申报- number;
-//:否 1:是
-clearinterval	:number;//待开市间隔(交易市场开盘前多久发市场待开市信号(单位分钟))
-contracttmp	:string;//合同模板[荷兰式][竞价式][仓单贸易]
-exchareaid	:number;//所属交易所,可以没有
-goodstype	:number;//商品类型 - 1:交易商品 2:仓单商品
-hasrebate	:number;//是否返利[竞价式] number;
-//:不返,1:返利 – 根据系统参数number;
-//88显示或隐藏
-hastradecredit	:number;//是否交易授信[做市收益权] - number;
-//:不授信 1:授信
-haswr	:number;//[竞拍]是否需要仓单 - number;
-//:不需要 1:需要-作废
-isdeductmargin	:number;//竞拍违约是否扣除保证金[竞拍-降价式] - number;
-//:不扣 1:扣除
-isrecordsource	:number;//是否记录成交源 - number;
-//:不记录 1:记录 [所有权]
-isreleasemargin	:number;//成交参与保证金是否释放[竞价式] - number;
-//:不释放 1释放
-marginformula	:number;//持仓保证金公式 - 1:双边收 2:净头寸收 3:大小边差异收 4:大边收 5:卖持仓收(仅期权)
-marginformula2	:number;//持仓保证金公式(仅受托竞价) - 1:双边收 2:净头寸收 3:大小边差异收 4:大边收 5:卖持仓收(仅期权)
-marketid	:number;//市场ID正常5位,前三位固定:两位表示交易模式, 一位表示交易属性(1:收益权,2:所有权) 其它特殊市场:number;
-//-系统 1-交割服务 2-账户服务3-履约服务 4-仓单服务 5-积分服务 6-银行服务
-marketname	:string;//市场名称
-marketserviceid	:number;//市场服务ID
-marketstatus	:number;//生效状态(ValidStatus枚举): 1:待生效 2:正常 3:注销
-markettype	:number;//市场类型- 1:非交易服务 2:交易服务
-matchermode	:number;//指定对手模式[仓单贸易模式专用] - 1:任意对手
-openmethod	:number;//开盘模式 - number;
-// 自动 1手动
-otcuserid	:number;//场外期权做市商[场外期权]
-outersynctime	:string;//外部同步时间点(h24:mi:ss)[场外期权]
-pendingflag	:number;//待开市时间标识[通道交易-对冲] - number;
-//:当日 1:上日
-pendingtime	:string;//待开市时间通道交易-对冲
-performancetempid	:number;//履约计划模板ID - 作废
-premiumquotemode	:number;//权利金报价方式 - 1:自动 2:手动
-rebateratio	:number;//返利比率[竞价式]
-reckonorder	:number;//结算顺序
-reckonpricealgorithm	:number;//结算价算法: 1:最后多少笔成交价加权平均 2:最后多少秒成交价加权平均 3:全天加权平均 4:最后一口价 5.买一价 6.卖一价 7.买一卖一均价 8.外部结算价
-reckonpriceparam	:number;//结算价参数
-reckontime	:string;//结算时间通道交易-对冲
-roleprioritytype	:number;//角色优先类型 - 1:无 2:报价商优先 3:非报价商优先 [16:挂牌点选]
-selllistingauditflag	:number;//卖挂牌是否需要审核(仓单贸易) - number;
-//:不需要 1:需要
-trademarkettype	:number;//交易市场类型 - 1:合约市场 2:外部市场 3:仓单市场
-trademode	:number;//交易模式 - 1number;
-//:做市 13:竞价 15:通道交易 16:挂牌点选 17:仓单贸易 18:期权 19:竞拍-降价式 2number;
-//:竞拍-竞价式 21:竞拍-大宗式 22:受托竞价
-tradeproperty	:number;//交易属性 - 1:收益权(可做空) 2:所有权(不可做空) 3:期权 4:现货 5:参考行情 6:通道交易 7:币交易 8:场外期权
-tradetype	:number;//下单方式[通道交易] - 1:直接转单 2:净头寸下单
+    agreementcontent	:string;//协议内容
+agreementid	:number;//协议ID
+agreementname	:string;//协议名称
+agreementno	:string;//协议编号
+agreementtype	:number;//协议类型 - 1:注册 2:登录 3:交易
+agreementversion	:number;//协议版本号
+configid	:number;//配置(SEQ_QHJ_NODEAGREEMENTCONFIG)
+createtime	:string;//创建时间
+goodsid	:number;//商品ID [默认为number;
+//, NodeType>=3 的为商品值]
+nodetype	:number;//环节类型 - 1:注册 2:登录 3:购买 4:融资购买 5:定投 6:卖出
+signtimestamp	:string;//签约状态时间戳(最近一次)
+tradedate	:string;//签约交易日(yyyyMMdd)
+userid	:number;//客户ID
 }

+ 26 - 116
swagger-to-ts/swagger.txt

@@ -1,130 +1,40 @@
 {
-    auctionwrtype	integer
-竞拍仓单类型 - 1:无仓单 2:有仓单 3;有无仓单均可
+    agreementcontent	string
+协议内容
 
-canacceptquote	integer
-确认行权是否接收行情 - 0:不接受 1:接受 [可确认权的挂牌期权市场可配置]
+agreementid	integer
+协议ID
 
-cangoodsexercise	integer
-[期权]是否可现货行权- 0:否 1:是
+agreementname	string
+协议名称
 
-cangoodsexercisetype	integer
-可现货行权期权类型 - 1:认购 2认沽 3:认购认沽 [CanGoodsExercise = 1时可设置]
+agreementno	string
+协议编号
 
-canmanualquotestrike	integer
-是否可手动报行权价- 0:否 1:是 [期权]
+agreementtype	integer
+协议类型 - 1:注册 2:登录 3:交易
 
-canmutistage	integer
-是否可多段运行 – 0:不可 1:可 [挂牌期权]
+agreementversion	integer
+协议版本号
 
-canpreexercise	integer
-[期权]是否可预申报- 0:否 1:是
+configid	integer
+配置(SEQ_QHJ_NODEAGREEMENTCONFIG)
 
-clearinterval	integer
-待开市间隔(交易市场开盘前多久发市场待开市信号(单位分钟))
+createtime	string
+创建时间
 
-contracttmp	string
-合同模板[荷兰式][竞价式][仓单贸易]
+goodsid	integer
+商品ID [默认为0, NodeType>=3 的为商品值]
 
-exchareaid	integer
-所属交易所,可以没有
+nodetype	integer
+环节类型 - 1:注册 2:登录 3:购买 4:融资购买 5:定投 6:卖出
 
-goodstype	integer
-商品类型 - 1:交易商品 2:仓单商品
+signtimestamp	string
+签约状态时间戳(最近一次)
 
-hasrebate	integer
-是否返利[竞价式] 0:不返,1:返利 – 根据系统参数088显示或隐藏
+tradedate	string
+签约交易日(yyyyMMdd)
 
-hastradecredit	integer
-是否交易授信[做市收益权] - 0:不授信 1:授信
-
-haswr	integer
-[竞拍]是否需要仓单 - 0:不需要 1:需要-作废
-
-isdeductmargin	integer
-竞拍违约是否扣除保证金[竞拍-降价式] - 0:不扣 1:扣除
-
-isrecordsource	integer
-是否记录成交源 - 0:不记录 1:记录 [所有权]
-
-isreleasemargin	integer
-成交参与保证金是否释放[竞价式] - 0:不释放 1释放
-
-marginformula	integer
-持仓保证金公式 - 1:双边收 2:净头寸收 3:大小边差异收 4:大边收 5:卖持仓收(仅期权)
-
-marginformula2	integer
-持仓保证金公式(仅受托竞价) - 1:双边收 2:净头寸收 3:大小边差异收 4:大边收 5:卖持仓收(仅期权)
-
-marketid*	integer
-市场ID正常5位,前三位固定:两位表示交易模式, 一位表示交易属性(1:收益权,2:所有权) 其它特殊市场:0-系统 1-交割服务 2-账户服务3-履约服务 4-仓单服务 5-积分服务 6-银行服务
-
-marketname	string
-市场名称
-
-marketserviceid	integer
-市场服务ID
-
-marketstatus*	integer
-生效状态(ValidStatus枚举): 1:待生效 2:正常 3:注销
-
-markettype	integer
-市场类型- 1:非交易服务 2:交易服务
-
-matchermode	integer
-指定对手模式[仓单贸易模式专用] - 1:任意对手
-
-openmethod*	integer
-开盘模式 - 0 自动 1手动
-
-otcuserid	integer
-场外期权做市商[场外期权]
-
-outersynctime	string
-外部同步时间点(h24:mi:ss)[场外期权]
-
-pendingflag	integer
-待开市时间标识[通道交易-对冲] - 0:当日 1:上日
-
-pendingtime	string
-待开市时间通道交易-对冲
-
-performancetempid	integer
-履约计划模板ID - 作废
-
-premiumquotemode	integer
-权利金报价方式 - 1:自动 2:手动
-
-rebateratio	number
-返利比率[竞价式]
-
-reckonorder	integer
-结算顺序
-
-reckonpricealgorithm*	integer
-结算价算法: 1:最后多少笔成交价加权平均 2:最后多少秒成交价加权平均 3:全天加权平均 4:最后一口价 5.买一价 6.卖一价 7.买一卖一均价 8.外部结算价
-
-reckonpriceparam	integer
-结算价参数
-
-reckontime	string
-结算时间通道交易-对冲
-
-roleprioritytype	integer
-角色优先类型 - 1:无 2:报价商优先 3:非报价商优先 [16:挂牌点选]
-
-selllistingauditflag	integer
-卖挂牌是否需要审核(仓单贸易) - 0:不需要 1:需要
-
-trademarkettype	integer
-交易市场类型 - 1:合约市场 2:外部市场 3:仓单市场
-
-trademode*	integer
-交易模式 - 10:做市 13:竞价 15:通道交易 16:挂牌点选 17:仓单贸易 18:期权 19:竞拍-降价式 20:竞拍-竞价式 21:竞拍-大宗式 22:受托竞价
-
-tradeproperty*	integer
-交易属性 - 1:收益权(可做空) 2:所有权(不可做空) 3:期权 4:现货 5:参考行情 6:通道交易 7:币交易 8:场外期权
-
-tradetype	integer
-下单方式[通道交易] - 1:直接转单 2:净头寸下单
+userid	integer
+客户ID
 }