|
|
@ -170,6 +170,10 @@ |
|
|
<span v-else-if="item.columnProp === 'pic'"> |
|
|
<span v-else-if="item.columnProp === 'pic'"> |
|
|
{{ getTrackingRoleDisplayValue(scope.row, 'projectOwnerName', 'pic') }} |
|
|
{{ getTrackingRoleDisplayValue(scope.row, 'projectOwnerName', 'pic') }} |
|
|
</span> |
|
|
</span> |
|
|
|
|
|
<span |
|
|
|
|
|
v-else-if="item.columnProp === 'deliveryVariance'" |
|
|
|
|
|
:class="{ 'delivery-variance-alert': isDeliveryVarianceAlert(scope.row) }" |
|
|
|
|
|
>{{ getTrackingColumnDisplayValue(scope.row, item.columnProp) }}</span> |
|
|
<span v-else>{{ getTrackingColumnDisplayValue(scope.row, item.columnProp) }}</span> |
|
|
<span v-else>{{ getTrackingColumnDisplayValue(scope.row, item.columnProp) }}</span> |
|
|
</template> |
|
|
</template> |
|
|
</el-table-column> |
|
|
</el-table-column> |
|
|
@ -597,7 +601,7 @@ |
|
|
@blur="handleOneKeyPartNoBlur"> |
|
|
@blur="handleOneKeyPartNoBlur"> |
|
|
<template slot-scope="{ item }"> |
|
|
<template slot-scope="{ item }"> |
|
|
<div class="one-key-suggest-main">{{ item.value }}</div> |
|
|
<div class="one-key-suggest-main">{{ item.value }}</div> |
|
|
<div class="one-key-suggest-sub">{{ item.partDesc || '-' }} | 创建: {{ item.createDateText || '-' }}</div> |
|
|
|
|
|
|
|
|
<div class="one-key-suggest-sub">{{ item.partDesc || '-' }}</div> |
|
|
</template> |
|
|
</template> |
|
|
</el-autocomplete> |
|
|
</el-autocomplete> |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
@ -653,7 +657,7 @@ |
|
|
<el-row :gutter="16"> |
|
|
<el-row :gutter="16"> |
|
|
<el-col :span="6" v-show="isOneKeyCreateFieldVisible('cQualityEngineer6')"> |
|
|
<el-col :span="6" v-show="isOneKeyCreateFieldVisible('cQualityEngineer6')"> |
|
|
<el-form-item> |
|
|
<el-form-item> |
|
|
<span slot="label" class="big-label"><a href="javascript:void(0)" @click="openRoleDialog('cQualityEngineer6')">IQC</a></span> |
|
|
|
|
|
|
|
|
<span slot="label" class="big-label"><a href="javascript:void(0)" @click="getBaseList(2008)">IQC</a></span> |
|
|
<el-input v-model="oneKeyForm.cQualityEngineer6Name" disabled style="width: 100%"></el-input> |
|
|
<el-input v-model="oneKeyForm.cQualityEngineer6Name" disabled style="width: 100%"></el-input> |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
</el-col> |
|
|
@ -671,7 +675,7 @@ |
|
|
</el-col> |
|
|
</el-col> |
|
|
<el-col :span="6" v-show="isOneKeyCreateFieldVisible('cQualityEngineer4')"> |
|
|
<el-col :span="6" v-show="isOneKeyCreateFieldVisible('cQualityEngineer4')"> |
|
|
<el-form-item> |
|
|
<el-form-item> |
|
|
<span slot="label" class="big-label"><a href="javascript:void(0)" @click="openRoleDialog('cQualityEngineer4')">SQE</a></span> |
|
|
|
|
|
|
|
|
<span slot="label" class="big-label"><a href="javascript:void(0)" @click="getBaseList(2006)">SQE</a></span> |
|
|
<el-input v-model="oneKeyForm.cQualityEngineer4Name" disabled style="width: 100%"></el-input> |
|
|
<el-input v-model="oneKeyForm.cQualityEngineer4Name" disabled style="width: 100%"></el-input> |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
</el-col> |
|
|
@ -686,19 +690,19 @@ |
|
|
</el-col> |
|
|
</el-col> |
|
|
<el-col :span="6" v-show="isOneKeyCreateFieldVisible('cQualityEngineer5')"> |
|
|
<el-col :span="6" v-show="isOneKeyCreateFieldVisible('cQualityEngineer5')"> |
|
|
<el-form-item> |
|
|
<el-form-item> |
|
|
<span slot="label" class="big-label"><a href="javascript:void(0)" @click="openRoleDialog('cQualityEngineer5')">FQC2</a></span> |
|
|
|
|
|
|
|
|
<span slot="label" class="big-label"><a href="javascript:void(0)" @click="getBaseList(2007)">FQC2</a></span> |
|
|
<el-input v-model="oneKeyForm.cQualityEngineer5Name" disabled style="width: 100%"></el-input> |
|
|
<el-input v-model="oneKeyForm.cQualityEngineer5Name" disabled style="width: 100%"></el-input> |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
</el-col> |
|
|
<el-col :span="6" v-show="isOneKeyCreateFieldVisible('ipqcHardTag')"> |
|
|
<el-col :span="6" v-show="isOneKeyCreateFieldVisible('ipqcHardTag')"> |
|
|
<el-form-item> |
|
|
<el-form-item> |
|
|
<span slot="label" class="big-label"><a href="javascript:void(0)" @click="openRoleDialog('ipqcHardTag')">IPQC-Hardtag</a></span> |
|
|
|
|
|
|
|
|
<span slot="label" class="big-label"><a href="javascript:void(0)" @click="getBaseList(2010)">IPQC-Hardtag</a></span> |
|
|
<el-input v-model="oneKeyForm.ipqcHardTagName" disabled style="width: 100%"></el-input> |
|
|
<el-input v-model="oneKeyForm.ipqcHardTagName" disabled style="width: 100%"></el-input> |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
</el-col> |
|
|
<el-col :span="6" v-show="isOneKeyCreateFieldVisible('cQualityEngineer7')"> |
|
|
<el-col :span="6" v-show="isOneKeyCreateFieldVisible('cQualityEngineer7')"> |
|
|
<el-form-item> |
|
|
<el-form-item> |
|
|
<span slot="label" class="big-label"><a href="javascript:void(0)" @click="openRoleDialog('cQualityEngineer7')">前道工程师</a></span> |
|
|
|
|
|
|
|
|
<span slot="label" class="big-label"><a href="javascript:void(0)" @click="getBaseList(2012)">前道工程师</a></span> |
|
|
<el-input v-model="oneKeyForm.cQualityEngineer7Name" disabled style="width: 100%"></el-input> |
|
|
<el-input v-model="oneKeyForm.cQualityEngineer7Name" disabled style="width: 100%"></el-input> |
|
|
</el-form-item> |
|
|
</el-form-item> |
|
|
</el-col> |
|
|
</el-col> |
|
|
@ -1552,12 +1556,13 @@ export default { |
|
|
cQualityEngineer3: { apiKey: '4', title: 'FQC1', nameField: 'cQualityEngineer3Name' }, |
|
|
cQualityEngineer3: { apiKey: '4', title: 'FQC1', nameField: 'cQualityEngineer3Name' }, |
|
|
cManufactureEngineer: { apiKey: '5', title: 'MFG', nameField: 'cManufactureEngineerName' }, |
|
|
cManufactureEngineer: { apiKey: '5', title: 'MFG', nameField: 'cManufactureEngineerName' }, |
|
|
engineer: { apiKey: '6', title: 'Engineer', nameField: 'engineerName' }, |
|
|
engineer: { apiKey: '6', title: 'Engineer', nameField: 'engineerName' }, |
|
|
cQualityEngineer4: { apiKey: '7', title: 'SQE', nameField: 'cQualityEngineer4Name' }, |
|
|
|
|
|
cQualityEngineer5: { apiKey: '7', title: 'FQC2', nameField: 'cQualityEngineer5Name' }, |
|
|
|
|
|
cQualityEngineer6: { apiKey: '7', title: 'IQC', nameField: 'cQualityEngineer6Name' }, |
|
|
|
|
|
|
|
|
// 以下角色与 NPI 项目页一致,走 Chooselist tag,不能复用文档工程师的 searchBusinessInfo7。 |
|
|
|
|
|
cQualityEngineer4: { tagNo: 2006, title: 'SQE', nameField: 'cQualityEngineer4Name' }, |
|
|
|
|
|
cQualityEngineer5: { tagNo: 2007, title: 'FQC2', nameField: 'cQualityEngineer5Name' }, |
|
|
|
|
|
cQualityEngineer6: { tagNo: 2008, title: 'IQC', nameField: 'cQualityEngineer6Name' }, |
|
|
docEngineer: { apiKey: '7', title: '文档工程师', nameField: 'docEngineerName' }, |
|
|
docEngineer: { apiKey: '7', title: '文档工程师', nameField: 'docEngineerName' }, |
|
|
ipqcHardTag: { apiKey: '7', title: 'IPQC-Hardtag', nameField: 'ipqcHardTagName' }, |
|
|
|
|
|
cQualityEngineer7: { apiKey: '7', title: '前道工程师', nameField: 'cQualityEngineer7Name' }, |
|
|
|
|
|
|
|
|
ipqcHardTag: { tagNo: 2010, title: 'IPQC-Hardtag', nameField: 'ipqcHardTagName' }, |
|
|
|
|
|
cQualityEngineer7: { tagNo: 2012, title: '前道工程师', nameField: 'cQualityEngineer7Name' }, |
|
|
docEngineer2: { apiKey: '8', title: '文档工程师2', nameField: 'docEngineer2Name' } |
|
|
docEngineer2: { apiKey: '8', title: '文档工程师2', nameField: 'docEngineer2Name' } |
|
|
}, |
|
|
}, |
|
|
dataList: [], |
|
|
dataList: [], |
|
|
@ -1903,6 +1908,17 @@ export default { |
|
|
const value = row[columnProp] |
|
|
const value = row[columnProp] |
|
|
return this.isBlankValue(value) ? '' : String(value) |
|
|
return this.isBlankValue(value) ? '' : String(value) |
|
|
}, |
|
|
}, |
|
|
|
|
|
isDeliveryVarianceAlert (row) { |
|
|
|
|
|
// Delivery Variance = Baseline - Delivery&Package 实际日期;-8/-9 这类小于 -7 的值表示延误超过 7 天,需要标红。 |
|
|
|
|
|
if (!row || this.isBlankValue(row.deliveryVariance)) { |
|
|
|
|
|
return false |
|
|
|
|
|
} |
|
|
|
|
|
const variance = Number(row.deliveryVariance) |
|
|
|
|
|
if (Number.isNaN(variance)) { |
|
|
|
|
|
return false |
|
|
|
|
|
} |
|
|
|
|
|
return variance < -7 |
|
|
|
|
|
}, |
|
|
getTrackingRoleDisplayValue (row, nameField, valueField) { |
|
|
getTrackingRoleDisplayValue (row, nameField, valueField) { |
|
|
if (!row) { |
|
|
if (!row) { |
|
|
return '' |
|
|
return '' |
|
|
@ -3538,11 +3554,40 @@ export default { |
|
|
this.$refs.baseList.init(val, strVal, '') |
|
|
this.$refs.baseList.init(val, strVal, '') |
|
|
}) |
|
|
}) |
|
|
}, |
|
|
}, |
|
|
|
|
|
getRoleFieldByTagNo (tagNo) { |
|
|
|
|
|
const numericTag = Number(tagNo) |
|
|
|
|
|
const fieldKeys = Object.keys(this.roleConfig || {}) |
|
|
|
|
|
for (let i = 0; i < fieldKeys.length; i++) { |
|
|
|
|
|
const fieldKey = fieldKeys[i] |
|
|
|
|
|
if (Number(this.roleConfig[fieldKey].tagNo) === numericTag) { |
|
|
|
|
|
return fieldKey |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
return '' |
|
|
|
|
|
}, |
|
|
|
|
|
buildRoleValueFromChooserRow (row) { |
|
|
|
|
|
if (!row) { |
|
|
|
|
|
return '' |
|
|
|
|
|
} |
|
|
|
|
|
const username = row.username || row.user_name || '' |
|
|
|
|
|
const userDisplay = row.user_display || row.userDisplay || '' |
|
|
|
|
|
if (!username && !userDisplay) { |
|
|
|
|
|
return '' |
|
|
|
|
|
} |
|
|
|
|
|
return username + '-' + userDisplay |
|
|
|
|
|
}, |
|
|
getBaseData (val) { |
|
|
getBaseData (val) { |
|
|
if (this.tagNo === 509) { |
|
|
if (this.tagNo === 509) { |
|
|
this.oneKeyForm.customerNo = val.customer_no |
|
|
this.oneKeyForm.customerNo = val.customer_no |
|
|
this.oneKeyForm.customerDesc = val.customer_desc |
|
|
this.oneKeyForm.customerDesc = val.customer_desc |
|
|
|
|
|
return |
|
|
} |
|
|
} |
|
|
|
|
|
// IQC/SQE/FQC2/IPQC-Hardtag/前道工程师与 NPI 项目页共用 Chooselist 回填规则。 |
|
|
|
|
|
const roleField = this.getRoleFieldByTagNo(this.tagNo) |
|
|
|
|
|
if (!roleField) { |
|
|
|
|
|
return |
|
|
|
|
|
} |
|
|
|
|
|
this.setOneKeyRoleFieldValue(roleField, this.buildRoleValueFromChooserRow(val)) |
|
|
}, |
|
|
}, |
|
|
customerNoBlur () { |
|
|
customerNoBlur () { |
|
|
if (!this.oneKeyForm.customerNo) { |
|
|
if (!this.oneKeyForm.customerNo) { |
|
|
@ -3636,6 +3681,10 @@ export default { |
|
|
if (!roleCfg) { |
|
|
if (!roleCfg) { |
|
|
return |
|
|
return |
|
|
} |
|
|
} |
|
|
|
|
|
if (roleCfg.tagNo) { |
|
|
|
|
|
this.getBaseList(roleCfg.tagNo) |
|
|
|
|
|
return |
|
|
|
|
|
} |
|
|
this.roleDialogField = field |
|
|
this.roleDialogField = field |
|
|
this.roleDialogApiKey = roleCfg.apiKey |
|
|
this.roleDialogApiKey = roleCfg.apiKey |
|
|
this.roleDialogTitle = roleCfg.title |
|
|
this.roleDialogTitle = roleCfg.title |
|
|
@ -3656,13 +3705,10 @@ export default { |
|
|
}) |
|
|
}) |
|
|
}, |
|
|
}, |
|
|
pickRole (row) { |
|
|
pickRole (row) { |
|
|
const roleCfg = this.roleConfig[this.roleDialogField] |
|
|
|
|
|
if (!roleCfg) { |
|
|
|
|
|
|
|
|
if (!this.roleDialogField) { |
|
|
return |
|
|
return |
|
|
} |
|
|
} |
|
|
const value = row.username + '-' + row.userDisplay |
|
|
|
|
|
this.oneKeyForm[this.roleDialogField] = value |
|
|
|
|
|
this.oneKeyForm[roleCfg.nameField] = row.userDisplay |
|
|
|
|
|
|
|
|
this.setOneKeyRoleFieldValue(this.roleDialogField, this.buildRoleValueFromChooserRow(row)) |
|
|
this.roleDialogVisible = false |
|
|
this.roleDialogVisible = false |
|
|
}, |
|
|
}, |
|
|
getEmptyOneKeyForm () { |
|
|
getEmptyOneKeyForm () { |
|
|
@ -6254,6 +6300,11 @@ export default { |
|
|
background: #fde2e2; |
|
|
background: #fde2e2; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
.delivery-variance-alert { |
|
|
|
|
|
color: #f56c6c; |
|
|
|
|
|
font-weight: 700; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
.tracking-status--unknown { |
|
|
.tracking-status--unknown { |
|
|
background: #f4f4f5; |
|
|
background: #f4f4f5; |
|
|
} |
|
|
} |
|
|
|