Commit 7b7b3ed3 authored by 前端-黄佳鑫's avatar 前端-黄佳鑫
parents 362704e8 48590cde
/*
* @Author: Bill
* @Date: 2020-10-12 09:45:20
* @LastEditTime: 2020-10-12 16:48:05
* @Description: 加工能力路由
*/
const HandlingRoute = {
path: '/memberCenter/handling',
name: 'handling',
key: 'handling',
icon: 'smile',
routes: [
//指派生产通知单
{
path: '/memberCenter/handling/assign',
name: 'assign',
key: 'assign',
routes: [
// 指派生产通知单查询
{
path: '/memberCenter/handling/assign/All',
name: 'assignProductionAll',
key: 'assignProductionAll',
component: '@/pages/handling/assign/all',
},
// 指派生产通知单 -> 待新增生产通知单
{
path: '/memberCenter/handling/assign/ToBeAdd',
name: 'assignProductionToBeAdd',
key: 'assignProductionToBeAdd',
component: '@/pages/handling/assign/tobeAdd'
},
// 指派生产通知单 -> 新增成产通知单(新建)
{
path: '/memberCenter/handling/assign/add',
name: 'assignProductionAdd',
key: 'assignProductionAdd',
component: '@/pages/handling/assign/add',
// hideInMenu: true
},
// 指派生产通知单 -> 详情
{
path: '/memberCenter/handling/assign/detail',
name: 'assignProductionDetail',
key: 'assignProductionDetail',
component: '@/pages/handling/assign/detail'
}
]
}
]
}
export default HandlingRoute
\ No newline at end of file
/*
* @Author: LeeJiancong
* @Date: 2020-07-13 14:08:50
* @LastEditors: LeeJiancong
* @LastEditTime: 2020-08-19 15:39:49
* @LastEditors: Please set LastEditors
* @LastEditTime: 2020-10-12 10:14:50
*/
import CommodityRoute from './commodityRoute' // 商品能力路由
import MemberRoute from './memberRoute' // 会员能力路由
......@@ -12,8 +12,9 @@ import TranactionRoute from './tranactionRoute' // 交易能力路由
import LogisticsRoute from './logisticsRoutes' // 物流能力路由
import PayandSettleRoute from './payandSettle' //支付与结算
import AuthConfigRoute from './authConfigRoute'
import HandlingRoute from './handlingRoute'; // 加工能力
const routes = [CommodityRoute, MemberRoute, ShopRoute, ChannelRoute, TranactionRoute,PayandSettleRoute ,LogisticsRoute, AuthConfigRoute]
const routes = [CommodityRoute, MemberRoute, ShopRoute, ChannelRoute, TranactionRoute,PayandSettleRoute ,LogisticsRoute, AuthConfigRoute, HandlingRoute]
const memberCenterRoute = {
path: '/memberCenter',
......
/*
* @Author: LeeJiancong
* @Date: 2020-07-13 14:08:50
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-09-30 17:22:37
* @LastEditors: Please set LastEditors
* @LastEditTime: 2020-10-12 16:49:53
*/
export default {
......@@ -281,5 +281,13 @@ export default {
'menu.systemSetting.collection': '收藏管理',
'menu.systemSetting.accountSetting': '账号安全设置',
'menu.systemSetting.editAccount': '编辑账号信息'
'menu.systemSetting.editAccount': '编辑账号信息',
// 加工能力, assign 指的是 指派生产通知单
'menu.handling': '加工',
'menu.handling.assign': '指派生产通知单',
'menu.handling.assign.assignProductionAll': '生产通知单查询',
'menu.handling.assign.assignProductionToBeAdd': '待新增生产通知单',
'menu.handling.assign.assignProductionAdd': '新建生产通知单',
'menu.handling.assign.assignProductionDetail': '生产通知单详情'
};
\ No newline at end of file
import React, { useState } from 'react';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { SaveOutlined } from '@ant-design/icons';
import { Button, Card, Input } from 'antd';
import { history } from 'umi';
import ReutrnEle from '@/components/ReturnEle';
import { createFormActions, FormEffectHooks, FormPath } from '@formily/antd';
import NiceForm from '@/components/NiceForm';
import addSchema from '../../schema/addSchema';
import { LinkOutlined, PlusOutlined } from '@ant-design/icons';
/*
* @Author: Bill
* @Date: 2020-10-12 11:36:38
* @Description: 新增生产通知单
*/
const formActions = createFormActions();
const Add: React.FC<{}> = () => {
const [submitLoading, setSubmitLoading] = useState<boolean>(false);
const connectProduct = <div className='connectBtn'><LinkOutlined style={{marginRight: 4}}/>选择</div>
const tableAddButton = (
<Button
style={{marginBottom: 16}}
block
icon={<PlusOutlined/>}
type='dashed'
>选择指定会员</Button>
)
return (
<PageHeaderWrapper
onBack={() => history.goBack()}
backIcon={<ReutrnEle description="返回" />}
title="填写会员资料"
extra={[
<Button
key="1"
type="primary"
icon={<SaveOutlined />}
loading={submitLoading}
onClick={() => formActions.submit()}
>
保存
</Button>,
]}
>
<Card>
<NiceForm
// onSubmit={handleSubmit}
schema={addSchema}
actions={formActions}
expressionScope={{
connectProduct,
tableAddButton
}}
// effects={($, actions) => {
// onFormInputChange$().subscribe(() => {
// if (!unsaved) {
// setUnsaved(true);
// }
// });
// }}
/>
</Card>
</PageHeaderWrapper>
)
}
export default Add
import React, { useRef } from 'react';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { Card, Space, Button } from 'antd';
import NiceForm from '@/components/NiceForm';
import { StandardTable } from 'god';
import { PublicApi } from '@/services/api';
import EyePreview from '@/components/EyePreview';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { createFormActions, FormEffectHooks, FormPath } from '@formily/antd';
import AssignAllSchema from '../../schema/assignAll';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { PlusOutlined } from '@ant-design/icons';
const formActions = createFormActions();
const columns = [
{
title: '通知单号',
dataIndex: 'id',
},
{
title: '通知单摘要',
dataIndex: 'desc',
},
{
title: '供应会员',
dataIndex: 'role'
},
{
title: '单据时间',
dataIndex: 'create-at',
},
{
title: '外部状态',
dataIndex: 'status',
},
{
title: '内部状态',
dataIndex: 'status2'
}
]
const AssignAll: React.FC<{}> = () => {
const ref = useRef<any>({});
const fetchData = async (params: any) => {
let res = await PublicApi.getMemberAbilityInfoPage(params);
return res.data;
};
const controllerBtns = (
<Space>
<Button
type="primary"
>
<PlusOutlined />
增加会员角色
</Button>
</Space>
);
return (
<PageHeaderWrapper
title={"生产通知单查询"}
>
<Card>
<StandardTable
tableProps={{
rowKey: 'memberId',
}}
columns={columns}
currentRef={ref}
fetchTableData={(params: any) => fetchData(params)}
controlRender={
<NiceForm
actions={formActions}
expressionScope={{
controllerBtns,
}}
onSubmit={values => ref.current.reload(values)}
effects={($, actions) => {
useStateFilterSearchLinkageEffect(
$,
actions,
'name',
FORM_FILTER_PATH,
);
}}
schema={AssignAllSchema}
/>
}
/>
</Card>
</PageHeaderWrapper>
)
}
export default AssignAll
\ No newline at end of file
import React from 'react';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { history } from 'umi';
import AvatarWrap from '@/components/AvatarWrap';
import { PageHeader, Descriptions, Card, Tabs, Space, Row, Col } from 'antd';
import Circulation from '../../components/Circulation';
import WrapTable from '../../components/WrapTable';
import OtherRequirement from '../../components/OtherRequirement';
import Appendix from '../../components/Appendix';
const { TabPane } = Tabs;
const Detail: React.FC<{}> = () => {
return (
<PageHeaderWrapper
title={
<>
<PageHeader
style={{ padding: '0' }}
onBack={() => history.goBack()}
title={
<AvatarWrap
info={{
name: "通知单号:"
}}
extra={(
<span style={{ fontSize: 12, fontWeight: 'normal' }}>{"TPTY12"}</span>
)}
/>
}
>
<Descriptions
column={3}
style={{
padding: '0 32px',
}}
>
<Descriptions.Item label="通知单摘要">{"进口头层黄牛皮荔枝纹"}</Descriptions.Item>
<Descriptions.Item label="供应会员:">{"广州白马皮具交易中心"}</Descriptions.Item>
<Descriptions.Item label="单据时间:">{"2020-09-09 12:58:25"}</Descriptions.Item>
<Descriptions.Item label="通知单来源:">{"订单加工"}</Descriptions.Item>
<Descriptions.Item label="外部状态:">{"以完成通知单"}</Descriptions.Item>
<Descriptions.Item label="内部状态:">{"审核通过"}</Descriptions.Item>
</Descriptions>
</PageHeader>
</>
}
>
<Card bodyStyle={{padding: '5px 24px 15px 24px'}}>
<Circulation />
</Card>
<div style={{marginTop: '20px'}}>
<Card>
<h1 style={{fontSize: '16px', marginBottom: '16px'}}><strong>通知单明细</strong></h1>
<WrapTable />
</Card>
</div>
<div style={{marginTop: '20px'}}style={{marginTop: '20px'}}>
<Card>
<Tabs>
<TabPane tab="收发货统计" key="1">
<WrapTable />
</TabPane>
<TabPane tab="收发货明细" key="2">
<WrapTable />
</TabPane>
</Tabs>
</Card>
</div>
<div style={{marginTop: '20px'}}>
<Row gutter={4}>
<Col span={18}>
<OtherRequirement />
</Col>
<Col span={6}>
<Appendix />
</Col>
</Row>
</div>
</PageHeaderWrapper>
)
}
export default Detail
\ No newline at end of file
import React, { useRef } from 'react';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { Card, Space, Button, } from 'antd';
import NiceForm from '@/components/NiceForm';
import { StandardTable } from 'god';
import { PublicApi } from '@/services/api';
import EyePreview from '@/components/EyePreview';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { createFormActions, FormEffectHooks, FormPath } from '@formily/antd';
import AssignAllSchema from '../../schema/assignAll';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { PlusOutlined } from '@ant-design/icons';
const formActions = createFormActions();
const columns = [
{
title: '通知单号',
dataIndex: 'id',
},
{
title: '通知单摘要',
dataIndex: 'desc',
},
{
title: '供应会员',
dataIndex: 'role'
},
{
title: '单据时间',
dataIndex: 'create-at',
},
{
title: '外部状态',
dataIndex: 'status',
},
{
title: '内部状态',
dataIndex: 'status2'
}
]
const TobeAdd: React.FC<{}> = () => {
const ref = useRef<any>({});
const fetchData = async (params: any) => {
console.log(params);
let res = await PublicApi.getMemberAbilityInfoPage(params);
return res.data;
};
const controllerBtns = (
<Space>
<Button
type="primary"
>
<PlusOutlined />
增加会员角色
</Button>
</Space>
);
return (
<PageHeaderWrapper
title={"生产通知单查询"}
>
<Card>
<StandardTable
tableProps={{
rowKey: 'memberId',
}}
columns={columns}
currentRef={ref}
fetchTableData={(params: any) => fetchData(params)}
controlRender={
<NiceForm
actions={formActions}
expressionScope={{
controllerBtns,
}}
onSubmit={values => ref.current.reload(values)}
effects={($, actions) => {
useStateFilterSearchLinkageEffect(
$,
actions,
'name',
FORM_FILTER_PATH,
);
}}
schema={AssignAllSchema}
/>
}
/>
</Card>
</PageHeaderWrapper>
)
}
export default TobeAdd
\ No newline at end of file
/*
* @Author: your name
* @Date: 2020-10-12 18:27:56
* @LastEditTime: 2020-10-12 18:42:00
* @Description: 附件
*/
import React from 'react';
import { Card } from 'antd';
const styles = {
display: 'flex',
flexDirection: 'row',
// justifyContent: 'center',
alignItem: 'center',
color: '#00B37A',
backgroundColor: '#F4F5F7',
padding: '10px 15px',
cursor: 'pointer',
}
const AppendixItem = () => {
return (
<div style={styles}>工程技术资料.pdf</div>
)
}
const Appendix = () => {
return (
<div>
<Card title={"附件"}>
<AppendixItem />
</Card>
</div>
)
}
export default Appendix;
\ No newline at end of file
import React from 'react';
import { Tabs, Steps, Popover } from 'antd';
const TabPane = Tabs.TabPane;
const { Step } = Steps;
const customDot = (dot, { status, index }) => (
<span>
{dot}
</span>
);
const Circulation: React.FC<{}> = () => {
return (
<Tabs defaultActiveKey="1" >
<TabPane tab="外部流转" key="1">
<Steps current={1} progressDot={customDot} style={{marginTop: '20px'}}>
<Step title="Finished" description="You can hover on the dot." />
<Step title="In Progress" description="You can hover on the dot." />
<Step title="Waiting" description="You can hover on the dot." />
<Step title="Waiting" description="You can hover on the dot." />
</Steps>
</TabPane>
<TabPane tab="内部流转" key="2">
<Steps current={1} progressDot={customDot} style={{marginTop: '20px'}}>
<Step title="Finished" description="You can hover on the dot." />
<Step title="In Progress" description="You can hover on the dot." />
<Step title="Waiting" description="You can hover on the dot." />
<Step title="Waiting" description="You can hover on the dot." />
</Steps>
</TabPane>
</Tabs>
)
}
export default Circulation
\ No newline at end of file
import React from 'react';
import { Card, Row, Col } from 'antd';
const OtherRequirement = () => {
return (
<Card title="其他要求">
<Row>
<Col span={4}>交付说明</Col>
<Col span={8}>东莞市石龙镇西葫芦53号交付说明</Col>
<Col span={4}>物流说明</Col>
<Col span={8}>东莞市石龙镇西葫芦53号交付说明</Col>
</Row>
<Row style={{margin: '20px 0'}}>
<Col span={4}>付款说明</Col>
<Col span={8}>首付 30%, 收货后70%</Col>
<Col span={4}>包装说明</Col>
<Col span={8}>纸箱</Col>
</Row>
<Row>
<Col span={4}>税收说明</Col>
<Col span={8}>含税</Col>
<Col span={4}>其他说明</Col>
<Col span={8}></Col>
</Row>
</Card>
)
}
export default OtherRequirement;
\ No newline at end of file
import React from 'react'
import { Table } from 'antd'
const WrapTable = () => {
const columns = [
{
title: '订单号',
dataIndex: 'no',
},
{
title: 'ID',
dataIndex: 'id',
},
{
title: '商品名称',
dataIndex: 'name',
},
{
title: '品类',
dataIndex: 'category',
},
{
title: '品牌',
dataIndex: 'type',
},
{
title: '单位',
dataIndex: 'unit',
},
{
title: '加工数量',
dataIndex: 'number',
},
{
title: '加工单价',
dataIndex: 'price',
},
{
title: '加工费',
dataIndex: 'total',
},
{
title: '交期',
dataIndex: 'time',
},
{
title: '操作',
dataIndex: 'action',
},
];
return (
<Table
columns={columns}
dataSource={[]}
/>
)
}
export default WrapTable
\ No newline at end of file
/*
* @Author: your name
* @Date: 2020-10-12 13:37:06
* @LastEditTime: 2020-10-12 16:04:41
* @Description: 新建生产通知单 schema
*/
/**
* 通知单明细
*/
const detailTab = {
'tab-2': {
type: 'object',
'x-component': 'tabpane',
'x-component-props': {
tab: '通知单明细'
},
properties: {
layout: {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
labelCol: 4,
wrapperCol: 8,
labelAlign: 'left'
},
properties: {
selectedSource: {
type: 'radio',
title: '选择来源',
required: true,
enum: [
{
label: '加工订单',
value: 1
},
{
label: '加工商品',
value: 2
}
],
default: 1,
},
someLists: {
type: 'array:number',
'x-mega-props': {
wrapperCol: 24,
},
'x-component': 'MultTable',
'x-component-props': {
rowKey: 'id',
prefix: "{{tableAddButton}}"
// columns: "{{tableColumns}}",
}
}
}
}
}
}
}
/**
* 其他要求
*/
const otherRequired = {
'tab-3': {
type: 'object',
'x-component': 'tabpane',
'x-component-props': {
tab: '通知单明细'
},
properties: {
layout: {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
labelCol: 4,
wrapperCol: 8,
labelAlign: 'left'
},
properties: {
deliveryDesc: {
type: 'string',
title: '交付说明',
'x-component': 'textarea',
'x-component-props': {
placeholder: '最长100个字符,50个汉字',
rows: 5
}
},
payDesc: {
type: 'string',
title: '付款说明',
'x-component': 'textarea',
'x-component-props': {
placeholder: '最长100个字符,50个汉字',
rows: 5
}
},
taxDesc: {
type: 'string',
title: '税费说明',
'x-component': 'textarea',
'x-component-props': {
placeholder: '最长100个字符,50个汉字',
rows: 5
}
},
materialDesc: {
type: 'string',
title: '物资说明',
'x-component': 'textarea',
'x-component-props': {
placeholder: '最长100个字符,50个汉字',
rows: 5
}
},
packingDesc: {
type: 'string',
title: '包装说明',
'x-component': 'textarea',
'x-component-props': {
placeholder: '最长100个字符,50个汉字',
rows: 5
}
},
otherDesc: {
type: 'string',
title: '其他说明',
'x-component': 'textarea',
'x-component-props': {
placeholder: '最长100个字符,50个汉字',
rows: 5
}
}
}
}
}
}
}
/**
* 附件
*/
const enclosure = {
'tab-4': {
type: 'object',
'x-component': 'tabpane',
'x-component-props': {
tab: '附件'
},
properties: {
layout: {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
labelCol: 4,
wrapperCol: 8,
labelAlign: 'left'
},
properties: {
enclosure: {
type: 'string',
title: '附件',
}
}
}
}
}
}
/**
* 流转记录
*/
const historyRecord = {
'tab-5': {
type: 'object',
'x-component': 'tabpane',
'x-component-props': {
tab: '流转记录'
},
}
}
const addSchema = {
type: 'object',
properties: {
'Tabs': {
type: 'object',
'x-component': 'tab',
'x-component-props': {
type: 'card'
},
properties: {
'tab-1': {
type: 'object',
'x-component': 'tabpane',
'x-component-props': {
'tab': '基本信息'
},
properties: {
layout: {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
labelCol: 4,
wrapperCol: 8,
labelAlign: 'left'
},
properties: {
desc: {
title: '通知单摘要',
type: 'string',
'x-rules': [
{
limitByte: true, // 自定义校验规则
maxByte: 60
}
],
'x-component-props': {
placeholder: '最长60个字符,30个汉字'
}
},
handleBusiness: {
type: 'string',
title: '加工企业',
"x-mega-props": {
full: true
},
"x-component-props": {
disabled: true,
addonAfter: "{{connectProduct}}"
},
"x-rules": [
{
required: true,
message: '请选择商品'
}
],
},
source: {
type: 'radio',
title: '通知单来源',
required: true,
enum: [
{
label: '订单加工',
value: 1
},
{
label: '商品加工',
value: 2
}
],
default: 1
},
no: {
type: 'string',
title: '通知单号',
'x-component': 'Text',
},
time: {
type: 'string',
title: '单据时间',
'x-component': 'Text',
},
status: {
type: 'string',
title: '外部状态',
'x-component': 'Text',
},
status2: {
type: 'string',
title: '内部状态',
'x-component': 'Text',
}
}
}
}
},
...detailTab,
...otherRequired,
...enclosure,
...historyRecord
}
}
}
}
export default addSchema
import { ISchema } from '@formily/antd';
import { FORM_FILTER_PATH } from '@/formSchema/const';
/*
* @Author: Bill
* @Date: 2020-10-12 10:46:36
* @LastEditTime: 2020-10-12 11:10:28
* @Description: 指派生产通知单查询页 schema
*/
const schema: ISchema = {
type: 'object',
properties: {
megaLayout: {
type: 'object',
'x-component': 'mega-layout',
properties: {
topLayout: {
type: 'object',
'x-component': 'Mega-Layout',
'x-component-props': {
grid: true,
},
properties: {
ctl: {
type: 'object',
'x-component': 'Children',
'x-component-props': {
children: '{{controllerBtns}}',
},
},
name: {
type: 'string',
'x-component': 'Search',
'x-component-props': {
placeholder: '搜索',
},
},
},
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'flex-layout',
'x-component-props': {
colStyle: {
marginLeft: 20,
},
},
properties: {
outerStatus: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '审核状态(全部)',
allowClear: true,
},
},
'[startDate, endDate]': {
type: 'string',
default: '',
'x-component': 'dateSelect',
'x-component-props': {
placeholder: '时间范围(全部)',
allowClear: true,
},
},
submit: {
'x-component': 'Submit',
'x-mega-props': {
span: 1,
},
'x-component-props': {
children: '查询',
},
},
},
},
},
},
},
};
export default schema
\ No newline at end of file
......@@ -2,7 +2,7 @@
* @Author: LeeJiancong
* @Date: 2020-07-15 10:31:55
* @LastEditors: LeeJiancong
* @LastEditTime: 2020-10-09 11:00:43
* @LastEditTime: 2020-10-09 14:41:19
*/
import React, { Component, useState, useEffect } from 'react';
import ReactDOM from 'react-dom'
......@@ -335,10 +335,13 @@ const diaLogForm: React.FC<ListProps> = (props) => {
x-component-props={{
placeholder: '请输入发货人'
}}
x-rules= {{
x-rules= {[{
max: 20,
message:'输入发货人字数不能大于20'
}}
},{
required: true,
message:'请输入发货人'
}]}
/>
:
<Field
......@@ -349,10 +352,13 @@ const diaLogForm: React.FC<ListProps> = (props) => {
x-component-props={{
placeholder: '请输入收货人'
}}
x-rules= {{
x-rules= {[{
max: 20,
message:'输入收货人字数不能大于20'
}}
},{
required: true,
message:'请输入收货人'
}]}
/>
}
......@@ -366,6 +372,10 @@ const diaLogForm: React.FC<ListProps> = (props) => {
x-component-props={{
placeholder: '-省份/直辖市-'
}}
x-rules= {[{
required: true,
message:'请选择省份/直辖市'
}]}
/>
<Field
x-mega-props={{ span: 1 }}
......@@ -376,16 +386,25 @@ const diaLogForm: React.FC<ListProps> = (props) => {
x-component-props={{
placeholder: '-市-'
}}
x-rules= {[{
required: true,
message:'请选择城市'
}]}
/>
<Field
x-mega-props={{ span: 1 }}
x-component="Select"
enum={selectList}
required
name="districtCode"
x-component-props={{
placeholder: '-区-'
}}
x-rules= {[{
required: true,
message:'请选择县市'
}]}
/>
</FormMegaLayout>
<Field
......@@ -397,10 +416,13 @@ const diaLogForm: React.FC<ListProps> = (props) => {
placeholder: '请输入详细地址',
autocomplete: 'off'
}}
x-rules= {{
x-rules= {[{
max: 30,
message:'输入详细地址字数不能大于30'
}}
},{
required: true,
message:'请输入详细地址'
}]}
/>
<Field
title="邮编"
......@@ -421,18 +443,25 @@ const diaLogForm: React.FC<ListProps> = (props) => {
x-component-props={{
placeholder: '+86'
}}
x-rules= {[{
required: true,
message:'请选择区号'
}]}
/>
<Field
x-mega-props={{ span: 5 }}
name="phone"
required
x-component="Input"
x-rules={{
x-rules={[{
pattern: PATTERN_MAPS.phone,
message:'请输入正确手机号',
// maximum={11}数值的意思
}}
},{
required: true,
message:'请输入手机号'
}]}
x-component-props={{
placeholder: '输入你的手机号码',
......
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