Commit 7667d67e authored by 周远喜's avatar 周远喜

Merge branch 'product' of http://git.mes123.com/zhouyx/mes-ui into product

parents 966046cc 32d9468a
......@@ -16,7 +16,7 @@
}
.dispatch_part{
border: 1px solid #ccc;
height: 100%;
// height: 100%;
.dispatch_part_top{
height: 50px;
line-height: 50px;
......
......@@ -25,8 +25,8 @@
</RadioGroup>
</span>
</p>
<h4 class="tc" v-if="this.listTask.length==0">暂无数据</h4>
<div class="dispatch_part_body" v-if="listShow == '订单'" :style="{height:byheight}">
<h4 class="tc" v-if="this.listTask.length==0">暂无数据</h4>
<!-- {{ids}} -->
<!-- <Collapse simple> -->
<div v-for="(item,index) in listOrder" :key="index" :name="item.mesCode">
......@@ -75,6 +75,7 @@
<!--</Collapse> -->
</div>
<div class="dispatch_part_body" v-else-if="listShow == '工单'" :style="{height:byheight}">
<h4 class="tc" v-if="this.listTask.length==0">暂无数据</h4>
<Row :gutter="15" class="card_body01">
<Col span="8" class="dispatch_card" v-for="(item,index) in listTask" :key="index">
<Card>
......@@ -376,10 +377,10 @@ export default {
},
created() {
this.getUserInfoFn();
this.byheight = window.innerHeight - 208 + "px";
this.byheight = window.innerHeight - 178 + "px";
},
mounted() {
this.byheight = window.innerHeight - 208 + "px";
this.byheight = window.innerHeight - 178 + "px";
},
async fetch({ store, params }) {
await store.dispatch("loadDictionary"); // 加载数据字典
......
import Api from '@/plugins/request'
export default {
index: `${PlanUrl}/mesorder/planpaged`,
// 获取当前登录用户信息
getUserInfo(params) {
return Api.get(`${systemUrl}/user/getuserinfo`, params);
},
// 获取人员列表信息
getUser(params) {
return Api.post(`${systemUrl}/user/getselectuser`, params);
},
// 获取用户所在车间
getUserDepartment(params){
return Api.get(`${systemUrl}/user/getuserdepartment`, params);
},
// 获取用户所有设备
getlistall(params){
return Api.get(`${systemUrl}/equipinfo/getlistall`, params);
},
// 获取用户班组工单
getEntryList(params){
return Api.get(`${PlanUrl}/teamsdispatchs/getentrylist`, params);
},
// 派工接口(保存)
saveTeamentry(params){
return Api.post(`${PlanUrl}/teamsdispatchs/saveteamentry`, params);
},
// 删除拆分项
deleteItem(params){
return Api.get(`${PlanUrl}/teamsdispatchs/deldispatch`, params);
},
//删除:
delete(params) {
return Api.delete(`${PlanUrl}/mesorder/delete`, {
params: params
});
},
}
\ No newline at end of file
This diff is collapsed.
.dispatch{
padding: 12px 5px;
.footer02 {
background: #4c5968;
opacity: 0.9;
position: absolute;
bottom: 0;
box-shadow: 0px -5px 6px rgba(0,0,0,0.3);
width: 98%;
z-index: 99;
padding: 10px;
color: #fff;
margin: 10px 0 10px 0;
}
}
.dispatch_part{
border: 1px solid #ccc;
// height: 100%;
.dispatch_part_top{
height: 50px;
line-height: 50px;
padding: 0 0 0 12px;
background: #F5F6FA;
.check{
position: absolute;
top: 0;
right: 24px;
}
}
.dispatch_part_body{
padding: 10px;
overflow-y: auto;
.h3_bg{
background: #a5adbf;
padding: 0 0 0 10px;
.h3_tag{
margin-left: 15px!important;
}
}
.dispatch_card{
margin: 10px 0;
.card{
.card_top{
.label{
cursor: pointer;
}
}
.ivu-card-head{
background: #2d8cf0!important;
}
}
.g_title{
color: #2d8cf0;
}
}
.dispatch_card02{
margin: 10px 0;
// padding-left: 0!important;
// padding-right: 0!important;
.man_body{
max-width: 185px;
.checkUser{
border-radius: 24px;
width: 100%;
height: 50px;
line-height: 47px;
span{
height: 50px;
}
.svg_name{
overflow: hidden;
text-overflow: ellipsis;
-o-text-overflow: ellipsis;
white-space:nowrap;
display: block;
float: right;
width: 82%;
}
.svg{
width: 70px;
}
}
}
}
}
}
.drawer_midell{
.drawer_center{
text-align: center;
padding: 10px;
color: #2d8cf0;
.color{
color: #2d8cf0;
}
}
}
.drawer_box{
.drawer_row_title{
width: 100px;
height: 40px;
float: left;
margin: 2px 0 0;
font-weight: 600;
}
.drawer_midell{
// height: 120px;
// margin: 20px 0;
.drawer_center{
text-align: center;
padding: 10px;
color: #2d8cf0;
.color{
color: #2d8cf0;
}
}
}
.drawer_row_textarea{
width: 550px;
textarea{
max-height: 200px;
}
}
.drawer_footer{
width: 100%;
position: absolute;
bottom: 0;
left: 0;
border-top: 1px solid #e8e8e8;
padding: 10px 16px;
text-align: right;
background: #fff;
}
}
\ No newline at end of file
<template>
<div class="dnc_box">
<!-- 数据传输 -->
<DataGrid :columns="columns" ref="grid" :action="action" :data="data" :high="false"></DataGrid>
<!-- 数据传输:action="action" 接口数据 -->
<DataGrid :columns="columns" ref="grid" :data="data" :high="false">
<template slot="easySearch">
<Form ref="formInline" :model="easySearch" inline>
<FormItem prop="keys">
<Input placeholder="请输入关键字班次名称" v-model="easySearch.keys.value" />
</FormItem>
<FormItem>
<Button type="primary" @click="search">查询</Button>
</FormItem>
</Form>
</template>
<template slot="buttons">
<Button type="primary" >新增</Button>
</template>
</DataGrid>
<Modal v-model="editModal" title="编辑" footer-hide width="800">
<!-- <Edit :row="rowData" @on-close="cancel" @on-option-ok="addOk" /> -->
</Modal>
</div>
</template>
<script>
......@@ -9,6 +26,10 @@ export default {
components: {},
data() {
return {
editModal: false,
easySearch: {
keys: { op: 'projectNo', value: null }
},
columns: [
{
key: "projectNo",
......@@ -91,7 +112,7 @@ export default {
notse: "适用于MDF设备"
},
{
projectNo: "1102347890",
projectNo: "12366588",
id:2,
lingNo: "dd4.rt5.991",
lingName: "轴承",
......@@ -105,7 +126,7 @@ export default {
notse: "适用于MDF设备"
},
{
projectNo: "1102347890",
projectNo: "2536898",
id:3,
lingNo: "dd4.rt5.991",
lingName: "轴承",
......@@ -119,7 +140,7 @@ export default {
notse: "适用于MDF设备"
},
{
projectNo: "1102347890",
projectNo: "35653248",
id:4,
lingNo: "dd4.rt5.991",
lingName: "轴承",
......@@ -137,12 +158,16 @@ export default {
},
created() {},
mounted() {
this.loadDuration();
// this.loadDuration();
},
methods: {
edit(rowData){
console.log(rowData)
},
search() {
this.$Message.success("搜索查询")
// this.$refs.grid.reload(this.easySearch)
},
edit(rowData){
console.log(rowData)
},
},
computed: {},
watch: {}
......
<template>
<div>数据分析表
<Echart1 ></Echart1>
</div>
</template>
<script>
import Echart1 from './compose/echart1'
export default {
components: {
Echart1,
},
data() {
return {
// echarts选项
option: {
title: {
text: '折线图堆叠'
},
tooltip: {
trigger: 'axis'
},
legend: {
data: ['在用率', '运行率', '故障率', '停机率'],
right: '50px' ,
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
toolbox: {
feature: {
saveAsImage: {}
}
},
xAxis: {
type: 'category',
boundaryGap: false,
data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
},
yAxis: {
type: 'value'
},
series: [
{
name: '在用率',
type: 'line',
stack: '总量',
data: [120, 132, 101, 134, 90, 230, 210]
},
{
name: '运行率',
type: 'line',
stack: '总量',
data: [220, 182, 191, 234, 290, 330, 310]
},
{
name: '故障率',
type: 'line',
stack: '总量',
data: [150, 232, 201, 154, 190, 330, 410]
},
{
name: '停机率',
type: 'line',
stack: '总量',
data: [320, 332, 301, 334, 390, 330, 320]
},
]
},
};
},
methods: {},
};
</script>
<template>
<div>
<div id="myChart" style="width:1200px;height:410px;margin:0 auto;top: -40px;"></div>
</div>
</template>
<script>
export default {
name: 'Echart1',
data() {
return {
disabled: false
}
},
methods: {
handleClose() {
this.$emit('on-close')
},
loadEchart() {
// 基于准备好的dom,初始化echarts实例
var myChart = this.$echarts.init(document.getElementById('myChart'))
var option = {
title: {
text:
'Total: 115 SampleSize: 5 Groups: 23 Max: 0.966 Min: 0.91 Dev: 0.022003 CPK: 1.34 PPK: 1.36 Ca: 0.1 Cp: 1.49 Pp: 1.51',
subtext: '',
textStyle: {
fontWeight: 'normal',
fontSize:'12px',
color: '#515A6E' //legend颜色
},
left: 'center',
top: 'bottom'
},
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [
{
offset: 0,
color: '#739ADD' // 0% 处的颜色
},
{
offset: 1,
color: '#739ADD' // 100% 处的颜色
}
],
global: false // 缺省为 false
},
tooltip: {
trigger: 'axis',
axisPointer: {
animation: false
}
},
xAxis: {
type: 'category',
data: [
'2019',
'2020',
'2021',
'2022',
'2023',
'2024',
'2025',
'2026',
'2027',
'2028',
'2029',
'2030'
]
},
yAxis: {
type: 'value',
axisLabel: {
formatter: '{value} ‰'
}
},
series: [
{
data: [1.6, 2.8, 3.2, 1.6, 0.2, 4.7, 1.5, 4.9, 2.5, 5.4, 6.2, 1.5],
type: 'line',
markLine: {
data: [
{
type: 'max',
label: {
formatter: '2020目标值 6 ‰'
},
lineStyle: {
//警戒线的样式 ,虚实 颜色
type: 'dashed',
color: '#0B5813',
width: 2
}
},
{
type: 'min',
label: {
formatter: '2030目标值 0.2 ‰'
},
lineStyle: {
//警戒线的样式 ,虚实 颜色
type: 'dashed',
color: '#E99224',
width: 2
}
}
]
}
}
]
}
// 绘制图表
myChart.setOption(option)
}
},
mounted() {
this.loadEchart()
}
}
</script>
This diff is collapsed.
.set_card{
padding: 30px 30px 0;
.set_card_box{
border: 1px solid #CACBD0;
border-radius: 4px;
margin: 0 0 30px 0;
.set_top{
text-align: center;
background: #267feb42;
line-height: 38px;
color: #2680EB;
font-weight: bold;
}
.set_card_body{
padding: 10px;
.set_img{
min-width: 150px;
min-height: 120px;
text-align: center;
}
.bao_code{
line-height: 32px;
font-size: 16px;
font-weight: bold;
border-right: 1px solid #ccc;
padding: 30px 0 0 0;
margin: 0 10px 0 0;
}
.set_masage{
min-height: 125px;
}
}
}
}
\ No newline at end of file
<style lang="less" scoped>
@import "./mnc.less";
</style>
<template>
<div>
<a class="back_href" @click="goView">
<Icon type="ios-undo-outline" size="24" />返回设备监控
</a>
<div class="set_card">
<Row :gutter="30">
<Col span="6">
<div class="set_card_box">
<p class="set_top">设备属性</p>
<div class="set_card_body">
<Row>
<Col span="10">
<img class="set_img" src="../image/shebei.png" alt=""/>
</Col>
<Col span="14">
<div class="set_masage">
<p>机床名称:德玛吉235537</p>
<p>机床类型:V1-256-16334</p>
<p>机床编码:JCBM-06224</p>
<p>机床IP:1231-111-26012</p>
<p>系统信息:V-5633-12112</p>
</div>
</Col>
</Row>
</div>
</div>
</Col>
<Col span="6">
<div class="set_card_box">
<p class="set_top">当前任务信息</p>
<div class="set_card_body">
<div class="set_masage">
<p>当前程序号:德玛吉235537</p>
<p>零件号:V1-256-16334</p>
<p>加工工序号:JCBM-06224</p>
<p>当前任务号:RWBH-0617-001</p>
<p>工步卡号:GBKH-222-2011</p>
</div>
</div>
</div>
</Col>
<Col span="12">
<div class="set_card_box">
<p class="set_top">设备报警信息</p>
<div class="set_card_body">
<Row>
<Col span="5">
<div class="set_img bao_code">
<p>报警码</p>
<p>13366133</p>
</div>
</Col>
<Col span="19">
<div class="set_masage">
<p><b>报警原因:</b></p>
<p>磨损所致。 异常操作所致。 非法改变其功能所致。 超负荷使用。 设计上潜在不良因素。 维护手法欠佳。
设备故障一般是指设备失去或降低其规定功能的事件或现象,表现为设备生产运行异常,
指设备的某些零件失去原有的精度或性能,使设备不能正常运行、技术性能降低,致使设备中断生产或效率</p>
</div>
</Col>
</Row>
</div>
</div>
</Col>
</Row>
<Row :gutter="30">
<Col span="6" class="set_bottom">
<div class="set_card_box">
<p class="set_top">设备状态</p>
<div class="set_card_body">
<div class="set_img">
<img src="../image/guz.png" alt="">
<p>故障</p>
</div>
<div class="set_masage">
<p>当前状态开始时间:</p>
<p class="time_bg">11:45:05</p>
<p>当前状态持续时间:</p>
<p class="time_bg">11:55:25</p>
</div>
</div>
</div>
<div class="set_card_box">
<p class="set_top">加工状态统计</p>
<div class="center">
图表
</div>
</div>
</Col>
<Col span="18">
<div class="set_card_box">
<p class="set_top">加工状态实时信息</p>
<div class="center">
图表
</div>
</div>
</Col>
</Row>
</div>
</div>
</template>
<script>
export default {
data(){
return{
};
},
methods:{
goView(){
//返回设备监控页面 获取id:this.$route.query.id
this.$router.push("/dncmnc/mnc");
},
},
}
</script>
\ No newline at end of file
......@@ -25,7 +25,7 @@
<Filed :span="12" name="问题原因">{{entity.reason}}</Filed>
<Filed :span="12" name="责任归属">{{entity.personLiableId}}</Filed>
<Filed :span="24" name="不合格产品">{{entity.productIds}}</Filed>
<Filed :span="24" name="审理单号">{{entity.code}}</Filed>
<!-- <Filed :span="24" name="审理单号">{{entity.code}}</Filed> -->
</Row>
</div>
</template>
......
......@@ -135,6 +135,18 @@ export default {
// align: "center",
// slot: "result"
// },
{
title: "属性类型",
key: "dataType",
align: "center",
slot: "dataType"
},
{
title: "单位",
key: "company",
align: "center",
slot: "company"
},
{
title: "必填",
key: "required",
......@@ -183,7 +195,11 @@ export default {
}
];
Api.listTable({ conditions: conditions ,sortBy:'id',isDesc:false}).then(r => {
Api.listTable({
conditions: conditions,
sortBy: "id",
isDesc: false
}).then(r => {
if (r.result) {
var arr = r.result;
this.checkList = arr.filter(function(item) {
......
......@@ -122,6 +122,7 @@ export default {
methods: {
clickItem(val) {
this.nodeInfo.codeRuleId = val;
this.model8 = val;
this.loadTree(this.nodeInfo.codeRuleId);
this.cityList.forEach(e => {
if (val == e.id) {
......
......@@ -29,4 +29,7 @@ export default {
categoryList(params){
return Api.post(`${systemUrl}/actionlog/list`,params);
},
batchstart(params) {
return Api.post(`${workflowUrl}/instance/batchstart`, params); //送审
},
}
\ No newline at end of file
......@@ -73,7 +73,7 @@ export default {
entity: {},
easySearch: {
keys: { op: "title", value: "" },
table: { op: "Equal", value: "material" },
tableTitle: { op: "Equal", value: "material" },
tId: {
op: "Equal",
value: this.$route.query.id
......
......@@ -8,6 +8,7 @@
:initsearch="sets"
:high="false"
:height="tableHeight"
@on-selection-change="onSelect"
>
<template slot="easySearch">
<Form ref="formInline" :model="easySearch" inline>
......@@ -24,19 +25,29 @@
</FormItem>
</Form>
</template>
<!-- <template slot="searchForm">
<Search />
</template>-->
<template slot="buttons">
<Button type="primary" @click="add">新增</Button>
</template>
<template slot="batch">
<Button type="primary" @click="modalSchedule">批量送审</Button>
</template>
</DataGrid>
<Modal v-model="modal" :title="title" width="1000" footer-hide :mask-closable="false">
<Modal
v-model="modal"
:title="title"
width="1000"
footer-hide
:mask-closable="false"
:fullscreen="fullscreen"
>
<component
:is="detail"
:eid="curId"
:rowsTable="rowsTable"
:nodeInfo="nodeInfo"
@on-close="cancel"
@on-cancel="cancel"
@on-ok="ok"
ref="chlidren"
/>
......@@ -59,6 +70,9 @@ export default {
modal: false,
title: "新增",
curId: 0,
selectRows: [],
rowsTable: [],
fullscreen: false,
detail: null,
sets: v => {
v.categoryId = this.nodeInfo.categoryId;
......@@ -72,12 +86,11 @@ export default {
}
},
columns: [
// {
// key: "index",
// title: "#",
// align: "left",
// width: 60
// },
{
type: "selection",
width: 70,
align: "center"
},
{
key: "code",
title: "编码",
......@@ -196,6 +209,18 @@ export default {
};
},
methods: {
onSelect(a, b) {
//批量选择
this.selectRows = a;
},
modalSchedule() {
this.fullscreen = true;
this.rowsTable = this.selectRows;
this.title = "物料送审";
this.curId = 0;
this.detail = () => import("./submit");
this.modal = true;
},
search() {
this.$refs.grid.reload(this.easySearch);
},
......@@ -283,6 +308,14 @@ export default {
}
});
},
send(row) {
this.fullscreen = true;
this.curId = row.id;
this.title = "物料送审";
this.detail = () => import("./submit");
this.rowsTable = [];
this.modal = true;
},
ok() {
this.$refs.grid.reload(this.easySearch);
this.modal = false;
......@@ -291,8 +324,7 @@ export default {
cancel() {
this.curId = 0;
this.modal = false;
},
send(row) {}
}
},
watch: {
nodeInfo: {
......
<template>
<div class="submit" :style="{ height: divHeight }">
<div class="body-procee">
<div class="new-detail" v-if="osrOneList1">
<Row>
<Filed :span="8" name="编码:">{{entity.code}}</Filed>
<Filed :span="8" name="名称:">{{entity.name}}</Filed>
<Filed :span="8" name="状态:">
<State code="materail.category.status" :value="parseInt(entity.status)" />
</Filed>
<Filed :span="8" name="版本:">{{entity.version}}</Filed>
<Filed :span="8" name="描述:">{{entity.description}}</Filed>
</Row>
</div>
<Table
:loading="loading"
border
:columns="columns"
:data="dataList"
class="tableCommon"
v-if="osrOneList2"
></Table>
<Process ref="userProcess" schemaIdVal="b6303ddc-8b5e-40a3-a51b-294657d1d913" />
<div slot="footer">
<Button @click="modalInfo">取消</Button>
<Button type="primary" @click="upSave">确定送审</Button>
</div>
<!-- 信息提示 -->
<Modal
v-model="ModalInfo"
title="信息提示"
width="600"
:mask-closable="false"
:scrollable="true"
ok-text="确定"
cancel-text="取消"
>
{{ metCodesStrTxt }}
<div slot="footer">
<Button @click="ModalInfo = false">取消</Button>
<Button type="primary" @click="modalInfoOk">确定</Button>
</div>
</Modal>
</div>
</div>
</template>
<script>
import Process from "@/components/orderOperator/process";
import Api from "./api";
export default {
name: "orderSendReview",
components: {
Process
},
props: ["eid", "rowsTable"],
async fetch({ store, params }) {
await store.dispatch("loadDictionary"); // 加载数据字典
},
data() {
return {
rowId: "",
entity: {},
metCodesStrTxt: "",
results: {},
loading: false,
ModalInfo: false,
divHeight: "300px",
osrOneList1: false, //一条数据显示
osrOneList2: false,
info: true,
ruleValidate: {},
orderSearchForm: {
reviewUser: "" //订单名称
},
dataList: [],
dataListRetrun: [], //确定后返回数据
dataListRetrunNew: {
schemaId: "b6303ddc-8b5e-40a3-a51b-294657d1d913", //合格证流程id:schemaId
idList: [], //合格证id List
codeList: [], //合格证编号List
operatorIdList: [] //操作员id
}, //确定后返回数据
columns: [
{
key: "code",
title: "编码",
align: "left",
render: (h, params) => {
return h(
"a",
{
props: {},
on: {
click: () => this.details(params.row.id)
}
},
params.row.code
);
}
},
{
key: "name",
title: "名称",
align: "left"
},
{
key: "status",
title: "状态",
align: "left",
render: (h, params) => {
return h("state", {
props: {
code: "materail.category.status",
type: "text",
value: params.row.status + ""
}
});
}
},
{
key: "version",
title: "版本",
align: "left"
},
{
key: "description",
title: "描述",
align: "left"
}
]
};
},
created() {
var theight = window.innerHeight - 120 + "px";
this.divHeight = theight;
if (this.eid !== 0) {
this.osrOneList1 = true;
this.osrOneList2 = false;
this.getDetails(this.eid);
} else {
this.osrOneList1 = false;
this.osrOneList2 = true;
this.dataList = this.rowsTable;
}
},
mounted() {
window.onresize = () => {
///浏览器窗口大小变化
return (() => {
window.screenHeight = window.innerHeight;
this.divHeight = window.screenHeight - 120 + "px";
})();
};
},
methods: {
getDetails(v) {
Api.get({ id: v }).then(r => {
if (r.result) {
this.entity = r.result;
}
});
},
returnDataList() {
let ues = this.$refs.userProcess;
this.dataListRetrunNew.operatorIdList = ues.immutData;
alert(JSON.stringify(this.dataListRetrunNew));
// //返回审批数据
return this.dataListRetrunNew;
},
upSave() {
let codeList = [];
let idList = [];
idList.push(this.rowId);
codeList.push(this.entity.code);
if (this.eid !== 0) {
idList.push(this.rowId);
codeList.push(this.entity.code);
} else {
this.rowsTable.forEach(e => {
idList.push(e.id);
codeList.push(e.code);
});
}
this.dataListRetrunNew.idList = idList;
this.dataListRetrunNew.codeList = codeList;
let metCodesStr = JSON.stringify(codeList)
.replace("[", "")
.replace("]", "")
.replace(/\"/g, "");
this.ModalInfoStaut = "orderSendReview";
this.metCodesStrTxt = "确定物料 " + metCodesStr + "?";
this.ModalInfo = true;
alert(this.dataListRetrunNew.idList);
alert(this.dataListRetrunNew.codeList);
},
modalInfoOk() {
let ues = this.$refs.userProcess;
this.dataListRetrunNew.operatorIdList = ues.immutData;
Api.batchstart(this.dataListRetrunNew).then(r => {
if (r.success) {
this.ModalInfo = false;
this.$Message.success("送审成功");
this.$emit("on-close");
this.$emit("on-ok");
}
});
},
modalInfo() {
this.$emit("on-close");
}
}
};
</script>
<style lang="less">
.submit {
.body-procee {
width: 80%;
margin: 0 auto;
}
}
</style>
......@@ -28,12 +28,12 @@
</RadioGroup>
</FormItem>
</Col>
<Col span="12">
<Col span="8">
<FormItem :label="l('capabilityValue')">
<InputNumber v-model="entity.capabilityValue"></InputNumber>
</FormItem>
</Col>
<Col span="4">
<Col span="8">
<FormItem>
<Button type="primary" @click="handleSubmit" :disabled="disabled">保存</Button>
</FormItem>
......@@ -308,8 +308,6 @@ export default {
.form-row {
width: 600px;
margin-left: 50px;
margin-top: -45px;
.ivu-form-item-label {
color: #fff !important;
}
......
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