|
@@ -517,14 +517,14 @@
|
|
|
<div v-if="!isGyDetailCellEditing(row, '部件名称')" class="gy-detail-cell" @click.stop="startGyDetailCellEdit(row, '部件名称')">{{ formatGyDetailCellText(row.部件名称) }}</div>
|
|
<div v-if="!isGyDetailCellEditing(row, '部件名称')" class="gy-detail-cell" @click.stop="startGyDetailCellEdit(row, '部件名称')">{{ formatGyDetailCellText(row.部件名称) }}</div>
|
|
|
<el-select
|
|
<el-select
|
|
|
v-else
|
|
v-else
|
|
|
- :ref="setGyDetailCellInputRef"
|
|
|
|
|
|
|
+ :ref="setGyDetailBuJianMingChengSelectRef"
|
|
|
v-model="row.部件名称"
|
|
v-model="row.部件名称"
|
|
|
size="small"
|
|
size="small"
|
|
|
class="gy-detail-cell-input gy-detail-cell-select"
|
|
class="gy-detail-cell-input gy-detail-cell-select"
|
|
|
filterable
|
|
filterable
|
|
|
allow-create
|
|
allow-create
|
|
|
@change="handleGyDetailBuJianMingChengChange(row)"
|
|
@change="handleGyDetailBuJianMingChengChange(row)"
|
|
|
- @blur="finishGyDetailCellEdit(row)"
|
|
|
|
|
|
|
+ @blur="finishGyDetailBuJianMingChengEdit(row)"
|
|
|
>
|
|
>
|
|
|
<el-option v-for="opt in gyDetailBuJianMingChengOptions" :key="opt" :label="opt" :value="opt" />
|
|
<el-option v-for="opt in gyDetailBuJianMingChengOptions" :key="opt" :label="opt" :value="opt" />
|
|
|
</el-select>
|
|
</el-select>
|
|
@@ -5021,6 +5021,7 @@ const sortTableData = ref([])
|
|
|
|
|
|
|
|
// =========== 工艺资料详情弹窗 ===========
|
|
// =========== 工艺资料详情弹窗 ===========
|
|
|
const gyDetailDialogVisible = ref(false)
|
|
const gyDetailDialogVisible = ref(false)
|
|
|
|
|
+ const gyDetailBuJianMingChengSelectRef = ref(null)
|
|
|
const gyDetailFormData = reactive({
|
|
const gyDetailFormData = reactive({
|
|
|
订单编号: '',
|
|
订单编号: '',
|
|
|
客户编号: '',
|
|
客户编号: '',
|
|
@@ -5159,6 +5160,7 @@ const sortTableData = ref([])
|
|
|
|
|
|
|
|
const onGyDetailDecimalInput = (row, field, val) => {
|
|
const onGyDetailDecimalInput = (row, field, val) => {
|
|
|
row[field] = sanitizeGyDetailDecimalInput(val)
|
|
row[field] = sanitizeGyDetailDecimalInput(val)
|
|
|
|
|
+ refreshGyDetailTableFooter()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
const formatGyDetailCellText = (val) => {
|
|
const formatGyDetailCellText = (val) => {
|
|
@@ -5186,6 +5188,13 @@ const sortTableData = ref([])
|
|
|
gyDetailCellInputRef.value = el
|
|
gyDetailCellInputRef.value = el
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ const setGyDetailBuJianMingChengSelectRef = (el) => {
|
|
|
|
|
+ setGyDetailCellInputRef(el)
|
|
|
|
|
+ if (el) {
|
|
|
|
|
+ gyDetailBuJianMingChengSelectRef.value = el
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
const startGyDetailCellEdit = (row, field) => {
|
|
const startGyDetailCellEdit = (row, field) => {
|
|
|
if (gyDetailReadonly.value && !isGyDetailCellEditable(field)) return
|
|
if (gyDetailReadonly.value && !isGyDetailCellEditable(field)) return
|
|
|
gyDetailEditingCell.value = { rowKey: row._rowKey, field }
|
|
gyDetailEditingCell.value = { rowKey: row._rowKey, field }
|
|
@@ -5194,11 +5203,45 @@ const sortTableData = ref([])
|
|
|
const clearGyDetailCellEdit = () => {
|
|
const clearGyDetailCellEdit = () => {
|
|
|
gyDetailEditingCell.value = null
|
|
gyDetailEditingCell.value = null
|
|
|
gyDetailCellInputRef.value = null
|
|
gyDetailCellInputRef.value = null
|
|
|
|
|
+ gyDetailBuJianMingChengSelectRef.value = null
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ const finishGyDetailBuJianMingChengEdit = (row) => {
|
|
|
|
|
+ if (!gyDetailEditingCell.value) return
|
|
|
|
|
+
|
|
|
|
|
+ const selectRef = gyDetailBuJianMingChengSelectRef.value
|
|
|
|
|
+ if (selectRef) {
|
|
|
|
|
+ const inputValue = selectRef.$el?.querySelector?.('input')?.value?.trim()
|
|
|
|
|
+ if (inputValue && !row.部件名称 && gyDetailEditingCell.value?.field === '部件名称') {
|
|
|
|
|
+ row.部件名称 = inputValue
|
|
|
|
|
+ handleGyDetailBuJianMingChengChange(row)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ clearGyDetailCellEdit()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
const finishGyDetailCellEdit = async (row) => {
|
|
const finishGyDetailCellEdit = async (row) => {
|
|
|
if (!gyDetailEditingCell.value) return
|
|
if (!gyDetailEditingCell.value) return
|
|
|
|
|
+ const editingField = gyDetailEditingCell.value.field
|
|
|
clearGyDetailCellEdit()
|
|
clearGyDetailCellEdit()
|
|
|
|
|
+
|
|
|
|
|
+ if (row._gyDetailNew && editingField !== '工序名称') {
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (editingField === '定额分') {
|
|
|
|
|
+ const totalScore = parseFloat(sumGyDetailDisplayField('定额分')) || 0
|
|
|
|
|
+ const planManufactureScore = parseFloat(gyDetailFormData.计划制造工分) || 0
|
|
|
|
|
+
|
|
|
|
|
+ if (totalScore > planManufactureScore) {
|
|
|
|
|
+ ElMessage.warning('总工分不能大于计划制造工分')
|
|
|
|
|
+ row.定额分 = row._gyDetailOrigin?.定额分 ?? row.定额分
|
|
|
|
|
+ refreshGyDetailTableFooter()
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
await handleUpdateProcess(row)
|
|
await handleUpdateProcess(row)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -5299,7 +5342,7 @@ const sortTableData = ref([])
|
|
|
const applyGyDetailColumnFilter = (list, filterRef, options, matchRow) => {
|
|
const applyGyDetailColumnFilter = (list, filterRef, options, matchRow) => {
|
|
|
const optionList = Array.isArray(options) ? options : (options?.value || [])
|
|
const optionList = Array.isArray(options) ? options : (options?.value || [])
|
|
|
const selected = filterRef.value
|
|
const selected = filterRef.value
|
|
|
- if (!selected.length) return []
|
|
|
|
|
|
|
+ if (!selected.length) return list
|
|
|
if (!optionList.length || selected.length >= optionList.length) return list
|
|
if (!optionList.length || selected.length >= optionList.length) return list
|
|
|
const set = new Set(selected.map((v) => normalizeGyDetailField(v)))
|
|
const set = new Set(selected.map((v) => normalizeGyDetailField(v)))
|
|
|
return list.filter((row) => set.has(matchRow(row)))
|
|
return list.filter((row) => set.has(matchRow(row)))
|
|
@@ -5515,7 +5558,7 @@ const sortTableData = ref([])
|
|
|
ElMessage.warning('无订单编号,无法新增工艺')
|
|
ElMessage.warning('无订单编号,无法新增工艺')
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
- const batchCount = 5
|
|
|
|
|
|
|
+ const batchCount = 10
|
|
|
for (let i = 0; i < batchCount; i++) {
|
|
for (let i = 0; i < batchCount; i++) {
|
|
|
const nextCode = getNextGyDetailProcessCode()
|
|
const nextCode = getNextGyDetailProcessCode()
|
|
|
const newRow = {
|
|
const newRow = {
|
|
@@ -5549,7 +5592,7 @@ const sortTableData = ref([])
|
|
|
const buJianMingCheng = String(row.部件名称 || '').trim()
|
|
const buJianMingCheng = String(row.部件名称 || '').trim()
|
|
|
if (!buJianMingCheng) {
|
|
if (!buJianMingCheng) {
|
|
|
row.部件编号 = ''
|
|
row.部件编号 = ''
|
|
|
- finishGyDetailCellEdit(row)
|
|
|
|
|
|
|
+ row.大工序 = ''
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -5564,6 +5607,7 @@ const sortTableData = ref([])
|
|
|
} else {
|
|
} else {
|
|
|
row.部件编号 = ''
|
|
row.部件编号 = ''
|
|
|
}
|
|
}
|
|
|
|
|
+ row.大工序 = buJianMingCheng
|
|
|
} else {
|
|
} else {
|
|
|
let maxCode = 0
|
|
let maxCode = 0
|
|
|
gyDetailFormData.工艺列表.forEach((r) => {
|
|
gyDetailFormData.工艺列表.forEach((r) => {
|
|
@@ -5573,9 +5617,12 @@ const sortTableData = ref([])
|
|
|
}
|
|
}
|
|
|
})
|
|
})
|
|
|
row.部件编号 = String(maxCode + 1).padStart(2, '0')
|
|
row.部件编号 = String(maxCode + 1).padStart(2, '0')
|
|
|
|
|
+ row.大工序 = '车缝'
|
|
|
|
|
+
|
|
|
|
|
+ if (!gyDetailBuJianMingChengFilter.value.includes(buJianMingCheng)) {
|
|
|
|
|
+ gyDetailBuJianMingChengFilter.value.push(buJianMingCheng)
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- finishGyDetailCellEdit(row)
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
const handleGyDetailBatchDelete = async () => {
|
|
const handleGyDetailBatchDelete = async () => {
|
|
@@ -6160,12 +6207,28 @@ const sortTableData = ref([])
|
|
|
const orderNo = String(gyDetailFormData.订单编号 || '').trim()
|
|
const orderNo = String(gyDetailFormData.订单编号 || '').trim()
|
|
|
if (!orderNo) return
|
|
if (!orderNo) return
|
|
|
if (!isGyDetailRowChanged(row)) return
|
|
if (!isGyDetailRowChanged(row)) return
|
|
|
|
|
+
|
|
|
|
|
+ if (row._gyDetailSaving) {
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
try {
|
|
try {
|
|
|
if (row._gyDetailNew || !row.id) {
|
|
if (row._gyDetailNew || !row.id) {
|
|
|
|
|
+ const buJianMingCheng = String(row.部件名称 || '').trim()
|
|
|
|
|
+ const gongXuMingCheng = String(row.工序名称 || '').trim()
|
|
|
|
|
+ const daGongXu = String(row.大工序 || '').trim()
|
|
|
|
|
+
|
|
|
|
|
+ if (!buJianMingCheng || !gongXuMingCheng || !daGongXu) {
|
|
|
|
|
+ ElMessage.warning('部件名称、工序名称、生产工序三个字段都必须填写')
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ row._gyDetailSaving = true
|
|
|
|
|
+
|
|
|
const addRes = await AddProcess({
|
|
const addRes = await AddProcess({
|
|
|
workorder: orderNo,
|
|
workorder: orderNo,
|
|
|
part_code: row.部件编号 || '',
|
|
part_code: row.部件编号 || '',
|
|
|
|
|
+ part_name: row.部件名称 || '',
|
|
|
process_name: row.工序名称 || '',
|
|
process_name: row.工序名称 || '',
|
|
|
process_code: String(row.工序编号 ?? ''),
|
|
process_code: String(row.工序编号 ?? ''),
|
|
|
big_process: row.大工序 || '',
|
|
big_process: row.大工序 || '',
|
|
@@ -6180,10 +6243,14 @@ const sortTableData = ref([])
|
|
|
if (addRes.data) {
|
|
if (addRes.data) {
|
|
|
row.id = addRes.data.id || addRes.data
|
|
row.id = addRes.data.id || addRes.data
|
|
|
}
|
|
}
|
|
|
|
|
+ row._gyDetailOrigin = snapshotGyDetailRow(row)
|
|
|
ElMessage.success('保存成功')
|
|
ElMessage.success('保存成功')
|
|
|
}
|
|
}
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ row._gyDetailSaving = true
|
|
|
|
|
+
|
|
|
const result = await UpdateProcess({
|
|
const result = await UpdateProcess({
|
|
|
id: row.id,
|
|
id: row.id,
|
|
|
process_name: row.工序名称 || '',
|
|
process_name: row.工序名称 || '',
|
|
@@ -6205,6 +6272,8 @@ const sortTableData = ref([])
|
|
|
}
|
|
}
|
|
|
} catch {
|
|
} catch {
|
|
|
/* 忽略 */
|
|
/* 忽略 */
|
|
|
|
|
+ } finally {
|
|
|
|
|
+ row._gyDetailSaving = false
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -8044,6 +8113,20 @@ const sortTableData = ref([])
|
|
|
--vxe-table-row-current-background-color: #ff80ff;
|
|
--vxe-table-row-current-background-color: #ff80ff;
|
|
|
--vxe-table-row-hover-current-background-color: #ff80ff;
|
|
--vxe-table-row-hover-current-background-color: #ff80ff;
|
|
|
--vxe-ui-table-row-current-background-color: #ff80ff;
|
|
--vxe-ui-table-row-current-background-color: #ff80ff;
|
|
|
|
|
+ --vxe-table-row-height: 28px;
|
|
|
|
|
+ font-size: 14px;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ :deep(.gy-detail-vxe-table .vxe-table--body-wrapper .vxe-body--row),
|
|
|
|
|
+ :deep(.gy-detail-vxe-table .vxe-table--header-wrapper .vxe-header--row) {
|
|
|
|
|
+ height: 28px;
|
|
|
|
|
+ line-height: 28px;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ :deep(.gy-detail-vxe-table .vxe-table--body-wrapper .vxe-body--cell),
|
|
|
|
|
+ :deep(.gy-detail-vxe-table .vxe-table--header-wrapper .vxe-header--cell) {
|
|
|
|
|
+ font-size: 14px;
|
|
|
|
|
+ padding: 0 8px;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.gy-detail-table-wrap ::-webkit-scrollbar,
|
|
.gy-detail-table-wrap ::-webkit-scrollbar,
|
|
@@ -8051,8 +8134,8 @@ const sortTableData = ref([])
|
|
|
.gy-detail-vxe-table .vxe-table--body-wrapper::-webkit-scrollbar,
|
|
.gy-detail-vxe-table .vxe-table--body-wrapper::-webkit-scrollbar,
|
|
|
.gy-detail-vxe-table .vxe-table--header-wrapper::-webkit-scrollbar {
|
|
.gy-detail-vxe-table .vxe-table--header-wrapper::-webkit-scrollbar {
|
|
|
display: block !important;
|
|
display: block !important;
|
|
|
- width: 8px;
|
|
|
|
|
- height: 8px;
|
|
|
|
|
|
|
+ width: 14px;
|
|
|
|
|
+ height: 14px;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.gy-detail-table-wrap ::-webkit-scrollbar-track,
|
|
.gy-detail-table-wrap ::-webkit-scrollbar-track,
|
|
@@ -8060,7 +8143,7 @@ const sortTableData = ref([])
|
|
|
.gy-detail-vxe-table .vxe-table--body-wrapper::-webkit-scrollbar-track,
|
|
.gy-detail-vxe-table .vxe-table--body-wrapper::-webkit-scrollbar-track,
|
|
|
.gy-detail-vxe-table .vxe-table--header-wrapper::-webkit-scrollbar-track {
|
|
.gy-detail-vxe-table .vxe-table--header-wrapper::-webkit-scrollbar-track {
|
|
|
background: #f1f1f1;
|
|
background: #f1f1f1;
|
|
|
- border-radius: 4px;
|
|
|
|
|
|
|
+ border-radius: 7px;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.gy-detail-table-wrap ::-webkit-scrollbar-thumb,
|
|
.gy-detail-table-wrap ::-webkit-scrollbar-thumb,
|
|
@@ -8068,7 +8151,8 @@ const sortTableData = ref([])
|
|
|
.gy-detail-vxe-table .vxe-table--body-wrapper::-webkit-scrollbar-thumb,
|
|
.gy-detail-vxe-table .vxe-table--body-wrapper::-webkit-scrollbar-thumb,
|
|
|
.gy-detail-vxe-table .vxe-table--header-wrapper::-webkit-scrollbar-thumb {
|
|
.gy-detail-vxe-table .vxe-table--header-wrapper::-webkit-scrollbar-thumb {
|
|
|
background: #ccc;
|
|
background: #ccc;
|
|
|
- border-radius: 4px;
|
|
|
|
|
|
|
+ border-radius: 7px;
|
|
|
|
|
+ border: 3px solid #f1f1f1;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.gy-detail-table-wrap ::-webkit-scrollbar-thumb:hover,
|
|
.gy-detail-table-wrap ::-webkit-scrollbar-thumb:hover,
|