Merge branch 'dev_2nd_LCYH' of http://git.hzwlsoft.com/laws-nio/laws-weilai into dev_2nd_LCYH
This commit is contained in:
@@ -437,3 +437,15 @@ ALTER TABLE `project_task_planning`
|
|||||||
-- 项目库-认证清单-认证目录 说明字段长度修改 2023-3-30 未同步生产环境
|
-- 项目库-认证清单-认证目录 说明字段长度修改 2023-3-30 未同步生产环境
|
||||||
ALTER TABLE `project_certification_directory`
|
ALTER TABLE `project_certification_directory`
|
||||||
MODIFY COLUMN `explain_info` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '说明' AFTER `detection_report_location`;
|
MODIFY COLUMN `explain_info` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '说明' AFTER `detection_report_location`;
|
||||||
|
|
||||||
|
-- 项目库-法规清单-定版表增加字段 2023-3-30 未同步生产环境
|
||||||
|
ALTER TABLE `project_version_info`
|
||||||
|
MODIFY COLUMN `inventory_affirm_status` varchar(100) CHARACTER SET utf32 NULL DEFAULT NULL COMMENT '清单确认状态' AFTER `task_affirm_status`,
|
||||||
|
ADD COLUMN `design_flow_status` varchar(255) NULL COMMENT '设计符合性确认-流程状态' AFTER `inventory_affirm_status`,
|
||||||
|
ADD COLUMN `verify_flow_status` varchar(255) NULL COMMENT '验证符合性确认-流程状态' AFTER `design_flow_status`;
|
||||||
|
|
||||||
|
-- 项目库-法规清单-定版表增加字段 2023-3-30 未同步生产环境
|
||||||
|
ALTER TABLE `project_version_info`
|
||||||
|
ADD COLUMN `project_laws_inventory_id` varchar(255) NULL COMMENT '法规清单数据id' AFTER `verify_flow_status`;
|
||||||
|
ALTER TABLE `project_version_info`
|
||||||
|
ADD COLUMN `applicable_supplement` varchar(255) NULL COMMENT '适用增补件' AFTER `project_laws_inventory_id`;
|
||||||
+2
-2
@@ -444,9 +444,9 @@ public class AuthDummyInventoryInfoEOServiceImpl extends ServiceImpl<AuthDummyIn
|
|||||||
//文件
|
//文件
|
||||||
String excelName = "";
|
String excelName = "";
|
||||||
if(CutEnum.CN.getValue().equals(authDummyInventoryInfoEO.getCut())){
|
if(CutEnum.CN.getValue().equals(authDummyInventoryInfoEO.getCut())){
|
||||||
excelName = baseList.get(0).getName() + " 虚拟认证清单.xlsx";
|
excelName = baseList.get(0).getName() + " 市场认证清单.xlsx";
|
||||||
}else{
|
}else{
|
||||||
excelName = baseList.get(0).getName() + " Virtual Authentication list.xlsx";
|
excelName = baseList.get(0).getName() + " Market Certification List.xlsx";
|
||||||
}
|
}
|
||||||
//excel
|
//excel
|
||||||
OutputStream excelOS = new FileOutputStream(path + File.separator + excelName);
|
OutputStream excelOS = new FileOutputStream(path + File.separator + excelName);
|
||||||
|
|||||||
+30
-2
@@ -271,7 +271,7 @@ public class ProjectVersionInfoEO implements Serializable {
|
|||||||
|
|
||||||
/**设计符合性确认-责任人名称*/
|
/**设计符合性确认-责任人名称*/
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
private String designDutyName;
|
private String designDutyIdName;
|
||||||
|
|
||||||
|
|
||||||
/**prehomo确认-发起人名称*/
|
/**prehomo确认-发起人名称*/
|
||||||
@@ -288,7 +288,7 @@ public class ProjectVersionInfoEO implements Serializable {
|
|||||||
|
|
||||||
/**验证符合性确认-责任人名称*/
|
/**验证符合性确认-责任人名称*/
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
private String verifyDutyName;
|
private String verifyDutyIdName;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -329,4 +329,32 @@ public class ProjectVersionInfoEO implements Serializable {
|
|||||||
private String verifyDeliverableTemplateName;
|
private String verifyDeliverableTemplateName;
|
||||||
|
|
||||||
|
|
||||||
|
/**设计符合性确认-流程状态*/
|
||||||
|
@ApiModelProperty(value = "设计符合性确认-流程状态")
|
||||||
|
private String designFlowStatus;
|
||||||
|
@TableField(exist = false)
|
||||||
|
@Excel(name = "流程状态", width = 20,groupName = "设计符合性确认")
|
||||||
|
private String designFlowStatusName;
|
||||||
|
|
||||||
|
/**验证符合性确认-流程状态*/
|
||||||
|
@ApiModelProperty(value = "验证符合性确认-流程状态")
|
||||||
|
private String verifyFlowStatus;
|
||||||
|
@TableField(exist = false)
|
||||||
|
@Excel(name = "流程状态", width = 20,groupName = "验证符合性确认")
|
||||||
|
private String verifyFlowStatusName;
|
||||||
|
|
||||||
|
/**验证符合性确认-流程实例id*/
|
||||||
|
@TableField(exist = false)
|
||||||
|
private String verifyPId;
|
||||||
|
|
||||||
|
/**设计符合性确认-流程实例id*/
|
||||||
|
@TableField(exist = false)
|
||||||
|
private String designPId;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "法规清单数据id")
|
||||||
|
private String projectLawsInventoryId;
|
||||||
|
|
||||||
|
/**适用增补件*/
|
||||||
|
@ApiModelProperty(value = "适用增补件")
|
||||||
|
private java.lang.String applicableSupplement;
|
||||||
}
|
}
|
||||||
|
|||||||
+3
@@ -183,6 +183,7 @@ public class ProjectCertificationInventoryEOServiceImpl extends ServiceImpl<Proj
|
|||||||
public void editById(ProjectCertificationInventoryEO projectCertificationInventoryEO) {
|
public void editById(ProjectCertificationInventoryEO projectCertificationInventoryEO) {
|
||||||
List<String> flowStatusList = new ArrayList<>();
|
List<String> flowStatusList = new ArrayList<>();
|
||||||
flowStatusList.add(CertificationInventoryFlowStatusEnum.TASK_TO_BE_CONFIRMED.getValue());
|
flowStatusList.add(CertificationInventoryFlowStatusEnum.TASK_TO_BE_CONFIRMED.getValue());
|
||||||
|
flowStatusList.add(CertificationInventoryFlowStatusEnum.RESULTS_TO_BE_SUBMITTED.getValue());
|
||||||
|
|
||||||
QueryWrapper<ProjectCertificationInventoryEO> certificationQueryWrap = new QueryWrapper<>();
|
QueryWrapper<ProjectCertificationInventoryEO> certificationQueryWrap = new QueryWrapper<>();
|
||||||
certificationQueryWrap.lambda().eq(ProjectCertificationInventoryEO::getId,projectCertificationInventoryEO.getId());
|
certificationQueryWrap.lambda().eq(ProjectCertificationInventoryEO::getId,projectCertificationInventoryEO.getId());
|
||||||
@@ -205,6 +206,8 @@ public class ProjectCertificationInventoryEOServiceImpl extends ServiceImpl<Proj
|
|||||||
List<String> userIdList = Arrays.asList(projectLibraryBase.getCertificationEngineer().split(","));
|
List<String> userIdList = Arrays.asList(projectLibraryBase.getCertificationEngineer().split(","));
|
||||||
List<SysUser> userInfoList = this.sysUserService.querySysUserListByIdList(userIdList);
|
List<SysUser> userInfoList = this.sysUserService.querySysUserListByIdList(userIdList);
|
||||||
|
|
||||||
|
editEndTimeCertificationInventoryEOS.get(0).setEndTime(projectCertificationInventoryEO.getEndTime());
|
||||||
|
|
||||||
this.sendMessageByTemplateId(
|
this.sendMessageByTemplateId(
|
||||||
editEndTimeCertificationInventoryEOS,
|
editEndTimeCertificationInventoryEOS,
|
||||||
TemplateInfoEnum2.CERTIFICATION_MESSAGE14.getValue(),
|
TemplateInfoEnum2.CERTIFICATION_MESSAGE14.getValue(),
|
||||||
|
|||||||
+1
@@ -56,6 +56,7 @@ public class ProjectHistoryVersionsEOServiceImpl extends ServiceImpl<ProjectHist
|
|||||||
BeanUtils.copyProperties(projectLawsInventoryEO, projectVersionInfoEO);
|
BeanUtils.copyProperties(projectLawsInventoryEO, projectVersionInfoEO);
|
||||||
projectVersionInfoEO.setId(UUID.randomUUID().toString().replace("-", ""));
|
projectVersionInfoEO.setId(UUID.randomUUID().toString().replace("-", ""));
|
||||||
projectVersionInfoEO.setHistoryVersionsId(projectHistoryVersionsEO.getId());
|
projectVersionInfoEO.setHistoryVersionsId(projectHistoryVersionsEO.getId());
|
||||||
|
projectVersionInfoEO.setProjectLawsInventoryId(projectLawsInventoryEO.getId());
|
||||||
projectVersionInfoEOS.add(projectVersionInfoEO);
|
projectVersionInfoEOS.add(projectVersionInfoEO);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+40
-2
@@ -7,6 +7,7 @@ import com.jero.common.system.query.QueryGenerator;
|
|||||||
import com.jero.modules.oss.entity.OSSFile;
|
import com.jero.modules.oss.entity.OSSFile;
|
||||||
import com.jero.modules.oss.service.IOSSFileService;
|
import com.jero.modules.oss.service.IOSSFileService;
|
||||||
import com.jero.modules.project.entity.ProjectVersionInfoEO;
|
import com.jero.modules.project.entity.ProjectVersionInfoEO;
|
||||||
|
import com.jero.modules.project.enums.ComplianceFlowStatusEnum;
|
||||||
import com.jero.modules.project.enums.InventoryAffirmStatusEnum;
|
import com.jero.modules.project.enums.InventoryAffirmStatusEnum;
|
||||||
import com.jero.modules.project.mapper.ProjectVersionInfoEOMapper;
|
import com.jero.modules.project.mapper.ProjectVersionInfoEOMapper;
|
||||||
import com.jero.modules.project.service.IProjectVersionInfoEOService;
|
import com.jero.modules.project.service.IProjectVersionInfoEOService;
|
||||||
@@ -14,6 +15,9 @@ import com.jero.modules.system.entity.SysCategory;
|
|||||||
import com.jero.modules.system.entity.SysUser;
|
import com.jero.modules.system.entity.SysUser;
|
||||||
import com.jero.modules.system.mapper.SysUserMapper;
|
import com.jero.modules.system.mapper.SysUserMapper;
|
||||||
import com.jero.modules.system.service.impl.SysCategoryServiceImpl;
|
import com.jero.modules.system.service.impl.SysCategoryServiceImpl;
|
||||||
|
import com.jero.modules.todoCenter.entity.ProcessInfoDetailEO;
|
||||||
|
import com.jero.modules.todoCenter.service.IProcessInfoDetailEOService;
|
||||||
|
import com.jero.modules.wkflow.enums.FlowTypeEnum;
|
||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@@ -39,6 +43,9 @@ public class ProjectVersionInfoEOServiceImpl extends ServiceImpl<ProjectVersionI
|
|||||||
private SysCategoryServiceImpl sysCategoryService;
|
private SysCategoryServiceImpl sysCategoryService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private SysUserMapper sysUserMapper;
|
private SysUserMapper sysUserMapper;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IProcessInfoDetailEOService processInfoDetailEOService;
|
||||||
/**
|
/**
|
||||||
* 保存
|
* 保存
|
||||||
*
|
*
|
||||||
@@ -208,6 +215,37 @@ public class ProjectVersionInfoEOServiceImpl extends ServiceImpl<ProjectVersionI
|
|||||||
deliverableList.addAll(Arrays.asList(projectVersionInfoEO.getVerifyDeliverableTemplate().split(",")));
|
deliverableList.addAll(Arrays.asList(projectVersionInfoEO.getVerifyDeliverableTemplate().split(",")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 处理符合性流程状态。
|
||||||
|
if(StringUtils.isNotEmpty(projectVersionInfoEO.getDesignFlowStatus())){
|
||||||
|
String designFlowStatusName = ComplianceFlowStatusEnum.getTextByValue(projectVersionInfoEO.getDesignFlowStatus(), cut);
|
||||||
|
projectVersionInfoEO.setDesignFlowStatusName(designFlowStatusName);
|
||||||
|
}
|
||||||
|
if(StringUtils.isNotEmpty(projectVersionInfoEO.getVerifyFlowStatus())){
|
||||||
|
String verifyFlowStatusName = ComplianceFlowStatusEnum.getTextByValue(projectVersionInfoEO.getVerifyFlowStatus(), cut);
|
||||||
|
projectVersionInfoEO.setVerifyFlowStatusName(verifyFlowStatusName);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 返回符合性流程的流程实例id
|
||||||
|
if(!StringUtils.equals(projectVersionInfoEO.getVerifyFlowStatus(),ComplianceFlowStatusEnum.LIST_TO_BE_RELEASED.getValue())
|
||||||
|
||!StringUtils.equals(projectVersionInfoEO.getVerifyFlowStatus(),ComplianceFlowStatusEnum.LIST_TO_BE_CHECKED.getValue())){
|
||||||
|
QueryWrapper<ProcessInfoDetailEO> processInfoDetailEOQueryWrapper = new QueryWrapper<>();
|
||||||
|
processInfoDetailEOQueryWrapper.lambda().eq(ProcessInfoDetailEO::getProjectLawsInventoryId,projectVersionInfoEO.getProjectLawsInventoryId());
|
||||||
|
processInfoDetailEOQueryWrapper.lambda().eq(ProcessInfoDetailEO::getFlowType, FlowTypeEnum.YZFHXSCLC.getValue());
|
||||||
|
List<ProcessInfoDetailEO> processInfoDetailEOS = this.processInfoDetailEOService.list(processInfoDetailEOQueryWrapper);
|
||||||
|
if(CollectionUtils.isNotEmpty(processInfoDetailEOS)){
|
||||||
|
projectVersionInfoEO.setVerifyPId(processInfoDetailEOS.get(0).getActiProcInstId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!StringUtils.equals(projectVersionInfoEO.getDesignFlowStatus(),ComplianceFlowStatusEnum.LIST_TO_BE_RELEASED.getValue())
|
||||||
|
||!StringUtils.equals(projectVersionInfoEO.getDesignFlowStatus(),ComplianceFlowStatusEnum.LIST_TO_BE_CHECKED.getValue())){
|
||||||
|
QueryWrapper<ProcessInfoDetailEO> processInfoDetailEOQueryWrapper = new QueryWrapper<>();
|
||||||
|
processInfoDetailEOQueryWrapper.lambda().eq(ProcessInfoDetailEO::getProjectLawsInventoryId,projectVersionInfoEO.getProjectLawsInventoryId());
|
||||||
|
processInfoDetailEOQueryWrapper.lambda().eq(ProcessInfoDetailEO::getFlowType,FlowTypeEnum.SJFHXSHLC.getValue());
|
||||||
|
List<ProcessInfoDetailEO> processInfoDetailEOS = this.processInfoDetailEOService.list(processInfoDetailEOQueryWrapper);
|
||||||
|
if(CollectionUtils.isNotEmpty(processInfoDetailEOS)){
|
||||||
|
projectVersionInfoEO.setDesignPId(processInfoDetailEOS.get(0).getActiProcInstId());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
List<SysUser> sysUsers = new ArrayList<>();
|
List<SysUser> sysUsers = new ArrayList<>();
|
||||||
@@ -259,7 +297,7 @@ public class ProjectVersionInfoEOServiceImpl extends ServiceImpl<ProjectVersionI
|
|||||||
if(StringUtils.isNotEmpty(designDutyId)){
|
if(StringUtils.isNotEmpty(designDutyId)){
|
||||||
String designDutyName = sysUsers.stream().filter(e -> designDutyId.equals(e.getId())).
|
String designDutyName = sysUsers.stream().filter(e -> designDutyId.equals(e.getId())).
|
||||||
map(SysUser::getUsername).collect(Collectors.joining(","));
|
map(SysUser::getUsername).collect(Collectors.joining(","));
|
||||||
projectVersionInfoEO.setDesignDutyName(designDutyName);
|
projectVersionInfoEO.setDesignDutyIdName(designDutyName);
|
||||||
}
|
}
|
||||||
|
|
||||||
//prehomo确认
|
//prehomo确认
|
||||||
@@ -291,7 +329,7 @@ public class ProjectVersionInfoEOServiceImpl extends ServiceImpl<ProjectVersionI
|
|||||||
if(StringUtils.isNotEmpty(verifyDutyId)){
|
if(StringUtils.isNotEmpty(verifyDutyId)){
|
||||||
String verifyDutyName = sysUsers.stream().filter(e -> verifyDutyId.equals(e.getId())).
|
String verifyDutyName = sysUsers.stream().filter(e -> verifyDutyId.equals(e.getId())).
|
||||||
map(SysUser::getUsername).collect(Collectors.joining(","));
|
map(SysUser::getUsername).collect(Collectors.joining(","));
|
||||||
projectVersionInfoEO.setVerifyDutyName(verifyDutyName);
|
projectVersionInfoEO.setVerifyDutyIdName(verifyDutyName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -691,7 +691,7 @@
|
|||||||
Action(url, query).then((res) => {
|
Action(url, query).then((res) => {
|
||||||
if (res.success) {
|
if (res.success) {
|
||||||
this.confirmLoading = false
|
this.confirmLoading = false
|
||||||
if (res.result && res.result.length > 0) {
|
if (res.result && res.result.length > 0 && res.result instanceof Array) {
|
||||||
let detailedWarningList = []
|
let detailedWarningList = []
|
||||||
res.result.forEach(val => {
|
res.result.forEach(val => {
|
||||||
detailedWarningList.push(
|
detailedWarningList.push(
|
||||||
|
|||||||
@@ -1055,22 +1055,22 @@
|
|||||||
isResultReported: false,
|
isResultReported: false,
|
||||||
// fieldList | array |✔| 需要查询的列集合示例如下,type类型有:date/datetime/string/int/number
|
// fieldList | array |✔| 需要查询的列集合示例如下,type类型有:date/datetime/string/int/number
|
||||||
fieldList: [
|
fieldList: [
|
||||||
{
|
// {
|
||||||
type: 'string',
|
// type: 'string',
|
||||||
value: 'correspondingStandard',
|
// value: 'correspondingStandard',
|
||||||
text: this.$t('correspondingStandard')
|
// text: this.$t('correspondingStandard')
|
||||||
},
|
// },
|
||||||
{
|
{
|
||||||
type: 'string',
|
type: 'string',
|
||||||
value: 'subtitle',
|
value: 'subtitle',
|
||||||
text: this.$t('subtitle')
|
text: this.$t('subtitle')
|
||||||
},
|
},
|
||||||
{
|
// {
|
||||||
type: '',
|
// type: '',
|
||||||
value: 'implementType',
|
// value: 'implementType',
|
||||||
text: this.$t('implementationCategory'),
|
// text: this.$t('implementationCategory'),
|
||||||
dictCode: 'implement_type'//只要 dictCode 有值,无论 type 是什么,都显示为字典下拉框
|
// dictCode: 'implement_type'//只要 dictCode 有值,无论 type 是什么,都显示为字典下拉框
|
||||||
},
|
// },
|
||||||
{
|
{
|
||||||
type: 'date',
|
type: 'date',
|
||||||
value: 'xin1Che1Xing2Shi2Shi1Ri4Qi1',
|
value: 'xin1Che1Xing2Shi2Shi1Ri4Qi1',
|
||||||
@@ -1104,24 +1104,12 @@
|
|||||||
text: this.$t('areaOfResponsibility'),
|
text: this.$t('areaOfResponsibility'),
|
||||||
dictCode: 'duty_territory'//只要 dictCode 有值,无论 type 是什么,都显示为字典下拉框
|
dictCode: 'duty_territory'//只要 dictCode 有值,无论 type 是什么,都显示为字典下拉框
|
||||||
},
|
},
|
||||||
{
|
|
||||||
type: '',
|
|
||||||
value: 'region',
|
|
||||||
text: this.$t('zoneOfApplication'),
|
|
||||||
dictCode: 'region'//只要 dictCode 有值,无论 type 是什么,都显示为字典下拉框
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
type: 'Personnel',
|
type: 'Personnel',
|
||||||
value: 'regulationOwnerId',
|
value: 'regulationOwnerId',
|
||||||
valueName: 'regulationOwnerIdName',
|
valueName: 'regulationOwnerIdName',
|
||||||
text: this.$t('regulatoryEngineer')
|
text: this.$t('regulatoryEngineer')
|
||||||
},
|
},
|
||||||
{
|
|
||||||
type: 'Personnel',
|
|
||||||
value: 'homologationEngineerId',
|
|
||||||
valueName: 'homologationEngineerIdName',
|
|
||||||
text: this.$t('certifiedEngineer')
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
type: 'Personnel',
|
type: 'Personnel',
|
||||||
value: 'engineeringInterfacePerson',
|
value: 'engineeringInterfacePerson',
|
||||||
|
|||||||
@@ -35,12 +35,14 @@
|
|||||||
</a-col>
|
</a-col>
|
||||||
<span style="float: right;overflow: hidden;margin-right: 11px" class="table-page-search-submitButtons">
|
<span style="float: right;overflow: hidden;margin-right: 11px" class="table-page-search-submitButtons">
|
||||||
<a-col :md="6" :sm="24">
|
<a-col :md="6" :sm="24">
|
||||||
<globalAdvancedQuery ref="globalAdvancedQueryRef"
|
<a-button class="box-button" type="primary"
|
||||||
@handleSuperQuery="handleSuperQuery"
|
style="margin-right: 8px"
|
||||||
:fieldList="fieldList"/>
|
@click="searchQuery">{{ $t('query') }}</a-button>
|
||||||
<a-button class="box-button" type="primary" @click="searchQuery">{{ $t('query') }}</a-button>
|
<a-button class="box-button"
|
||||||
<a-button class="box-button" style="margin-left: 8px"
|
|
||||||
@click="searchReset">{{ $t('reset') }}</a-button>
|
@click="searchReset">{{ $t('reset') }}</a-button>
|
||||||
|
<globalAdvancedQuery ref="globalAdvancedQueryRef"
|
||||||
|
@handleSuperQuery="handleSuperQuery"
|
||||||
|
:fieldList="fieldList"/>
|
||||||
</a-col>
|
</a-col>
|
||||||
</span>
|
</span>
|
||||||
</a-row>
|
</a-row>
|
||||||
@@ -58,37 +60,50 @@
|
|||||||
:columns="columns"
|
:columns="columns"
|
||||||
>
|
>
|
||||||
<span slot="titleName" slot-scope="text,record" :title="text">
|
<span slot="titleName" slot-scope="text,record" :title="text">
|
||||||
{{ text && text.length > 20 ? text.slice(0, 19) + '...' : text }}
|
<span class="textName">
|
||||||
|
{{ text }}
|
||||||
|
</span>
|
||||||
</span>
|
</span>
|
||||||
<span slot="designDeliverableTemplateName" slot-scope="text,record">
|
|
||||||
<span>{{ record.designDeliverableTypeName }}</span><br v-if="record.designDeliverableTypeName">
|
<span slot="standard" slot-scope="text,record" :title="text">
|
||||||
<a v-if="record.designDeliverableTemplate && record.designDeliverableTemplate.split(',').length == 1"
|
<a class="textName" @click="standardClick(record)">
|
||||||
@click="pdfPreviewClick(record.designDeliverableTemplateName,record.designDeliverableTemplate)">
|
{{ text }}
|
||||||
{{ record.designDeliverableTemplateName }}
|
</a>
|
||||||
</a>
|
|
||||||
<a v-else-if="record.designDeliverableTemplate && record.designDeliverableTemplate.split(',').length > 1"
|
|
||||||
@click="clickButtonToUpload(record.designDeliverableTemplate)">{{ $t('viewFile') }}</a>
|
|
||||||
<span v-else>--</span>
|
|
||||||
</span>
|
</span>
|
||||||
<span slot="prehomoDeliverableTemplateName" slot-scope="text,record">
|
|
||||||
<span>{{ record.prehomoDeliverableTypeName }}</span><br v-if="record.prehomoDeliverableTypeName">
|
<span slot="verifyDeliverableTemplateName" slot-scope="text,result">
|
||||||
<a v-if="record.prehomoDeliverableTemplate && record.prehomoDeliverableTemplate.split(',').length == 1"
|
<span class="viewFile"
|
||||||
@click="pdfPreviewClick(record.prehomoDeliverableTemplateName,record.prehomoDeliverableTemplate)">
|
@click="viewFileClick(result.verifyDeliverableTemplate)"
|
||||||
{{ record.prehomoDeliverableTemplateName }}
|
v-if="result.verifyDeliverableTemplate">
|
||||||
</a>
|
{{$t('viewFile')}}
|
||||||
<a v-else-if="record.prehomoDeliverableTemplate && record.prehomoDeliverableTemplate.split(',').length > 1"
|
</span>
|
||||||
@click="clickButtonToUpload(record.prehomoDeliverableTemplate)">{{ $t('viewFile') }}</a>
|
<span v-else>--</span>
|
||||||
<span v-else>--</span>
|
|
||||||
</span>
|
</span>
|
||||||
<span slot="verifyDeliverableTemplateName" slot-scope="text,record">
|
<span slot="designDeliverableTemplate" slot-scope="text,result">
|
||||||
<span>{{ record.verifyDeliverableTypeName }}</span><br v-if="record.verifyDeliverableTypeName">
|
<span class="viewFile"
|
||||||
<a v-if="record.verifyDeliverableTemplate && record.verifyDeliverableTemplate.split(',').length == 1"
|
@click="viewFileClick(result.designDeliverableTemplate)"
|
||||||
@click="pdfPreviewClick(record.verifyDeliverableTemplateName,record.verifyDeliverableTemplate)">
|
v-if="result.designDeliverableTemplate">
|
||||||
{{ record.verifyDeliverableTemplateName }}
|
{{$t('viewFile')}}
|
||||||
</a>
|
</span>
|
||||||
<a v-else-if="record.verifyDeliverableTemplate && record.verifyDeliverableTemplate.split(',').length > 1"
|
<span v-else>--</span>
|
||||||
@click="clickButtonToUpload(record.verifyDeliverableTemplate)">{{ $t('viewFile') }}</a>
|
</span>
|
||||||
<span v-else>--</span>
|
<span slot="designFlowStatusName" slot-scope="text,result">
|
||||||
|
<span v-if="result.designFlowStatus == 'List to be released' ||
|
||||||
|
result.designFlowStatus == 'List to be checked'"
|
||||||
|
:title="text">
|
||||||
|
{{text}}
|
||||||
|
</span>
|
||||||
|
<a v-else @click="designFlowStatusClick(result,$t('designComplianceReview'))"
|
||||||
|
:title="text">{{text}}</a>
|
||||||
|
</span>
|
||||||
|
<span slot="verifyFlowStatusName" slot-scope="text,result">
|
||||||
|
<span v-if="result.verifyFlowStatus == 'List to be released' ||
|
||||||
|
result.verifyFlowStatus == 'List to be checked'"
|
||||||
|
:title="text">
|
||||||
|
{{text}}
|
||||||
|
</span>
|
||||||
|
<a v-else @click="designFlowStatusClick(result,$t('verificationComplianceReview'))"
|
||||||
|
:title="text">{{text}}</a>
|
||||||
</span>
|
</span>
|
||||||
</a-table>
|
</a-table>
|
||||||
</div>
|
</div>
|
||||||
@@ -125,12 +140,16 @@
|
|||||||
</span>
|
</span>
|
||||||
</a-table>
|
</a-table>
|
||||||
</a-modal>
|
</a-modal>
|
||||||
|
<viewFileModel ref="viewFileModelRef"/>
|
||||||
|
<designCompliance ref="designComplianceRef"/>
|
||||||
</a-card>
|
</a-card>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import ImportFile from '@/components/ImportFile/index'
|
import ImportFile from '@/components/ImportFile/index'
|
||||||
import globalAdvancedQuery from '@/components/globalAdvancedQuery/index'
|
import globalAdvancedQuery from '@/components/globalAdvancedQuery/index'
|
||||||
|
import viewFileModel from '@/components/viewFileModel/index'
|
||||||
|
import designCompliance from '../../toDoCenter/projectRegulationTasks/components/designCompliance'
|
||||||
import { getAction, postAction, downloadFile, deleteAction } from '@/api/manage'
|
import { getAction, postAction, downloadFile, deleteAction } from '@/api/manage'
|
||||||
import { mapGetters } from 'vuex'
|
import { mapGetters } from 'vuex'
|
||||||
import { Base64 } from 'js-base64'
|
import { Base64 } from 'js-base64'
|
||||||
@@ -139,22 +158,25 @@
|
|||||||
name: 'index',
|
name: 'index',
|
||||||
components: {
|
components: {
|
||||||
globalAdvancedQuery,
|
globalAdvancedQuery,
|
||||||
ImportFile
|
ImportFile,
|
||||||
|
viewFileModel,
|
||||||
|
designCompliance
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{
|
||||||
title: this.$t('standard'),
|
title: this.$t('standard'),
|
||||||
align: 'center',
|
align: 'left',
|
||||||
dataIndex: 'serialNumber',
|
dataIndex: 'serialNumber',
|
||||||
width: 180,
|
width: 180,
|
||||||
fixed: 'left',
|
fixed: 'left',
|
||||||
scopedSlots: { customRender: 'titleName' }
|
sorter: true,
|
||||||
|
scopedSlots: { customRender: 'standard' }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: this.$t('title'),
|
title: this.$t('title'),
|
||||||
align: 'center',
|
align: 'left',
|
||||||
dataIndex: 'title',
|
dataIndex: 'title',
|
||||||
width: 180,
|
width: 180,
|
||||||
fixed: 'left',
|
fixed: 'left',
|
||||||
@@ -162,180 +184,140 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: this.$t('subtitle'),
|
title: this.$t('subtitle'),
|
||||||
align: 'center',
|
align: 'left',
|
||||||
dataIndex: 'subtitle',
|
dataIndex: 'subtitle',
|
||||||
width: 180,
|
|
||||||
fixed: 'left',
|
|
||||||
scopedSlots: { customRender: 'titleName' }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: this.$t('listConfirmationStatus'),
|
|
||||||
align: 'center',
|
|
||||||
ellipsis: true,
|
ellipsis: true,
|
||||||
dataIndex: 'inventoryAffirmStatusName'
|
width: 180
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: this.$t('taskAffirmStatus'),
|
title: this.$t('applicableSupplement'),
|
||||||
align: 'center',
|
align: 'left',
|
||||||
ellipsis: true,
|
ellipsis: true,
|
||||||
dataIndex: 'taskAffirmStatusName'
|
dataIndex: 'applicableSupplement',
|
||||||
},
|
width: 200
|
||||||
// {
|
|
||||||
// title: this.$t('taskReleaseStatus'),
|
|
||||||
// align: 'center',
|
|
||||||
// dataIndex: 'taskReleaseStatus'
|
|
||||||
// },
|
|
||||||
{
|
|
||||||
title: this.$t('correspondingStandard'),
|
|
||||||
align: 'center',
|
|
||||||
ellipsis: true,
|
|
||||||
dataIndex: 'correspondingStandard'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: this.$t('implementationCategory'),
|
|
||||||
align: 'center',
|
|
||||||
ellipsis: true,
|
|
||||||
dataIndex: 'implementType_dictText'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: this.$t('ImplementationDate'),
|
|
||||||
align: 'center',
|
|
||||||
ellipsis: true,
|
|
||||||
dataIndex: 'xin1Che1Xing2Shi2Shi1Ri4Qi1'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: this.$t('vehicleInProductionDate'),
|
|
||||||
align: 'center',
|
|
||||||
ellipsis: true,
|
|
||||||
dataIndex: 'implementTime'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'WVTA ID',
|
|
||||||
align: 'center',
|
|
||||||
dataIndex: 'wvtaId',
|
|
||||||
ellipsis: true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: this.$t('certificationType'),
|
title: this.$t('certificationType'),
|
||||||
align: 'center',
|
align: 'left',
|
||||||
ellipsis: true,
|
ellipsis: true,
|
||||||
dataIndex: 'attestationType_dictText'
|
dataIndex: 'attestationType_dictText',
|
||||||
|
width: 180
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: this.$t('certificationLevel'),
|
title: this.$t('certificationLevel'),
|
||||||
align: 'center',
|
align: 'left',
|
||||||
ellipsis: true,
|
ellipsis: true,
|
||||||
dataIndex: 'attestationRank_dictText'
|
dataIndex: 'attestationRank_dictText',
|
||||||
|
width: 180
|
||||||
},
|
},
|
||||||
//
|
|
||||||
{
|
{
|
||||||
title: this.$t('areaOfResponsibility'),
|
title: this.$t('areaOfResponsibility'),
|
||||||
align: 'center',
|
align: 'left',
|
||||||
ellipsis: true,
|
ellipsis: true,
|
||||||
dataIndex: 'dutyTerritory_dictText'
|
sorter: true,
|
||||||
|
dataIndex: 'dutyTerritory_dictText',
|
||||||
|
width: 180
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: this.$t('regulatoryEngineer'),
|
title: this.$t('regulatoryEngineer'),
|
||||||
align: 'center',
|
align: 'left',
|
||||||
ellipsis: true,
|
ellipsis: true,
|
||||||
dataIndex: 'regulationOwnerName'
|
sorter: true,
|
||||||
},
|
dataIndex: 'regulationOwnerName',
|
||||||
{
|
width: 180
|
||||||
title: this.$t('certifiedEngineer'),
|
|
||||||
align: 'center',
|
|
||||||
ellipsis: true,
|
|
||||||
dataIndex: 'homologationEngineerName'
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: this.$t('engineeringInterfacePerson'),
|
title: this.$t('engineeringInterfacePerson'),
|
||||||
align: 'center',
|
align: 'left',
|
||||||
ellipsis: true,
|
ellipsis: true,
|
||||||
dataIndex: 'engineeringInterfacePersonName'
|
sorter: true,
|
||||||
|
dataIndex: 'engineeringInterfacePersonName',
|
||||||
|
width: 180
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: this.$t('remarks'),
|
title: this.$t('remarks'),
|
||||||
align: 'center',
|
align: 'left',
|
||||||
ellipsis: true,
|
dataIndex: 'remark',
|
||||||
dataIndex: 'remark'
|
width: 180,
|
||||||
|
ellipsis: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: this.$t('confirmationOfDesignConformity'),
|
title: this.$t('confirmationOfDesignConformity'),
|
||||||
children: [
|
children: [
|
||||||
{
|
|
||||||
title: this.$t('Deliverables'),
|
|
||||||
dataIndex: 'designDeliverableTemplateName',
|
|
||||||
align: 'center',
|
|
||||||
scopedSlots: { customRender: 'designDeliverableTemplateName' }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: this.$t('Sponsor'),
|
|
||||||
dataIndex: 'designInitiatorName',
|
|
||||||
align: 'center'
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
title: this.$t('personLiable'),
|
title: this.$t('personLiable'),
|
||||||
dataIndex: 'designDutyName',
|
dataIndex: 'designDutyIdName',
|
||||||
align: 'center'
|
align: 'left',
|
||||||
|
width: 180,
|
||||||
|
ellipsis: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: this.$t('TaskCutOffTime'),
|
title: this.$t('TaskCutOffTime'),
|
||||||
dataIndex: 'designDueDate',
|
dataIndex: 'designDueDate',
|
||||||
align: 'center'
|
align: 'left',
|
||||||
}
|
ellipsis: true,
|
||||||
]
|
width: 140
|
||||||
},
|
|
||||||
{
|
|
||||||
title: this.$t('PrehomoConfirmation'),
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
title: this.$t('Deliverables'),
|
|
||||||
dataIndex: 'prehomoDeliverableTemplateName',
|
|
||||||
align: 'center',
|
|
||||||
scopedSlots: { customRender: 'prehomoDeliverableTemplateName' }
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: this.$t('Sponsor'),
|
title: this.$t('ProcessStatus'),
|
||||||
dataIndex: 'prehomoInitiatorName',
|
dataIndex: 'designFlowStatusName',
|
||||||
align: 'center'
|
align: 'left',
|
||||||
|
ellipsis: true,
|
||||||
|
width: 140,
|
||||||
|
scopedSlots: { customRender: 'designFlowStatusName' }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: this.$t('personLiable'),
|
title: this.$t('deliverableTemplate'),
|
||||||
dataIndex: 'prehomoDutyName',
|
dataIndex: 'designDeliverableTemplate',
|
||||||
align: 'center'
|
align: 'left',
|
||||||
},
|
width: 180,
|
||||||
{
|
ellipsis: true,
|
||||||
title: this.$t('TaskCutOffTime'),
|
scopedSlots: { customRender: 'designDeliverableTemplate' }
|
||||||
dataIndex: 'prehomoDueDate',
|
|
||||||
align: 'center'
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: this.$t('verificationAndConformityconfirmation'),
|
title: this.$t('verificationAndConformityconfirmation'),
|
||||||
children: [
|
children: [
|
||||||
{
|
|
||||||
title: this.$t('Deliverables'),
|
|
||||||
dataIndex: 'verifyDeliverableTemplateName',
|
|
||||||
align: 'center',
|
|
||||||
scopedSlots: { customRender: 'verifyDeliverableTemplateName' }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: this.$t('Sponsor'),
|
|
||||||
dataIndex: 'verifyInitiatorName',
|
|
||||||
align: 'center'
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
title: this.$t('personLiable'),
|
title: this.$t('personLiable'),
|
||||||
dataIndex: 'verifyDutyName',
|
dataIndex: 'verifyDutyIdName',
|
||||||
align: 'center'
|
align: 'left',
|
||||||
|
width: 180,
|
||||||
|
ellipsis: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: this.$t('TaskCutOffTime'),
|
title: this.$t('TaskCutOffTime'),
|
||||||
dataIndex: 'verifyDueDate',
|
dataIndex: 'verifyDueDate',
|
||||||
align: 'center'
|
align: 'left',
|
||||||
|
ellipsis: true,
|
||||||
|
width: 140
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: this.$t('ProcessStatus'),
|
||||||
|
dataIndex: 'verifyFlowStatusName',
|
||||||
|
align: 'left',
|
||||||
|
ellipsis: true,
|
||||||
|
width: 180,
|
||||||
|
scopedSlots: { customRender: 'verifyFlowStatusName' }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: this.$t('deliverableTemplate'),
|
||||||
|
dataIndex: 'verifyDeliverableTemplate',
|
||||||
|
align: 'left',
|
||||||
|
width: 180,
|
||||||
|
ellipsis: true,
|
||||||
|
scopedSlots: { customRender: 'verifyDeliverableTemplateName' }
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
// {
|
||||||
|
// title: this.$t('operation'),
|
||||||
|
// align: 'left',
|
||||||
|
// fixed: 'right',
|
||||||
|
// width: 260,
|
||||||
|
// scopedSlots: { customRender: 'operation' }
|
||||||
|
// }
|
||||||
],
|
],
|
||||||
columnsFile: [
|
columnsFile: [
|
||||||
{
|
{
|
||||||
@@ -345,12 +327,6 @@
|
|||||||
width: 260,
|
width: 260,
|
||||||
ellipsis: true
|
ellipsis: true
|
||||||
},
|
},
|
||||||
{
|
|
||||||
title: this.$t('operation'),
|
|
||||||
align: 'center',
|
|
||||||
width: 130,
|
|
||||||
scopedSlots: { customRender: 'fileOperation' }
|
|
||||||
}
|
|
||||||
],
|
],
|
||||||
visibleFile: false,
|
visibleFile: false,
|
||||||
dataSourceFile: [],
|
dataSourceFile: [],
|
||||||
@@ -421,6 +397,73 @@
|
|||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
...mapGetters(['userInfo']),
|
...mapGetters(['userInfo']),
|
||||||
|
//流程状态点击事件
|
||||||
|
designFlowStatusClick(row, name) {
|
||||||
|
let query = {}
|
||||||
|
let TaskKey = ''
|
||||||
|
if (name == this.$t('designComplianceReview')) {
|
||||||
|
if (row.designFlowStatus == 'Task to be confirmed') {
|
||||||
|
TaskKey = 'zrrqr'
|
||||||
|
} else if (row.designFlowStatus == 'Results to be submitted') {
|
||||||
|
TaskKey = 'zrrtjjfw'
|
||||||
|
} else if (row.designFlowStatus == 'Results to be reviewed' ||
|
||||||
|
row.designFlowStatus == 'Compliance' ||
|
||||||
|
row.designFlowStatus == 'Non-Compliance' ||
|
||||||
|
row.designFlowStatus == 'To be tracked' ||
|
||||||
|
row.designFlowStatus == 'NA') {
|
||||||
|
TaskKey = 'fggcssh'
|
||||||
|
}
|
||||||
|
query = {
|
||||||
|
actiProcInstId: row.designPId,
|
||||||
|
projectTaskInventoryId: row.id,
|
||||||
|
projectLibraryId: row.projectLibraryId,
|
||||||
|
TaskKey: TaskKey,
|
||||||
|
isDisplay: false,
|
||||||
|
flowType: 2,
|
||||||
|
Sponsor: 'regulationOwnerName',
|
||||||
|
personLiable: 'designDutyIdName',
|
||||||
|
typeOfDeliverables: 'designDeliverableTypeName',
|
||||||
|
deliverableTemplate: 'designDeliverableTemplate',
|
||||||
|
DueDate: 'designDueDate',
|
||||||
|
remarks: 'designRemark',
|
||||||
|
projectName: row.projectName,
|
||||||
|
targetMarket: row.targetMarket,
|
||||||
|
projectNameId: row.projectNameId,
|
||||||
|
primaryKeyId: row.primaryKeyId
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (row.verifyFlowStatus == 'Task to be confirmed') {
|
||||||
|
TaskKey = 'zrrqr'
|
||||||
|
} else if (row.verifyFlowStatus == 'Results to be submitted') {
|
||||||
|
TaskKey = 'zrrtjjfw'
|
||||||
|
} else if (row.verifyFlowStatus == 'Results to be reviewed' ||
|
||||||
|
row.verifyFlowStatus == 'Compliance' ||
|
||||||
|
row.verifyFlowStatus == 'Non-Compliance' ||
|
||||||
|
row.verifyFlowStatus == 'To be tracked' ||
|
||||||
|
row.verifyFlowStatus == 'NA') {
|
||||||
|
TaskKey = 'fggcssh'
|
||||||
|
}
|
||||||
|
query = {
|
||||||
|
actiProcInstId: row.verifyPId,
|
||||||
|
projectTaskInventoryId: row.id,
|
||||||
|
projectLibraryId: row.projectLibraryId,
|
||||||
|
TaskKey: TaskKey,
|
||||||
|
flowType: 4,
|
||||||
|
isDisplay: false,
|
||||||
|
Sponsor: 'regulationOwnerName',
|
||||||
|
personLiable: 'verifyDutyIdName',
|
||||||
|
typeOfDeliverables: 'verifyDeliverableTypeName',
|
||||||
|
deliverableTemplate: 'verifyDeliverableTemplate',
|
||||||
|
DueDate: 'verifyDueDate',
|
||||||
|
remarks: 'verifyRemark',
|
||||||
|
projectName: row.projectName,
|
||||||
|
targetMarket: row.targetMarket,
|
||||||
|
projectNameId: row.projectNameId,
|
||||||
|
primaryKeyId: row.primaryKeyId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.$refs.designComplianceRef.getList(JSON.parse(JSON.stringify(query)), name)
|
||||||
|
},
|
||||||
searchQuery() {
|
searchQuery() {
|
||||||
this.getList()
|
this.getList()
|
||||||
},
|
},
|
||||||
@@ -502,6 +545,19 @@
|
|||||||
download(item) {
|
download(item) {
|
||||||
downloadFile('/sys/common/downLoadFile', item.fileName, { id: item.id ,userName:this.userInfo().username})
|
downloadFile('/sys/common/downLoadFile', item.fileName, { id: item.id ,userName:this.userInfo().username})
|
||||||
},
|
},
|
||||||
|
standardClick(row) {
|
||||||
|
let newUrl = this.$router.resolve({
|
||||||
|
path: '/docManage/library/detail',
|
||||||
|
query: {
|
||||||
|
id: row.standId
|
||||||
|
}
|
||||||
|
})
|
||||||
|
window.open(newUrl.href, '_blank')
|
||||||
|
},
|
||||||
|
viewFileClick(item) {
|
||||||
|
this.$refs.viewFileModelRef.clickButtonToUpload(item)
|
||||||
|
},
|
||||||
|
|
||||||
clickButtonToUpload(item) {
|
clickButtonToUpload(item) {
|
||||||
this.loading = true
|
this.loading = true
|
||||||
this.visibleFile = true
|
this.visibleFile = true
|
||||||
@@ -521,8 +577,8 @@
|
|||||||
this.loading = false
|
this.loading = false
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user