Merge remote-tracking branch 'origin/fix_bug_first_stage' into fix_bug_first_stage

This commit is contained in:
zer0Black
2022-07-05 15:10:41 +08:00
13 changed files with 988 additions and 94 deletions
@@ -18,6 +18,7 @@ public enum JumpLinkEnum {
VERIFY_AFFIRM_LINK("验证符合性确认链接","3","/ProjectDetails?id=","&type=103"),
DESIGN_AFFIRM_LINK("设计符合性确认链接","4","/ProjectDetails?id=","&type=103"),
TASK_AFFIRM_LINK("任务确认链接","2","/ProcessCenter",""),
COMPLIANCE_PROCESS_DETAIL_LINK("符合性流程明细页路由","2","/taskListProcess",""),
;
@@ -22,6 +22,7 @@ public enum OperatorTypeEnum {
QUERY_TASK_INVENTORY_DETAIL("查询法规清单明细信息","queryTaskInventoryDetail"),
UPDATE_TASK_INVENTORY_DETAIL("更新法规清单明细信息","updateTaskInventoryDetail"),
UPDATE_DRE_TASK_STATUS("更新法规清单明细信息,dre任务状态","updateDreTaskStatus"),
UPDATE_TASK_INVENTORY_DETAIL_BY_TASK("根据任务节点定义key更新数据","updateTaskInventoryDetailByTask"),
GET_CURRENT_USER_ID("获取当前登录用户id","getCurrentUserId"),
@@ -22,6 +22,7 @@ import com.jero.modules.system.entity.SysDictItem;
import com.jero.modules.system.entity.SysUser;
import com.jero.modules.system.mapper.SysUserMapper;
import com.jero.modules.system.service.impl.SysDictItemServiceImpl;
import com.jero.modules.wkflow.enums.DesignComplianceNodeEnum;
import com.jero.modules.wkflow.enums.FlowTypeEnum;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
@@ -78,6 +79,9 @@ public class ProjectTaskInventoryEOServiceImpl extends ServiceImpl<ProjectTaskIn
@Autowired
private SysDictItemServiceImpl sysDictItemServiceImpl;
@Autowired
private IProjectTaskInventoryEOService projectTaskInventoryEOService;
@Value(value = "${jero.backUrl}")
private String backUrl;
@@ -280,6 +284,21 @@ public class ProjectTaskInventoryEOServiceImpl extends ServiceImpl<ProjectTaskIn
this.projectTaskInventoryDetailEOMapper.update(projectTaskInventoryDetailEO,updateProjectTaskInventoryDetailWrapper);
}else if(StringUtils.equals(operatorType,OperatorTypeEnum.UPDATE_DRE_TASK_STATUS.getValue())){
}else if(StringUtils.equals(operatorType,OperatorTypeEnum.ADD_TASK_INVENTORY_DETAIL.getValue())){
//添加法规清单明细数据。
JSONArray taskInventoryDetailList = jsonObject.getJSONArray("taskInventoryDetailList");
ProjectTaskInventoryDetailEO projectTaskInventoryDetailEO = null;
for (Object detail : taskInventoryDetailList) {
projectTaskInventoryDetailEO = JSONObject.parseObject(JSONObject.toJSONString(detail),ProjectTaskInventoryDetailEO.class);
// 当前流程 当前用户 的数据删掉 确保唯一。
QueryWrapper<ProjectTaskInventoryDetailEO> deleteWrapper = new QueryWrapper<>();
deleteWrapper.lambda().eq(ProjectTaskInventoryDetailEO::getActiProcInstId,projectTaskInventoryDetailEO.getActiProcInstId());
deleteWrapper.lambda().eq(ProjectTaskInventoryDetailEO::getUserId,projectTaskInventoryDetailEO.getUserId());
deleteWrapper.lambda().eq(ProjectTaskInventoryDetailEO::getFlowType,projectTaskInventoryDetailEO.getFlowType());
projectTaskInventoryDetailEOMapper.delete(deleteWrapper);
projectTaskInventoryDetailEOMapper.insert(projectTaskInventoryDetailEO);
}
}
return new Result<>().success("调用成功!");
@@ -650,8 +669,35 @@ public class ProjectTaskInventoryEOServiceImpl extends ServiceImpl<ProjectTaskIn
userIdList.addAll(Arrays.asList(dreUserIds.split(",")));
}
String taskIds = "";
String actiProcInstId = jsonObject.getString("actiProcInstId");
String projectTaskInventoryId = "";
//String projectLibraryId = "";
//String id = "";
String studioEngineer = projectLibraryBase.getStudioEngineer();
//String serialNumber = "";
String taskKey = "";
boolean isDisplay = true; // 如果是true,则代表进入页面后,可以操作 如果是false 则代表进入页面后 只能查看。
//固定拼接参数
String flowType = "";
String sponsor = "";
String personLiable = "";
String typeOfDeliverables = "";
String deliverableTemplate = "";
String dueDate = "";
String remarks = "";
String projectName = projectNameInfoEO.getProjectName();
String targetMarket = projectLibraryBase.getTargetMarket();
String projectNameId = projectLibraryBase.getProjectNameId();
String primaryKeyId = "";
String personChargeFeedback = "";
FeishuMsgVo feishuMsgVo = new FeishuMsgVo();
if (StringUtils.equals(msgType, MsgTypeEnum.DESIGN_ISSUE_DRE_MSG.getValue())) {
taskKey = "dreDispose";
msgContentEN = sysUser.getUsername() + "has assigned the design compliance confirmation process of " + serialNumber + " in "
+ projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket()
+ " to you. Please check and handle it in time.";
@@ -662,36 +708,96 @@ public class ProjectTaskInventoryEOServiceImpl extends ServiceImpl<ProjectTaskIn
String designDutyId = jsonObject.getString("designDutyId");//设计符合性流程责任人id
userIdList.add(designDutyId);
msgContentEN = sysUser.getUsername() + " 将设计符合性流程退回,编号: " + serialNumber + " in "
+ projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket()
+ " to you. Please check and handle it in time.";
taskKey = DesignComplianceNodeEnum.THE_RESPONSIBLE_PERSON_HANDLES_THE_TASK.getKey();
feishuMsgVo.setContent("Hello! " + sysUser.getUsername() + " has assigned the task to you. Please check and handle it in time.");
feishuMsgVo.setTaskType("XXX");
msgContentEN = "The design compliance information of " + serialNumber + " in "
+ projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket()
+ " you sumitted has been rejected after review. Please check and address it in time.";
feishuMsgVo.setContent("Hello! The compliance information you submitted has been rejected after review. Please check and address it in a timely manner.");
feishuMsgVo.setTaskType("Design Compliance Confirmation");
}else if(StringUtils.equals(msgType, MsgTypeEnum.PREHOMO_RETURN_MSG.getValue())){
String prehomoDutyId = jsonObject.getString("prehomoDutyId");//prehomo流程责任人id
userIdList.add(prehomoDutyId);
msgContentEN = sysUser.getUsername() + " 将prehomo流程退回,编号: " + serialNumber + " in "
+ projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket()
+ " to you. Please check and handle it in time.";
taskKey = DesignComplianceNodeEnum.THE_RESPONSIBLE_PERSON_HANDLES_THE_TASK.getKey();
feishuMsgVo.setContent("Hello! " + sysUser.getUsername() + " has assigned the task to you. Please check and handle it in time.");
feishuMsgVo.setTaskType("XXX");
msgContentEN = "The Pre-Homo confirmation of " + serialNumber + " in "
+ projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket()
+ " you sumitted has been rejected after review. Please check and address it in time.";
feishuMsgVo.setContent("Hello! The compliance information you submitted has been rejected after review. Please check and address it in a timely manner.");
feishuMsgVo.setTaskType("Pre-Homo Confirmation");
}else if(StringUtils.equals(msgType, MsgTypeEnum.VERIFY_RETURN_MSG.getValue())){
String verifyDutyId = jsonObject.getString("verifyDutyId");//验证符合性流程责任人id
userIdList.add(verifyDutyId);
msgContentEN = sysUser.getUsername() + " 将验证符合性流程退回,编号: " + serialNumber + " in "
+ projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket()
+ " to you. Please check and handle it in time.";
taskKey = DesignComplianceNodeEnum.THE_RESPONSIBLE_PERSON_HANDLES_THE_TASK.getKey();
feishuMsgVo.setContent("Hello! " + sysUser.getUsername() + " has assigned the task to you. Please check and handle it in time.");
feishuMsgVo.setTaskType("XXX");
msgContentEN = "The validation compliance information of " + serialNumber + " in "
+ projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket()
+ " you sumitted has been rejected after review. Please check and address it in time.";
feishuMsgVo.setContent("Hello! The compliance information you submitted has been rejected after review. Please check and address it in a timely manner.");
feishuMsgVo.setTaskType("Validation Compliance Confirmation");
}
feishuMsgVo.setRegulationNo(serialNumber);
feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket());
/*//根据流程实例id,查询待办id
QueryWrapper<ProjectTaskInventoryDetailEO> detailEOQueryWrapper = new QueryWrapper<>();
detailEOQueryWrapper.lambda().eq(ProjectTaskInventoryDetailEO::getActiProcInstId,actiProcInstId);
detailEOQueryWrapper.lambda().eq(ProjectTaskInventoryDetailEO::getTaskDefinitionKey, taskKey);
List<ProjectTaskInventoryDetailEO> projectTaskInventoryDetailEOS = this.projectTaskInventoryDetailEOMapper.selectList(detailEOQueryWrapper);
ProjectTaskInventoryEO projectTaskInventoryEO = null;
if (CollectionUtils.isNotEmpty(projectTaskInventoryDetailEOS)) {
ProjectTaskInventoryDetailEO projectTaskInventoryDetailEO = projectTaskInventoryDetailEOS.get(0);
taskIds = projectTaskInventoryDetailEO.getTaskId();
projectTaskInventoryId = projectTaskInventoryDetailEO.getProjectTaskInventoryId();
primaryKeyId = projectTaskInventoryDetailEO.getId();
projectTaskInventoryEO = this.projectTaskInventoryEOService.getOne(
new QueryWrapper<ProjectTaskInventoryEO>().lambda().eq(ProjectTaskInventoryEO::getId, projectTaskInventoryId)
);
}
if(StringUtils.equals(msgType, MsgTypeEnum.DESIGN_ISSUE_DRE_MSG.getValue())
|| StringUtils.equals(msgType, MsgTypeEnum.DESIGN_RETURN_MSG.getValue())){
flowType = FlowTypeEnum.SJFHXSHLC.getValue();
sponsor = "designInitiatorName";
personLiable = "designDutyName";
typeOfDeliverables = "designDeliverableTypeName";
deliverableTemplate = "designDeliverableTemplate";
dueDate = "designDueDate";
remarks = "designRemark";
personChargeFeedback = projectTaskInventoryEO.getDesignPersonChargeFeedback();
}else if(StringUtils.equals(msgType, MsgTypeEnum.PREHOMO_RETURN_MSG.getValue())){
flowType = FlowTypeEnum.PREHOMOQRLC.getValue();
sponsor = "prehomoInitiatorName";
personLiable = "prehomoDutyName";
typeOfDeliverables = "prehomoDeliverableTypeName";
deliverableTemplate = "prehomoDeliverableTemplate";
dueDate = "prehomoDueDate";
remarks = "prehomoRemark";
personChargeFeedback = projectTaskInventoryEO.getPrehomoPersonChargeFeedback();
}else if(StringUtils.equals(msgType, MsgTypeEnum.VERIFY_RETURN_MSG.getValue())){
flowType = FlowTypeEnum.YZFHXSCLC.getValue();
sponsor = "verifyInitiatorName";
personLiable = "verifyDutyName";
typeOfDeliverables = "verifyDeliverableTypeName";
deliverableTemplate = "verifyDeliverableTemplate";
dueDate = "verifyDueDate";
remarks = "verifyRemark";
personChargeFeedback = projectTaskInventoryEO.getVerifyPersonChargeFeedback();
}*/
if(CollectionUtils.isNotEmpty(userIdList) && StringUtils.isNotEmpty(msgContentEN)){
//飞书跳转链接
@@ -709,6 +815,57 @@ public class ProjectTaskInventoryEOServiceImpl extends ServiceImpl<ProjectTaskIn
+ projectYearNameInfoEO.getYearName()
+ projectLibraryBase.getTargetMarket()
+ "'>" + "Jump link" + "</a>";
//飞书跳转链接 拼接跳转至任务详情页参数
/*String hrefFeishu = backUrl
+ JumpLinkEnum.COMPLIANCE_PROCESS_DETAIL_LINK.getLink()
+ "?taskIds=" + taskIds
+ "&actiProcInstId=" + actiProcInstId
+ "&projectTaskInventoryId=" + projectTaskInventoryId
+ "&projectLibraryId=" + projectLibraryId
+ "&id=" + projectLibraryId
+ "&studioEngineer=" + studioEngineer
+ "&serialNumber=" + serialNumber
+ "&TaskKey=" + taskKey
+ "&isDisplay=" + isDisplay
+ "&flowType=" + flowType
+ "&Sponsor=" + sponsor
+ "&personLiable=" + personLiable
+ "&typeOfDeliverables=" + typeOfDeliverables
+ "&deliverableTemplate=" + deliverableTemplate
+ "&DueDate=" + dueDate
+ "&remarks=" + remarks
+ "&projectName=" + projectName
+ "&targetMarket=" + targetMarket
+ "&projectNameId=" + projectNameId
+ "&primaryKeyId=" + primaryKeyId
+ "&PersonChargeFeedback=" + personChargeFeedback;
//系统内部跳转链接 拼接跳转至任务详情页参数
String href = "<a href='"
+ JumpLinkEnum.COMPLIANCE_PROCESS_DETAIL_LINK.getLink()
+ "?taskIds=" + taskIds
+ "&actiProcInstId=" + actiProcInstId
+ "&projectTaskInventoryId=" + projectTaskInventoryId
+ "&projectLibraryId=" + projectLibraryId
+ "&id=" + projectLibraryId
+ "&studioEngineer=" + projectLibraryBase.getStudioEngineer()
+ "&serialNumber=" + serialNumber
+ "&TaskKey=" + taskKey
+ "&isDisplay=" + isDisplay
+ "&flowType=" + flowType
+ "&Sponsor=" + sponsor
+ "&personLiable=" + personLiable
+ "&typeOfDeliverables=" + typeOfDeliverables
+ "&deliverableTemplate=" + deliverableTemplate
+ "&DueDate=" + dueDate
+ "&remarks=" + remarks
+ "&projectName=" + projectName
+ "&targetMarket=" + targetMarket
+ "&projectNameId=" + projectNameId
+ "&primaryKeyId=" + primaryKeyId
+ "&PersonChargeFeedback=" + personChargeFeedback
+ "'>" + "Jump link" + "</a>";*/
String contentInfo = msgContentEN + " " + href;
Map<String,Object> sendMessageMap = new HashMap<>();
sendMessageMap.put("hrefFeishu",hrefFeishu);
+1
View File
@@ -1072,4 +1072,5 @@ module.exports = {
theProjectContactEmpty:'The project contact person of cannot be empty',
pleaseSelectinitiatedOrRejected:'Please select the data whose list confirmation status is not initiated or rejected',
TheEngineerAndCertification:'The regulatory engineer and Certification Engineer of cannot be empty',
theResponsiblePersonAndDeadlineClank:'The responsible person and deadline of cannot be blank',
}
+2 -1
View File
@@ -693,7 +693,7 @@ module.exports = {
confirmOverrule: '确认驳回',
The: '第',
submitted: '条数据已提交不能重复提交',
incorrectsubmitted: '条数据状态有误只能提交状态为待确认的数据',
incorrectsubmitted: '状态有误只能提交状态为待确认的数据',
basicInformationOfParameters: '项目基本信息',
regulatoryCertificationTaskPlan: '法规/认证任务计划',
bringInRelevantPersonnel: '带入相关人员',
@@ -1076,4 +1076,5 @@ module.exports = {
newNiONumber: 'NIO编号',
English:'英文',
requiredParametersEmpty:'必填参数不能为空',
theResponsiblePersonAndDeadlineClank:'的责任人截止时间不能为空',
}
@@ -0,0 +1,302 @@
<template>
<div>
<div class="box-title-text" v-if="!isInput">
<a-input class="box-input" :value="value" @input="indexclick($event)"
:disabled="true"
:title="value"
:placeholder="$t('PleaseSelect')+query.db_field_txt"/>
<a-button type="primary" class="button-box" @click="standardClick">
{{this.$t('PersonnelSelection')}}
</a-button>
<a-button type="primary" v-if='isDelete' class="button-box" @click="standardDelete">
{{this.$t('delete')}}
</a-button>
</div>
<div class="box-title-text" v-if="isInput">
<a-input :class="{'box-input':!isClass}" :value="value"
readonly
@click.native="standardClick"
:placeholder="$t('PleaseSelect')+query.db_field_txt"/>
</div>
<a-drawer
:title="$t('PersonnelSelection')"
:maskClosable="false"
:width="600"
placement="right"
:closable="true"
@close="handleCancel"
:visible="visible"
style="height: 100%;overflow: auto;padding-bottom: 53px;">
<a-input-search style="margin-bottom: 8px" :placeholder="$t('NodeQuickLookup')"
v-model="searchModel" @search="onSearch"/>
<div class="drawer-content">
<a-tree
style="margin-bottom: 60px;height: 600px"
v-if="treeVisible"
checkable
checkStrictly
:loading="loading"
:tree-data="gData"
@check="onCheck"
@expand="onExpand"
v-model:checkedKeys="defaultCheckedKeys"
:defaultExpandedKeys="defaultExpandedKeys"
>
</a-tree>
</div>
<div class="drawer-bootom-button">
<a-button @click="handleCancel" type="danger" style="margin-right: 16px">{{$t('cancel')}}</a-button>
<a-button @click="handleSubmit" type="primary">{{$t('submit')}}</a-button>
</div>
</a-drawer>
</div>
</template>
<script>
import { getAction, postAction } from '@/api/manage'
export default {
name: 'index',
props: ['query', 'value', 'personneQuery', 'isSingleChoice', 'isInput', 'isClass','isDelete','distributionEngineerList'],
data() {
return {
loading: true,
gData: [],
autoExpandParent: true,
expandedKeys: [],
visible: false,
treeVisible: false,
confirmLoading: false,
departId: '',
selectedKey: [],
userIds: [],
searchModel: '',
defaultExpandedKeys: [],
defaultCheckedKeys: [],
content: []
}
},
mounted() {
},
methods: {
standardClick() {
this.treeVisible = false
this.departId = ''
this.searchModel = ''
this.userIds = []
this.userName = []
this.queryDepartUserTreeList()
this.visible = true
},
standardDelete(){
this.$emit('input', null)
this.$forceUpdate()
this.$emit('deleteData',this.query.db_field_name)
},
// onSelect(selectedKeys, info) {
// console.log(selectedKeys)
// this.selectedKey = selectedKeys
// },
onCheck(checkedKeys, info) {
console.log(checkedKeys)
this.userIds = checkedKeys.checked
this.userName = []
if (info.checkedNodes && info.checkedNodes.length > 0) {
info.checkedNodes.forEach(res => {
if (res.data.props.dataRef.key) {
this.content.push({
id: res.data.props.dataRef.key,
title: res.data.props.dataRef.title
})
} else {
this.content.push({
id: res.data.props.id,
title: res.data.props.title
})
}
})
}
if (this.content && this.content.length > 0) {
for (let i = 0; i < this.content.length; i++) {
for (let j = i + 1; j < this.content.length; j++) {
if (this.content[i].id == this.content[j].id) {
this.content.splice(j, 1)
j--
}
}
}
this.userIds.forEach(res => {
this.content.forEach(val => {
if (res == val.id) {
this.userName.push(val.title)
}
})
})
}
},
handleCancel() {
this.visible = false
this.treeVisible = false
},
handleSubmit() {
// if (this.userIds && this.userIds.length > 0) {
if (this.isSingleChoice) {
if (this.userIds.length > 1) {
this.$message.warning(this.$t('onlyOnePersonCanBeSelected'))
return
}
}
let userIds = JSON.parse(JSON.stringify(this.userIds))
let userName = JSON.parse(JSON.stringify(this.userName))
function noRepeat1(arr) {
for (var i = 0; i < arr.length - 1; i++) {
for (var j = i + 1; j < arr.length; j++) {
if (arr[i] === arr[j]) {
arr.splice(j, 1);
j--;
}
}
}
return arr;
}
if (this.distributionEngineerList && this.distributionEngineerList.length > 0){
this.distributionEngineerList.forEach(res=>{
userIds.shift(res.userId)
userName.shift(res.name)
})
}
userIds = noRepeat1(userIds)
userName = noRepeat1(userName)
this.$emit('input', userName.join(','))
this.$emit('change', this.query.db_field_name, userIds.join(','),this.query.subscript)
this.visible = false
this.treeVisible = false
// } else {
// this.$message.warning(this.$t('pleaseSelectPersonFirst'))
// }
},
indexclick(event) {
this.$emit('input', event.target.value)
this.departId = ''
this.searchModel = ''
this.userIds = []
this.userName = []
this.defaultCheckedKeys = []
},
onSearch(e) {
this.gData = []
this.departId = ''
this.visibleTree = false
if (e) {
this.getUserAndDepart()
} else {
this.queryDepartUserTreeList()
}
},
getUserAndDepart() {
getAction('sys/user/getUserAndDepart', { name: this.searchModel }).then((res) => {
if (res){
this.gData = res.filter(ele => ele.flag === 'DEPART');
} else {
this.gData = []
}
this.visibleTree = true
})
},
onExpand(selectedKeys, val) {
if (this.searchModel == '' || !this.searchModel) {
if (val.expanded) {
if (this.departId == val.node.value) {
} else {
this.departId = val.node.value
this.queryDepartUserTreeList()
}
}
}
},
queryDepartUserTreeList() {
let gData = JSON.parse(JSON.stringify(this.gData))
if (gData && gData.length > 0) {
gData = JSON.stringify(gData)
} else {
gData = ''
}
this.confirmLoading = true
postAction('sys/user/queryDepartUserTreeList', {
departId: this.departId,
json: gData,
flag: '1'
}).then((res) => {
this.confirmLoading = false
if (res.success) {
this.gData = res.result
this.defaultExpandedKeys = [this.departId]
if (this.userName && this.userName.length == 0) {
if (this.personneQuery[this.query.db_field_name + 'Name']) {
this.userName = this.personneQuery[this.query.db_field_name + 'Name'].split(',')
} else if (this.personneQuery[this.query.db_field_name]) {
this.userName = this.personneQuery[this.query.db_field_name].split(',')
} else {
this.userName = []
}
}
if (this.userIds && this.userIds.length == 0) {
if (this.personneQuery[this.query.db_field_name + '_id']) {
this.userIds = this.personneQuery[this.query.db_field_name + '_id'].split(',')
} else if (this.personneQuery[this.query.db_field_name]) {
this.userIds = this.personneQuery[this.query.db_field_name].split(',')
} else {
this.userIds = []
}
}
this.defaultCheckedKeys = this.userIds
this.treeVisible = true
} else {
this.gData = []
}
})
}
}
}
</script>
<style scoped>
.box-title-text {
line-height: 1.4;
display: flex;
}
.box-input {
display: inline-block;
height: 38px;
width: 100%;
}
.button-box {
margin-left: 10px;
height: 38px;
line-height: 38px;
}
.drawer-bootom-button {
position: absolute;
bottom: 0;
width: 100%;
z-index: 100;
border-top: 1px solid #e8e8e8;
padding: 10px 16px;
text-align: right;
left: 0;
background: #fff;
border-radius: 0 0 2px 2px;
}
.drawer-content {
height: calc(100% - 60px);
overflow: auto;
}
</style>
@@ -99,6 +99,7 @@
<PersonnelSelection
:query="{db_field_name:'userId',db_field_txt:$t('engineer')}"
:personneQuery="formInline"
:distributionEngineerList="distributionEngineerList"
@change="PersonnelSelectionChange"
v-model="formInline.userName"/>
</a-form-model-item>
@@ -307,7 +308,7 @@
</template>
<script>
import PersonnelSelection from '@/components/PersonnelSelection/index'
import PersonnelSelection from './PersonnelSelection/index'
import { getAction, postAction, putAction, deleteAction } from '@/api/manage'
import uploadFile from '@/components/uploadFile/file'
import viewFileModel from '@/components/viewFileModel/index'
@@ -499,6 +500,13 @@
} else if (this.$route.query.flowType == 4) {
msgType = 'verifyIssueDreMsg'
}
for (let i = 0; i < this.dataSourceTable.length; i++) {
for (let j = 0; j < this.distributionEngineerList.length; j++) {
if (this.dataSourceTable[i].userId == this.distributionEngineerList[j].userId) {
this.distributionEngineerList[j].isSend = '1'
}
}
}
let query = {
status: 'NotDone',
actiProcInstId: this.$route.query.actiProcInstId,
@@ -508,16 +516,17 @@
msgType: msgType,
distributionEngineerList: this.distributionEngineerList
}
this.confirmLoading = true
postAction(this.url.DetailEOAdd, query).then((res) => {
if (res.success) {
this.confirmLoading = false
this.getList()
this.visible = false
this.$message.success(this.$t('OperationSuccessful'))
} else {
this.confirmLoading = false
this.$message.warning(res.message)
}
if (res.success) {
this.confirmLoading = false
this.getList()
this.visible = false
this.$message.success(this.$t('OperationSuccessful'))
} else {
this.confirmLoading = false
this.$message.warning(res.message)
}
})
},
feedbackData(url, Action) {
@@ -55,8 +55,8 @@
>
<div slot="standardInformation" slot-scope="text,result" class="box-left">
<div class="content">
<a class="box-content-a">{{result.serialNumber}}</a><br/>
<a>{{result.title}}</a>
<a class="box-content-a" :title="result.serialNumber">{{result.serialNumber}}</a>
<a class="box-content-buttom" :title="result.title">{{result.title}}</a>
</div>
</div>
<div slot="areaOfResponsibility" slot-scope="text,result" class="box-left">
@@ -512,10 +512,20 @@
}
.box-content-a {
margin-bottom: 8px;
display: inline-block;
text-align: left;
margin-bottom: 8px;
font-weight: 400;
display: -webkit-box;
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
/*! autoprefixer: off */
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
/*! autoprefixer: on;*/
text-justify: inter-ideograph;
word-break: break-all
}
.box-content-index {
@@ -597,7 +607,18 @@
.box-content-cou {
cursor: pointer;
}
.box-content-buttom{
width: 100%;
overflow: hidden;
display: -webkit-box;
text-overflow: ellipsis;
/*! autoprefixer: off */
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
/*! autoprefixer: on;*/
text-justify: inter-ideograph;
word-break: break-all
}
</style>
<style>
.box-input .ant-select-selection {
@@ -901,7 +901,9 @@
]
},
detailedSuccessList: [],
detailedWarningList: []
detailedWarningList: [],
rowKeysSuccessList:[],
rowKeysWarningList:[],
}
},
@@ -1623,53 +1625,100 @@
}
}
}
this.rowKeysSuccessList = []
this.rowKeysWarningList = []
for (let i = 0; i < dataSource.length; i++) {
if (dataSource[i].inventoryAffirmStatus == 'List to confirm') {
if (dataSource[i].roleCode == 1 && dataSource[i].regulationOwnerSubmitStatus) {
isTrue = false
this.$message.warning(this.$t('The') + (i + 1) + this.$t('submitted'))
return
this.rowKeysWarningList.push( < div > { dataSource[i].serialNumber + this.$t('submitted') } < /div>)
continue
// isTrue = false
// this.$message.warning(dataSource[i].serialNumber + this.$t('submitted'))
// return
} else if (dataSource[i].roleCode == 2 && dataSource[i].homologationEngineerSubmitStatus) {
isTrue = false
this.$message.warning(this.$t('The') + (i + 1) + this.$t('submitted'))
return
this.rowKeysWarningList.push( < div > { dataSource[i].serialNumber + this.$t('submitted') } < /div>)
continue
// isTrue = false
// this.$message.warning(dataSource[i].serialNumber + this.$t('submitted'))
// return
} else if (dataSource[i].roleCode == 4 && (dataSource[i].homologationEngineerSubmitStatus && dataSource[i].regulationOwnerSubmitStatus)) {
isTrue = false
this.$message.warning(this.$t('The') + (i + 1) + this.$t('submitted'))
return
this.rowKeysWarningList.push( < div > { dataSource[i].serialNumber + this.$t('submitted') } < /div>)
continue
// isTrue = false
// this.$message.warning(dataSource[i].serialNumber + this.$t('submitted'))
// return
}
if((dataSource[i].designInitiatorId == dataSource[i].regulationOwnerId
&& dataSource[i].designInitiatorId == this.userInfo().id) ||
(dataSource[i].designInitiatorId == dataSource[i].homologationEngineerId
&& dataSource[i].designInitiatorId == this.userInfo().id)){
if(!dataSource[i].designDutyId || !dataSource[i].designDueDate){
this.rowKeysWarningList.push( < div > { dataSource[i].serialNumber+this.$t('confirmationOfDesignConformity') + this.$t('theResponsiblePersonAndDeadlineClank') } < /div>)
continue
}
}
if((dataSource[i].prehomoInitiatorId == dataSource[i].regulationOwnerId
&& dataSource[i].prehomoInitiatorId == this.userInfo().id) ||
(dataSource[i].prehomoInitiatorId == dataSource[i].homologationEngineerId
&& dataSource[i].prehomoInitiatorId == this.userInfo().id)){
if(!dataSource[i].prehomoDutyId || !dataSource[i].prehomoDueDate){
this.rowKeysWarningList.push( < div > { dataSource[i].serialNumber+this.$t('PrehomoConfirmation') + this.$t('theResponsiblePersonAndDeadlineClank') } < /div>)
continue
}
}
if((dataSource[i].verifyInitiatorId == dataSource[i].regulationOwnerId
&& dataSource[i].verifyInitiatorId == this.userInfo().id) ||
(dataSource[i].verifyInitiatorId == dataSource[i].homologationEngineerId
&& dataSource[i].verifyInitiatorId == this.userInfo().id)){
if(!dataSource[i].verifyDutyId || !dataSource[i].verifyDueDate){
this.rowKeysWarningList.push( < div > { dataSource[i].serialNumber+this.$t('verificationAndConformityconfirmation') + this.$t('theResponsiblePersonAndDeadlineClank') } < /div>)
continue
}
}
this.rowKeysSuccessList.push(dataSource[i])
} else {
isTrue = false
this.$message.warning(this.$t('The') + (i + 1) + this.$t('incorrectsubmitted'))
return
this.rowKeysWarningList.push( < div > { dataSource[i].serialNumber + this.$t('incorrectsubmitted') } < /div>)
// isTrue = false
// this.$message.warning(dataSource[i].serialNumber+ this.$t('incorrectsubmitted'))
// return
}
}
if (isTrue) {
callBack()
if (this.rowKeysSuccessList && this.rowKeysSuccessList.length > 0) {
callBack && callBack()
}else{
let that = this
this.$warning({
content: (
< div >
{ that.rowKeysWarningList }
< /div>
)
})
}
},
updateStatusBatch(num, selectedRowKeys) {
let _this = this
let lawsInventoryList = []
for (let i = 0; i < this.dataSource.length; i++) {
for (let j = 0; j < selectedRowKeys.length; j++) {
if (this.dataSource[i].id == selectedRowKeys[j]) {
for (let i = 0; i < this.rowKeysSuccessList.length; i++) {
let roleCode
if (this.dataSource[i].regulationOwnerId == this.userInfo().id &&
this.dataSource[i].homologationEngineerId == this.userInfo().id) {
if (this.rowKeysSuccessList[i].regulationOwnerId == this.userInfo().id &&
this.rowKeysSuccessList[i].homologationEngineerId == this.userInfo().id) {
roleCode = 4
} else if (this.dataSource[i].regulationOwnerId == this.userInfo().id) {
} else if (this.rowKeysSuccessList[i].regulationOwnerId == this.userInfo().id) {
roleCode = 1
} else if (this.dataSource[i].homologationEngineerId == this.userInfo().id) {
} else if (this.rowKeysSuccessList[i].homologationEngineerId == this.userInfo().id) {
roleCode = 2
}
lawsInventoryList.push({
id: this.dataSource[i].id,
id: this.rowKeysSuccessList[i].id,
roleCode: roleCode
})
}
}
}
let query = {
operatorType: 1,
@@ -1688,6 +1737,18 @@
_this.$message.warning(_this.$t('operationFailed'))
_this.confirmLoading = false
}
if(this.rowKeysWarningList && this.rowKeysWarningList.length > 0){
let that = this
this.$warning({
content: (
< div >
{ that.rowKeysWarningList }
< /div>
)
})
}
this.rowKeysWarningList = []
this.rowKeysSuccessList = []
})
},
@@ -8,6 +8,71 @@
@ok="visible = false"
@cancel="visible = false"
>
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
<a-col :md="12" :sm="8">
<div class="box-title-text-search">
<div class="title-text-search" :title="$t('areaOfResponsibility')">
<span>{{$t('areaOfResponsibility')}}</span>
</div>
<j-dict-select-tag class="box-input-search" v-model="queryParam.dutyTerritory"
:placeholder="$t('PleaseSelect')+$t('areaOfResponsibility')"
:type="'select'"
:triggerChange="false" :dictCode="'duty_territory'"/>
</div>
</a-col>
<a-col :md="12" :sm="8">
<div class="box-title-text-search">
<div class="title-text-search" :title="$t('engineeringInterfacePerson')">
<span>{{$t('engineeringInterfacePerson')}}</span>
</div>
<PersonnelSelection class="box-input-search"
:query="{db_field_name:'engineeringInterfacePerson',db_field_txt:$t('engineeringInterfacePerson')}"
:isInput="true"
:personneQuery="queryParam"
@change="PersonnelSelectionChange"
v-model="queryParam.engineeringInterfacePersonName"/>
</div>
</a-col>
<a-col :md="12" :sm="8">
<div class="box-title-text-search">
<div class="title-text-search" :title="$t('regulatoryEngineer')">
<span>{{$t('regulatoryEngineer')}}</span>
</div>
<PersonnelSelection class="box-input-search"
:query="{db_field_name:'lawEngineer',db_field_txt:$t('regulatoryEngineer')}"
:isInput="true"
:personneQuery="queryParam"
@change="PersonnelSelectionChange"
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>
<span style="float: right;overflow: hidden;margin-right: 11px;margin-bottom: 20px"
class="table-page-search-submitButtons">
<a-button class="box-button-search" type="primary" @click="searchQuery">{{$t('query')}}</a-button>
<a-button class="box-button-search" style="margin-left: 8px"
@click="searchReset">{{$t('reset')}}</a-button>
</span>
</a-row>
</a-form>
<div class="table-operator">
<div @click="handleModule" v-has="'projectRelatedPersonnel:exportTemplate'" class="operator-text">
<a-icon type="download"/>
@@ -23,12 +88,21 @@
<ImportFile :url="url" :projectId="$route.query.id" :isTrue="true" :accept="'.xls'"
@getList="getPersonnelList"/>
</div>
<div class="operator-text"
@click="batSettingClick"
v-has="'projectRelatedPersonnel:setting'"
v-if="this.$route.query.studioEngineer == this.userInfo().id">
<a-icon type="setting"/>
{{$t('batSetting')}}
</div>
</div>
<!-- rowKey="id"
:row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"-->
<a-table
class="table"
:columns="columns"
rowKey="id"
:row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
:pagination="false"
:scroll="{x:800,y: 400}"
:data-source="dataSource"
@@ -84,10 +158,10 @@
<a-col :span="24">
<div class="box-title-text">
<div class="title-text">
<!-- <span class="Required">*</span>-->
<!-- <span class="Required">*</span>-->
<span class="title-text-text" :title="$t('regulatoryEngineer')">{{$t('regulatoryEngineer')}}</span>
</div>
<!-- :prop="'lawEngineerName'"-->
<!-- :prop="'lawEngineerName'"-->
<a-form-model-item class="itemModel">
<PersonnelSelection
:query="{db_field_name:'lawEngineer',db_field_txt:$t('regulatoryEngineer')}"
@@ -104,10 +178,10 @@
<a-col :span="24">
<div class="box-title-text">
<div class="title-text">
<!-- <span class="Required">*</span>-->
<!-- <span class="Required">*</span>-->
<span class="title-text-text" :title="$t('engineeringInterfacePerson')">{{$t('engineeringInterfacePerson')}}</span>
</div>
<!-- :prop="'engineeringInterfacePersonName'"-->
<!-- :prop="'engineeringInterfacePersonName'"-->
<a-form-model-item class="itemModel">
<PersonnelSelection
:query="{db_field_name:'engineeringInterfacePerson',db_field_txt:$t('engineeringInterfacePerson')}"
@@ -124,10 +198,10 @@
<a-col :span="24">
<div class="box-title-text">
<div class="title-text">
<!-- <span class="Required">*</span>-->
<!-- <span class="Required">*</span>-->
<span class="title-text-text" :title="$t('certifiedEngineer')">{{$t('certifiedEngineer')}}</span>
</div>
<!-- :prop="'certificationEngineer'"-->
<!-- :prop="'certificationEngineer'"-->
<a-form-model-item class="itemModel">
<a-select allowClear
v-model="formInline.certificationEngineer"
@@ -162,12 +236,14 @@
</a-form-model>
</a-spin>
</a-modal>
<personBatting ref="personBattingRef" @personBattingTable="personBattingTable"/>
</div>
</template>
<script>
import PersonnelSelection from '@/components/PersonnelSelection/index'
import personBatting from './personBatting'
import { getAction, postAction, downloadFile, putAction } from '@/api/manage'
import ImportFile from '@/components/ImportFile/index'
import { mapGetters } from 'vuex'
@@ -176,11 +252,13 @@
name: 'listOfRelevantPersonnel',
components: {
PersonnelSelection,
ImportFile
ImportFile,
personBatting
},
data() {
return {
visible: false,
queryParam: {},
columnsAll: [
{
title: this.$t('areaOfResponsibility'),
@@ -321,12 +399,25 @@
}
})
},
deleteData(name){
personBattingTable() {
this.selectedRowKeys = []
this.getList()
},
batSettingClick() {
if (this.selectedRowKeys && this.selectedRowKeys.length > 0) {
let selectedRowKeys = JSON.parse(JSON.stringify(this.selectedRowKeys))
this.$refs.personBattingRef.getData(selectedRowKeys.join(','))
} else {
this.$message.warning(this.$t('selectLeastOne'))
}
},
deleteData(name) {
this.formInline[name] = ''
this.formInline = {...this.formInline}
this.formInline = { ...this.formInline }
},
getData() {
this.visible = true
this.queryParam = {}
this.getList()
this.queryCertificationEngineer()
},
@@ -336,7 +427,7 @@
editOk() {
this.$refs.ruleForm.validate(valid => {
if (valid) {
if (!this.formInline.certificationEngineer){
if (!this.formInline.certificationEngineer) {
this.formInline.certificationEngineer = ''
}
this.confirmLoading = true
@@ -362,8 +453,13 @@
})
},
PersonnelSelectionChange(value, id) {
this.formInline[value] = id
this.formInline = { ...this.formInline }
if (this.editVisible) {
this.formInline[value] = id
this.formInline = { ...this.formInline }
} else {
this.queryParam[value] = id
this.queryParam = { ...this.queryParam }
}
},
// pageOnChange(page, pageSize) {
// this.pageNo = page
@@ -377,9 +473,17 @@
onSelectChange(value) {
this.selectedRowKeys = value
},
searchQuery() {
this.getList()
},
searchReset() {
this.queryParam = {}
this.getList()
},
getList() {
let query = {
projectId: this.$route.query.id
projectId: this.$route.query.id,
...this.queryParam
}
this.loading = true
postAction(this.url.page, query).then((res) => {
@@ -409,7 +513,20 @@
}
}
</script>
<style>
.box-input-search .ant-select-selection--single {
height: 38px;
}
.box-input-search .ant-select-selection--multiple {
height: 38px;
}
.box-input-search .ant-select-selection__rendered {
line-height: 38px;
height: 38px;
}
</style>
<style scoped>
@import '~@assets/less/common.less';
@@ -472,4 +589,37 @@
text-overflow: ellipsis;
-o-text-overflow: ellipsis;
}
.box-title-text-search {
line-height: 1.4;
display: flex;
align-items: center;
margin-bottom: 10px;
}
.title-text-search {
width: 90px;
color: #000F16;
display: inline-block;
font-weight: 500;
font-size: 14px;
margin-right: 16px;
margin-top: 3px;
text-align: right;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.box-input-search {
display: inline-block;
width: calc(100% - 100px);
height: 38px;
margin-top: 2px;
}
.box-button-search {
height: 38px;
/*margin-top: 2px;*/
}
</style>
@@ -0,0 +1,180 @@
<template>
<a-modal
:title="$t('batSetting')"
:width="600"
:visible="visible"
:maskClosable="false"
:confirm-loading="confirmLoading"
@ok="editOk"
@cancel="visible = false"
>
<a-spin :spinning="confirmLoading">
<a-form-model :model="formInline" class="formAdd" :rules="rules" ref="ruleForm">
<a-row :gutter="24">
<a-col :span="24">
<div class="box-title-text">
<div class="title-text">
<span class="title-text-text" :title="$t('regulatoryEngineer')">{{$t('regulatoryEngineer')}}</span>
</div>
<a-form-model-item class="itemModel">
<PersonnelSelection
:query="{db_field_name:'lawEngineer',db_field_txt:$t('regulatoryEngineer')}"
:personneQuery="formInline"
@change="PersonnelSelectionChange"
v-model="formInline.lawEngineerName"/>
</a-form-model-item>
</div>
</a-col>
</a-row>
<a-row :gutter="24">
<a-col :span="24">
<div class="box-title-text">
<div class="title-text">
<span class="title-text-text" :title="$t('engineeringInterfacePerson')">{{$t('engineeringInterfacePerson')}}</span>
</div>
<a-form-model-item class="itemModel">
<PersonnelSelection
:query="{db_field_name:'engineeringInterfacePerson',db_field_txt:$t('engineeringInterfacePerson')}"
:personneQuery="formInline"
@change="PersonnelSelectionChange"
v-model="formInline.engineeringInterfacePersonName"/>
</a-form-model-item>
</div>
</a-col>
</a-row>
<a-row :gutter="24">
<a-col :span="24">
<div class="box-title-text">
<div class="title-text">
<span class="title-text-text" :title="$t('certifiedEngineer')">{{$t('certifiedEngineer')}}</span>
</div>
<a-form-model-item class="itemModel">
<a-select allowClear
class="box-input"
v-model="formInline.certificationEngineer"
:placeholder="$t('certifiedEngineer')+$t('areaOfResponsibility')">
<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>
</a-form-model-item>
</div>
</a-col>
</a-row>
</a-form-model>
</a-spin>
</a-modal>
</template>
<script>
import PersonnelSelection from '@/components/PersonnelSelection/index'
import { getAction, postAction, downloadFile, putAction } from '@/api/manage'
export default {
name: 'personBatting',
components: {
PersonnelSelection
},
data() {
return {
confirmLoading: false,
formInline: {},
visible: false,
rules: {},
ids: '',
dictOptionsValue: [],
url: {
queryCertificationEngineer: '/project/projectRelatedPersonnel/queryCertificationEngineer'
}
}
},
mounted() {
},
methods: {
getData(ids) {
this.visible = true
this.ids = ids
this.formInline = {}
this.queryCertificationEngineer()
},
queryCertificationEngineer() {
getAction(this.url.queryCertificationEngineer, { projectId: this.$route.query.id }).then((res) => {
if (res.success) {
this.dictOptionsValue = res.result
} else {
this.dictOptionsValue = []
}
})
},
PersonnelSelectionChange(value, id) {
this.formInline[value] = id
this.formInline = { ...this.formInline }
},
editOk() {
let query = {
...this.formInline,
ids: this.ids
}
this.confirmLoading = true
postAction('/project/projectRelatedPersonnel/setBatch', query).then((res) => {
if (res.success) {
this.$message.success(this.$t('OperationSuccessful'))
this.visible = false
this.confirmLoading = false
this.$emit('personBattingTable')
} else {
this.$message.warning(this.$t('operationFailed'))
this.confirmLoading = false
}
})
}
}
}
</script>
<style scoped>
.box-title-text {
line-height: 1.4;
display: flex;
/*align-items: center;*/
}
.title-text {
width: 114px;
text-align: right;
display: inline-block;
font-weight: 500;
font-size: 14px;
margin-right: 16px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
height: 42px;
line-height: 48px;
}
.box-input {
display: inline-block;
height: 38px;
width: 100%;
}
.itemModel {
width: calc(100% - 130px);
display: inline-block;
margin-top: 2px;
}
.Required {
color: red;
margin-right: 4px;
}
.title-text-text {
margin-top: 9px;
}
</style>
@@ -46,7 +46,8 @@
<div class="process-content-content" :style="val.left"
v-for="(val,indexOne) in item.data[0]" :key="indexOne">
<div class="process-content-right-top" :title="val.name">{{val.name}}</div>
<div class="process-content-right-top" v-if="indexOne % 2 == 0" :title="val.name">{{val.name}}</div>
<div class="process-content-right-button" v-if="indexOne % 2 == 1" :title="val.name">{{val.name}}</div>
<a-tooltip placement="topLeft">
<template slot="title">
<span>{{val.time.slice(0,11)}}</span>
@@ -496,23 +497,27 @@
.process-content-right-top {
font-size: 12px;
color: #040B29;
width: 50px;
width: 70px;
background: #fff;
display: inline-block;
overflow: hidden;
position: absolute;
top: -14px;
top: -12px;
left: 50%;
transform: translate(-50%, -50%);
}
.process-content-right-button{
font-size: 12px;
color: #040B29;
width: 70px;
background: #fff;
display: inline-block;
overflow: hidden;
position: absolute;
top: 12px;
left: 50%;
line-height: 1.2;
display: -webkit-box;
text-overflow: ellipsis;
/*! autoprefixer: off */
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
/*! autoprefixer: on;*/
text-justify: inter-ideograph;
word-break: break-all;
transform: translate(-50%, -50%);
}
.process-content-right-button {
width: 70px;
font-size: 12px;
@@ -71,7 +71,8 @@
<div class="process-content-right-xian"></div>
<div class="process-content-content" :style="val.left"
v-for="(val,indexOne) in item.data[0]" :key="indexOne">
<div class="process-content-right-top" :title="val.name">{{val.name}}</div>
<div class="process-content-right-top" v-if="indexOne % 2 == 0" :title="val.name">{{val.name}}</div>
<div class="process-content-right-button" v-if="indexOne % 2 == 1" :title="val.name">{{val.name}}</div>
<a-tooltip placement="topLeft">
<template slot="title">
<span>{{val.time.slice(0,11)}}</span>
@@ -647,23 +648,27 @@
.process-content-right-top {
font-size: 12px;
color: #040B29;
width: 50px;
width: 70px;
background: #fff;
display: inline-block;
overflow: hidden;
position: absolute;
top: -14px;
top: -12px;
left: 50%;
line-height: 1.2;
display: -webkit-box;
text-overflow: ellipsis;
/*! autoprefixer: off */
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
/*! autoprefixer: on;*/
text-justify: inter-ideograph;
word-break: break-all;
transform: translate(-50%, -50%);
}
.process-content-right-button{
font-size: 12px;
color: #040B29;
width: 70px;
background: #fff;
display: inline-block;
overflow: hidden;
position: absolute;
top: 12px;
left: 50%;
transform: translate(-50%, -50%);
}
.process-content-right-button {
width: 70px;
font-size: 12px;