Commit e515b59c authored by 张俊's avatar 张俊

Merge branch 'dev' of cloud.wodcloud.com:apaas/apaas-v3-ui into dev

parents f4edde82 f3fbbb84
...@@ -575,7 +575,7 @@ width: 620px!important; ...@@ -575,7 +575,7 @@ width: 620px!important;
color: #830f53; color: #830f53;
} }
.apass_table .row_action .btn.disabled { .apass_table .row_action .btn.disabled {
color: #dde4ff; color: #999;
cursor: not-allowed; cursor: not-allowed;
} }
.apass_table .row_action .interval_line { .apass_table .row_action .interval_line {
......
...@@ -12,12 +12,20 @@ ...@@ -12,12 +12,20 @@
<template slot-scope="scope"> <template slot-scope="scope">
<div v-if="item.type === 'buttons'" class="row_action"> <div v-if="item.type === 'buttons'" class="row_action">
<template v-for="(v, i) in item.actionList"> <template v-for="(v, i) in item.actionList">
<span
v-if="v.disabledRule && v.disabledRule(scope.row)"
class="btn disabled"
:key="'btn_' + index + '_' + i"
v-text="v.label"
>
</span>
<a <a
v-else
class="btn" class="btn"
:class="{ warn: v.label === '删除' }" :class="v.class || ''"
:key="'btn_' + index + '_' + i" :key="'btn_' + index + '_' + i"
@click="v.callback && v.callback(scope.row)" @click="v.callback && v.callback(scope.row)"
v-text="v.label" v-text="v.getLabel ? v.getLabel(scope.row) : v.label"
> >
</a> </a>
<span <span
...@@ -35,7 +43,12 @@ ...@@ -35,7 +43,12 @@
@click="item.callback && item.callback(scope.row)" @click="item.callback && item.callback(scope.row)"
></a> ></a>
</div> </div>
<span v-else v-text="scope.row[item.prop]"></span> <span
v-else
v-text="
item.getText ? item.getText(scope.row) : scope.row[item.prop]
"
></span>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
<a <a
:class="{ current: isCurrentFilter(item.prop, v) }" :class="{ current: isCurrentFilter(item.prop, v) }"
@click.prevent="selectFilter(item.prop, v)" @click.prevent="selectFilter(item.prop, v)"
v-text="v" v-text="v.name"
></a> ></a>
</li> </li>
......
<template> <template>
<div class="service_management_list"> <div class="service_management_list">
<apass-list <apass-list
ref="list"
search-placeholder="请输入关键字" search-placeholder="请输入关键字"
:list-total="listTotal" :list-total="listTotal"
:list-filter="filterList" :list-filter="filterList"
...@@ -37,46 +38,16 @@ export default { ...@@ -37,46 +38,16 @@ export default {
listTotal: 0, listTotal: 0,
listHeader: [], listHeader: [],
listData: [], listData: [],
filterList: [ filterList: [],
{ roleFilter: [],
name: "服务类型",
prop: "data_service_type",
data: ["数据服务", "时空服务", "视频服务", "感知服务", "综合服务"],
},
{
name: "服务领域",
prop: "sectors",
data: [
"数据服务",
"时空服务",
"视频服务",
"感知服务",
"综合服务",
"数据服务2",
"时空服务2",
"视频服务2",
"感知服务2",
"综合服务2",
"感知服务3",
"综合服务3",
],
},
{
name: "开放程度",
prop: "openness",
data: ["数据服务", "时空服务", "视频服务", "感知服务", "综合服务"],
},
{
name: "服务状态",
prop: "state",
data: ["数据服务", "时空服务", "视频服务", "感知服务", "综合服务"],
},
],
dialogInfo: { dialogInfo: {
title: "", title: "",
msg: "", msg: "",
submit: null, submit: null,
}, },
listUrl: "",
deleteUrl: "",
tempFliter: null,
}), }),
computed: { computed: {
...mapState({ ...mapState({
...@@ -99,23 +70,33 @@ export default { ...@@ -99,23 +70,33 @@ export default {
}, },
methods: { methods: {
initFilter() { initFilter() {
/* this.$http Promise.all([
.get("/apaas/serviceapp/v3/servicemarket/list", { this.$http.get("/apaas/service/v3/service/manager/servtype"),
params: {}, this.$http.get("/apaas/service/v3/service/manager/servarea"),
}) ]).then((response) => {
.then(({ data }) => { let data = response.map((item) => {
console.log(data); return {
}) name: item.body.data[0].type_name,
.catch((error) => { prop: item.body.data[0].type_code,
console.log(error); data: item.body.data.map((v) => ({
}); */ name: v.name,
value: v.id,
})),
};
});
this.filterList = [...data, ...this.roleFilter];
});
}, },
initHeader() { initHeader() {
let _self = this;
let level = this.level; let level = this.level;
let type = this.type; let type = this.type;
// 普通用户 --- 注册发布的服务 // 普通用户 --- 注册发布的服务
if (level == 0 && type == 0) { if (level == 0 && type == 0) {
this.listUrl = "/apaas/service/v3/service/manager/list";
this.deleteUrl = "/apaas/service/v3/service/manager";
this.listHeader = [ this.listHeader = [
{ {
label: "服务名称", label: "服务名称",
...@@ -162,12 +143,56 @@ export default { ...@@ -162,12 +143,56 @@ export default {
callback: this.editItem, callback: this.editItem,
}, },
{ {
label: "申请下架", getLabel(item) {
callback: this.applyForSoldOutItem, return item.state == 1 ? "申请下架" : "申请上架";
},
callback(item) {
item.state == 1
? _self.applyForSoldOutItem(item)
: _self.applyForSoldUpItem(item);
},
}, },
{ {
label: "删除", label: "删除",
callback: this.deleteItem, callback: this.deleteItem,
class: "warn",
disabledRule(item) {
return item.state === 1;
},
},
],
},
];
this.roleFilter = [
{
name: "开放程度",
prop: "openness",
data: [
{
name: "共享",
value: 1,
},
{
name: "受限",
value: 2,
},
{
name: "敏感",
value: 3,
},
],
},
{
name: "服务状态",
prop: "state",
data: [
{
name: "上架中",
value: 1,
},
{
name: "已下架",
value: 2,
}, },
], ],
}, },
...@@ -175,6 +200,8 @@ export default { ...@@ -175,6 +200,8 @@ export default {
} }
// 普通用户 --- 申请的服务 // 普通用户 --- 申请的服务
else if (level == 0 && type == 1) { else if (level == 0 && type == 1) {
this.listUrl = "/apaas/service/v3/service/apply/service/list";
this.deleteUrl = "/apaas/service/v3/service/apply/service";
this.listHeader = [ this.listHeader = [
{ {
label: "服务名称", label: "服务名称",
...@@ -184,31 +211,45 @@ export default { ...@@ -184,31 +211,45 @@ export default {
}, },
{ {
label: "服务领域", label: "服务领域",
prop: "date", prop: "sectors_name",
align: "center", align: "center",
}, },
{ {
label: "开放程度", label: "开放程度",
prop: "address", prop: "openness_name",
align: "center", align: "center",
}, },
{ {
label: "服务描述", label: "服务描述",
prop: "address", prop: "descript",
}, },
{ {
label: "申请时间", label: "申请时间",
prop: "address", prop: "service_apply_info",
getText(item) {
return (
(item.service_apply_info &&
item.service_apply_info.apply_time) ||
""
);
},
align: "center", align: "center",
}, },
{ {
label: "服务类型", label: "服务类型",
prop: "address", prop: "data_service_type1_name",
align: "center", align: "center",
}, },
{ {
label: "申请状态", label: "申请状态",
prop: "address", prop: "service_apply_info",
getText(item) {
return ["-", "待审批", "审批中", "审批通过", "审批未通过"][
(item.service_apply_info &&
item.service_apply_info.approval_status) ||
0
];
},
align: "center", align: "center",
}, },
{ {
...@@ -219,13 +260,59 @@ export default { ...@@ -219,13 +260,59 @@ export default {
{ {
label: "删除", label: "删除",
callback: this.deleteItem, callback: this.deleteItem,
disabledRule(item) {
return item.approval_status === 1;
},
},
],
},
];
this.roleFilter = [
{
name: "开放程度",
prop: "openness",
data: [
{
name: "共享",
value: 1,
},
{
name: "受限",
value: 2,
},
{
name: "敏感",
value: 3,
},
],
},
{
name: "申请状态",
prop: "state",
data: [
{
name: "待审批",
value: 1,
},
{
name: "审批中",
value: 2,
},
{
name: "审批通过",
value: 3,
},
{
name: "审批未通过",
value: 4,
}, },
], ],
}, },
]; ];
} }
// 普通用户 --- 云资源服务 // TODO: 普通用户 --- 云资源服务
else if (level == 0 && type == 2) { else if (level == 0 && type == 2) {
this.listUrl = "/apaas/service/v3/service/manager/list";
this.listHeader = [ this.listHeader = [
{ {
label: "工作区域", label: "工作区域",
...@@ -283,6 +370,7 @@ export default { ...@@ -283,6 +370,7 @@ export default {
// 组织管理员 --- 组织服务管理 // 组织管理员 --- 组织服务管理
else if (level == 1 && type == 0) { else if (level == 1 && type == 0) {
this.listUrl = "/apaas/service/v3/service/manager/list";
this.listHeader = [ this.listHeader = [
{ {
label: "服务名称", label: "服务名称",
...@@ -292,42 +380,84 @@ export default { ...@@ -292,42 +380,84 @@ export default {
}, },
{ {
label: "服务领域", label: "服务领域",
prop: "date", prop: "sectors_name",
align: "center", align: "center",
}, },
{ {
label: "开放程度", label: "开放程度",
prop: "date", prop: "openness_name",
align: "center", align: "center",
}, },
{ {
label: "请求方式", label: "请求方式",
prop: "date", prop: "req_type",
getText(item) {
return ["-", "GET", "POST", "PUT", "DELETE"][item.req_type || 0];
},
align: "center", align: "center",
}, },
{ {
label: "服务描述", label: "服务描述",
prop: "date", prop: "descript",
}, },
{ {
label: "注册发布时间", label: "注册发布时间",
prop: "date", prop: "create_time",
align: "center", align: "center",
}, },
{ {
label: "服务类型", label: "服务类型",
prop: "date", prop: "data_service_type1_name",
align: "center", align: "center",
}, },
{ {
label: "服务状态", label: "服务状态",
prop: "date", prop: "state",
getText(item) {
return ["已下架", "上架中"][item.state];
},
align: "center", align: "center",
}, },
]; ];
this.roleFilter = [
{
name: "开放程度",
prop: "openness",
data: [
{
name: "共享",
value: 1,
},
{
name: "受限",
value: 2,
},
{
name: "敏感",
value: 3,
},
],
},
{
name: "服务状态",
prop: "state",
data: [
{
name: "上架中",
value: 1,
},
{
name: "已下架",
value: 2,
},
],
},
];
} }
// 组织管理员 --- 服务审批管理 // 组织管理员 --- 服务审批管理
else if (level == 1 && type == 1) { else if (level == 1 && type == 1) {
this.listUrl = "/apaas/service/v3/service/approval/applied/list";
this.deleteUrl = "/apaas/service/v3/service/approval/applied";
this.listHeader = [ this.listHeader = [
{ {
label: "服务名称", label: "服务名称",
...@@ -335,36 +465,53 @@ export default { ...@@ -335,36 +465,53 @@ export default {
}, },
{ {
label: "服务领域", label: "服务领域",
prop: "date", prop: "sectors_name",
align: "center", align: "center",
}, },
{ {
label: "开放程度", label: "开放程度",
prop: "date", prop: "openness_name",
align: "center", align: "center",
}, },
{ {
label: "请求方式", label: "请求方式",
prop: "date", prop: "req_type",
getText(item) {
return ["-", "GET", "POST", "PUT", "DELETE"][item.req_type || 0];
},
align: "center", align: "center",
}, },
{ {
label: "服务描述", label: "服务描述",
prop: "date", prop: "descript",
}, },
{ {
label: "审批时间", label: "审批时间",
prop: "date", prop: "service_apply_info",
getText(item) {
return (
(item.service_apply_info &&
item.service_apply_info.approval_time) ||
""
);
},
align: "center", align: "center",
}, },
{ {
label: "服务类型", label: "服务类型",
prop: "date", prop: "data_service_type1_name",
align: "center", align: "center",
}, },
{ {
label: "审批状态", label: "审批状态",
prop: "date", prop: "service_apply_info",
getText(item) {
return ["-", "已审批", "待审批"][
(item.service_apply_info &&
item.service_apply_info.approval_status) ||
0
];
},
align: "center", align: "center",
}, },
{ {
...@@ -379,14 +526,50 @@ export default { ...@@ -379,14 +526,50 @@ export default {
}, },
{ {
label: "删除", label: "删除",
class: "warn",
callback: this.deleteItem, callback: this.deleteItem,
}, },
], ],
}, },
]; ];
this.roleFilter = [
{
name: "开放程度",
prop: "openness",
data: [
{
name: "共享",
value: 1,
},
{
name: "受限",
value: 2,
},
{
name: "敏感",
value: 3,
},
],
},
{
name: "审批状态",
prop: "state",
data: [
{
name: "已审批",
value: 1,
},
{
name: "待审批",
value: 2,
},
],
},
];
} }
// 组织管理员 --- 云资源管理 // TODO:组织管理员 --- 云资源管理
else if (level == 1 && type == 2) { else if (level == 1 && type == 2) {
this.listUrl = "/apaas/service/v3/service/manager/list";
this.listHeader = [ this.listHeader = [
{ {
label: "工作区域", label: "工作区域",
...@@ -442,8 +625,10 @@ export default { ...@@ -442,8 +625,10 @@ export default {
]; ];
} }
// 超级管理员 --- 组织服务管理 // 超级管理员 --- 平台服务管理
else if (level == 2 && type == 0) { else if (level == 2 && type == 0) {
this.listUrl = "/apaas/service/v3/service/manager/list";
this.deleteUrl = "/apaas/service/v3/service/manager";
this.listHeader = [ this.listHeader = [
{ {
label: "服务名称", label: "服务名称",
...@@ -453,31 +638,34 @@ export default { ...@@ -453,31 +638,34 @@ export default {
}, },
{ {
label: "服务领域", label: "服务领域",
prop: "date", prop: "sectors_name",
align: "center", align: "center",
}, },
{ {
label: "开放程度", label: "开放程度",
prop: "date", prop: "openness_name",
align: "center", align: "center",
}, },
{ {
label: "请求方式", label: "请求方式",
prop: "date", prop: "req_type",
getText(item) {
return ["-", "GET", "POST", "PUT", "DELETE"][item.req_type || 0];
},
align: "center", align: "center",
}, },
{ {
label: "服务描述", label: "服务描述",
prop: "date", prop: "descript",
}, },
{ {
label: "注册发布时间", label: "注册发布时间",
prop: "date", prop: "create_time",
align: "center", align: "center",
}, },
{ {
label: "服务类型", label: "服务类型",
prop: "date", prop: "data_service_type1_name",
align: "center", align: "center",
}, },
{ {
...@@ -491,19 +679,48 @@ export default { ...@@ -491,19 +679,48 @@ export default {
callback: this.editItem, callback: this.editItem,
}, },
{ {
label: "下架", getLabel(item) {
callback: this.soldOutItem, return item.state == 1 ? "下架" : "上架";
},
callback(item) {
item.state == 1
? _self.soldOutItem(item)
: _self.soldUpItem(item);
},
}, },
{ {
label: "删除", label: "删除",
class: "warn",
callback: this.deleteItem, callback: this.deleteItem,
}, },
], ],
}, },
]; ];
this.roleFilter = [
{
name: "开放程度",
prop: "openness",
data: [
{
name: "共享",
value: 1,
},
{
name: "受限",
value: 2,
},
{
name: "敏感",
value: 3,
},
],
},
];
} }
// 超级管理员 --- 服务审批管理 // 超级管理员 --- 服务审批管理
else if (level == 2 && type == 1) { else if (level == 2 && type == 1) {
this.listUrl = "/apaas/service/v3/service/approval/applied/list";
this.deleteUrl = "/apaas/service/v3/service/approval/applied";
this.listHeader = [ this.listHeader = [
{ {
label: "服务名称", label: "服务名称",
...@@ -511,36 +728,53 @@ export default { ...@@ -511,36 +728,53 @@ export default {
}, },
{ {
label: "服务领域", label: "服务领域",
prop: "date", prop: "sectors_name",
align: "center", align: "center",
}, },
{ {
label: "开放程度", label: "开放程度",
prop: "date", prop: "openness_name",
align: "center", align: "center",
}, },
{ {
label: "请求方式", label: "请求方式",
prop: "date", prop: "req_type",
getText(item) {
return ["-", "GET", "POST", "PUT", "DELETE"][item.req_type || 0];
},
align: "center", align: "center",
}, },
{ {
label: "服务描述", label: "服务描述",
prop: "date", prop: "descript",
}, },
{ {
label: "审批时间", label: "审批时间",
prop: "date", prop: "service_apply_info",
getText(item) {
return (
(item.service_apply_info &&
item.service_apply_info.approval_time) ||
""
);
},
align: "center", align: "center",
}, },
{ {
label: "服务类型", label: "服务类型",
prop: "date", prop: "data_service_type1_name",
align: "center", align: "center",
}, },
{ {
label: "审批状态", label: "审批状态",
prop: "date", prop: "service_apply_info",
getText(item) {
return ["-", "已审批", "待审批"][
(item.service_apply_info &&
item.service_apply_info.approval_status) ||
0
];
},
align: "center", align: "center",
}, },
{ {
...@@ -555,14 +789,50 @@ export default { ...@@ -555,14 +789,50 @@ export default {
}, },
{ {
label: "删除", label: "删除",
class: "warn",
callback: this.deleteItem, callback: this.deleteItem,
}, },
], ],
}, },
]; ];
this.roleFilter = [
{
name: "开放程度",
prop: "openness",
data: [
{
name: "共享",
value: 1,
},
{
name: "受限",
value: 2,
},
{
name: "敏感",
value: 3,
},
],
},
{
name: "审批状态",
prop: "state",
data: [
{
name: "已审批",
value: 1,
},
{
name: "待审批",
value: 2,
},
],
},
];
} }
// 超级管理员 --- 云资源管理 // TODO:超级管理员 --- 云资源管理
else if (level == 2 && type == 2) { else if (level == 2 && type == 2) {
this.listUrl = "/apaas/service/v3/service/manager/list";
this.listHeader = [ this.listHeader = [
{ {
label: "所属组织", label: "所属组织",
...@@ -608,22 +878,29 @@ export default { ...@@ -608,22 +878,29 @@ export default {
} }
}, },
initDatas(filter) { initDatas(filter) {
// console.log(filter); this.tempFliter = filter;
this.$http this.$http
.get("/apaas/service/v3/service/manager/list", { .get(this.listUrl, {
params: { params: {
data_service_type: 0, data_service_type:
sectors: 0, filter.service_type_1 &&
openness: 0, filter.service_type_1.map((item) => item.value).join(","), // 服务类型
state: "", sectors:
filter.service_area &&
filter.service_area.map((item) => item.value).join(","), // 服务领域
openness:
filter.openness &&
filter.openness.map((item) => item.value).join(","), // 开放程度
state:
filter.state && filter.state.map((item) => item.value).join(","), // 服务状态
keyword: filter.keyword, keyword: filter.keyword,
page: filter.page, page: filter.page,
size: filter.size, size: filter.size,
}, },
}) })
.then(({ data }) => { .then(({ data }) => {
// console.log(data); // console.log(data.data);
this.listTotal = data.data.total; this.listTotal = data.data.total;
this.listData = data.data.data; this.listData = data.data.data;
}) })
...@@ -646,7 +923,35 @@ export default { ...@@ -646,7 +923,35 @@ export default {
this.dialogInfo.cancelText = "取消"; this.dialogInfo.cancelText = "取消";
this.dialogInfo.sunbmitText = "发送通知"; this.dialogInfo.sunbmitText = "发送通知";
this.dialogInfo.submit = () => { this.dialogInfo.submit = () => {
console.log("applyForSoldOutItem - " + item.name); this.$http
.post(`/apaas/service/v3/service/manager/send/downnotice`, {
id: item.id,
})
.then((response) => {
console.log("已申请下架" + item.name);
})
.catch((error) => {
console.log(error);
});
};
this.showDialog();
},
applyForSoldUpItem(item) {
this.dialogInfo.title = "提示";
this.dialogInfo.msg = "确认申请上架此服务吗?";
this.dialogInfo.cancelText = "取消";
this.dialogInfo.sunbmitText = "发送通知";
this.dialogInfo.submit = () => {
this.$http
.post(`/apaas/service/v3/service/manager/send/upnotice`, {
id: item.id,
})
.then((response) => {
console.log("已申请上架" + item.name);
})
.catch((error) => {
console.log(error);
});
}; };
this.showDialog(); this.showDialog();
}, },
...@@ -656,7 +961,19 @@ export default { ...@@ -656,7 +961,19 @@ export default {
this.dialogInfo.cancelText = ""; this.dialogInfo.cancelText = "";
this.dialogInfo.sunbmitText = ""; this.dialogInfo.sunbmitText = "";
this.dialogInfo.submit = () => { this.dialogInfo.submit = () => {
console.log("deleteItem - " + item.name); this.$http
.delete(this.deleteUrl, {
params: {
id: item.id,
},
})
.then((response) => {
this.initDatas(this.tempFliter);
console.log("已删除" + item.name);
})
.catch((error) => {
console.log(error);
});
}; };
this.showDialog(); this.showDialog();
}, },
...@@ -677,8 +994,38 @@ export default { ...@@ -677,8 +994,38 @@ export default {
"下架此服务会导致调用该服务的<br />用户被迫暂停对服务的调用"; "下架此服务会导致调用该服务的<br />用户被迫暂停对服务的调用";
this.dialogInfo.cancelText = ""; this.dialogInfo.cancelText = "";
this.dialogInfo.sunbmitText = "确定"; this.dialogInfo.sunbmitText = "确定";
this.dialogInfo.confirmSubmit = () => { this.dialogInfo.submit = () => {
console.log("submit - " + item.name); this.$http
.post(`/apaas/service/v3/service/manager/down`, {
id: item.id,
})
.then((response) => {
this.initDatas(this.tempFliter);
console.log("已下架" + item.name);
})
.catch((error) => {
console.log(error);
});
};
this.showDialog();
},
soldUpItem(item) {
this.dialogInfo.title = "提示";
this.dialogInfo.msg = "确认上架此服务吗?";
this.dialogInfo.cancelText = "";
this.dialogInfo.sunbmitText = "确定";
this.dialogInfo.submit = () => {
this.$http
.post(`/apaas/service/v3/service/manager/up`, {
id: item.id,
})
.then((response) => {
this.initDatas(this.tempFliter);
console.log("已下架" + item.name);
})
.catch((error) => {
console.log(error);
});
}; };
this.showDialog(); this.showDialog();
}, },
...@@ -689,8 +1036,8 @@ export default { ...@@ -689,8 +1036,8 @@ export default {
created() { created() {
this.level = parseInt(this.$route.params.level); this.level = parseInt(this.$route.params.level);
this.type = parseInt(this.$route.params.type); this.type = parseInt(this.$route.params.type);
this.initFilter();
this.initHeader(); this.initHeader();
this.initFilter();
}, },
}; };
</script> </script>
......
...@@ -7,9 +7,9 @@ const store = new Vuex.Store({ ...@@ -7,9 +7,9 @@ const store = new Vuex.Store({
role: 2, // 0:普通用户,1:组织管理员,2:超级管理员 role: 2, // 0:普通用户,1:组织管理员,2:超级管理员
serviceShopMenu: "/shop/data_service_list", // 服务超市侧边栏 serviceShopMenu: "/shop/data_service_list", // 服务超市侧边栏
fwglNav: [ fwglNav: [
["注册发布的服务", "申请的服务", "云资源服务"], // 普通用户 ["注册发布的服务", "申请的服务" /* , "云资源服务" */], // 普通用户
["组织服务管理", "服务审批管理", "云资源管理"], // 组织管理员 ["组织服务管理", "服务审批管理" /* , "云资源管理" */], // 组织管理员
["平台服务管理", "服务审批管理", "云资源管理"], // 超级管理员 ["平台服务管理", "服务审批管理" /* , "云资源管理" */], // 超级管理员
], // 服务管理列表,onlyRead ], // 服务管理列表,onlyRead
yyglNav: [ yyglNav: [
["应用仓库", "我部署的应用", "申请的应用", "审批的应用"], // 普通用户 ["应用仓库", "我部署的应用", "申请的应用", "审批的应用"], // 普通用户
......
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