Merge remote-tracking branch 'origin/0.8.X' into 0.8.X
This commit is contained in:
@@ -45,18 +45,20 @@ export function submitApproval(reqId, firstApproverId, firstApproverName) {
|
||||
}
|
||||
|
||||
// 审批通过
|
||||
export function approvePurchase(reqId) {
|
||||
export function approvePurchase(reqId, approvalOpinion) {
|
||||
return request({
|
||||
url: '/erp/purchaseRequisition/' + reqId + '/approve',
|
||||
method: 'put'
|
||||
method: 'put',
|
||||
params: { approvalOpinion }
|
||||
})
|
||||
}
|
||||
|
||||
// 驳回
|
||||
export function rejectPurchase(reqId) {
|
||||
export function rejectPurchase(reqId, approvalOpinion) {
|
||||
return request({
|
||||
url: '/erp/purchaseRequisition/' + reqId + '/reject',
|
||||
method: 'put'
|
||||
method: 'put',
|
||||
params: { approvalOpinion }
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -64,6 +64,10 @@ export default {
|
||||
type: Number,
|
||||
default: 6,
|
||||
validator: (value) => value > 0
|
||||
},
|
||||
inputFormatter: {
|
||||
type: Function,
|
||||
default: null
|
||||
}
|
||||
},
|
||||
data() {
|
||||
@@ -132,10 +136,11 @@ export default {
|
||||
* @param {object} item - 选中的项 {value: 'xxx'}
|
||||
*/
|
||||
handleSelect(item) {
|
||||
this.cacheInputValue(item.value);
|
||||
this.inputValue = item.value;
|
||||
const v = this.formatValue(item.value);
|
||||
this.cacheInputValue(v);
|
||||
this.inputValue = v;
|
||||
// 触发自定义事件,通知父组件选中结果
|
||||
this.$emit('input', item.value);
|
||||
this.$emit('input', v);
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -144,13 +149,22 @@ export default {
|
||||
*/
|
||||
handleInputChange(value) {
|
||||
if (value && value.trim() !== '') {
|
||||
this.cacheInputValue(value.trim());
|
||||
const v = this.formatValue(value.trim());
|
||||
this.cacheInputValue(v);
|
||||
// 触发自定义事件,通知父组件输入结果
|
||||
this.$emit('input', value.trim());
|
||||
this.$emit('input', v);
|
||||
} else {
|
||||
this.$emit('input', '');
|
||||
}
|
||||
},
|
||||
formatValue(value) {
|
||||
const v = value === null || value === undefined ? '' : String(value);
|
||||
if (!v.trim()) return '';
|
||||
if (typeof this.inputFormatter === 'function') {
|
||||
return this.inputFormatter(v);
|
||||
}
|
||||
return v.trim();
|
||||
},
|
||||
|
||||
/**
|
||||
* 缓存输入值到localStorage
|
||||
@@ -196,4 +210,4 @@ export default {
|
||||
.inline-input {
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
||||
@@ -19,6 +19,8 @@ export const MemoInputStorageKey = {
|
||||
maintenanceEquipmentExecutor: 'maintenanceEquipmentExecutor', // 维修明细-设备执行人员
|
||||
maintenancePlannedCompleteTime: 'maintenancePlannedCompleteTime', // 维修明细-预计完成时间
|
||||
maintenanceActualCompleteTime: 'maintenanceActualCompleteTime', // 维修明细-实际完成时间
|
||||
maintenancePlannedStartTime: 'maintenancePlannedStartTime', // 维修明细-预计开始时间
|
||||
maintenanceActualStartTime: 'maintenanceActualStartTime', // 维修明细-实际开始时间
|
||||
maintenanceTotalHours: 'maintenanceTotalHours', // 维修明细-总耗时
|
||||
maintenanceAcceptanceUser: 'maintenanceAcceptanceUser', // 维修明细-验收人
|
||||
maintenanceRemark: 'maintenanceRemark', // 维修明细-备注
|
||||
|
||||
@@ -363,9 +363,15 @@
|
||||
|
||||
<!-- 审批进度 -->
|
||||
<div class="pv-section-title" style="margin-top:14px">审批进度</div>
|
||||
<div style="display:flex;gap:24px;padding:8px 0;font-size:13px">
|
||||
<div><label style="color:#909399">一审人:</label><span>{{ viewForm.signPurchaseHandler || '待审批' }}</span></div>
|
||||
<div><label style="color:#909399">二审人(陈清鑫):</label><span>{{ viewForm.signRequestGm || '待审批' }}</span></div>
|
||||
<div style="padding:8px 0;font-size:13px">
|
||||
<div style="margin-bottom:10px">
|
||||
<div><label style="color:#909399">一审人:</label><span>{{ viewForm.signPurchaseHandler || '待审批' }}</span></div>
|
||||
<div v-if="viewForm.firstApprovalOpinion" style="margin:4px 0 0 62px;color:#606266;font-size:12px;padding:4px 10px;background:#f5f7fa;border-radius:3px;display:inline-block">意见:{{ viewForm.firstApprovalOpinion }}</div>
|
||||
</div>
|
||||
<div>
|
||||
<div><label style="color:#909399">二审人(陈清鑫):</label><span>{{ viewForm.signRequestGm || '待审批' }}</span></div>
|
||||
<div v-if="viewForm.secondApprovalOpinion" style="margin:4px 0 0 124px;color:#606266;font-size:12px;padding:4px 10px;background:#f5f7fa;border-radius:3px;display:inline-block">意见:{{ viewForm.secondApprovalOpinion }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
@@ -766,7 +772,7 @@ export default {
|
||||
// 审批通过
|
||||
doApprove() {
|
||||
this.approvalLoading = true
|
||||
approvePurchase(this.approvalReq.reqId).then(() => {
|
||||
approvePurchase(this.approvalReq.reqId, this.approvalRemark).then(() => {
|
||||
this.$modal.msgSuccess('审批通过')
|
||||
this.approvalOpen = false
|
||||
this.getList()
|
||||
@@ -775,7 +781,7 @@ export default {
|
||||
// 驳回
|
||||
doReject() {
|
||||
this.approvalLoading = true
|
||||
rejectPurchase(this.approvalReq.reqId).then(() => {
|
||||
rejectPurchase(this.approvalReq.reqId, this.approvalRemark).then(() => {
|
||||
this.$modal.msgSuccess('已驳回')
|
||||
this.approvalOpen = false
|
||||
this.getList()
|
||||
|
||||
@@ -497,7 +497,11 @@ export default {
|
||||
loadDialogData() {
|
||||
if (!this.currentWarehouse) return;
|
||||
this.dialogLoading = true;
|
||||
const baseParams = { warehouseId: this.currentWarehouse.warehouseId, dataType: 1, status: 0 };
|
||||
const baseParams = {
|
||||
warehouseId: this.currentWarehouse.warehouseId,
|
||||
qualityStatusCsv: this.queryParams.qualityStatusCsv || '',
|
||||
dataType: 1, status: 0,
|
||||
};
|
||||
Promise.all([
|
||||
listLightCoil({ ...baseParams, pageSize: 99999, pageNum: 1 }),
|
||||
listMaterialCoil({ ...baseParams, pageNum: this.dialogPageNum, pageSize: this.dialogPageSize }),
|
||||
|
||||
@@ -112,8 +112,10 @@
|
||||
<el-table-column label="具体工作内容" align="center" prop="repairContent" min-width="220" show-overflow-tooltip />
|
||||
<el-table-column label="产线执行人员" align="center" prop="lineExecutor" min-width="150" show-overflow-tooltip />
|
||||
<el-table-column label="设备执行人员" align="center" prop="equipmentExecutor" min-width="150" show-overflow-tooltip />
|
||||
<el-table-column label="预计完成时间" align="center" prop="plannedCompleteTime" min-width="140" show-overflow-tooltip />
|
||||
<el-table-column label="实际完成时间" align="center" prop="actualCompleteTime" min-width="140" show-overflow-tooltip />
|
||||
<el-table-column label="预计开始时间" align="center" prop="plannedStartTime" min-width="120" show-overflow-tooltip />
|
||||
<el-table-column label="预计结束时间" align="center" prop="plannedCompleteTime" min-width="120" show-overflow-tooltip />
|
||||
<el-table-column label="实际开始时间" align="center" prop="actualStartTime" min-width="120" show-overflow-tooltip />
|
||||
<el-table-column label="实际结束时间" align="center" prop="actualCompleteTime" min-width="120" show-overflow-tooltip />
|
||||
<el-table-column label="总耗时(h)" align="center" prop="totalHours" min-width="110" show-overflow-tooltip />
|
||||
<el-table-column label="验收人" align="center" prop="acceptanceUser" min-width="110" show-overflow-tooltip />
|
||||
<el-table-column label="是否完成" align="center" width="100">
|
||||
|
||||
@@ -101,8 +101,10 @@
|
||||
<el-table-column label="具体工作内容" align="center" prop="repairContent" min-width="200" show-overflow-tooltip />
|
||||
<el-table-column label="产线执行人员" align="center" prop="lineExecutor" min-width="130" show-overflow-tooltip />
|
||||
<el-table-column label="设备执行人员" align="center" prop="equipmentExecutor" min-width="130" show-overflow-tooltip />
|
||||
<el-table-column label="预计完成时间" align="center" prop="plannedCompleteTime" min-width="120" show-overflow-tooltip />
|
||||
<el-table-column label="实际完成时间" align="center" prop="actualCompleteTime" min-width="120" show-overflow-tooltip />
|
||||
<el-table-column label="预计开始时间" align="center" prop="plannedStartTime" min-width="120" show-overflow-tooltip />
|
||||
<el-table-column label="预计结束时间" align="center" prop="plannedCompleteTime" min-width="120" show-overflow-tooltip />
|
||||
<el-table-column label="实际开始时间" align="center" prop="actualStartTime" min-width="120" show-overflow-tooltip />
|
||||
<el-table-column label="实际结束时间" align="center" prop="actualCompleteTime" min-width="120" show-overflow-tooltip />
|
||||
<el-table-column label="总耗时(h)" align="center" prop="totalHours" min-width="100" show-overflow-tooltip />
|
||||
<el-table-column label="验收人" align="center" prop="acceptanceUser" min-width="100" show-overflow-tooltip />
|
||||
<el-table-column label="进度" align="center" width="160">
|
||||
|
||||
@@ -165,7 +165,20 @@
|
||||
<div v-else class="cell-pre-wrap">{{ scope.row.equipmentExecutor || '-' }}</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="预计完成时间" align="center" min-width="140">
|
||||
<el-table-column label="预计开始时间" align="center" min-width="120">
|
||||
<template slot-scope="scope">
|
||||
<MemoInput
|
||||
v-if="scope.row._editing"
|
||||
v-model="scope.row.plannedStartTime"
|
||||
storageKey="maintenancePlannedStartTime"
|
||||
matchRule="contain"
|
||||
triggerMode="focus"
|
||||
:inputFormatter="normalizeHm"
|
||||
placeholder="如 07:00" />
|
||||
<span v-else>{{ scope.row.plannedStartTime || '-' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="预计结束时间" align="center" min-width="120">
|
||||
<template slot-scope="scope">
|
||||
<MemoInput
|
||||
v-if="scope.row._editing"
|
||||
@@ -173,11 +186,25 @@
|
||||
storageKey="maintenancePlannedCompleteTime"
|
||||
matchRule="contain"
|
||||
triggerMode="focus"
|
||||
placeholder="如 7:00-18:30" />
|
||||
:inputFormatter="normalizeHm"
|
||||
placeholder="如 18:30" />
|
||||
<span v-else>{{ scope.row.plannedCompleteTime || '-' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="实际完成时间" align="center" min-width="140">
|
||||
<el-table-column label="实际开始时间" align="center" min-width="120">
|
||||
<template slot-scope="scope">
|
||||
<MemoInput
|
||||
v-if="scope.row._editing"
|
||||
v-model="scope.row.actualStartTime"
|
||||
storageKey="maintenanceActualStartTime"
|
||||
matchRule="contain"
|
||||
triggerMode="focus"
|
||||
:inputFormatter="normalizeHm"
|
||||
placeholder="如 07:00" />
|
||||
<span v-else>{{ scope.row.actualStartTime || '-' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="实际结束时间" align="center" min-width="120">
|
||||
<template slot-scope="scope">
|
||||
<MemoInput
|
||||
v-if="scope.row._editing"
|
||||
@@ -185,7 +212,8 @@
|
||||
storageKey="maintenanceActualCompleteTime"
|
||||
matchRule="contain"
|
||||
triggerMode="focus"
|
||||
placeholder="如 7:00-18:30" />
|
||||
:inputFormatter="normalizeHm"
|
||||
placeholder="如 18:30" />
|
||||
<span v-else>{{ scope.row.actualCompleteTime || '-' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
@@ -362,6 +390,17 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
parseTime,
|
||||
normalizeHm(value) {
|
||||
if (value === null || value === undefined) return '';
|
||||
var s = String(value).trim();
|
||||
if (!s) return '';
|
||||
var m = s.match(/^(\d{1,2})(?::(\d{1,2}))?$/);
|
||||
if (!m) return s;
|
||||
var hh = parseInt(m[1], 10);
|
||||
var mm = m[2] === undefined ? 0 : parseInt(m[2], 10);
|
||||
if (isNaN(hh) || isNaN(mm) || hh < 0 || hh > 23 || mm < 0 || mm > 59) return s;
|
||||
return String(hh).padStart(2, '0') + ':' + String(mm).padStart(2, '0');
|
||||
},
|
||||
async loadLineList() {
|
||||
try {
|
||||
const res = await listProductionLine({ pageSize: 999 });
|
||||
@@ -456,7 +495,9 @@ export default {
|
||||
repairContent: rec.abnormalDesc || '',
|
||||
lineExecutor: rec.inspector || '',
|
||||
equipmentExecutor: '',
|
||||
plannedStartTime: '',
|
||||
plannedCompleteTime: '',
|
||||
actualStartTime: '',
|
||||
actualCompleteTime: '',
|
||||
totalHours: '',
|
||||
acceptanceUser: '',
|
||||
@@ -578,7 +619,9 @@ export default {
|
||||
repairContent: row.repairContent,
|
||||
lineExecutor: row.lineExecutor,
|
||||
equipmentExecutor: row.equipmentExecutor,
|
||||
plannedStartTime: row.plannedStartTime,
|
||||
plannedCompleteTime: row.plannedCompleteTime,
|
||||
actualStartTime: row.actualStartTime,
|
||||
actualCompleteTime: row.actualCompleteTime,
|
||||
totalHours: row.totalHours,
|
||||
acceptanceUser: row.acceptanceUser,
|
||||
@@ -598,7 +641,9 @@ export default {
|
||||
row.repairContent = row._origin.repairContent;
|
||||
row.lineExecutor = row._origin.lineExecutor;
|
||||
row.equipmentExecutor = row._origin.equipmentExecutor;
|
||||
row.plannedStartTime = row._origin.plannedStartTime;
|
||||
row.plannedCompleteTime = row._origin.plannedCompleteTime;
|
||||
row.actualStartTime = row._origin.actualStartTime;
|
||||
row.actualCompleteTime = row._origin.actualCompleteTime;
|
||||
row.totalHours = row._origin.totalHours;
|
||||
row.acceptanceUser = row._origin.acceptanceUser;
|
||||
@@ -644,7 +689,9 @@ export default {
|
||||
repairContent: '',
|
||||
lineExecutor: '',
|
||||
equipmentExecutor: '',
|
||||
plannedStartTime: '',
|
||||
plannedCompleteTime: '',
|
||||
actualStartTime: '',
|
||||
actualCompleteTime: '',
|
||||
totalHours: '',
|
||||
acceptanceUser: '',
|
||||
@@ -663,7 +710,9 @@ export default {
|
||||
repairContent: row.repairContent,
|
||||
lineExecutor: row.lineExecutor,
|
||||
equipmentExecutor: row.equipmentExecutor,
|
||||
plannedStartTime: row.plannedStartTime,
|
||||
plannedCompleteTime: row.plannedCompleteTime,
|
||||
actualStartTime: row.actualStartTime,
|
||||
actualCompleteTime: row.actualCompleteTime,
|
||||
totalHours: row.totalHours,
|
||||
acceptanceUser: row.acceptanceUser,
|
||||
|
||||
@@ -98,7 +98,7 @@ export default {
|
||||
const newSet = new Set(nv)
|
||||
const oldSet = ov ? new Set(ov) : new Set()
|
||||
this.orderedColumns = this.orderedColumns.filter(f => newSet.has(f))
|
||||
const added = nv.filter(f => !oldSet.has(f))
|
||||
const added = nv.filter(f => !oldSet.has(f) && !this.orderedColumns.includes(f))
|
||||
if (added.length) {
|
||||
this.orderedColumns.push(...added)
|
||||
}
|
||||
@@ -114,8 +114,9 @@ export default {
|
||||
try {
|
||||
const arr = JSON.parse(cached)
|
||||
if (Array.isArray(arr) && arr.length) {
|
||||
this.selectedColumns = [...arr]
|
||||
this.orderedColumns = [...arr]
|
||||
const uniqueArr = [...new Set(arr)]
|
||||
this.selectedColumns = uniqueArr
|
||||
this.orderedColumns = uniqueArr
|
||||
this.$emit('update:visible', true)
|
||||
return
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user