Commit d0d76887 by zhoutian

首页电子大厅

parent 149c8c0f
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
v-on="tableListeners" v-on="tableListeners"
v-loading="loading" v-loading="loading"
:max-height="maxHeight" :max-height="maxHeight"
> >
<el-table-column <el-table-column
v-for="(item, key) in columnsConfig" v-for="(item, key) in columnsConfig"
...@@ -43,6 +44,8 @@ ...@@ -43,6 +44,8 @@
<script> <script>
export default { export default {
props: { props: {
type: { type: {
type: String, type: String,
default: "normal", default: "normal",
......
...@@ -291,6 +291,7 @@ const CodeTable = { ...@@ -291,6 +291,7 @@ const CodeTable = {
{ label: "电汇", value: "TT" }, { label: "电汇", value: "TT" },
{ label: "信汇", value: "MT" }, { label: "信汇", value: "MT" },
], ],
balancetype: [ balancetype: [
{ label: "外币报关-人民币结算", value: "3" }, { label: "外币报关-人民币结算", value: "3" },
{ label: "人民币报关-人民币结算", value: "1" }, { label: "人民币报关-人民币结算", value: "1" },
......
import Utils from "~/utils"
let checkObj = {
"assposref" :null,
"accamt" :null,
"accdat" :null, //承付日期
"assbustyp":null, //资产业务类型
"assregref":null, //资产登记编号
"assregtyp":null, //资产登记类型
"asssta":null, //资产状态
"asstrasta":null, //资产交易状态
"avbby":null, //信用证兑付类型
"docsta":null,//单据状态
"ownbch":null,//业务归属机构
"usrbch":null,//业务经办机构
"fromdate":null,
"todate":null,
}
for (const key in checkObj) {
if (Object.hasOwnProperty.call(checkObj, key)) {
checkObj[key] = checkObj[key] ? checkObj[key] : Utils.reflectCheck(key)
}
}
export default checkObj
import Api from "~/service/Api";
import Utils from "~/utils/index"
export default {
"assposref" :Utils.defaultFunction,
"accamt" :Utils.defaultFunction,
"accdat" :Utils.defaultFunction, //承付日期
"assbustyp" :Utils.defaultFunction, //资产业务类型
"assregref" :Utils.defaultFunction, //资产登记编号
"assregtyp" :Utils.defaultFunction, //资产登记类型
"asssta" :Utils.defaultFunction, //资产状态
"asstrasta" :Utils.defaultFunction, //资产交易状态
"avbby" :Utils.defaultFunction, //信用证兑付类型
"docsta" :Utils.defaultFunction,//单据状态
"ownbch" :Utils.defaultFunction,//业务归属机构
"usrbch" :Utils.defaultFunction,
"fromdate":Utils.defaultFunction,
"todate":Utils.defaultFunction,
}
//你可以添加自动default处理
import Api from "~/service/Api"
import Utils from "~/utils"
export default {
async onAss(){
const that = this.root;
let rtnmsg = await that.executeRule("assposref")
if(rtnmsg.respCode == "AAAAAA")
{
//this.model.infbut.dspstm = rtnmsg.data.infbut_dspstm.rows
this.$message({
type: 'success',
message: '查询成功!'
});
}
else
{
this.$notify.error({title: '错误',message: '服务请求失败!'});
}
},
async onAsstyp(){
let rtnmsg = await this.executeRule("assbustyp")
if(rtnmsg.respCode == SUCCESS)
{
//TODO 处理数据逻辑
}
else
{
this.$notify.error({title: '错误',message: '服务请求失败!'});
}
},
async onAssdat(){
let rtnmsg = await this.executeRule("accdat")
if(rtnmsg.respCode == SUCCESS)
{
//TODO 处理数据逻辑
}
else
{
this.$notify.error({title: '错误',message: '服务请求失败!'});
}
},
}
\ No newline at end of file
export default {
"assposref":[
{type: "string", required: false, message: "必输项"},
{max: 16,message:"长度不能超过16"}
],
"assbustyp":[
{type: "string", required: false, message: "必输项"},
{max: 40,message:"长度不能超过40"}
],
"accamt":[
{type: "string", required: false, message: "必输项"},
{max: 16,message:"长度不能超过16"}
],
"assregref":[
{type: "string", required: false, message: "必输项"},
{max: 24,message:"长度不能超过24"}
],
"accdat":[
{type: "date", required: true, message: "必输项"}
],
}
\ No newline at end of file
import Api from "~/service/Api"
import Pts from "../Common/Pts"
export default class AssetInfo{
constructor () {
this.data = {
assposref:"", //资产发布编号
accamt:"", //承付金额
accdat:"", //承付日期
assbustyp:"", //资产业务类型
assregref:"", //资产登记编号
assregtyp:"", //资产登记类型
asssta:"", //资产状态
asstrasta:"", //资产交易状态
avbby:"", //信用证兑付类型
docsta:"",//单据状态
ownbch:"",//业务归属机构
usrbch:"",//业务经办机构
fromdate:"",
todate:"",
edit:{
assposref:"", //资产发布编号
accamt:"", //承付金额
accdat:"", //承付日期
assbustyp:"", //资产业务类型
assregref:"", //资产登记编号
assregtyp:"", //资产登记类型
asssta:"", //资产状态
asstrasta:"", //资产交易状态
avbby:"", //信用证兑付类型
docsta:"",//单据状态
ownbch:"",//业务归属机构
usrbch:"",//业务经办机构
},
query:{
assposref:"", //资产发布编号
accamt:"", //承付金额
accdat:"", //承付日期
assbustyp:"", //资产业务类型
assregref:"", //资产登记编号
assregtyp:"", //资产登记类型
asssta:"", //资产状态
asstrasta:"", //资产交易状态
avbby:"", //信用证兑付类型
docsta:"",//单据状态
ownbch:"",//业务归属机构
usrbch:"",//业务经办机构
}
}
}
}
\ No newline at end of file
import Utils from "~/utils"
let checkObj = {
"assposref":null,//资产发布编号
"assregref":null,//资产登记编号
"offtyp":null, //要约类型
"settyp":null,//结息方式
"credat":null,//资产发布日期
}
for (const key in checkObj) {
if (Object.hasOwnProperty.call(checkObj, key)) {
checkObj[key] = checkObj[key] ? checkObj[key] : Utils.reflectCheck(key)
}
}
export default checkObj
import Api from "~/service/Api";
import Utils from "~/utils/index"
export default {
"assposref" :Utils.defaultFunction,
"assregref" :Utils.defaultFunction, //资产登记编号
"offtyp" :Utils.defaultFunction, //要约类型
"settyp" :Utils.defaultFunction, //结息方式
"credat" :Utils.defaultFunction, //资产发布日期
}
//你可以添加自动default处理
import Api from "~/service/Api"
import Utils from "~/utils"
export default {
async onAss(){
const that = this.root;
let rtnmsg = await that.executeRule("assposref")
if(rtnmsg.respCode == "AAAAAA")
{
//this.model.infbut.dspstm = rtnmsg.data.infbut_dspstm.rows
this.$message({
type: 'success',
message: '查询成功!'
});
}
else
{
this.$notify.error({title: '错误',message: '服务请求失败!'});
}
},
async onAssreg(){
let rtnmsg = await this.executeRule("assregref")
if(rtnmsg.respCode == SUCCESS)
{
//TODO 处理数据逻辑
}
else
{
this.$notify.error({title: '错误',message: '服务请求失败!'});
}
},
async onAssdat(){
let rtnmsg = await this.executeRule("credat")
if(rtnmsg.respCode == SUCCESS)
{
//TODO 处理数据逻辑
}
else
{
this.$notify.error({title: '错误',message: '服务请求失败!'});
}
},
}
\ No newline at end of file
export default {
"assposref":[
{type: "string", required: false, message: "必输项"},
{max: 16,message:"长度不能超过16"}
],
"offtyp":[
{type: "string", required: false, message: "必输项"},
{max: 40,message:"长度不能超过40"}
],
"settyp":[
{type: "string", required: false, message: "必输项"},
{max: 16,message:"长度不能超过16"}
],
"assregref":[
{type: "string", required: false, message: "必输项"},
{max: 24,message:"长度不能超过24"}
],
"credat":[
{type: "date", required: true, message: "必输项"}
],
}
\ No newline at end of file
import Api from "~/service/Api"
import Pts from "../Common/Pts"
export default class AssetPub{
constructor () {
this.data = {
assposref:"",//资产发布编号
assregref:"",//资产登记编号
offtyp:"", //要约类型
settyp:"",//结息方式
credat:"",//资产发布日期
}
}
}
\ No newline at end of file
import Api from "~/service/Api"
export function asset(data) {
return Api.post("/elec/hall/asset", data)
}
export function assetpub(data) {
return Api.post("/elec/hall/assetpub", data)
}
export function fund(data) {
return Api.post("/elec/hall/fund", data)
}
export function assInfo(data) {
return Api.post("/elec/hall/assInfo", data)
}
export function assPubInfo(data) {
return Api.post("/elec/hall/assPubInfo", data)
}
export function assQueryId(data) {
return Api.post("/elec/hall/assQueryId",data)
}
<template>
<div class="eContainer">
<el-form :model="model" :rules="rules" ref="modelForm" label-width="200px" size="small" :validate-on-rule-change="false">
<c-tabs v-model="tabVal" ref="elment" type="card" @tab-click="tabClick">
<el-tab-pane label="资产信息查询" name="infsea">
<m-infsea :model="model" :codes="codes"/>
</el-tab-pane>
</c-tabs>
</el-form>
</div>
</template>
<script>
import Api from "~/service/Api"
import CodeTable from "~/config/CodeTable"
import commonProcess from "~/mixin/commonProcess"
import Check from "~/model/AssetInfo/Check"
import Default from "~/model/AssetInfo/Default"
import Pattern from "~/model/AssetInfo/Pattern"
import Infsea from "./Infsea"
import AssetInfo from "~/model/AssetInfo"
import Ccvpan from "~/views/Public/Ccvpan"
import Coninfp from "~/views/Public/Coninfp";
import Setpan from "~/views/Public/Setpan";
import Docpan from "~/views/Public/Docpan";
//import Doctre from "~/views/Public/Doctre"
import Engp from "~/views/Public/Engp";
import Glepan from "~/views/Public/Glepan";
export default {
components:{
"m-infsea" : Infsea,
 "m-ccvpan" : Ccvpan,
        "m-setpan" : Setpan,
        "m-glepan" : Glepan,
        "m-engp":Engp,
        "m-coninfp" : Coninfp,
        "m-docpan" : Docpan,
},
provide() {
return {
root: this
}
},
mixins: [commonProcess], // 里面包含了Default、Check等的公共处理
data(){
return {
tabVal: "infsea",
trnName: "assetInfo",
model: new AssetInfo().data,
checkRules: Check,
defaultRules: Default,
pattern: Pattern,
rules: null,
codes:{},
}
},
methods:{
tabClick(){
}
},
created:async function(){
// console.log("进入assetInfo交易");
// let rtnmsg = await this.init({})
// if(rtnmsg.respCode == SUCCESS)
// {
// //TODO 处理数据逻辑
// }
// else
// {
// this.$notify.error({title: '错误',message: '服务请求失败!'});
// }
}
}
</script>
<style>
</style>
<template>
<div class="eContainer">
<el-form :model="model" :rules="rules" ref="modelForm" label-width="200px" size="small" :validate-on-rule-change="false">
<c-tabs v-model="tabVal" ref="elment" type="card" @tab-click="tabClick">
<el-tab-pane label="资产发布信息查询" name="infsea">
<m-infsea :model="model" :codes="codes"/>
</el-tab-pane>
</c-tabs>
</el-form>
</div>
</template>
<script>
import Api from "~/service/Api"
import CodeTable from "~/config/CodeTable"
import commonProcess from "~/mixin/commonProcess"
import Check from "~/model/AssetPub/Check"
import Default from "~/model/AssetPub/Default"
import Pattern from "~/model/AssetPub/Pattern"
import Infsea from "./Infsea"
import AssetPub from "~/model/AssetPub"
import Ccvpan from "~/views/Public/Ccvpan"
import Coninfp from "~/views/Public/Coninfp";
import Setpan from "~/views/Public/Setpan";
import Docpan from "~/views/Public/Docpan";
//import Doctre from "~/views/Public/Doctre"
import Engp from "~/views/Public/Engp";
import Glepan from "~/views/Public/Glepan";
export default {
components:{
"m-infsea" : Infsea,
 "m-ccvpan" : Ccvpan,
"m-setpan" : Setpan,
"m-glepan" : Glepan,
"m-engp":Engp,
"m-coninfp" : Coninfp,
"m-docpan" : Docpan,
},
provide() {
return {
root: this
}
},
mixins: [commonProcess], // 里面包含了Default、Check等的公共处理
data(){
return {
tabVal: "infsea",
trnName: "assetPub",
model: new AssetPub().data,
checkRules: Check,
defaultRules: Default,
pattern: Pattern,
rules: null,
codes:{},
}
},
methods:{
tabClick(){
}
},
created:async function(){
// console.log("进入assetInfo交易");
// let rtnmsg = await this.init({})
// if(rtnmsg.respCode == SUCCESS)
// {
// //TODO 处理数据逻辑
// }
// else
// {
// this.$notify.error({title: '错误',message: '服务请求失败!'});
// }
}
}
</script>
<style>
</style>
...@@ -124,6 +124,10 @@ import Betdrv from "./Betdrv" ...@@ -124,6 +124,10 @@ import Betdrv from "./Betdrv"
import Ditdav from "./Ditdav" import Ditdav from "./Ditdav"
import Infpty from "./Infpty" import Infpty from "./Infpty"
import Dbipty from "./Dbipty" import Dbipty from "./Dbipty"
import AssetInfo from "./AssetInfo"
import AssetPub from "./AssetPub"
/** /**
* 带有name的才会被添加进顶部的标签页里 * 带有name的才会被添加进顶部的标签页里
*/ */
...@@ -261,5 +265,11 @@ const BusRouter = [ ...@@ -261,5 +265,11 @@ const BusRouter = [
{ path: 'getsel', component: Getsel, name: 'Getsel', meta: { title: 'Getsel' } }, { path: 'getsel', component: Getsel, name: 'Getsel', meta: { title: 'Getsel' } },
{ path: 'getcrq', component: Getcrq, name: 'Getcrq', meta: { title: 'Getcrq' } }, { path: 'getcrq', component: Getcrq, name: 'Getcrq', meta: { title: 'Getcrq' } },
{ path: 'assetinfo', component: AssetInfo, name: 'AssetInfo', meta: { title: '资产信息管理' } },
{ path: 'assetpub', component: AssetPub, name: 'AssetPub', meta: { title: '资产发布信息管理' } },
] ]
export default BusRouter export default BusRouter
...@@ -2,80 +2,146 @@ ...@@ -2,80 +2,146 @@
<CellWrapper title="电子大厅" :cellContentHeight="cellContentHeight"> <CellWrapper title="电子大厅" :cellContentHeight="cellContentHeight">
<template v-slot:header> <template v-slot:header>
<span class="el-icon-refresh" title="刷新"></span> <span class="el-icon-refresh" title="刷新"></span>
<span class="el-icon-more" title="操作"></span> <span class="el-icon-more" title="操作" ></span>
</template> </template>
<div class="card-wrapper">
<div class="card-item" v-for="(item, idx) in itemList" :key="idx">
<div class="cell-content">
<div class="card-item1">
<div class="dept-name"> <div class="dept-name">
<div <div class="first-word1"></div>
class="first-word" <div class="dz-title" @click="openassInfo">资产信息</div>
:style="{ 'background-color': item.backColor }"
>
{{ item.title.substr(0, 1) }}
</div> </div>
<div class="dz-title">{{ item.title }}</div> <div class="display1">
<div class="type-count" v-for="(item, idx) in itemList" :key="idx">
<div class="count-item">{{item.name}}</div>
<div class="count-number">{{item.count}}</div>
</div> </div>
<div class="type-count">
<div class="count-item">
操作处理类 <span class="count-number">26</span>
</div> </div>
<div class="count-item">
提示信息类 <span class="count-number">3</span>
</div> </div>
<div class="card-item2">
<div class="dept-name">
<div class="first-word2">
</div>
<div class="dz-title" @click="openassInfoPub">资产发布信息</div>
</div> </div>
<div class="display2">
<div class="type-count" v-for="(item, idx) in apub" :key="idx">
<div class="count-item" >{{item.name}}</div>
<div class="count-number">{{item.count}}</div>
</div>
</div>
</div> </div>
<div class="card-item3">
<div class="dept-name">
<div class="first-word3">
</div>
<div class="dz-title">资金信息</div>
</div>
<div class="display3">
<div class="type-count" v-for="(item, idx) in fund" :key="idx">
<div class="count-item">{{item.name}}</div>
<div class="count-number">{{item.count}}</div>
</div>
</div>
</div>
</div> </div>
</CellWrapper> </CellWrapper>
</template> </template>
<script> <script>
import CellHeader from "../common/CellHeader.vue";
import CellWrapper from "../common/CellWrapper.vue"; import CellWrapper from "../common/CellWrapper.vue";
import { asset } from "~/service/elec";
import { assetpub } from "~/service/elec";
import { fund } from "~/service/elec";
export default { export default {
name: "Hall", name: "Hall",
props: ['cellContentHeight'], props: ['cellContentHeight'],
components: { CellWrapper }, components: { CellHeader,CellWrapper},
data() { data() {
return { return {
itemList: [ // colors: ['#2073ef','rgb(28 190 241)','rgb(243, 195, 12)'],
{ //titles:['资产信息','资产发布信息','资金信息'],
title: "资产管理大厅", itemList: [ ],
backImg: "linear-gradient(#2073ef, #bec2f3", apub:[],
backColor: "#2073ef", fund:[],
},
{
title: "我行发布资产大厅",
backImg: "linear-gradient(rgb(28 190 241), rgb(201 229 237))", };
backColor: "rgb(28 190 241)",
}, },
{ created() {
title: "他行发布资产大厅",
backImg: "linear-gradient(rgb(243, 195, 12), rgb(239 228 197))", asset().then(res => {
backColor: "rgb(243, 195, 12)",
this.itemList=res
}),
assetpub().then(res =>{
this.apub = res;
}),
fund().then(res =>{
this.fund = res;
})
}, },
{ methods: {
title: "资金发布大厅", openassInfo(){
backImg: "linear-gradient(#ff9800, rgb(251 234 210))", window.location.href="#/business/AssetInfo"
backColor: "#ff9800",
}, },
], openassInfoPub(){
}; window.location.href="#/business/AssetPub"
}
}, },
}; };
</script> </script>
<style scoped> <style scoped>
.card-wrapper {
height: 100%;
.cell-content {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
height: 100%;
}
.cell-content {
justify-content: space-around; justify-content: space-around;
align-items: center; align-items: center;
} }
.card-item { .cell-content .card-item1 {
width: 45%; width: 30%;
height: 45%; height: 85%;
background-color: #e6e8ef;
border-radius: 12px;
padding: 0 10px 0 15px;
box-sizing: border-box;
display: flex;
flex-direction: column;
font-size: 14px;
}
.cell-content .card-item2 {
width: 30%;
height: 85%;
background-color: #e6e8ef; background-color: #e6e8ef;
border-radius: 12px; border-radius: 12px;
padding: 0 10px 0 15px; padding: 0 10px 0 15px;
...@@ -84,15 +150,29 @@ export default { ...@@ -84,15 +150,29 @@ export default {
flex-direction: column; flex-direction: column;
font-size: 14px; font-size: 14px;
} }
.cell-content .card-item3 {
width: 30%;
height: 85%;
background-color: #e6e8ef;
border-radius: 12px;
padding: 0 10px 0 15px;
box-sizing: border-box;
display: flex;
flex-direction: column;
font-size: 14px;
}
.dept-name { .dept-name {
display: flex; display: flex;
align-items: center; align-items: center;
/* margin-top: 20px; */
} }
.dept-name, .dept-name,
.type-count { .type-count {
flex: 1; flex: 1;
} }
.first-word { .first-word1 {
width: 40px; width: 40px;
height: 40px; height: 40px;
display: flex; display: flex;
...@@ -103,21 +183,72 @@ export default { ...@@ -103,21 +183,72 @@ export default {
font-family: emoji; font-family: emoji;
border-radius: 8px; border-radius: 8px;
font-size: 20px; font-size: 20px;
background-color: #2073ef;
} }
.first-word2 {
width: 40px;
height: 40px;
display: flex;
justify-content: center;
align-items: center;
color: #fff;
font-weight: bolder;
font-family: emoji;
border-radius: 8px;
font-size: 20px;
background-color:rgb(28 190 241);
}
.first-word3 {
width: 40px;
height: 40px;
display: flex;
justify-content: center;
align-items: center;
color: #fff;
font-weight: bolder;
font-family: emoji;
border-radius: 8px;
font-size: 20px;
background-color:rgb(243, 195, 12);
}
.dz-title { .dz-title {
margin-left: 10px; margin-left: 10px;
font-weight: bold; font-weight: bold;
} }
.display1 {
padding: 5px 0 35px 0;
}
.display2 {
padding: 5px 0 55px 0;
}
.display3 {
padding: 5px 0 55px 0;
}
.type-count .count-item { .type-count .count-item {
display: flex; display: flex;
align-items: center; align-items: center;
font-weight: 400; /* font-weight: 400; */
color: #6c6f72; color: #6c6f72;
float: left;
} }
.type-count .count-number { .type-count .count-number {
font-size: 20px; /* font-size: 20px;*/
margin-left: 20px; /* margin-left: 10px; */
color: #000; color: #000;
font-size: 18px;
margin-top: 2px;
} }
</style> </style>
...@@ -9,7 +9,13 @@ ...@@ -9,7 +9,13 @@
<script> <script>
export default { export default {
props: ['title'], props: {
title:{
type:String,
required:true,
},
},
}; };
</script> </script>
...@@ -20,6 +26,7 @@ export default { ...@@ -20,6 +26,7 @@ export default {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
border-bottom: 2px solid #f7f7f7; border-bottom: 2px solid #f7f7f7;
} }
.cell-header_title { .cell-header_title {
font-weight: bold; font-weight: bold;
......
...@@ -25,4 +25,14 @@ export const cellDataDefinition = [ ...@@ -25,4 +25,14 @@ export const cellDataDefinition = [
name: "QuickSearch", name: "QuickSearch",
description: "交易快速查询入口", description: "交易快速查询入口",
}, },
// {
// title: "电子大厅1",
// name: "Hall1",
// description: "电子大厅1",
// },
]; ];
...@@ -33,6 +33,10 @@ import QuickSearch from "./cells/QuickSearch.vue"; ...@@ -33,6 +33,10 @@ import QuickSearch from "./cells/QuickSearch.vue";
import { cellDataDefinition } from "./config"; import { cellDataDefinition } from "./config";
export default { export default {
name: "Home", name: "Home",
components: { components: {
...@@ -42,6 +46,9 @@ export default { ...@@ -42,6 +46,9 @@ export default {
Hall, Hall,
CustomerAnalyse, CustomerAnalyse,
QuickSearch, QuickSearch,
}, },
data() { data() {
return { return {
......
...@@ -135,6 +135,11 @@ export default { ...@@ -135,6 +135,11 @@ export default {
{ inifrm: "switsk", ininam: "Switsk", pntmiu: "14" }, { inifrm: "switsk", ininam: "Switsk", pntmiu: "14" },
{ inifrm: "mgrtsk", ininam: "Mgrtsk", pntmiu: "14" }, { inifrm: "mgrtsk", ininam: "Mgrtsk", pntmiu: "14" },
{ inifrm: "sptrel", ininam: "sptrel", pntmiu: "14" }, { inifrm: "sptrel", ininam: "sptrel", pntmiu: "14" },
{ inifrm: "15",ininam: "福费廷管理", pntmiu: "" },
{ inifrm: "assetInfo", ininam: "资产信息管理", pntmiu: "15" },
{ inifrm: "assetPub", ininam: "资产发布信息管理", pntmiu: "15" },
{ inifrm: "fund", ininam: "资金信息管理", pntmiu: "15" },
], ],
menus: [], menus: [],
menusHeight: 0 menusHeight: 0
......
...@@ -47,6 +47,13 @@ module.exports = { ...@@ -47,6 +47,13 @@ module.exports = {
'^/gjjs/report': '/gjjs/report' '^/gjjs/report': '/gjjs/report'
} }
}, },
'/gjjs/elec/': {
target: 'http://127.0.0.1:8083',
changeOrigin: true,
pathRewrite: {
'^/gjjs/elec': '/gjjs/elec'
}
},
/** /**
* ocr智能识别服务 * ocr智能识别服务
*/ */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment