修改任务清单的流程

This commit is contained in:
qq787203167
2022-05-18 13:45:38 +08:00
parent 450ff79029
commit 2c3a5b0192
10 changed files with 268 additions and 107 deletions
+3 -2
View File
@@ -779,7 +779,7 @@ module.exports = {
feedbackFromTheEngineer: 'Feedback from the Engineer',
completedBy: 'Completed by',
completedTime: 'Completed time',
replyFromProjectContactPerson: 'Reply from project contact person',
replyFromProjectContactPerson: 'Responsible Persons reply',
answer: 'answer',
distributionEngineer: 'Distribution Engineer',
reminderHandling: 'Reminder handling',
@@ -834,5 +834,6 @@ module.exports = {
verificationComplianceConfirmationProgress: 'Verification compliance confirmation progress',
totalTable: 'Total',
newlyAdded: 'Newly Added',
applicableSupplement: 'Applicable Supplement'
applicableSupplement: 'Applicable Supplement',
taskDescription:'Task description',
}
+3 -2
View File
@@ -787,7 +787,7 @@ module.exports = {
feedbackFromTheEngineer: '工程师反馈意见',
completedBy: '填写人',
completedTime: '填写时间',
replyFromProjectContactPerson: '工程接口人回复',
replyFromProjectContactPerson: '责任人回复',
answer: '回复',
distributionEngineer: '分发工程师',
reminderHandling: '提醒办理',
@@ -839,5 +839,6 @@ module.exports = {
preHomeConfirmProgress: 'Pre-Home确认进度',
verificationComplianceConfirmationProgress: '验证符合性确认进度',
totalTable: '总数',
applicableSupplement: '适用增补件'
applicableSupplement: '适用增补件',
taskDescription: '任务说明'
}
@@ -6,8 +6,8 @@
</div>
</div>
<div class="header-content">
<!-- v-if="$route.query.TaskKey == 'zrrclrw'"-->
<div class="operator-text"
v-if="$route.query.TaskKey == 'zrrclrw'"
@click="distributionEngineerClick($t('distributionEngineer'))">
<a-icon type="audit"/>
{{ $t('distributionEngineer') }}
@@ -18,6 +18,10 @@
<a-icon type="sound"/>
{{ $t('reminderHandling') }}
</div>
<a class="text"
@click="detailsClick()">
{{$t('details')}}
</a>
<div class="operator-text"
v-if="$route.query.TaskKey == 'zrrclrw' || $route.query.TaskKey == 'dreDispose'"
@click="distributionEngineerClick($t('addFeedback'))">
@@ -89,6 +93,23 @@
</a-form-model-item>
</div>
</a-col>
<a-col :span="24" v-if="title == $t('distributionEngineer')">
<div v-if="formInline.userName">
<div class="box-title-text" v-for="item in formInline.userName.split(',')">
<div class="title-text">
<span class="Required">*</span>
<span class="title-text-text"
:title="item">{{item}}</span>
</div>
<a-form-model-item class="itemModel" prop="engineerFeedbackContent">
<a-textarea
:placeholder="$t('PleaseEnter')+$t('feedbackFromTheEngineer')"
:disabled="false"
v-model="formInline.engineerFeedbackContent" :rows="4"/>
</a-form-model-item>
</div>
</div>
</a-col>
<a-col :span="24" v-if="title == $t('addFeedback') || title == $t('edit')">
<div class="box-title-text">
<div class="title-text">
@@ -324,6 +345,18 @@
fixed: 'left',
customRender: (text, record, index) => `${index + 1}`
},
{
title: this.$t('completedBy'),
dataIndex: 'createBy',
ellipsis: true,
align: 'center'
},
{
title: this.$t('completedTime'),
dataIndex: 'createTime',
ellipsis: true,
align: 'center'
},
{
title: this.$t('feedbackFromTheEngineer'),
dataIndex: 'engineerFeedbackContent',
@@ -337,18 +370,6 @@
ellipsis: true,
scopedSlots: { customRender: 'Deliverables' }
},
{
title: this.$t('completedBy'),
dataIndex: 'createBy',
ellipsis: true,
align: 'center'
},
{
title: this.$t('completedTime'),
dataIndex: 'createTime',
ellipsis: true,
align: 'center'
},
{
title: this.$t('replyFromProjectContactPerson'),
dataIndex: 'engineeringInterfacePersonReply',
@@ -499,7 +520,7 @@
})
},
detailsClick(val) {
this.formInlineDetails = val
this.formInlineDetails = val || {}
this.visibleDetails = true
},
PersonnelSelectionChange(value, id) {
@@ -45,6 +45,10 @@
projectInformationId: {
type: String,
default: ''
},
queryProject: {
type: Object,
default: {}
}
},
data() {
@@ -60,6 +64,9 @@
getAction(this.url.urlFrom, { id: this.projectInformationId }).then((res) => {
if (res.success) {
this.queryForm = res.result[0] || {}
if (this.queryProject) {
this.queryForm = { ...this.queryForm, ...this.queryProject }
}
} else {
this.queryForm = {}
}
@@ -34,7 +34,7 @@
dataSource: [],
loading: false,
reviewResult: {
'launch':this.$t('Launch'),
'launch': this.$t('Launch'),
'Compliance': this.$t('accord'),
'Non-Compliance': this.$t('nonConformity'),
'To be tracked': this.$t('Tracked'),
@@ -81,10 +81,9 @@
methods: {
getList() {
let query = {
prcId: this.$route.query.actiProcInstId,
prcType: this.$route.query.flowType
actiProcInstId: this.$route.query.actiProcInstId
}
getAction('/workFlow/queryProcessHistoryByPrcId', query).then((res) => {
getAction('/wkflow/processHistoryEO/list', query).then((res) => {
this.dataSource = res
})
}
@@ -18,6 +18,7 @@
:projectInformationList="projectInformationList"
:url="url"
:projectInformationId="this.queryBy.projectLibraryId"
:queryProject="queryProject"
/>
<standardContent
v-if="isDisplay"
@@ -85,45 +86,7 @@
title: this.$t('targetMarket'),
value: 'targetMarket_dictText'
},
{
title: this.$t('projectStatus'),
value: 'projectStatus_dictText'
},
{
title: this.$t('StudioEngineer'),
value: 'studioEngineerName'
},
{
title: this.$t('certifiedEngineer'),
value: 'certificationEngineerName'
},
{},
{
title: this.$t('DigitalPlatform'),
value: 'digitalPlatform_dictText'
},
{
title: this.$t('ModelPlatform'),
value: 'vehiclePlatform_dictText'
},
{},
{
title: this.$t('IPDInformation'),
value: 'ipdInfo',
type: 1
},
{
title: this.$t('certificationProgram'),
value: 'attestationPlan',
type: 1
},
{
title: this.$t('dehicleDevelopmentPlan'),
value: 'vehicleDevelopmentPlan',
type: 1
}
],
standardContentList: [
{
title: this.$t('standard'),
value: 'serialNumber'
@@ -133,13 +96,15 @@
value: 'title'
},
{
title: this.$t('subtitle'),
value: 'subtitle'
title: this.$t('applicableSupplement'),
value: 'applicableSupplement'
},
{
title: this.$t('correspondingStandard'),
value: 'correspondingStandard'
},
title: this.$t('remarks'),
value: 'remark'
}
],
standardContentList: [
{
title: this.$t('Sponsor'),
value: this.$route.query.Sponsor
@@ -149,14 +114,9 @@
value: this.$route.query.personLiable
},
{
title: this.$t('regulatoryEngineer'),
value: 'regulationOwnerName'
title: this.$t('cutoffTime'),
value: this.$route.query.DueDate
},
{
title: this.$t('certifiedEngineer'),
value: 'homologationEngineerName'
},
{},
{
title: this.$t('typeOfDeliverables'),
value: this.$route.query.typeOfDeliverables
@@ -166,13 +126,10 @@
value: this.$route.query.deliverableTemplate,
type: 2
},
{},
{
title: this.$t('technicalEvaluationResults'),
value: 'technicalEvaluationResults'
},
{
title: this.$t('remarks'),
value: 'remark'
title: this.$t('taskDescription'),
value: this.$route.query.remarks
}
]
}
@@ -289,6 +289,8 @@
personLiable: 'designDutyName',
typeOfDeliverables: 'designDeliverableType_dictText',
deliverableTemplate: 'designDeliverableTemplate',
DueDate: 'designDueDate',
remarks: 'designRemark',
projectName: this.$route.query.projectName,
projectNameId: this.$route.query.projectNameId,
primaryKeyId: val.designTaskDetailId
@@ -309,6 +311,8 @@
personLiable: 'prehomoDutyName',
typeOfDeliverables: 'prehomoDeliverableType_dictText',
deliverableTemplate: 'prehomoDeliverableTemplate',
DueDate: 'prehomoDueDate',
remarks: 'prehomoRemark',
projectName: this.$route.query.projectName,
projectNameId: this.$route.query.projectNameId,
primaryKeyId: val.prehomoTaskDetailId
@@ -329,6 +333,8 @@
personLiable: 'verifyDutyName',
typeOfDeliverables: 'verifyDeliverableType_dictText',
deliverableTemplate: 'verifyDeliverableTemplate',
DueDate: 'verifyDueDate',
remarks: 'verifyRemark',
projectName: this.$route.query.projectName,
projectNameId: this.$route.query.projectNameId,
primaryKeyId: val.verifyTaskDetailId
@@ -281,6 +281,20 @@
</a-form-model-item>
</div>
</a-col>
<a-col :span="12">
<div class="box-title-text">
<div class="title-text">
<span class="title-text-text"
:title="$t('applicableSupplement')">{{$t('applicableSupplement')}}</span>
</div>
<a-form-model-item class="itemModel" prop="applicableSupplement">
<a-input class="box-input"
:disabled="false"
v-model="formInline.applicableSupplement"
:placeholder="$t('PleaseEnter')+$t('applicableSupplement')"/>
</a-form-model-item>
</div>
</a-col>
</a-row>
<a-row :gutter="24">
<a-col :span="24">
@@ -418,6 +432,23 @@
</div>
</a-col>
</a-row>
<a-row :gutter="24">
<a-col :span="24">
<div class="box-title-text">
<div class="title-text">
<span class="title-text-text"
:title="$t('remarks')">{{$t('remarks')}}</span>
</div>
<a-form-model-item class="itemModel-text" :prop="'designRemark'">
<a-textarea
style="width: 100%"
:placeholder="$t('PleaseEnter')+$t('remarks')"
:disabled="formInline.taskAffirmStatus != 'Not started' && !formInline.designRemark ? true : false"
v-model="formInline.designRemark" :rows="4"/>
</a-form-model-item>
</div>
</a-col>
</a-row>
<div class="header-text">
&nbsp;{{$t('PrehomoConfirmation')}}
</div>
@@ -540,6 +571,23 @@
</div>
</a-col>
</a-row>
<a-row :gutter="24">
<a-col :span="24">
<div class="box-title-text">
<div class="title-text">
<span class="title-text-text"
:title="$t('remarks')">{{$t('remarks')}}</span>
</div>
<a-form-model-item class="itemModel-text" :prop="'prehomoRemark'">
<a-textarea
style="width: 100%"
:placeholder="$t('PleaseEnter')+$t('remarks')"
:disabled="formInline.taskAffirmStatus != 'Not started' && !formInline.prehomoRemark ? true : false"
v-model="formInline.prehomoRemark" :rows="4"/>
</a-form-model-item>
</div>
</a-col>
</a-row>
<div class="header-text">
&nbsp;{{$t('verificationAndConformityconfirmation')}}
</div>
@@ -660,6 +708,23 @@
</div>
</a-col>
</a-row>
<a-row :gutter="24">
<a-col :span="24">
<div class="box-title-text">
<div class="title-text">
<span class="title-text-text"
:title="$t('remarks')">{{$t('remarks')}}</span>
</div>
<a-form-model-item class="itemModel-text" :prop="'verifyRemark'">
<a-textarea
style="width: 100%"
:placeholder="$t('PleaseEnter')+$t('remarks')"
:disabled="formInline.taskAffirmStatus != 'Not started' && !formInline.verifyRemark ? true : false"
v-model="formInline.verifyRemark" :rows="4"/>
</a-form-model-item>
</div>
</a-col>
</a-row>
</a-form-model>
</a-spin>
<div class="drawer-bootom-button">
@@ -711,7 +776,35 @@
message: this.$t('remarks') + this.$t('cannotExceed') + 300 + this.$t('Characters'),
trigger: 'blur'
}
]
],
applicableSupplement: [
{
max: 100,
message: this.$t('applicableSupplement') + this.$t('cannotExceed') + 100 + this.$t('Characters'),
trigger: 'blur'
}
],
designRemark:[
{
max: 300,
message: this.$t('remarks') + this.$t('cannotExceed') + 300 + this.$t('Characters'),
trigger: 'blur'
}
],
verifyRemark:[
{
max: 300,
message: this.$t('remarks') + this.$t('cannotExceed') + 300 + this.$t('Characters'),
trigger: 'blur'
}
],
prehomoRemark:[
{
max: 300,
message: this.$t('remarks') + this.$t('cannotExceed') + 300 + this.$t('Characters'),
trigger: 'blur'
}
],
},
formInline: {},
regulatoryEngineerList: [],
@@ -146,7 +146,7 @@
{{ $t('deleteLib') }}
</a>
<!-- <a class="text-operation" @click="resultReportedClick(record)">{{$t('resultReported')}}</a>-->
<!-- <a @click="addProcess(record)">发起</a>-->
<!-- <a @click="addProcess(record)">发起</a>-->
</span>
<span slot="titleName" slot-scope="text,record" :title="text">
{{ text && text.length > 10 ? text.slice(0, 9) + '...' : text }}
@@ -418,6 +418,13 @@
width: 180,
scopedSlots: { customRender: 'titleName' }
},
{
title: this.$t('applicableSupplement'),
align: 'center',
width: 180,
dataIndex: 'applicableSupplement',
scopedSlots: { customRender: 'titleName' }
},
{
title: 'WVTA ID',
align: 'center',
@@ -1457,12 +1464,14 @@
color: #040B29;
margin-bottom: 22px;
}
.itemModelComment{
.itemModelComment {
width: calc(100% - 64px);
display: inline-block;
margin-top: 2px;
}
.title-text-Comment{
.title-text-Comment {
width: 74px;
text-align: right;
display: inline-block;
@@ -1497,7 +1506,8 @@
padding: 0;
border-top: none;
}
.itemModelComment .ant-form-item-control-wrapper{
.itemModelComment .ant-form-item-control-wrapper {
width: 100% !important;
}
</style>
@@ -34,6 +34,7 @@
<span class="box-top-text">{{$t('regulatoryCertificationTaskPlan')}}</span>
<div class="box-top-content">
<div id="main"></div>
<div class="axis-tip"></div>
</div>
</div>
<div class="box-bottom">
@@ -94,7 +95,9 @@
loading: false,
dataSource: [],
url: {
list: '/project/ProjectStatusBoardController/scheduleInfoList'
list: '/project/ProjectStatusBoardController/scheduleInfoList',
timeline: '/project/ProjectStatusBoardController/timeline',
timelineList: '/project/ProjectStatusBoardController/timelineList'
},
columns: [
{
@@ -157,32 +160,59 @@
},
mounted() {
this.getList()
this.getEcharts()
this.getTimeline()
},
methods: {
getEcharts() {
getTimeline() {
getAction(this.url.timeline, {}).then((res) => {
if (res.success) {
this.getTimelineList(res.result)
}
})
},
getTimelineList(time) {
getAction(this.url.timelineList, {}).then((res) => {
if (res.success) {
this.getEcharts(time, res.result)
}
})
},
getEcharts(timeList, timeData) {
var chartDom = document.getElementById('main')
var myChart = echarts.init(chartDom)
var option
let list = []
let listTime = []
for (let i = 0; i < timeList.length; i++) {
for (let j = 0; j < 31; j++) {
let num
if ((j + 1) < 10) {
num = '0' + (j + 1)
} else {
num = (j + 1)
}
listTime.push(timeList[i])
list.push(timeList[i] + '-' + num)
}
}
console.log(listTime)
const hours = listTime
const days = []
// prettier-ignore
const hours = [
'12a', '1a', '2a', '3a', '4a', '5a', '6a',
'12a', '1a', '2a', '3a', '4a', '5a', '6a'
]
const days = [
'Saturday', 'Friday', 'Thursday',
'Wednesday', 'Tuesday', 'Monday', 'Sunday'
]
if (timeData && timeData.length > 0) {
timeData.forEach(res => {
days.push(res.projectName)
})
}
const data = [
[0, 0, 14], [0, 1, 5], [0, 2, 5], [0, 3, 5], [0, 4, 5], [0, 5, 5], [0, 6, 5], [0, 7, 5],
[1, 0, 5], [1, 2, 5], [1, 3, 5], [1, 4, 5], [1, 5, 5], [1, 6, 5], [1, 7, 5], [1, 1, 5],
[2, 0, 14], [2, 1, 14], [2, 2, 14], [2, 3, 14], [2, 4, 14], [2, 5, 14], [2, 6, 14], [2, 7, 14],
[3, 0, 14], [3, 1, 14], [3, 2, 14], [3, 3, 14], [3, 4, 14], [3, 5, 14], [3, 6, 14], [3, 7, 14],
[4, 0, 14], [4, 1, 14], [4, 2, 14], [4, 3, 14], [4, 4, 14], [4, 5, 14], [4, 6, 14], [4, 7, 14],
[5, 0, 14], [5, 1, 14], [5, 2, 14], [5, 3, 14], [5, 4, 14], [5, 5, 14], [5, 6, 14], [5, 7, 14],
[6, 0, 14], [6, 1, 14], [6, 2, 14], [6, 3, 14], [6, 4, 14], [6, 5, 14], [6, 6, 14], [6, 7, 14],
[6, 8, 14], [6, 9, 14], [6, 10, 14], [6, 11, 14], [6, 12, 14], [6, 13, 14], [6, 14, 14], [6, 15, 14]
[0, 0, 14], [0, 1, 5], [0, 2, 5], [0, 3, 5], [0, 4, 5], [0, 5, 5],
[1, 0, 5], [1, 2, 5], [1, 3, 5], [1, 4, 5], [1, 5, 5], [1, 6, 5],
[2, 0, 14], [2, 1, 14], [2, 2, 14], [2, 3, 14], [2, 4, 14], [2, 5, 14],
[3, 0, 14], [3, 1, 14], [3, 2, 14], [3, 3, 14], [3, 4, 14], [3, 5, 14],
[4, 0, 14], [4, 1, 14], [4, 2, 14], [4, 3, 14], [4, 4, 14], [4, 5, 14],
[5, 0, 14], [5, 1, 14], [5, 2, 14], [5, 3, 14], [5, 4, 14], [5, 5, 14],
[6, 0, 14], [6, 1, 14], [6, 2, 14], [6, 3, 14], [6, 4, 14], [6, 5, 14]
].map(function(item) {
return [item[1], item[0], item[2]]
})
@@ -206,7 +236,7 @@
grid: {
top: 0,
left: 2,
right: 20,
right: 40,
containLabel: true
},
xAxis: {
@@ -222,8 +252,7 @@
position: 'top',
axisLabel: {
showMinLabel: true,
showMaxLabel: true,
interval: 2,
interval: 31,
textStyle: {
fontFamily: 'Blue Sky Noto',
color: '#000F16',
@@ -246,13 +275,24 @@
axisTick: {
show: false
},
scale: true,
triggerEvent: true,
axisLabel: {
textStyle: {
fontFamily: 'Blue Sky Noto',
color: '#000F16',
fontSize: '16'
},
margin: 50
margin: 50,
formatter: function(params) {
var val = ''
if (params.length > 8) {
val = params.substr(0, 8) + '...'
return val
} else {
return params
}
}
}
},
series: [
@@ -270,6 +310,20 @@
}
option && myChart.setOption(option)
myChart.on('mouseover', 'yAxis.category', function(e) {
console.log(e)
let axisTip = document.querySelector('.axis-tip')
console.log(axisTip)
axisTip.innerText = e.value
axisTip.style.left = 100 + 'px'
axisTip.style.top = (e.event.event.y) - 180 + 'px'
axisTip.style.display = 'block'
})
myChart.on('mouseout', 'yAxis.category', function(e) {
let axisTip = document.querySelector('.axis-tip')
axisTip.innerText = ''
axisTip.style.display = 'none'
})
},
searchQuery() {
this.getList()
@@ -350,4 +404,16 @@
width: 100%;
height: 200%;
}
.axis-tip {
display: none;
position: absolute;
padding: 5px 5px;
font-size: 12px;
line-height: 18px;
color: #575757;
background: #ffffff;
box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.2);
border-radius: 4px;
}
</style>