69b854f5 by lxs

数据产品上架更新

1 parent 0cef9c1b
...@@ -27,7 +27,7 @@ import { getCamundaDeploymentId, rejectFlowData, passFlowData, isMyFirstNode, re ...@@ -27,7 +27,7 @@ import { getCamundaDeploymentId, rejectFlowData, passFlowData, isMyFirstNode, re
27 const { required } = useValidator(); 27 const { required } = useValidator();
28 const route = useRoute(); 28 const route = useRoute();
29 const userStore = useUserStore(); 29 const userStore = useUserStore();
30 const userData = JSON.parse(userStore.userData); 30 const userData = JSON.parse(localStorage.userData);
31 const fullPath = route.fullPath; 31 const fullPath = route.fullPath;
32 const assetStore = useDataAssetStore(); 32 const assetStore = useDataAssetStore();
33 const guid = route.query.guid as string; 33 const guid = route.query.guid as string;
...@@ -75,7 +75,7 @@ const getArea = (node, resolve) => { ...@@ -75,7 +75,7 @@ const getArea = (node, resolve) => {
75 return; 75 return;
76 } 76 }
77 if (!getAreaDataPromise.value[node.value]) { 77 if (!getAreaDataPromise.value[node.value]) {
78 console.log('getAreaDataPromise', getAreaDataPromise.value); 78 // console.log('getAreaDataPromise', getAreaDataPromise.value);
79 getAreaDataPromise.value[node.value] = getAreaData(params).then((res: any) => { 79 getAreaDataPromise.value[node.value] = getAreaData(params).then((res: any) => {
80 getAreaDataPromise.value[node.value] = null; 80 getAreaDataPromise.value[node.value] = null;
81 node.loaded = true; 81 node.loaded = true;
...@@ -310,7 +310,8 @@ const formInfo = ref<any>({ ...@@ -310,7 +310,8 @@ const formInfo = ref<any>({
310 default: '', 310 default: '',
311 disabled: false, 311 disabled: false,
312 inputType: 'moneyNumber', 312 inputType: 'moneyNumber',
313 required: true 313 required: true,
314 visible: true,
314 }, 315 },
315 { 316 {
316 label: "价格单位", 317 label: "价格单位",
...@@ -327,6 +328,7 @@ const formInfo = ref<any>({ ...@@ -327,6 +328,7 @@ const formInfo = ref<any>({
327 clearable: true, 328 clearable: true,
328 disabled: false, 329 disabled: false,
329 required: true, 330 required: true,
331 visible: true,
330 }, 332 },
331 { 333 {
332 label: "登记数交所", 334 label: "登记数交所",
...@@ -664,7 +666,7 @@ const getTableInfo = () => { ...@@ -664,7 +666,7 @@ const getTableInfo = () => {
664 666
665 const getProductDetail = async () => { 667 const getProductDetail = async () => {
666 flowDetailLoading.value = true; 668 flowDetailLoading.value = true;
667 getListingDetail({ guid: guid, serviceTenantGuid: route.query.tenantGuid }).then((res: any) => { 669 getListingDetail({ guid: guid, serviceTenantGuid: route.query.serviceTenantGuid }).then((res: any) => {
668 flowDetailLoading.value = false; 670 flowDetailLoading.value = false;
669 if (res.code == proxy.$passCode) { 671 if (res.code == proxy.$passCode) {
670 const data = res.data || {} 672 const data = res.data || {}
...@@ -689,7 +691,7 @@ const getProductDetail = async () => { ...@@ -689,7 +691,7 @@ const getProductDetail = async () => {
689 let coverageArea = data.coverageArea || []; 691 let coverageArea = data.coverageArea || [];
690 if (data.coverageArea?.[0]?.[0] == 'all') { 692 if (data.coverageArea?.[0]?.[0] == 'all') {
691 setFormItems({ ...flowDetail.value, coverageArea: coverageArea }, true); 693 setFormItems({ ...flowDetail.value, coverageArea: coverageArea }, true);
692 console.log(formInfo.value.items); 694 // console.log(formInfo.value.items);
693 } else { 695 } else {
694 let p: any = []; 696 let p: any = [];
695 data.coverageArea.forEach(area => { 697 data.coverageArea.forEach(area => {
...@@ -746,7 +748,7 @@ const getApproveData = () => { ...@@ -746,7 +748,7 @@ const getApproveData = () => {
746 getApproveList(guid).then((res: any) => { 748 getApproveList(guid).then((res: any) => {
747 approveTableInfo.value.loading = false; 749 approveTableInfo.value.loading = false;
748 if (res.code == proxy.$passCode) { 750 if (res.code == proxy.$passCode) {
749 console.log(res.data); 751 // console.log(res.data);
750 approveTableInfo.value.data = res.data || []; 752 approveTableInfo.value.data = res.data || [];
751 } else { 753 } else {
752 ElMessage.error(res.msg); 754 ElMessage.error(res.msg);
...@@ -786,7 +788,7 @@ const submitForm = (btn, formEl, tosub = false) => { ...@@ -786,7 +788,7 @@ const submitForm = (btn, formEl, tosub = false) => {
786 delete params.productImgList; 788 delete params.productImgList;
787 params.coverageArea = subForm.value.coverageAreas == 'Y' ? [['all']] : subForm.value.coverageArea; 789 params.coverageArea = subForm.value.coverageAreas == 'Y' ? [['all']] : subForm.value.coverageArea;
788 params.productPic = subForm.value.productImg.length ? { name: subForm.value.productImg[0].name, url: subForm.value.productImg[0].url } : {}; 790 params.productPic = subForm.value.productImg.length ? { name: subForm.value.productImg[0].name, url: subForm.value.productImg[0].url } : {};
789 console.log(params, formInfo.value.items.at(3).defaultValue, formInfo.value, '-----------------'); 791 // console.log(params, formInfo.value.items.at(3).defaultValue, formInfo.value, '-----------------');
790 params.caseNumber = parseInt(params.caseNumber.replace(/,/g, ''), 10), 792 params.caseNumber = parseInt(params.caseNumber.replace(/,/g, ''), 10),
791 params.dataScale = parseInt(params.dataScale.replace(/,/g, ''), 10), 793 params.dataScale = parseInt(params.dataScale.replace(/,/g, ''), 10),
792 params.timeAreaStart = params.dateRange ? params.dateRange[0] : ''; 794 params.timeAreaStart = params.dateRange ? params.dateRange[0] : '';
...@@ -858,7 +860,7 @@ const submitForm = (btn, formEl, tosub = false) => { ...@@ -858,7 +860,7 @@ const submitForm = (btn, formEl, tosub = false) => {
858 } else { 860 } else {
859 if (detailType == 'add') { 861 if (detailType == 'add') {
860 // 上架交易所 862 // 上架交易所
861 console.log(params, '--------上架交易所 ---------'); 863 // console.log(params, '--------上架交易所 ---------');
862 params.immediateApprove = btn.value == 'submit' ? true : false; 864 params.immediateApprove = btn.value == 'submit' ? true : false;
863 params.registrationCertificate = params.registrationCertificateInfo.length ? { name: params.registrationCertificateInfo[0].name, url: params.registrationCertificateInfo[0].url } : {}; 865 params.registrationCertificate = params.registrationCertificateInfo.length ? { name: params.registrationCertificateInfo[0].name, url: params.registrationCertificateInfo[0].url } : {};
864 params.accreditFile = params.accreditFileInfo.length ? [{ 866 params.accreditFile = params.accreditFileInfo.length ? [{
...@@ -891,7 +893,7 @@ const submitForm = (btn, formEl, tosub = false) => { ...@@ -891,7 +893,7 @@ const submitForm = (btn, formEl, tosub = false) => {
891 delete params.costAssessmentFileInfo; 893 delete params.costAssessmentFileInfo;
892 delete params.productDetailInfo; 894 delete params.productDetailInfo;
893 delete params.qualityEvaluationFileInfo; 895 delete params.qualityEvaluationFileInfo;
894 console.log(params, '-------rwrwerwer----------'); 896 // console.log(params, '-------rwrwerwer----------');
895 listingSave(params).then((res: any) => { 897 listingSave(params).then((res: any) => {
896 if (res.code == proxy.$passCode) { 898 if (res.code == proxy.$passCode) {
897 ElMessage({ 899 ElMessage({
...@@ -955,7 +957,7 @@ const submitForm = (btn, formEl, tosub = false) => { ...@@ -955,7 +957,7 @@ const submitForm = (btn, formEl, tosub = false) => {
955 delete params.costAssessmentFileInfo; 957 delete params.costAssessmentFileInfo;
956 delete params.productDetailInfo; 958 delete params.productDetailInfo;
957 delete params.qualityEvaluationFileInfo; 959 delete params.qualityEvaluationFileInfo;
958 console.log(params, '-------rwrwerwer----------'); 960 // console.log(params, '-------rwrwerwer----------');
959 listingUpdate(params).then((res: any) => { 961 listingUpdate(params).then((res: any) => {
960 if (res.code == proxy.$passCode) { 962 if (res.code == proxy.$passCode) {
961 ElMessage({ 963 ElMessage({
...@@ -1122,7 +1124,7 @@ const btnClick = (btn) => { ...@@ -1122,7 +1124,7 @@ const btnClick = (btn) => {
1122 } 1124 }
1123 1125
1124 const setFormItems = (row: any = null, isDetail = false) => { 1126 const setFormItems = (row: any = null, isDetail = false) => {
1125 console.log(row, '--------1---------'); 1127 // console.log(row, '--------1---------');
1126 formInfo.value.items.forEach((item: any) => { 1128 formInfo.value.items.forEach((item: any) => {
1127 if (item.field == 'productImg') { 1129 if (item.field == 'productImg') {
1128 // item.default = row ? (row.productPic ? [row.productPic] : row[item.field] || []) : [] 1130 // item.default = row ? (row.productPic ? [row.productPic] : row[item.field] || []) : []
...@@ -1168,7 +1170,7 @@ const setFormItems = (row: any = null, isDetail = false) => { ...@@ -1168,7 +1170,7 @@ const setFormItems = (row: any = null, isDetail = false) => {
1168 item.default = row ? row[item.field] : (item.default || '') 1170 item.default = row ? row[item.field] : (item.default || '')
1169 } 1171 }
1170 } else if (item.field == 'dateRange') { 1172 } else if (item.field == 'dateRange') {
1171 console.log(row, '--------2-22--------'); 1173 // console.log(row, '--------2-22--------');
1172 if (row.dateRange) { 1174 if (row.dateRange) {
1173 item.default = row.dateRange; 1175 item.default = row.dateRange;
1174 } 1176 }
...@@ -1196,6 +1198,14 @@ const setFormItems = (row: any = null, isDetail = false) => { ...@@ -1196,6 +1198,14 @@ const setFormItems = (row: any = null, isDetail = false) => {
1196 else if (item.field == 'qualityEvaluationFileInfo') { 1198 else if (item.field == 'qualityEvaluationFileInfo') {
1197 item.default = row ? (row.evaluationFile ? row.evaluationFile : row[item.field] || []) : [] 1199 item.default = row ? (row.evaluationFile ? row.evaluationFile : row[item.field] || []) : []
1198 } 1200 }
1201 else if (item.field == 'productPrice') {
1202 item.default = row[item.field] || '';
1203 item.visible = row?.pricingWay != '4';
1204 }
1205 else if (item.field == 'priceUnit') {
1206 item.default = row[item.field] || '';
1207 item.visible = row?.pricingWay != '4';
1208 }
1199 else { 1209 else {
1200 item.default = row[item.field] !== undefined ? row[item.field] : (item.default || ''); 1210 item.default = row[item.field] !== undefined ? row[item.field] : (item.default || '');
1201 // if (item && item.hasOwnProperty('default')) { 1211 // if (item && item.hasOwnProperty('default')) {
...@@ -1209,37 +1219,32 @@ const setFormItems = (row: any = null, isDetail = false) => { ...@@ -1209,37 +1219,32 @@ const setFormItems = (row: any = null, isDetail = false) => {
1209 1219
1210 const selectChange = async (val, row, info) => { 1220 const selectChange = async (val, row, info) => {
1211 if (row.field == 'damName') { 1221 if (row.field == 'damName') {
1212 console.log(val, row, info, '--------1123123---------'); 1222 // console.log(val, row, info, '--------1123123---------');
1213 if (!val) { 1223 if (!val) {
1214 return; 1224 return;
1215 } 1225 }
1216 const data = row.options.filter(o => o.damName == val); 1226 const data = row.options.filter(o => o.damName == val);
1217 let coverageArea = (data.length && data[0].coverageArea) ? data[0].coverageArea : []; 1227 let coverageArea = (data.length && data[0].coverageArea) ? data[0].coverageArea : [];
1218 await setFormItems({ ...info, coverageArea: coverageArea }); 1228 await setFormItems({ ...info, coverageArea: coverageArea });
1219 formInfo.value.items.forEach((item: any) => { 1229 // formInfo.value.items.forEach((item: any) => {
1220 if (item.field == 'costAssessmentFileInfo') { 1230 // if (item.field == 'costAssessmentFileInfo') {
1221 item.default = data?.[0]?.assessmentFile || []; 1231 // item.default = data?.[0]?.assessmentFile || [];
1222 } else if (item.field == 'qualityEvaluationFileInfo') { 1232 // } else if (item.field == 'qualityEvaluationFileInfo') {
1223 item.default = data?.[0]?.evaluationFile || []; 1233 // item.default = data?.[0]?.evaluationFile || [];
1224 } else if (item.field == 'qualityEvaluationFileInfo') { 1234 // } else if (item.field == 'qualityEvaluationFileInfo') {
1225 item.default = data?.[0]?.evaluationFile || []; 1235 // item.default = data?.[0]?.evaluationFile || [];
1226 } else if (item.field == 'commitmentLetterInfo') { 1236 // } else if (item.field == 'commitmentLetterInfo') {
1227 item.default = data?.[0]?.commitmentLetter || []; 1237 // item.default = data?.[0]?.commitmentLetter || [];
1228 } else if (item.field == 'qualityEvaluationInstitution') { 1238 // } else if (item.field == 'qualityEvaluationInstitution') {
1229 item.default = data?.[0]?.qualityEvaluationInstitution || ''; 1239 // item.default = data?.[0]?.qualityEvaluationInstitution || '';
1230 } else if (item.field == 'costAssessmentInstitution') { 1240 // } else if (item.field == 'costAssessmentInstitution') {
1231 item.default = data?.[0]?.costAssessmentInstitution || ''; 1241 // item.default = data?.[0]?.costAssessmentInstitution || '';
1232 } 1242 // } else if (item.field == 'pricingWay') {
1233 // else if (item.field == 'pricingWay') { 1243 // item.default = data?.[0]?.pricingWay || '';
1234 // item.default = data?.[0]?.fixPriceWay || ''; 1244 // }
1235 // } else if (item.field == 'productPrice') { 1245 // });
1236 // item.default = data?.[0]?.pricingAmount || ''; 1246
1237 // } else if (item.field == 'priceUnit') { 1247 // formInfo.value.items.at(0).default = val;
1238 // item.default = data?.[0]?.priceUnit || '';
1239 // }
1240 });
1241
1242 formInfo.value.items.at(0).default = val;
1243 formInfo.value.items.at(1).default = data.length ? data[0].damType : ''; 1248 formInfo.value.items.at(1).default = data.length ? data[0].damType : '';
1244 // formInfo.value.items.at(2).default = data.length ? data[0].subjectDomain : ''; 1249 // formInfo.value.items.at(2).default = data.length ? data[0].subjectDomain : '';
1245 formInfo.value.items.at(2).default = data.length ? data[0].damCode : ''; 1250 formInfo.value.items.at(2).default = data.length ? data[0].damCode : '';
...@@ -1254,24 +1259,28 @@ const selectChange = async (val, row, info) => { ...@@ -1254,24 +1259,28 @@ const selectChange = async (val, row, info) => {
1254 formInfo.value.items.at(-1).default = data.length ? data[0].subjectDomain : ''; 1259 formInfo.value.items.at(-1).default = data.length ? data[0].subjectDomain : '';
1255 // formInfo.value.items.at(-3).required = data[0].damType != '1' && data[0].damType != '2'; 1260 // formInfo.value.items.at(-3).required = data[0].damType != '1' && data[0].damType != '2';
1256 // formInfo.value.items.at(-4).required = data[0].damType != '1' && data[0].damType != '2'; 1261 // formInfo.value.items.at(-4).required = data[0].damType != '1' && data[0].damType != '2';
1257 if (data.length && data[0].coverageArea?.[0]?.[0] != 'all' && data[0].coverageArea) { 1262 // if (data.length && data[0].coverageArea?.[0]?.[0] != 'all' && data[0].coverageArea) {
1258 let p: any = []; 1263 // let p: any = [];
1259 data[0].coverageArea.forEach(area => { 1264 // data[0].coverageArea.forEach(area => {
1260 if (p.includes(area[0])) { 1265 // if (p.includes(area[0])) {
1261 return; 1266 // return;
1262 } 1267 // }
1263 p.push(area[0]); 1268 // p.push(area[0]);
1264 getArea({ value: area[0], level: 1 }, () => { }) 1269 // getArea({ value: area[0], level: 1 }, () => { })
1265 }); 1270 // });
1266 let ps: any = [] 1271 // let ps: any = []
1267 for (const key in getAreaDataPromise.value) { 1272 // for (const key in getAreaDataPromise.value) {
1268 ps.push(getAreaDataPromise.value[key]) 1273 // ps.push(getAreaDataPromise.value[key])
1269 } 1274 // }
1270 Promise.all(ps).then(() => { 1275 // Promise.all(ps).then(() => {
1271 const fInfo = listingFormRef.value.formInline; 1276 // const fInfo = listingFormRef.value.formInline;
1272 setFormItems({ ...fInfo, coverageArea: coverageArea }); 1277 // setFormItems({ ...fInfo, coverageArea: coverageArea });
1273 }); 1278 // });
1274 } 1279 // }
1280 } else if (row.field == 'pricingWay') {
1281 await setFormItems({ ...info });
1282 formInfo.value.items.at(9).visible = val != '4';
1283 formInfo.value.items.at(10).visible = val != '4';
1275 } 1284 }
1276 } 1285 }
1277 1286
...@@ -1752,7 +1761,7 @@ const passCommonDialogInfo = ref({ ...@@ -1752,7 +1761,7 @@ const passCommonDialogInfo = ref({
1752 { 1761 {
1753 label: '', 1762 label: '',
1754 type: "textarea", 1763 type: "textarea",
1755 placeholder: "请填写通过理由(填)", 1764 placeholder: "请填写通过理由(非必填)",
1756 field: "approveSuggest", 1765 field: "approveSuggest",
1757 clearable: true, 1766 clearable: true,
1758 maxlength: 400, 1767 maxlength: 400,
...@@ -2318,7 +2327,8 @@ const rejectDialogBtnClick = (btn, info) => { ...@@ -2318,7 +2327,8 @@ const rejectDialogBtnClick = (btn, info) => {
2318 </div> 2327 </div>
2319 </div> 2328 </div>
2320 </div> 2329 </div>
2321 <div class="panel_wrap" v-if="(detailType == 'detail') && flowDetail.complianceInfo && Object.keys(flowDetail.complianceInfo).length > 0"> 2330 <div class="panel_wrap"
2331 v-if="(detailType == 'detail') && flowDetail.complianceInfo && Object.keys(flowDetail.complianceInfo).length > 0">
2322 <div class="panel_header"> 2332 <div class="panel_header">
2323 <div class="header_title"> 2333 <div class="header_title">
2324 <span class="title_text"> 2334 <span class="title_text">
...@@ -2330,35 +2340,51 @@ const rejectDialogBtnClick = (btn, info) => { ...@@ -2330,35 +2340,51 @@ const rejectDialogBtnClick = (btn, info) => {
2330 <div class="list_panel"> 2340 <div class="list_panel">
2331 <div class="list_item"> 2341 <div class="list_item">
2332 <span class="item_label t_left">是否遵守隐私法律和数据保护法规:</span> 2342 <span class="item_label t_left">是否遵守隐私法律和数据保护法规:</span>
2333 <span class="item_value">{{ flowDetail.complianceInfo?.[1] ? (flowDetail.complianceInfo?.[1] == 'Y' ? '是' : '否') : '--' }}</span> 2343 <span class="item_value">{{ flowDetail.complianceInfo?.[1] ? (flowDetail.complianceInfo?.[1] == 'Y' ? '是'
2344 : '否')
2345 : '--' }}</span>
2334 </div> 2346 </div>
2335 <div class="list_item"> 2347 <div class="list_item">
2336 <span class="item_label t_left">不存在侵犯他人版权的信息:</span> 2348 <span class="item_label t_left">不存在侵犯他人版权的信息:</span>
2337 <span class="item_value">{{ flowDetail.complianceInfo?.[2] ? (flowDetail.complianceInfo?.[2] == 'Y' ? '是' : '否') : '--' }}</span> 2349 <span class="item_value">{{ flowDetail.complianceInfo?.[2] ? (flowDetail.complianceInfo?.[2] == 'Y' ? '是'
2350 : '否')
2351 : '--' }}</span>
2338 </div> 2352 </div>
2339 <div class="list_item"> 2353 <div class="list_item">
2340 <span class="item_label t_left">是否符合研究伦理:</span> 2354 <span class="item_label t_left">是否符合研究伦理:</span>
2341 <span class="item_value">{{ flowDetail.complianceInfo?.[3] ? (flowDetail.complianceInfo?.[3] == 'Y' ? '是' : '否') : '--' }}</span> 2355 <span class="item_value">{{ flowDetail.complianceInfo?.[3] ? (flowDetail.complianceInfo?.[3] == 'Y' ? '是'
2356 : '否')
2357 : '--' }}</span>
2342 </div> 2358 </div>
2343 <div class="list_item"> 2359 <div class="list_item">
2344 <span class="item_label t_left">是否遵守道德标准:</span> 2360 <span class="item_label t_left">是否遵守道德标准:</span>
2345 <span class="item_value">{{ flowDetail.complianceInfo?.[4] ? (flowDetail.complianceInfo?.[4] == 'Y' ? '是' : '否') : '--' }}</span> 2361 <span class="item_value">{{ flowDetail.complianceInfo?.[4] ? (flowDetail.complianceInfo?.[4] == 'Y' ? '是'
2362 : '否')
2363 : '--' }}</span>
2346 </div> 2364 </div>
2347 <div class="list_item"> 2365 <div class="list_item">
2348 <span class="item_label t_left">数据来源是否合规:</span> 2366 <span class="item_label t_left">数据来源是否合规:</span>
2349 <span class="item_value">{{ flowDetail.complianceInfo?.[6] ? (flowDetail.complianceInfo?.[6] == 'Y' ? '是' : '否') : '--' }}</span> 2367 <span class="item_value">{{ flowDetail.complianceInfo?.[6] ? (flowDetail.complianceInfo?.[6] == 'Y' ? '是'
2368 : '否')
2369 : '--' }}</span>
2350 </div> 2370 </div>
2351 <div class="list_item"> 2371 <div class="list_item">
2352 <span class="item_label t_left">相关文档审查是否合规:</span> 2372 <span class="item_label t_left">相关文档审查是否合规:</span>
2353 <span class="item_value">{{ flowDetail.complianceInfo?.[7] ? (flowDetail.complianceInfo?.[7] == 'Y' ? '是' : '否') : '--' }}</span> 2373 <span class="item_value">{{ flowDetail.complianceInfo?.[7] ? (flowDetail.complianceInfo?.[7] == 'Y' ? '是'
2374 : '否')
2375 : '--' }}</span>
2354 </div> 2376 </div>
2355 <div class="list_item"> 2377 <div class="list_item">
2356 <span class="item_label t_left">是否符合国家标准及要求:</span> 2378 <span class="item_label t_left">是否符合国家标准及要求:</span>
2357 <span class="item_value">{{ flowDetail.complianceInfo?.[8] ? (flowDetail.complianceInfo?.[8] == 'Y' ? '是' : '否') : '--' }}</span> 2379 <span class="item_value">{{ flowDetail.complianceInfo?.[8] ? (flowDetail.complianceInfo?.[8] == 'Y' ? '是'
2380 : '否')
2381 : '--' }}</span>
2358 </div> 2382 </div>
2359 <div class="list_item"> 2383 <div class="list_item">
2360 <span class="item_label t_left">数据内容是否合规:</span> 2384 <span class="item_label t_left">数据内容是否合规:</span>
2361 <span class="item_value">{{ flowDetail.complianceInfo?.[5] ? (flowDetail.complianceInfo?.[5] == 'Y' ? '是' : '否') : '--' }}</span> 2385 <span class="item_value">{{ flowDetail.complianceInfo?.[5] ? (flowDetail.complianceInfo?.[5] == 'Y' ? '是'
2386 : '否')
2387 : '--' }}</span>
2362 </div> 2388 </div>
2363 </div> 2389 </div>
2364 </div> 2390 </div>
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!