Merge branch 'master' into 标准拆分译文变更

# Conflicts:
#	src/common/lang/en-us.js
#	src/common/lang/zh-cn.js
#	src/views/documentTool/documentSplit/modules/SplitAddForm.vue
#	src/views/workCenter/standardInterpretationProcess/modules/InterpretationClauseTable.vue
This commit is contained in:
danshihao
2024-08-14 17:15:31 +08:00
152 changed files with 3192 additions and 1176 deletions
+2 -2
View File
@@ -1,5 +1,5 @@
NODE_ENV=production
VUE_APP_TAG_FLAG=1
VUE_APP_LOGIN_PAGE='https://iam.sinotruk.com:7012/idp/oauth2/authorize?redirect_uri=http://srms.sinotruk.com/dashboard/analysis&state=123&client_id=SRMS&response_type=code'
VUE_APP_LOGIN_PAGE='https://iamuat.mychery.com:5443/idp/oauth2/authorize?redirect_uri=http://10.2.16.8:3344/dashboard/analysis&state=123&client_id=CGRSM&response_type=code'
VUE_APP_CURRENT_SYSTEM='IAM'
VUE_APP_LOGOUT_PAGE='https://iam.sinotruk.com:7012/idp/profile/OAUTH2/Redirect/GLO?redirctToUrl=http://srms.sinotruk.com/dashboard/analysis&redirectToLogin=true&entityId=SRMS'
VUE_APP_LOGOUT_PAGE='https://iamuat.mychery.com:5443/idp/profile/OAUTH2/Redirect/GLO?redirctToUrl=http://10.2.16.8:3344/dashboard/analysis&redirectToLogin=true&entityId=CGRSM'
+5
View File
@@ -0,0 +1,5 @@
NODE_ENV=production
VUE_APP_TAG_FLAG=1
VUE_APP_LOGIN_PAGE='https://iamuat.mychery.com:5443/idp/oauth2/authorize?redirect_uri=http://10.2.16.8:3344/dashboard/analysis&state=123&client_id=CGRSM&response_type=code'
VUE_APP_CURRENT_SYSTEM='IAM'
VUE_APP_LOGOUT_PAGE='https://iamuat.mychery.com:5443/idp/profile/OAUTH2/Redirect/GLO?redirctToUrl=http://10.2.16.8:3344/dashboard/analysis&redirectToLogin=true&entityId=CGRSM'
-5
View File
@@ -1,5 +0,0 @@
NODE_ENV=production
VUE_APP_TAG_FLAG=1
VUE_APP_LOGIN_PAGE='https://iam-uat-new.sinotruk.com/idp/oauth2/authorize?redirect_uri=http://srms-test.sinotruk.com/dashboard/analysis&state=123&client_id=SRMS&response_type=code'
VUE_APP_CURRENT_SYSTEM='IAM'
VUE_APP_LOGOUT_PAGE='https://iam-uat-new.sinotruk.com/idp/profile/OAUTH2/Redirect/GLO?redirctToUrl=http://srms-test.sinotruk.com/dashboard/analysis&redirectToLogin=true&entityId=SRMS'
+1 -1
View File
@@ -5,7 +5,7 @@
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>奇瑞法规智库</title>
<title>奇瑞标准法规管理系统</title>
<!--<link rel="icon" href="<%= BASE_URL %>logo.png"> -->
<script src="<%= BASE_URL %>cdn/babel-polyfill/polyfill_7_2_5.js"></script>
<script src="<%= BASE_URL %>api_address_config.js"></script>
+1 -1
View File
@@ -74,7 +74,7 @@ UE.I18N['en'] = {
'jsonEncodeError': 'Server Return Format Error',
'loading':"loading...",
'loadError':"load error",
'errorLoadConfig': 'Server config not loaded, upload can not work.',
'errorLoadConfig': 'Cannot upload images by pasting or dragging.',
},
'simpleupload':{
'exceedSizeError': 'File Size Exceed',
+1 -1
View File
@@ -74,7 +74,7 @@ UE.I18N['zh-cn'] = {
'jsonEncodeError': '服务器返回格式错误',
'loading':"正在上传...",
'loadError':"上传错误",
'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用'
'errorLoadConfig': '不支持通过粘贴或拖拽上传图片'
},
'simpleupload':{
'exceedSizeError': '文件大小超出限制',
+37
View File
@@ -0,0 +1,37 @@
<template>
<div class="mobile-empty">
<div class="box"><img :src="require('@/assets/image/notMobile.png')" alt=''></div>
</div>
</template>
<script>
export default {
name: 'MobileApp.vue'
}
</script>
<style lang="less" scoped>
.mobile-empty {
position: relative;
height: 100vh;
overflow: hidden;
.box {
position: absolute;
top: 50%;
transform: translateY(-50%);
height: 500px;
width: 100%;
overflow: hidden;
img {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 100%;
}
}
}
</style>
+9 -1
View File
@@ -5,6 +5,8 @@ import { getAction, postAction, postForParams } from './manage'
const releaseSplitStandard = (params) => postAction('/laws/DocumentTool/documentSplit/publish', params)
// 文档拆分-更改权限
const changePermission = (params) => postAction('/laws/DocumentTool/documentSplit/updatePermissions ', params)
// 文档拆分-校验是否有更改权限
const checkChangePermission = (params) => getAction('/laws/DocumentTool/documentSplit/updatePermissionsCheck', params)
// 文档拆分-撤回
const withdraw = (params) => postAction('/laws/DocumentTool/documentSplit/revocation', params)
// 文档拆分-查看
@@ -101,10 +103,14 @@ const editMaintainList = (params) => postAction('/customCompare/lawsCustomCompar
// 自定义比对-对比分析结果保存
const editComparsionResult = (params) => postAction('/customCompare/lawsCustomCompareInfo/saveCellCompareResult', params)
// 涉及系统部件下拉
const getInvolvedSystem = (params) => getAction('/laws/standard/partName/', params)
export {
// 文档拆分
releaseSplitStandard,
changePermission,
checkChangePermission,
withdraw,
previewDocSplit,
importSplitResult,
@@ -156,5 +162,7 @@ export {
getTableData,
getMaintainList,
editMaintainList,
editComparsionResult
editComparsionResult,
getInvolvedSystem
}
+15 -3
View File
@@ -1,8 +1,8 @@
@font-face {
font-family: "iconfont"; /* Project id 4236293 */
src: url('iconfont.woff2?t=1721283373084') format('woff2'),
url('iconfont.woff?t=1721283373084') format('woff'),
url('iconfont.ttf?t=1721283373084') format('truetype');
src: url('iconfont.woff2?t=1723190928792') format('woff2'),
url('iconfont.woff?t=1723190928792') format('woff'),
url('iconfont.ttf?t=1723190928792') format('truetype');
}
.iconfont {
@@ -13,6 +13,18 @@
-moz-osx-font-smoothing: grayscale;
}
.icon-xiaoxi-mian--:before {
content: "\e60e";
}
.icon-yun:before {
content: "\e6e2";
}
.icon-rizhi:before {
content: "\e64e";
}
.icon-fill-message-square:before {
content: "\e706";
}
File diff suppressed because one or more lines are too long
+21
View File
@@ -5,6 +5,27 @@
"css_prefix_text": "icon-",
"description": "",
"glyphs": [
{
"icon_id": "5158298",
"name": "message",
"font_class": "xiaoxi-mian--",
"unicode": "e60e",
"unicode_decimal": 58894
},
{
"icon_id": "8361930",
"name": "cloud",
"font_class": "yun",
"unicode": "e6e2",
"unicode_decimal": 59106
},
{
"icon_id": "8431682",
"name": "log",
"font_class": "rizhi",
"unicode": "e64e",
"unicode_decimal": 58958
},
{
"icon_id": "38297476",
"name": "fill-message-square",
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

+31 -1
View File
@@ -116,6 +116,18 @@
color: #C30D23 !important;
}
}
.operate-del-btn[disabled] {
color: rgba(0, 0, 0, 0.25) !important;
.operate-btn-icon {
color: rgba(0, 0, 0, 0.25) !important;
}
}
.del-btn-disabled {
color: rgba(0, 0, 0, 0.25) !important;
.operate-btn-icon {
color: rgba(0, 0, 0, 0.25) !important;
}
}
.action-span-cell > a:first-child {
margin-left: 0;
@@ -203,6 +215,11 @@
}
}
.ant-drawer-content-wrapper .ant-form-item-label,
.j-modal-box .ant-form-item-label {
overflow: hidden;
text-overflow: ellipsis;
}
.box-title-text {
line-height: 1.4;
display: flex;
@@ -750,7 +767,8 @@
color: #86909C;
display: flex;
align-items: center;
justify-content: space-between;
justify-content: flex-start;
gap: 20px;
margin-bottom: 16px;
}
@@ -988,4 +1006,16 @@
}
/deep/ .ant-table-hide-scrollbar {
scrollbar-color: unset;
}
// 日期选择框 右侧重叠的问题
.ant-calendar-picker-input.ant-input {
padding-right: 30px;
}
/deep/.ant-select-dropdown-menu-item:hover:not(.ant-select-dropdown-menu-item-disabled) {
background-color: rgba(0, 100, 250, 0.08);
}
:global(.tooltip-style .ant-tooltip-inner) {
max-height: 40vh;
overflow: auto;
}
+20 -20
View File
@@ -2,7 +2,7 @@ module.exports = {
// 标准化活动
standardizationActivity: {
nodeName: 'Node name', // 节点名称
currentNode: 'Current node',
currentNode: 'Current Node',
conferenceStatisticsList: 'Statistical List',
pleaseSelectNode: 'Please select a node',
parentNode: 'Superior Node',
@@ -11,22 +11,22 @@ module.exports = {
contactPersonContactInformation: 'Contact person contact information',
unit: 'Unit',
phone: 'Phone',
groupParticipation: 'Group participation situation',
groupParticipation: 'Group Participation Situation',
paymentInfo: 'Payment Information',
attendanceRecord: 'Meeting records',
addContactInformation: 'Add contact information',
addParticipation: 'Add participation status',
addPaymentInfo: 'Add payment information',
addAttendanceRecord: 'Add attendance record',
attendanceRecord: 'Meeting Records',
addContactInformation: 'Add Contact Information',
addParticipation: 'Add Participation Status',
addPaymentInfo: 'Add Payment Information',
addAttendanceRecord: 'Add Attendance Record',
order: 'Our company\'s ranking order in the working group',
ourPersonnel: 'Our personnel',
data: 'Information',
cost: 'Cost',
year: 'Year',
plan: 'Inside the plan',
paymentMethod: 'Payment method',
expenseReimbursement: 'Expense allocation',
meetingMaterial: 'Meeting materials',
plan: 'Inside The Plan',
paymentMethod: 'Payment Method',
expenseReimbursement: 'Expense Allocation',
meetingMaterial: 'Meeting Materials',
pleaseEnterCorrectPhone: 'Please enter the phone number in the correct format',
addUpToFourLevels: 'This node cannot add child nodes',
pleaseUploadGroupInfo: 'Please upload information on the participation of the group',
@@ -41,14 +41,14 @@ module.exports = {
questionDesc: 'Problem Description',
attach: 'Annex',
quizTime: 'Question Time',
answer: 'answer',
answer: 'Answer',
poster: 'Poster',
answerNum: 'replies',
top: '【top】',
cancelTop: 'untop',
answerNum: 'Replies',
top: '【Top】',
cancelTop: 'Cancel Top up',
setTop: 'Set To Top',
answerQuestion: 'reply to a question',
word: 'word',
answerQuestion: 'Reply to a question',
word: 'Word',
pleaseEnterAnswerDesc: 'Please enter the answer description',
answerQuestionTitle: 'Question answering',
questionDetail: 'Problem Details'
@@ -57,9 +57,9 @@ module.exports = {
// 征求意见
askForAdvice: {
standardNameNumber: 'Regulation Name / Regulations No.',
consultationCycle: 'Consultation period',
processManuscript: 'Process manuscript',
uploadDate: 'Upload date',
consultationCycle: 'Consultation Period',
processManuscript: 'Process Manuscript',
uploadDate: 'Upload Date',
detailsOfComments: 'Opinion Details'
}
}
+16 -16
View File
@@ -2,7 +2,7 @@
module.exports = {
// 一般检索
generalSearch: {
generalSearch: 'General search',
generalSearch: 'General Search',
advancedSearch: 'Advanced Search',
homePage: 'Home page',
searchHistory: 'Search History',
@@ -34,16 +34,16 @@ module.exports = {
// 高级搜索
advancedSearch: {
searchType: 'Search Type',
standardNum: 'Standard number',
standardNum: 'Standard Number',
standardName: 'Regulation Name',
releaseDate: 'Published Date',
materialDate: 'Implementation Date',
standardStatus: 'Regulation Status',
newProduceMaterialDate: 'New Certified Vehicle Implementation Date',
newAttestationMaterialDate: 'New Production Vehicle Implementation Date',
storageConditions: 'Storage conditions',
unfoldConditions: 'Unfold conditions',
retrieveCategories: 'Retrieve categories',
storageConditions: 'Storage Conditions',
unfoldConditions: 'Unfold Conditions',
retrieveCategories: 'Retrieve Categories',
standardType: 'Regulation Type',
all: 'All',
foreignStandards: 'External Standard(s) and Regulation(s)',
@@ -70,14 +70,14 @@ module.exports = {
},
// 快捷入口
quickEnter: {
quickEnter: 'Quick entrance',
menuManage: 'Menu management',
custom: 'custom',
quickEnter: 'Quick Entrance',
menuManage: 'Menu Management',
custom: 'Custom',
optionModules: 'Option Modules',
personalDisplayModule: 'Personal Display Module',
itemUnit: 'term',
itemsUnit: 'term',
listEmpty: 'List is empty',
itemUnit: 'Term',
itemsUnit: 'Term',
listEmpty: 'List Is Empty',
pleaseEnterSearchContent: 'Please enter search content',
maxSelected: 'Select up to 14 modules',
newFunction: 'New features'
@@ -89,7 +89,7 @@ module.exports = {
},
// 友情链接
friendLink: {
friendLink: 'Friendship link',
friendLink: 'Friendship Link',
more: 'More'
},
// 检索
@@ -100,11 +100,11 @@ module.exports = {
},
// 列表部分
tableList: {
newWarehousingStandards: 'Latest warehousing standards',
marketUpdates: 'Market updates',
newWarehousingEnterpriseStandards: 'Latest inbound enterprise standards',
newWarehousingStandards: 'Latest Warehousing Standards',
marketUpdates: 'Market Updates',
newWarehousingEnterpriseStandards: 'Latest Inbound Enterprise Standards',
newInterpretationStandards: 'Latest Interpretation Standards',
implementStandards: 'Implement standards',
implementStandards: 'Implement Standards',
interpretationInfo: 'Interpreting Information',
substituteStandardNumber: 'Replacing Regulations No.',
source: 'Source'
+82 -57
View File
@@ -83,7 +83,7 @@ module.exports = {
expandAll: 'Expand All',
mergeAll: 'Drop All',
treeOperation: 'Tree Operation',
creator: 'Created by',
creator: 'Creator',
sort: 'Order',
address: 'Address',
remarks: 'Comments',
@@ -106,7 +106,7 @@ module.exports = {
unwatermarkedDownload: 'Unwatermarked download',
fileName: 'File Name',
fileDeclaration: 'File Description',
newNode: 'New node',
newNode: 'New Node',
modifyNode: 'Modify Node',
deleteNode: 'Delete Node',
moveUp: 'Move Up',
@@ -125,10 +125,11 @@ module.exports = {
confirmWithdraw: 'Confirm to Withdraw?',
confirmWithdrawContent: 'Confirm the withdrawal of this data',
doNotHavePermissionDeleteData: 'Do not have permission to delete this data',
publishedAndCannotDeleted: 'Published and cannot be deleted',
noData: 'No Data',
dataLoading: 'Data loading...',
confirmDelete: 'Confirm the listing title you want to delete?',
uploadedBy: 'Uploaded By',
uploadedBy: 'Uploader',
uploadTime: 'Upload Time',
uploadFileBtn: 'Upload File',
tips: 'Tips',
@@ -136,7 +137,7 @@ module.exports = {
importTip: 'Importing, please wait',
exportFile: 'Export file',
exportWithFiles: 'Export files with files',
templateFile: 'Template file',
templateFile: 'Template File',
fileUploadSuccess: 'File uploaded successfully',
fileDownloadFail: 'File download failure',
pleaseEnterTreeSystem: 'Please enter the tree system',
@@ -155,7 +156,7 @@ module.exports = {
processExplain: 'Process Description',
entrust: 'Entrust',
turnTo: 'Turn To',
agree: 'agree',
agree: 'Agree',
reject: 'Reject',
countersign: 'Countersign',
basicInformation: 'Basic',
@@ -171,12 +172,12 @@ module.exports = {
mergeStandardInformation: 'Merge standard information',
pleaseEnterPersonnelInfo: 'Please fill in the personnel information completely',
pleaseEnterRemarks: 'Please fill in remarks',
lookDetail: 'View details',
batchReject: 'Batch rejection',
lookDetail: 'View Details',
batchReject: 'Batch Rejection',
pleaseSelectDistributeData: 'Select the data you want to distribute',
pleaseSelectDeleteData: 'Please select the data to be deleted',
deadline: 'Deadline',
submitAddAdd: 'Submit and add',
submitAddAdd: 'Submit And Add',
pleaseSelectOneStandard: 'Please select at least one criterion',
selectAtLeastOne: 'Select at least one list data',
pleaseSelectTime: 'Please select time',
@@ -184,7 +185,7 @@ module.exports = {
addATable: 'Please add a form',
select: 'Select',
attach: 'Annex',
checkedAll: 'select all',
checkedAll: 'Select All',
pleaseCompleteTableInfo: 'Please complete the form information',
node: 'Node',
atLeastSelect: 'At least choose',
@@ -211,7 +212,7 @@ module.exports = {
listName: 'Regulation List Name',
countryRegion: 'Country/Region',
ccPerson: 'CC Personnel',
startDate: 'Start date',
startDate: 'Start Date',
endDate: 'End Date',
curBefore: 'Before this day',
curAfter: 'After this day',
@@ -225,28 +226,29 @@ module.exports = {
generate: 'Generate',
vehicleType: 'Vehicle Catagory',
modelStatus: 'Developing Status',
clickToUpload: 'Click to upload',
designEngineer: 'Design engineer',
pleaseUpload: 'Please upload',
clickToUpload: 'Click To Upload',
designEngineer: 'Design Engineer',
pleaseUpload: 'Please Upload',
supportingMaterial: 'Supporting Files',
support: 'You can upload files in ',
formatUpload: ' formats. ',
formatUpload: ' Formats. ',
theSizeIs: 'Not more than ',
loginExpired: 'Login has expired',
loginExpiredMessage: 'Sorry, the login has expired. Please log in again',
logInAgain: 'Log in again',
loggingBackIn: 'Login has expired, logging in again',
fileUploadFailed: 'File upload failed',
prompted: 'prompted',
noAccess: 'no access',
prompted: 'Prompted',
noAccess: 'No Access',
resourceNotFound: 'Sorry, the resource was not found!',
networkTimeout: 'Network Timeout',
unauthorized: 'Unauthorized, please log in again',
tableDataDisabledClear: 'The table requires at least one piece of data',
autoTakeout: 'Automatic takeout',
goHandle: 'To deal with',
disableInput: 'Inhibit input',
fileUploadError: 'File upload error',
autoTakeout: 'Automatic Takeout',
goHandle: 'To Deal With',
disableInput: 'Inhibit Input',
fileUploadError: 'File Upload Error',
importMaxMsg: 'The maximum size for importing files is {size}MB',
// 标准字段
standardField: {
standardEnglishName: 'Regulation English Name',
@@ -271,7 +273,7 @@ module.exports = {
},
// 页面头部
header: {
userMenuSearchMenu: 'Search menu',
userMenuSearchMenu: 'Search Menu',
welcome: 'Welcome',
logOutOfUserMenu: 'Logout',
personalCenter: 'Personal Center',
@@ -283,9 +285,9 @@ module.exports = {
notice: 'Notice',
systemNotice: 'System Notifications',
lookMore: 'View More',
generalMsg: 'General message',
importantMsg: 'Important news',
EmergencyMsg: 'Emergency messages',
generalMsg: 'General Message',
importantMsg: 'Important News',
EmergencyMsg: 'Emergency Messages',
logOutTip: 'Do you really want to log out'
},
// 用户管理
@@ -311,7 +313,7 @@ module.exports = {
account: 'Account',
userName: 'User Name',
post: 'Post',
selectedAccount: 'Selected account?',
selectedAccount: 'Selected Account?',
// 新增、编辑用户
loginPassword: 'Login Password',
confirmPassword: 'Confirm Password',
@@ -332,7 +334,7 @@ module.exports = {
enterMailboxCorrect: 'Please enter a mailbox in the correct format',
userExists: 'User name already exists',
workNoExists: 'Job number already exists',
handStamp: 'Handwritten seal',
handStamp: 'Handwritten Seal',
uploadHandStamp: 'Upload handwritten seal'
},
// 高级查询
@@ -370,7 +372,7 @@ module.exports = {
// 选择部门弹框
selectDepartment: {
clickSelectDepartment: 'Please click Select Department',
selectDepartment: 'Select department',
selectDepartment: 'Select Department',
enterDepartmentPressEnter: 'Please enter the department name and press Enter to search'
},
// 用户回收站
@@ -406,8 +408,8 @@ module.exports = {
// 新增,编辑角色
roleDescribe: 'RoleDescribe',
lengthIsTwoToThirty: 'The length is 2 to 30 characters',
notExceed: 'not exceed',
charLength: 'characters in length',
notExceed: 'Not Exceed',
charLength: 'Characters in length',
roleCodeNotChinese: 'The role code cannot enter Chinese characters!',
// 角色权限配置
youHavePermissions: 'The permissions you have',
@@ -497,6 +499,7 @@ module.exports = {
docTool: {
// 文档拆分
split: {
textSearch: 'Text Search',
translation: 'Translation',
splitText: 'Split Library File',
importResults: 'Import Split Results',
@@ -505,23 +508,23 @@ module.exports = {
fileStatus: 'File Status',
splitTime: 'Split Time',
splitResult: 'Split Result',
batchCopy: 'Batch copy',
batchEdit: 'Batch edit',
batchCopy: 'Batch Copy',
batchEdit: 'Batch Edit',
mergerClause: 'Merge Item',
dataType: 'Data type',
dataType: 'Data Type',
split: 'Split',
article: 'Article',
clauseLabel: 'Clause label',
splitResultFile: 'Split result file',
clauseLabel: 'Article label',
splitResultFile: 'Split Result File',
splitImportResultTip: 'Upload the split result file in accordance with the relevant format requirements, please ',
clickToView: 'click to view',
clickToView: 'Click To View',
gotIt: 'Got It',
formatRequirement: 'Format requirement',
formatRequirement: 'Format Requirement',
formatRequirementContentOne: '1.The imported document is in zip format',
formatRequirementContentTwo: '2.The images are in jpg, jpeg, png, gif format',
formatRequirementContentTwo: '2.The images are in jpg, jpeg, png format',
formatRequirementContentThree: '3.The image in the document is displayed in the form of a link in the exported excel, click the link to jump to the specified local file',
formatRequirementContentFour: '4.The table in the document is displayed in the form of a link in the exported excel. Click the link to jump to the specified sheet page',
changePermissions: 'Change permissions',
changePermissions: 'Change Permissions',
pleaseSelectUser: 'Please select a user',
longTermEffectiveness: 'Long-term effectiveness',
selectFileType: 'Please select a file type',
@@ -537,7 +540,7 @@ module.exports = {
gbt: 'GB/T',
gso: 'GSO',
batchSetting: 'Batch Set',
clauseContent: 'Item Content',
clauseContent: 'Article Content',
clauseNo: 'Article No.',
clauseName: 'Article Name',
selectDirectoryTerms: 'Please Select the directory location to add terms',
@@ -549,10 +552,10 @@ module.exports = {
table: 'Table',
addQuantity: 'Add Quantity',
enterQuantity: 'Please enter quantity',
numberRows: 'Number of rows',
numberColumns: 'Number of columns',
maximumSelection: 'Maximum selection',
pieceOfData: 'Article data'
numberRows: 'Number Of Rows',
numberColumns: 'Number Of Columns',
maximumSelection: 'Maximum Selection',
pieceOfData: 'Article Data'
},
// 文档比对
comparison: {
@@ -566,7 +569,7 @@ module.exports = {
newDocumentTextName: 'Current Document Name',
newTextState: 'Current Document Status',
releaseSituation: 'Published Status',
comparisonResults: 'Comparison results',
comparisonResults: 'Comparison Results',
initiateComparison: 'Initiate Comparison',
textStatus: 'Text Status',
selectedStandard: 'Selected Standard',
@@ -600,7 +603,7 @@ module.exports = {
operator: 'Operator',
whetherToMakePublic: 'Is it publicly available',
referenceStandard: 'Involving Standards',
comparisonTime: 'Compare time',
comparisonTime: 'Compare Time',
onlineComparison: 'Online Comparison',
standardList: 'Standard List',
comparisonMaintain: 'Comparative Maintenance',
@@ -621,17 +624,17 @@ module.exports = {
// OCR文本识别
ocrTextRecognition: {
upload: 'Upload',
getFile: 'Get files',
getFile: 'Get Files',
standardCategory: 'Regulation Category',
standardNumber: 'Regulation No.',
standardName: 'Regulation Name',
textStatus: 'Text Status',
conversionResults: 'Conversion results',
conversionStatus: 'Transition state',
timeConsuming: 'Time consumption (seconds)',
conversionResults: 'Conversion Results',
conversionStatus: 'Transition State',
timeConsuming: 'Time Consumption (Seconds)',
file: 'File',
uploadPdf: 'Upload PDF',
manuallySearch: 'Manually search'
manuallySearch: 'Manually Search'
}
},
// 业务支持
@@ -646,9 +649,9 @@ module.exports = {
// 我的消息
my: {
myMessage: 'My Message',
title: 'title',
publisher: 'publisher',
readingStatus: 'readingStatus',
title: 'Title',
publisher: 'Publisher',
readingStatus: 'Reading Status',
messageContent: 'Message Content',
messageType: 'Message Type',
allLabelsRead: 'All Mark as Read',
@@ -673,7 +676,7 @@ module.exports = {
},
// 市场法规清单选择器
marketRegulationsListSelect: {
marketRegulationsListSelection: 'Selection list'
marketRegulationsListSelection: 'Selection List'
},
// 条款选择器
clauseSelect: {
@@ -699,7 +702,7 @@ module.exports = {
select: 'Select',
selectUserOrOrgan: 'Select User/Organization',
organization: 'Organization',
name: 'name',
name: 'Name',
secondLevel: 'Second Level',
threeLevel: 'Three Level'
},
@@ -708,7 +711,7 @@ module.exports = {
select: 'Select',
selectUser: 'Select User',
userList: 'Users List',
name: 'name',
name: 'Name',
post: 'Post',
selectedPersonnel: 'Selected personnel',
workGroup: 'Internal working group'
@@ -728,7 +731,7 @@ module.exports = {
cannotPreview: 'This file type does not support preview, is preparing for you to download...',
cannotUploadEmpty: 'Cannot upload empty files',
maxSize: 'The file size is limited to 500M',
onlyUploadPic: 'Please upload pictures',
onlyUploadPic: 'Please Upload Pictures',
pleaseUpload: 'Please Upload',
theFollowingDocuments: 'M The following files',
file: 'File',
@@ -777,5 +780,27 @@ module.exports = {
regulatoryComplianceAssessmentDatabase,
onlineEditor: {
missRequireField: 'Missing required fields'
},
// 登录
login: {
systemName: 'Chery Global Regulation And Standard Management System',
language: 'English',
userLogin: 'ACCOUNT LOGIN',
account: 'Account Number',
password: 'Password',
code: 'Verification Code',
login: 'Login',
showPassword: 'Show Password',
hidePassword: 'Hide Password',
loginFailMessage: 'Login Failed',
requestFailMessage: 'There was an error with the request, please try again later',
checkPhoneMessage: 'Your phone number format is incorrect',
checkCodeMessage: 'The verification code you entered is incorrect',
codeSendFail: 'Verification code sending failed',
welcome: 'Welcome',
welcomeBack: ',Welcome Back',
reLogin: 'Re Login',
phone: 'Mobile Phone Number',
codeSending: 'Verification code is being sent'
}
}
+38 -38
View File
@@ -14,30 +14,30 @@ module.exports = {
templateExport: 'Enterprise Standard Template',
pleaseSelectLeastOneNode: 'Please select Level 2 and below system first',
myCollectNotRemove: 'My collection system cannot be removed from the standard',
authorizationDepart: 'Authorized department',
authorizationUser: 'Authorized officer',
maturityDate: 'Authorization expiration date',
detailTitle: 'Enterprise Standards Details page',
evaluate: 'Evaluation of enterprise standard',
updateRecord: 'Update record',
submitQuestion: 'Submit a question',
standardResolutionSheet: 'Standard interpretation',
nodeName: 'Node name',
subjectToClause: 'Section clause',
standardContentOrRequirements: 'Standard content or requirements',
rectificationDepartment: 'Rectification department',
auditContent: 'Monitoring content',
authorizationDepart: 'Authorized Department',
authorizationUser: 'Authorized Officer',
maturityDate: 'Authorization Expiration Date',
detailTitle: 'Enterprise Standards Details Page',
evaluate: 'Evaluation Of Enterprise Standard',
updateRecord: 'Update Record',
submitQuestion: 'Submit A Question',
standardResolutionSheet: 'Standard Interpretation',
nodeName: 'Node Name',
subjectToClause: 'Article',
standardContentOrRequirements: 'Enterprise Standard Content',
rectificationDepartment: 'Rectification Dept.',
auditContent: 'Supervisory Contents',
disabledBatchDel: 'If the selected data has no operation permission, select another data',
pleaseSelectUserOrDepart: 'The authorized department and authorized person must select at least one',
youNot: "You didn't",
dataPremissReCheck: 'Data permission, please re-select',
authorizationExpirationDate: 'Authorization expiration date',
cancelAuthor: 'deauthorize',
authorizationDate: 'Authorization date',
authorizationStandard: 'Authorized bid',
cancelAuthor: 'Deauthorize',
authorizationDate: 'Authorization Date',
authorizationStandard: 'Authorized Bid',
confirmCancelAuthor: 'Confirm the deauthorization?',
viewAll: 'View all',
inputExample: 'Input example',
viewAll: 'View All',
inputExample: 'Input Example',
nullAutoCreate: 'Do not fill automatically generated',
cannotJumpAfterDeletion: 'After deletion, other places using the standard cannot jump, confirm deletion?'
},
@@ -46,9 +46,9 @@ module.exports = {
enterpriseStandardNum: 'Enterprise Standard No.',
enterpriseStandardName: 'Enterprise Standard',
publishDate: 'Published Date',
reviewDate: 'Review date',
initReview: 'Initiate a review',
reviewResult: 'Review results',
reviewDate: 'Review Date',
initReview: 'Initiate A Review',
reviewResult: 'Review Results',
principalDrafter: 'Chief Drafter',
mainDraftingUnit: 'Chief Drafting Unit'
},
@@ -63,24 +63,24 @@ module.exports = {
headOfMainDraftingUnit: 'Chief Drafting Unit Head',
projectStatus: 'Project Status',
changeState: 'Change Status',
pusherWorkNo: 'Promote artificial numbers',
pusherWorkNo: 'Promote Artificial Numbers',
standardType: 'Regulation Type',
revisionType: 'Revision type',
planApprovalDate: 'Planned approval date',
createDate: 'Creation date',
revisionType: 'Revision Type',
planApprovalDate: 'Planned Approval Date',
createDate: 'Creation Date',
exportFileName: 'Enterprise Standard Schedule',
authDepartment: 'Authorized department',
enterpriseStandardCode: 'Enterprise standard code',
suitUnit: 'Cooperate with units',
standardPusher: 'Standard promoter',
draftPlanFinishDate: 'Draft plan completion date',
authDepartment: 'Authorized Department',
enterpriseStandardCode: 'Enterprise Standard Code',
suitUnit: 'Cooperate With Units',
standardPusher: 'Standard Promoter',
draftPlanFinishDate: 'Draft Plan Completion Date',
exposureDraftPlanFinishDate: 'Draft for Solicitation of Comments Plan Completion Date',
planSubmissionDate: 'Planned approval date',
draftFinishDate: 'Draft completion date',
submitDraftDate: 'Submission date of draft',
isAskForAdvice: 'Whether to solicit opinions',
planSubmissionDate: 'Planned Approval Date',
draftFinishDate: 'Draft Completion Date',
submitDraftDate: 'Submission Date Of Draft',
isAskForAdvice: 'Whether To Solicit Opinions',
exposureDraftFinishDate: 'Date of completion of the draft for soliciting opinions',
reviewDate: 'Review date',
reviewDate: 'Review Date',
submissionDate: 'Approval Date',
releaseDate: 'Published Date',
detailTitle: 'Enterprise Standard Plan Details Page',
@@ -89,10 +89,10 @@ module.exports = {
gradeClassification: 'Classification of Enterprise Standard Levels',
projectType: 'Project Type',
rangeOfApplication: 'Scope',
enterpriseStandardSystem: 'Enterprise standard system',
partName: 'Classification of components',
enterpriseStandardSystem: 'Enterprise Standard System',
partName: 'Classification Of Components',
scopeOfApplication: 'Scope of application of the standard',
compilationIllustration: 'Compilation instructions',
compilationIllustration: 'Compilation Instructions',
projectBackground: 'Background and Basis of Project Proposal',
similarNaStandardsAnalysis: 'Analysis of similar international, national, and industry standards',
similarEnStandardsAnalysis: 'Comparative analysis of similar standards in enterprises',
@@ -95,7 +95,7 @@ module.exports = {
compilationIllustration: '编制说明',
projectBackground: '立项背景、立项依据',
similarNaStandardsAnalysis: '国际、国家及行业同类标准分析',
similarEnStandardsAnalysis: '企业同类标准比分析',
similarEnStandardsAnalysis: '企业同类标准比分析',
standardLeadingNecessity: '立项标准的领先性与必要性',
projectExpectedEffects: '立项目的及预期效果等'
}
+2 -2
View File
@@ -43,14 +43,14 @@ module.exports = {
},
// 任务转交
taskCareOf: {
basicLibraryInfo: 'Basic library information',
basicLibraryInfo: 'Basic Library Information',
processInfo: 'Process Information',
user: 'User',
type: 'Type',
standardNum: 'Regulation No.',
standardName: 'Regulation Name',
role: 'Role',
transferUser: 'Transferred by',
transferUser: 'Transferred By',
transfer: 'Transmit',
nodeName: 'Node name'
}
+28 -28
View File
@@ -1,37 +1,37 @@
module.exports = {
projectName: 'Project name', // 项目名称
workOrderNumber: 'Work order number', // 工作令编号
projectHealthStatus: 'Project health', // 项目健康度
projectName: 'Project Name', // 项目名称
workOrderNumber: 'Work order Number', // 工作令编号
projectHealthStatus: 'Project Health', // 项目健康度
selectProject: 'Select Project', // 选择项目
projectLevel: 'Project level', // 项目级别
projectLevel: 'Project Level', // 项目级别
// 车型项目库
vehicleItemLibrary: {
vehicleItemLibrary: 'Vehicle item library', // 车型项目库
PMSInfoSynchronization: 'PMS information synchronization', // PMS信息同步
projectSource: 'Project source', // 项目来源
projectLeader: 'Project leader', // 项目负责人,
vehicleItemLibrary: 'Vehicle Item Library', // 车型项目库
PMSInfoSynchronization: 'PMS Information Synchronization', // PMS信息同步
projectSource: 'Project Source', // 项目来源
projectLeader: 'Project Leader', // 项目负责人,
PMSDetails: 'PMS Details', // PMS详情
noMatchItemDetails: 'Details of non compliant items',
riskOverview: 'Risk overview', // 风险性总览
conform: 'Conform to', // 符合
riskOverview: 'Risk Overview', // 风险性总览
conform: 'Conform To', // 符合
inconformity: 'Inconformity', // 不符合
toBeVerified: 'To be verified', // 待验证
uninvolved: 'Not involve', // 不涉及
toBeVerified: 'To Be Verified', // 待验证
uninvolved: 'Not Involve', // 不涉及
regulationsList: 'Regulation List',
standardNumberStandardName: 'Regulation No. / Regulation Name',
transfer: 'Transfer',
standardNumber: 'Regulation No.',
standardName: 'Regulation Name',
englishName: 'English name',
englishName: 'English Name',
standardState: 'Regulation Status',
applicableVehicleType: 'Vehicle Catagory',
productionDate: 'On the production date',
newModelImplementationDate: 'New model implementation date',
processState: 'Process state',
productionDate: 'On The Production Date',
newModelImplementationDate: 'New Model Implementation Date',
processState: 'Process State',
evaluationResult: 'Evaluation Result',
responsibleDepartment: 'Responsible Dept.',
evaluationResultHistory: 'Evaluation result history',
evaluationResultHistory: 'Evaluation Result History',
evaluationProcessDetail: 'Evaluation Process Details',
standardNumberClauseNumber: 'Regulation No. / Article No.',
projectNumber: 'Project No.',
@@ -39,27 +39,27 @@ module.exports = {
dateOfEvaluation: 'Date of Assessment',
nonConformanceTerm: 'Non-conformance',
solutions: 'Countermeasures',
riskPoint: 'Risk points',
verificationScheme: 'Authentication scheme',
riskPoint: 'Risk Points',
verificationScheme: 'Authentication Scheme',
estimateTheChangeCycle: 'Estimated Change Cycle',
estimatedDateOfCompletionOfRectification: 'Expected completion date of rectification'
},
noncoincidenceItem: {
noncoincidenceItem: 'Non compliant items',
noncoincidenceItem: 'Non Compliant Items',
batchClose: 'Batch Close',
actualRectificationCompletionDate: 'Actual completion date of rectification',
projectSelection: 'Project selection',
relevantProject: 'Related projects',
relatedProcess: 'Related processes',
projectSelection: 'Project Selection',
relevantProject: 'Related Projects',
relatedProcess: 'Related Processes',
viewNonMatchItemEvaluationResult: 'View the rectification results of non compliant items',
involvedItem: 'Involving projects'
involvedItem: 'Involving Projects'
},
specialProjectLibrary: {
specialProjectLibrary: 'Special Project Library',
vehicleSeries: 'Model series',
complianceAssessmentResults: 'Compliance assessment results',
basisDescription: 'According to the description',
whetherToApproveAProjectOrNot: 'Is the project approved',
vehicleSeries: 'Model Series',
complianceAssessmentResults: 'Compliance Assessment Results',
basisDescription: 'According To The Description',
whetherToApproveAProjectOrNot: 'Is The Project Approved',
vehicleModel: 'Vehicle Catagory',
supportingMaterial: 'Supporting Files'
}
@@ -17,7 +17,7 @@ module.exports = {
rectificationCycle: 'Rectification Time',
rectificationCost: 'Rectification Costs',
sharedWithOtherProjects: 'Commonality',
costOfThisItemAfterSharing: 'Expenses after Sharing',
costOfThisItemAfterSharing: 'Expenses After Sharing',
remarks: 'Note',
supportingMaterial: 'Supporting Files'
},
@@ -36,7 +36,7 @@ module.exports = {
rectificationCycle: 'Rectification Time',
rectificationCost: 'Rectification Costs',
sharedWithOtherProjects: 'Commonality',
costOfThisItemAfterSharing: 'Expenses after Sharing',
costOfThisItemAfterSharing: 'Expenses After Sharing',
isHaveClosed: 'Select the data whose rectification status is to be rectified and close it',
exportName: 'Non-conformance term Library table'
}
@@ -1,29 +1,29 @@
module.exports = {
configStandard: 'Configuration standard', // 配置标准
removeStandard: 'Removal criteria', // 移出标准
nodeName: 'Node name', // 节点名称
nodeOrder: 'Node ordering', // 节点排序
configStandard: 'Configuration Standard', // 配置标准
removeStandard: 'Removal Criteria', // 移出标准
nodeName: 'Node Name', // 节点名称
nodeOrder: 'Node Ordering', // 节点排序
configStandardNoTreeNode: 'Please select Level 2 and below system first', // 请先选择二级及以下体系
selectLeastOneTableData: 'Select at least one list data', // 选中至少一条列表数据
standardResolutionSheet: 'Standard interpretation', // 标准解读
updateRecord: 'Update record', // 更新记录
submitQuestion: 'Submit a question', // 提交问题
standardCatalogue: 'Standard catalogue', // 标准目录
clauseLabel: 'Clause label', // 条文标签
updateRecord: 'Update Record', // 更新记录
submitQuestion: 'Submit A Question', // 提交问题
standardCatalogue: 'Standard Catalogue', // 标准目录
clauseLabel: 'Article Label', // 条文标签
translation: 'Translation',
clauseNumber: 'Article number', // 条文号
clauseTitle: 'Title of article', // 条文标题
regulatoryRequirementsType: 'Types of regulatory requirements', // 法规要求类型
functionalClassification: 'Functional classification', // 功能分类
functionalSpecialty: 'Functional specialty', // 功能专业
blockCoding: 'Block coding', // 分组编码
groupName: 'Group name', // 分组名称
clauseTitle: 'Title of Article', // 条文标题
regulatoryRequirementsType: 'Types of Regulatory Requirements', // 法规要求类型
functionalClassification: 'Functional Classification', // 功能分类
functionalSpecialty: 'Functional Specialty', // 功能专业
blockCoding: 'Block Coding', // 分组编码
groupName: 'Group Name', // 分组名称
newCertificationImplementationTime: 'New Production Vehicle Implementation Date', // 新认证实施时间
certifiedImplementationTime: 'Certified implementation time', // 已认证实施时间
newRegistrationImplementationTime: 'New registration implementation time', // 新注册实施时间
certifiedImplementationTime: 'Certified Implementation Time', // 已认证实施时间
newRegistrationImplementationTime: 'New Registration Implementation Time', // 新注册实施时间
applicableVehicleType: 'Vehicle Catagory', // 适用车型
dynamicType: 'Power Propulsion Type', // 动力类型
inputExample: 'Input example:', // 输入示例
inputExample: 'Input Example:', // 输入示例
applicableComponents: 'Applicable Components',
involvingSystemsComponents: 'Related System(s)/Component(s)',
applications: 'Vehicle Catagory',
@@ -52,9 +52,9 @@ module.exports = {
// 资料中心
profileCenter: {
typeOfOwnership: 'Type of ownership',
uploadData: 'Upload data',
addAPeer: 'Add a peer',
newChild: 'New child',
uploadData: 'Upload Data',
addAPeer: 'Add A Peer',
newChild: 'New Child',
pleaseSelectTheDirectoryOnTheLeft: 'Please select the directory on the left'
},
// 市场法规清单
@@ -68,11 +68,11 @@ module.exports = {
listVersion: 'Version',
releaseTime: 'Published Date',
listState: 'Status',
customName: 'Custom name',
securityClass: 'Confidential level',
listDeclaration: 'Manifest declaration',
customName: 'Custom Name',
securityClass: 'Confidential Level',
listDeclaration: 'Manifest Declaration',
templateName: 'Market regulation list import template',
historicalVersion: 'Historical version',
historicalVersion: 'Historical Version',
standardExist: 'The standard already exists',
haveStandardExist: 'Some standards already exist',
pleaseSelectAListPublish: 'Please select a list to publish',
@@ -89,7 +89,7 @@ module.exports = {
applicableVehicleType: 'Vehicle Catagory',
authenticationObject: 'Certification Item',
certifiedDeliverables: 'Verification',
type: 'Type',
type: 'Requirement Category',
dynamicType: 'Power Propulsion Type',
mainControlDepartment: 'Main Responsible Dept.',
masterControlDepartmentProfessionalModule: 'Module of Main Responsible Dept. ',
@@ -97,7 +97,8 @@ module.exports = {
associateDepartmentSpecializedModules: 'Module of Related Dept. ',
batchRestriction: 'Production Amount',
automaticDrivingLevel: 'Automatic Driving Level',
requirementType: 'Optional/Compulsory'
requirementType: 'Optional/Compulsory',
remarks: 'Note'
},
// 标准主计划
standardMasterPlan: {
@@ -97,7 +97,8 @@ module.exports = {
associateDepartmentSpecializedModules: '关联部门专业模块',
batchRestriction: '批量限制',
automaticDrivingLevel: '自动驾驶等级',
requirementType: '要求类型'
requirementType: '要求类型',
remarks: '备注'
},
// 标准主计划
standardMasterPlan: {
+17 -17
View File
@@ -15,8 +15,8 @@ module.exports = {
labelName: 'Tag Name',
labelType: 'Tag Type',
essentialInformation: 'Basis',
domesticLaws: 'Domestic regulations',
foreignStandards: 'Overseas standards',
domesticLaws: 'Domestic Regulations',
foreignStandards: 'Overseas Standards',
foreignStandardRegulations: 'External Standards',
enterpriseStandards: 'Enterprise Standards',
clauseSplitting: 'Articles',
@@ -51,10 +51,10 @@ module.exports = {
name: 'Name',
dataValue: 'Value',
parentName: 'Parent Name',
select: 'select',
select: 'Select',
tree: 'Tree',
pleaseEnterYourEnglishName: 'Please input english name',
usableRange: 'Scope of use'
usableRange: 'Scope Of Use'
},
// 内部工作组
internalWorkGroup: {
@@ -63,8 +63,8 @@ module.exports = {
workNo: 'Job Number',
role: 'Role',
post: 'Position',
templateName: 'Internal workgroup table template',
exportName: 'Internal workgroup table',
templateName: 'Internal Workgroup Table Template',
exportName: 'Internal Workgroup Table',
nodeName: 'Branch Name',
adminAuthority: 'Administration Privileges',
workGroupName: 'Workgroup Name',
@@ -93,35 +93,35 @@ module.exports = {
contact: {
departName: 'Department Name',
standardizationEngineer: 'Standardization Engineer',
contactPerson: 'Contact person',
contactPerson: 'Contact Person',
contactPersonSupervisorLevelLeader: 'Departmental liaison person, supervisor level leader'
},
// 绑定零部件
bindingParts: {
partNumber: 'Part Number',
partName: 'Component Name',
bindingPersonnel: 'Binding personnel',
useBindingRelationship: 'Use binding relationships',
bindingPersonnel: 'Binding Personnel',
useBindingRelationship: 'Use Binding Relationships',
clauseNumber: 'Article No.',
bindingTime: 'Binding time',
bindingTime: 'Binding Time',
confirmUseBindRelationship: 'Confirm the use of binding relationship',
isUseBindRelationship: 'Whether to use binding relationship?',
isBringIn: 'Whether to introduce',
isBringIn: 'Whether To Introduce',
haveBind: 'Under the current component classification structure, there are already',
isBringInRelation: 'Bind standard association relationships, do you want to introduce corresponding relationships?'
},
// 分组管理
groupMange: {
groupName: 'Group name',
peopleNumber: 'Number of people',
groupMembers: 'Group members',
groupName: 'Group Name',
peopleNumber: 'Number Of People',
groupMembers: 'Group Members',
userName: 'User Name'
},
// 未发送成功的消息管理
notSentMessage: {
messageType: 'Message type',
pushContent: 'Push content',
pushAddress: 'Push address',
messageType: 'Message Type',
pushContent: 'Push Content',
pushAddress: 'Push Address',
resend: 'Resend',
areYouSureResend: 'Are you sure to resend it'
}
+37 -34
View File
@@ -18,25 +18,27 @@ module.exports = {
stageWeAreIn: 'Regulation Status',
materialDate: 'Implementation Date',
applicableMarket: 'Applicable Market',
ccPerson: 'Cc person',
competentDepartment: 'Competent department',
mainControlDepartment: 'Main control department',
ccPerson: 'CC Person',
briefDescription: 'The statute requires a brief description'
},
// 法规符合性排查流程
regulatoryComplianceCheckProcess: {
addStandard: 'Addition standard',
manualAddition: 'Manual addition',
vehicleTypeItem: 'Vehicle type item',
addStandard: 'Addition Standard',
manualAddition: 'Manual Addition',
vehicleTypeItem: 'Vehicle Type Item',
applicableMarket: 'Applicable Market',
isAlike: 'Differences',
resolutionAttachment: 'Resolution attachment',
resolutionAttachment: 'Resolution Attachment',
decompositionSingleSource: 'Decomposition single source',
pleaseAddStandard: 'Please add a new criterion first',
modelStatus: 'Model status',
modelStatus: 'Model Status',
primaryInvestigator: 'Primary investigator',
checkWhetherTheTaskIsDelivered: 'Check whether the task is delivered',
batchSelector: 'Batch selector',
batchSelector: 'Batch Selector',
mainFinderImportTemplate: 'Compliance check process Import template',
countersigningOfficer: 'Countersigning officer',
countersigningOfficer: 'Countersigning Officer',
auditor: 'Auditor',
approvingOfficer: 'Approving officer',
evaluationResult: 'Evaluation Result',
@@ -45,27 +47,28 @@ module.exports = {
rectificationCycle: 'Rectification Time',
rectificationCost: 'Rectification Costs',
sharedWithOtherProjects: 'Commonality',
costOfThisItemAfterSharing: 'Expenses after Sharing',
costOfThisItemAfterSharing: 'Expenses After Sharing',
appraiser: 'Evaluator',
salvageListTemplateDownload: 'Split single file template download',
salvageListTemplateName: 'Decomposes a single file upload template',
carTypeFileTemplateDownload: 'Model project file template download',
carTypeFileTemplateName: 'Model project file upload template',
pleaseGenerate: 'Please generate data',
pleaseAnewGenerate: 'Please re-generate the data',
pleaseClickNext: 'Please click Next to display the information',
pleaseSelectDesignEngineer: 'Please select Design Engineer',
atLeastSelectOneDesignEngineer: 'Please select at least one design engineer'
},
// 市场清单发布流程
marketListReleaseProcess: {
englishName: 'English name',
englishName: 'English Name',
newProductionVehicleImplementationDate: 'New Certified Vehicle Implementation Date',
newCertifiedVehicleImplementationDate: 'New Production Vehicle Implementation Date',
applicableCountryRegion: 'Country/Region',
applicableVehicleType: 'Vehicle Catagory',
authenticationObject: 'Certification Item',
certifiedDeliverables: 'Verification',
type: '类型',
type: 'Type',
dynamicType: 'Power Propulsion Type',
mainControlDepartment: 'Main Responsible Dept.',
masterControlDepartmentProfessionalModule: 'Module of Main Responsible Dept. ',
@@ -116,49 +119,49 @@ module.exports = {
pFive: 'P5 Deliverables',
notes: 'Note',
configurationRequirements: 'Optional / Compulsory',
countersigningPerson: 'Countersigning personnel',
countersigningPerson: 'Countersigning Personnel',
reviewersPerson: 'Reviewer',
approvedPerson: 'Approved personnel',
batchEdit: 'Bulk edit',
approvedPerson: 'Approved Personnel',
batchEdit: 'Bulk Edit',
pleaseSelectInterpreter: 'Select at least one piece of data for each department involved to interpret',
pleaseSelectClause: 'Please select terms',
pleaseSelectClause: 'Please Select Terms',
interpretationDistribution: 'Interpretation and Distribution',
interpretationTable: 'Interpretation Table',
interpretationAttributes: 'Interpretation of attributes',
interpretationAttributes: 'Interpretation of Attributes',
summarySingleChoiceTip: 'Need to summarize as single choice'
},
// 流程配置
processConfig: {
processType: 'Process Type',
editFlowchart: 'Edit flowchart',
editFlowNode: 'Edit process nodes',
editFlowchart: 'Edit Flowchart',
editFlowNode: 'Edit Process Nodes',
deploy: 'Arrange'
},
processDetail: {
urgeHandle: 'Urge sb. to do STH.',
flowChart: 'Flow chart',
taskNode: 'Task node',
taskHandler: 'Task handler',
completionTime: 'Completion time',
timeConsuming: 'Time consuming',
approvalOpinion: 'Approval opinion',
opinionContent: 'Opinion content'
flowChart: 'Flow Chart',
taskNode: 'Task Node',
taskHandler: 'Task Handler',
completionTime: 'Completion Time',
timeConsuming: 'Time Consuming',
approvalOpinion: 'Approval Opinion',
opinionContent: 'Opinion Content'
},
// 流程中心
processCenter: {
todoProcess: 'To-do',
doneProcess: 'Completed',
sentProcess: 'Issued',
monitorProcess: 'Follow up',
monitorProcess: 'Follow Up',
draft: 'Draft',
processNumber: 'Process number',
processType: 'Process type',
nodeName: 'Node name',
processNumber: 'Process Number',
processType: 'Process Type',
nodeName: 'Node Name',
initiator: 'Initiator',
receivingTaskTime: 'Receiving task time',
currentProcessor: 'Current processor',
finishTime: 'Completion time',
processState: 'Process state',
processTime: 'Process Time (hours)'
receivingTaskTime: 'Receiving Task Time',
currentProcessor: 'Current Processor',
finishTime: 'Completion Time',
processState: 'Process State',
processTime: 'Process Time (Hours)'
}
}
+3
View File
@@ -18,6 +18,8 @@ module.exports = {
stageWeAreIn: '所处阶段',
materialDate: '实施日期',
applicableMarket: '适用市场',
competentDepartment: '主管部门',
mainControlDepartment: '主控部门',
ccPerson: '抄送人员',
briefDescription: '法规要求简要描述'
},
@@ -52,6 +54,7 @@ module.exports = {
carTypeFileTemplateDownload: '车型项目文件模板下载',
carTypeFileTemplateName: '车型项目文件上传模板',
pleaseGenerate: '请先生成数据',
pleaseAnewGenerate: '请重新生成数据',
pleaseClickNext: '请点击下一步显示信息',
pleaseSelectDesignEngineer: '请选择设计工程师',
atLeastSelectOneDesignEngineer: '请至少选择一条数据的设计工程师'
+41 -16
View File
@@ -125,6 +125,7 @@ module.exports = {
confirmWithdraw: '确认撤回?',
confirmWithdrawContent: '确认撤回该条数据?',
doNotHavePermissionDeleteData: '没有权限删除此数据',
publishedAndCannotDeleted: '已发布不能删除',
noData: '暂无数据',
dataLoading: '数据加载中...',
confirmDelete: '确定删除?',
@@ -247,6 +248,7 @@ module.exports = {
goHandle: '去处理',
disableInput: '禁止输入',
fileUploadError: '文件上传错误',
importMaxMsg: '导入文件最大{size}MB',
// 标准字段
standardField: {
standardEnglishName: '标准英文名称',
@@ -497,6 +499,7 @@ module.exports = {
docTool: {
// 文档拆分
split: {
textSearch: '文本搜索',
translation: '译文',
splitText: '拆分已入库文本',
importResults: '导入拆分结果',
@@ -518,7 +521,7 @@ module.exports = {
gotIt: '知道了',
formatRequirement: '格式要求',
formatRequirementContentOne: '1.导入的文档是zip格式',
formatRequirementContentTwo: '2.图片为jpg、jpeg、png、gif格式',
formatRequirementContentTwo: '2.图片为jpg、jpeg、png格式',
formatRequirementContentThree: '3.文档中的图片,在导出excel中以链接的形式展示,点击链接跳转到本地指定的文件',
formatRequirementContentFour: '4.文档中的表格,在导出excel中以链接的形式展示,点击链接跳转到指定的sheet页面',
changePermissions: '更改权限',
@@ -537,7 +540,7 @@ module.exports = {
gbt: 'GB/T',
gso: 'GSO',
batchSetting: '批量设置',
clauseContent: '条内容',
clauseContent: '条内容',
clauseNo: '条款号',
clauseName: '条款名称',
selectDirectoryTerms: '请选择添加条款的目录位置',
@@ -566,29 +569,29 @@ module.exports = {
newDocumentTextName: '新文档文本名称',
newTextState: '新文本状态',
releaseSituation: '发布情况',
comparisonResults: '比结果',
initiateComparison: '发起比',
comparisonResults: '比结果',
initiateComparison: '发起比',
textStatus: '文本状态',
selectedStandard: '所选标准',
noComparisonDocumentSelected: '未选择比文档',
noComparisonDocumentSelected: '未选择比文档',
remarkInfo: '备注信息',
initiateDocumentComparison: '发起文档比',
documentComparison: '文档比',
viewTheComparisonResults: '查看比结果',
initiateDocumentComparison: '发起文档比',
documentComparison: '文档比',
viewTheComparisonResults: '查看比结果',
addFullTextComment: '添加全文评论',
turnOffAutomaticMatching: '关闭自动匹配',
turnOnAutoMatch: '打开自动匹配',
comparisonOfArticles: '条款比评论',
comparisonOfArticles: '条款比评论',
consistentAssessment: '一致',
fullTextComments: '全文评论',
pleaseSelectTheDataCompared: '请选择需要比的数据',
pleaseSelectTheDataCompared: '请选择需要比的数据',
viewVarianceAssessment: '查看差异项',
viewConsistentAssessment: '查看一致项',
viewAll: '查看全部',
exportComparisonReport: '导出比报告',
exportComparisonReport: '导出比报告',
comment: '评论',
comparisonDifferenceComment: '比差异评论',
comparativeComments: '比评论',
comparisonDifferenceComment: '比差异评论',
comparativeComments: '比评论',
publishComment: '发表评论',
noComment: '暂无评论',
replyToComments: '回复评论'
@@ -601,11 +604,11 @@ module.exports = {
whetherToMakePublic: '是否公开',
referenceStandard: '涉及标准',
comparisonTime: '比对时间',
onlineComparison: '在线比',
onlineComparison: '在线比',
standardList: '标准列表',
comparisonMaintain: '比维护',
comparisonMaintain: '比维护',
listDetails: '清单详情',
comparativeAnalysisResult: '比分析结果',
comparativeAnalysisResult: '比分析结果',
exitEdit: '退出编辑',
specialty: '特点',
comparisonItem: '比对项',
@@ -777,5 +780,27 @@ module.exports = {
regulatoryComplianceAssessmentDatabase,
onlineEditor: {
missRequireField: '缺少必填字段'
},
// 登录
login: {
systemName: '奇瑞标准法规管理系统',
language: '中文',
userLogin: '账号登录',
account: '账号',
password: '密码',
code: '验证码',
login: '登录',
showPassword: '显示密码',
hidePassword: '隐藏密码',
loginFailMessage: '登录失败',
requestFailMessage: '请求出现错误,请稍后再试',
checkPhoneMessage: '您的手机号码格式不正确',
checkCodeMessage: '您输入的验证码不正确',
codeSendFail: '验证码发送失败',
welcome: '欢迎',
welcomeBack: ',欢迎回来',
reLogin: '重新登陆',
phone: '手机号',
codeSending: '验证码发送中'
}
}
+14 -1
View File
@@ -44,6 +44,12 @@ export default {
type: Array,
required: false,
default: () => []
},
// 是否返回区间,只选择一侧,另一侧会返回一个minDate或maxDate
returnInterval: {
type: Boolean,
required: false,
default: true
}
},
data () {
@@ -112,7 +118,14 @@ export default {
},
// 触发change事件
triggerChange () {
this.$emit('change', [this.startDate || minDate, this.endDate || maxDate])
const startDate = this.startDate || minDate
const endDate = this.endDate || maxDate
// 是否一侧为空时,返回最大日期或最小日期
if (this.returnInterval) {
this.$emit('change', [startDate, endDate])
} else {
this.$emit('change', [this.startDate, this.endDate])
}
},
// 记录最后一次点击的日期
clickCalendarDate (val) {
+15 -1
View File
@@ -4,7 +4,7 @@
v-on="$listeners"
:row-key="rowKey"
:bordered="bordered"
:scroll="{x: '100%'}"
:scroll="scroll"
:row-class-name="lineCanExpand"
:columns="columns"
:expandedRowKeys.sync="expandedRowKeys"
@@ -23,6 +23,13 @@
<div class="table-text">{{ text || text === 0 ? text : global.emptyLine }}</div>
</a-tooltip>
</template>
<!--增加数据字典双语翻译的插槽-->
<template slot="dictText" slot-scope="text, record, index, column">
<a-tooltip overlay-class-name="tooltip-style">
<template slot="title">{{ (isChinese() ? text : record[column.key + 'En']) || (isChinese() ? text : record[column.key + 'En']) === 0 ? (isChinese() ? text : record[column.key + 'En']) : global.emptyLine }}</template>
<div class="table-text">{{ (isChinese() ? text : record[column.key + 'En']) || (isChinese() ? text : record[column.key + 'En']) === 0 ? (isChinese() ? text : record[column.key + 'En']) : global.emptyLine }}</div>
</a-tooltip>
</template>
<!-- 表格扩展插槽 -->
<div slot="expandedRowRender" slot-scope="record, index" style="margin: 0">
<!-- 如果表单会依赖某个字段变化就需要加判断循环判断extraForm中的表单 -->
@@ -189,6 +196,13 @@ export default {
name: 'JExpandTable',
components: { JUpload },
props: {
scroll: {
type: Object,
required: false,
default: () => {
return { x: '100%' }
}
},
columns: {
type: Array,
default: () => {
+2 -1
View File
@@ -101,7 +101,8 @@ export default {
const oldVal = this.checkedValue.join(',')
if (newVal !== oldVal) {
if (newVal) {
this.checkedValue = [...new Set(newVal.split(','))]
// 去重、去掉格式不对的
this.checkedValue = [...new Set(newVal.split(','))].filter(dateStr => dateStr && /^\d{4}-\d{2}-\d{2}$/.test(dateStr))
} else {
this.checkedValue = []
}
+2 -1
View File
@@ -250,7 +250,8 @@ export default {
{
dataIndex: 'finishFlag_dictText',
title: this.$t('status'),
width: 100
width: 100,
scopedSlots: { customRender: 'dictText' }
}
],
image: false,
+71 -11
View File
@@ -4,18 +4,30 @@
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24" style="margin: 0;">
<!--适用零部件-->
<!--文本搜索-->
<a-col :md="4" :sm="12">
<a-form-item :label="$t('standardRegulationLibrary.applicableComponents')">
<a-input :placeholder="$t('pleaseEnter') + $t('standardRegulationLibrary.applicableComponents')"
v-model="queryParam.applicable_components"></a-input>
<a-form-item :label="$t('docTool.split.textSearch')">
<a-input :placeholder="$t('pleaseEnter') + $t('docTool.split.textSearch')"
v-model="queryParam.item_content"></a-input>
</a-form-item>
</a-col>
<!--涉及系统/部件-->
<a-col :md="4" :sm="12">
<a-form-item :label="$t('standardRegulationLibrary.involvingSystemsComponents')">
<a-input :placeholder="$t('pleaseEnter') + $t('standardRegulationLibrary.involvingSystemsComponents')"
v-model="queryParam.keywords"></a-input>
<!--<a-input :placeholder="$t('pleaseEnter') + $t('standardRegulationLibrary.involvingSystemsComponents')"-->
<!-- v-model="queryParam.part_name"></a-input>-->
<a-tree-select
tree-node-filter-prop="title"
v-model="queryParam.part_name"
:maxTagCount="1"
:getPopupContainer="triggerNode=> triggerNode.parentNode"
:tree-data="systemPartList"
:replaceFields="{key: 'id', value: 'id', title: 'name', children: 'childPartNameList'}"
show-search
allowClear
:filterTreeNode="filterTreeOption"
:placeholder="$t('pleaseEnter') + $t('standardRegulationLibrary.involvingSystemsComponents')"
/>
</a-form-item>
</a-col>
<!--适用车型-->
@@ -85,7 +97,7 @@
:replaceFields="{children: 'children', key: 'id'}">
<a-icon slot="switcherIcon" type="down" :style="{ fontSize: '12px', color: '#103770' }" />
<template slot="title" slot-scope="{name, itemName}">
<span :style="name && name.indexOf('.')===-1?'font-weight: 600;':''">{{ `${name} ${itemName || ''}` }}</span>
<span :style="name && name.indexOf('.')===-1?'font-weight: 600;':''" :title="`${name} ${itemName || ''}`">{{ `${name} ${itemName || ''}` }}</span>
</template>
</a-tree>
</div>
@@ -111,7 +123,7 @@
</a-button>
</div>
<!--条文内容-->
<div class="standard-content">
<div class="standard-content" ref="standardContent">
<div class="clause-content-item"
v-for="clause in clauseContentList"
:key="clause.id"
@@ -199,7 +211,12 @@
</template>
<script>
import { getDocSplitEditForm, getStandardInterpretation, previewDocSplit } from '@api/documentToolApi'
import {
getDocSplitEditForm,
getInvolvedSystem,
getStandardInterpretation,
previewDocSplit
} from '@api/documentToolApi'
import { FieldType } from '@/enums/commonEnums'
import VueDraggableResizable from 'vue-draggable-resizable'
import { queryDepartTreeList } from '@api/api'
@@ -221,7 +238,16 @@ export default {
},
data () {
return {
labelCol: {
xs: { span: 24 },
sm: { span: 6 }
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 16 }
},
queryParam: {},
systemPartList: [], // 涉及系统部件下拉
categoryTreeList: [], // 组织机构下拉框数据
showClauseLabel: true, // 是否展示条文标签
// 条文标签字段
@@ -239,7 +265,18 @@ export default {
translationContentList: [], // 译文内容的数据
clauseLabelInfo: {}, // 条文标签数据
clauseLabelHideField: ['item_content', 'item_title', 'translation'],
needDictField: [FieldType.USER_SINGLE.value, FieldType.ORGAN_SINGLE.value, FieldType.STANDARD_MORE.value, FieldType.ORGAN_MORE.value, FieldType.OPTION_SINGLE.value, FieldType.OPTION_MORE.value, FieldType.TREE.value],
needDictField: [
FieldType.USER_SINGLE.value,
FieldType.ORGAN_SINGLE.value,
FieldType.ORGAN_MORE.value,
FieldType.OPTION_SINGLE.value,
FieldType.OPTION_MORE.value,
FieldType.TREE.value,
FieldType.TREE_SINGLE.value,
FieldType.TREE_MODAL_SELECT.value,
FieldType.TREE_MODAL_SELECT_SEARCH_DIFF.value,
FieldType.TREE_MODAL_SELECT_SEARCH_CHILD.value
],
queryParams: {},
isDragging: false, // 是否拖拽中
standardCatalogueRefX: 280, // 标准目录默认宽度
@@ -250,6 +287,7 @@ export default {
},
mounted () {
this.getSysCategoryTree()
this.initInvolvedSystem()
// 容器实际剩余宽度 = 右侧内容宽度 - 内容中的间距
// const boxWidth = this.$refs.sheetBoxRef.getBoundingClientRect().width - this.$refs.clauseLabelChangeRef.getBoundingClientRect().width - (16 * 4)
// this.sheetContainerRefX = boxWidth - this.standardCatalogueRefX - this.clauseLabelRefX
@@ -260,7 +298,9 @@ export default {
this.loading = true
getStandardInterpretation({ standard_id: this.spiltInfo.standardId }).then(res => {
if (res.success) {
this.standardInterpret = res.result[0] || {}
const list = res.result || []
// 后端说id是随时间递增的,取最新数据也就是取id最大的数据
this.standardInterpret = list.sort((a, b) => b.id - a.id)[0] || {}
this.selectedTreeKeys = []
this.hightMenuId = null
this.clauseLabelInfo = this.standardInterpret
@@ -275,6 +315,12 @@ export default {
handleViewFile (ids) {
this.$refs.uploadFile.open(ids)
},
// 获取涉及系统/部件
initInvolvedSystem () {
getInvolvedSystem().then(res => {
this.systemPartList = res.result.records || res.result || []
})
},
// 获取组织机构树
getSysCategoryTree () {
queryDepartTreeList().then((res) => {
@@ -298,6 +344,12 @@ export default {
this.queryParam = {}
this.initDetailInfo()
},
// 清除选中状态
clearSelect () {
this.selectedTreeKeys = []
this.hightMenuId = null
this.clauseLabelInfo = {}
},
/**
* 拖拽回调
* @param min - 拖拽最小宽度
@@ -349,10 +401,15 @@ export default {
}
previewDocSplit(params).then(res => {
if (res.success) {
// 清除选中状态
this.clearSelect()
const data = res.result || {}
this.treeData = data.sarFileSplitMenuEO || []
this.spiltInfo = data.documentSplitInfo || {}
this.clauseContentList = data.documentSplitDetail || []
this.$refs.standardContent.scrollTop = 0
} else {
this.$message.warn(res.message)
}
}).finally(() => {
this.loading = false
@@ -782,4 +839,7 @@ export default {
.disabledSelect {
user-select: none;
}
.table-page-search-wrapper .ant-form-inline /deep/ .ant-form-item > .ant-form-item-label {
min-width: auto;
}
</style>
+45 -23
View File
@@ -57,6 +57,7 @@
:disabledSourceSearch="!selectStandardCanUpdateTypeField.includes(item.dbFieldName)"
:disabled="disabled || disabledFieldList.includes(item.dbFieldName)"
:exclude-standard-numbers="excludeStandardFields.includes(item.dbFieldName) ? excludeStandardNumbers : null"
:is-value-have-name="selectStandardValueNeedNameField.includes(item.dbFieldName)"
v-model="formInline[item.dbFieldName]" />
<!-- 7, 多选组织机构 -->
<j-select-depart v-else-if="item.fieldShowType === FieldType.ORGAN_MORE.value"
@@ -113,6 +114,7 @@
tree-checkable
treeCheckStrictly
dropdownMatchSelectWidth
:replaceFields="notNeedEnTitleTreeField.includes(item.dbFieldName) ? null : {title: isChinese() ? 'title' : 'enTitle'}"
:placeholder="$t('pleaseSelect')+item.dbFieldTxt" />
<!-- 14, 年份选择 -->
<j-date v-else-if="item.fieldShowType === FieldType.YEAR_PICKER.value"
@@ -130,18 +132,27 @@
:disabled="disabled || disabledFieldList.includes(item.dbFieldName)"
:tree-data="optionsData[item.dbFieldName]"
:label-in-value="false"
:replaceFields="notNeedEnTitleTreeField.includes(item.dbFieldName) ? null : {title: isChinese() ? 'title' : 'enTitle'}"
:placeholder="$t('pleaseSelect')+item.dbFieldTxt" />
<!--16树形弹框选择-->
<tree-selection v-else-if="item.fieldShowType === FieldType.TREE_MODAL_SELECT.value || item.fieldShowType === FieldType.TREE_MODAL_SELECT_SEARCH_DIFF.value"
:placeholder="$t('pleaseSelect')+item.dbFieldTxt"
v-model="formInline[item.dbFieldName]"
@nameChange="treeSelectNameChange"
:filedName="item.dbFieldName"
type="checkbox"
:options-href="item.fieldHref"
:nameStr="formInline[item.dbFieldName + '_dictText']"
:dict-id="item.dictId"
:disabled="disabled || disabledFieldList.includes(item.dbFieldName)" />
<!-- <tree-selection v-else-if="item.fieldShowType === FieldType.TREE_MODAL_SELECT.value || item.fieldShowType === FieldType.TREE_MODAL_SELECT_SEARCH_DIFF.value"-->
<!-- :placeholder="$t('pleaseSelect')+item.dbFieldTxt"-->
<!-- v-model="formInline[item.dbFieldName]"-->
<!-- @nameChange="treeSelectNameChange"-->
<!-- :filedName="item.dbFieldName"-->
<!-- type="checkbox"-->
<!-- :options-href="item.fieldHref"-->
<!-- :nameStr="formInline[item.dbFieldName + '_dictText']"-->
<!-- :dict-id="item.dictId"-->
<!-- :disabled="disabled || disabledFieldList.includes(item.dbFieldName)" />-->
<tree-data-selection v-else-if="item.fieldShowType === FieldType.TREE_MODAL_SELECT.value || item.fieldShowType === FieldType.TREE_MODAL_SELECT_SEARCH_DIFF.value"
:placeholder="$t('pleaseSelect')+item.dbFieldTxt"
v-model="formInline[item.dbFieldName]"
:fieldName="item.dbFieldName"
:nameStr="formInline[item.dbFieldName + '_dictText']"
@nameChange="treeDataSelectNameChange"
:optionsHref="item.treeFirstHref"
:dict-id="item.dictId"/>
</a-form-model-item>
</div>
</template>
@@ -173,10 +184,12 @@ import TreeSelection from '../selection/TreeSelection'
import STreeSelect from '../STreeSelect'
import { isHasPermission } from '../../utils/hasPermission'
import { mapGetters } from 'vuex'
import TreeDataSelection from '../selection/TreeDataSelection'
export default {
name: 'AddForm',
components: {
TreeDataSelection,
UserSelection,
JMultipleDatePicker,
StandardSelection,
@@ -295,6 +308,14 @@ export default {
default: () => {
return []
}
},
// 选标准字段需要在value里面加标准名称的字段
selectStandardValueNeedNameField: {
type: Array,
required: false,
default: () => {
return []
}
}
},
data () {
@@ -320,7 +341,8 @@ export default {
dictNotCodes: ['name_code'], // 用到字典的字段不传dictCode的字段
filePerm: { // 上传文件根据权限控制只能查看,没有权限的除了系统管理员外不可见不可下载
associated_file: 'enterpriseStandard:associatedFile:look' // 关联文件
}
},
notNeedEnTitleTreeField: ['standard_system'] // 树形不需要enTitle判断的字段,暂时只有结构树不需要
}
},
watch: {
@@ -361,12 +383,8 @@ export default {
},
fileIsDownload () { // 文件是否可下载
if (Object.keys(this.filePerm).includes(this.uploadName)) {
// 系统管理员可下载
if (this.isSystemAdmin) {
return true
} else {
return false
}
// 需要特殊判断的字段不可下载
return false
} else {
// 不是需要特殊判断的字段正常可下载
return true
@@ -577,6 +595,9 @@ export default {
treeSelectNameChange (value, fieldName) {
this.formInline[fieldName + '_dictText'] = value
},
treeDataSelectNameChange (value, fieldName) {
this.formInline[fieldName + '_dictText'] = value
},
submit () {
this.$refs.ruleForm.validate(valid => {
if (valid) {
@@ -628,13 +649,14 @@ export default {
.form-flex-item-half {
width: calc((100% - 10px) / 2);
margin: 0 2px;
}
.form-flex-item-half:nth-child(2n+1) {
margin-right: 5px;
}
.form-flex-item-half:nth-child(2n) {
margin-left: 5px;
}
//.form-flex-item-half:nth-child(2n+1) {
// margin-right: 5px;
//}
//.form-flex-item-half:nth-child(2n) {
// margin-left: 5px;
//}
.form-flex-item-line {
width: 100%;
+51 -3
View File
@@ -19,6 +19,7 @@
show-search
allowClear
:filterTreeNode="filterTreeOption"
:replaceFields="{title: isChinese() ? 'title' : 'enTitle'}"
:placeholder="$t('pleaseSelect')+item.dbFieldTxt"
/>
</a-form-item>
@@ -35,6 +36,7 @@
show-search
allowClear
:filterTreeNode="filterTreeOption"
:replaceFields="{title: isChinese() ? 'title' : 'enTitle'}"
:placeholder="$t('pleaseSelect')+item.dbFieldTxt"
/>
</a-form-item>
@@ -141,9 +143,28 @@
:getPopupContainer="triggerNode=> triggerNode.parentNode"
:tree-data="optionsData[item.dbFieldName]"
:replaceFields="{key: 'id', value: 'id', title: 'name', children: 'childPartNameList'}"
tree-checkable
show-search
allowClear
dropdownMatchSelectWidth
:filterTreeNode="filterTreeOption"
:placeholder="$t('pleaseSelect')+item.dbFieldTxt"
/>
</a-form-item>
</template>
<!-- 树形弹框(带出所有子级) -->
<template v-if="item.fieldShowType === FieldType.TREE_MODAL_SELECT_SEARCH_CHILD.value">
<a-form-item :label="item.dbFieldTxt" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-tree-select
tree-node-filter-prop="title"
v-model="queryParam[item.dbFieldName]"
:maxTagCount="1"
:getPopupContainer="triggerNode=> triggerNode.parentNode"
:tree-data="optionsData[item.dbFieldName]"
tree-checkable
treeCheckStrictly
show-search
allowClear
dropdownMatchSelectWidth
:filterTreeNode="filterTreeOption"
:placeholder="$t('pleaseSelect')+item.dbFieldTxt"
/>
@@ -171,6 +192,7 @@
show-search
allowClear
:filterTreeNode="filterTreeOption"
:replaceFields="{title: isChinese() ? 'title' : 'enTitle'}"
/>
</a-form-item>
</template>
@@ -187,6 +209,7 @@
show-search
allowClear
:filterTreeNode="filterTreeOption"
:replaceFields="{title: isChinese() ? 'title' : 'enTitle'}"
/>
</a-form-item>
</template>
@@ -280,13 +303,31 @@
<a-tree-select
tree-node-filter-prop="title"
v-model="queryParam[item.dbFieldName]"
:maxTagCount="1"
:getPopupContainer="triggerNode=> triggerNode.parentNode"
:tree-data="optionsData[item.dbFieldName]"
:replaceFields="{key: 'id', value: 'id', title: 'name', children: 'childPartNameList'}"
tree-checkable
show-search
allowClear
dropdownMatchSelectWidth
:filterTreeNode="filterTreeOption"
:placeholder="$t('pleaseSelect')+item.dbFieldTxt"
/>
</a-form-item>
</template>
<!-- 树形弹框(带出所有子级) -->
<template v-if="item.fieldShowType === FieldType.TREE_MODAL_SELECT_SEARCH_CHILD.value">
<a-form-item :label="item.dbFieldTxt" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-tree-select
tree-node-filter-prop="title"
v-model="queryParam[item.dbFieldName]"
:maxTagCount="1"
:getPopupContainer="triggerNode=> triggerNode.parentNode"
:tree-data="optionsData[item.dbFieldName]"
tree-checkable
treeCheckStrictly
show-search
allowClear
dropdownMatchSelectWidth
:filterTreeNode="filterTreeOption"
:placeholder="$t('pleaseSelect')+item.dbFieldTxt"
/>
@@ -432,6 +473,13 @@ export default {
if (standardStateIndex !== -1) {
this.searchList[standardStateIndex].fieldShowType = FieldType.OPTION_MORE.value
}
// 把标准名称放到第二个
const standardNameIndex = this.searchList.findIndex(item => item.dbFieldName === 'standard_name')
const standardName = this.searchList.find(item => item.dbFieldName === 'standard_name')
if (standardNameIndex !== -1) {
this.searchList.splice(standardNameIndex, 1)
this.searchList.splice(1, 0, standardName)
}
this.getOptionsData() // 获取下拉数据
console.log(this.searchList)
}
+1 -1
View File
@@ -101,7 +101,7 @@ export default {
/* 分页参数 */
ipagination: {
current: 1,
pageSize: 50,
pageSize: 10,
pageSizeOptions: ['10', '30', '50', '100', '150', '200'],
showTotal: (total, range) => {
return range[0] + '-' + range[1] + ' ' + this.$t('total') + ' ' + total + ' ' + this.$t('strip')
+16 -3
View File
@@ -20,12 +20,13 @@
v-bind="$attrs"
show-search
:filter-option="filterOption"
@dropdownVisibleChange="dropdownVisibleChange"
@change="handleInput"
>
<a-select-option :value="undefined">请选择</a-select-option>
<a-select-option :value="undefined">{{ $t('pleaseSelect') }}</a-select-option>
<a-select-option v-for="(item, key) in dictOptions" :key="key" :value="item.value" :disabled="item.disabled || false">
<span style="display: inline-block;width: 100%" :title=" item.text || item.label ">
{{ item.text || item.label }}
<span :title=" $i18n.locale === EN ? item.enText : (item.text || item.label) ">
{{ $i18n.locale === EN ? item.enText : (item.text || item.label) }}
</span>
</a-select-option>
</a-select>
@@ -56,6 +57,7 @@ export default {
},
data () {
return {
EN: 'en-us',
dictOptions: [],
tagType: ''
}
@@ -105,6 +107,7 @@ export default {
// 优先从缓存中读取字典配置
if (getDictItemsFromCache(this.dictCode)) {
this.dictOptions = getDictItemsFromCache(this.dictCode)
console.log('-----------缓存获取', this.dictCode, this.dictOptions)
return
}
@@ -112,6 +115,7 @@ export default {
ajaxGetDictItems(this.dictCode, null).then((res) => {
if (res.success) {
this.dictOptions = res.result
console.log('-----------接口获取', this.dictCode, this.dictOptions)
}
})
},
@@ -123,9 +127,15 @@ export default {
val = e
}
console.log(val)
// 返回名字
if (this.$listeners.nameChange) {
this.$emit('nameChange', this.getDictLabelByValue(val))
}
// 返回选中字典对象
if (this.$listeners.dictChange) {
const dictItem = this.dictOptions.find(item => item.value === val)
this.$emit('dictChange', JSON.parse(JSON.stringify(dictItem || null)))
}
this.$emit('change', val)
// 解决数据规则,选择自定义SQL 规则值无法输入空格
this.$emit('input', val)
@@ -140,6 +150,9 @@ export default {
},
getCurrentDictOptions () {
return this.dictOptions
},
dropdownVisibleChange (open) {
this.$emit('dropdownVisibleChange', open)
}
},
model: {
+15 -12
View File
@@ -20,7 +20,7 @@
:class="(openSelectedAll && arrayValue[0] === selectedAllValue) ? 'multi-select-tag-check-all' : ''"
v-bind="$attrs">
<a-select-option :key="-1" :value="selectedAllValue" v-if="openSelectedAll && dictOptions.length > 0">{{ $t('checkedAll') }}</a-select-option>
<a-select-option v-for="(item, key) in dictOptions" :key="key" :value="item.value">{{ item.text || item.label }}</a-select-option>
<a-select-option v-for="(item, key) in dictOptions" :key="key" :value="item.value">{{ $i18n.locale === EN ? item.enText : (item.text || item.label) }}</a-select-option>
</a-select>
</template>
@@ -61,6 +61,7 @@ export default {
},
data () {
return {
EN: 'en-us',
// 全选的value
selectedAllValue,
dictOptions: [],
@@ -140,20 +141,22 @@ export default {
}
}
this.arrayValue = selectedValue
let list = selectedValue
// 开启全选时,不把全选的value进行返回
if (this.openSelectedAll) {
const list = selectedValue.filter(item => item !== selectedAllValue)
if (this.$listeners.nameChange) {
const labelList = list.map(val => this.getDictLabelByValue(val))
this.$emit('nameChange', labelList.join(this.spliter))
}
this.$emit('change', list.join(this.spliter))
} else {
if (this.$listeners.nameChange) {
this.$emit('nameChange', selectedValue.map(val => this.getDictLabelByValue(val)).join(this.spliter))
}
this.$emit('change', selectedValue.join(this.spliter))
list = selectedValue.filter(item => item !== selectedAllValue)
}
// 返回名字
if (this.$listeners.nameChange) {
const labelList = list.map(val => this.getDictLabelByValue(val))
this.$emit('nameChange', labelList.join(this.spliter))
}
// 返回选中字典对象列表
if (this.$listeners.dictChange) {
const dictList = list.map(val => this.dictOptions.find(item => item.value === val))
this.$emit('dictChange', JSON.parse(JSON.stringify(dictList)))
}
this.$emit('change', list.join(this.spliter))
},
// 通过val获取字典项
getDictLabelByValue (val) {
+7 -1
View File
@@ -22,7 +22,13 @@
<div class="table-text">{{ text || text === 0 ? text : global.emptyLine }}</div>
</a-tooltip>
</template>
<!--增加数据字典双语翻译的插槽-->
<template slot="dictText" slot-scope="text, record, index, column">
<a-tooltip overlay-class-name="tooltip-style">
<template slot="title">{{ (isChinese() ? text : record[column.key + 'En']) || (isChinese() ? text : record[column.key + 'En']) === 0 ? (isChinese() ? text : record[column.key + 'En']) : global.emptyLine }}</template>
<div class="table-text">{{ (isChinese() ? text : record[column.key + 'En']) || (isChinese() ? text : record[column.key + 'En']) === 0 ? (isChinese() ? text : record[column.key + 'En']) : global.emptyLine }}</div>
</a-tooltip>
</template>
<!-- 操作栏 -->
<template slot="action" slot-scope="text, record, index">
<slot name="action" v-bind="{text, record, index}">
+1 -1
View File
@@ -375,7 +375,7 @@ export default {
if (!info.file.status && this.uploadGoOn === false) {
info.fileList.pop()
}
let fileList = info.fileList
let fileList = info.fileList.filter(item => item.uploadGoOn)
if (info.file.status === 'done') {
if (this.number > 0) {
fileList = fileList.slice(-this.number)
+1 -1
View File
@@ -155,7 +155,7 @@ export default {
methods: {
// update-begin-author:sunjianlei date:20200120 for: 动态更改页面标题
changeTitle (title) {
const projectTitle = '奇瑞法规智库'
const projectTitle = '奇瑞标准法规管理系统'
// 首页特殊处理
if (this.$route.path === indexKey) {
document.title = projectTitle
+31 -8
View File
@@ -13,7 +13,8 @@
</div>
</div>
<div class="illustration" v-if="!mobile">
<img src="@/assets/home.png" alt="">
<div class="illustration-img"><img src="@/assets/image/loginLogo.png" alt=""></div>
<p class="illustration-title">{{$t('login.systemName')}}</p>
</div>
<route-view></route-view>
</div>
@@ -124,15 +125,37 @@ function isMobile () {
.illustration{
position: absolute;
max-width: 50%;
left: 12vw;
top: 20vh;
max-width: 40%;
max-height: 100%;
height: 100%;
min-width: 400px;
display: flex;
justify-content: center;
align-items: center;
img{
max-width: 70%;
.illustration-img {
margin-bottom: 40px;
}
img {
max-width: 100%;
}
.illustration-title {
font-family: PingFang SC, PingFang SC, sans-serif;
font-weight: 600;
font-size: 40px;
color: #333333;
line-height: 1.2;
}
}
@media screen and (max-width: 1366px) {
.illustration{
top: 15vh;
.illustration-img {
margin-bottom: 32px;
}
.illustration-title {
font-size: 32px;
}
}
}
}
+12
View File
@@ -1,5 +1,6 @@
<template>
<a-layout-sider
:collapsedWidth="64"
:class="['sider', isDesktop() ? null : 'shadow', theme, fixSiderbar ? 'ant-fixed-sidemenu' : null ]"
width="208px"
:collapsible="collapsible"
@@ -165,6 +166,17 @@ export default {
<!-- update_begin author:sunjianlei date:20190530 for: 选中首页的时候不显示背景颜色 -->
<style lang="less">
.ant-menu.ant-menu-root {
&:not(.ant-menu-horizontal) .ant-menu-item-selected {
background-color: rgba(0, 100, 250, 0.08);
}
&.ant-menu-inline-collapsed {
width: 64px;
& > .ant-menu-item,
& > .ant-menu-submenu > .ant-menu-submenu-title {
padding: 0 24px !important;
}
}
& > .ant-menu-item:first-child {
//background-color: transparent;
+4 -4
View File
@@ -285,9 +285,9 @@ body {
}
.trigger {
font-size: 22px;
line-height: 42px;
padding: 0 18px;
font-size: 12px;
//line-height: 42px;
padding: 22px;
cursor: pointer;
transition: color 300ms, background 300ms;
@@ -343,7 +343,7 @@ body {
}
&.ant-header-side-closed {
width: calc(100% - 80px)
width: calc(100% - 56px)
}
}
}
@@ -90,6 +90,14 @@
</a-tooltip>
</template>
<!--增加数据字典双语翻译的插槽-->
<template slot="dictText" slot-scope="text, record, index, column">
<a-tooltip overlay-class-name="tooltip-style">
<template slot="title">{{ (isChinese() ? text : record[column.key + 'En']) || (isChinese() ? text : record[column.key + 'En']) === 0 ? (isChinese() ? text : record[column.key + 'En']) : global.emptyLine }}</template>
<div class="table-text">{{ (isChinese() ? text : record[column.key + 'En']) || (isChinese() ? text : record[column.key + 'En']) === 0 ? (isChinese() ? text : record[column.key + 'En']) : global.emptyLine }}</div>
</a-tooltip>
</template>
<!-- 清单编号/清单名称 -->
<template v-slot:toDetail="text, record">
<a-tooltip overlay-class-name="tooltip-style">
@@ -198,7 +206,7 @@ export default {
align: 'center',
width: 180,
dataIndex: 'country_dictText',
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'dictText' }
},
{ // 清单编号
title: this.$t('standardRegulationLibrary.marketRegulationsList.listNumber'),
@@ -219,7 +227,7 @@ export default {
align: 'center',
width: 180,
dataIndex: 'drivePosition_dictText',
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'dictText' }
},
{ // 清单版本
title: this.$t('standardRegulationLibrary.marketRegulationsList.listVersion'),
@@ -247,7 +255,7 @@ export default {
align: 'center',
width: 180,
dataIndex: 'manifestStatus_dictText',
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'dictText' }
}
],
dataList: []
+26 -2
View File
@@ -11,8 +11,9 @@
<a-icon v-if="(nameStr || value) && !disabled" slot="suffix" class="close-icon" type="close-circle" theme="filled" @click="clearInput" />
</a-input>
<a-button v-if="!disabled" type="primary" class="button-box" @click="standardClick">
{{ $t('standardSelect.standardSelection') }}
<a-button v-if="!disabled" type="primary" class="button-box" :title="$t('standardSelect.standardSelection')" @click="standardClick">
<span v-if="isSmall && $i18n.locale === EN" type="select">{{$t('standardSelect.standardSelection').charAt(0)}}</span>
<span v-else>{{ $t('standardSelect.standardSelection') }}</span>
</a-button>
</div>
<standard-selection-modal ref="standardSelectionModal"
@@ -61,6 +62,18 @@ export default {
default: null
}
},
mounted () {
const offsetWidth = document.getElementsByClassName('selection-wrapper')[0].offsetWidth
if (offsetWidth >= 0 && offsetWidth <= 300) {
this.isSmall = true
}
},
data () {
return {
EN: 'en-us',
isSmall: false
}
},
methods: {
// 点击选择标准按钮
standardClick () {
@@ -134,4 +147,15 @@ export default {
.close-icon:hover {
color: rgba(0, 0, 0, 0.45);
}
//.small-btn {
// max-width: 60px;
// span {
// display: inline-block;
// width: 40px;
// overflow-x: hidden;
// text-overflow: ellipsis;
// white-space: nowrap;
// }
//}
</style>
@@ -12,7 +12,7 @@
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
<a-col :sm="6">
<a-col :sm="6" v-show="!splitSearch">
<a-form-item :label="$t('standardSelect.source')" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-dict-select-tag style="width: 100%" v-model="queryParam.source"
:disabled="disabledSourceSearch"
@@ -22,6 +22,24 @@
@change="handleTypeChange" />
</a-form-item>
</a-col>
<!--标准结构树-->
<a-col :md="8" :sm="12" v-if="splitSearch">
<a-form-item :label="$t('docTool.comparison.standardStructureTree')">
<a-tree-select
tree-node-filter-prop="title"
v-model="queryParam.standardSystem"
:maxTagCount="1"
:getPopupContainer="triggerNode=> triggerNode.parentNode"
:tree-data="standardStructureTree"
tree-checkable
show-search
allowClear
tree-check-strictly
:filterTreeNode="filterTreeOption"
:placeholder="$t('pleaseSelect') + $t('docTool.comparison.standardStructureTree')"
/>
</a-form-item>
</a-col>
<a-col :sm="8">
<a-form-item :label="$t('standardSelect.standardNumOrName')" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input :placeholder="$t('pleaseEnter')+$t('standardSelect.standardNumOrName')"
@@ -38,7 +56,7 @@
</div>
<a-table
:columns="columns"
:rowKey="record => {return record.standardNumber + '|' + record.standardName}"
:rowKey="record => {return isValueHaveName ? record.standardNumber + '' + record.standardName + '》' : record.standardNumber}"
:scroll="{x: 900}"
:data-source="dataList"
:pagination="ipagination"
@@ -64,8 +82,20 @@
<!-- 标准状态 -->
<template slot="standardState" slot-scope="text, record">
<a-tooltip overlay-class-name="tooltip-style">
<template slot="title">{{ record.source === '3' ? (record.esStandardState_dictText || global.emptyLine) : (record.standardState_dictText || global.emptyLine) }}</template>
<div class="table-text">{{ record.source === '3' ? (record.esStandardState_dictText || global.emptyLine) : (record.standardState_dictText || global.emptyLine) }}</div>
<template slot="title">
{{
record.source === '3' ?
(isChinese() ? (record.esStandardState_dictText || global.emptyLine) : (record.esStandardState_dictTextEn || global.emptyLine)) :
(isChinese() ? (record.standardState_dictText || global.emptyLine) : (record.standardState_dictTextEn || global.emptyLine))
}}
</template>
<div class="table-text">
{{
record.source === '3' ?
(isChinese() ? (record.esStandardState_dictText || global.emptyLine) : (record.esStandardState_dictTextEn || global.emptyLine)) :
(isChinese() ? (record.standardState_dictText || global.emptyLine) : (record.standardState_dictTextEn || global.emptyLine))
}}
</div>
</a-tooltip>
</template>
@@ -83,6 +113,7 @@
import { ajaxGetDictItems, getStandardList } from '@/api/api'
import JDictSelectTag from '../dict/JDictSelectTag'
import { StandardSource } from '../../enums/commonEnums'
import { getForeignStandardTree } from '@api/standardRegulationLibraryApi'
export default {
name: 'StandardSelectionModal',
@@ -127,6 +158,18 @@ export default {
default: () => {
return {}
}
},
// 是否拆分的搜索(来源换成外部标准结构树)
splitSearch: {
type: Boolean,
required: false,
default: false
},
// 是否value要有标准名称
isValueHaveName: {
type: Boolean,
required: false,
default: false
}
},
data () {
@@ -189,7 +232,15 @@ export default {
}
],
dataList: [],
sourceOptions: []
sourceOptions: [],
// 标准结构树
standardStructureTree: []
}
},
created () {
// 拆分的需要加载标准结构树
if (this.splitSearch) {
this.loadStandardStructureTree()
}
},
methods: {
@@ -210,6 +261,34 @@ export default {
}
})
},
// 加载标准结构树
loadStandardStructureTree () {
// option 不传显示我的收藏,1不显示我的收藏, 2只能选二级中国及中国下三级,和欧盟EU
getForeignStandardTree({ option: 1 }).then(res => {
if (res.success) {
this.standardStructureTree = res.result || []
}
})
},
// tree-select搜索
filterTreeOption (input, option) {
const text = option.componentOptions.propsData.title || option.componentOptions.propsData.label
return text.toLowerCase().indexOf(input.toLowerCase()) >= 0
},
// 获取树结构没有被禁用的value值
getValuesWhereNotDisabled (tree = []) {
const values = []
function traverse (node) {
if (!node.disabled) { // 只处理 disabled 不为 true 的节点
values.push(node.value)
}
if (node.children && node.children.length > 0) {
node.children.forEach(child => traverse(child))
}
}
tree.forEach(node => traverse(node))
return values
},
// 获取表格数据
replacePage (arg) {
if (arg === 1) {
@@ -222,6 +301,10 @@ export default {
pageSize: this.ipagination.pageSize,
excludeStandardNumbers: this.excludeStandardNumbers
}
// 标准结构树
if (Array.isArray(query.standardSystem)) {
query.standardSystem = query.standardSystem.map(item => item.value).join(',')
}
// 清空在可选范围内进行查询
if (!query.source && this.canSelectedSource.length < 3) {
query.source = this.canSelectedSource.join(',')
@@ -259,21 +342,43 @@ export default {
if (this.type === 'checkbox') {
if (selectedRowKeys.length > this.selectedRowList.length) {
// 说明是增加了数据
for (const rowIndex in selectedRows) {
if (!this.selectedRowList.find(item => (item.standardNumber + '|' + item.standardName) === (selectedRows[rowIndex].standardNumber + '|' + selectedRows[rowIndex].standardName))) {
// 不存在,追加
this.selectedRowList.push(selectedRows[rowIndex])
if (this.isValueHaveName) {
// value里面要带标准名称
for (const rowIndex in selectedRows) {
if (!this.selectedRowList.find(item => (item.standardNumber + '《' + item.standardName + '》') === (selectedRows[rowIndex].standardNumber + '《' + selectedRows[rowIndex].standardName + '》'))) {
// 不存在,追加
this.selectedRowList.push(selectedRows[rowIndex])
}
}
} else {
// value不带标准名称
for (const rowIndex in selectedRows) {
if (!this.selectedRowList.find(item => item.standardNumber === selectedRows[rowIndex].standardNumber)) {
// 不存在,追加
this.selectedRowList.push(selectedRows[rowIndex])
}
}
}
} else {
// 说明是删除了数据
if (selectedRowKeys && selectedRowKeys.length > 0) {
// 没有选中数据,说明这一页没有选中数据了
for (let i = 0; i < this.selectedRowList.length; i++) {
if (!selectedRowKeys.find(item => item === this.selectedRowList[i].standardNumber + '|' + this.selectedRowList[i].standardName)) {
// 表格选中中没有找到这一条数据,说明已经被删了
this.selectedRowList.splice(i, 1)
i--
if (this.isValueHaveName) {
// value里面要带标准名称
for (let i = 0; i < this.selectedRowList.length; i++) {
if (!selectedRowKeys.find(item => item === this.selectedRowList[i].standardNumber + '《' + this.selectedRowList[i].standardName + '》')) {
// 表格选中中没有找到这一条数据,说明已经被删了
this.selectedRowList.splice(i, 1)
i--
}
}
} else {
for (let i = 0; i < this.selectedRowList.length; i++) {
if (!selectedRowKeys.find(item => item === this.selectedRowList[i].standardNumber)) {
// 表格选中中没有找到这一条数据,说明已经被删了
this.selectedRowList.splice(i, 1)
i--
}
}
}
} else {
@@ -0,0 +1,531 @@
<template>
<j-modal
:title="$t('userSelect.select')"
:width="width"
:visible="visible"
switchFullscreen
:maskClosable="false"
:confirmLoading="confirmLoading"
@ok="handleOk"
@cancel="handleCancel">
<div class="modal-content">
<a-spin :spinning="topLoading">
<a-input-search style="margin-bottom: 1px" :placeholder="$t('pleaseEnter') + $t('treeSelection.primaryNodeName')" @search="onSearch" />
<a-tree
ref="tree"
:checkable="checkable"
:checkStrictly="true"
:replaceFields="replaceFields"
:class="treeScreenClass"
:treeData="treeData"
:autoExpandParent="autoExpandParent"
@check="onCheck"
@select="onSelect"
@expand="onExpand"
@load="onLoad"
:loadData="loadData"
:expandedKeys="expandedKeys"
:checkedKeys="checkedKeys"
:loadedKeys="loadedKeys"
:selectedKeys.sync="selectedKeys">
<template slot="title" slot-scope="{dataRef}">
<span v-if="searchValue && dataRef[replaceFields.title].indexOf(searchValue) > -1">
<span style="color: #f50">{{ dataRef[replaceFields.title] }}</span>
</span>
<span v-else>{{ dataRef[replaceFields.title] }}</span>
</template>
</a-tree>
</a-spin>
</div>
<p class="modal-content-title">{{ $t('treeSelection.selectedData') }}</p>
<a-spin :spinning="bottomLoading">
<div v-if="dataSourceRight && dataSourceRight.length > 0" class="name-content">
<div v-for="(item, index) in dataSourceRight" :key="item[replaceFields.key]" class="name-div">
{{ item[replaceFields.title] }}
<a-icon type="close" @click="handleDelete(item, index)" />
</div>
</div>
<a-empty v-else />
</a-spin>
<!--底部父子关联操作和确认取消按钮-->
<template slot="footer" v-if="treeOpera && checkable">
<div class="drawer-bootom-button">
<a-dropdown style="float: left" :trigger="['click']" placement="topCenter">
<a-menu slot="overlay">
<a-menu-item key="1" @click="switchCheckStrictly(2)">{{ $t('parentChildConnection') }}</a-menu-item>
<a-menu-item key="2" @click="switchCheckStrictly(1)">{{ $t('cancelConnection') }}</a-menu-item>
</a-menu>
<a-button>
{{ treeOperationText }} <a-icon type="up" />
</a-button>
</a-dropdown>
<!-- <a-button style="float: left" @click="switchCheckStrictly(parentChildRelate ? 1 : 2)">{{ treeOperationText }}</a-button>-->
<a-button @click="handleCancel" type="primary" style="margin-right: 0.8rem">{{ $t('close') }}</a-button>
<a-button @click="handleOk" type="primary" >{{ $t('confirm') }}</a-button>
</div>
</template>
</j-modal>
</template>
<script>
import { getAction, postAction } from '../../api/manage'
export default {
name: 'TreeDataSelectModal',
props: {
value: {
type: String,
required: false,
default: ''
},
checkable: { // 是否多选
type: Boolean,
required: false,
default: false
},
// 是否校验必选
checkRequired: {
type: Boolean,
required: false,
default: false
},
// 获取数据的接口
optionsHref: {
type: String,
required: false,
default: ''
},
// 标签库的限制,只能选第三级
isTagLibraryRestriction: {
type: Boolean,
required: false,
default: false
},
dictId: {
type: String,
required: false,
default: ''
},
treeOpera: { // 是否可以切换父子关联
type: Boolean,
required: false,
default: true
}
},
computed: {
treeScreenClass () {
return {
'my-dept-select-tree': true,
fullscreen: this.fullscreen
}
},
treeOperationText () {
return this.parentChildRelate ? this.$t('parentChildConnection') : this.$t('cancelConnection')
}
},
watch: {
// 是否只能选第三级
isTagLibraryRestriction (val) {
if (val) {
this.setOnlySelectThreeLevel(this.treeData)
}
},
value (val) {
if (val) {
this.checkedKeys = val.split(',')
}
},
optionsHref: {
immediate: true,
handler (val) {
console.log('-------------optionsHref', val)
if (val === '/laws/standard/partName/queryFirstList') {
// 是涉及系统/部件
this.replaceFields = { children: 'childPartNameList', title: 'name', key: 'code' }
this.lazyLoadHref = '/laws/standard/partName/getChild'
this.searchFieldName = 'nodeName'
this.lazyLoadPidFieldName = 'parentCode'
} else { // 标签库
this.replaceFields = { children: 'childrenList', title: 'itemText', key: 'itemValue' }
this.lazyLoadHref = '/laws/dictTree/getChild'
this.searchFieldName = 'nodeName'
this.lazyLoadPidFieldName = 'dictItemId'
}
}
}
},
created () {
// if (this.treeOpera) {
// this.switchCheckStrictly(1)
// }
},
data () {
return {
width: 800,
visible: false,
confirmLoading: false,
topLoading: false,
bottomLoading: false,
parentChildRelate: true, // 父子节点是否关联
autoExpandParent: false, // 是否自动展开父节点
treeData: [],
expandedKeys: [],
checkedKeys: [],
checkedRows: [],
selectedKeys: [],
loadedKeys: [],
searchValue: '', // 查询框内容
replaceFields: {},
dataSourceRight: [],
lazyLoadHref: '', // 懒加载接口
searchFieldName: '', // 查询传的字段名
lazyLoadPidFieldName: '' // 懒加载传父级的字段名
}
},
methods: {
show () {
this.visible = true
this.treeData = []
this.checkedRows = []
this.checkedKeys = []
this.loadedKeys = []
this.selectedKeys = []
this.dataSourceRight = []
this.searchValue = ''
this.getTreeData()
if (this.value) {
if (this.checkable) {
this.checkedKeys = this.value.split(',')
} else {
this.selectedKeys = this.value.split(',')
}
// 初始化选中数据列表
this.getSelectedList(this.value)
}
this.$forceUpdate()
},
onCheck (checkedKeys, info) {
console.log('----------onCheck', checkedKeys)
console.log('----------info.checked', info.checked)
console.log('----------info.node', info.node.dataRef)
if (this.checkable) {
// 是多选
if (this.parentChildRelate) {
// 是父子关联
if (info.checked) {
// 是选中数据了
let childrenList = []
if (info.node.dataRef[this.replaceFields.children]) {
// 有子节点获取子节点数据
childrenList = info.node.dataRef[this.replaceFields.children].map(item => item[this.replaceFields.key])
}
this.checkedKeys = [...this.checkedKeys, ...checkedKeys.checked, ...childrenList]
} else {
// 是取消选中了,把当前和子节点都取消选中
let currAndChildNode = []
if (info.node.dataRef[this.replaceFields.children]) {
// 有子节点获取子节点数据
const childrenNode = info.node.dataRef[this.replaceFields.children].map(item => item[this.replaceFields.key])
currAndChildNode = [...childrenNode, info.node.dataRef[this.replaceFields.key]]
} else {
currAndChildNode = [info.node.dataRef[this.replaceFields.key]]
}
this.checkedKeys = this.checkedKeys.filter(item => !currAndChildNode.includes(item))
}
// 处理下方显示已选数据
if (info.checked) {
console.log('------------增加了数据')
// 说明是增加了数据,把点击的数据和子数据追加进去
for (const key of checkedKeys.checked) {
// 当前选中没在选中列表中的加进去
if (!this.dataSourceRight.find(item => item[this.replaceFields.key] === key)) {
// 右侧不存在,追加到右侧表格
this.dataSourceRight.push(info.node.dataRef)
}
}
if (info.node.dataRef[this.replaceFields.children]) {
// 有子集追加
for (const keyItem of info.node.dataRef[this.replaceFields.children]) {
// 当前选中的子集没在列表中的加进去
if (!this.dataSourceRight.find(item => item[this.replaceFields.key] === keyItem[this.replaceFields.key])) {
// 右侧不存在,追加到右侧表格
this.dataSourceRight.push(keyItem)
}
}
}
} else {
console.log('----------删除了数据')
// 说明是删除了数据
if (this.checkedKeys && this.checkedKeys.length > 0) {
// 还有选中数据,从dataSourceRight里面找到点击的数据和他的子数据清空
for (let i = 0; i < this.dataSourceRight.length; i++) {
if (!this.checkedKeys.find(item => item === this.dataSourceRight[i][this.replaceFields.key])) {
// 表格选中中没有找到这一条数据,说明已经被删了
this.dataSourceRight.splice(i, 1)
i--
}
}
} else {
// 已经没有选中数据了,直接清空展示数据
this.dataSourceRight = []
}
}
} else {
// 不是父子关联
console.log('-----------checkedKeys', this.checkedKeys, checkedKeys)
if (info.checked) {
// 是选中数据了
this.checkedKeys = [...this.checkedKeys, ...checkedKeys.checked]
} else {
// 是取消选中了
this.checkedKeys = this.checkedKeys.filter(item => item !== info.node.dataRef[this.replaceFields.key])
}
// 处理下方显示已选数据
if (info.checked) {
console.log('------------不父子关联增加了数据')
// 说明是增加了数据,把点击的数据追加进去
for (const key of checkedKeys.checked) {
// 当前选中没在选中列表中的加进去
if (!this.dataSourceRight.find(item => item[this.replaceFields.key] === key)) {
// 右侧不存在,追加到右侧表格
this.dataSourceRight.push(info.node.dataRef)
}
}
} else {
console.log('----------不父子关联删除了数据')
// 说明是删除了数据
if (this.checkedKeys && this.checkedKeys.length > 0) {
// 还有选中数据,从dataSourceRight里面找到点击的数据和他的子数据清空
for (let i = 0; i < this.dataSourceRight.length; i++) {
if (!this.checkedKeys.find(item => item === this.dataSourceRight[i][this.replaceFields.key])) {
// 表格选中中没有找到这一条数据,说明已经被删了
this.dataSourceRight.splice(i, 1)
i--
}
}
} else {
// 已经没有选中数据了,直接清空展示数据
this.dataSourceRight = []
}
}
}
}
},
onSelect (selectedKeys, info) {
// 取消关联的情况下才走onSelect的逻辑
if (!this.parentChildRelate) {
if (selectedKeys && selectedKeys.length > 0) {
// 说明是选中了数据
this.selectedKeys = [...selectedKeys]
this.dataSourceRight = [info.node.dataRef]
} else {
// 没有数据,直接清空
this.selectedKeys = []
this.dataSourceRight = []
}
}
},
onLoad (loadedKeys) {
this.loadedKeys = loadedKeys
},
onExpand (expandedKeys) {
console.log('========expandedKeys', expandedKeys)
this.expandedKeys = expandedKeys
},
// 异步加载
async loadData (node) {
console.log('-------------loadData', node)
if (node.dataRef.children) {
return
}
this.topLoading = true
const params = {}
if (this.optionsHref !== '/laws/standard/partName/queryFirstList') {
// 不是涉及系统部件
params.dictId = this.dictId
}
// 查询条件的名称
if (this.searchValue) {
params[this.searchFieldName] = this.searchValue
}
// 父节点id
if (this.optionsHref === '/laws/standard/partName/queryFirstList') {
// 是涉及系统部件
params[this.lazyLoadPidFieldName] = node.dataRef.code
} else {
params[this.lazyLoadPidFieldName] = node.dataRef.id
}
await getAction(this.lazyLoadHref, params).then(res => {
if (res.success) {
node.dataRef[this.replaceFields.children] = res.result.record || res.result
}
}).finally(() => {
this.topLoading = false
})
},
handleCancel () {
this.visible = false
},
close () {
this.visible = false
this.checkedKeys = []
this.expandedKeys = []
this.loadedKeys = []
this.dataSourceRight = []
this.treeData = []
this.searchValue = ''
},
onSearch (value) {
this.searchValue = value
// this.autoExpandParent = true
this.getTreeData()
this.expandedKeys = []
this.loadedKeys = []
this.$forceUpdate()
},
// 设置树只能选第三级
setOnlySelectThreeLevel (treeData) {
for (const item of treeData) {
item.disabled = item.level + '' !== '3'
item.disableCheckbox = item.level + '' !== '3'
if (item.childPartNameList && item.childPartNameList.length > 0) {
this.setOnlySelectThreeLevel(item.childPartNameList)
}
}
},
// 切换父子关联
switchCheckStrictly (v) {
if (v === 1) {
// 取消父子关联
this.parentChildRelate = false
} else if (v === 2) {
// 增加父子关联
this.parentChildRelate = true
}
},
getTreeData () {
this.topLoading = true
const params = {}
if (this.optionsHref !== '/laws/standard/partName/queryFirstList') {
// 不是涉及系统部件
params.dictId = this.dictId
}
// 查询条件的名称
if (this.searchValue) {
params[this.searchFieldName] = this.searchValue
}
getAction(this.optionsHref, params).then(res => {
if (res.success) {
this.treeData = res.result.records || res.result
}
}).finally(() => {
this.topLoading = false
})
},
// 已选数据列表的删除
handleDelete (record, index) {
this.dataSourceRight.splice(index, 1)
if (this.checkable) {
// 多选从checkedKeys里面筛选出去
this.checkedKeys = this.checkedKeys.filter(item => item !== record[this.replaceFields.key])
} else {
// 单选从selectedKeys里面筛选出去
this.selectedKeys = this.selectedKeys.filter(item => item !== record[this.replaceFields.key])
}
},
handleOk () {
if (this.checkRequired && (!this.checkedKeys || this.checkedKeys.length === 0)) {
this.$message.warning(this.$t('selectLeastOne'))
return
}
this.$emit('nameChange', this.dataSourceRight.map(item => item[this.replaceFields.title]).join(','))
this.$emit('change', this.dataSourceRight.map(item => item[this.replaceFields.key]).join(','))
this.$emit('listChange', this.dataSourceRight)
this.close()
},
getSelectedList (codes) {
this.bottomLoading = true
const params = {
selectNodeCodes: codes,
dictId: this.dictId
}
let url
// 涉及系统/部件
if (this.optionsHref === '/laws/standard/partName/queryFirstList') {
url = '/laws/standard/partName/echo'
} else { // 标签库
url = '/laws/dictTree/echo'
}
if (!url) {
return
}
postAction(url, params).then(res => {
if (res.success) {
this.dataSourceRight = JSON.parse(JSON.stringify(res.result))
}
}).finally(() => {
this.bottomLoading = false
})
}
}
}
</script>
<style scoped lang="less">
/deep/ .ant-modal-content {
padding-bottom: 18px;
}
.my-dept-select-tree{
height:350px;
&.fullscreen{
height: calc(100vh - 250px);
}
overflow-y: scroll;
}
.modal-content-title {
color: #1D2129;
font-weight: 500;
margin-right: 12px;
margin-bottom: 0;
margin-top: 16px;
}
.drawer-bootom-button {
position: absolute;
bottom: 0;
width: 100%;
border-top: 1px solid #e8e8e8;
padding: 10px 16px;
text-align: right;
left: 0;
background: #fff;
border-radius: 0 0 2px 2px;
}
.name-content {
display: flex;
flex-wrap: wrap;
max-height: 200px;
overflow-y: auto;
.name-div {
width: auto;
padding: 5px 16px;
margin-right: 12px;
margin-top: 8px;
background: rgba(0, 100, 250, 0.08);
border-radius: 4px 4px 4px 4px;
opacity: 1;
color: @primary-color;
white-space: nowrap;
/deep/ .anticon {
margin-left: 4px;
}
}
}
</style>
@@ -0,0 +1,145 @@
<template>
<div class="components-input-demo-presuffix">
<div class="user-organ-wrap">
<a-input class="user-input" @click="openModal" :placeholder="placeholder" v-model="nameStr" :title="nameStr" readOnly>
<a-icon v-if="nameStr" slot="suffix" type="close-circle" @click="handleEmpty" title="清空"/>
</a-input>
<a-button type="primary" class="button-box" @click="openModal" :disabled="disabled" v-if="showBtn && !disabled">
{{ $t('select') }}
</a-button>
</div>
<tree-data-select-modal
ref="selectModal"
:checkable="checkable"
:value="value"
:dict-id="dictId"
v-bind="$attrs"
:options-href="optionsHref"
@change="handleChange"
@nameChange="nameChange"
@listChange="listChange"/>
</div>
</template>
<script>
import TreeDataSelectModal from './TreeDataSelectModal'
export default {
name: 'TreeDataSelection',
components: { TreeDataSelectModal },
props: {
checkable: { // 是否多选
type: Boolean,
required: false,
default: true
},
value: {
type: String,
required: false
},
disabled: {
type: Boolean,
required: false,
default: false
},
// 获取数据的接口
optionsHref: {
type: String,
required: false,
default: ''
},
// 名称字符串
nameStr: {
type: String,
required: false,
default: ''
},
fieldName: {
type: String,
required: false,
default: ''
},
dictId: {
type: String,
required: false,
default: ''
},
showBtn: {
type: Boolean,
required: false,
default: true
},
placeholder: {
type: String,
default: ''
}
},
watch: {
nameStr: {
immediate: true,
handler (val) {
console.log('----------nameStr', val)
}
}
},
data () {
return {
visible: false,
confirmLoading: false
}
},
methods: {
openModal () {
this.$refs.selectModal.show()
},
handleChange (value) {
this.$emit('change', value, this.fieldName)
},
nameChange (value) {
this.$emit('nameChange', value, this.fieldName)
},
listChange (value) {
this.$emit('listChange', value, this.fieldName)
},
handleEmpty () {
if (this.disabled) {
return
}
this.handleChange('')
this.nameChange('')
this.listChange([])
}
},
model: {
prop: 'value',
event: 'change'
}
}
</script>
<style scoped lang="less">
.user-organ-wrap {
width: 100%;
position: relative;
display: flex;
align-items: center;
//height: 39.98px;
.user-input {
resize: none;
width: calc(100% - 70px);
}
// 因为需要加title,所以不能把鼠标事件去掉
/deep/ .ant-input-disabled {
background: #fff;
color: rgba(0, 0, 0, 0.65);
cursor: default;
}
.button-box {
margin-left: 5px;
}
}
</style>
+13 -8
View File
@@ -138,7 +138,7 @@ export default {
deep: true,
handler (val) {
console.log(this.currentQueryAllData)
const arrOne = this.currentQueryAllData.map(item => item.id)
const arrOne = this.currentQueryAllData
const arrTwo = this.dataSourceRight.map(item => item.id)
const temp = []
for (const item of arrTwo) {
@@ -157,7 +157,7 @@ export default {
deep: true,
handler (val) {
console.log(this.currentQueryAllData)
const arrOne = this.currentQueryAllData.map(item => item.id)
const arrOne = this.currentQueryAllData
const arrTwo = this.dataSourceRight.map(item => item.id)
const temp = []
for (const item of arrTwo) {
@@ -240,7 +240,8 @@ export default {
isCheckedAll: false, // 是否选中所有
url: {
userList: '/sys/user/page',
userListByIds: '/sys/user/queryByIds'
userListByIds: '/sys/user/queryByIds',
queryList: '/sys/user/list'
},
isClickedSearch: false, // 改完搜索条件是否点击过搜索
oldQueryParam: {}, // 上一次的搜索条件,用于从一个搜索条件改成另一个搜索条件,但是没有点搜索,这时候全选时传旧的搜索条件
@@ -298,7 +299,7 @@ export default {
this.checkCurrentAll()
} else {
const field = 'id'
this.dataSourceRight = this.dataSourceRight.filter(item => !this.currentQueryAllData.some(i => i[field] === item[field]))
this.dataSourceRight = this.dataSourceRight.filter(item => !this.currentQueryAllData.some(i => i === item[field]))
this.selectedRowKeys = JSON.parse(JSON.stringify(this.dataSourceRight)).map(item => item[field])
}
},
@@ -340,14 +341,14 @@ export default {
// 获取当前查询条件的所有数据
async getCurrentAllData () {
const params = Object.assign({}, this.queryParam)
params.pageNo = 1
params.pageSize = 100000000
// params.pageNo = 1
// params.pageSize = 100000000
params.field = 'id,avatar,username,realname,sex_dictText,phone,orgCodeTxt,roleTxt,status_dictText'
params.column = 'createTime'
params.order = 'desc'
await getAction(this.url.userList, params).then(res => {
await getAction(this.url.queryList, params).then(res => {
if (res.success) {
this.currentQueryAllData = res.result.records || []
this.currentQueryAllData = res.result || []
}
})
},
@@ -544,4 +545,8 @@ export default {
/deep/ .ant-form-item-label{
min-width: 70px !important;
}
/deep/ .ant-table-hide-scrollbar {
margin-right: -8px;
}
</style>
@@ -60,7 +60,7 @@ export default {
headers: '',
previewImage: {},
uploadFileFlag: 0,
fileMaxSize: 500
fileMaxSize: 20
}
},
created () {
@@ -103,7 +103,7 @@ export default {
// const fileTypes = this.accept.split('/')
const fileNowTypes = file.type.split('/')
// 修改判断方法 限制jpg\jpeg\png\gif 可以上传 其他不能上传。
fileFlag = (['PNG', 'JPEG', 'PNG', 'GIF'].includes(fileNowTypes[1].toUpperCase()))
fileFlag = (['PNG', 'JPEG', 'PNG'].includes(fileNowTypes[1].toUpperCase()))
// console.log('filetype',fileFlag)
if (!fileFlag) {
this.$message.warning(this.$t('uploadFile.fileFormatIncorrect'))
+10
View File
@@ -62,6 +62,16 @@ export default {
}
},
mounted () {
// 首次加载完所有语言包后,浅拷贝存备份(没有找到正常切换语言的api,暂时先这么处理)
if (Object.keys(UE.I18N).length > 1) {
window.__COPY_UE_I18N__ = { ...UE.I18N }
}
// 更新语言包(将备份语言包浅拷贝回来,只保留需要的一个需要的语言包)
if (localStorage.getItem('language') === 'en-us') {
UE.I18N = { en: window.__COPY_UE_I18N__.en }
} else {
UE.I18N = { ['zh-cn']: window.__COPY_UE_I18N__['zh-cn'] }
}
UEDITOR_CONFIG.UEDITOR_HOME_URL = '../../../public/ueditor/'
// 初始化UE
this.editor = UE.delEditor('editor')
+14 -8
View File
@@ -29,7 +29,8 @@ export const FieldType = {
YEAR_PICKER: { text: '年份选择', value: '14' },
TREE_SINGLE: { text: '树形结构(单选)', value: '15' },
TREE_MODAL_SELECT: { text: '树形弹框', value: '16' },
TREE_MODAL_SELECT_SEARCH_DIFF: { text: '树形弹框(带出子集和单线父级)', value: '17' }
TREE_MODAL_SELECT_SEARCH_DIFF: { text: '树形弹框(查询带出子集和单线父级)', value: '17' },
TREE_MODAL_SELECT_SEARCH_CHILD: { text: '树形弹框(查询带出所有子级)', value: '18' }
}
export const TagsTypeEnums = new EsEnums({
@@ -84,13 +85,12 @@ export const IsTrial = {
// 外来标准状态
export const StandardStatus = {
DRAFT: { text: '起草', value: '1' },
SEEK_FOR_OPTIONS: { text: '征求意见', value: '2' },
EXAMINE: { text: '审查', value: '2.1' },
CURRENTLY_EFFECTIVE: { text: '现行', value: '1' },
RELEASE: { text: '发布', value: '2' },
APPROVAL: { text: '报批', value: '3' },
RELEASE: { text: '发布', value: '4' },
BE_IMPLEMENTED_SOON: { text: '即将实施', value: '5' },
CURRENTLY_EFFECTIVE: { text: '现行有效', value: '6' },
EXAMINE: { text: '审查', value: '4' },
SEEK_FOR_OPTIONS: { text: '征求意见', value: '5' },
DRAFT: { text: '草案', value: '6' },
ABOLISH: { text: '废止', value: '7' }
}
@@ -190,7 +190,7 @@ export const StandardInterpretationNodes = new EsEnums({
initiated: { text: '法规工程师发起', value: 'regulatory_engineer_start', btn: ['save', 'submit'] },
controlDepartLiaisonDistribution: { text: '主控部门联络人分发', value: 'contact_person_distribute', btn: ['transfer', 'save', 'submit'] },
standardInterpreterDistribution: { text: '标准主解读人分发', value: 'master_interpret_distribute', btn: ['reject', 'transfer', 'save', 'submit'] },
standardInterpreterReDistribution: { text: '标准主解读人分发', value: 'master_interpret_again_distribute', btn: ['reject', 'transfer', 'save', 'submit'] },
standardInterpreterReDistribution: { text: '标准主解读人分发', value: 'master_interpret_again_distribute', btn: ['transfer', 'save', 'submit'] },
interpreterFillInfo: { text: '解读人填写信息', value: 'interpreting_people_fillout', btn: ['reject', 'transfer', 'save', 'submit'] },
mainInterpreterSingleLineReview: { text: '标准主解读人审核', value: 'master_interpret_approve', btn: ['reject', 'transfer', 'save', 'agree'] },
standardInterpreterSummary: { text: '标准主解读人汇总', value: 'master_interpret_summary', btn: ['transfer', 'save', 'submit'] },
@@ -253,6 +253,12 @@ export const OcrConvertStateEnums = {
CONVERTED: { text: '转换完成', value: '2' }
}
// 用户管理来源
export const UserSource = {
IAM: { text: 'IAM', value: '2' },
SYSTEMADD: { text: '系统新增', value: '1' }
}
/**
* 展示区域管理
* TODO 标签管理要改了,这里也要同步一下
+11 -1
View File
@@ -3,6 +3,7 @@
import Vue from 'vue'
import App from './App.vue'
import MobileApp from './MobileApp'
import Storage from 'vue-ls'
import router from './router'
import store from './store/'
@@ -49,6 +50,7 @@ import JDictComponenets from '@comp/dict/index.js'
import JTable from '@comp/jero/JTable.vue'
import i18n from '@/common/lang'
import { isMobile } from '@/utils/util'
// Vue.prototype.rules = rules
Vue.config.productionTip = false
@@ -74,6 +76,14 @@ SSO.init(() => {
Vue.prototype.global = {
emptyLine: '—'
}
// 当前是中文
Vue.prototype.isChinese = function () {
return this.$i18n.locale === 'zh-cn'
}
// 当前是英文
Vue.prototype.isEnglish = function () {
return this.$i18n.locale === 'en-us'
}
function main () {
new Vue({
@@ -93,7 +103,7 @@ function main () {
store.commit('SET_TOKEN', Vue.ls.get(ACCESS_TOKEN))
store.commit('SET_MULTI_PAGE', Vue.ls.get(DEFAULT_MULTI_PAGE, config.multipage))
},
render: h => h(App),
render: h => h(isMobile() ? MobileApp : App),
data: {
Bus: new Vue()
}
+21 -3
View File
@@ -13,7 +13,19 @@ import { mapGetters } from 'vuex'
let importModalLoading
// 需要数据字段翻译的属性类型
const NEED_DICT_FIELD_TYPE = [FieldType.USER_SINGLE.value, FieldType.ORGAN_SINGLE.value, FieldType.ORGAN_MORE.value, FieldType.FILE_UP.value, FieldType.OPTION_SINGLE.value, FieldType.OPTION_MORE.value, FieldType.TREE.value, FieldType.TREE_SINGLE.value, FieldType.TREE_MODAL_SELECT.value]
const NEED_DICT_FIELD_TYPE = [
FieldType.USER_SINGLE.value,
FieldType.ORGAN_SINGLE.value,
FieldType.ORGAN_MORE.value,
FieldType.FILE_UP.value,
FieldType.OPTION_SINGLE.value,
FieldType.OPTION_MORE.value,
FieldType.TREE.value,
FieldType.TREE_SINGLE.value,
FieldType.TREE_MODAL_SELECT.value,
FieldType.TREE_MODAL_SELECT_SEARCH_DIFF.value,
FieldType.TREE_MODAL_SELECT_SEARCH_CHILD.value
]
const ZH = 'zh-cn'
@@ -162,9 +174,9 @@ export const ConfigurableTableMixin = {
// 是否可排序
item.sorter = item.sortFlag === '1'
item.width = 215
item.title = this.$i18n.locale === ZH ? item.dbFieldTxt : item.dbFieldEnName
item.title = this.isChinese() ? item.dbFieldTxt : item.dbFieldEnName
if (NEED_DICT_FIELD_TYPE.includes(item.fieldShowType)) {
item.dataIndex = item.dbFieldName + '_dictText'
item.dataIndex = this.isChinese() ? item.dbFieldName + '_dictText' : item.dbFieldName + '_dictTextEn'
} else {
item.dataIndex = item.dbFieldName
}
@@ -267,6 +279,12 @@ export const ConfigurableTableMixin = {
},
/* 导入 */
handleImportExcel (info) {
// 限制导入大于 importMaxSize, 各个模块可以单独设置大小
if (this.importMaxSize && info.file.size > 1024 * 1024 * this.importMaxSize) {
this.$message.error(this.$t('importMaxMsg', { size: this.importMaxSize }))
info.fileList.pop()
return
}
// 限制导入大于500MB
if (info.file.size > 1024 * 1024 * 500) {
this.$message.error('导入文件最大500MB')
+8 -2
View File
@@ -1,6 +1,7 @@
import { getProcessNodeList, queryTaskNameByTaskId } from '../api/workCenter'
import Vue from 'vue'
import { USER_INFO } from '../store/mutation-types'
import { findFirstRoute } from '@/utils/util'
export const WorkCenterMixin = {
data () {
@@ -89,7 +90,12 @@ export const WorkCenterMixin = {
let timer = setTimeout(() => {
clearTimeout(timer)
timer = null
this.$router.go(-1)
// 有上个页面就返回,否则就返回第一个页面
if (history.length > 1) {
this.$router.go(-1)
} else {
this.$router.replace({ path: findFirstRoute(this.$store.state.user.permissionList) })
}
}, 700)
},
switchChange (value) {
@@ -104,7 +110,7 @@ export const WorkCenterMixin = {
*/
beforeRouteEnter (to, from, next) {
if (to.query.taskId) {
queryTaskNameByTaskId({taskId: to.query.taskId}).then(res => {
queryTaskNameByTaskId({ taskId: to.query.taskId }).then(res => {
if (res.success) {
to.query.taskName = res.result.taskName
}
+14 -2
View File
@@ -4,7 +4,7 @@ import store from './store'
import NProgress from 'nprogress' // progress bar
import 'nprogress/nprogress.css' // progress bar style
import { ACCESS_TOKEN, OAUTH2_LOGIN_PAGE_PATH, UI_CACHE_DB_DICT_DATA, USER_INFO, USER_NAME } from '@/store/mutation-types'
import { generateIndexRouter, isOAuth2AppEnv, findFirstRoute, welcome } from '@/utils/util'
import { generateIndexRouter, isOAuth2AppEnv, findFirstRoute, welcome, isMobile } from '@/utils/util'
import { getSSOUserInfo, getTodoSSOUserInfo } from './api/api'
import { updatePageHeight } from './components/tools/setting'
@@ -14,6 +14,14 @@ const whiteList = ['/user/login', '/user/register', '/user/register-result', '/u
whiteList.push(OAUTH2_LOGIN_PAGE_PATH)
router.beforeEach(async (to, from, next) => {
if (isMobile()) {
if (to.path !== '/') {
next({ path: '/' })
} else {
next()
}
return
}
// 单点登录-OA单点登录
if (to.query.ticket) {
const { result, success, message } = await getTodoSSOUserInfo({ ticket: to.query.ticket })
@@ -37,7 +45,11 @@ router.beforeEach(async (to, from, next) => {
} else if (to.query.code && to.query.state === 'feishu') {
// 如果没有登录,state是飞书,并且有code,就请求飞书单点登录
await store.dispatch('FeiShuLogin', to.query.code).catch((e) => {
this.$message.warn(e.message)
// 从飞书跳转进来,正常提示,系统内跳转进来不提示(解决用了replace,但是go(-1)还会跳转回来)
if (from.path === '/') {
Vue.prototype.$message.warning(e.message, 3)
}
next({ path: '/user/login', replace: true })
})
} else if (to.query.code) {
// 研发大前台单点登录
+3 -3
View File
@@ -144,9 +144,9 @@ const user = {
GetPermissionList ({ commit }) {
return new Promise((resolve, reject) => {
queryPermissionsByUser().then(response => {
const menuData = response.result.menu
const authData = response.result.auth
const allAuthData = response.result.allAuth
const menuData = (response.result || {}).menu || []
const authData = (response.result || {}).auth || []
const allAuthData = (response.result || {}).allAuth
// Vue.ls.set(USER_AUTH,authData);
sessionStorage.setItem(USER_AUTH, JSON.stringify(authData))
sessionStorage.setItem(SYS_BUTTON_AUTH, JSON.stringify(allAuthData))
+48
View File
@@ -738,3 +738,51 @@ export function queryStandardInfoByStandardNumber (standardNumber) {
})
})
}
/**
* 查找树节点
* @param tree {Array} - 树结构
* @param findVal - 查找的值
* @param valueField - 查找的属性名
* @param childrenField - 子节点属性名
* @return {null | Object} - 返回对应节点
*/
export function findNodeByField (tree, findVal, valueField = 'id', childrenField = 'children') {
for (const node of tree) {
if (node[valueField] === findVal) {
return node
}
if (node[childrenField] && node[childrenField].length > 0) {
const result = findNodeByField(node[childrenField], findVal)
if (result) {
return result
}
}
}
return null
}
// 判断当前是否移动端
export function isMobile () {
const userAgentInfo = navigator.userAgent
const mobileAgents = ['Android', 'iPhone', 'SymbianOS', 'Windows Phone', 'iPad', 'iPod']
let mobileFlag = false
// 根据userAgent判断是否是手机
for (let v = 0; v < mobileAgents.length; v++) {
if (userAgentInfo.indexOf(mobileAgents[v]) > 0) {
mobileFlag = true
break
}
}
const screenWidth = window.screen.width
const screenHeight = window.screen.height
// 根据屏幕分辨率判断是否是手机
if (screenWidth < 500 && screenHeight < 800) {
mobileFlag = true
}
return mobileFlag
}
+53 -27
View File
@@ -3,26 +3,16 @@
<!-- <first-stage-card></first-stage-card>-->
<!-- </div>-->
<div class="all-wrapper">
<a-row :gutter="20">
<a-col :span="24" class="mb-20">
<!-- 检索 -->
<retrieval-card></retrieval-card>
</a-col>
<a-col :span="24" class="mb-20">
<!-- 快捷入口 -->
<quick-enter-card></quick-enter-card>
</a-col>
<a-col :span="10" class="mb-20">
<!-- 待办任务 -->
<to-do-task-card class="mb-20"></to-do-task-card>
<!-- 友情链接 -->
<friend-link-card></friend-link-card>
</a-col>
<a-col :span="14" class="mb-20">
<!-- 预警 -->
<search-and-warning-card></search-and-warning-card>
</a-col>
</a-row>
<!-- 检索 -->
<retrieval-card class="home-search"></retrieval-card>
<!-- 快捷入口 -->
<quick-enter-card class="home-quick-entrance"></quick-enter-card>
<!-- 待办任务 -->
<to-do-task-card class="home-todo"></to-do-task-card>
<!-- 友情链接 -->
<friend-link-card class="home-link"></friend-link-card>
<!-- 列表 -->
<search-and-warning-card class="home-table"></search-and-warning-card>
</div>
</template>
@@ -46,14 +36,45 @@ export default {
@import '~@assets/less/common.less';
.all-wrapper {
padding: 20px 8px 0;
}
.flex-item {
margin: 10px;
}
.mb-20 {
margin-bottom: 20px;
padding: 8px 8px 0;
display: grid;
width: 100%;
height: calc(100vh - 60px - 8px - 20px);
grid-gap: 20px;
grid-template-columns: 0.4fr 0.6fr;
grid-template-rows: 56px 180px minmax(200px, auto) 180px;
grid-template-areas: 'Search Search'
'QuickEntrance QuickEntrance'
'Todo Table'
'Link Table';
.home-search,
.home-quick-entrance,
.home-todo,
.home-link,
.home-table{
height: 100%;
overflow: hidden;
border-radius: 8px;
}
.home-search {
grid-area: Search;
overflow: visible;
}
.home-quick-entrance {
grid-area: QuickEntrance;
}
.home-todo {
grid-area: Todo;
}
.home-link {
grid-area: Link;
}
.home-table {
grid-area: Table;
}
}
/deep/ .top-wrapper {
display: flex;
align-items: center;
@@ -89,6 +110,11 @@ export default {
}
// 1366屏幕
@media screen and (max-width: 1366px) {
.all-wrapper {
height: calc(100vh - 60px - 8px - 20px + 200px);
// 友情链接部分减少了12像素
grid-template-rows: 56px 180px minmax(200px, auto) 168px;
}
/deep/ .top-wrapper {
.left-p {
font-size: 16px;
+32 -8
View File
@@ -1,5 +1,5 @@
<template>
<a-card :bordered="false">
<div class="friend-link-wrapper">
<a-spin :spinning="loading">
<div class="top-wrapper">
<span class="left-p"><i class="iconfont icon-link left-icon"></i>{{$t('dashboard.friendLink.friendLink')}}</span>
@@ -7,15 +7,15 @@
</div>
<div class="content-wrapper">
<div class="content-div" v-for="item in dataSource" :key="item.id" @click="clickLink(item)">
<img class="icon-img" :src="getImg(item.logoUrl)" :alt="item.name">
<a-tooltip placement="top">
<img class="icon-img" :src="getImg(item.logoUrl)" :alt="item.name">
<template slot="title">{{ item.name }}</template>
<p>{{ item.name }}</p>
</a-tooltip>
</div>
</div>
</a-spin>
</a-card>
</div>
</template>
<script>
@@ -69,13 +69,19 @@ export default {
</script>
<style scoped lang="less">
.friend-link-wrapper {
padding: 24px;
background-color: white;
}
@itemSize: 64px;
.content-wrapper {
display: grid;
grid-template-columns: repeat(6, 1fr);
// 总宽度 - 子内容的宽度 = 剩余宽度 / 5 = 就是每个的右间距,最后一个元素不需要右间距
grid-gap: calc((100% - (6 * @itemSize)) / 5);
margin-top: 12px;
}
.content-div {
.content-div > span {
cursor: pointer;
text-align: center;
display: flex;
@@ -86,12 +92,12 @@ export default {
.icon-img {
border-radius: 8px;
width: 64px;
height: 64px;
width: @itemSize;
height: @itemSize;
margin-bottom: 2px;
}
p {
width: 64px;
width: @itemSize;
height: 28px;
line-height: 28px;
margin: 0;
@@ -102,4 +108,22 @@ export default {
white-space: nowrap;
}
}
// 1366屏幕
@media screen and (max-width: 1366px) {
@itemSize: 52px;
.content-wrapper {
grid-gap: calc((100% - (6 * @itemSize)) / 5);
}
.content-div > span {
.icon-img {
width: @itemSize;
height: @itemSize;
}
p {
width: @itemSize;
}
}
}
</style>
+12 -4
View File
@@ -1,5 +1,5 @@
<template>
<a-card :bordered="false">
<div class="quick-enter-wrapper">
<a-spin :spinning="loading">
<div class="top-wrapper">
<p class="left-p"><i class="iconfont icon-rukou left-icon"></i>{{ this.$t('dashboard.quickEnter.quickEnter') }}</p>
@@ -24,7 +24,7 @@
</a-spin>
<!-- 菜单管理 -->
<menu-manage-modal ref="menuManageModal" @ok="loadData"/>
</a-card>
</div>
</template>
<script>
@@ -89,14 +89,22 @@ export default {
</script>
<style scoped lang="less">
.quick-enter-wrapper {
background-color: white;
padding: 24px;
box-sizing: border-box;
}
.content-wrapper {
overflow: auto;
@itemGap: 20px;
display: grid;
margin-top: 12px;
grid-template-columns: repeat(auto-fill, calc(100% / 14));
grid-template-columns: repeat(14, minmax(72px, 1fr));
// 总宽度 - 子内容的宽度 = 剩余宽度 / 5 = 就是每个的右间距,最后一个元素不需要右间距
grid-column-gap: calc((100% - (14 * 72px)) / 13);
& > .content-div > span,
& > .plus-div > span {
padding: 9px 16px 0;
display: flex;
flex-direction: column;
justify-content: center;
+17 -20
View File
@@ -1,19 +1,19 @@
<template>
<!-- 搜索区域 -->
<div class="search-wrapper">
<a-select class="resource-type-select" v-model="resourceType">
<a-select class="resource-type-select" v-model="resourceType" size="large">
<a-select-option value="all">{{ $t('dashboard.generalSearch.all')}}</a-select-option>
<a-select-option v-for="item in resourceTypeOptions" :key="item.value" :value="item.value" :title="item.title">
{{ item.title }}
<a-select-option v-for="item in resourceTypeOptions" :key="item.value" :value="item.value" :title="isChinese() ? item.title : item.enText">
{{ isChinese() ? item.title : item.enText }}
</a-select-option>
</a-select>
<a-input class="search-input" v-model="searchValue" :placeholder="$t('pleaseEnter')" @pressEnter="searchInputEnter">
<a-input class="search-input" size="large" v-model="searchValue" :placeholder="$t('pleaseEnter')" @pressEnter="searchInputEnter">
<a-icon slot="prefix" type="search" style="color: #0064FA;" />
</a-input>
<div class="btn-box">
<a-button type="primary" icon="search" @click="toSearchWindow('title')">{{ $t('dashboard.retrieval.titleSearch') }}</a-button>
<a-button type="primary" icon="search" @click="toSearchWindow('fullText')">{{ $t('dashboard.retrieval.fullSearch') }}</a-button>
<a-button type="primary" class="btn-ghost" ghost @click="toAdvancedSearch"><img :src="require('@/assets/image/icon/super-search.png')" alt='' class="btn-icon">{{ $t('dashboard.retrieval.advancedSearch') }}</a-button>
<a-button type="primary" size="large" icon="search" @click="toSearchWindow('title')">{{ $t('dashboard.retrieval.titleSearch') }}</a-button>
<a-button type="primary" size="large" icon="search" @click="toSearchWindow('fullText')">{{ $t('dashboard.retrieval.fullSearch') }}</a-button>
<a-button type="primary" size="large" class="btn-ghost" ghost @click="toAdvancedSearch"><img :src="require('@/assets/image/icon/super-search.png')" alt='' class="btn-icon">{{ $t('dashboard.retrieval.advancedSearch') }}</a-button>
</div>
</div>
</template>
@@ -80,21 +80,21 @@ export default {
<style lang="less" scoped>
@height: 56px;
.search-wrapper {
width: 80%;
margin: 0 auto;
width: 80%;
display: grid;
grid-template-columns: 102px 1fr auto;
grid-template-columns: 120px 1fr auto;
grid-gap: 10px;
& > .resource-type-select {
flex: 0 0 102px;
height: 100%;
color: @primary-color;
/deep/.ant-select-arrow svg {
fill: @primary-color;
}
/deep/.ant-select-selection--single {
height: @height;
height: 100%;
border-color: @primary-color;
}
/deep/.ant-select-arrow {
@@ -108,7 +108,8 @@ export default {
}
& > .search-input {
flex: auto;
height: 100%;
font-size: 16px;
//margin-left: 10px;
/deep/.ant-input-prefix {
left: 24px;
@@ -116,14 +117,14 @@ export default {
/deep/.ant-input {
padding-left: 40px;
height: @height;
height: 100%;
border-color: @primary-color;
}
}
.btn-box .ant-btn {
flex: 138px;
height: @height;
min-width: 138px;
height: 100%;
&:not(:first-child) {
margin-left: 10px;
@@ -133,10 +134,6 @@ export default {
.btn-icon {
margin-right: 8px;
vertical-align: top;
}
@media screen and (max-width: 1366px) {
@height: 42px;
vertical-align: sub;
}
</style>
@@ -12,10 +12,11 @@
size="middle"
:rowKey="(_, index) => index"
class="table"
:scroll="{ x: '100%', y: '40vh' }"
:scroll="{ x: '100%', y: 'calc(100vh - 550px)' }"
:columns="showColumns"
:dataSource="dataSource"
:pagination="ipagination"
:components="components"
@change="handleTableChange"
:loading="loading">
<template slot="text" slot-scope="text">
@@ -32,6 +33,14 @@
<div v-else class="table-text">{{ global.emptyLine }}</div>
</a-tooltip>
</template>
<!-- 标准状态 -->
<template v-slot:standardState="text, record">
<a-tooltip overlay-class-name="tooltip-style">
<template slot="title">{{ text || text === 0 ? text : global.emptyLine }}</template>
<div v-if="text" class="status-style" :style="getStandardStateStyle(record)">{{ text }}</div>
<div v-else class="table-text">{{ global.emptyLine }}</div>
</a-tooltip>
</template>
<!-- 企标号企标名称 -->
<template v-slot:enStandard="text, record">
<a-tooltip overlay-class-name="tooltip-style">
@@ -61,7 +70,7 @@
</template>
<script>
import { StandardSource } from '@/enums/commonEnums'
import { EnterpriseStandardStatus, StandardSource, StandardStatus } from '@/enums/commonEnums'
import { getMarketRegulationsList } from '../../../api/api'
import {
getHomeNewStandard,
@@ -210,7 +219,7 @@ export default {
align: 'left',
dataIndex: 'standardState_dictText',
width: 100,
scopedSlots: { customRender: 'text' },
scopedSlots: { customRender: 'standardState' },
show: () => {
return [
this.tabList[0].key,
@@ -222,7 +231,7 @@ export default {
{ // 代替标准编号
title: this.$t('dashboard.tableList.substituteStandardNumber'),
align: 'left',
dataIndex: 'substituteStandardNumber',
dataIndex: 'replacedByStandardNumber',
width: 100,
scopedSlots: { customRender: 'text' },
show: () => {
@@ -308,6 +317,11 @@ export default {
showSizeChanger: true,
total: 0
},
components: {
header: {
cell: this.initHeader(this.columns)
}
},
url: {
list: '/laws/localTool/standardEarlyWarning/newModelImplementation'
}
@@ -319,6 +333,71 @@ export default {
// this.loadData(1)
},
methods: {
// 自定义渲染表头(表头换行影响高度)
initHeader () {
return (h, props, children, abc) => {
// 获取列的key值和特性
const { key, ...restProps } = props
const col = this.columns.find(col => col.dataIndex === key)
if (col) {
return (
<th {...restProps}>
<a-tooltip overlay-class-name="tooltip-style">
<template slot="title">{col.title}</template>
<div class="table-text">{col.title}</div>
</a-tooltip>
</th>
)
}
return (
<th {...restProps}>{children}</th>
)
}
},
// 获取标准状态
getStandardStateStyle (row) {
let color = ''
switch (row.standardState + '') {
// 草案
case StandardStatus.DRAFT.value:
color = '243, 129, 65'
break
// 征求意见
case StandardStatus.SEEK_FOR_OPTIONS.value:
color = '129, 206, 94'
break
// 审查
case StandardStatus.EXAMINE.value:
color = '255, 98, 98'
break
// 报批
case StandardStatus.APPROVAL.value:
color = '48, 175, 255'
break
// 发布
case StandardStatus.RELEASE.value:
color = '6, 176, 140'
break
// 现行有效(外部标准\企标)
case StandardStatus.CURRENTLY_EFFECTIVE.value:
case EnterpriseStandardStatus.CURRENTLY_EFFECTIVE.value:
color = '137, 138, 233'
break
// 废止(外部标准\企标)
case StandardStatus.ABOLISH.value:
case EnterpriseStandardStatus.ABOLISH.value:
color = '156, 177, 208'
break
}
if (color) {
return {
backgroundColor: `rgba(${color}, 0.1)`,
border: `1px solid rgba(${color}, 0.5)`,
color: `rgba(${color}, 1)`
}
}
return {}
},
/**
* 查看标准分解单
*/
@@ -361,7 +440,7 @@ export default {
this.dataSource = []
this.warningTab = value
this.showColumns = this.columns.filter(col => col.show ? col.show() : true).map(item => {
return Object.assign({}, item, { show: undefined })
return Object.assign({}, item, { show: undefined, ellipsis: true })
})
this.loadData(1)
},
@@ -471,7 +550,7 @@ export default {
<style scoped lang="less">
// 预警容器
.warning-wrapper {
height: calc(100vh - 406px);
height: 100%;
}
// tab样式
@@ -479,6 +558,7 @@ export default {
/deep/.ant-tabs-bar {
margin-bottom: 0;
border: none;
}
/deep/&.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab {
@@ -513,6 +593,7 @@ export default {
}
// 表格样式
.table-warpper {
border-radius: 8px;
// 内容高度 = 该部分整体高度 - tab高度
height: calc(100% - 44px);
background-color: #fff;
@@ -524,6 +605,11 @@ export default {
/deep/ .ant-table-thead > tr > th {
background-color: #fff;
font-weight: 400;
font-family: PingFang SC, PingFang SC, sans-serif;
color: #666666;
font-weight: 400;
font-size: 14px;
}
/deep/ .ant-table-row .ant-table-row-cell-break-word {
@@ -539,7 +625,21 @@ export default {
}
@media screen and (max-width: 1366px) {
.warning-wrapper {
height: calc(100vh - 226px);
/deep/ .ant-table-body {
max-height: calc(100vh - 345px) !important;
}
//height: calc(110vh - 550px) !important;
}
}
// 标准状态样式
.status-style {
border-radius: 14px;
height: 28px;
line-height: 28px;
padding: 0 12px;
display: inline-block;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
</style>
+7 -5
View File
@@ -1,5 +1,5 @@
<template>
<a-card :bordered="false" class="todo-card">
<div class="todo-wrapper">
<a-spin :spinning="loading">
<div class="top-wrapper">
<p class="left-p"><i class="iconfont icon-calendar left-icon"></i>{{ $t('dashboard.todoTask.todoTask') }}</p>
@@ -18,7 +18,7 @@
</div>
<a-list :data-source="[]" v-else></a-list>
</a-spin>
</a-card>
</div>
</template>
<script>
@@ -98,8 +98,10 @@ export default {
<style lang="less" scoped>
@size: 48px;
.todo-card {
height: calc(100vh - 611px);
.todo-wrapper {
padding: 24px;
background-color: white;
/deep/ .ant-spin-container,
/deep/ .ant-spin-nested-loading,
/deep/ .ant-card-body {
@@ -108,7 +110,7 @@ export default {
}
.content-wrapper {
height: calc(100% - 30px - 12px);
margin-top: 10px;
margin-top: 12px;
overflow-y: auto;
.content-item {
+42 -20
View File
@@ -12,7 +12,7 @@
<a-divider>{{ $t('dashboard.advancedSearch.retrieveCategories') }}</a-divider>
<div class="filter-area-div" ref="filterArea">
<a-row :gutter="24" class="filter-row">
<a-col :md="2" class="label-col"><span class="search_label">{{ $t('dashboard.advancedSearch.searchType') }}</span></a-col>
<a-col :md="2" class="label-col" :title="$t('dashboard.advancedSearch.searchType')"><span class="search_label">{{ $t('dashboard.advancedSearch.searchType') }}</span></a-col>
<a-col :md="18" class="option-col">
<div v-for="item in standardTypeOptions" :key="item.value" class="option-div" :class="currStandardType === item.value ? 'option-curr' : ''" @click="standardTypeChange(item.value)">
{{ item.label }}
@@ -31,6 +31,7 @@
<a-form-item :label="item.dbFieldTxt" :labelCol="labelCol" :wrapperCol="wrapperCol" :colon="false">
<template v-if="item.fieldShowType === FieldType.TREE.value">
<a-tree-select
:replaceFields="getReplaceFields(item.dbFieldName)"
tree-node-filter-prop="title"
v-model="queryParam[item.dbFieldName]"
:maxTagCount="1"
@@ -44,6 +45,7 @@
<!-- 树形选择器单选 -->
<template v-if="item.fieldShowType === FieldType.TREE_SINGLE.value">
<a-tree-select
:replaceFields="getReplaceFields(item.dbFieldName)"
tree-node-filter-prop="title"
v-model="queryParam[item.dbFieldName]"
:maxTagCount="1"
@@ -60,14 +62,11 @@
<a-input :placeholder="$t('pleaseEnter')+item.dbFieldTxt"
v-model="queryParam[item.dbFieldName]"></a-input>
</template>
<!-- 日期区间 -->
<!-- 日期区间(条款选择的日期只要单侧) -->
<template v-else-if="[FieldType.DATE_SINGLE.value, FieldType.DATE_MORE.value].includes(item.fieldShowType)">
<j-range-picker v-model="queryParam[item.dbFieldName]"
<j-date-picker v-model="queryParam[item.dbFieldName]"
format="YYYY-MM-DD" value-format="YYYY-MM-DD"
@change="onChange(item.dbFieldName)"></j-range-picker>
<!--<a-range-picker v-model="queryParam[item.dbFieldName]"-->
<!-- format="YYYY-MM-DD" value-format="YYYY-MM-DD"-->
<!-- @change="onChange(item.dbFieldName)"></a-range-picker>-->
@change="onChange(item.dbFieldName)"></j-date-picker>
</template>
<!-- 字典单选框 -->
<template v-else-if="item.fieldShowType === FieldType.OPTION_SINGLE.value">
@@ -133,6 +132,7 @@
:tree-data="optionsData[item.dbFieldName]"
:replaceFields="{key: 'id', value: 'id', title: 'name', children: 'childPartNameList'}"
tree-checkable
tree-check-strictly
show-search
allowClear
:filterTreeNode="filterTreeOption"
@@ -244,14 +244,20 @@ import Vue from 'vue'
import { ACCESS_TOKEN } from '../../../store/mutation-types'
import { previewPdf } from '../../../utils/previewPdf'
import { kkFilePreview } from '../../../utils/kkFilePreview'
import JRangePicker from '@comp/JDatePicker'
import JDatePicker from '@comp/JDatePicker'
export default {
name: 'AdvancedSearch',
components: { JRangePicker, JTable },
components: { JDatePicker, JTable },
data () {
return {
FieldType,
// 需要英文状态下翻译下拉的字段
dictTextFieldList: [
'professional_field', // 全部-专业领域
'applicable_market', // 适用市场
'domain_area' // 条款-专业领域
],
loading: false,
toggleSearchStatus: true, // 检索条件的展开和收起,false收缩状态
currStandardType: '1', // 1外部 3企标 4条款 5全部
@@ -385,13 +391,13 @@ export default {
dataIndex: 'item_content',
scopedSlots: { customRender: 'item_content' }
},
{ // 适用零部件
title: this.$t('dashboard.advancedSearch.applicableComponents'),
align: 'center',
width: 180,
dataIndex: 'applicable_components',
scopedSlots: { customRender: 'text' }
},
// { // 适用零部件
// title: this.$t('dashboard.advancedSearch.applicableComponents'),
// align: 'center',
// width: 180,
// dataIndex: 'applicable_components',
// scopedSlots: { customRender: 'text' }
// },
{ // 新生产车实施日期
title: this.$t('dashboard.advancedSearch.newProduceVehiclesImplementationDate'),
align: 'center',
@@ -417,7 +423,7 @@ export default {
title: this.$t('dashboard.advancedSearch.keywords'),
align: 'center',
width: 180,
dataIndex: 'keywords',
dataIndex: 'part_name_dictText',
scopedSlots: { customRender: 'text' }
},
{ // 责任部门
@@ -550,6 +556,18 @@ export default {
this.queryParam.standard_state = this.defaultStandardStatus
},
methods: {
/**
* 处理英文下树结构下拉的字段替换
* @param field - 字段名
*/
getReplaceFields (field) {
const obj = {}
// 数据字典或标签内容管理英文是enTitle
if (this.dictTextFieldList.includes(field)) {
obj.title = this.isChinese() ? 'title' : 'enTitle'
}
return obj
},
// 导出
handleExportXls (fileName, fileSuffix = '.xls') {
if (!fileName || typeof fileName !== 'string') {
@@ -615,16 +633,17 @@ export default {
path = '/enterpriseStandardLibrary/enterpriseStandardDetail'
} else if (this.currStandardType === '5') {
// 全部的话,就判断是企标还是外部
if (record.resource_type === StandardSource.FOREIGN.value) {
if (record.resource_type + '' === StandardSource.FOREIGN.value) {
path = '/standardRegulationLibrary/foreignStandardDetailPage'
} else if (record.resource_type === StandardSource.ENTERPRISE.value) {
} else if (record.resource_type + '' === StandardSource.ENTERPRISE.value) {
path = '/enterpriseStandardLibrary/enterpriseStandardDetail'
}
}
this.$openPageNewSheet({
path: path,
query: {
id: record.id
id: record.id,
standardNumber: record.standard_number
}
})
},
@@ -963,6 +982,9 @@ export default {
.label-col {
text-align: left;
color: #86909c;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.option-col {
width: calc(100% - 200px);
+7 -3
View File
@@ -66,7 +66,7 @@
<div class="label-col"><span class="search_label">{{ selectOptions[value].label }}</span></div>
<div class="option-col">
<div v-for="item in selectOptions[value].options" :key="item.itemValue" class="option-div" :class="selectOptions[value].current === item.itemValue ? 'option-curr' : ''" @click="selectOptionsChange(value, item.itemValue)">
<span>{{ item.itemText }}<span v-if="item.statisticsCount || item.statisticsCount === 0">(<span class="option-span-num">{{ item.statisticsCount }}</span>)</span></span>
<span>{{ isChinese() ? item.itemText : item.itemTextEnglish }}<span v-if="item.statisticsCount || item.statisticsCount === 0">(<span class="option-span-num">{{ item.statisticsCount }}</span>)</span></span>
</div>
</div>
</div>
@@ -330,7 +330,11 @@ export default {
if (res.result[item]) {
// 通过key获取对应label
const label = this.getLabelByKey(item)
res.result[item].unshift({ itemText: this.$t('dashboard.generalSearch.all'), itemValue: 'all' })
res.result[item].unshift({
itemText: this.$t('dashboard.generalSearch.all'),
itemTextEnglish: this.$t('dashboard.generalSearch.all'),
itemValue: 'all'
})
this.selectOptions[item] = {
options: res.result[item],
label: label,
@@ -908,7 +912,7 @@ export default {
line-height: 28px;
margin-right: 20px;
max-height: calc(100% - 340px);
max-width: 50%;
max-width: 30%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
@@ -136,7 +136,8 @@ export default {
{
title: this.$t('docTool.comparison.oldTextState'),
width: 150,
dataIndex: 'fileTypeLeft_dictText'
dataIndex: 'fileTypeLeft_dictText',
scopedSlots: { customRender: 'dictText' }
},
// 新文档文本号
{
@@ -156,13 +157,15 @@ export default {
{
title: this.$t('docTool.comparison.newTextState'),
width: 150,
dataIndex: 'fileTypeRight_dictText'
dataIndex: 'fileTypeRight_dictText',
scopedSlots: { customRender: 'dictText' }
},
// 发布情况
{
title: this.$t('docTool.comparison.releaseSituation'),
width: 150,
dataIndex: 'releaseState_dictText'
dataIndex: 'releaseState_dictText',
scopedSlots: { customRender: 'dictText' }
},
// 创建人
{
@@ -256,6 +259,11 @@ export default {
onOk: () => {
const idList = []
const selectionRows = JSON.parse(JSON.stringify(this.selectionRows))
// 发布状态不能删除
if (selectionRows.some(item => item.releaseState !== 'draft')) {
this.$message.warning(this.$t('publishedAndCannotDeleted'))
return
}
for (let i = 0; i < selectionRows.length; i++) {
if (selectionRows[i].createBy === this.userInfo.username &&
selectionRows[i].releaseState === 'draft') {
@@ -166,7 +166,7 @@ export default {
queryParamLeft: {},
ipaginationLeft: {
current: 1,
pageSize: 50,
pageSize: 10,
pageSizeOptions: ['10', '50', '100', '150', '200'],
showTotal: (total, range) => {
return range[0] + '-' + range[1] + ' ' + this.$t('total') + ' ' + total + ' ' + this.$t('strip')
@@ -182,7 +182,7 @@ export default {
queryParamRight: {},
ipaginationRight: {
current: 1,
pageSize: 50,
pageSize: 10,
pageSizeOptions: ['10', '50', '100', '150', '200'],
showTotal: (total, range) => {
return range[0] + '-' + range[1] + ' ' + this.$t('total') + ' ' + total + ' ' + this.$t('strip')
@@ -230,7 +230,8 @@ export default {
title: this.$t('docTool.comparison.textStatus'),
ellipsis: true,
dataIndex: 'fileType_dictText',
width: 100
width: 100,
scopedSlots: { customRender: 'dictText' }
},
{
title: this.$t('fileName'),
@@ -263,7 +264,8 @@ export default {
title: this.$t('docTool.comparison.textStatus'),
ellipsis: true,
dataIndex: 'fileType_dictText',
width: 100
width: 100,
scopedSlots: { customRender: 'dictText' }
},
{
title: this.$t('fileName'),
@@ -96,7 +96,7 @@ import '../../../assets/less/common.less'
import JTable from '../../../components/jero/JTable.vue'
import SplitText from './modules/SplitText.vue'
import { JeroListMixin } from '@/mixins/JeroListMixin'
import { releaseSplitStandard, changePermission, withdraw } from '@api/documentToolApi'
import { releaseSplitStandard, changePermission, withdraw, checkChangePermission } from '@api/documentToolApi'
import ImportSplitResultModal from './modules/ImportSplitResultModal.vue'
import UserSelectModal from '../../../components/selection/UserSelectModal.vue'
import { SplitStatus, StandardSource } from '@/enums/commonEnums'
@@ -183,7 +183,8 @@ export default {
{
dataIndex: 'fileType_dictText',
title: this.$t('docTool.split.fileStatus'),
width: 150
width: 150,
scopedSlots: { customRender: 'dictText' }
},
// 文件名称
{
@@ -195,7 +196,8 @@ export default {
{
dataIndex: 'splitStatus_dictText',
title: this.$t('docTool.split.splitState'),
width: 150
width: 150,
scopedSlots: { customRender: 'dictText' }
},
// 编辑人
{
@@ -292,6 +294,7 @@ export default {
query: {
infoId: record.id,
infoNumber: record.serialNumber,
standardClass: record.standardClass,
createBy: record.createBy,
standardName: record.title
}
@@ -327,7 +330,14 @@ export default {
this.$message.warning(this.$t('selectAtLeastOne'))
return
}
this.$refs.userSelectModal.open()
// 校验是否有权限更改
checkChangePermission({ ids: this.selectedRowKeys.join(',') }).then(res => {
if (res.success) {
this.$refs.userSelectModal.open()
} else {
this.$message.warn(res.message)
}
})
},
continueChangePermission (id) {
this.loading = true
@@ -48,19 +48,19 @@
<i class="iconfont icon-shanchu_" />
</a-button>
<!--节点上移是否可以上移在树形数据中应该有字段标识-->
<a-button icon="up"
v-if="record.pid"
class="tree-operate-node-btn"
@click.stop="orgMoveUp(record)"
v-has="'split:sarFileSplitMenu:moveUp'">
</a-button>
<!--<a-button icon="up"-->
<!-- v-if="record.pid"-->
<!-- class="tree-operate-node-btn"-->
<!-- @click.stop="orgMoveUp(record)"-->
<!-- v-has="'split:sarFileSplitMenu:moveUp'">-->
<!--</a-button>-->
<!--节点下移是否可以下移在树形数据中应该有字段标识-->
<a-button icon="down"
v-if="record.pid"
class="tree-operate-node-btn"
@click.stop="orgmoveDown(record)"
v-has="'split:sarFileSplitMenu:moveDown'">
</a-button>
<!--<a-button icon="down"-->
<!-- v-if="record.pid"-->
<!-- class="tree-operate-node-btn"-->
<!-- @click.stop="orgmoveDown(record)"-->
<!-- v-has="'split:sarFileSplitMenu:moveDown'">-->
<!--</a-button>-->
</div>
</div>
</template>
@@ -243,6 +243,8 @@ export default {
mixins: [ConfigurableTableMixin],
data () {
return {
// 导入的最大大小
importMaxSize: 20,
StandardSource,
data: [],
loading: false, // 提交的加载
@@ -373,7 +375,8 @@ export default {
this.menuId = this.selectedKeys[0]
this.uploadData = {
menuId: this.menuId,
infoId: this.infoId
infoId: this.infoId,
standardClass: this.$route.query.standardClass
}
this.filters.info_id = this.infoId
this.filters.menu_id = this.menuId
@@ -17,9 +17,12 @@
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" :label="$t('standardSelect.standardNumber')">
<standard-selection :placeholder="$t('pleaseSelect') + $t('standardSelect.standardNumber')"
type="radio"
splitSearch
disabledSourceSearch
@nameChange="handleStandardNumberChange"
@listChange="handleStandardListChange"
:select-only="true"
:can-selected-source="[StandardSource.FOREIGN.value, StandardSource.ENTERPRISE.value]"
:can-selected-source="[StandardSource.FOREIGN.value]"
class="readonly-input"
v-decorator="['serialNumber', validatorRules.serialNumber]" />
</a-form-item>
@@ -111,6 +114,7 @@ export default {
validateTrigger: 'change'
}
},
standardInfo: {}, // 选择的标准
downTemplateUrl: '/laws/DocumentTool/documentSplit/downloadImportTemplate' // 模板下载
}
},
@@ -122,8 +126,10 @@ export default {
this.form.validateFields(async (errors, values) => {
if (!errors) {
this.confirmLoading = true
const formData = values
const formData = Object.assign({}, values)
const fileInfo = await getFileInfo({ id: formData.splitFileId })
formData.standardId = this.standardInfo.id
formData.standardClass = this.standardInfo.standardClass
if (fileInfo.success) {
formData.fileName = fileInfo.result.fileName
}
@@ -196,6 +202,9 @@ export default {
handleStandardNumberChange (name) {
this.form.setFieldsValue({ title: name })
},
handleStandardListChange (list) {
this.standardInfo = list[0] || {}
},
// 下载导入模板
downTemplate (fileName, fileSuffix = '.xls') {
if (!fileName || typeof fileName !== 'string') {
@@ -126,6 +126,7 @@
<!-- 12, 树选择 -->
<s-tree-select
v-else-if="item.fieldShowType === FieldType.TREE.value"
:replaceFields="getReplaceFields(item.dbFieldName)"
v-model="formInline[item.dbFieldName]"
:disabled="disabled || disabledFieldList.includes(item.dbFieldName)"
:tree-data="optionsData[item.dbFieldName]"
@@ -145,24 +146,33 @@
<!-- 15, 树选择单选 -->
<s-tree-select v-else-if="item.fieldShowType === FieldType.TREE_SINGLE.value"
v-model="formInline[item.dbFieldName]"
:replaceFields="getReplaceFields(item.dbFieldName)"
:disabled="disabled || disabledFieldList.includes(item.dbFieldName)"
:tree-data="optionsData[item.dbFieldName]"
:label-in-value="false"
@change="updateDom"
:placeholder="$t('pleaseSelect')+item.dbFieldTxt + getPlaceholderSuffix(item)" />
<!--16树形弹框选择-->
<tree-selection v-else-if="item.fieldShowType === FieldType.TREE_MODAL_SELECT.value"
:placeholder="$t('pleaseSelect')+item.dbFieldTxt + getPlaceholderSuffix(item)"
v-model="formInline[item.dbFieldName]"
:filedName="item.dbFieldName"
type="checkbox"
:options-href="item.fieldHref"
:nameStr="formInline[item.dbFieldName + '_dictText']"
:dict-id="item.dictId"
:disabled="disabled || disabledFieldList.includes(item.dbFieldName)"
:children-column-name="getTreeSelectionChildrenColumnName(item)"
:is-tag-library-restriction="item.dbFieldName === 'property_tag'"
:search-field-name="item.dbFieldName === 'property_tag' ? 'firstNodeName' : null" />
<!--<tree-selection v-else-if="item.fieldShowType === FieldType.TREE_MODAL_SELECT.value || item.fieldShowType === FieldType.TREE_MODAL_SELECT_SEARCH_DIFF.value"-->
<!-- :placeholder="$t('pleaseSelect')+item.dbFieldTxt + getPlaceholderSuffix(item)"-->
<!-- v-model="formInline[item.dbFieldName]"-->
<!-- :filedName="item.dbFieldName"-->
<!-- type="checkbox"-->
<!-- :options-href="item.fieldHref"-->
<!-- :nameStr="formInline[item.dbFieldName + '_dictText']"-->
<!-- :dict-id="item.dictId"-->
<!-- :disabled="disabled || disabledFieldList.includes(item.dbFieldName)"-->
<!-- :children-column-name="getTreeSelectionChildrenColumnName(item)"-->
<!-- :is-tag-library-restriction="item.dbFieldName === 'property_tag'"-->
<!-- :search-field-name="item.dbFieldName === 'property_tag' ? 'firstNodeName' : null" />-->
<tree-data-selection v-else-if="item.fieldShowType === FieldType.TREE_MODAL_SELECT.value || item.fieldShowType === FieldType.TREE_MODAL_SELECT_SEARCH_DIFF.value"
:placeholder="$t('pleaseSelect')+item.dbFieldTxt"
v-model="formInline[item.dbFieldName]"
:fieldName="item.dbFieldName"
:nameStr="formInline[item.dbFieldName + '_dictText']"
@nameChange="treeDataSelectNameChange"
:optionsHref="item.treeFirstHref"
:dict-id="item.dictId"/>
</a-form-model-item>
</div>
</template>
@@ -177,7 +187,7 @@
<a-button type="primary" icon="plus" ghost @click="handleAddClauseContent(-1)">{{ $t('newlyAdded') }}</a-button>
</div>
<template v-if="contentList && contentList.length > 0">
<div class="clause-item" v-for="(clause, index) in contentList" :key="index + 'clause'">
<div class="clause-item" v-for="(clause, index) in contentList" :key="clause.uuid || (index + 'clause')">
<div class="clause-item-operate">
<a-button @click="handleAddClauseContent(index)">{{ $t('newlyAdded') }}</a-button>
<a-button v-if="clause.type === TypeOfClauseItem.TABLE.value" @click="splitEdit(index,clause)">
@@ -273,12 +283,15 @@ import { getAction } from '../../../../api/manage'
import { getFormDictTreeList } from '../../../../api/api'
import STreeSelect from '../../../../components/STreeSelect'
import TreeSelection from '../../../../components/selection/TreeSelection'
import { randomUUID } from '@/utils/util'
import TreeDataSelection from '@comp/selection/TreeDataSelection'
import SplitAddClauseUploadImage from '@comp/splitUpload/SplitAddClauseUploadImage'
export default {
name: 'SplitAddForm',
components: {
SplitAddClauseUploadImage,
TreeDataSelection,
TreeSelection,
JMultipleDatePicker,
SplitDetailAddTable,
@@ -294,6 +307,12 @@ export default {
hiddenFieldList: ['item_content', 'translation'], // 隐藏的字段
radioDictSelect: [], // 使用radio样式的数据字典单选
disabledFieldList: [], // 禁用的字段
// 需要英文状态下翻译下拉的字段
dictTextFieldList: [
'professional_field', // 全部-专业领域
'applicable_market', // 适用市场
'domain_area' // 条款-专业领域
],
specialPlaceholder: {}, // 特殊的placeholder
optionsData: {}, // 通过接口获取的下拉数据
title: this.$t('newlyAdded'),
@@ -343,6 +362,18 @@ export default {
}
},
methods: {
/**
* 处理英文下树结构下拉的字段替换
* @param field - 字段名
*/
getReplaceFields (field) {
const obj = {}
// 数据字典或标签内容管理英文是enTitle
if (this.dictTextFieldList.includes(field)) {
obj.title = this.isChinese() ? 'title' : 'enTitle'
}
return obj
},
/**
* 新增
*/
@@ -533,35 +564,45 @@ export default {
},
// 增加条款内容成功
handleAddOk (type, content) {
const headerArr = this.contentList.splice(0, this.addIndex + 1)
const footerArr = this.contentList.splice(-this.addIndex)
const insertArr = []
switch (type) {
case TypeOfClauseItem.TEXT.value:
for (let i = 0; i < content; i++) {
insertArr.push({
id: '',
uuid: randomUUID(),
type: TypeOfClauseItem.TEXT.value,
[this.currentFieldObj.field]: ''
})
}
break
case TypeOfClauseItem.IMG.value:
insertArr[0] = {
id: '',
type: TypeOfClauseItem.IMG.value,
[this.currentFieldObj.field]: content.file.response.result.url,
[this.currentFieldObj.tempUrlField]: window._CONFIG.domianURL + '/sys/split/file/getImage?fileName=' + content.file.response.result.fileName
// 处理上传接口报错的情况
if (content.imgs) {
content.imgs.forEach(file => {
insertArr.push({
id: '',
uuid: randomUUID(),
type: TypeOfClauseItem.IMG.value,
[this.currentFieldObj.field]: file.response.result.url,
[this.currentFieldObj.tempUrlField]: window._CONFIG.domianURL + '/sys/split/file/getImage?fileName=' + file.response.result.fileName
})
})
}
break
case TypeOfClauseItem.TABLE.value:
insertArr[0] = {
id: '',
uuid: randomUUID(),
type: 'TABLE',
[this.currentFieldObj.field]: content[0]
}
}
this.contentList = [...headerArr, ...insertArr, ...footerArr]
if (this.addIndex !== -1) {
this.contentList.splice(this.addIndex + 1, 0, ...insertArr)
} else {
this.contentList.push(...insertArr)
}
},
/**
* 译文编辑
@@ -770,6 +811,9 @@ export default {
}
return null
},
treeDataSelectNameChange (value, fieldName) {
this.formInline[fieldName + '_dictText'] = value
},
/**
* 如果字段中的usableRange只有一个值,那么就需要在placeholder中标识
* @param field
@@ -128,7 +128,7 @@ export default {
disabled: false,
titleImg: this.$t('uploadPictures'),
listType: 'picture',
accept: '.png,.jpeg,.jpg,.gif',
accept: '.png,.jpeg,.jpg',
// 表格行列相关数据
rowColForm: {},
validatorRowColRules: {
@@ -159,8 +159,11 @@ export default {
},
// 上传文件
uploadSuccess (file, data, imgs) {
this.$emit('ok', TypeOfClauseItem.IMG.value, { file, data, imgs })
this.visible = false
// 所有文件都上传完成再去关闭弹框
if (Array.isArray(imgs) && imgs.every(item => item.status === 'done')) {
this.$emit('ok', TypeOfClauseItem.IMG.value, { file, data, imgs })
this.visible = false
}
// this.$emit('addImageOk', file, data, imgs)
},
// 确定增加的类型
@@ -146,7 +146,7 @@
:label-in-value="false"
:placeholder="$t('pleaseSelect')+item.dbFieldTxt + getPlaceholderSuffix(item)" />
<!--16树形弹框选择-->
<tree-selection v-else-if="item.fieldShowType === FieldType.TREE_MODAL_SELECT.value"
<tree-selection v-else-if="item.fieldShowType === FieldType.TREE_MODAL_SELECT.value || item.fieldShowType === FieldType.TREE_MODAL_SELECT_SEARCH_DIFF.value"
:placeholder="$t('pleaseSelect')+item.dbFieldTxt + getPlaceholderSuffix(item)"
v-model="formInline[item.dbFieldName]"
:filedName="item.dbFieldName"
@@ -108,7 +108,8 @@ export default {
{
dataIndex: 'origin_dictText',
title: this.$t('docTool.split.dataType'),
width: 150
width: 150,
scopedSlots: { customRender: 'dictText' }
},
// 标准号
{
@@ -126,7 +127,8 @@ export default {
{
dataIndex: 'standardFileType_dictText',
title: this.$t('docTool.comparison.textStatus'),
width: 150
width: 150,
scopedSlots: { customRender: 'dictText' }
},
// 附件
{
@@ -151,6 +153,20 @@ export default {
this.loadStandardStructureTree()
},
methods: {
// 获取树结构没有被禁用的value值
getValuesWhereNotDisabled (tree = []) {
const values = []
function traverse (node) {
if (!node.disabled) { // 只处理 disabled 不为 true 的节点
values.push(node.value)
}
if (node.children && node.children.length > 0) {
node.children.forEach(child => traverse(child))
}
}
tree.forEach(node => traverse(node))
return values
},
getQueryParams () {
// 获取查询条件
const sqp = {}
@@ -162,17 +178,18 @@ export default {
param.field = this.getQueryField()
param.pageNo = this.ipagination.current
param.pageSize = this.ipagination.pageSize
if (Array.isArray(param.standardSystem)) {
if (Array.isArray(param.standardSystem) && param.standardSystem.length) {
param.standardSystem = param.standardSystem.map(item => item.value).join(',')
} else {
param.standardSystem = this.getValuesWhereNotDisabled(this.standardStructureTree).join(',')
}
return filterObj(param)
},
// 加载标准结构树
loadStandardStructureTree () {
// option 不传显示我的收藏,1不显示我的收藏
getForeignStandardTree({ option: 1 }).then(res => {
// option 不传显示我的收藏,1不显示我的收藏, 2只能选二级中国及中国下三级,和欧盟EU
getForeignStandardTree({ option: 2 }).then(res => {
if (res.success) {
console.log(res.result)
this.standardStructureTree = res.result || []
}
})
@@ -132,14 +132,14 @@ export default {
title: this.$t('docTool.ocrTextRecognition.textStatus'),
align: 'center',
width: 180,
dataIndex: 'fileTypeDictText',
scopedSlots: { customRender: 'text' }
dataIndex: 'fileType_dictText',
scopedSlots: { customRender: 'dictText' }
},
{ // 转换结果
title: this.$t('docTool.ocrTextRecognition.conversionResults'),
align: 'center',
width: 180,
dataIndex: 'resultContentDictText',
dataIndex: this.isChinese() ? 'resultContent_dictText' : 'resultContent_dictTextEn',
scopedSlots: { customRender: 'tag' }
},
{ // 消耗时间
@@ -88,7 +88,8 @@ export default {
{
dataIndex: 'origin_dictText',
title: this.$t('docTool.split.dataType'),
width: 150
width: 150,
scopedSlots: { customRender: 'dictText' }
},
// 标准号
{
@@ -106,7 +107,8 @@ export default {
{
dataIndex: 'standardFileType_dictText',
title: this.$t('docTool.comparison.textStatus'),
width: 150
width: 150,
scopedSlots: { customRender: 'dictText' }
},
// 附件
{
@@ -526,12 +526,6 @@ export default {
this.$message.warning(this.$t('selectARecord'))
return
}
console.log(this.selectionRows)
if (this.selectionRows.find(item => !item.editFlag)) {
// 有没有查看权限的数据
this.$message.warning(this.$t('enterpriseStandardLibrary.standard.disabledBatchDel'))
return
}
const ids = this.selectedRowKeys.join(',')
this.$confirm({
title: this.$t('confirmBatchDeletion'),
@@ -47,6 +47,18 @@
type="primary" ghost @click="viewAll(formItem.dbFieldName)">
{{ $t('enterpriseStandardLibrary.standard.viewAll')}}
</a-button>
<!-- 是需要翻译的也需要双语翻译的,并且不在不需要双语翻译的字段里 -->
<span v-else-if="needDictFieldList.includes(formItem.fieldShowType) && needEnNameFieldType.includes(formItem.fieldShowType) && !needEnNameTypeNotUseField.includes(formItem.dbFieldName)">
{{
detailData[(isChinese() ? formItem.dbFieldName + '_dictText' : formItem.dbFieldName + '_dictTextEn')] || global.emptyLine
}}
</span>
<!-- 是需要翻译的但不需要双语翻译的,或者在需要双语翻译的类型里,但是不需要双语翻译的字段 -->
<span v-else-if="needDictFieldList.includes(formItem.fieldShowType) && (!needEnNameFieldType.includes(formItem.fieldShowType) || needEnNameFieldType.includes(formItem.fieldShowType) && needEnNameTypeNotUseField.includes(formItem.dbFieldName))">
{{
detailData[formItem.dbFieldName + '_dictText'] || global.emptyLine
}}
</span>
<span v-else-if="detailData[formItem.dbFieldName + '_dictText']">{{ detailData[formItem.dbFieldName + '_dictText'] }}</span>
<!-- 标准适用范围,有标签需要编译 -->
<span v-else-if="detailData[formItem.dbFieldName] && formItem.dbFieldName === 'standard_scope'" v-html="detailData[formItem.dbFieldName]"></span>
@@ -89,7 +101,7 @@
<!-- 稽查内容 -->
<div class="detail-page-part">
<div class="detail-page-part-title">
<span>稽查内容</span>
<span>{{ $t('enterpriseStandardLibrary.standard.auditContent') }}</span>
</div>
<div class="detail-page-part-table">
<a-table
@@ -190,7 +202,7 @@ export default {
dataSource: [], // 稽查内容数据
image: false,
imageUrl: '',
showViewAllField: ['auth_dept'], // 需要显示展示查看全部按钮的字段
showViewAllField: ['part_name'], // 需要显示展示查看全部按钮的字段
// 标准字段,需要跳转标准详情
standardFields: ['substitute_standard_number', 'replaced_by_standard_number', 'reference_standard', 'referenced_standard'],
// 参与只允许查看最新稿件排序的字段顺序(发布稿>征求意见稿)
@@ -199,7 +211,13 @@ export default {
manuScriptNewestFileField: '',
filePerm: { // 上传文件根据权限控制只能查看,没有权限的除了系统管理员外不可见不可下载
associated_file: 'enterpriseStandard:associatedFile:look' // 关联文件
}
},
// 需要数据字段翻译的属性类型
needDictFieldList: [FieldType.USER_SINGLE.value, FieldType.ORGAN_SINGLE.value, FieldType.ORGAN_MORE.value, FieldType.OPTION_SINGLE.value, FieldType.OPTION_MORE.value, FieldType.TREE.value, FieldType.TREE_SINGLE.value],
// 需要双语切换翻译的属性类型
needEnNameFieldType: [FieldType.OPTION_SINGLE.value, FieldType.OPTION_MORE.value, FieldType.TREE.value, FieldType.TREE_SINGLE.value],
// 是双语切换翻译的属性,但是不翻译的字段
needEnNameTypeNotUseField: ['standard_system']
}
},
computed: {
@@ -218,12 +236,8 @@ export default {
methods: {
fileIsDownload (fieldName) { // 文件是否可下载
if (Object.keys(this.filePerm).includes(fieldName)) {
// 系统管理员可下载
if (this.isSystemAdmin) {
return true
} else {
return false
}
// 需要特殊判断的字段不可下载
return false
} else {
// 不是需要特殊判断的字段正常可下载
return true
@@ -51,6 +51,14 @@
</a-tooltip>
</template>
<!--增加数据字典双语翻译的插槽-->
<template slot="dictText" slot-scope="text, record, index, column">
<a-tooltip overlay-class-name="tooltip-style">
<template slot="title">{{ (isChinese() ? text : record[column.key + 'En']) || (isChinese() ? text : record[column.key + 'En']) === 0 ? (isChinese() ? text : record[column.key + 'En']) : global.emptyLine }}</template>
<div class="table-text">{{ (isChinese() ? text : record[column.key + 'En']) || (isChinese() ? text : record[column.key + 'En']) === 0 ? (isChinese() ? text : record[column.key + 'En']) : global.emptyLine }}</div>
</a-tooltip>
</template>
</a-table>
</div>
@@ -125,10 +133,10 @@ export default {
},
{
title: this.$t('standardSelect.textState'),
dataIndex: 'standardState_dictText',
dataIndex: 'esStandardState_dictText',
align: 'center',
width: 120,
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'dictText' }
}
],
dataList: [],
@@ -15,7 +15,7 @@
<!-- 引用标准可以选国标和外标 -->
<add-form ref="addForm"
:flag="StandardSource.ENTERPRISE.value"
:defaultValue="{year_number: new Date().getFullYear() + '', try_flag: '0'}"
:defaultValue="{year_number: new Date().getFullYear() + ''}"
:disabledFieldList="disabledFieldList"
:selectStandardCanUpdateTypeField="['reference_standard']"
:hiddenFieldList="hiddenFieldList"
@@ -23,6 +23,7 @@
:get-form-func="getFormFunc"
:get-document-info-func="getDocumentInfoFunc"
:exclude-standard-fields="['substitute_standard_number', 'reference_standard']"
:selectStandardValueNeedNameField="['substitute_standard_number', 'reference_standard']"
@submitFormData="submitFormData" />
<div class="header-text-btn">
<!-- 稽查内容 -->
@@ -99,7 +100,7 @@ export default {
StandardSource,
visible: false,
title: '',
width: 800,
width: '50%',
// 存储表单的数据
form: {},
confirmLoading: false,
@@ -251,4 +252,8 @@ export default {
.check-content-table {
padding-bottom: 40px;
}
/deep/ .ant-drawer-content-wrapper {
min-width: 800px;
}
</style>
@@ -94,20 +94,6 @@ export default {
dataIndex: 'releaseDate',
scopedSlots: { customRender: 'text' }
},
{
title: this.$t('personalCenter.collection.newCarTypeDate'),
align: 'center',
width: 180,
dataIndex: 'newModelImplementationDate',
scopedSlots: { customRender: 'text' }
},
{
title: this.$t('personalCenter.collection.productCarDate'),
align: 'center',
width: 180,
dataIndex: 'onTheProductionDate',
scopedSlots: { customRender: 'text' }
},
{
title: this.$t('personalCenter.collection.standardState'),
align: 'center',
@@ -117,6 +117,17 @@
</a-tooltip>
</template>
<!-- 条款内容 -->
<template slot="item_content" slot-scope="{text, record}">
<a class="link-a" v-if="text && !text.replace(/<.*?>/ig, '')" @click="showContent(text,record)">
{{ $t('view') }}
</a>
<div class="table-text" v-else-if="text || text === 0" @click="showContent(text,record)">
{{ text && text !== 'null' ? text.replace(/<.*?>/ig, ' ') : '' }}
</div>
<div class="table-text" v-else>{{ global.emptyLine }}</div>
</template>
<!-- 附件 -->
<template v-slot:file="{text, record}">
<a v-if="text" class="link-a" @click="handleLookFile(record)">{{ $t('view') }}</a>
@@ -133,6 +144,8 @@
<nonmatch-item-look-modal ref="nonmatchItemLookModal"/>
<!-- 文件查看弹框 -->
<upload-file ref="uploadFile" disabled></upload-file>
<!-- 条款内容 -->
<split-clause-detail ref="splitClauseDetail" />
</a-card>
</template>
@@ -144,10 +157,11 @@ import NonmatchItemCloseModal from './modules/NonmatchItemCloseModal'
import NonmatchItemLookModal from './modules/NonmatchItemLookModal'
import { queryDepartTreeList } from '../../../api/api'
import UploadFile from '@/components/UploadFile'
import SplitClauseDetail from '../../documentTool/documentSplit/modules/SplitClauseDetail'
export default {
name: 'NonmatchItemList',
components: { JTable, NonmatchItemCloseModal, NonmatchItemLookModal, UploadFile },
components: { JTable, NonmatchItemCloseModal, NonmatchItemLookModal, UploadFile, SplitClauseDetail },
mixins: [JeroListMixin],
data () {
return {
@@ -165,7 +179,7 @@ export default {
align: 'center',
width: 180,
dataIndex: 'modelStatus_dictText',
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'dictText' }
},
{ // 标准编号
title: this.$t('standardNumber'),
@@ -194,7 +208,7 @@ export default {
align: 'center',
width: 180,
dataIndex: 'termContent',
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'item_content' }
},
{ // 责任部门
title: this.$t('regulatoryComplianceAssessmentDatabase.nonmatchItem.responsibleDepartment'),
@@ -215,14 +229,14 @@ export default {
align: 'center',
width: 180,
dataIndex: 'problemType_dictText',
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'dictText' }
},
{ // 整改状态
title: this.$t('regulatoryComplianceAssessmentDatabase.nonmatchItem.rectificationState'),
align: 'center',
width: 180,
dataIndex: 'rectifyStatus_dictText',
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'dictText' }
},
{ // PCR编号
title: this.$t('regulatoryComplianceAssessmentDatabase.nonmatchItem.pcrNumber'),
@@ -320,6 +334,10 @@ export default {
}
})
},
// 显示条款内容弹框
showContent (val) {
this.$refs.splitClauseDetail.open(val)
},
// 批量关闭
batchClose () {
if (this.selectedRowKeys.length <= 0) {
@@ -25,10 +25,22 @@
<!-- 适用市场 -->
<a-col :md="6" :sm="8">
<a-form-item :label="$t('regulatoryComplianceAssessmentDatabase.assessmentLibrary.applicableMarket')">
<j-multi-select-tag
:placeholder="$t('pleaseSelect') + $t('regulatoryComplianceAssessmentDatabase.assessmentLibrary.applicableMarket')"
<!-- <j-multi-select-tag-->
<!-- :placeholder="$t('pleaseSelect') + $t('regulatoryComplianceAssessmentDatabase.assessmentLibrary.applicableMarket')"-->
<!-- v-model="queryParam.applicableMarket"-->
<!-- dict-code="market_state"></j-multi-select-tag>-->
<a-tree-select
tree-node-filter-prop="title"
v-model="queryParam.applicableMarket"
dict-code="market_state"></j-multi-select-tag>
:maxTagCount="1"
:getPopupContainer="triggerNode=> triggerNode.parentNode"
:tree-data="countryOptions"
:placeholder="$t('pleaseSelect')+$t('regulatoryComplianceAssessmentDatabase.assessmentLibrary.applicableMarket')"
show-search
allowClear
:replaceFields="{title: isChinese() ? 'title' : 'enTitle'}"
:filterTreeNode="filterTreeOption"
/>
</a-form-item>
</a-col>
@@ -103,6 +115,7 @@
import JTable from '@/components/jero/JTable'
import { JeroListMixin } from '@/mixins/JeroListMixin'
import AssessmentLookModal from './modules/AssessmentLookModal'
import { getFormDictTreeList } from '../../../api/api'
export default {
name: 'RegulatoryComplianceAssessmentList',
@@ -110,6 +123,7 @@ export default {
mixins: [JeroListMixin],
data () {
return {
countryOptions: [], //
columns: [
{ //
title: this.$t('standardNumber'),
@@ -130,7 +144,7 @@ export default {
align: 'center',
width: 180,
dataIndex: 'applicableMarket_dictText',
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'dictText' }
},
{ //
title: this.$t('regulatoryComplianceAssessmentDatabase.assessmentLibrary.dateOfEvaluation'),
@@ -164,6 +178,7 @@ export default {
}
},
created () {
this.getCountryOption()
// +
this.$set(this.queryParam, 'applicableMarket', this.$route.query.applicableMarket)
this.$set(this.queryParam, 'standardName', this.$route.query.standardName)
@@ -171,6 +186,13 @@ export default {
this.loadData()
},
methods: {
getCountryOption () {
getFormDictTreeList({ dictId: '1801130851452059649' }).then(res => {
if (res.success) {
this.countryOptions = res.result
}
})
},
toDetail (record) {
const path = '/standardRegulationLibrary/foreignStandardDetailPage'
this.$openPageNewSheet({
@@ -6,7 +6,9 @@
:closable="true"
switchFullscreen
:footer="false"
:class="isFullScreen ? 'full-screen-modal' : ''"
@cancel="handleCancel"
@update:fullscreen="updataFullScreen"
:visible="visible">
<div class="table-page-search-wrapper">
@@ -80,9 +82,28 @@
:dataSource="dataSource"
:pagination="ipagination"
:loading="loading"
:scroll="{x: '100%', y: 'calc(100vh - 500px)'}"
:scroll="{x: '100%', y: isFullScreen ? 'calc(100vh - 330px)' : 'calc(100vh - 500px)'}"
@change="handleTableChange">
<!--增加数据字典双语翻译的插槽-->
<template slot="dictText" slot-scope="text, record, index, column">
<a-tooltip overlay-class-name="tooltip-style">
<template slot="title">{{ (isChinese() ? text : record[column.key + 'En']) || (isChinese() ? text : record[column.key + 'En']) === 0 ? (isChinese() ? text : record[column.key + 'En']) : global.emptyLine }}</template>
<div class="table-text">{{ (isChinese() ? text : record[column.key + 'En']) || (isChinese() ? text : record[column.key + 'En']) === 0 ? (isChinese() ? text : record[column.key + 'En']) : global.emptyLine }}</div>
</a-tooltip>
</template>
<!-- 条款内容 -->
<template slot="item_content" slot-scope="text, record">
<a class="link-a" v-if="text && !text.replace(/<.*?>/ig, '')" @click="showContent(text,record)">
{{ $t('view') }}
</a>
<div class="table-text" v-else-if="text || text === 0" @click="showContent(text,record)">
{{ text && text !== 'null' ? text.replace(/<.*?>/ig, ' ') : '' }}
</div>
<div class="table-text" v-else>{{ global.emptyLine }}</div>
</template>
<template slot="text" slot-scope="text">
<a-tooltip overlay-class-name="tooltip-style">
<template slot="title">{{ text || text === 0 ? text : global.emptyLine }}</template>
@@ -99,6 +120,8 @@
<!-- 文件列表查看 -->
<upload-file ref="uploadFile" disabled></upload-file>
<!-- 条款内容 -->
<split-clause-detail ref="splitClauseDetail" />
</j-modal>
</template>
@@ -107,10 +130,11 @@
import { JeroListMixin } from '@/mixins/JeroListMixin'
import { queryDepartTreeList } from '../../../../api/api'
import UploadFile from '@/components/UploadFile'
import SplitClauseDetail from '../../../documentTool/documentSplit/modules/SplitClauseDetail'
export default {
name: 'AssessmentLookModal',
components: { UploadFile },
components: { UploadFile, SplitClauseDetail },
mixins: [JeroListMixin],
data () {
return {
@@ -140,7 +164,7 @@ export default {
align: 'center',
width: 180,
dataIndex: 'termContent',
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'item_content' }
},
{ //
title: this.$t('regulatoryComplianceAssessmentDatabase.assessmentLibrary.vehicleType'),
@@ -154,7 +178,7 @@ export default {
align: 'center',
width: 180,
dataIndex: 'modelStatus_dictText',
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'dictText' }
},
{ //
title: this.$t('regulatoryComplianceAssessmentDatabase.assessmentLibrary.responsibleDepartment'),
@@ -175,7 +199,7 @@ export default {
align: 'center',
width: 180,
dataIndex: 'result_dictText',
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'dictText' }
},
{ //
title: this.$t('regulatoryComplianceAssessmentDatabase.assessmentLibrary.theStatusNotMeetRequirements'),
@@ -239,7 +263,8 @@ export default {
},
disableMixinCreated: true,
image: false,
imageUrl: ''
imageUrl: '',
isFullScreen: false
}
},
mounted () {
@@ -261,6 +286,14 @@ export default {
}
})
},
//
updataFullScreen (value) {
this.isFullScreen = value
},
//
showContent (val) {
this.$refs.splitClauseDetail.open(val)
},
filterTreeOption (input, option) {
const text = option.componentOptions.propsData.title || option.componentOptions.propsData.label
return text.toLowerCase().indexOf(input.toLowerCase()) >= 0
@@ -294,4 +327,10 @@ export default {
/deep/ .ant-form-item-label {
min-width: 70px !important;
}
.full-screen-modal {
/deep/ .ant-modal-body {
height: calc(100% - 55px) !important;
}
}
</style>
@@ -106,19 +106,19 @@ export default {
form: this.$form.createForm(this),
labelCol: {
xs: { span: 24 },
sm: { span: 4 }
sm: { span: 6 }
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 18 }
sm: { span: 16 }
},
lineLabelCol: {
xs: { span: 24 },
sm: { span: 2 }
sm: { span: 3 }
},
lineWrapperCol: {
xs: { span: 24 },
sm: { span: 21 }
sm: { span: 20 }
},
ueContent: '',
// UE
@@ -369,5 +369,13 @@ export default {
box-sizing: border-box;
overflow: auto;
padding: 32px 0;
/deep/ .ant-form-item-label {
margin-right: 10px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
word-break: break-all;
}
}
</style>
@@ -121,7 +121,8 @@ export default {
{
dataIndex: 'dynamicClassification_dictText',
title: this.$t('standardRegulationLibrary.dynamicMessage.dynamicCataloging'),
width: 150
width: 150,
scopedSlots: { customRender: 'dictText' }
},
//
{
@@ -139,7 +140,8 @@ export default {
{
dataIndex: 'releaseStatus_dictText',
title: this.$t('standardRegulationLibrary.dynamicMessage.releaseStatus'),
width: 150
width: 150,
scopedSlots: { customRender: 'dictText' }
},
//
{
@@ -536,6 +536,8 @@ export default {
this.ipagination.current -= 1
}
this.loadData()
//
this.onClearSelected()
} else {
this.$message.warn(res.message)
}
@@ -563,6 +565,7 @@ export default {
this.searchParams = Object.assign({}, params)
this.selectedRowKeys = []
this.selectedTreeKeys = []
this.selectedTreeNodeCodes = []
delete this.filters.nodeCode
this.getTableHeader()
this.loadData()
@@ -9,7 +9,7 @@
<!-- 过程稿件显示展开收起 -->
<div v-if="part === DisplayAreaManagement.PROCESS_DOCUMENTATION.text || part === DisplayAreaManagement.PROCESS_DOCUMENTATION.textEn" class="retractable-btn" @click="handleChangeRetractable(index)">
<i class="iconfont " :class="retractableFlag[index] ? 'icon-nav-top' : 'icon-nav-bottom'" />
{{ retractableFlag[index] ? '收起' : '展开' }}
{{ retractableFlag[index] ? $t('putAway') : $t('open') }}
</div>
</div>
<div class="detail-page-part-form" v-if="part !== DisplayAreaManagement.PROCESS_DOCUMENTATION.text && part !== DisplayAreaManagement.PROCESS_DOCUMENTATION.textEn">
@@ -54,21 +54,33 @@
<span v-else>{{ global.emptyLine }}</span>
</div>
<!-- 需要显示查看全部按钮 -->
<a v-else-if="showViewAllField.includes(formItem.dbFieldName) &&
<a-button v-else-if="showViewAllField.includes(formItem.dbFieldName) &&
(detailData[formItem.dbFieldName + '_dictText'] || detailData[formItem.dbFieldName])"
@click="viewAll(formItem.dbFieldName)">
type="primary" ghost @click="viewAll(formItem.dbFieldName)">
{{ $t('enterpriseStandardLibrary.standard.viewAll')}}
</a>
</a-button>
<!-- 是需要翻译的也需要双语翻译的,并且不在不需要双语翻译的字段里 -->
<span v-else-if="needDictFieldList.includes(formItem.fieldShowType) && needEnNameFieldType.includes(formItem.fieldShowType) && !needEnNameTypeNotUseField.includes(formItem.dbFieldName)">
{{
detailData[(isChinese() ? formItem.dbFieldName + '_dictText' : formItem.dbFieldName + '_dictTextEn')] || global.emptyLine
}}
</span>
<!-- 是需要翻译的但不需要双语翻译的,或者在需要双语翻译的类型里但是不需要双语翻译的字段 -->
<span v-else-if="needDictFieldList.includes(formItem.fieldShowType) && (!needEnNameFieldType.includes(formItem.fieldShowType) || needEnNameFieldType.includes(formItem.fieldShowType) && needEnNameTypeNotUseField.includes(formItem.dbFieldName))">
{{
detailData[formItem.dbFieldName + '_dictText'] || global.emptyLine
}}
</span>
<span v-else>
{{
detailData[needDictFieldList.includes(formItem.fieldShowType) ? formItem.dbFieldName + '_dictText' : formItem.dbFieldName] || global.emptyLine
detailData[formItem.dbFieldName] || global.emptyLine
}}
</span>
</div>
</div>
<!-- 过程稿件特殊处理-->
<div class="detail-page-process-manuscript" v-if="part === DisplayAreaManagement.PROCESS_DOCUMENTATION.text || part === DisplayAreaManagement.PROCESS_DOCUMENTATION.textEn" v-show="retractableFlag[index]">
<div class="detail-page-process-manuscript-item" v-for="formItem in form[part]" :key="formItem.id">
<div class="detail-page-process-manuscript" v-if="part === DisplayAreaManagement.PROCESS_DOCUMENTATION.text || part === DisplayAreaManagement.PROCESS_DOCUMENTATION.textEn">
<div class="detail-page-process-manuscript-item" v-for="formItem in (retractableFlag[index] ? form[part] : [form[part][0]])" :key="formItem.id">
<div class="detail-page-process-manuscript-title">
<span>{{ formItem.dbFieldTxt }}</span>
<!-- 标准解读-->
@@ -180,6 +192,10 @@ export default {
retractableFlag: {}, //
//
formPartList: [],
//
needEnNameFieldType: [FieldType.OPTION_SINGLE.value, FieldType.OPTION_MORE.value, FieldType.TREE.value, FieldType.TREE_SINGLE.value],
//
needEnNameTypeNotUseField: ['standard_system']
}
},
computed: {
@@ -310,7 +326,7 @@ export default {
},
//
viewAll (fieldName) {
const data = this.detailData[fieldName + '_dictText'] || this.detailData[fieldName]
const data = this.isChinese() ? this.detailData[fieldName + '_dictText'] : this.detailData[fieldName + '_dictTextEn'] || this.detailData[fieldName]
this.$refs.textContentModal.open(data)
},
handlePreview (file, formItem) {
@@ -22,6 +22,7 @@
:open-selected-all-field-list="openSelectedAllFieldList"
:exclude-standard-fields="excludeStandardFields"
:flag-by-field="{associated_enterprise_standard: StandardSource.ENTERPRISE.value, associated_standard: StandardSource.FOREIGN.value}"
:selectStandardValueNeedNameField="['substitute_standard_number', 'reference_standard']"
@submitFormData="submitFormData" />
</a-spin>
</div>
@@ -118,7 +119,7 @@ export default {
}
submitFunc(formInline).then((res) => {
if (res.success) {
this.$message.success(res.message)
this.$message.success(this.$t('operationSuccessful'))
this.$emit('ok')
this.close()
} else {
@@ -48,6 +48,14 @@
</a-tooltip>
</template>
<!--增加数据字典双语翻译的插槽-->
<template slot="dictText" slot-scope="text, record, index, column">
<a-tooltip overlay-class-name="tooltip-style">
<template slot="title">{{ (isChinese() ? text : record[column.key + 'En']) || (isChinese() ? text : record[column.key + 'En']) === 0 ? (isChinese() ? text : record[column.key + 'En']) : global.emptyLine }}</template>
<div class="table-text">{{ (isChinese() ? text : record[column.key + 'En']) || (isChinese() ? text : record[column.key + 'En']) === 0 ? (isChinese() ? text : record[column.key + 'En']) : global.emptyLine }}</div>
</a-tooltip>
</template>
<template slot="text" slot-scope="text">
<a-tooltip overlay-class-name="tooltip-style">
<template slot="title">{{ text || text === 0 ? text : global.emptyLine }}</template>
@@ -143,7 +151,7 @@ export default {
dataIndex: 'standardState_dictText',
align: 'center',
width: 120,
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'dictText' }
}
],
dataList: [],
@@ -219,7 +227,7 @@ export default {
*/
toDetailPage ({ id }) {
this.$openPageNewSheet({
path: '/standardRegulationLibrary/ForeignStandardDetail',
path: '/standardRegulationLibrary/foreignStandardDetailPage',
query: {
id
}
@@ -10,7 +10,7 @@
<!-- 国家/地区 -->
<a-col :span="12">
<label>{{ $t('standardRegulationLibrary.marketRegulationsList.countryRegion') }}</label>
<span>{{ model.country_dictText || global.emptyLine }}</span>
<span>{{ (isChinese() ? model.country_dictText : model.country_dictTextEn) || global.emptyLine }}</span>
</a-col>
<!-- 清单编号 -->
<a-col :span="12">
@@ -25,12 +25,12 @@
<!-- 驾驶位置 -->
<a-col :span="12">
<label>{{ $t('standardRegulationLibrary.marketRegulationsList.drivingPosition') }}</label>
<span>{{ model.drivePosition_dictText || global.emptyLine }}</span>
<span>{{ (isChinese() ? model.drivePosition_dictText : model.drivePosition_dictTextEn) || global.emptyLine }}</span>
</a-col>
<!-- 密级 -->
<a-col :span="12">
<label>{{ $t('standardRegulationLibrary.marketRegulationsList.securityClass') }}</label>
<span>{{ model.securityLevel_dictText || global.emptyLine }}</span>
<span>{{ (isChinese() ? model.securityLevel_dictText : model.securityLevel_dictTextEn) || global.emptyLine }}</span>
</a-col>
<!-- 清单说明 -->
<a-col :span="12">
@@ -247,21 +247,21 @@ export default {
align: 'center',
width: 180,
dataIndex: 'country_dictText',
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'dictText' }
},
{ //
title: this.$t('standardRegulationLibrary.marketListField.applicableVehicleType'),
align: 'center',
width: 180,
dataIndex: 'applicableVehicle_dictText',
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'dictText' }
},
{ //
title: this.$t('standardRegulationLibrary.marketListField.authenticationObject'),
align: 'center',
width: 180,
dataIndex: 'authenticationObject_dictText',
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'dictText' }
},
{ //
title: this.$t('standardRegulationLibrary.marketListField.certifiedDeliverables'),
@@ -275,14 +275,14 @@ export default {
align: 'center',
width: 180,
dataIndex: 'type_dictText',
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'dictText' }
},
{ //
title: this.$t('standardRegulationLibrary.marketListField.dynamicType'),
align: 'center',
width: 180,
dataIndex: 'dynamicType_dictText',
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'dictText' }
},
{ //
title: this.$t('standardRegulationLibrary.marketListField.mainControlDepartment'),
@@ -296,7 +296,7 @@ export default {
align: 'center',
width: 180,
dataIndex: 'mainDeptProfMode_dictText',
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'dictText' }
},
{ //
title: this.$t('standardRegulationLibrary.marketListField.relatedDepartment'),
@@ -310,31 +310,31 @@ export default {
align: 'center',
width: 180,
dataIndex: 'associateDeptProfMode_dictText',
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'dictText' }
},
{ //
title: this.$t('standardRegulationLibrary.marketListField.batchRestriction'),
align: 'center',
width: 180,
dataIndex: 'batchLimit_dictText',
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'dictText' }
},
{ //
title: this.$t('standardRegulationLibrary.marketListField.automaticDrivingLevel'),
align: 'center',
width: 180,
dataIndex: 'autopilotLevel_dictText',
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'dictText' }
},
{ //
title: this.$t('standardRegulationLibrary.marketListField.requirementType'),
align: 'center',
width: 180,
dataIndex: 'requireType_dictText',
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'dictText' }
},
{ //
title: this.$t('remarks'),
title: this.$t('standardRegulationLibrary.marketListField.remarks'),
align: 'center',
width: 180,
dataIndex: 'remark',
@@ -19,6 +19,7 @@
:tree-data="countryOptions"
tree-checkable
treeCheckStrictly
:replaceFields="{title: isChinese() ? 'title' : 'enTitle'}"
@change="countryChange"
:placeholder="$t('pleaseSelect')+$t('standardRegulationLibrary.marketRegulationsList.countryRegion')" />
</a-form-item>
@@ -365,21 +366,21 @@ export default {
align: 'center',
width: 180,
dataIndex: 'country_dictText',
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'dictText' }
},
{ //
title: this.$t('standardRegulationLibrary.marketListField.applicableVehicleType'),
align: 'center',
width: 180,
dataIndex: 'applicableVehicle_dictText',
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'dictText' }
},
{ //
title: this.$t('standardRegulationLibrary.marketListField.authenticationObject'),
align: 'center',
width: 180,
dataIndex: 'authenticationObject_dictText',
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'dictText' }
},
{ //
title: this.$t('standardRegulationLibrary.marketListField.certifiedDeliverables'),
@@ -393,14 +394,14 @@ export default {
align: 'center',
width: 180,
dataIndex: 'type_dictText',
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'dictText' }
},
{ //
title: this.$t('standardRegulationLibrary.marketListField.dynamicType'),
align: 'center',
width: 180,
dataIndex: 'dynamicType_dictText',
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'dictText' }
},
{ //
title: this.$t('standardRegulationLibrary.marketListField.mainControlDepartment'),
@@ -414,7 +415,7 @@ export default {
align: 'center',
width: 180,
dataIndex: 'mainDeptProfMode_dictText',
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'dictText' }
},
{ //
title: this.$t('standardRegulationLibrary.marketListField.relatedDepartment'),
@@ -428,31 +429,31 @@ export default {
align: 'center',
width: 180,
dataIndex: 'associateDeptProfMode_dictText',
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'dictText' }
},
{ //
title: this.$t('standardRegulationLibrary.marketListField.batchRestriction'),
align: 'center',
width: 180,
dataIndex: 'batchLimit_dictText',
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'dictText' }
},
{ //
title: this.$t('standardRegulationLibrary.marketListField.automaticDrivingLevel'),
align: 'center',
width: 180,
dataIndex: 'autopilotLevel_dictText',
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'dictText' }
},
{ //
title: this.$t('standardRegulationLibrary.marketListField.requirementType'),
align: 'center',
width: 180,
dataIndex: 'requireType_dictText',
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'dictText' }
},
{ //
title: this.$t('remarks'),
title: this.$t('standardRegulationLibrary.marketListField.remarks'),
align: 'center',
width: 180,
dataIndex: 'remark',
@@ -35,6 +35,7 @@
:placeholder="$t('pleaseSelect')+$t('standardRegulationLibrary.marketRegulationsList.countryRegion')"
show-search
allowClear
:replaceFields="{title: isChinese() ? 'title' : 'enTitle'}"
:filterTreeNode="filterTreeOption"
/>
</a-form-item>
@@ -152,7 +153,7 @@ export default {
align: 'center',
width: 180,
dataIndex: 'country_dictText',
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'dictText' }
},
{ //
title: this.$t('standardRegulationLibrary.marketRegulationsList.listNumber'),
@@ -173,7 +174,7 @@ export default {
align: 'center',
width: 180,
dataIndex: 'drivePosition_dictText',
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'dictText' }
},
{ //
title: this.$t('standardRegulationLibrary.marketRegulationsList.listVersion'),
@@ -201,7 +202,7 @@ export default {
align: 'center',
width: 180,
dataIndex: 'manifestStatus_dictText',
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'dictText' }
},
{
title: this.$t('operation'),
@@ -66,6 +66,7 @@
:tree-data="countryOptions"
tree-checkable
treeCheckStrictly
:replaceFields="{title: isChinese() ? 'title' : 'enTitle'}"
:placeholder="$t('pleaseSelect')+$t('standardRegulationLibrary.marketListField.applicableCountryRegion')" />
</a-form-item>
<!-- 认证对象 -->
@@ -136,8 +137,8 @@
v-decorator.trim="[ 'requireType', validatorRules.requireType ]" />
</a-form-item>
<!-- 备注 -->
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" :label="$t('remarks')">
<a-input :placeholder="$t('pleaseEnter') + $t('remarks')"
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" :label="$t('standardRegulationLibrary.marketListField.remarks')">
<a-input :placeholder="$t('pleaseEnter') + $t('standardRegulationLibrary.marketListField.remarks')"
:maxLength="50"
v-decorator.trim="[ 'remark', validatorRules.remark ]" />
</a-form-item>
@@ -303,7 +304,7 @@ export default {
this.form.setFieldsValue(pick(this.model, 'standardNumber', 'standardName', 'standardEnglishName',
'type', 'newProductImplDate', 'newAuthImplDate', 'registrationDate', 'country',
'authenticationObject', 'certifyTheDeliverables', 'mainDept', 'mainDeptProfMode', 'associateDept',
'associateDeptProfMode', 'applicableVehicle', 'dynamicType', 'batchLimit', 'autopilotLevel', 'requireType'))
'associateDeptProfMode', 'applicableVehicle', 'dynamicType', 'batchLimit', 'autopilotLevel', 'requireType', 'remark'))
})
},
getCountryOption () {

Some files were not shown because too many files have changed in this diff Show More