修改UAT问题
This commit is contained in:
+9
-7
@@ -79,13 +79,15 @@ public class ParamsManifestEOController extends JeroController<ParamsManifestEO,
|
||||
|
||||
IPage page = new Page(pageNo, pageSize);
|
||||
IPage pageList = paramsManifestEOService.pageInfo(page, paramsManifestEO);
|
||||
List<ParamsManifestEO> rows = pageList.getRecords();
|
||||
// 处理 状态 中英文
|
||||
Map<String, String> stateMap = ManifestStateEnum.toMap(cut);
|
||||
rows.forEach(manifestEO -> {
|
||||
manifestEO.setProjectName(paramsManifestEOService.getProjectById(manifestEO.getProjectId(), manifestEO.getProjectVersion(),paramsManifestEO.getCut()).getProjectName());
|
||||
manifestEO.setState(stateMap.get(manifestEO.getState()));
|
||||
});
|
||||
// List<ParamsManifestEO> rows = pageList.getRecords();
|
||||
// // 处理 状态 中英文
|
||||
// Map<String, String> stateMap = ManifestStateEnum.toMap(cut);
|
||||
// rows.forEach(manifestEO -> {
|
||||
// manifestEO.setProjectName(paramsManifestEOService.getProjectById(manifestEO.getProjectId(), manifestEO.getProjectVersion(),paramsManifestEO.getCut()).getProjectName());
|
||||
// manifestEO.setState(stateMap.get(manifestEO.getState()));
|
||||
// });
|
||||
|
||||
pageList.setRecords(paramsManifestEOService.queryList(paramsManifestEO));
|
||||
return Result.OK(cut, pageList);
|
||||
}
|
||||
|
||||
|
||||
+4
@@ -128,4 +128,8 @@ public class ParamsManifestEO implements Serializable {
|
||||
|
||||
// 参数项清单的参考列配置id(对应上报库参数配置表(params_report_config)中的id)
|
||||
private String referencesColId;
|
||||
|
||||
//是否为历史记录数据(0:不是;1:是)
|
||||
@TableField(exist = false)
|
||||
private String isHistory;
|
||||
}
|
||||
|
||||
+5
@@ -21,6 +21,11 @@ import java.util.Map;
|
||||
*/
|
||||
public interface IParamsManifestEOService extends IService<ParamsManifestEO> {
|
||||
|
||||
/**
|
||||
* 查询列表
|
||||
*/
|
||||
List<ParamsManifestEO> queryList(ParamsManifestEO paramsManifestEO);
|
||||
|
||||
/**
|
||||
* 保存
|
||||
*
|
||||
|
||||
+2
@@ -18,5 +18,7 @@ public interface IParamsManifestHistoryEOService extends IService<ParamsManifest
|
||||
|
||||
List<ParamsManifestHistoryVO> getHistoryVersionList(String paramsManifestId);
|
||||
|
||||
List<ParamsManifestHistoryEO> getHistoryList(String paramsManifestId);
|
||||
|
||||
void deleteAllHistoryVersion(List<String> paramsManifestIdList);
|
||||
}
|
||||
|
||||
+1
-1
@@ -1509,7 +1509,7 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl<ParamsCollec
|
||||
map.put("db_field_name", LineHumpUtil.lineToHump(dbFieldName));
|
||||
String[] references = projectName.split("-");
|
||||
// map.put("db_field_txt", references[0] + "-" + references[1] + "-" + paramsManifestEO.getReferencesColName() + " " + onlCgformField.getDbFieldTxt());//字段中文名
|
||||
map.put("db_field_txt", projectName + "-" + paramsManifestEO.getReferencesColName() + " " + onlCgformField.getDbFieldTxt());//字段中文名
|
||||
map.put("db_field_txt", paramsManifestEO.getReferencesColName() + " " + onlCgformField.getDbFieldTxt());//字段中文名
|
||||
map.put("db_field_id", paramsManifestEO.getReferencesColId());
|
||||
map.put("references_col", true);
|
||||
} else {
|
||||
|
||||
+24
-4
@@ -12,10 +12,7 @@ import com.jero.common.api.vo.Result;
|
||||
import com.jero.common.constant.enums.CutEnum;
|
||||
import com.jero.common.exception.JeroBootException;
|
||||
import com.jero.common.system.vo.DictModel;
|
||||
import com.jero.modules.cert.collect.entity.ParamsCollectManifestEO;
|
||||
import com.jero.modules.cert.collect.entity.ParamsConfigDataEO;
|
||||
import com.jero.modules.cert.collect.entity.ParamsConfigEO;
|
||||
import com.jero.modules.cert.collect.entity.ParamsManifestEO;
|
||||
import com.jero.modules.cert.collect.entity.*;
|
||||
import com.jero.modules.cert.collect.enums.CollectManifestChangeFlagEnum;
|
||||
import com.jero.modules.cert.collect.enums.CollectManifestStateEnum;
|
||||
import com.jero.modules.cert.collect.enums.ManifestStateEnum;
|
||||
@@ -127,6 +124,29 @@ public class ParamsManifestEOServiceImpl extends ServiceImpl<ParamsManifestEOMap
|
||||
@Autowired
|
||||
private ISysDictItemService sysDictItemService;
|
||||
|
||||
@Override
|
||||
public List<ParamsManifestEO> queryList(ParamsManifestEO paramsManifestEO) {
|
||||
List<ParamsManifestEO> resList = new ArrayList<>();
|
||||
LambdaQueryWrapper<ParamsManifestEO> queryWrapper = new LambdaQueryWrapper<>();
|
||||
if(StringUtils.isNotEmpty(paramsManifestEO.getTitle())){
|
||||
queryWrapper.eq(ParamsManifestEO::getTitle, paramsManifestEO.getTitle());
|
||||
}
|
||||
queryWrapper.eq(ParamsManifestEO::getProjectId, paramsManifestEO.getProjectId());
|
||||
List<ParamsManifestEO> paramsManifestEOList = list(queryWrapper);
|
||||
resList.addAll(paramsManifestEOList);
|
||||
for (ParamsManifestEO pm : paramsManifestEOList) {
|
||||
pm.setIsHistory("0");
|
||||
List<ParamsManifestHistoryEO> hisList = paramsManifestHistoryEOService.getHistoryList(pm.getId());
|
||||
if(CollectionUtils.isNotEmpty(hisList)){
|
||||
for (ParamsManifestHistoryEO his : hisList) {
|
||||
his.setIsHistory("1");
|
||||
resList.add(his);
|
||||
}
|
||||
}
|
||||
}
|
||||
return resList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存
|
||||
*
|
||||
|
||||
+10
@@ -133,6 +133,16 @@ public class ParamsManifestHistoryEOServiceImpl extends ServiceImpl<ParamsManife
|
||||
paramsManifestHistoryEOService.save(paramsManifestHistoryEO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ParamsManifestHistoryEO> getHistoryList(String paramsManifestId) {
|
||||
// 历史版本和当前版本通过id进行关联
|
||||
LambdaQueryWrapper<ParamsManifestHistoryEO> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(ParamsManifestHistoryEO::getSourceParamsManifestId, paramsManifestId)
|
||||
.orderByAsc(ParamsManifestHistoryEO::getVersion);
|
||||
List<ParamsManifestHistoryEO> list = list(queryWrapper);
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ParamsManifestHistoryVO> getHistoryVersionList(String paramsManifestId) {
|
||||
// 历史版本和当前版本通过id进行关联
|
||||
|
||||
@@ -786,7 +786,7 @@ module.exports = {
|
||||
modifyprojectInterfacePerson: 'Modify Project Interface Person',
|
||||
operatethisbutton: 'You do not have permission to operate this button',
|
||||
ParameterLibrary: 'Parameter Library',
|
||||
referenceparameter: 'Copy Parameter',
|
||||
referenceparameter: 'Reference parameter',
|
||||
tempSave: 'Save',
|
||||
Assignedby: 'Assign',
|
||||
CompulsoryWithdrawal: 'Revoke',
|
||||
@@ -1386,8 +1386,8 @@ module.exports = {
|
||||
contactTheFounder:'Contact author',
|
||||
certificationCategoryNumber: 'certification Category Number',
|
||||
historicalrecord:'Revision History',
|
||||
Referenceparametercolumn:'Reference Parameter Column',
|
||||
Updateparametercolumn:'Update The Parameter Column',
|
||||
Referenceparametercolumn:'Set reference parameter',
|
||||
Updateparametercolumn:'Update reference parameter',
|
||||
columnfirst:'Reference the parameter column first',
|
||||
columnforced:'Confirm a forced retraction?',
|
||||
customize:'List Setting',
|
||||
|
||||
@@ -804,7 +804,7 @@ module.exports = {
|
||||
modifyprojectInterfacePerson: '修改工程接口人',
|
||||
operatethisbutton: '没有权限操作此按钮',
|
||||
ParameterLibrary: '参数库',
|
||||
referenceparameter: '复制参数',
|
||||
referenceparameter: '引用参数',
|
||||
tempSave: '暂存',
|
||||
Assignedby: '分配填写人',
|
||||
CompulsoryWithdrawal: '强制撤回',
|
||||
@@ -1484,8 +1484,8 @@ module.exports = {
|
||||
CuiBan: '催办',
|
||||
certificationCategoryNumber: '认证类别编号',
|
||||
historicalrecord: '历史记录',
|
||||
Referenceparametercolumn: '引用参数列',
|
||||
Updateparametercolumn: '更新参数列',
|
||||
Referenceparametercolumn: '设置参考列',
|
||||
Updateparametercolumn: '更新参考列',
|
||||
columnfirst: '请先引用参数列',
|
||||
columnforced: '确认强制撤回?',
|
||||
brand: '品牌',
|
||||
@@ -2711,7 +2711,7 @@ module.exports = {
|
||||
modifyprojectInterfacePerson: '修改工程接口人',
|
||||
operatethisbutton: '没有权限操作此按钮',
|
||||
ParameterLibrary: '参数库',
|
||||
referenceparameter: '复制参数',
|
||||
referenceparameter: '引用参数',
|
||||
tempSave: '暂存',
|
||||
Assignedby: '分配填写人',
|
||||
CompulsoryWithdrawal: '强制撤回',
|
||||
@@ -3389,8 +3389,8 @@ module.exports = {
|
||||
CuiBan: '催办',
|
||||
certificationCategoryNumber: '认证类别编号',
|
||||
historicalrecord: '历史记录',
|
||||
Referenceparametercolumn: '引用参数列',
|
||||
Updateparametercolumn: '更新参数列',
|
||||
Referenceparametercolumn: '设置参考列',
|
||||
Updateparametercolumn: '更新参考列',
|
||||
columnfirst: '请先引用参数列',
|
||||
columnforced: '确认强制撤回?',
|
||||
brand: '品牌',
|
||||
|
||||
@@ -69,6 +69,9 @@
|
||||
{{ text && text.length > 50 ? text.slice(0, 49) + '...' : text }}
|
||||
</span>
|
||||
<span slot="operation" slot-scope="text,record">
|
||||
<a class="text-operation"
|
||||
v-has="'params:template:edit'"
|
||||
@click="withdrawOrRelease(record)">{{record.status && record.status == '1'? $t('withdraw') : $t('release')}}</a>
|
||||
<a class="text-operation" v-has="'params:template:edit'" @click="edit(record)">{{$t('edit')}}</a>
|
||||
<a class="text-operation" v-has="'params:template:delete'" @click="deleteLib(record)">{{$t('deleteLib')}}</a>
|
||||
</span>
|
||||
@@ -193,6 +196,13 @@ export default {
|
||||
// ellipsis: true,
|
||||
// dataIndex: 'region_dictText',
|
||||
// },
|
||||
{
|
||||
title: this.$t('VersionNumber'),
|
||||
align: 'left',
|
||||
width: 120,
|
||||
ellipsis: true,
|
||||
dataIndex: 'version'
|
||||
},
|
||||
{
|
||||
title: this.$t('creater'),
|
||||
align: 'left',
|
||||
@@ -282,6 +292,34 @@ export default {
|
||||
this.visible = false;
|
||||
this.$refs['ruleForm'].resetFields()
|
||||
},
|
||||
withdrawOrRelease(item){
|
||||
let _this = this
|
||||
this.$confirm({
|
||||
content: item.status && item.status == '1' ? _this.$t('confirmWithdraw') : _this.$t('confirmRelease'),
|
||||
onOk() {
|
||||
if (item.status && item.status == '1'){
|
||||
getAction('params/paramsInfo/withdraw', { paramsTemplateId: item.id }).then((res) => {
|
||||
if (res.success) {
|
||||
_this.$message.success(res.result)
|
||||
_this.getList()
|
||||
} else {
|
||||
_this.$message.warning(res.message)
|
||||
}
|
||||
})
|
||||
}else{
|
||||
getAction('params/paramsInfo/publish', { paramsTemplateId: item.id }).then((res) => {
|
||||
if (res.success) {
|
||||
_this.$message.success(res.result)
|
||||
_this.getList()
|
||||
} else {
|
||||
_this.$message.warning(res.message)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
},
|
||||
//批量删除
|
||||
handleDel() {
|
||||
let param={
|
||||
|
||||
@@ -57,10 +57,10 @@
|
||||
<div class="operator-text" v-has="'params:paramsInfo:import'">
|
||||
<ImportFileOnlyList :url="url" :isTrue="false" :accept="'.zip'" :paramsTemplateId='this.$route.query.id' @getList='getList'/>
|
||||
</div>
|
||||
<div @click="releaseVersion" class="operator-text" v-has="'params:paramsInfo:publish'">
|
||||
<a-icon type="rocket"/>
|
||||
{{$t('releaseVersion')}}
|
||||
</div>
|
||||
<!-- <div @click="releaseVersion" class="operator-text" v-has="'params:paramsInfo:publish'">-->
|
||||
<!-- <a-icon type="rocket"/>-->
|
||||
<!-- {{$t('releaseVersion')}}-->
|
||||
<!-- </div>-->
|
||||
<div @click="handleDel" class="operator-text" v-has="'params:paramsInfo:deleteBatch'">
|
||||
<a-icon type="delete"/>
|
||||
{{$t('BatchDelete')}}
|
||||
|
||||
@@ -64,26 +64,31 @@
|
||||
</span>
|
||||
</span>
|
||||
<span slot="operation" slot-scope="text,record">
|
||||
<a class="text-operation" @click="configure(record)" v-has="'params:config:list'">{{$t('configure')}}</a>
|
||||
<a class="text-operation" @click="edit(record)" v-has="'params:manifest:edit'">{{$t('edit')}}</a>
|
||||
<a class="text-operation" @click="configure(record)"
|
||||
:disabled="record.isHistory == '1' ? true : false"
|
||||
v-has="'params:config:list'">{{$t('configure')}}</a>
|
||||
<a class="text-operation" @click="edit(record)"
|
||||
:disabled="record.isHistory == '1' ? true : false"
|
||||
v-has="'params:manifest:edit'">{{$t('edit')}}</a>
|
||||
<a class="text-operation" @click="deleteLib(record)"
|
||||
:disabled="record.isHistory == '1' ? true : false"
|
||||
v-has="'params:manifest:delete'">{{$t('deleteLib')}}</a>
|
||||
<a class="text-operation" @click="historicalVersion(record)" v-has="'params:manifest:history'">{{$t('historicalVersion')}}</a>
|
||||
<!-- <a class="text-operation" @click="historicalVersion(record)" v-has="'params:manifest:history'">{{$t('historicalVersion')}}</a>-->
|
||||
</span>
|
||||
</a-table>
|
||||
</div>
|
||||
<div class="page">
|
||||
<a-pagination
|
||||
:show-total="total => $t('total')+` ${total} `+$t('strip')"
|
||||
show-quick-jumper
|
||||
show-size-changer
|
||||
:page-size.sync="pageSize"
|
||||
:total="total"
|
||||
:current="pageNo"
|
||||
@change="pageOnChange"
|
||||
@showSizeChange="SizeChange"
|
||||
/>
|
||||
</div>
|
||||
<!-- <div class="page">-->
|
||||
<!-- <a-pagination-->
|
||||
<!-- :show-total="total => $t('total')+` ${total} `+$t('strip')"-->
|
||||
<!-- show-quick-jumper-->
|
||||
<!-- show-size-changer-->
|
||||
<!-- :page-size.sync="pageSize"-->
|
||||
<!-- :total="total"-->
|
||||
<!-- :current="pageNo"-->
|
||||
<!-- @change="pageOnChange"-->
|
||||
<!-- @showSizeChange="SizeChange"-->
|
||||
<!-- />-->
|
||||
<!-- </div>-->
|
||||
<!-- 参数模板-->
|
||||
<a-drawer
|
||||
:visible="areaVisible"
|
||||
@@ -220,7 +225,7 @@
|
||||
title: this.$t('operation'),
|
||||
align: 'left',
|
||||
fixed: 'right',
|
||||
width: 210,
|
||||
width: localStorage.getItem('language') == 'zh-cn' ? 170:210,
|
||||
scopedSlots: { customRender: 'operation' }
|
||||
}
|
||||
],
|
||||
@@ -289,19 +294,31 @@
|
||||
paramsManifestClick(item) {
|
||||
let _this = this
|
||||
// 先调取接口判断是否有配置信息
|
||||
getAction(this.url.verifyConfig, { paramsManifestId: item.id }).then((res) => {
|
||||
if (res.result) {
|
||||
// localStorage.setItem('paramsManifest', JSON.stringify(item))
|
||||
let newUrl = _this.$router.resolve({
|
||||
path: '/ParameterItemCollection',
|
||||
query: item
|
||||
// projectName:this.$route.query.projectName
|
||||
})
|
||||
window.open(newUrl.href, '_blank')
|
||||
} else {
|
||||
_this.$message.warning(_this.$t('NoConfigurationNotStart'))
|
||||
}
|
||||
})
|
||||
if (item.isHistory == '1'){
|
||||
let newUrl = _this.$router.resolve({
|
||||
path: '/ParameterItemCollection',
|
||||
query: {it: item.id,
|
||||
...item
|
||||
}
|
||||
// projectName:this.$route.query.projectName
|
||||
})
|
||||
window.open(newUrl.href, '_blank')
|
||||
}else{
|
||||
getAction(this.url.verifyConfig, { paramsManifestId: item.id }).then((res) => {
|
||||
if (res.result) {
|
||||
// localStorage.setItem('paramsManifest', JSON.stringify(item))
|
||||
item.projectName = this.$route.query.projectName
|
||||
let newUrl = _this.$router.resolve({
|
||||
path: '/ParameterItemCollection',
|
||||
query: item
|
||||
// projectName:this.$route.query.projectName
|
||||
})
|
||||
window.open(newUrl.href, '_blank')
|
||||
} else {
|
||||
_this.$message.warning(_this.$t('NoConfigurationNotStart'))
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
deleteLib(val) {
|
||||
if (val.state === '已完成' || val.state === 'Finished' || val.state === '未收集' || val.state === 'Uncollected') {
|
||||
@@ -456,8 +473,8 @@
|
||||
this.selectedRowKeys = []
|
||||
let query = {
|
||||
projectId: this.$route.query.parentId ? this.$route.query.parentId : this.$route.query.id,
|
||||
pageSize: this.pageSize,
|
||||
pageNo: this.pageNo,
|
||||
// pageSize: this.pageSize,
|
||||
// pageNo: this.pageNo,
|
||||
orderBy: this.orderBy,
|
||||
orderByField: this.orderByField,
|
||||
...this.queryParam
|
||||
|
||||
@@ -21,6 +21,29 @@
|
||||
</div>
|
||||
</a-col>
|
||||
<template v-if="toggleSearchStatus">
|
||||
<a-col :md="12" :sm="8">
|
||||
<div class="box-title-text-search">
|
||||
<div class="title-text-search" :title="$t('statisticalNodes')">
|
||||
<span>{{$t('statisticalNodes')}}</span>
|
||||
</div>
|
||||
<a-select :placeholder="$t('PleaseSelect')+$t('statisticalNodes')"
|
||||
allowClear
|
||||
show-search
|
||||
class="box-input-search"
|
||||
optionFilterProp="label"
|
||||
:getPopupContainer="triggerNode=> triggerNode.parentNode"
|
||||
v-model="queryParam.firstLevelDutyTerritory">
|
||||
<a-select-option v-for="(item, key) in firstLevelDutyTerritoryList"
|
||||
:key="key"
|
||||
:label="item.key"
|
||||
:value="item.key">
|
||||
<span style="display: inline-block;width: 100%" :title=" item.key ">
|
||||
{{ item.key }}
|
||||
</span>
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</div>
|
||||
</a-col>
|
||||
<a-col :md="12" :sm="8">
|
||||
<div class="box-title-text-search">
|
||||
<div class="title-text-search" :title="$t('engineeringInterfacePerson')">
|
||||
@@ -47,24 +70,24 @@
|
||||
v-model="queryParam.lawEngineerName"/>
|
||||
</div>
|
||||
</a-col>
|
||||
<a-col :md="12" :sm="8">
|
||||
<div class="box-title-text-search">
|
||||
<div class="title-text-search" :title="$t('certifiedEngineer')">
|
||||
<span>{{$t('certifiedEngineer')}}</span>
|
||||
</div>
|
||||
<a-select class="box-input-search"
|
||||
v-model="queryParam.certificationEngineer"
|
||||
:placeholder="$t('PleaseSelect')+$t('certifiedEngineer')">
|
||||
<a-select-option v-for="(item, key) in dictOptionsValue"
|
||||
:key="item.certificationEngineer"
|
||||
:value="item.certificationEngineer">
|
||||
<span class="itemOption" :title=" item.certificationEngineerName ">
|
||||
{{ item.certificationEngineerName }}
|
||||
</span>
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</div>
|
||||
</a-col>
|
||||
<!-- <a-col :md="12" :sm="8">-->
|
||||
<!-- <div class="box-title-text-search">-->
|
||||
<!-- <div class="title-text-search" :title="$t('certifiedEngineer')">-->
|
||||
<!-- <span>{{$t('certifiedEngineer')}}</span>-->
|
||||
<!-- </div>-->
|
||||
<!-- <a-select class="box-input-search"-->
|
||||
<!-- v-model="queryParam.certificationEngineer"-->
|
||||
<!-- :placeholder="$t('PleaseSelect')+$t('certifiedEngineer')">-->
|
||||
<!-- <a-select-option v-for="(item, key) in dictOptionsValue"-->
|
||||
<!-- :key="item.certificationEngineer"-->
|
||||
<!-- :value="item.certificationEngineer">-->
|
||||
<!-- <span class="itemOption" :title=" item.certificationEngineerName ">-->
|
||||
<!-- {{ item.certificationEngineerName }}-->
|
||||
<!-- </span>-->
|
||||
<!-- </a-select-option>-->
|
||||
<!-- </a-select>-->
|
||||
<!-- </div>-->
|
||||
<!-- </a-col>-->
|
||||
</template>
|
||||
<span style="float: right;overflow: hidden;margin-right: 11px;margin-bottom: 20px"
|
||||
class="table-page-search-submitButtons">
|
||||
@@ -338,6 +361,7 @@
|
||||
data() {
|
||||
return {
|
||||
toggleSearchStatus: false,
|
||||
firstLevelDutyTerritoryList:[],
|
||||
visible: false,
|
||||
queryParam: {},
|
||||
selectVisible: false,
|
||||
@@ -547,6 +571,15 @@
|
||||
},
|
||||
methods: {
|
||||
...mapGetters(['userInfo']),
|
||||
getFirstLevelDutyTerritory() {
|
||||
getAction('/sys/dictItem/getFirstLevelDutyTerritory', {}).then((res) => {
|
||||
if (res.success) {
|
||||
this.firstLevelDutyTerritoryList = res.result
|
||||
} else {
|
||||
this.firstLevelDutyTerritoryList = []
|
||||
}
|
||||
})
|
||||
},
|
||||
handleToggleSearch() {
|
||||
this.toggleSearchStatus = !this.toggleSearchStatus
|
||||
},
|
||||
@@ -684,6 +717,7 @@
|
||||
}
|
||||
})
|
||||
}
|
||||
this.getFirstLevelDutyTerritory()
|
||||
this.getList()
|
||||
this.queryCertificationEngineer()
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user