<script setup>
|
import {computed, nextTick, onMounted, onUnmounted, reactive, ref, toRefs} from "vue";
|
import {useRouter,useRoute} from 'vue-router'
|
import request from "@/utils/request";
|
import {ElMessage} from "element-plus";
|
import {changeFilterEvent, filterChanged} from "@/hook"
|
import domZIndex from 'dom-zindex'
|
import {indexOf} from "xe-utils";
|
import {addListener, toolbarButtonClickEvent} from "@/hook/mouseMove";
|
import userInfo from "@/stores/userInfo"
|
import { useI18n } from 'vue-i18n'
|
import footSum from "@/hook/footSum"
|
import companyInfo from "@/stores/sd/companyInfo"
|
domZIndex.setCurrent(3000)
|
const company = companyInfo()
|
//语言获取
|
const { t } = useI18n()
|
let brokenVisible = ref(false)
|
const xGrid = ref()
|
const brokenGrid =ref()
|
const router = useRouter()
|
const route = useRoute()
|
const user=userInfo()
|
//定义表头数据
|
const titleUploadData = ref({
|
//是否合片工序
|
laminating:'',
|
reportingWorkId: null,
|
//流程卡号
|
processId: null,
|
//销售单号
|
orderId: '',
|
reviewedState:0,
|
//生产单号
|
productionId: '',
|
//设备类型
|
deviceName: '',
|
//班组名称
|
teamsGroupsName: '',
|
//生产日期
|
reportingWorkTime: '',
|
//报工工序
|
thisProcess: '',
|
//上工序
|
previousProcess: '',
|
//下工序
|
nextProcess: '',
|
//备注
|
notes: '',
|
//本工序完工数
|
thisCompletedQuantity: '',
|
//本工序报废数
|
thisWornQuantity: '',
|
//班次
|
classes: '',
|
//责任工序
|
responsibleProcess: '',
|
order: {
|
//客户编号
|
customerId: '',
|
//客户名称
|
customerName: '',
|
//项目名称
|
project: '',
|
},
|
flowCard: {
|
//可报工数量
|
quantity: ''
|
},
|
|
|
})
|
let detail = ref([])
|
let layer=''
|
let technologicalProcess=''
|
|
//定义接收加载表头下拉数据
|
const titleSelectJson = ref({
|
deviceType: [],
|
teamsType: [],
|
processType: [],
|
thisProcessType: [],
|
mateProcessType: [],
|
historyDevice:[],
|
historyTeams:[],
|
historyProcess:[],
|
breakageType:[],
|
breakageReason:[]
|
|
})
|
|
|
|
let inputDisabled = ref(false)
|
onMounted(async () =>{
|
await initTiltle()
|
if(route.query.processId !== undefined && route.query.processId!=='' && route.query.processId!=null ){
|
titleUploadData.value.processId = route.query.processId
|
//当质检审核后加载明细信息
|
if(route.query.reviewStatus === '1'){
|
if(titleUploadData.value.thisProcess !== undefined
|
&& titleUploadData.value.thisProcess!==''
|
&& titleUploadData.value.thisProcess!=null){
|
getWork()
|
getQuantity()
|
}
|
}
|
}
|
//route.query.reportingWorkId = 'BG2403150004'
|
//判断是否传入报工编号
|
if(route.query.reportingWorkId !== '' && route.query.reportingWorkId!=null){
|
request.post(`reportingWork/selectUpdateReportingWork/${route.query.reportingWorkId}`).then(res=>{
|
if(res.code === '200'){
|
titleUploadData.value = res.data.reportingWork
|
titleSelectJson.value = res.data.basic
|
layer= res.data.layer
|
|
//添加补片状态列
|
let column = {field: 'patchStatusOther', width: 90,title: t('reportingWorks.patchCondition')}
|
gridOptions.columns.push(column)
|
|
const s01Values = [];
|
for (let i = 0; i < res.data.reportingWorkDetails.length; i++) {
|
const s01Values = [];
|
// 遍历 detailList 数组,提取 S01 值到 s01Values 数组
|
if (res.data.reportingWorkDetails[i].other_columns!=null|| res.data.reportingWorkDetails[i].other_columns!=undefined){
|
res.data.reportingWorkDetails.forEach(element => {
|
const otherColumnsObject = JSON.parse(element.other_columns);
|
const s01Value = otherColumnsObject.S01;
|
s01Values.push(s01Value || ''); // 如果 S01 值为空,添加空字符串或者其他默认值
|
});
|
|
// 将 s01Values 中的值赋给每个订单详情对象的 s01Value 属性
|
res.data.reportingWorkDetails.forEach((detail, index) => {
|
detail.s01Value = index < s01Values.length ? s01Values[index] : ''; // 赋值给 s01Value 属性
|
});
|
}
|
|
}
|
|
|
//titleUploadData.value.processId=titleUploadData.value.processId+'/'+layer
|
xGrid.value.reloadData(res.data.reportingWorkDetails)
|
let button = {
|
code: 'update',
|
name: t('basicData.update'),
|
status: 'primary',
|
}
|
if(route.query.reviewStatus === "1"){
|
button.name=t('basicData.review')
|
titleUploadData.value.qualityInspector=user.user.userName
|
}
|
gridOptions.toolbarConfig.buttons.push(button)
|
}
|
// getQuantity()
|
inputDisabled.value = true
|
})
|
}
|
})
|
|
const data = [{id:1,num:2},{id:1,num:3},{id:2,num:2},{id:1,num:2}];
|
|
//表尾求和
|
const sumNum = (list, field) => {
|
let count = 0
|
list.forEach(item => {
|
count += Number(item[field])
|
})
|
return count.toFixed(2)
|
}
|
|
|
|
const optionVal = ref('')
|
|
//班次
|
const classesVal = ref(t('reportingWorks.early'))
|
const classesOption = [
|
{
|
value: t('reportingWorks.early'),
|
label: t('reportingWorks.early'),
|
},
|
{
|
value: t('reportingWorks.nightShift'),
|
label: t('reportingWorks.nightShift'),
|
},
|
]
|
|
|
const gridOptions = reactive({
|
border: "full",//表格加边框
|
keepSource: true,//保持源数据
|
align: 'center',//文字居中
|
stripe: true,//斑马纹
|
rowConfig: {isCurrent: true, isHover: true, height: 30},//鼠标移动或选择高亮
|
id: 'AddReportingWork_1',
|
showFooter: true,//显示脚
|
printConfig: {},
|
importConfig: {},
|
exportConfig: {},
|
scrollY: {enabled: true},//开启虚拟滚动
|
showOverflow: true,
|
columnConfig: {
|
resizable: true,
|
useKey: true
|
},
|
filterConfig: { //筛选配置项
|
// remote: true
|
},
|
customConfig: {
|
storage: true
|
},
|
mouseConfig:{selected: true},//鼠标选中
|
keyboardConfig:{
|
isArrow: true,
|
isDel: true,
|
isEnter: true,
|
isTab: true,
|
isEdit: true,
|
isChecked: true
|
},
|
editConfig: {
|
trigger: 'dblclick',
|
mode: 'row',
|
showStatus: true
|
},
|
menuConfig: {
|
body: {
|
//右键菜单
|
options: [
|
[
|
{
|
code: 'copyChecked',
|
name: t('basicData.selectSame'),
|
prefixIcon: 'vxe-icon-copy',
|
visible: true,
|
disabled: false
|
},
|
{
|
code: 'copyAll',
|
name: t('basicData.sameAfterwards'),
|
prefixIcon: 'vxe-icon-feedback',
|
visible: true,
|
disabled: false
|
},
|
{
|
code: 'clearChecked',
|
name: t('basicData.clearSelection'),
|
prefixIcon: 'vxe-icon-indicator',
|
visible: true,
|
disabled: false
|
},
|
{
|
code: 'SecondaryBreakage',
|
name: "序号次破相同",
|
prefixIcon: 'vxe-icon-indicator',
|
visible: true,
|
disabled: false
|
},
|
{
|
code: 'checkedBreakage',
|
name: "选中次破相同",
|
prefixIcon: 'vxe-icon-indicator',
|
visible: true,
|
disabled: false
|
},
|
]
|
]
|
}
|
},
|
//表头参数
|
columns: [
|
// {type:'expand',fixed:"left",slots: { content:'content' },width: 50},
|
{
|
field: 'order_number',
|
title: t('order.OrderNum'),
|
filters: [{data: ''}],
|
slots: {filter: 'num1_filter'},
|
filterMethod: filterChanged
|
},
|
{
|
field: 's01Value',
|
title: t('reportingWorks.glassNumber'),
|
filters: [{data: ''}],
|
slots: {filter: 'num1_filter'},
|
filterMethod: filterChanged
|
},
|
{
|
field: 'glass_child',
|
title: t('reportingWorks.glassChild'),
|
showOverflow: "ellipsis",
|
filters: [{data: ''}],
|
slots: {filter: 'num1_filter'},
|
filterMethod: filterChanged
|
},
|
{
|
field: 'technology_number',
|
title: t('processCard.technologyNumber'),
|
filters: [{data: ''}],
|
slots: {filter: 'num1_filter'},
|
filterMethod: filterChanged
|
},
|
{
|
field: 'glass_address',
|
title: t('reportingWorks.glassAddress'),
|
filters: [{data: ''}],
|
slots: {filter: 'num1_filter'},
|
filterMethod: filterChanged
|
},
|
{
|
field: 'quantity_card',
|
title: t('reportingWorks.numberProcessCards'),
|
filters: [{data: ''}],
|
slots: {filter: 'num1_filter'},
|
showOverflow: "ellipsis",
|
filterMethod: filterChanged
|
},
|
{
|
field: 'child_width',
|
title: t('order.width'),
|
filters: [{data: ''}],
|
slots: {filter: 'num1_filter'},
|
filterMethod: filterChanged
|
},
|
{
|
field: 'child_height',
|
title: t('order.height'),
|
filters: [{data: ''}],
|
slots: {filter: 'num1_filter'},
|
filterMethod: filterChanged
|
},
|
{
|
field: 'shape',
|
title: t('order.shape'),
|
filters: [{data: ''}],
|
slots: {filter: 'num1_filter'},
|
showOverflow: "ellipsis",
|
filterMethod: filterChanged
|
},
|
{field: 'quantity', title: t('reportingWorks.reportableQuantityOk'),},
|
{
|
field: 'completedQuantity', title: t('reportingWorks.completedQuantity'),width: 120,
|
editRender: {
|
name: 'input',
|
attrs: {placeholder: ''}
|
},
|
|
},
|
{
|
field: 'breakageQuantity', title: t('reportingWorks.quantityBroken'),
|
},
|
{field: 'completed', width: 90, title:t('reportingWorks.completed'),},
|
{field: 'onceBroken', width: 90, title: t('reportingWorks.onceBroken'),},
|
{
|
field: 'reviewed_state',
|
title: t('processCard.reviewedState'),
|
filters: [{data: ''}],
|
slots: {filter: 'num1_filter'},
|
filterMethod: filterChanged
|
},
|
|
],
|
//表单验证
|
editRules: {
|
completedQuantity: [
|
{
|
validator ({ row }) {
|
const regex = /^[0-9]\d*$/
|
const brokenNum =
|
(row.breakageQuantity === undefined || row.breakageQuantity===null) ? 0 : row.breakageQuantity
|
if (row.completedQuantity && !regex.test(row.completedQuantity)) {
|
return new Error(t('reportingWorks.enterIntegerGreaterThanEqualTo'))
|
}else if((row.completedQuantity*1+brokenNum*1)>row.quantity*1){
|
return new Error((`${row.completedQuantity}+${brokenNum}>${row.quantity}`))
|
}else if(row.quantity_card<row.completedQuantity){
|
return new Error(t('reportingWorks.pleaseNumber10'))
|
}
|
const completedNum =
|
(row.completedQuantity === undefined || row.completedQuantity===null || row.completedQuantity==='') ? 0 : row.completedQuantity
|
if(titleUploadData.value.reportingWorkId!=null && completedNum>row.minQuantity){
|
return new Error(`${t('reportingWorks.pleaseGreaterThanOrEqual1')}
|
${row.minQuantity}
|
${t('reportingWorks.pleaseGreaterThanOrEqual2')}`)
|
}
|
|
}
|
}
|
]
|
},
|
toolbarConfig: {//表头按钮
|
buttons: [
|
// {code: 'empty', name: '清空报工数量'},
|
// {code: 'sameCompletion', name: '完工相同'},
|
// {code: 'sameDamage', name: '次破相同'},
|
// {code: 'sameOneCompletion', name: '完工一列相同'},
|
// {code: 'sameOneDamage', name: '次破一列相同'},
|
{code: 'saveReportingWork', name: t('basicData.save'), status: 'primary', icon: 'vxe-icon-save',disabled:true},
|
{code: 'saveReportingWorkReview', name: t('reportingWorks.saveAndReview'), status: 'primary', icon: 'vxe-icon-save',disabled:true},
|
],
|
// import: false,
|
// export: true,
|
// print: true,
|
zoom: true,
|
custom: true
|
},
|
//脚部求和
|
footerMethod ({ columns, data }) {//页脚函数
|
return[
|
columns.map((column, columnIndex) => {
|
if (columnIndex === 0) {
|
return t('basicData.total')
|
}
|
const List = ["quantity_card",'quantity','completedQuantity','completed','onceBroken']
|
if (List.includes(column.field)) {
|
return footSum(data, column.field)
|
}
|
return ''
|
})
|
]
|
}
|
|
})
|
|
let brokenRow = ref({
|
glass_child:'',
|
order_number:'',
|
technology_number:''
|
|
})
|
const gridEvents = {
|
async toolbarButtonClick({code}) {
|
const $grid = xGrid.value
|
if ($grid) {
|
switch (code) {
|
case 'saveReportingWork': {//保存
|
const errMap = await $grid.validate(true)
|
if (errMap) {
|
ElMessage.error(t('basicData.msg.checkoutLose'))
|
return
|
}
|
saveReportingWork(0,'save')
|
break
|
}
|
case 'saveReportingWorkReview': {
|
const errMap = await $grid.validate(true)
|
if (errMap) {
|
ElMessage.error(t('basicData.msg.checkoutLose'))
|
return
|
}
|
saveReportingWork(1,'save')
|
break
|
}
|
case 'update': {//修改
|
//根据补片状态判断是否能修改
|
// request.post(`/reportingWork/getPatchCondition/${route.query.reportingWorkId}`).then(async (res) => {
|
// if (res.code == 200) {
|
// if (res.data > 0) {
|
// ElMessage.error("该报工包含已补片数据,不可修改!")
|
// return
|
// } else {
|
getQuantity()
|
const errMap = await $grid.validate(true)
|
if (errMap) {
|
ElMessage.error(t('basicData.msg.checkoutLose'))
|
return
|
}
|
saveReportingWork(0, 'update')
|
// }
|
// } else {
|
// ElMessage.warning(res.msg)
|
// }
|
// })
|
|
break
|
}
|
}
|
}
|
},
|
cellDblclick (params) {//表格内容双击打开产品界面
|
const { row } = params
|
brokenRow.value = row
|
if(brokenRow.value.damageDetails=== undefined){
|
brokenRow.value.damageDetails=[]
|
}
|
//brokenGrid.value.reloadData(brokenRow.damageDetail)
|
//改变brokenVisible的值触发openedBrokenTable()方法
|
const { rows, column, cell } = params; // 解构获取行、列和单元格信息
|
//点击次破数量时打开明细界面
|
if(column.field=="breakageQuantity"){
|
if (row.patchStatusOther!="已补片"){
|
brokenVisible.value = true
|
}
|
}
|
},
|
menuClick({menu, row, column}) {//右键菜单
|
const $grid = xGrid.value
|
if ($grid) {
|
switch (menu.code) {
|
case 'copyChecked' : {
|
let result = toolbarButtonClickEvent()
|
if (result.cell === "completedQuantity"){
|
if (result) {
|
const dataList = xGrid.value.getTableData().visibleData
|
const val = dataList[result.start][result.cell]
|
dataList.forEach((item, index) => {
|
if (index >= result.start && index <= result.end) {
|
item[result.cell] = val
|
}
|
})
|
}
|
}
|
|
break
|
}
|
case 'copyAll' : {
|
let result = toolbarButtonClickEvent()
|
if (result.cell === "completedQuantity" ) {
|
if (result) {
|
const dataList = xGrid.value.getTableData().visibleData
|
const val = dataList[result.start][result.cell]
|
dataList.forEach((item, index) => {
|
if (index >= result.start) {
|
item[result.cell] = val
|
}
|
})
|
}
|
}
|
break
|
}
|
case 'clearChecked' : {
|
let result = toolbarButtonClickEvent()
|
if (result.cell === "completedQuantity" ) {
|
if (result) {
|
const dataList = xGrid.value.getTableData().visibleData
|
dataList.forEach((item, index) => {
|
if (index >= result.start && index <= result.end) {
|
item[result.cell] = ''
|
}
|
})
|
}
|
}
|
break
|
}
|
case 'SecondaryBreakage' : {
|
let result = toolbarButtonClickEvent()
|
if (result.cell === "breakageQuantity" || result.cell === "completedQuantity"){
|
if (result) {
|
const dataList = xGrid.value.getTableData().visibleData
|
const seenOrders = {}
|
dataList.forEach((item, index) => {
|
const list = item.damageDetails
|
if (list!== null || list.length > 0){
|
const { order_number, damageDetails, breakageQuantity } = item;
|
// 如果 order_number 还没有处理过
|
if (!seenOrders[order_number]) {
|
// 记录第一个出现的 damageDetails 和 breakageQuantity
|
seenOrders[order_number] = {
|
damageDetails,
|
breakageQuantity
|
};
|
} else {
|
// 将后续的 damageDetails 和 breakageQuantity 更新为第一个的
|
item.damageDetails = seenOrders[order_number].damageDetails;
|
item.breakageQuantity = seenOrders[order_number].breakageQuantity;
|
}
|
}
|
|
})
|
}
|
}
|
break
|
}
|
case 'checkedBreakage' : {
|
let result = toolbarButtonClickEvent()
|
if (result.cell === "breakageQuantity" || result.cell === "completedQuantity"){
|
if (result) {
|
const dataList = xGrid.value.getTableData().visibleData
|
const val = dataList[result.start].damageDetails
|
const quantity = dataList[result.start].breakageQuantity
|
dataList.forEach((item, index) => {
|
if (index >= result.start && index <= result.end) {
|
item.damageDetails = val
|
item.breakageQuantity = quantity
|
if (index!=result.start){
|
item.completedQuantity = item.completedQuantity - quantity
|
}
|
|
}
|
})
|
}
|
}
|
break
|
}
|
}
|
}
|
},
|
}
|
|
|
|
const brokenGridOptions = reactive({
|
border: "full",//表格加边框
|
keepSource: true,//保持源数据
|
align: 'center',//文字居中
|
stripe: true,//斑马纹
|
rowConfig: {isCurrent: true, isHover: true, height: 30},//鼠标移动或选择高亮
|
id: 'AddReportingWork_2',
|
//showFooter: true,//显示脚
|
printConfig: {},
|
importConfig: {},
|
exportConfig: {},
|
//scrollY: {enabled: true},//开启虚拟滚动
|
showOverflow: true,
|
columnConfig: {
|
resizable: true,
|
useKey: true
|
},
|
filterConfig: { //筛选配置项
|
// remote: true
|
},
|
customConfig: {
|
storage: true
|
},
|
editConfig: {
|
trigger: 'click',
|
mode: 'row',
|
showStatus: true
|
},//表头参数
|
columns: [
|
{type: 'checkbox', fixed: "left", title: t('basicData.check'),width: 78},
|
{type: 'seq',fixed:"left", title: t('basicData.Number'), width: 80 },
|
// {
|
// field: 'order_number',
|
// title: '序号'
|
// },
|
|
{
|
field: 'breakageQuantity',
|
title: t('reportingWorks.quantityBroken'),
|
editRender: {name: 'input', attrs: {placeholder: ''}}
|
},
|
{field: 'available',
|
title: t('reportingWorks.available'),
|
slots: {default: 'available'}
|
},
|
{field: 'returnProcess', title: t('reportingWorks.returnProcess'),
|
editRender: {},
|
slots: {default: 'returnProcess_default', edit: 'returnProcess'}
|
},
|
{
|
field: 'breakageType', title: t('reportingWorks.breakageType'),
|
editRender: {},
|
slots: {default: 'breakageType_default', edit: 'breakageType'}
|
},
|
{
|
field: 'breakageReason', title: t('reportingWorks.breakageReason'),
|
editRender: {},
|
slots: {default: 'breakageReason_default', edit: 'breakageReason'}
|
},
|
{
|
field: 'responsibleProcess', title: t('reportingWorks.responsibleProcess'),
|
editRender: {},
|
slots: {default: 'responsibleProcess_default', edit: 'responsibleProcess'}
|
},
|
{
|
field: 'responsibleEquipment',
|
title: t('reportingWorks.responsibleEquipment'),
|
editRender: {},
|
slots: {default: 'reportingDeviceSort_default', edit: 'reportingDeviceSort'}
|
// editRender: {name: 'input', attrs: {placeholder: ''}}
|
},
|
|
{
|
field: 'responsibleTeam', title: t('reportingWorks.responsibleTeam'),
|
editRender: {},
|
slots: {default: 'responsibleTeam_default', edit: 'responsibleTeam'}
|
},
|
{
|
field: 'responsiblePersonnel',
|
title: '责任信息',
|
editRender: {name: 'input', attrs: {placeholder: ''}}
|
|
},
|
|
],
|
//表单验证
|
editRules: {
|
breakageQuantity: [
|
{
|
validator ({ cellValue }) {
|
const regex = /^[1-9]\d*$/
|
if (!regex.test(cellValue)) {
|
return new Error(t('reportingWorks.enterIntegerGreaterThan'))
|
}
|
}
|
}
|
],
|
returnProcess:[
|
{
|
validator ({ row }) {
|
const regex = /^\s*$/i
|
if(row.available===true && (regex.test(row.returnProcess)==='' || row.returnProcess===null)){
|
return new Error(t('reportingWorks.availableOkReturnProcess'))
|
}
|
}
|
}
|
],
|
breakageType: [
|
{ required: true, message: t('reportingWorks.selectBreakageType') }
|
],
|
breakageReason: [
|
{ required: true, message: t('reportingWorks.selectBreakageReason') }
|
],
|
responsibleProcess: [
|
{ required: true, message: t('reportingWorks.selectResponsibleProcess')}
|
],
|
responsibleEquipment: [
|
{ required: true, message: t('reportingWorks.selectResponsibleEquipment') }
|
],
|
responsibleTeam: [
|
{ required: true, message: t('reportingWorks.selectResponsibleTeam') }
|
],
|
},
|
toolbarConfig: {//表头按钮
|
buttons: [
|
{code: 'addRow', name: t('reportingWorks.increase'), status: 'primary', icon: 'vxe-icon-square-plus'},
|
{code: 'removeRow', name: t('basicData.delete'), status: 'primary', icon: 'vxe-icon-delete'},
|
],
|
// import: false,
|
// export: true,
|
// print: true,
|
zoom: true,
|
custom: true
|
},
|
})
|
const brokenGridEvents = {
|
toolbarButtonClick({code}) {
|
const $grid = brokenGrid.value
|
if ($grid) {
|
switch (code) {
|
case 'addRow': {
|
$grid.insertAt({})
|
break
|
}
|
case 'removeRow': {
|
const $grid = brokenGrid.value
|
const checkedList = $grid.getCheckboxRecords()
|
if(checkedList){
|
$grid.remove(checkedList)
|
}
|
break
|
}
|
}
|
}
|
}
|
}
|
const openedBrokenTable = () => {
|
//addListener(brokenGrid.value,brokenGridOptions)
|
let damage =ref(brokenRow.value.damageDetails)
|
brokenGrid.value.reloadData(damage.value)
|
}
|
|
|
const checkClose = async (done) => {
|
if(brokenGrid.value.getTableData().fullData.length===0){
|
brokenRow.value.breakageQuantity=null
|
brokenRow.value.completedQuantity = brokenRow.value.quantity
|
brokenRow.value.damageDetails=[]
|
done()
|
return true
|
}
|
const errMap = await brokenGrid.value.validate(true)
|
if (errMap) {
|
ElMessage.error(t('basicData.msg.checkoutLose'))
|
return false
|
}
|
let breakageQuantityCount = 0
|
brokenRow.value.breakageQuantity=0
|
brokenGrid.value.getTableData().fullData.forEach((row) =>{
|
breakageQuantityCount+=row.breakageQuantity*1
|
})
|
|
let reportingWorkNum = isNaN(brokenRow.value.completedQuantity*1)?0:brokenRow.value.completedQuantity*1
|
if((breakageQuantityCount>brokenRow.value.quantity*1) ){
|
ElMessage.warning(`${t('reportingWorks.lossCount1')}':'${breakageQuantityCount}
|
${t('reportingWorks.lossCount2')}${brokenRow.value.quantity*1}`)
|
return false
|
}
|
brokenRow.value.completedQuantity = brokenRow.value.quantity-breakageQuantityCount
|
breakageQuantityCount = breakageQuantityCount === 0 ? null : breakageQuantityCount
|
brokenRow.value.breakageQuantity = breakageQuantityCount
|
brokenRow.value.damageDetails=brokenGrid.value.getTableData().fullData
|
// xGrid.value.getTableData().fullData.forEach(
|
//
|
// )
|
const equalByOrderNum = xGrid.value.getTableData().fullData.filter((row) =>{
|
return row.order_number === brokenRow.value.order_number
|
})
|
const maxQuantity = Math.max(...equalByOrderNum.map(item =>item.breakageQuantity || 0))
|
let process = titleUploadData.value.thisProcess
|
let laminating = titleUploadData.value.laminating
|
equalByOrderNum.forEach((row) =>{
|
if (laminating != ''){
|
row.completedQuantity= brokenRow.value.quantity*1-maxQuantity
|
}
|
})
|
|
|
getQuantity()
|
|
done()
|
}
|
|
|
//第一次加载数据
|
let groupChangeProcess = ref(false)//用于本班组显示问题
|
const initTiltle = async () => {
|
await request.post(`/reportingWork/selectProcess/${user.user.userId}`).then((res) => {
|
if (res.code == 200) {
|
titleSelectJson.value.processType = res.data.process
|
if(user.user.address!==null && user.user.address!==''){
|
titleUploadData.value.thisProcess = user.user.address
|
titleUploadData.value.teamsGroupsName = user.user.userName
|
groupChangeProcess.value = true
|
if (user.user.address==='技术部多曲' || user.user.address==='夹胶'){
|
groupChangeProcess.value = false
|
}
|
gridOptions.toolbarConfig.buttons[1].visible=false
|
}
|
|
} else {
|
ElMessage.warning(res.msg)
|
}
|
})
|
}
|
|
|
function checkSameNumForId(data, targetId) {
|
// 初始化一个对象来存储遇到的id及其对应的num值
|
const idNums = {};
|
let firstNum = null;
|
|
for (const item of data) {
|
if (item.order_number === targetId) {
|
// 如果找到了目标id,检查num是否与第一个遇到的num相同
|
if (firstNum === null) {
|
// 如果是第一个遇到的,记录num值
|
firstNum = item.completedQuantity;
|
} else if (item.completedQuantity !== firstNum) {
|
// 如果num值与第一个遇到的num不同,返回false
|
return false;
|
}
|
}
|
}
|
|
// 如果遍历完数组后没有返回false,那么所有具有目标id的对象都具有相同的num值
|
return true;
|
}
|
|
|
|
|
|
|
const saveReportingWork = (state,saveType) => {
|
|
if(xGrid.value.getTableData().fullData.length===0){
|
ElMessage.warning(t('reportingWorks.selectProcessCardData'))
|
return
|
}
|
const device = titleUploadData.value.deviceName
|
if(device === null || device === undefined || device === ''){
|
ElMessage.error(t('reportingWorks.selectWorkReportingEquipment'))
|
return
|
}
|
const teamsGroupsName = titleUploadData.value.teamsGroupsName
|
if(teamsGroupsName === null || teamsGroupsName === undefined || teamsGroupsName === ''){
|
ElMessage.error(t('reportingWorks.selectWorkReportingTeam'))
|
return
|
}
|
|
const seenIds = {}
|
const uniqueByOrderNum = xGrid.value.getTableData().fullData.filter(item => {
|
// 检查item的id是否已经在seenIds中
|
if (!seenIds[item.order_number]) {
|
// 如果不在,添加它并返回true以保留这个对象
|
seenIds[item.order_number] = true;
|
return true;
|
}
|
// 如果已经在seenIds中,返回false以过滤掉这个对象
|
return false;
|
});
|
const notFinishList = xGrid.value.getTableData().fullData.filter(item =>{
|
return item.saveFlag === 0
|
})
|
let process = titleUploadData.value.thisProcess
|
//暂时取消
|
for(let item of uniqueByOrderNum){
|
if(!checkSameNumForId(notFinishList,item.order_number ) && (process=='夹胶' || process=='中空' || process=='包装' ||process=='打胶和粘框')){
|
ElMessage.error(`${t('reportingWorks.pleaseCheckTheOrderNumber1')}:
|
${item.order_number}
|
${t('reportingWorks.pleaseCheckTheOrderNumber1')}`)
|
return false
|
}
|
}
|
|
titleUploadData.value.creator = user.user.userName
|
titleUploadData.value.creatorId = user.user.userId
|
const requestDetailData = xGrid.value.getTableData().fullData.filter((row) => {
|
const a = (row.completedQuantity !== undefined && row.completedQuantity !== null && row.completedQuantity !== '' && row.completedQuantity*1!==0)
|
const b = (row.breakageQuantity !== undefined && row.breakageQuantity !== null && row.breakageQuantity !== '' && row.breakageQuantity*1!==0)
|
return (a || b)
|
})
|
if(requestDetailData.length === 0 && (route.query.reportingWorkId===undefined)){
|
ElMessage.warning(t('reportingWorks.atLeastOneFinishedAndWornEligible'))
|
return false
|
}
|
let status=company.qualityInsStatus
|
const requestData = {
|
title:titleUploadData.value,
|
detail:xGrid.value.getTableData().fullData,
|
type:state,//审核状态
|
userId:user.user.userId,
|
userName:user.user.userName,
|
qualityInsStatus:status
|
}
|
gridOptions.toolbarConfig.buttons[0].disabled=true
|
gridOptions.toolbarConfig.buttons[1].disabled=true
|
//判断保存还是修改
|
if(saveType==='save'){
|
saveReportingWorkRequest(requestData)
|
}else{
|
updateReportingWorkRequest(requestData)
|
}
|
|
}
|
|
const saveReportingWorkRequest = (requestData) =>{
|
request.post(`/reportingWork/saveReportingWork`,requestData).then(res =>{
|
if (res.code == 200){
|
ElMessage.success(t('reportingWorks.successfulJobApplication'))
|
router.push({path:'/main/reportingWorks/AddReportingWork',query:{processId:titleUploadData.value.processId,random:Math.random()}})
|
}else{
|
const errorObj = JSON.parse(res.msg)
|
const msg = t('reportingWorks.pleaseNumber1')+":"+errorObj.orderNumber+'\n'
|
+t('reportingWorks.pleaseNumber2')+':'+errorObj.technologyNumber+'\n'
|
+t('reportingWorks.pleaseNumber3')+':'+errorObj.processNum+'<'+
|
+t('reportingWorks.pleaseNumber4')+':'+errorObj.sumNum+'\n'
|
+t('reportingWorks.pleaseNumber5')
|
|
ElMessage.error(msg)
|
}
|
}).catch(err =>{
|
ElMessage.error('提交失败,请刷新后重试')
|
}).finally(()=>{
|
|
gridOptions.toolbarConfig.buttons[0].disabled=false
|
gridOptions.toolbarConfig.buttons[1].disabled=false
|
})
|
}
|
|
//更新报工数据
|
const updateReportingWorkRequest = (requestData) =>{
|
let reviewState = 'update'
|
if(route.query.reviewStatus==="1"){
|
reviewState = 'review'
|
}
|
request.post(`/reportingWork/updateReportingWork/${reviewState}`,requestData).then(res =>{
|
if (res.code == 200 && res.data===true){
|
ElMessage.success(t('reportingWorks.successfulModificationOfWorkApplication'))
|
router.push({path:'/main/reportingWorks/AddReportingWork',
|
query:{
|
processId:titleUploadData.value.processId,
|
random:Math.random()}
|
})
|
} else {
|
ElMessage.warning(t('reportingWorks.changeFailed'))
|
}
|
})
|
}
|
|
|
//查询责任设备
|
const computedDevice = computed((responsibleProcess) => {
|
return function (responsibleProcess){
|
return titleSelectJson.value.historyDevice.filter((item) => {
|
return item.basic_category === responsibleProcess
|
})
|
}
|
})
|
// 查询责任班组
|
const computedResponsibleTeam = computed((responsibleProcess) => {
|
titleSelectJson.value.historyTeams.push({basic_name: user.user.userName, process: titleUploadData.value.thisProcess, basic_type: 'teamsgroups', basic_category: 179, id: 555})
|
return function (responsibleProcess){
|
return titleSelectJson.value.historyTeams.filter((item) => {
|
return item.process === responsibleProcess
|
})
|
}
|
})
|
|
//判断是否点击可利用 显示返回工序
|
const computedReturnProcess = computed((available) => {
|
return function (available){
|
if(available){
|
return titleSelectJson.value.historyProcess
|
}
|
}
|
})
|
|
let loadingFlag = ref(false)
|
let disabledFlag = ref(true)
|
const reviewReportingWork = () => {
|
const processId = titleUploadData.value.processId
|
if (processId.indexOf("/") < 0) {
|
ElMessage.warning(t('reportingWorks.correctFormatProcessCard'))
|
return
|
}
|
let indexOfChar = processId.indexOf("/")
|
let leftString = processId.slice(0, indexOfChar)
|
if (leftString.length < 14) {
|
ElMessage.warning(t('reportingWorks.processCardCorrectNumberDigits'))
|
return
|
}
|
//工序
|
let process = titleUploadData.value.thisProcess
|
if (process === "" || process == null) {
|
ElMessage.warning(t('reportingWorks.selectProcess'))
|
return
|
}
|
if(titleUploadData.value.previousProcess===''){
|
ElMessage.warning(t('reportingWorks.firstProcessNotReview'))
|
return
|
}
|
//匹配“/”前后字符串
|
const regex = /([^\/]+)\/([^\/]+)/;
|
//查找匹配的字符串
|
const result = processId.match(regex);
|
//流程卡号
|
let processIdStr = result[1];
|
//层号
|
let technologyStr = result[2];
|
const reportWork = {
|
process: titleUploadData.value.previousProcess,
|
processId:processId,
|
thisProcess:titleUploadData.value.thisProcess,
|
technologyStr:technologyStr,
|
userName:user.user.userName
|
}
|
loadingFlag.value= true
|
request.post("/reportingWork/reviewReportingWork",reportWork).then((res) =>{
|
if(res.code === '200'){
|
ElMessage.success(t('basicData.msg.ReviewSuccess'))
|
router.push({path:'/main/reportingWorks/AddReportingWork',
|
query:{
|
processId:titleUploadData.value.processId,
|
reviewStatus:1,
|
random:Math.random()
|
}
|
})
|
}
|
}).finally(
|
loadingFlag.value= false
|
)
|
|
}
|
|
|
//下拉款选择工序时查询
|
const getWork = () => {
|
|
let processId = titleUploadData.value.processId
|
if (processId == "" || processId == null) {
|
ElMessage.warning(t('reportingWorks.theProcessCardNumberCannotBeEmpty'))
|
return
|
}
|
let parts = processId.split('/');
|
|
if (processId.indexOf("/") < 0 ||parts[1].trim() == '') {
|
ElMessage.warning(t('reportingWorks.correctFormatProcessCard'))
|
return
|
}
|
let indexOfChar = processId.indexOf("/")
|
let leftString = processId.slice(0, indexOfChar)
|
if (leftString.length < 14) {
|
ElMessage.warning(t('reportingWorks.processCardCorrectNumberDigits'))
|
return
|
}
|
//工序
|
let process = titleUploadData.value.thisProcess
|
if (process == "" || process == null) {
|
ElMessage.warning(t('reportingWorks.selectProcess'))
|
return
|
}
|
if (titleSelectJson.value.thisProcessType.length!=0){
|
if (titleSelectJson.value.thisProcessType.indexOf(process) === -1 && process !== t('machine.cutting')) {
|
ElMessage.warning(t('reportingWorks.thisProcessNotProcessCard'))
|
return
|
}
|
}
|
|
//匹配“/”前后字符串
|
const regex = /([^\/]+)\/([^\/]+)/;
|
//查找匹配的字符串
|
const result = processId.match(regex);
|
//流程卡号
|
let processIdStr = result[1];
|
//层号
|
let technologyStr = result[2];
|
|
let reportType= company.reportType
|
request.post(`/reportingWork/addSelectLastWork/${processIdStr}/${technologyStr}/${process}/${reportType}`).then((res) => {
|
if (res.code == 200) {
|
if(res.data.data==null){
|
ElMessage.error(t('reportingWorks.noDataThisProcessCard'))
|
return
|
}
|
technologicalProcess=res.data.technologicalProcess
|
//表头赋值
|
titleUploadData.value = res.data.data
|
titleUploadData.value.processId = processId
|
titleUploadData.value.teamsGroupsName = user.user.userName
|
titleUploadData.value.laminating = res.data.laminating
|
//设备下拉框
|
titleSelectJson.value.deviceType = res.data.device
|
//班组下拉框
|
//titleSelectJson.value.teamsType = res.data.teams
|
//当前流程卡工序
|
titleSelectJson.value.thisProcessType = res.data.thisProcess
|
//历史班组
|
titleSelectJson.value.historyTeams= res.data.historyTeams
|
//历史设备
|
titleSelectJson.value.historyDevice = res.data.historyDevice
|
//历史工序
|
titleSelectJson.value.historyProcess = res.data.historyProcess
|
//次破类型
|
titleSelectJson.value.breakageType = res.data.breakageType
|
//次破原因
|
titleSelectJson.value.breakageReason = res.data.breakageReason
|
if(titleUploadData.value.reviewedState==1){
|
gridOptions.toolbarConfig.buttons[0].disabled=false
|
gridOptions.toolbarConfig.buttons[1].disabled=false
|
disabledFlag.value=true
|
}else {
|
gridOptions.toolbarConfig.buttons[0].disabled=true
|
gridOptions.toolbarConfig.buttons[1].disabled=true
|
disabledFlag.value=false
|
}
|
|
//判断早晚班
|
titleUploadData.value.classes=t('reportingWorks.early')
|
titleUploadData.value.reportingWorkTime = formatCurrentTime()
|
|
//处理编号列
|
//定义存放编号数组
|
const s01Values = [];
|
for (let i = 0; i < res.data.Detail.length; i++) {
|
const s01Values = [];
|
// 遍历 detailList 数组,提取 S01 值到 s01Values 数组
|
if (res.data.Detail[i].other_columns!=null|| res.data.Detail[i].other_columns!=undefined){
|
res.data.Detail.forEach(element => {
|
const otherColumnsObject = JSON.parse(element.other_columns);
|
const s01Value = otherColumnsObject.S01;
|
s01Values.push(s01Value || ''); // 如果 S01 值为空,添加空字符串或者其他默认值
|
});
|
|
// 将 s01Values 中的值赋给每个订单详情对象的 s01Value 属性
|
res.data.Detail.forEach((detail, index) => {
|
detail.s01Value = index < s01Values.length ? s01Values[index] : ''; // 赋值给 s01Value 属性
|
});
|
}
|
|
}
|
|
|
//绑定下方表格
|
detail.value = res.data.Detail
|
// 使用map方法来处理每个对象
|
let modifiedCollection = detail.value.map(item => {
|
if (item.reviewed_state === 1) {
|
return { ...item, reviewed_state: "已审核" };
|
}
|
else if (item.reviewed_state === 0) {
|
return { ...item, reviewed_state: "未审核" };
|
}
|
else {
|
// 其他情况保持不变
|
return item;
|
}
|
});
|
xGrid.value.reloadData(modifiedCollection)
|
} else {
|
ElMessage.warning(res.msg)
|
}
|
})
|
}
|
|
//判断完工次破数量是否满足条件
|
const verifyNum = () => {
|
const $grid = xGrid.value
|
const table = $grid.getTableData().fullData
|
let sum = 0;
|
let sumBreak = 0;
|
table.forEach((item) => {
|
if (item.completedQuantity == null || item.completedQuantity == "") {
|
item.completedQuantity = 0;
|
}
|
if (item.breakageQuantity == null || item.breakageQuantity == "") {
|
item.breakageQuantity = 0;
|
}
|
|
if (item.quantity < item.completedQuantity) {
|
ElMessage.success(t('reportingWorks.pleaseNumber6') + item.order_number + t('reportingWorks.pleaseNumber7'))
|
|
|
} else if (item.breakageQuantity * 1 + item.completedQuantity * 1 > item.quantity * 1) {
|
ElMessage.success(t('reportingWorks.pleaseNumber8') + item.order_number + t('reportingWorks.pleaseNumber9'))
|
}
|
|
sum = item.completedQuantity * 1 + sum * 1
|
|
sumBreak = item.breakageQuantity * 1 + sumBreak * 1
|
|
})
|
titleUploadData.value.thisCompletedQuantity = sum
|
titleUploadData.value.thisWornQuantity = sumBreak
|
}
|
|
//获取当前时间
|
function formatCurrentTime() {
|
let dateObj = new Date(); // 创建一个表示当前时间的Date对象
|
let year = dateObj.getFullYear(); // 年份
|
let month = (dateObj.getMonth() + 1).toString().padStart(2, '0'); // 月份(注意需要加上1)
|
let day = dateObj.getDate().toString().padStart(2, '0'); // 天数
|
let hours = dateObj.getHours().toString().padStart(2, '0'); // 小时
|
let minutes = dateObj.getMinutes().toString().padStart(2, '0'); // 分钟
|
let seconds = dateObj.getSeconds().toString().padStart(2, '0'); // 秒数
|
if(parseInt(hours)>=17 && parseInt(hours)<8)titleUploadData.value.classes=t('reportingWorks.nightShift')
|
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; // 返回格式化后的时间字符串
|
}
|
|
const editClosedEvent = ({ row, column }) => {
|
let process = titleUploadData.value.thisProcess
|
let laminating = titleUploadData.value.laminating
|
if (column.property==='completedQuantity') {
|
xGrid.value.getTableData().fullData.forEach((item, index) =>{
|
if(item.order_number===row.order_number && laminating != ''){
|
item.completedQuantity=row.completedQuantity
|
}
|
})
|
getQuantity()
|
}
|
}
|
const getQuantity = () => {
|
titleUploadData.value.thisCompletedQuantity = 0
|
titleUploadData.value.thisWornQuantity = 0
|
let laminating = titleUploadData.value.laminating
|
const arr = xGrid.value.getTableData().fullData
|
//根据是否合片工序过滤
|
const returnArr =
|
laminating != ""
|
? arr.filter((obj, index, self) =>
|
self.findIndex((t) => t.order_number === obj.order_number) === index
|
)
|
: arr;
|
let sumBreak = 0
|
let sumQuantity = 0
|
returnArr.forEach((item)=>{
|
sumQuantity+=Number(item.completedQuantity*1)
|
})
|
arr.forEach((item)=>{
|
sumBreak+=Number(item.breakageQuantity) || 0
|
})
|
titleUploadData.value.thisCompletedQuantity = sumQuantity
|
titleUploadData.value.thisWornQuantity = sumBreak
|
}
|
|
const changeTable=()=>{
|
const $grid = xGrid.value
|
this.$grid.commitProxy('data', yourData)
|
}
|
onMounted(() => {
|
window.addEventListener('keypress', qrcodeScanner);
|
addListener(xGrid.value, gridOptions)
|
})
|
|
// 在组件卸载时移除键盘事件监听
|
onUnmounted(() => {
|
window.removeEventListener('keypress', qrcodeScanner);
|
})
|
|
let code = '';
|
let codeArr = [];
|
let lastTime,nextTime = ''
|
let lastCode,nextCode = ''
|
const qrcodeScanner = (e) =>{
|
|
nextCode = e.key;
|
|
|
// 当前触发时间
|
nextTime = new Date().getTime();
|
// 第一次获取
|
if(!lastTime && !lastCode && e.key !== 'Enter'){
|
codeArr = []
|
codeArr.push(e.key)
|
}
|
|
if(lastCode && lastTime && (nextTime - lastTime > 50)){
|
// 相隔时间大于30 说明不是扫码枪扫描的 清空重新
|
codeArr = []
|
// 当扫码前有keypress事件时,防止首字缺失
|
} else if(lastCode && lastTime && e.key !== 'Enter'){
|
codeArr.push(e.key)
|
}
|
lastCode = nextCode
|
lastTime = nextTime
|
// 扫描结束
|
if(e.keyCode === 13){
|
// 可进行下一步操作
|
/* 下一步操作 */
|
if(codeArr.length!==0){
|
titleUploadData.value.processId = codeArr.join('')
|
}
|
if(user.user.address!==null || user.user.address!==''){
|
getWork()
|
}
|
|
codeArr=[]
|
lastTime = ''
|
nextTime = ''
|
lastCode = ''
|
nextCode = ''
|
}
|
|
}
|
|
|
const cellClassName = ({ row, column }) => {
|
if (column.field === 'breakageQuantity') {
|
return 'col-red'
|
}
|
|
}
|
const changeRowClass = ({ row, rowIndex, $rowIndex }) => {
|
return row?.rowClass
|
|
}
|
const editConfigDisable = reactive({
|
trigger: 'click',
|
mode: 'cell',
|
beforeEditMethod ({ row }) {
|
if (row.patchStatusOther === '已补片') {
|
return false
|
}
|
return true
|
}
|
})
|
|
</script>
|
|
<template>
|
<div style="width: 100%;height: 100%">
|
<div class="head">
|
<el-input :disabled="inputDisabled" v-if="titleUploadData.reportingWorkId" v-model="titleUploadData.reportingWorkId" :placeholder="$t('reportingWorks.reportingWorkId')" style="width: 200px" />
|
<el-input :disabled="inputDisabled" v-model="titleUploadData.processId" :placeholder="$t('processCard.processId')" style="width: 200px" @keyup.enter.native="getWork();getQuantity()"/>
|
|
<el-select :disabled="inputDisabled || groupChangeProcess"
|
v-model="titleUploadData.thisProcess"
|
clearable
|
:placeholder="$t('reportingWorks.selectProcess')"
|
style="width: 120px"
|
@change="getWork();getQuantity()">
|
<el-option
|
v-for="item in titleSelectJson['processType']"
|
:key="item.id"
|
:label="item.basic_name"
|
:value="item.basic_name"
|
/>
|
</el-select>
|
|
<el-button :disabled="disabledFlag" :loading="loadingFlag" @click="reviewReportingWork" type="primary">{{$t('reportingWorks.passAudit')}}
|
</el-button>
|
<!-- <el-button type="primary">审核不通过</el-button>-->
|
|
<label>{{technologicalProcess}}</label>
|
</div>
|
<div class="head1">
|
<el-row>
|
<el-col :span="2">
|
<el-text>{{$t('order.orderId')}}:</el-text>
|
</el-col>
|
<el-col :span="3">
|
<el-text>{{ titleUploadData.orderId }}</el-text>
|
</el-col>
|
<el-col :span="2">
|
<el-text>{{$t('workOrder.productionId')}}:</el-text>
|
</el-col>
|
<el-col :span="3">
|
<el-text>{{ titleUploadData.productionId }}</el-text>
|
</el-col>
|
<el-col :span="2">
|
<el-text>{{$t('processCard.customerId')}}:</el-text>
|
</el-col>
|
<el-col :span="2">
|
<el-text>{{ titleUploadData.order.customerId }}</el-text>
|
</el-col>
|
<el-col :span="2">
|
<el-text>{{$t('processCard.customerName')}}:</el-text>
|
</el-col>
|
<el-col :span="3">
|
<el-text class="customClass"></el-text>
|
</el-col>
|
<el-col :span="2">
|
<el-text >{{$t('order.project')}}:</el-text>
|
</el-col>
|
<el-col :span="3">
|
<el-input :readonly="true" v-model="titleUploadData.order.project"/>
|
<!-- <el-text style="white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">{{ titleUploadData.order.project }}</el-text>-->
|
</el-col>
|
|
</el-row>
|
<el-row>
|
<el-col :span="2">
|
<el-text>{{$t('reportingWorks.deviceType')}}:</el-text>
|
</el-col>
|
<el-col :span="3">
|
<el-select @change="getQuantity" v-model="titleUploadData.deviceName" clearable :placeholder="$t('reportingWorks.pleaseDevice')">
|
<el-option
|
v-for="item in titleSelectJson['deviceType']"
|
:key="item.id"
|
:label="item.basicName"
|
:value="item.basicName"
|
/>
|
</el-select>
|
</el-col>
|
<el-col :span="2">
|
<el-text>{{$t('reportingWorks.previousProcess')}}:</el-text>
|
</el-col>
|
<el-col :span="3">
|
|
<el-text>{{ titleUploadData.previousProcess }}</el-text>
|
</el-col>
|
<el-col :span="2">
|
<el-text>{{$t('reportingWorks.numberReported')}}:</el-text>
|
</el-col>
|
<el-col :span="2">
|
<el-text>{{ titleUploadData.previousProcessQuantity }}</el-text>
|
|
</el-col>
|
<el-col :span="2">
|
<el-text>{{$t('reportingWorks.thisCompletedQuantity')}}:</el-text>
|
</el-col>
|
<el-col :span="3">
|
<el-text>{{ titleUploadData.thisCompletedQuantity }}</el-text>
|
</el-col>
|
<el-col :span="2">
|
<el-text>{{$t('reportingWorks.thisWornQuantity')}}:</el-text>
|
</el-col>
|
<el-col :span="3">
|
<el-text>{{ titleUploadData.thisWornQuantity }}</el-text>
|
</el-col>
|
|
</el-row>
|
<el-row>
|
<el-col :span="2">
|
<el-text>{{$t('reportingWorks.teamsType')}}:</el-text>
|
</el-col>
|
<el-col :span="3">
|
<el-select :disabled="groupChangeProcess"
|
v-model="titleUploadData.teamsGroupsName"
|
clearable
|
:placeholder="$t('reportingWorks.selectTeam')">
|
<el-option
|
v-for="item in titleSelectJson['teamsType']"
|
:key="item.id"
|
:label="item.basicName"
|
:value="item.basicName"
|
/>
|
</el-select>
|
</el-col>
|
<el-col :span="2">
|
<el-text>{{$t('reportingWorks.classes')}}:</el-text>
|
</el-col>
|
<el-col :span="3">
|
<el-select v-model="titleUploadData.classes" class="processesSt" :placeholder="$t('reportingWorks.selectClasses')">
|
<el-option
|
v-for="item in classesOption"
|
:key="item.value"
|
:label="item.label"
|
:value="item.value"
|
/>
|
</el-select>
|
</el-col>
|
<el-col :span="2">
|
<el-text>{{$t('reportingWorks.nextProcess')}}:</el-text>
|
</el-col>
|
<el-col :span="2">
|
<el-text>{{ titleUploadData.nextProcess }}</el-text>
|
|
</el-col>
|
<el-col :span="2">
|
<el-text>{{$t('reportingWorks.reportingWorkTime')}}:</el-text>
|
</el-col>
|
<el-col :span="3">
|
<el-date-picker
|
v-model="titleUploadData.reportingWorkTime"
|
format="YYYY-MM-DD HH:mm:ss"
|
value-format="YYYY-MM-DD HH:mm:ss"
|
placeholder=""
|
style="width: 100%"
|
type="datetime"
|
/>
|
</el-col>
|
<el-col :span="2">
|
<el-text>{{$t('basicData.remarks')}}:</el-text>
|
</el-col>
|
<el-col :span="3">
|
<el-input v-model="titleUploadData.notes" placeholder="" />
|
</el-col>
|
|
</el-row>
|
</div>
|
<div class="main-table">
|
<vxe-grid
|
ref="xGrid"
|
class="mytable-scrollbar"
|
:row-class-name="changeRowClass"
|
height="100%"
|
size="small"
|
v-bind="gridOptions"
|
v-on="gridEvents"
|
@edit-closed="editClosedEvent"
|
:cell-class-name="cellClassName"
|
:edit-config="editConfigDisable"
|
|
>
|
|
|
<template #num1_filter="{ column, $panel }">
|
<div>
|
<div v-for="(option, index) in column.filters" :key="index">
|
<input v-model="option.data" type="type"
|
@keyup.enter.native="$panel.confirmFilter()"
|
@input="changeFilterEvent($event, option, $panel)"/>
|
</div>
|
</div>
|
</template>
|
|
|
</vxe-grid>
|
</div>
|
<el-dialog
|
@opened="openedBrokenTable"
|
:before-close="checkClose"
|
v-model="brokenVisible"
|
:close-on-click-modal="false"
|
:close-on-press-escape="false"
|
:title="$t('reportingWorks.damageList')+':'
|
+brokenRow.glass_child+'.'+brokenRow.order_number+'.'+brokenRow.technology_number"
|
style="width: 80%;height:75% ">
|
<vxe-grid
|
|
height="400px"
|
ref="brokenGrid"
|
class="mytable-scrollbar"
|
v-bind="brokenGridOptions"
|
v-on="brokenGridEvents">
|
<!-- 返回工序-->
|
<template #returnProcess="{ row }">
|
<vxe-select v-model="row.returnProcess"
|
filterable
|
clearable
|
placeholder="" >
|
<vxe-option v-for="item in computedReturnProcess(row.available)"
|
:key="item.basic_category"
|
:label="item.basic_category"
|
:value="item.basic_category"/>
|
</vxe-select>
|
</template>
|
<template #returnProcess_default="{ row }">
|
<span>{{ row.returnProcess }}</span>
|
</template>
|
|
<!-- 责任工序-->
|
<template #responsibleProcess="{ row }">
|
<vxe-select v-model="row.responsibleProcess"
|
filterable
|
clearable
|
placeholder="" >
|
<vxe-option v-for="item in titleSelectJson.historyProcess"
|
:key="item.basic_category"
|
:label="item.basic_category"
|
:value="item.basic_category"/>
|
</vxe-select>
|
</template>
|
<template #responsibleProcess_default="{ row }">
|
<span>{{ row.responsibleProcess }}</span>
|
</template>
|
<!-- 刺破类型breakageType -->
|
<template #breakageType="{ row }">
|
<vxe-select v-model="row.breakageType "
|
clearable placeholder=" " allow-create filterable>
|
<vxe-option v-for="item in titleSelectJson.breakageType" :key="item.id" :label="item.basic_name" :value="item.basic_name"/>
|
</vxe-select>
|
</template>
|
<template #breakageType_default="{ row }">
|
<span>{{ row.breakageType }}</span>
|
</template>
|
|
<!--次破原因-->
|
<template #breakageReason="{ row }">
|
<vxe-select v-model="row.breakageReason "
|
clearable placeholder=" " allow-create filterable>
|
<vxe-option v-for="item in titleSelectJson.breakageReason" :key="item.id" :label="item.basic_name" :value="item.basic_name"/>
|
</vxe-select>
|
</template>
|
<template #breakageReason_default="{ row }">
|
<span>{{ row.breakageReason }}</span>
|
</template>
|
|
|
|
<!-- 责任设备 -->
|
<template #reportingDeviceSort="{ row }">
|
<vxe-select v-model="row.responsibleEquipment"
|
filterable
|
clearable
|
placeholder="">
|
<vxe-option v-for="item in computedDevice(row.responsibleProcess)" :key="item.id" :label="item.basic_name" :value="item.basic_name"/>
|
</vxe-select>
|
</template>
|
<template #reportingDeviceSort_default="{ row }">
|
<span>{{ row.responsibleEquipment }}</span>
|
</template>
|
|
<!-- 责任设备 -->
|
<template #responsibleTeam="{ row }">
|
<vxe-select v-model="row.responsibleTeam"
|
filterable
|
clearable
|
placeholder="">
|
<vxe-option v-for="item in computedResponsibleTeam(row.responsibleProcess)" :key="item.id" :label="item.basic_name" :value="item.basic_name"/>
|
</vxe-select>
|
</template>
|
<template #responsibleTeam_default="{ row }">
|
<span>{{ row.responsibleTeam }}</span>
|
</template>
|
<!-- 可利用 -->
|
<template #available="{ row }">
|
<el-checkbox v-model="row.available" />
|
</template>
|
|
</vxe-grid>
|
</el-dialog>
|
</div>
|
</template>
|
|
<style scoped>
|
.head{
|
width: 100%;
|
height: 35px;
|
}
|
.head1{
|
width: 100%;
|
height: 105px;
|
background-color: white;
|
}
|
|
.main-table{
|
width: 100%;
|
height: calc(100% - 135px);
|
}
|
|
.processCard {
|
width: 140px;
|
}
|
|
.processesSt {
|
height: 33px;
|
width: 120px;
|
background-color: #409eff;
|
color: white;
|
border: none;
|
border-radius: 5px;
|
}
|
|
#titleTable tr, #titleTable td {
|
border: 1px solid #000;
|
}
|
|
#titleTable {
|
border-collapse: collapse;
|
text-align: center;
|
width: 100%;
|
height: 100%;
|
}
|
|
#titleTable td {
|
width: 100px;
|
height: 30px;
|
}
|
|
#titleTable td:nth-child(1) {
|
width: 100px;
|
height: 30px;
|
}
|
|
#titleTable td:nth-child(2) {
|
width: 100px;
|
}
|
|
.chaxun {
|
background-color: #D5EAFF;
|
border: none;
|
}
|
|
.customClass {
|
white-space: nowrap; /* 不换行 */
|
}
|
|
.el-text {
|
|
}
|
|
.el-col .el-select {
|
width: 100%;
|
height: 100%;
|
}
|
|
.el-col {
|
text-align: center;
|
border: #181818 1px solid;
|
}
|
.vxe-grid {
|
/* 禁用浏览器默认选中 */
|
-webkit-user-select: none;
|
-moz-user-select: none;
|
-ms-user-select: none;
|
user-select: none;
|
}
|
|
::v-deep(.mytable-scrollbar .col-red) {
|
background-color: rgb(66,159,254);
|
color: #fff;
|
}
|
|
|
::v-deep(.latter) {
|
//display: none;
|
}
|
</style>
|