Ver Fonte

Merge branch 'master' of http://47.101.159.18:3000/Muchinfo/MTP2.0_WEB

zhangpeng há 4 anos atrás
pai
commit
2772b952ce
33 ficheiros alterados com 1127 adições e 245 exclusões
  1. 35 0
      public/proto/mtp.proto
  2. 33 0
      src/enums/routerName.ts
  3. 6 0
      src/funcode/index.ts
  4. 3 3
      src/goServiceAPI/commonService/index.ts
  5. 30 1
      src/goServiceAPI/commonService/interface.ts
  6. 4 5
      src/goServiceAPI/ermcp/goodsInfo/index.ts
  7. 4 1
      src/goServiceAPI/ermcp/goodsInfo/interface.ts
  8. 20 1
      src/goServiceAPI/ermcp/spot-contract/index.ts
  9. 71 0
      src/goServiceAPI/ermcp/spot-contract/interface.ts
  10. 40 0
      src/protoService/delivery/index.ts
  11. 37 0
      src/protoService/delivery/interface.ts
  12. 67 11
      src/router/index.ts
  13. 2 1
      src/services/bus/login.ts
  14. 15 12
      src/services/dataCenter/index.ts
  15. 5 3
      src/services/dataCenter/interface.ts
  16. 12 12
      src/services/index.ts
  17. 27 3
      src/views/business/purchase/index.vue
  18. 83 0
      src/views/business/purchase/list/forward/index.vue
  19. 83 0
      src/views/business/purchase/list/history/index.vue
  20. 83 0
      src/views/business/purchase/list/real-time/index.vue
  21. 83 0
      src/views/business/purchase/list/spot/index.vue
  22. 76 0
      src/views/information/custom/compoments/filterTable/index.vue
  23. 3 2
      src/views/information/custom/index.vue
  24. 51 45
      src/views/information/custom/list/normal-use/index.vue
  25. 3 2
      src/views/information/goods/index.vue
  26. 5 4
      src/views/information/spot-contract/index.vue
  27. 25 3
      src/views/information/warehouse-info/index.vue
  28. 92 0
      src/views/information/warehouse-info/list/normal-use/index.vue
  29. 83 0
      src/views/information/warehouse-info/list/stop-use/index.vue
  30. 30 28
      src/views/setting/notice/components/noticeContent.vue
  31. 2 2
      src/views/setting/notice/index.vue
  32. 5 28
      swagger-to-ts/swagger.ts
  33. 9 78
      swagger-to-ts/swagger.txt

+ 35 - 0
public/proto/mtp.proto

@@ -708,3 +708,38 @@ message CancelPaymentRsp {
 	optional string RetDesc = 3; // string 描述信息
 		optional uint64 TradeID = 4; // uint64 成交单号
 }
+
+// 现货品种申请请求 0 29 124
+message DeliveryGoodsApplyReq {
+	optional MessageHead Header = 1; // MessageHead
+		optional string version = 2; // string 接口版本号(目前支持2.0 3.1 3.2)
+		optional uint64 userid = 3; // uint64 用户ID
+		optional uint64 loginid = 4; // uint64 登录ID
+		optional string deliverygoodscode = 5; // string 交割商品代码(新增时有值)
+		optional string deliverygoodsname = 6; // string 交割商品名称(新增时有值)
+		optional uint64 deliverygoodsid = 7; // uint64 交割商品id(修改时有值)
+		optional uint64 unitid = 8; // uint64 单位ID
+		optional int32 type = 9; // int32 类型 1 新增 2 修改
+		optional string remark = 10; // string 备注
+	repeated GLDWRStandardEx gldwrstandards = 11; // GLDWRStandardEx 现货商品型号数据
+	repeated GLDDGFactoryItemEx glddgfactoryItems = 12; // GLDDGFactoryItemEx 现货商品品牌数据
+	repeated WRSConvertDetailEx wrsconvertdetails = 13; // WRSConvertDetailEx 现货商品折算配置明细数据
+}
+// 现货商品型号数据 0 29 172
+message GLDWRStandardEx {
+		optional uint64 wrstandardid = 1; // uint64 型号ID(修改时有值)
+		optional string wrstandardname = 2; // string 型号名称
+		optional uint64 unitid = 3; // uint64 单位ID
+		optional double convertfactor = 4; // double 标仓系数(接口为3.1及以上版本时传)
+}
+// 现货商品品牌数据 0 29 173
+message GLDDGFactoryItemEx {
+		optional uint64 dgfactoryitemid = 1; // uint64 品牌ID(修改时有值)
+		optional string dgfactoryitemvalue = 2; // string 品牌名称
+}
+// 现货商品折算配置明细数据 0 29 127
+message WRSConvertDetailEx {
+		optional uint64 middlegoodsid = 1; // uint64 套保品种ID(接口为3.1及以下版本时传套保品种ID,否则传期货品种ID)
+		optional uint64 unitid = 2; // uint64 单位ID
+		optional double convertratio = 3; // double 套保系数
+}

+ 33 - 0
src/enums/routerName.ts

@@ -0,0 +1,33 @@
+/** ============ 路由名字枚举 ============= */
+// 控制路由跳转时候根据路由名字来,定义枚举方便理解
+
+// 客户资料
+export const enum CustomInfo {
+    normal = 'custom_info_normal', // 正常
+    stop = 'custom_info_stop',  // 停用
+}
+// 商品信息
+export const enum GoodsInfo {
+    spot = 'goods_info_spot', // 现货品种
+    hedging = 'goods_info_hedging',  // 套保品种
+}
+// 现货合同
+export const enum SpotContract {
+    notCommit = 'spot_contract-not-commit', // 未提交
+    peddding = 'spot_contract-peddding',  // 待审核
+    performance = 'spot_contract-performance',  // 履约中
+    done = 'spot_contract-done',  // 已完成
+}
+// 仓库信息
+export const enum WarehouseInfo {
+    normal = 'warehouse-info-normal', // 正常
+    stop = 'warehouse-info-stop',  // 停用
+}
+// 采购
+export const enum Purchase {
+    realTime = 'purchase-real-time', // 实时敞口
+    spot = 'purchase-spot-position',  // 现货头寸
+    forward = 'purchase-forward-position',  // 期货头寸
+    history = 'purchase-history',  // 历史敞口
+}
+

+ 6 - 0
src/funcode/index.ts

@@ -61,4 +61,10 @@ export const funCode: Code = {
     CustOfflineNtf: 131074, // 客户离线通知
     PosChangedNtf: 131075, // 头寸变化通知
     MoneyChangedNtf: 131076, // 资金变化通知
+
+    // 现货
+    DeliveryGoodsApplyReq: 1900668, //  现货品种申请请求
+    DeliveryGoodsApplyRsp: 1900672, //  现货品种申请响应
+    DeliveryGoodsCancelReq: 1900673, // 现货品种停用请求
+    DeliveryGoodsCancelRsp: 1900674, // 现货品种停用响应
 };

+ 3 - 3
src/goServiceAPI/commonService/index.ts

@@ -66,7 +66,7 @@ export function queryNoticeReaded(noticeID: number): Promise<string> {
 /**
  * 通知公告系统消息查询
  */
-export function queryNotice(): Promise<type.queryNoticeRsp[]> {
+export function queryNotice(): Promise<type.QueryNoticeRsp[]> {
     const param = { loginID: Number(getLongTypeLoginID()) };
     return commonSearch_go('/Common/QueryNotice', param).catch((err: Error) => {
         throw new Error(`通知公告系统消息查询失败:${err.message}`);
@@ -95,14 +95,14 @@ export function GetPCMenus(): Promise<string> {
  * 查询交易端列表头信息
  * @returns 
  */
-export function QueryTableDefine(): Promise<string> {
+export function QueryTableDefine(): Promise<type.TableDefineRsp[]> {
     const param = {
         tableType: 2, // 列表类型 - 1:管理端 2:H5终端 3:移动终端
     };
     return commonSearch_go('/Common/QueryTableDefine', param)
         .then((res) => {
             console.log('查询交易端列表头信息', res);
-            return 'ok';
+            return res;
         })
         .catch((err: Error) => {
             throw new Error(`查询交易端列表头信息:${err.message}`);

+ 30 - 1
src/goServiceAPI/commonService/interface.ts

@@ -14,7 +14,7 @@ export interface AllEnums {
     param2: string; //参数1[币种:币种显示单位]
     remark: string; //备注
 }
-export interface queryNoticeRsp {
+export interface QueryNoticeRsp {
     auditoruserid: number; //审核人
     auditremark: string; //审核备注
     audittime: string; //审核日期
@@ -44,3 +44,32 @@ export interface OperationTabMenu {
     type: number; //类型,1:菜单 2:按钮
     children: OperationTabMenu[];
 }
+
+export interface Column {
+    aligntype: number;//对齐方式 - 1:居中对齐 2:左对齐 3:右对齐
+    autoid: number;//AutoID
+    columnfield: string;//列字段
+    columntitle: string;//列Title
+    columnwidth: string;//列宽
+    formatter: string;
+    //	:string;//格式化字符
+    formattertype: string;//格式化类型
+    groupname: string;//表头分组名称
+    isshow: number;//是否显示 - number;
+    //:不显示 1:显示
+    needsummary: number;//是否需要汇总 - number;
+    //:不需要 1:需要
+    orderindex: number;//顺序
+    remark: string;//备注
+    summarytype: number;//汇总类型 - 1:加总 2:最后一个
+    tablekey: string;//列表Key
+}
+
+export interface TableDefineRsp {
+    columns: Column[], // 列头信息数组
+    remark: string;//Remark
+    tabelmenu: string;//列表菜单
+    tablekey: string;//列表Key
+    tablename: string;//列表名称
+    tabletype: number;//列表类型 - 1:管理端 2:终端
+}

+ 4 - 5
src/goServiceAPI/ermcp/goodsInfo/index.ts

@@ -2,18 +2,17 @@
 
 
 import APP from '@/services';
-import * as type from './interface';
 import {commonSearch_go} from '@/goServiceAPI/index';
-import {ErmcpDeliveryGoodsReq} from "./interface";
+import {ErmcpDeliveryGoodsReq, ErmcpDeliveryGoodsRsp} from "./interface";
 
 /**
  * 查询现货商品 /Ermcp3/QueryDeliveryGoods
  * @param excluudecfg 排除已配置的现货商品 1-排除
  * @constructor
  */
-export function QueryDeliveryGoods( req : ErmcpDeliveryGoodsReq) : Promise<type.ErmcpDeliveryGoodsRsp[]>{
-    const MemberUserID = APP.get('userAccount').memberuserid; // 所属机构id
-    return commonSearch_go('/Ermcp3/QueryDeliveryGoods', {MemberUserID ,  ...req})
+export function QueryDeliveryGoods( req : ErmcpDeliveryGoodsReq) : Promise<ErmcpDeliveryGoodsRsp[]>{
+    const areauserid = APP.get('userAccount').memberuserid; // 所属机构id
+    return commonSearch_go('/Ermcp3/QueryDeliveryGoods', {areauserid ,  ...req})
         .catch(err => {
             throw new Error(`查询现货商品: ${err.message}`);
         })

+ 4 - 1
src/goServiceAPI/ermcp/goodsInfo/interface.ts

@@ -1,10 +1,13 @@
 /**
- *
+ * 查询现货商品
  */
 export interface ErmcpDeliveryGoodsReq{
     excludecfg? :number; // 排除已配置的现货商品 1-排除
 }
 
+/**
+ * 现货商品返回
+ */
 export interface ErmcpDeliveryGoodsRsp{
     agreeunit	:number;//合约单位[散货时默认为1, 整装时默认为标准数量]
     areauserid	:number;//所属机构

+ 20 - 1
src/goServiceAPI/ermcp/spot-contract/index.ts

@@ -1 +1,20 @@
-/** ================================= 现货合同 ================================**/
+/** ================================= 现货合同 ================================**/
+import APP from "@/services";
+import {commonSearch_go} from "@/goServiceAPI";
+import {Ermcp3ContractReq, Ermcp3ContractRsp} from "@/goServiceAPI/ermcp/spot-contract/interface";
+
+/**
+ * 查询现货合同 /Ermcp3/QuerySpotContract
+ * @param req.querytype 查询类型 1-未提交 2-待审核 3-履约中 4-已完成
+ * @param req.userid 用户ID (非必填)
+ * @param req.usertype 用户类型 2-机构 7-企业成员 (非必填)
+ * @param req.contractid 合同ID(SpotContractId) (非必填)
+ * @constructor
+ */
+export function QuerySpotContract( req : Ermcp3ContractReq) : Promise<Ermcp3ContractRsp[]>{
+    const areauserid = APP.get('userAccount').memberuserid; // 所属机构id
+    return commonSearch_go('/Ermcp3/QuerySpotContract', {areauserid ,  ...req})
+        .catch(err => {
+            throw new Error(`查询现货合同: ${err.message}`);
+        })
+}

+ 71 - 0
src/goServiceAPI/ermcp/spot-contract/interface.ts

@@ -0,0 +1,71 @@
+/**
+ * 现货合同请求
+ */
+export interface Ermcp3ContractReq{
+    querytype:  number    //  查询类型 1-未提交 2-待审核 3-履约中 4-已完成
+    userid? :   number    //  用户ID
+    usertype? : number    //  用户类型 2-机构 7-企业成员
+    contractid? : string  //  合同ID(SpotContractId)
+}
+
+/**
+ * 现货合同返回
+ */
+export interface Ermcp3ContractRsp{
+    accountid	:string;//期货账户id
+    amount	:number;//金额 [1:一口价、3:暂定价]
+    attachment	:string;//附件
+    auditremark	:string;//审核意见
+    audittime	:string;//审核时间
+    biztype	:number;//业务类型 1-套保 2-套利
+    brandname	:string;//品牌名称
+    buynickname	:string;//销售方昵称
+    buyuserid	:number;//采购方ID
+    buyusername	:string;//采购方名称
+    contracctstatus	:number;//合同状态 - number;
+//:未提交 1:待审核 2:执行中 3:正常完结 4:审核拒绝 5:异常完结 6:已撤回
+    contractmargin	:number;//合同保证金
+    contractno	:string;//现货合同编号
+    contracttype	:number;//现货合同类型 - 1:采购 -1:销售
+    convertfactor	:number;//标仓系数(品类)
+    createtime	:string;//创建时间
+    deliveryenddate	:string;//交收期(结束)
+    deliverygoodscode	:string;//现货品种代码
+    deliverygoodsid	:number;//现货品种ID
+    deliverygoodsname	:string;//现货品种名称
+    deliverystartdate	:string;//交收期(开始)
+    enddate	:string;//点价结束日期 [2:点价 3:暂定价]
+    enumdicname	:string;//单位名称
+    goodscode	:string;//点价合约代码
+    goodsid	:number;//点价合约ID - number;
+//:为现货,其它为期货商品合约ID [2:点价 3:暂定价]
+    goodsname	:string;//点价商品名称
+    margin	:number;//当前保证金
+    meruserid	:number;//跟单员id
+    meruserlogincode	:string;//跟单员登录代码
+    price	:number;//价格\暂定价 [1:一口价、3:暂定价]
+    pricemove	:number;//升贴水 [2:点价 3:暂定价]
+    pricetype	:number;//定价类型 - 1:一口价 2:点价 3:暂定价
+    producttype	:number;//产品类型 - 1:标准仓单 2:等标 3:非标
+    qty	:number;//数量
+    remark	:string;//备注
+    saleuserid	:number;//业务员id
+    saleuserlogincode	:string;//业务员登录代码
+    sellnickname	:string;//采购方昵称
+    selluserid	:number;//销售方ID
+    sellusername	:string;//销售方名称
+    spotcontractid	:string;//现货合同ID(6number;
+//2+Unix秒时间戳(1number;
+//位)+xxxxxx)
+    spotgoodsbrandid	:number;//现货品牌ID(DGFactoryItem表的ID)
+    spotgoodsdesc	:string;//商品型号
+    startdate	:string;//点价开始日期 [2:点价 3:暂定价]
+    tradeuserid	:number;//交易员id
+    tradeuserlogincode	:string;//交易员登录代码
+    unitid	:number;//单位id(取品类上的单位id)
+    updatetime	:string;//更新时间
+    userid	:number;//所属机构ID
+    wrstandardcode	:string;//品类代码
+    wrstandardid	:number;//品类ID
+    wrstandardname	:string;//品类名称
+}

+ 40 - 0
src/protoService/delivery/index.ts

@@ -0,0 +1,40 @@
+import {DeliveryGoodsApplyReq} from "@/protoService/delivery/interface";
+import {getUserId} from "@/services/bus/account";
+import {getUUID} from "@/utils/tool/common";
+import {buildProtoReq50, parseProtoRsp50} from "@/services/socket/protobuf/buildReq";
+import APP from "@/services";
+import {Callback} from "@/utils/websocket";
+
+/**
+ * 现货品种申请请求
+ * @param param DeliveryGoodsApplyReq
+ */
+export const addDeliveryGoodsApply = (param: DeliveryGoodsApplyReq): Promise<any> => {
+    return new Promise((resolve, reject) => {
+        const req = {
+            version: "3.2",
+        };
+        const params = {
+            protobufName: 'DeliveryGoodsApplyReq',
+            funCodeName: 'DeliveryGoodsApplyReq',
+            reqParams: Object.assign(req, param),
+            msgHeadParams: {
+                AccountID: param.accountid,
+                MarketID: 18,
+                GoodsID: 0,
+            }
+        };
+        const package50 = buildProtoReq50(params);
+        APP.sendTradingServer(package50, undefined, {
+            onSuccess: (res) => {
+                const { isSuccess, result } = parseProtoRsp50(res, 'DelUserReceiveInfoRsp');
+                if (isSuccess) {
+                    resolve(result);
+                } else {
+                    reject(result);
+                }
+            },
+            onFail: (err) => reject(err.message),
+        } as Callback);
+    });
+}

+ 37 - 0
src/protoService/delivery/interface.ts

@@ -0,0 +1,37 @@
+// 现货品种申请请求 0 29 124
+export interface DeliveryGoodsApplyReq {
+    accountid: string  // header 需要用到
+    userid: number // uint64 用户ID
+    loginid: number // uint64 登录ID
+    deliverygoodscode?: string // string 交割商品代码(新增时有值)
+    deliverygoodsname?: string // string 交割商品名称(新增时有值)
+    deliverygoodsid?: number// uint64 交割商品id(修改时有值)
+    unitid: number // uint64 单位ID
+    type: number// int32 类型 1 新增 2 修改
+    remark: number // string 备注
+    gldwrstandards: GLDWRStandardEx[]; //        GLDWRStandardEx 现货商品型号数据
+    glddgfactoryItems: GLDDGFactoryItemEx[] //   GLDDGFactoryItemEx 现货商品品牌数据
+    wrsconvertdetails: WRSConvertDetailEx[] // WRSConvertDetailEx 现货商品折算配置明细数据
+
+}
+
+// 现货商品型号数据 0 29 172
+export interface GLDWRStandardEx {
+    wrstandardid?: number // uint64 型号ID(修改时有值)
+    wrstandardname: string // string 型号名称
+    unitid: number// uint64 单位ID
+    convertfactor: number// double 标仓系数(接口为3.1及以上版本时传)
+}
+
+// 现货商品品牌数据 0 29 173
+export interface GLDDGFactoryItemEx {
+    dgfactoryitemid?: number // uint64 品牌ID(修改时有值)
+    dgfactoryitemvalue: string // string 品牌名称
+}
+
+// 现货商品折算配置明细数据 0 29 127
+export interface WRSConvertDetailEx {
+    middlegoodsid: number // uint64 套保品种ID(接口为3.1及以下版本时传套保品种ID,否则传期货品种ID)
+    unitid: number // uint64 单位ID
+    convertratio: number // double 套保系数
+}

+ 67 - 11
src/router/index.ts

@@ -1,7 +1,9 @@
+import * as EnumType from '@/enums/routerName';
 import Layout from '@/layout/index.vue';
 import { isLogin } from '@/services/bus/login';
 import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router';
 import eventBus from '../utils/eventBus';
+
 const routes: Array<RouteRecordRaw> = [
     {
         path: '/login',
@@ -47,11 +49,11 @@ const routes: Array<RouteRecordRaw> = [
                 meta: {
                     requireAuth: true
                 },
-                redirect: to => { return { name: 'custom_info_normal' } },
+                redirect: to => { return { name: EnumType.CustomInfo.normal } },
                 children: [
                     {
                         path: '/custom_info/normal',
-                        name: 'custom_info_normal',
+                        name: EnumType.CustomInfo.normal,
                         component: () => import('@/views/information/custom/list/normal-use/index.vue'),
                         meta: {
                             requireAuth: true
@@ -59,7 +61,7 @@ const routes: Array<RouteRecordRaw> = [
                     },
                     {
                         path: '/custom_info/stop',
-                        name: 'custom_info_stop',
+                        name: EnumType.CustomInfo.stop,
                         component: () => import('@/views/information/custom/list/stop-use/index.vue'),
                         meta: {
                             requireAuth: true
@@ -74,11 +76,11 @@ const routes: Array<RouteRecordRaw> = [
                 meta: {
                     requireAuth: true
                 },
-                redirect: to => { return { name: 'goods_info_spot' } },
+                redirect: to => { return { name: EnumType.GoodsInfo.spot } },
                 children: [
                     {
                         path: '/goods_info/spot',
-                        name: 'goods_info_spot',
+                        name: EnumType.GoodsInfo.spot,
                         component: () => import('@/views/information/goods/list/spot-variety/index.vue'),
                         meta: {
                             requireAuth: true
@@ -86,7 +88,7 @@ const routes: Array<RouteRecordRaw> = [
                     },
                     {
                         path: '/goods_info/hedging',
-                        name: 'goods_info_hedging',
+                        name: EnumType.GoodsInfo.hedging,
                         component: () => import('@/views/information/goods/list/hedging-variety/index.vue'),
                         meta: {
                             requireAuth: true
@@ -117,11 +119,11 @@ const routes: Array<RouteRecordRaw> = [
                 meta: {
                     requireAuth: true
                 },
-                redirect: to => { return { name: 'spot_contract-not-commit' } },
+                redirect: to => { return { name: EnumType.SpotContract.notCommit } },
                 children: [
                     {
                         path: '/spot_contract/not-commit',
-                        name: 'spot_contract-not-commit',
+                        name: EnumType.SpotContract.notCommit,
                         component: () => import('@/views/information/spot-contract/list/not-commit/index.vue'),
                         meta: {
                             requireAuth: true
@@ -129,7 +131,7 @@ const routes: Array<RouteRecordRaw> = [
                     },
                     {
                         path: '/spot_contract/done',
-                        name: 'spot_contract-done',
+                        name: EnumType.SpotContract.done,
                         component: () => import('@/views/information/spot-contract/list/done/index.vue'),
                         meta: {
                             requireAuth: true
@@ -137,7 +139,7 @@ const routes: Array<RouteRecordRaw> = [
                     },
                     {
                         path: '/spot_contract/peddding',
-                        name: 'spot_contract-peddding',
+                        name: EnumType.SpotContract.peddding,
                         component: () => import('@/views/information/spot-contract/list/peddding/index.vue'),
                         meta: {
                             requireAuth: true
@@ -145,7 +147,7 @@ const routes: Array<RouteRecordRaw> = [
                     },
                     {
                         path: '/spot_contract/performance',
-                        name: 'spot_contract-performance',
+                        name: EnumType.SpotContract.performance,
                         component: () => import('@/views/information/spot-contract/list/performance/index.vue'),
                         meta: {
                             requireAuth: true
@@ -160,6 +162,25 @@ const routes: Array<RouteRecordRaw> = [
                 meta: {
                     requireAuth: true
                 },
+                redirect: to => { return { name: EnumType.WarehouseInfo.normal } },
+                children: [
+                    {
+                        path: '/warehouse_info/normal',
+                        name: EnumType.WarehouseInfo.normal,
+                        component: () => import('@/views/information/warehouse-info/list/normal-use/index.vue'),
+                        meta: {
+                            requireAuth: true
+                        },
+                    },
+                    {
+                        path: '/warehouse_info/stop',
+                        name: EnumType.WarehouseInfo.stop,
+                        component: () => import('@/views/information/warehouse-info/list/stop-use/index.vue'),
+                        meta: {
+                            requireAuth: true
+                        },
+                    },
+                ]
             },
             {
                 path: '/exposure',
@@ -184,6 +205,41 @@ const routes: Array<RouteRecordRaw> = [
                 meta: {
                     requireAuth: true
                 },
+                redirect: to => { return { name: EnumType.Purchase.realTime } },
+                children: [
+                    {
+                        path: '/purchase/forward',
+                        name: EnumType.Purchase.forward,
+                        component: () => import('@/views/business/purchase/list/forward/index.vue'),
+                        meta: {
+                            requireAuth: true
+                        },
+                    },
+                    {
+                        path: '/purchase/history',
+                        name: EnumType.Purchase.history,
+                        component: () => import('@/views/business/purchase/list/history/index.vue'),
+                        meta: {
+                            requireAuth: true
+                        },
+                    },
+                    {
+                        path: '/purchase/real-time',
+                        name: EnumType.Purchase.realTime,
+                        component: () => import('@/views/business/purchase/list/real-time/index.vue'),
+                        meta: {
+                            requireAuth: true
+                        },
+                    },
+                    {
+                        path: '/purchase/spot',
+                        name: EnumType.Purchase.spot,
+                        component: () => import('@/views/business/purchase/list/spot/index.vue'),
+                        meta: {
+                            requireAuth: true
+                        },
+                    },
+                ]
             },
             {
                 path: '/sell',

+ 2 - 1
src/services/bus/login.ts

@@ -1,4 +1,4 @@
-import { GetPCMenus, getServerTime } from '@/goServiceAPI/commonService/index';
+import { GetPCMenus, getServerTime, QueryTableDefine } from '@/goServiceAPI/commonService/index';
 import { GetLoginID, LoginQuery } from '@/goServiceAPI/useInfo/index';
 import APP from '@/services';
 import { checkTokenLoop } from '@/services/bus/token';
@@ -23,6 +23,7 @@ export const login = async (logidCode: string, password: String, byteArr: Uint8A
         // localstorage 缓存登录信息,处理页面刷新
         setLoginData(loginData);
         await GetPCMenus();
+        await QueryTableDefine();
         // 获取服务时间
         await getServerTime();
         // getAllEnums();/

+ 15 - 12
src/services/dataCenter/index.ts

@@ -1,10 +1,11 @@
 import { reactive, toRefs } from 'vue';
 import { LastUpdateTimeModel, LoginaccountModel, TradeDateModel, userAccountModel, UserInfoModel } from './initDataModel/account';
-import { needClearSourceDataType, noClearSourceDataType } from './interface';
+import { NeedClearSourceDataType, NoClearSourceDataType } from './interface';
+
 /**
  * 需要清空数据中心
  */
-const needClearSourceData: needClearSourceDataType = {
+const needClearSourceData: NeedClearSourceDataType = {
     systemDate: '',
     externalexchange: [],
     goodsgroups: [], // 商品组
@@ -15,6 +16,8 @@ const needClearSourceData: needClearSourceDataType = {
     userInfo: new UserInfoModel(), // 用户信息
     username: '',
     menus: [],
+    tableHead: [],
+
 
     queryClientFixedADConfigs: [],
     checkTokenTimeDiff: Math.floor(Math.random() * 6 + 5) * 60 * 1000,
@@ -34,33 +37,33 @@ const needClearSourceData: needClearSourceDataType = {
 /**
  * 不需要清空的数据
  */
-const noClearSourceData: noClearSourceDataType = {
+const noClearSourceData: NoClearSourceDataType = {
     touristToken: 'c886a057f3d820d4dbc41473686c7c2d',
 };
 class DataCenter {
-    private data = toRefs<needClearSourceDataType>(reactive(Object.assign({}, needClearSourceData)));
-    private noClearData = toRefs<noClearSourceDataType>(reactive(Object.assign({}, noClearSourceData)));
+    private data = toRefs<NeedClearSourceDataType>(reactive(Object.assign({}, needClearSourceData)));
+    private noClearData = toRefs<NoClearSourceDataType>(reactive(Object.assign({}, noClearSourceData)));
 
     /** 重置所有数据 */
     public reset(): void {
-        this.data = toRefs<needClearSourceDataType>(reactive(Object.assign({}, needClearSourceData)));
+        this.data = toRefs<NeedClearSourceDataType>(reactive(Object.assign({}, needClearSourceData)));
     }
 
     /** 设置键对应的值 */
-    public setOneOf(props: keyof (needClearSourceDataType & noClearSourceDataType), value: any) {
+    public setOneOf(props: keyof (NeedClearSourceDataType & NoClearSourceDataType), value: any) {
         if (Reflect.has(noClearSourceData, props)) {
-            this.noClearData[props as keyof noClearSourceDataType].value = value;
+            this.noClearData[props as keyof NoClearSourceDataType].value = value;
         } else if (Reflect.has(needClearSourceData, props)) {
-            this.data[props as keyof needClearSourceDataType].value = value;
+            this.data[props as keyof NeedClearSourceDataType].value = value;
         }
     }
 
     /** 获取其中之一 */
-    public getOneOf(props: keyof (needClearSourceDataType & noClearSourceDataType)): any {
+    public getOneOf(props: keyof (NeedClearSourceDataType & NoClearSourceDataType)): any {
         if (Reflect.has(noClearSourceData, props)) {
-            return this.noClearData[props as keyof noClearSourceDataType];
+            return this.noClearData[props as keyof NoClearSourceDataType];
         } else if (Reflect.has(needClearSourceData, props)) {
-            return this.data[props as keyof needClearSourceDataType];
+            return this.data[props as keyof NeedClearSourceDataType];
         }
     }
 

+ 5 - 3
src/services/dataCenter/interface.ts

@@ -1,4 +1,4 @@
-import { OperationTabMenu } from '@/goServiceAPI/commonService/interface';
+import { OperationTabMenu, TableDefineRsp } from '@/goServiceAPI/commonService/interface';
 import * as useInfo from '@/goServiceAPI/useInfo/interface';
 import * as mineType from '@/services/http/mine/interface';
 import * as Type from '@/services/http/notice/interface';
@@ -15,14 +15,14 @@ import { SystemParam } from './interafce/error';
 /**
  * 不需要清空数据中心
  */
-export interface noClearSourceDataType {
+export interface NoClearSourceDataType {
     touristToken: string; // 游客Token
 }
 
 /**
  * 需要清空数据中心
  */
-export interface needClearSourceDataType {
+export interface NeedClearSourceDataType {
     systemDate: string; // 系统时间
     externalexchange: useInfo.Externalexchange[]; // 外部交易所
     goodsgroups: useInfo.Goodsgroup[]; // 商品组
@@ -33,6 +33,8 @@ export interface needClearSourceDataType {
     userInfo: useInfo.Userinfo; // 用户信息
     username: string;
     menus: OperationTabMenu[]; // 交易端菜单
+    tableHead: TableDefineRsp[]; // 动态表头
+
 
     queryClientFixedADConfigs: advert.fixedADConfigs[]; //首页图片广告
     checkTokenTimeDiff: number; // 轮休校验token时间差

+ 12 - 12
src/services/index.ts

@@ -1,13 +1,13 @@
-import { MTP2WebSocket, Callback, ReconnectChangeState } from '@/utils/websocket/index';
-import { Package40, Package50 } from '@/utils/websocket/package';
+import { funCode } from '@/funcode/index';
+import { checkTokenLoop } from '@/services/bus/token';
+import { NeedClearSourceDataType, NoClearSourceDataType } from '@/services/dataCenter/interface';
 import { serviceURL } from '@/utils/request/index';
-import DataCenter from './dataCenter/index';
-import { noClearSourceDataType, needClearSourceDataType } from '@/services/dataCenter/interface';
 import timerUtil from '@/utils/tool/timerUtil';
-import { checkTokenLoop } from '@/services/bus/token';
-import { funCode } from '@/funcode/index';
-import { noticeParseRsp } from './socket/protobuf/buildReq';
+import { Callback, MTP2WebSocket, ReconnectChangeState } from '@/utils/websocket/index';
+import { Package40, Package50 } from '@/utils/websocket/package';
 import eventBus from '../utils/eventBus';
+import DataCenter from './dataCenter/index';
+import { noticeParseRsp } from './socket/protobuf/buildReq';
 /** 行情和交易长链 */
 interface LongLink {
     /** 行情长链 */
@@ -29,16 +29,16 @@ export default new (class LifeCycleCtr {
         trade: new MTP2WebSocket<Package50>(1),
     };
 
-    constructor() {}
+    constructor() { }
 
     /** 数据中心初始化 */
-    initDataCenter(): void {}
+    initDataCenter(): void { }
 
     /**
      * 从数据中心获取普通数据
      * @param key needClearSourceDataType | noClearSourceDataType
      */
-    get(key: keyof (needClearSourceDataType & noClearSourceDataType)) {
+    get(key: keyof (NeedClearSourceDataType & NoClearSourceDataType)) {
         return this.dataCenter.getOneOf(key).value;
     }
 
@@ -46,7 +46,7 @@ export default new (class LifeCycleCtr {
      * 从数据中心获取数据响应式数据
      * @param key needClearSourceDataType | noClearSourceDataType
      */
-    getRef(key: keyof (needClearSourceDataType & noClearSourceDataType)) {
+    getRef(key: keyof (NeedClearSourceDataType & NoClearSourceDataType)) {
         return this.dataCenter.getOneOf(key);
     }
     /**
@@ -61,7 +61,7 @@ export default new (class LifeCycleCtr {
      * @param key needClearSourceDataType | noClearSourceDataType
      * @param value any
      */
-    set(key: keyof (needClearSourceDataType & noClearSourceDataType), value: any) {
+    set(key: keyof (NeedClearSourceDataType & NoClearSourceDataType), value: any) {
         return this.dataCenter.setOneOf(key, value);
     }
 

+ 27 - 3
src/views/business/purchase/index.vue

@@ -1,18 +1,42 @@
 <template>
   <!-- 采购 -->
   <div class="purchase">
-    采购
+    <firstMenu :list="list"
+               :value="'value'"
+               @selectMenu="selectMenu" />
+    <router-view />
   </div>
 </template>
 
 <script lang="ts">
 import { defineComponent } from 'vue';
+import firstMenu from '@/components/firstMenu/index.vue';
+import { useRouter } from 'vue-router';
+import { Purchase } from '@/enums/routerName';
+
+// 处理菜单
+function handleMenu() {
+    const router = useRouter();
+    const list = [
+        { key: Purchase.realTime, value: '实时敞口' },
+        { key: Purchase.spot, value: '现货头寸' },
+        { key: Purchase.forward, value: '期货头寸' },
+        { key: Purchase.history, value: '历史敞口' },
+    ];
+    function selectMenu(item: any) {
+        router.push({ name: item.key });
+    }
+    return { list, selectMenu };
+}
 
 export default defineComponent({
     name: 'purchase',
-    components: {},
+    components: {
+        firstMenu,
+    },
     setup() {
-        return {};
+        const { list, selectMenu } = handleMenu();
+        return { list, selectMenu };
     },
 });
 </script>

+ 83 - 0
src/views/business/purchase/list/forward/index.vue

@@ -0,0 +1,83 @@
+<template>
+  <!-- 采购: 现货头寸-->
+  <div class="spot-contract-peddding">
+    采购: 现货头寸
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent, ref } from 'vue';
+import { QueryCustomInfo } from '@/goServiceAPI/ermcp/customInfo/index';
+import { QueryCustomInfoType } from '@/goServiceAPI/ermcp/customInfo/interface';
+import { message } from 'ant-design-vue';
+import { initData } from '@/setup/methods/index';
+
+// 查询客户资料列表
+function getCustomList() {
+    // const filteredInfo = ref();
+    // const sortedInfo = ref();
+    // const columns = computed(() => {
+    //     const filtered = filteredInfo.value || {};
+    //     const sorted = sortedInfo.value || {};
+    //     return [
+    //         {
+    //             title: '序号',
+    //             dataIndex: 'index',
+    //             key: 'index',
+    //             align: 'center',
+    //             width: 50,
+    //             customRender: (param: any) => `${param.index + 1}`,
+    //         },
+    //         {
+    //             title: 'Age',
+    //             dataIndex: 'age',
+    //             key: 'age',
+    //             sorter: (a: DataItem, b: DataItem) => a.age - b.age,
+    //             sortOrder: sorted.columnKey === 'age' && sorted.order,
+    //         },
+    //         {
+    //             title: 'Address',
+    //             dataIndex: 'address',
+    //             key: 'address',
+    //             filters: [
+    //                 { text: 'London', value: 'London' },
+    //                 { text: 'New York', value: 'New York' },
+    //             ],
+    //             filteredValue: filtered.address || null,
+    //             onFilter: (value: string, record: DataItem) => record.address.includes(value),
+    //             sorter: (a: DataItem, b: DataItem) => a.address.length - b.address.length,
+    //             sortOrder: sorted.columnKey === 'address' && sorted.order,
+    //             ellipsis: true,
+    //         },
+    //     ];
+    // });
+    const customList = ref<QueryCustomInfoType[]>([]);
+    function actionQuery() {
+        QueryCustomInfo(4)
+            .then((res) => {
+                console.log('L', res);
+            })
+            .catch((err) => message.error(err));
+    }
+
+    return { customList, actionQuery };
+}
+
+export default defineComponent({
+    name: 'spot-contract-peddding',
+    components: {},
+    setup() {
+        const { customList, actionQuery } = getCustomList();
+        initData(() => {
+            actionQuery();
+            // 加载数据在这里
+        });
+        return { customList };
+    },
+});
+</script>
+
+<style lang="less">
+.spot-contract-peddding {
+}
+</style>;

+ 83 - 0
src/views/business/purchase/list/history/index.vue

@@ -0,0 +1,83 @@
+<template>
+  <!-- 采购: 历史敞口-->
+  <div class="purchase-history">
+    采购:历史敞口
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent, ref } from 'vue';
+import { QueryCustomInfo } from '@/goServiceAPI/ermcp/customInfo/index';
+import { QueryCustomInfoType } from '@/goServiceAPI/ermcp/customInfo/interface';
+import { message } from 'ant-design-vue';
+import { initData } from '@/setup/methods/index';
+
+// 查询客户资料列表
+function getCustomList() {
+    // const filteredInfo = ref();
+    // const sortedInfo = ref();
+    // const columns = computed(() => {
+    //     const filtered = filteredInfo.value || {};
+    //     const sorted = sortedInfo.value || {};
+    //     return [
+    //         {
+    //             title: '序号',
+    //             dataIndex: 'index',
+    //             key: 'index',
+    //             align: 'center',
+    //             width: 50,
+    //             customRender: (param: any) => `${param.index + 1}`,
+    //         },
+    //         {
+    //             title: 'Age',
+    //             dataIndex: 'age',
+    //             key: 'age',
+    //             sorter: (a: DataItem, b: DataItem) => a.age - b.age,
+    //             sortOrder: sorted.columnKey === 'age' && sorted.order,
+    //         },
+    //         {
+    //             title: 'Address',
+    //             dataIndex: 'address',
+    //             key: 'address',
+    //             filters: [
+    //                 { text: 'London', value: 'London' },
+    //                 { text: 'New York', value: 'New York' },
+    //             ],
+    //             filteredValue: filtered.address || null,
+    //             onFilter: (value: string, record: DataItem) => record.address.includes(value),
+    //             sorter: (a: DataItem, b: DataItem) => a.address.length - b.address.length,
+    //             sortOrder: sorted.columnKey === 'address' && sorted.order,
+    //             ellipsis: true,
+    //         },
+    //     ];
+    // });
+    const customList = ref<QueryCustomInfoType[]>([]);
+    function actionQuery() {
+        QueryCustomInfo(4)
+            .then((res) => {
+                console.log('L', res);
+            })
+            .catch((err) => message.error(err));
+    }
+
+    return { customList, actionQuery };
+}
+
+export default defineComponent({
+    name: 'purchase-history',
+    components: {},
+    setup() {
+        const { customList, actionQuery } = getCustomList();
+        initData(() => {
+            actionQuery();
+            // 加载数据在这里
+        });
+        return { customList };
+    },
+});
+</script>
+
+<style lang="less">
+.purchase-history {
+}
+</style>;

+ 83 - 0
src/views/business/purchase/list/real-time/index.vue

@@ -0,0 +1,83 @@
+<template>
+  <!-- 采购: 实时敞口-->
+  <div class="purchase-real-time">
+    采购: 实时敞口
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent, ref } from 'vue';
+import { QueryCustomInfo } from '@/goServiceAPI/ermcp/customInfo/index';
+import { QueryCustomInfoType } from '@/goServiceAPI/ermcp/customInfo/interface';
+import { message } from 'ant-design-vue';
+import { initData } from '@/setup/methods/index';
+
+// 查询客户资料列表
+function getCustomList() {
+    // const filteredInfo = ref();
+    // const sortedInfo = ref();
+    // const columns = computed(() => {
+    //     const filtered = filteredInfo.value || {};
+    //     const sorted = sortedInfo.value || {};
+    //     return [
+    //         {
+    //             title: '序号',
+    //             dataIndex: 'index',
+    //             key: 'index',
+    //             align: 'center',
+    //             width: 50,
+    //             customRender: (param: any) => `${param.index + 1}`,
+    //         },
+    //         {
+    //             title: 'Age',
+    //             dataIndex: 'age',
+    //             key: 'age',
+    //             sorter: (a: DataItem, b: DataItem) => a.age - b.age,
+    //             sortOrder: sorted.columnKey === 'age' && sorted.order,
+    //         },
+    //         {
+    //             title: 'Address',
+    //             dataIndex: 'address',
+    //             key: 'address',
+    //             filters: [
+    //                 { text: 'London', value: 'London' },
+    //                 { text: 'New York', value: 'New York' },
+    //             ],
+    //             filteredValue: filtered.address || null,
+    //             onFilter: (value: string, record: DataItem) => record.address.includes(value),
+    //             sorter: (a: DataItem, b: DataItem) => a.address.length - b.address.length,
+    //             sortOrder: sorted.columnKey === 'address' && sorted.order,
+    //             ellipsis: true,
+    //         },
+    //     ];
+    // });
+    const customList = ref<QueryCustomInfoType[]>([]);
+    function actionQuery() {
+        QueryCustomInfo(4)
+            .then((res) => {
+                console.log('L', res);
+            })
+            .catch((err) => message.error(err));
+    }
+
+    return { customList, actionQuery };
+}
+
+export default defineComponent({
+    name: 'purchase-real-time',
+    components: {},
+    setup() {
+        const { customList, actionQuery } = getCustomList();
+        initData(() => {
+            actionQuery();
+            // 加载数据在这里
+        });
+        return { customList };
+    },
+});
+</script>
+
+<style lang="less">
+.purchase-real-time {
+}
+</style>;

+ 83 - 0
src/views/business/purchase/list/spot/index.vue

@@ -0,0 +1,83 @@
+<template>
+  <!-- 采购: 现货头寸-->
+  <div class="purchase-spot-position">
+    采购: 现货头寸
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent, ref } from 'vue';
+import { QueryCustomInfo } from '@/goServiceAPI/ermcp/customInfo/index';
+import { QueryCustomInfoType } from '@/goServiceAPI/ermcp/customInfo/interface';
+import { message } from 'ant-design-vue';
+import { initData } from '@/setup/methods/index';
+
+// 查询客户资料列表
+function getCustomList() {
+    // const filteredInfo = ref();
+    // const sortedInfo = ref();
+    // const columns = computed(() => {
+    //     const filtered = filteredInfo.value || {};
+    //     const sorted = sortedInfo.value || {};
+    //     return [
+    //         {
+    //             title: '序号',
+    //             dataIndex: 'index',
+    //             key: 'index',
+    //             align: 'center',
+    //             width: 50,
+    //             customRender: (param: any) => `${param.index + 1}`,
+    //         },
+    //         {
+    //             title: 'Age',
+    //             dataIndex: 'age',
+    //             key: 'age',
+    //             sorter: (a: DataItem, b: DataItem) => a.age - b.age,
+    //             sortOrder: sorted.columnKey === 'age' && sorted.order,
+    //         },
+    //         {
+    //             title: 'Address',
+    //             dataIndex: 'address',
+    //             key: 'address',
+    //             filters: [
+    //                 { text: 'London', value: 'London' },
+    //                 { text: 'New York', value: 'New York' },
+    //             ],
+    //             filteredValue: filtered.address || null,
+    //             onFilter: (value: string, record: DataItem) => record.address.includes(value),
+    //             sorter: (a: DataItem, b: DataItem) => a.address.length - b.address.length,
+    //             sortOrder: sorted.columnKey === 'address' && sorted.order,
+    //             ellipsis: true,
+    //         },
+    //     ];
+    // });
+    const customList = ref<QueryCustomInfoType[]>([]);
+    function actionQuery() {
+        QueryCustomInfo(4)
+            .then((res) => {
+                console.log('L', res);
+            })
+            .catch((err) => message.error(err));
+    }
+
+    return { customList, actionQuery };
+}
+
+export default defineComponent({
+    name: 'purchase-spot-position',
+    components: {},
+    setup() {
+        const { customList, actionQuery } = getCustomList();
+        initData(() => {
+            actionQuery();
+            // 加载数据在这里
+        });
+        return { customList };
+    },
+});
+</script>
+
+<style lang="less">
+.purchase-spot-position {
+}
+</style>;

+ 76 - 0
src/views/information/custom/compoments/filterTable/index.vue

@@ -0,0 +1,76 @@
+<template>
+  <!-- 过滤客户资料表格 -->
+  <div class="filter-custom-table">
+    <a-select label-in-value
+              v-model:value="userinfotype"
+              placeholder="全部客户类型"
+              style="width: 120px"
+              @change="handleChange">
+      <a-select-option value="1">个人</a-select-option>
+      <a-select-option value="2">企业</a-select-option>
+    </a-select>
+    <a-input v-model:value="nickname"
+             style="width: 140px"
+             placeholder="模糊搜索客户简称" />
+    <a-input v-model:value="name"
+             style="width: 140px"
+             placeholder="模糊搜索客户名称" />
+    <a-input v-model:value="phone"
+             style="width: 140px"
+             placeholder="模糊搜索手机号码" />
+    <a-button @click="search">查询</a-button>
+    <a-button @click="reset">重置</a-button>
+    <a-button @click="add">新增</a-button>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent, ref } from 'vue';
+
+// 处理 客户类型
+function handleUserInfoType() {
+    interface Value {
+        key?: string;
+        label?: string;
+    }
+    const userinfotype = ref<number>(0);
+    function handleChange(value: Value) {
+        console.log(value);
+    }
+    return { userinfotype, handleChange };
+}
+
+// 搜索
+function handleSearch() {
+    const nickname = ref<string>('');
+    const name = ref<string>('');
+    const phone = ref<string>('');
+    function search() {}
+    function reset() {
+        nickname.value = '';
+        name.value = '';
+        phone.value = '';
+    }
+    return { nickname, name, phone, search, reset };
+}
+
+export default defineComponent({
+    name: 'filter-custom-table',
+    components: {},
+    setup(props, context) {
+        function add() {
+            context.emit('add');
+        }
+        return {
+            ...handleUserInfoType(),
+            ...handleSearch(),
+            add,
+        };
+    },
+});
+</script>
+
+<style lang="less">
+.filter-custom-table {
+}
+</style>;

+ 3 - 2
src/views/information/custom/index.vue

@@ -12,13 +12,14 @@
 import { defineComponent } from 'vue';
 import firstMenu from '@/components/firstMenu/index.vue';
 import { useRouter } from 'vue-router';
+import { CustomInfo } from '@/enums/routerName';
 
 // 处理菜单
 function handleMenu() {
     const router = useRouter();
     const list = [
-        { key: 'custom_info_normal', value: '正常' },
-        { key: 'custom_info_stop', value: '停用' },
+        { key: CustomInfo.normal, value: '正常' },
+        { key: CustomInfo.stop, value: '停用' },
     ];
     function selectMenu(item: any) {
         router.push({ name: item.key });

+ 51 - 45
src/views/information/custom/list/normal-use/index.vue

@@ -1,12 +1,7 @@
 <template>
   <!-- 客户信息: 正常 -->
   <div class="custom-normal">
-    客户信息: 正常
-    <div class="table-operations">
-      <a-button>查询</a-button>
-      <a-button>重置</a-button>
-      <a-button>新增</a-button>
-    </div>
+    <filterCustomTable @add="add" />
     <!-- <a-table :columns="columns"
              :data-source="data"
              @change="handleChange" /> -->
@@ -15,51 +10,53 @@
 
 <script lang="ts">
 import { computed, defineComponent, ref } from 'vue';
+import { QueryTableDefine } from '@/goServiceAPI/commonService/index';
 
 import { initData } from '@/setup/methods/index';
 import { QueryCustomInfo } from '@/goServiceAPI/ermcp/customInfo/index';
 import { QueryCustomInfoType } from '@/goServiceAPI/ermcp/customInfo/interface';
+import filterCustomTable from '@/views/information/custom/compoments/filterTable/index.vue';
 import { message } from 'ant-design-vue';
 
 // 查询客户资料列表
 function getCustomList() {
-    // const filteredInfo = ref();
-    // const sortedInfo = ref();
-    // const columns = computed(() => {
-    //     const filtered = filteredInfo.value || {};
-    //     const sorted = sortedInfo.value || {};
-    //     return [
-    //         {
-    //             title: '序号',
-    //             dataIndex: 'index',
-    //             key: 'index',
-    //             align: 'center',
-    //             width: 50,
-    //             customRender: (param: any) => `${param.index + 1}`,
-    //         },
-    //         {
-    //             title: 'Age',
-    //             dataIndex: 'age',
-    //             key: 'age',
-    //             sorter: (a: DataItem, b: DataItem) => a.age - b.age,
-    //             sortOrder: sorted.columnKey === 'age' && sorted.order,
-    //         },
-    //         {
-    //             title: 'Address',
-    //             dataIndex: 'address',
-    //             key: 'address',
-    //             filters: [
-    //                 { text: 'London', value: 'London' },
-    //                 { text: 'New York', value: 'New York' },
-    //             ],
-    //             filteredValue: filtered.address || null,
-    //             onFilter: (value: string, record: DataItem) => record.address.includes(value),
-    //             sorter: (a: DataItem, b: DataItem) => a.address.length - b.address.length,
-    //             sortOrder: sorted.columnKey === 'address' && sorted.order,
-    //             ellipsis: true,
-    //         },
-    //     ];
-    // });
+    const filteredInfo = ref();
+    const sortedInfo = ref();
+    const columns = computed(() => {
+        // const filtered = filteredInfo.value || {};
+        // const sorted = sortedInfo.value || {};
+        // return [
+        //     {
+        //         title: '序号',
+        //         dataIndex: 'index',
+        //         key: 'index',
+        //         align: 'center',
+        //         width: 50,
+        //         customRender: (param: any) => `${param.index + 1}`,
+        //     },
+        //     {
+        //         title: 'Age',
+        //         dataIndex: 'age',
+        //         key: 'age',
+        //         sorter: (a: DataItem, b: DataItem) => a.age - b.age,
+        //         sortOrder: sorted.columnKey === 'age' && sorted.order,
+        //     },
+        //     {
+        //         title: 'Address',
+        //         dataIndex: 'address',
+        //         key: 'address',
+        //         filters: [
+        //             { text: 'London', value: 'London' },
+        //             { text: 'New York', value: 'New York' },
+        //         ],
+        //         filteredValue: filtered.address || null,
+        //         onFilter: (value: string, record: DataItem) => record.address.includes(value),
+        //         sorter: (a: DataItem, b: DataItem) => a.address.length - b.address.length,
+        //         sortOrder: sorted.columnKey === 'address' && sorted.order,
+        //         ellipsis: true,
+        //     },
+        // ];
+    });
     const customList = ref<QueryCustomInfoType[]>([]);
     function actionQuery() {
         QueryCustomInfo(3)
@@ -72,16 +69,25 @@ function getCustomList() {
     return { customList, actionQuery };
 }
 
+function add() {
+    console.log('add');
+}
 export default defineComponent({
     name: 'custom-normal',
-    components: {},
+    components: {
+        filterCustomTable,
+    },
     setup() {
         const { customList, actionQuery } = getCustomList();
+
         initData(() => {
             actionQuery();
+            QueryTableDefine().then((res) => {
+                console.log('QueryTableDefine', res[0]);
+            });
             // 加载数据在这里
         });
-        return { customList };
+        return { customList, add };
     },
 });
 </script>

+ 3 - 2
src/views/information/goods/index.vue

@@ -12,13 +12,14 @@
 import { defineComponent } from 'vue';
 import firstMenu from '@/components/firstMenu/index.vue';
 import { useRouter } from 'vue-router';
+import { GoodsInfo } from '@/enums/routerName';
 
 // 处理菜单
 function handleMenu() {
     const router = useRouter();
     const list = [
-        { key: 'goods_info_spot', value: '现货品种' },
-        { key: 'goods_info_hedging', value: '套保品种' },
+        { key: GoodsInfo.spot, value: '现货品种' },
+        { key: GoodsInfo.hedging, value: '套保品种' },
     ];
     function selectMenu(item: any) {
         router.push({ name: item.key });

+ 5 - 4
src/views/information/spot-contract/index.vue

@@ -12,15 +12,16 @@
 import { defineComponent } from 'vue';
 import firstMenu from '@/components/firstMenu/index.vue';
 import { useRouter } from 'vue-router';
+import { SpotContract } from '@/enums/routerName';
 
 // 处理菜单
 function handleMenu() {
     const router = useRouter();
     const list = [
-        { key: 'spot_contract-not-commit', value: '未提交' },
-        { key: 'spot_contract-peddding', value: '待审核' },
-        { key: 'spot_contract-performance', value: '履约中' },
-        { key: 'spot_contract-done', value: '已完成' },
+        { key: SpotContract.notCommit, value: '未提交' },
+        { key: SpotContract.peddding, value: '待审核' },
+        { key: SpotContract.performance, value: '履约中' },
+        { key: SpotContract.done, value: '已完成' },
     ];
     function selectMenu(item: any) {
         router.push({ name: item.key });

+ 25 - 3
src/views/information/warehouse-info/index.vue

@@ -1,18 +1,40 @@
 <template>
   <!-- 仓库信息 -->
   <div class="warehouse-info">
-    "仓库信息"
+    <firstMenu :list="list"
+               :value="'value'"
+               @selectMenu="selectMenu" />
+    <router-view />
   </div>
 </template>
 
 <script lang="ts">
 import { defineComponent } from 'vue';
+import firstMenu from '@/components/firstMenu/index.vue';
+import { useRouter } from 'vue-router';
+import { WarehouseInfo } from '@/enums/routerName';
+
+// 处理菜单
+function handleMenu() {
+    const router = useRouter();
+    const list = [
+        { key: WarehouseInfo.normal, value: '正常' },
+        { key: WarehouseInfo.stop, value: '停用' },
+    ];
+    function selectMenu(item: any) {
+        router.push({ name: item.key });
+    }
+    return { list, selectMenu };
+}
 
 export default defineComponent({
     name: 'warehouse-info',
-    components: {},
+    components: {
+        firstMenu,
+    },
     setup() {
-        return {};
+        const { list, selectMenu } = handleMenu();
+        return { list, selectMenu };
     },
 });
 </script>

+ 92 - 0
src/views/information/warehouse-info/list/normal-use/index.vue

@@ -0,0 +1,92 @@
+<template>
+  <!-- 仓库信息: 正常 -->
+  <div class="warehouse-info-normal">
+    仓库信息: 正常
+    <div class="table-operations">
+      <a-button>查询</a-button>
+      <a-button>重置</a-button>
+      <a-button>新增</a-button>
+    </div>
+    <!-- <a-table :columns="columns"
+             :data-source="data"
+             @change="handleChange" /> -->
+  </div>
+</template>
+
+<script lang="ts">
+import { computed, defineComponent, ref } from 'vue';
+
+import { initData } from '@/setup/methods/index';
+import { QueryCustomInfo } from '@/goServiceAPI/ermcp/customInfo/index';
+import { QueryCustomInfoType } from '@/goServiceAPI/ermcp/customInfo/interface';
+import { message } from 'ant-design-vue';
+
+// 查询客户资料列表
+function getCustomList() {
+    // const filteredInfo = ref();
+    // const sortedInfo = ref();
+    // const columns = computed(() => {
+    //     const filtered = filteredInfo.value || {};
+    //     const sorted = sortedInfo.value || {};
+    //     return [
+    //         {
+    //             title: '序号',
+    //             dataIndex: 'index',
+    //             key: 'index',
+    //             align: 'center',
+    //             width: 50,
+    //             customRender: (param: any) => `${param.index + 1}`,
+    //         },
+    //         {
+    //             title: 'Age',
+    //             dataIndex: 'age',
+    //             key: 'age',
+    //             sorter: (a: DataItem, b: DataItem) => a.age - b.age,
+    //             sortOrder: sorted.columnKey === 'age' && sorted.order,
+    //         },
+    //         {
+    //             title: 'Address',
+    //             dataIndex: 'address',
+    //             key: 'address',
+    //             filters: [
+    //                 { text: 'London', value: 'London' },
+    //                 { text: 'New York', value: 'New York' },
+    //             ],
+    //             filteredValue: filtered.address || null,
+    //             onFilter: (value: string, record: DataItem) => record.address.includes(value),
+    //             sorter: (a: DataItem, b: DataItem) => a.address.length - b.address.length,
+    //             sortOrder: sorted.columnKey === 'address' && sorted.order,
+    //             ellipsis: true,
+    //         },
+    //     ];
+    // });
+    const customList = ref<QueryCustomInfoType[]>([]);
+    function actionQuery() {
+        QueryCustomInfo(3)
+            .then((res) => {
+                console.log('L', res);
+            })
+            .catch((err) => message.error(err));
+    }
+
+    return { customList, actionQuery };
+}
+
+export default defineComponent({
+    name: 'warehouse-info-normal',
+    components: {},
+    setup() {
+        const { customList, actionQuery } = getCustomList();
+        initData(() => {
+            actionQuery();
+            // 加载数据在这里
+        });
+        return { customList };
+    },
+});
+</script>
+
+<style lang="less">
+.warehouse-info-normal {
+}
+</style>;

+ 83 - 0
src/views/information/warehouse-info/list/stop-use/index.vue

@@ -0,0 +1,83 @@
+<template>
+  <!-- 仓库信息: 停用 -->
+  <div class="warehouse-info-stop">
+    仓库信息: 停用
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent, ref } from 'vue';
+import { QueryCustomInfo } from '@/goServiceAPI/ermcp/customInfo/index';
+import { QueryCustomInfoType } from '@/goServiceAPI/ermcp/customInfo/interface';
+import { message } from 'ant-design-vue';
+import { initData } from '@/setup/methods/index';
+
+// 查询客户资料列表
+function getCustomList() {
+    // const filteredInfo = ref();
+    // const sortedInfo = ref();
+    // const columns = computed(() => {
+    //     const filtered = filteredInfo.value || {};
+    //     const sorted = sortedInfo.value || {};
+    //     return [
+    //         {
+    //             title: '序号',
+    //             dataIndex: 'index',
+    //             key: 'index',
+    //             align: 'center',
+    //             width: 50,
+    //             customRender: (param: any) => `${param.index + 1}`,
+    //         },
+    //         {
+    //             title: 'Age',
+    //             dataIndex: 'age',
+    //             key: 'age',
+    //             sorter: (a: DataItem, b: DataItem) => a.age - b.age,
+    //             sortOrder: sorted.columnKey === 'age' && sorted.order,
+    //         },
+    //         {
+    //             title: 'Address',
+    //             dataIndex: 'address',
+    //             key: 'address',
+    //             filters: [
+    //                 { text: 'London', value: 'London' },
+    //                 { text: 'New York', value: 'New York' },
+    //             ],
+    //             filteredValue: filtered.address || null,
+    //             onFilter: (value: string, record: DataItem) => record.address.includes(value),
+    //             sorter: (a: DataItem, b: DataItem) => a.address.length - b.address.length,
+    //             sortOrder: sorted.columnKey === 'address' && sorted.order,
+    //             ellipsis: true,
+    //         },
+    //     ];
+    // });
+    const customList = ref<QueryCustomInfoType[]>([]);
+    function actionQuery() {
+        QueryCustomInfo(4)
+            .then((res) => {
+                console.log('L', res);
+            })
+            .catch((err) => message.error(err));
+    }
+
+    return { customList, actionQuery };
+}
+
+export default defineComponent({
+    name: 'warehouse-info-stop',
+    components: {},
+    setup() {
+        const { customList, actionQuery } = getCustomList();
+        initData(() => {
+            actionQuery();
+            // 加载数据在这里
+        });
+        return { customList };
+    },
+});
+</script>
+
+<style lang="less">
+.warehouse-info-stop {
+}
+</style>;

+ 30 - 28
src/views/setting/notice/components/noticeContent.vue

@@ -1,34 +1,36 @@
 <template>
-    <div class="notice-content">
-        <aside>
-            <a-list item-layout="horizontal" :data-source="noticeList">
-                <template #renderItem="{ item }">
-                    <a-list-item @click="choose(item)">
-                        <a-list-item-meta :description="item.createtime">
-                            <template #title>
-                                <a :style="{color: item.readed ? '#88A0AE' : '#E5E5E5'}" href="javascript:;">{{ item.title }}</a>
-                            </template>
-                            <template #avatar>
-                                <a-badge :color="item.readed ? '#88A0AE' : 'orange'" />
-                            </template>
-                        </a-list-item-meta>
-                    </a-list-item>
-                </template>
-            </a-list>
-        </aside>
-        <main>
-            <h4>{{chooseItemNotice.title}}</h4>
-            <p>{{chooseItemNotice.createtime}}</p>
-            <div>
-                {{chooseItemNotice.content}}
-            </div>
-        </main>
-    </div>
+  <div class="notice-content">
+    <aside>
+      <a-list item-layout="horizontal"
+              :data-source="noticeList">
+        <template #renderItem="{ item }">
+          <a-list-item @click="choose(item)">
+            <a-list-item-meta :description="item.createtime">
+              <template #title>
+                <a :style="{color: item.readed ? '#88A0AE' : '#E5E5E5'}"
+                   href="javascript:;">{{ item.title }}</a>
+              </template>
+              <template #avatar>
+                <a-badge :color="item.readed ? '#88A0AE' : 'orange'" />
+              </template>
+            </a-list-item-meta>
+          </a-list-item>
+        </template>
+      </a-list>
+    </aside>
+    <main>
+      <h4>{{chooseItemNotice.title}}</h4>
+      <p>{{chooseItemNotice.createtime}}</p>
+      <div>
+        {{chooseItemNotice.content}}
+      </div>
+    </main>
+  </div>
 </template>
 
 <script lang="ts">
 import { defineComponent, PropType, reactive, computed } from 'vue';
-import { queryNoticeRsp } from '@/goServiceAPI/commonService/interface';
+import { QueryNoticeRsp } from '@/goServiceAPI/commonService/interface';
 import { mergeObjSameProperty } from '@/utils/tool/set';
 
 function chooseNotice() {
@@ -42,7 +44,7 @@ function chooseNotice() {
         content: '',
         createtime: '',
     });
-    function choose(item: queryNoticeRsp) {
+    function choose(item: QueryNoticeRsp) {
         mergeObjSameProperty(chooseItemNotice, item);
     }
     return { chooseItemNotice, choose };
@@ -52,7 +54,7 @@ export default defineComponent({
     name: 'notice',
     props: {
         noticeList: {
-            type: Object as PropType<queryNoticeRsp[]>,
+            type: Object as PropType<QueryNoticeRsp[]>,
             default: [],
         },
     },

+ 2 - 2
src/views/setting/notice/index.vue

@@ -36,7 +36,7 @@ import { closeModal } from '@/setup/controlModal/index';
 import NoticeContent from './components/noticeContent.vue';
 import { initData } from '@/setup/methods/index';
 import { queryNotice } from '@/goServiceAPI/commonService/index';
-import { queryNoticeRsp } from '@/goServiceAPI/commonService/interface';
+import { QueryNoticeRsp } from '@/goServiceAPI/commonService/interface';
 
 export default defineComponent({
     name: 'notice',
@@ -46,7 +46,7 @@ export default defineComponent({
     setup() {
         const { visible, cancel, handleOk } = closeModal('notice');
         // 公告消息
-        const noticeList = ref<queryNoticeRsp[]>([]);
+        const noticeList = ref<QueryNoticeRsp[]>([]);
 
         initData(() => {
             queryNotice().then((res) => {

+ 5 - 28
swagger-to-ts/swagger.ts

@@ -1,30 +1,7 @@
 export interface Name{
-address	:string;//通讯地址
-attachment1	:string;//附件1
-audittime	:string;//审核时间
-cardbackphotourl	:string;//证件反面图片地址
-cardfrontphotourl	:string;//证件正面图片地址
-cardnum	:string;//证件号码
-cardtype	:number;//证件类型
-cardtypename	:string;//证件类型名称
-cityid	:number;//市
-contactname	:string;//联系人
-countryid	:number;//国家
-createtime	:string;//创建时间
-customername	:string;//企业名称
-districtid	:number;//区域
-email	:string;//邮件
-legalpersonname	:string;//法人姓名(企业)
-memberuserid	:number;//所属机构ID
-mobile	:string;//手机号码
-modifytime	:string;//修改时间
-nickname	:string;//昵称
-provinceid	:number;//省
-remark	:string;//备注
-status	:number;//账户状态 - 1:待激活 2:待审核 3:待复审 4:正常 5:审核拒绝 6:注销
-statusdesc	:string;//账户状态中文描述
-taxpayernum	:string;//纳税人识别号
-telphone	:string;//联系电话
-userid	:number;//用户ID
-userinfotype	:string;//客户类型
+remark	:string;//Remark
+tabelmenu	:string;//列表菜单
+tablekey	:string;//列表Key
+tablename	:string;//列表名称
+tabletype	:number;//列表类型 - 1:管理端 2:终端
 }

+ 9 - 78
swagger-to-ts/swagger.txt

@@ -1,85 +1,16 @@
 {
-address	string
-通讯地址
-
-attachment1	string
-附件1
-
-audittime	string
-审核时间
-
-cardbackphotourl	string
-证件反面图片地址
-
-cardfrontphotourl	string
-证件正面图片地址
-
-cardnum	string
-证件号码
-
-cardtype	integer
-证件类型
-
-cardtypename	string
-证件类型名称
-
-cityid	integer
-市
-
-contactname	string
-联系人
-
-countryid	integer
-国家
-
-createtime	string
-创建时间
-
-customername	string
-企业名称
-
-districtid	integer
-区域
-
-email	string
-邮件
-
-legalpersonname	string
-法人姓名(企业)
-
-memberuserid	integer
-所属机构ID
-
-mobile	string
-手机号码
-
-modifytime	string
-修改时间
-
-nickname	string
-昵称
-
-provinceid	integer
-省
-
 remark	string
-备注
-
-status	integer
-账户状态 - 1:待激活 2:待审核 3:待复审 4:正常 5:审核拒绝 6:注销
-
-statusdesc	string
-账户状态中文描述
+Remark
 
-taxpayernum	string
-纳税人识别号
+tabelmenu	string
+列表菜单
 
-telphone	string
-联系电话
+tablekey*	string
+列表Key
 
-userid	integer
-用户ID
+tablename	string
+列表名称
 
-userinfotype	string
-客户类型
+tabletype	integer
+列表类型 - 1:管理端 2:终端
 }