Merge branch 'dev_2nd_LCYH' of http://git.hzwlsoft.com/laws-nio/laws-weilai into dev_2nd_LCYH

This commit is contained in:
yuekuo
2023-03-29 15:46:59 +08:00
5 changed files with 266 additions and 48 deletions
@@ -4007,6 +4007,14 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl<ParamsCollec
}
}
List<String> paramsCollectManifestIdList = configDataList.stream().map(ParamsConfigDataEO::getParamsCollectManifestId).distinct().collect(Collectors.toList());
for (String paramsCollectManifestId : paramsCollectManifestIdList) {
// 删除之前的参数项
QueryWrapper<ParamsConfigDataEO> targetConfigDataRemoveWrap = new QueryWrapper<>();
targetConfigDataRemoveWrap.lambda().eq(ParamsConfigDataEO::getParamsCollectManifestId, paramsCollectManifestId);
this.paramsConfigDataEOService.remove(targetConfigDataRemoveWrap);
}
// 批量新增参数项
Boolean isSuccess = paramsConfigDataEOService.saveOrUpdateBatch(configDataList);
@@ -5416,7 +5424,7 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl<ParamsCollec
} else if (ControlTypeEnum.TEXT_PULL_SINGLE.getValue().equals(controlType)) {
// 校验必填
if (ParamsIsMustEnum.YES.getValue().equals(isMust) && StringUtils.isEmpty(value)) {
/*if (ParamsIsMustEnum.YES.getValue().equals(isMust) && StringUtils.isEmpty(value)) {
if (CutEnum.CN.getValue().equals(cut)) {
errorMsg += configMap.get(key) + "为必填项,不能为空;";
} else {
@@ -5462,11 +5470,41 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl<ParamsCollec
}
}
}
}*/
// 处理禅道66949 问题导入的时候将必填校验去掉填写人在提交的时候还有必填校验
if (StringUtils.isNotEmpty(value)) {
if (countChar(value, "#") != 1) {
if (CutEnum.CN.getValue().equals(cut)) {
errorMsg += configMap.get(key) + "格式不正确;";
} else {
errorMsg += configMap.get(key) + " format is incorrect; ";
}
countError++;
} else {
if (value.split("#").length > 1) {
resultMap = validatePull(configMap.get(key), controlValues, value.split("#")[1], isMust, true, cut);
errorMsg += (String) resultMap.get("errorMsg");
countError += (int) resultMap.get("countError");
configDataEO.setPullData(value.split("#")[1]);
resultMap = validateText(configMap.get(key), controlVerify, value.split("#")[0], ParamsIsMustEnum.NO.getValue(), "1000", cut);
errorMsg += (String) resultMap.get("errorMsg");
countError += (int) resultMap.get("countError");
configDataEO.setTextData(value.split("#")[0]);
} else if (value.split("#").length == 1 && value.endsWith("#")) {
resultMap = validateText(configMap.get(key), controlVerify, value.split("#")[0], ParamsIsMustEnum.NO.getValue(), "1000", cut);
errorMsg += (String) resultMap.get("errorMsg");
countError += (int) resultMap.get("countError");
configDataEO.setTextData(value.split("#")[0]);
}
}
}
} else if (ControlTypeEnum.TEXT_PULL_MORE.getValue().equals(controlType)) {
// 校验必填
if (ParamsIsMustEnum.YES.getValue().equals(isMust) && StringUtils.isEmpty(value)) {
/*if (ParamsIsMustEnum.YES.getValue().equals(isMust) && StringUtils.isEmpty(value)) {
if (CutEnum.CN.getValue().equals(cut)) {
errorMsg += configMap.get(key) + "为必填项,不能为空;";
} else {
@@ -5511,11 +5549,39 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl<ParamsCollec
}
}
}
}
}*/
// 处理禅道66949 问题导入的时候将必填校验去掉填写人在提交的时候还有必填校验
if (StringUtils.isNotEmpty(value)) {
if (countChar(value, "#") != 1) {
if (CutEnum.CN.getValue().equals(cut)) {
errorMsg += configMap.get(key) + "格式不正确;";
} else {
errorMsg += configMap.get(key) + " format is incorrect; ";
}
countError++;
} else {
if (value.split("#").length > 1) {
resultMap = validatePull(configMap.get(key), controlValues, value.split("#")[1], isMust, false, cut);
errorMsg += (String) resultMap.get("errorMsg");
countError += (int) resultMap.get("countError");
configDataEO.setPullData(value.split("#")[1]);
resultMap = validateText(configMap.get(key), controlVerify, value.split("#")[0], ParamsIsMustEnum.NO.getValue(), "1000", cut);
errorMsg += (String) resultMap.get("errorMsg");
countError += (int) resultMap.get("countError");
configDataEO.setTextData(value.split("#")[0]);
} else if (value.split("#").length == 1 && value.endsWith("#")) {
resultMap = validateText(configMap.get(key), controlVerify, value.split("#")[0], ParamsIsMustEnum.NO.getValue(), "1000", cut);
errorMsg += (String) resultMap.get("errorMsg");
countError += (int) resultMap.get("countError");
configDataEO.setTextData(value.split("#")[0]);
}
}
}
} else if (ControlTypeEnum.TEXT_FILE.getValue().equals(controlType)) {
// 校验必填
if (ParamsIsMustEnum.YES.getValue().equals(isMust) && StringUtils.isEmpty(value)) {
/*if (ParamsIsMustEnum.YES.getValue().equals(isMust) && StringUtils.isEmpty(value)) {
if (CutEnum.CN.getValue().equals(cut)) {
errorMsg += configMap.get(key) + "为必填项,不能为空;";
} else {
@@ -5551,11 +5617,40 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl<ParamsCollec
}
}
}
}*/
// 处理禅道66949 问题导入的时候将必填校验去掉填写人在提交的时候还有必填校验
if (StringUtils.isNotEmpty(value)) {
if (countChar(value, "#") != 1) {
if (CutEnum.CN.getValue().equals(cut)) {
errorMsg += configMap.get(key) + "格式不正确;";
} else {
errorMsg += configMap.get(key) + " format is incorrect; ";
}
countError++;
} else {
if (value.split("#").length > 1) {
resultMap = validateText(configMap.get(key), controlVerify, value.split("#")[0], isMust, "1000", cut);
errorMsg += (String) resultMap.get("errorMsg");
countError += (int) resultMap.get("countError");
configDataEO.setTextData(value.split("#")[0]);
resultMap = validateFile(configMap.get(key), unzipfilepath, value.split("#")[1], ParamsIsMustEnum.NO.getValue(), cut);
errorMsg += (String) resultMap.get("errorMsg");
countError += (int) resultMap.get("countError");
configDataEO.setFileConnectId(value.split("#")[1]);
} else if (value.split("#").length == 1 && value.endsWith("#")) {
resultMap = validateText(configMap.get(key), controlVerify, value.split("#")[0], isMust, "1000", cut);
errorMsg += (String) resultMap.get("errorMsg");
countError += (int) resultMap.get("countError");
configDataEO.setTextData(value.split("#")[0]);
}
}
}
} else if (ControlTypeEnum.PULL_SINGLE_FILE.getValue().equals(controlType)) {
// 校验必填
if (ParamsIsMustEnum.YES.getValue().equals(isMust) && StringUtils.isEmpty(value)) {
/*if (ParamsIsMustEnum.YES.getValue().equals(isMust) && StringUtils.isEmpty(value)) {
if (CutEnum.CN.getValue().equals(cut)) {
errorMsg += configMap.get(key) + "为必填项,不能为空;";
} else {
@@ -5590,11 +5685,40 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl<ParamsCollec
}
}
}
}*/
// 处理禅道66949 问题导入的时候将必填校验去掉填写人在提交的时候还有必填校验
if (StringUtils.isNotEmpty(value)) {
if (countChar(value, "#") != 1) {
if (CutEnum.CN.getValue().equals(cut)) {
errorMsg += configMap.get(key) + "格式不正确;";
} else {
errorMsg += configMap.get(key) + " format is incorrect; ";
}
countError++;
} else {
if (value.split("#").length > 1) {
resultMap = validatePull(configMap.get(key), controlValues, value.split("#")[0], isMust, true, cut);
errorMsg += (String) resultMap.get("errorMsg");
countError += (int) resultMap.get("countError");
configDataEO.setPullData(value.split("#")[0]);
resultMap = validateFile(configMap.get(key), unzipfilepath, value.split("#")[1], ParamsIsMustEnum.NO.getValue(), cut);
errorMsg += (String) resultMap.get("errorMsg");
countError += (int) resultMap.get("countError");
configDataEO.setFileConnectId(value.split("#")[1]);
} else if (value.split("#").length == 1 && value.endsWith("#")) {
resultMap = validatePull(configMap.get(key), controlValues, value.split("#")[0], isMust, true, cut);
errorMsg += (String) resultMap.get("errorMsg");
countError += (int) resultMap.get("countError");
configDataEO.setPullData(value.split("#")[0]);
}
}
}
} else if (ControlTypeEnum.PULL_MORE_FILE.getValue().equals(controlType)) {
// 校验必填
if (ParamsIsMustEnum.YES.getValue().equals(isMust) && StringUtils.isEmpty(value)) {
/*if (ParamsIsMustEnum.YES.getValue().equals(isMust) && StringUtils.isEmpty(value)) {
if (CutEnum.CN.getValue().equals(cut)) {
errorMsg += configMap.get(key) + "为必填项,不能为空;";
} else {
@@ -5630,11 +5754,40 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl<ParamsCollec
}
}
}
}*/
// 处理禅道66949 问题导入的时候将必填校验去掉填写人在提交的时候还有必填校验
if (StringUtils.isNotEmpty(value)) {
if (countChar(value, "#") != 1) {
if (CutEnum.CN.getValue().equals(cut)) {
errorMsg += configMap.get(key) + "格式不正确;";
} else {
errorMsg += configMap.get(key) + " format is incorrect; ";
}
countError++;
} else {
if (value.split("#").length > 1) {
resultMap = validatePull(configMap.get(key), controlValues, value.split("#")[0], isMust, false, cut);
errorMsg += (String) resultMap.get("errorMsg");
countError += (int) resultMap.get("countError");
configDataEO.setPullData(value.split("#")[0]);
resultMap = validateFile(configMap.get(key), unzipfilepath, value.split("#")[1], ParamsIsMustEnum.NO.getValue(), cut);
errorMsg += (String) resultMap.get("errorMsg");
countError += (int) resultMap.get("countError");
configDataEO.setFileConnectId(value.split("#")[1]);
} else if (value.split("#").length == 1 && value.endsWith("#")) {
resultMap = validatePull(configMap.get(key), controlValues, value.split("#")[0], isMust, false, cut);
errorMsg += (String) resultMap.get("errorMsg");
countError += (int) resultMap.get("countError");
configDataEO.setPullData(value.split("#")[0]);
}
}
}
} else if (ControlTypeEnum.TEXT_PULL_SINGLE_FILE.getValue().equals(controlType)) {
// 校验必填
if (ParamsIsMustEnum.YES.getValue().equals(isMust) && StringUtils.isEmpty(value)) {
/*if (ParamsIsMustEnum.YES.getValue().equals(isMust) && StringUtils.isEmpty(value)) {
if (CutEnum.CN.getValue().equals(cut)) {
errorMsg += configMap.get(key) + "为必填项,不能为空;";
} else {
@@ -5689,6 +5842,42 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl<ParamsCollec
}
}
}*/
// 处理禅道66949 问题导入的时候将必填校验去掉填写人在提交的时候还有必填校验
if (StringUtils.isNotEmpty(value)) {
if (countChar(value, "#") != 2) {
if (CutEnum.CN.getValue().equals(cut)) {
errorMsg += configMap.get(key) + "格式不正确;";
} else {
errorMsg += configMap.get(key) + " format is incorrect; ";
}
countError++;
} else {
if (value.split("#").length > 1) {
resultMap = validatePull(configMap.get(key), controlValues, value.split("#")[1], isMust, true, cut);
errorMsg += (String) resultMap.get("errorMsg");
countError += (int) resultMap.get("countError");
configDataEO.setPullData(value.split("#")[1]);
resultMap = validateText(configMap.get(key), controlVerify, value.split("#")[0], ParamsIsMustEnum.NO.getValue(), "1000", cut);
errorMsg += (String) resultMap.get("errorMsg");
countError += (int) resultMap.get("countError");
configDataEO.setTextData(value.split("#")[0]);
if (!value.endsWith("#")) { //3
resultMap = validateFile(configMap.get(key), unzipfilepath, value.split("#")[2], ParamsIsMustEnum.NO.getValue(), cut);
errorMsg += (String) resultMap.get("errorMsg");
countError += (int) resultMap.get("countError");
configDataEO.setFileConnectId(value.split("#")[2]);
}
} else if (value.split("#").length == 1 && value.endsWith("#")) {
resultMap = validateText(configMap.get(key), controlVerify, value.split("#")[0], ParamsIsMustEnum.NO.getValue(), "1000", cut);
errorMsg += (String) resultMap.get("errorMsg");
countError += (int) resultMap.get("countError");
configDataEO.setTextData(value.split("#")[0]);
}
}
}
} else {
@@ -5701,7 +5890,11 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl<ParamsCollec
countError++;
}
}
if (StringUtils.isNotEmpty(configDataEO.getId())) {
/*if (StringUtils.isNotEmpty(configDataEO.getId())) {
configDataList.add(configDataEO);
}*/
// 如果表格里的参数不为空则进行添加
if(StringUtils.isNotBlank(value)){
configDataList.add(configDataEO);
}
}
@@ -5269,10 +5269,10 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl<BussDocumentLi
}
//
if(CutEnum.CN.getValue().equals(cut)){
String tree = "分阶段实施详情字段,多行之间使用#号分隔,列之间使用<p>标签分隔,示例:法规编号/条款<p>新车型<p>2000-10-10<p>备注#";
String tree = "分阶段实施详情字段,多行之间使用#号分隔,列之间使用<n>标签分隔,示例:法规编号/条款<n>新车型<n>2000-10-10<n>备注#";
sbTwo.append(count++ + "." + tree);
}else{
String tree = "For the field of phased implementation details, separate rows with # signs and columns with <p> labels. Example: Regulation Number/Articles <p> New model <p>2000-10-10<p> Remarks";
String tree = "For the field of phased implementation details, separate rows with # signs and columns with <n> labels. Example: Regulation Number/Articles <n> New model <n>2000-10-10<n> Remarks";
sbTwo.append(count++ + "." + tree);
}
List<String> list = new LinkedList<>();
@@ -5960,14 +5960,21 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl<BussDocumentLi
List<String> phasedImplDetailsList = Arrays.asList(value.split("#"));
for (String phasedImplDetails : phasedImplDetailsList) {
PhasedImplementationDetailsEO phasedImplementationDetailsEO = new PhasedImplementationDetailsEO();
String[] phasedImplDetailsArr = phasedImplDetails.split("<p>");
String[] phasedImplDetailsArr = phasedImplDetails.split("<n>");
if(phasedImplDetailsArr.length >= 1){
String standNumberOrClause = phasedImplDetailsArr[0];
if (StringUtils.isNotBlank(standNumberOrClause) && standNumberOrClause.length() > 100) {
if(StringUtils.isEmpty(standNumberOrClause)){
if(CutEnum.CN.getValue().equals(cut)){
errorMsg += "分阶段实施详情-法规编号/条款不能超过" + 100 + "个字符, ";
errorMsg += "分阶段实施详情-法规编号/条款不能为空, ";
}else{
errorMsg += "Details of the phased implementation standNumberOrClause Can not be more than " + 100 + " char, ";
errorMsg += "Phased Implementation Details - Regulation No./clause cannot be empty,";
}
countError++;
} else if (StringUtils.isNotBlank(standNumberOrClause) && standNumberOrClause.length() > 200) {
if(CutEnum.CN.getValue().equals(cut)){
errorMsg += "分阶段实施详情-法规编号/条款不能超过" + 200 + "个字符, ";
}else{
errorMsg += "Phased Implementation Details - Regulation No./clause Can not be more than " + 200 + " char, ";
}
countError++;
}else {
@@ -5976,6 +5983,7 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl<BussDocumentLi
}
if(phasedImplDetailsArr.length >= 2){
String implementationTypeName = phasedImplDetailsArr[1];
if(StringUtils.isNotEmpty(implementationTypeName)){
String[] implementationTypeNameArr = implementationTypeName.split(",");
ImplementationTypeEnum[] implementationTypeEnums = ImplementationTypeEnum.values();
@@ -5993,30 +6001,47 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl<BussDocumentLi
if(CutEnum.CN.getValue().equals(cut)){
errorMsg += "分阶段实施详情-实施类型填写有误,填写值为'新车型 或 在产车', ";
}else{
errorMsg += "Details of the phased implementation implementationType The value is set to 'New car model or Car in production', ";
errorMsg += "Phased Implementation Details - implementationType The value is set to 'New car model or Car in production', ";
}
countError++;
}else {
phasedImplementationDetailsEO.setImplementationType(implementationTypeList.stream().collect(Collectors.joining(",")));
}
}else {
if(CutEnum.CN.getValue().equals(cut)){
errorMsg += "分阶段实施详情-实施类型不能为空, ";
}else{
errorMsg += "Phased Implementation Details - Implementation Type cannot be empty,";
}
countError++;
}
}
if(phasedImplDetailsArr.length >= 3){
Date implementationDate = null;
try {
implementationDate = DateUtils.parseDate(phasedImplDetailsArr[2], "yyyy-MM-dd");
} catch (ParseException e) {
e.printStackTrace();
}
if(implementationDate == null){
String implementationDateStr = phasedImplDetailsArr[2];
if(StringUtils.isEmpty(implementationDateStr)){
if(CutEnum.CN.getValue().equals(cut)){
errorMsg += "分阶段实施详情-实施日期格式错误,正确格式为'yyyy-MM-dd', ";
errorMsg += "分阶段实施详情-实施日期不能为空, ";
}else{
errorMsg += "Details of the phased implementation implementationDate format is incorrect. The correct format is 'yyyy-MM-dd', ";
errorMsg += "Phased Implementation Details - Implementation Date cannot be empty,";
}
countError++;
}else {
phasedImplementationDetailsEO.setImplementationDate(implementationDate);
Date implementationDate = null;
try {
implementationDate = DateUtils.parseDate(phasedImplDetailsArr[2], "yyyy-MM-dd");
} catch (ParseException e) {
e.printStackTrace();
}
if(implementationDate == null){
if(CutEnum.CN.getValue().equals(cut)){
errorMsg += "分阶段实施详情-实施日期格式错误,正确格式为'yyyy-MM-dd', ";
}else{
errorMsg += "Phased Implementation Details - implementationDate format is incorrect. The correct format is 'yyyy-MM-dd', ";
}
countError++;
}else {
phasedImplementationDetailsEO.setImplementationDate(implementationDate);
}
}
}
if(phasedImplDetailsArr.length >= 4){
@@ -6025,7 +6050,7 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl<BussDocumentLi
if(CutEnum.CN.getValue().equals(cut)){
errorMsg += "分阶段实施详情-备注不能超过" + 1000 + "个字符, ";
}else{
errorMsg += "Details of the phased implementation ramarks Can not be more than " + 1000 + " char, ";
errorMsg += "Phased Implementation Details - ramarks Can not be more than " + 1000 + " char, ";
}
countError++;
}else {
@@ -30,7 +30,7 @@
<a-input class="box-input inputWid"
:disabled="itemval.isLock == '1' ? true: false"
:placeholder="$t('pleaseEnter')+$t('chinese')"
@input="onInput"
@input="onInput(itemval.dataValue,item,index1)"
:maxLength="1000"
onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"
v-model="itemval.dataValue"/>
@@ -283,7 +283,7 @@
:maxLength="1000"
:disabled="itemval.isLock == '1' ? true: false"
:placeholder="$t('pleaseEnter')+$t('chinese')"
@input="onInput"
@input="onInput(itemval.dataValue,item,index1)"
onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"
v-model="itemval.dataValue"/>
</div>
@@ -405,7 +405,7 @@
<div v-else-if="itemval.controlVerify == '2'">
<a-input class="box-input inputWid"
:maxLength="1000"
@input="onInput"
@input="onInput(itemval.dataValue,item,index1)"
onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"
:disabled="itemval.isLock == '1' ? true: false"
:placeholder="$t('pleaseEnter')+$t('chinese')"
@@ -516,7 +516,7 @@
<a-input class="box-input inputWid"
:maxLength="1000"
:disabled="itemval.isLock == '1' ? true: false"
@input="onInput"
@input="onInput(itemval.dataValue,item,index1)"
onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"
:placeholder="$t('pleaseEnter')+$t('chinese')"
v-model="itemval.dataValue"/>
@@ -730,7 +730,7 @@
:disabled="itemval.isLock == '1' ? true: false"
:maxLength="1000"
:placeholder="$t('pleaseEnter')+$t('chinese')"
@input="onInput"
@input="onInput(itemval.dataValue,item,index1)"
onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"
v-model="itemval.dataValue"/>
</div>
@@ -917,14 +917,14 @@
}
})
},
onInput(r) {
let value = r.target.value
r.target.value = value.replace(/[^\u4e00-\u9fa5]/g, '')
this.detailDateList.forEach((item) => {
if (item.controlVerify == '2') {
item.dataValue = r.target.value
}
})
onInput(r, item, index) {
let value = r.replace(/[^\u4e00-\u9fa5]/g, '')
this.detailDate.paramsConfigData[item][index].dataValue = value
// this.detailDateList.forEach((item) => {
// if (item.controlVerify == '2') {
// item.dataValue = value
// }
// })
},
uploadSuccess(data) {
let attIdList = []
@@ -149,9 +149,9 @@
@click="maintenanceClick(record)">{{$t('maintenance')}}</a>
<a class="text-operation"
@click="endUpgrade(record , '0')" v-if="record.sjzt==0 && record.bazt=='4'">{{$t('endUpgrade')}}</a>
@click="endUpgrade(record , '0')" v-if="record.sjzt == '0' && record.bazt=='4'">{{$t('endUpgrade')}}</a>
<a class="text-operation"
@click="endUpgrade(record , '1')" v-if="record.sjzt==1">{{$t('upgradecompletion')}}</a>
@click="endUpgrade(record , '1')" v-if="record.sjzt == '1'">{{$t('upgradecompletion')}}</a>
<a class="text-operation"
@click="handleExport(record)">{{$t('export')}}</a>
<a class="text-operation"
@@ -49,8 +49,8 @@
<span class='text-text' style='height: 450px;line-height: 450px' :title="$t('positioningandnavigationsystem')">
&nbsp;&nbsp;{{$t('positioningandnavigationsystem')}}
</span>
<span style="padding: 5px" class='text-text-three' :title="$t('vehiclesatellitepositioningequipment')">
&nbsp;&nbsp;{{$t('vehiclesatellitepositioningequipment')}}
<span style="padding: 10px" class='text-text-three' :title="$t('vehiclesatellitepositioningequipment')">
{{$t('vehiclesatellitepositioningequipment')}}
</span>
<span class='text-text-three' :title="$t('inertialnavigationsystem')">
&nbsp;&nbsp;{{$t('inertialnavigationsystem')}}
@@ -70,19 +70,19 @@
</span>
<span class='text-box-four'>
<span style="padding: 10px" class='four-text-text' :title="$t('signalingdevices')">
&nbsp;&nbsp;{{$t('signalingdevices')}}
{{$t('signalingdevices')}}
</span>
<span class='four-text' :title="$t('driverassistancefunctioncontrols')">
&nbsp;&nbsp;{{$t('driverassistancefunctioncontrols')}}
{{$t('driverassistancefunctioncontrols')}}
</span>
<span class='four-text' :title="$t('drivingassistancefunctionindicatorsignaldevice')">
&nbsp;&nbsp;{{$t('drivingassistancefunctionindicatorsignaldevice')}}
{{$t('drivingassistancefunctionindicatorsignaldevice')}}
</span>
<span class='four-text' :title="$t('steerinwheelreleaseindicatorsignaldevice')">
&nbsp;&nbsp;{{$t('steerinwheelreleaseindicatorsignaldevice')}}
{{$t('steerinwheelreleaseindicatorsignaldevice')}}
</span>
<span class='four-text' :title="$t('driverattentionindicatorsignaldevice')">
&nbsp;&nbsp;{{$t('driverattentionindicatorsignaldevice')}}
{{$t('driverattentionindicatorsignaldevice')}}
</span>
</span>
<span class='text-box-five' :title="$t('automaticDrivingDataRecordingSystem')">