Merge branch 'master' of http://bore.pub:10439/r/ERP_override
| | |
| | | export default { |
| | | serverUrl:"localhost:8086" |
| | | //serverUrl:"10.153.19.150:8080" |
| | | //serverUrl:"192.168.1.199:8086" |
| | | } |
| | |
| | | import deepClone from "@/utils/deepClone"; |
| | | import {ElMessage} from "element-plus"; |
| | | import * as XLSX from "xlsx"; |
| | | import {useI18n} from "vue-i18n"; |
| | | |
| | | const { t } = useI18n() |
| | | const xGrid = ref() |
| | | let filterData = ref({}) |
| | | const gridOptions = reactive({ |
| | |
| | | startDate:'开始时间', |
| | | endDate:'结束时间', |
| | | reportData:'报表日期', |
| | | |
| | | confirmButtonText: '确认', |
| | | cancelButtonText: '取消', |
| | | creationTime:'创建时间', |
| | | insert: '新增', |
| | | update:'修改', |
| | | number:'序号', |
| | | otherAmounts:'其他金额', |
| | | errorSettlementArea:'误差结算面积', |
| | | sizeReview:'尺寸审核', |
| | | reportForms:'报表', |
| | | print:'打印', |
| | | msg:{ |
| | | max255:"最多输入255个字符", |
| | | range99999Dec2: |
| | |
| | | saveSuccess:'保存成功', |
| | | saveFail:'保存失败', |
| | | cancelReviewSuccess:'反审成功', |
| | | ReviewSuccess:'审核成功' |
| | | ReviewSuccess:'审核成功', |
| | | ServerConnectionError:'服务器连接错误', |
| | | deleteSuccess:'删除成功', |
| | | deleteFail:'删除失败', |
| | | reviewFail:'审核失败', |
| | | noProductDataInTheTable:'表格中无产品数据', |
| | | tableDataExceedsMaximumLimit:'表格数据超过最大限制', |
| | | |
| | | |
| | | } |
| | | }, |
| | | product:{ |
| | | ProductHomePage:'产品首页', |
| | | create:'创建', |
| | | ProductHomePage:'产品首页', |
| | | create:'创建', |
| | | coloredGlaze:'彩釉', |
| | | frostedSand:'蒙砂', |
| | | coating:'镀膜', |
| | | filmApplication:'贴膜', |
| | | sandblasting:'喷砂', |
| | | edgeGrinding:'磨边', |
| | | productName:'名称', |
| | | typeName:'所属类别', |
| | | query:'快速查询', |
| | | creator:'创建人', |
| | | msg:{ |
| | | productLength:'请添加产品详情', |
| | | lastGlass:'产品详情最后一条不是玻璃,请完善', |
| | |
| | | create:'创建', |
| | | review:'审核', |
| | | cancelReview:'反审', |
| | | theProductHasBeenReviewedAndCannotBeDeleted:'产品已审核,无法删除', |
| | | } |
| | | |
| | | |
| | |
| | | trueArea:'实际单片面积', |
| | | trueGrossArea:'实际总面积', |
| | | computeArea:'结算单片面积', |
| | | computeGrossArea:'计算总面积', |
| | | computeGrossArea:'结算总面积', |
| | | shape:'形状', |
| | | bendRadius:'弯钢弧度', |
| | | edgingType:'磨边类型', |
| | | import:'导入', |
| | | template:'模板', |
| | | |
| | | universalShape:'普形', |
| | | alien:'异形', |
| | | areaAmountPerPiece:'面积金额(单片)', |
| | | areaAmountAge:'面积金额(总面积)', |
| | | errorValue:'误差值', |
| | | orderDetailsSummary:'订单明细汇总', |
| | | details:'详情', |
| | | workmanship:'工艺', |
| | | processCard:'流程卡', |
| | | processingNotes:'主加工要求', |
| | | perimeter:'周长', |
| | | grossArea:'总面积', |
| | | creator:'制单员', |
| | | totalThickness:'厚度', |
| | | levelOne:'产品大类', |
| | | levelTwo:'产品小类', |
| | | orderDetailsReport:'订单明细报表', |
| | | orderDetailsSummaryReport:'订单明细汇总报表', |
| | | floorNumber:'楼层编号', |
| | | msg:{ |
| | | productCheck:'请选择产品', |
| | | tableLengthNot:'没有表格数据', |
| | |
| | | importMaxCheckFailLast:'条,请分订单导入', |
| | | updateAmountSuccessfully:'更新金额成功', |
| | | updateOrderState:'更新订单状态成功', |
| | | calculationAreaPrompt1:'存在', |
| | | calculationAreaPrompt2:'条结算单片面积小于', |
| | | calculationAreaPrompt3:'是否按照', |
| | | calculationAreaPrompt4:'计算', |
| | | } |
| | | |
| | | }, |
| | |
| | | newProcess:'流程', |
| | | reset:'重置', |
| | | sure:'确定', |
| | | // upperLeft:'左上', |
| | | // upperRight:'右上', |
| | | // lowLeft:'左下', |
| | | // lowRight:'右下', |
| | | // TrademarkAttribute:'商标参数', |
| | | // TrademarkOptions:'商标选项', |
| | | // xImage:'X轴镜像', |
| | | // yImage:'X轴镜像' |
| | | upperLeft:'左上', |
| | | upperRight:'右上', |
| | | lowLeft:'左下', |
| | | lowRight:'右下', |
| | | TrademarkAttribute:'商标参数', |
| | | TrademarkOptions:'商标选项', |
| | | xImage:'X轴镜像', |
| | | yImage:'y轴镜像', |
| | | modifyTrademark:'修改商标', |
| | | tag:'打标使能', |
| | | tag2:'二维码打印1', |
| | | tag3:'二维码打印2', |
| | | xMargin:'X轴边距', |
| | | yMargin:'Y轴边距', |
| | | location:'商标位置', |
| | | |
| | | }, |
| | | |
| | |
| | | unConverted:'未转', |
| | | deleteOk:'删除成功', |
| | | transferOrder:'转工单', |
| | | perimeter:'周长' |
| | | perimeter:'周长', |
| | | deleteNo:'删除失败,检查是否已分架' |
| | | |
| | | }, |
| | | processCard:{ |
| | |
| | | technologyNumber:'小片顺序', |
| | | otherRemarks:'原片要求', |
| | | |
| | | pleaseSelectTheSavedDataFirst:'请先选择保存的数据', |
| | | pleaseFirstCreateAProcessCardForAllTheDataOnTheRightSideAndSaveIt:'请先将右侧数据全部建立流程卡后保存', |
| | | glassAddress:'小片标记', |
| | | splitFrameTime:'分架时间', |
| | | print:'打印流程卡', |
| | | printLabel:'打印标签', |
| | | printSetup:'标签设置', |
| | | specificationQuantity:'规格数量', |
| | | singlePieceProductName:'单片产品名称', |
| | | productType:'产品类型', |
| | | whetherToScheduleProduction:'是否排产', |
| | | deleteNo:'删除失败,检查流程卡是否已报工', |
| | | deleteNoProcedure:'删除失败,检查下工序是否已报工', |
| | | pleaseCheckTheRequiredData:'请勾选需要的数据', |
| | | }, |
| | | |
| | | reportingWorks:{ |
| | |
| | | thisWornQuantity:'本工序次破', |
| | | passAudit:'审核通过', |
| | | |
| | | ThanEqualTo1:'请输入大于等于', |
| | | ThanEqualTo2:'的数字', |
| | | selectResponsibleTeam:'请选择责任班组', |
| | | selectWorkReportingTeam:'请选择责任班组', |
| | | successfulModificationOfWorkApplication:'报工修改成功', |
| | | theProcessCardNumberCannotBeEmpty:'流程卡号不能为空', |
| | | unqualified:'未质检', |
| | | qualified:'已质检', |
| | | thisProcess:'本工序', |
| | | qualityInsTime:'质检时间', |
| | | completedArea:'完工面积', |
| | | wornArea:'次破面积', |
| | | |
| | | |
| | | }, |
| | |
| | | customerHomePage:'客户首页', |
| | | increaseCustomers:'客户新增', |
| | | resetting:'重置', |
| | | customerOrders:'客户订单', |
| | | orderAmount:'订单金额', |
| | | |
| | | }, |
| | | delivery:{ |
| | |
| | | deliveryNoteId:'发货单号', |
| | | deliveryNoteNumber:'发货序号', |
| | | deliveryDate:"发货日期 ", |
| | | shipmentDetailsReport:"发货明细报表 ", |
| | | shipmentProductClassificationReport:"发货产品分类报表 ", |
| | | contacts:'联系人', |
| | | contactNumber:'联系电话', |
| | | salesman:'销售员', |
| | | money:'金额', |
| | | |
| | | }, |
| | | replenish:{ |
| | |
| | | TheReworkQuantityCannotBeGreaterThanTheSecondBreakQuantity:'返工数量不能大于次破数量', |
| | | reworkQuantityCannotBeEmptyOr0:'返工数量不能为空或者是0', |
| | | |
| | | }, |
| | | |
| | | role:{ |
| | | id:'ID', |
| | | characterHomepage:'角色首页', |
| | | role:'角色', |
| | | roleAdd:'角色新增', |
| | | menu:"菜单 ", |
| | | page:'页面', |
| | | permission:'权限', |
| | | rolePermissions:'角色权限', |
| | | permissionSelection:"权限选择 ", |
| | | |
| | | |
| | | ConfirmModifyingRolePermissions:'确认修改角色权限?', |
| | | PleaseEnterANewRole:'请输入新角色', |
| | | AddANewRole:'新增角色', |
| | | CannotBeEmptyAndTheLengthCannotExceed255:'不能为空且长度不能超过255', |
| | | |
| | | }, |
| | | |
| | | user:{ |
| | | userId:'用户ID', |
| | | userHomepage:'用户首页', |
| | | user:'用户', |
| | | setUpRoles:'设置角色', |
| | | changePassword:'修改密码', |
| | | OldPassword:'旧密码', |
| | | TheNewPassword:'新密码', |
| | | ConfirmPassword:'确认密码', |
| | | |
| | | OldPasswordCannotBeEmpty:'旧密码不能为空', |
| | | TheNewPasswordCannotBeEmpty:'新密码不能为空', |
| | | ThePasswordLengthCannotBeLessThan6OrMoreThan16:'密码长度不能低于6或超过16', |
| | | ConfirmPasswordCannotBeEmpty:'确认密码不能为空', |
| | | TheTwoPasswordsAreNotTheSame:'两次密码不相同', |
| | | OldPasswordError:'旧密码错误', |
| | | |
| | | |
| | | }, |
| | | |
| | | orderBasicData:{ |
| | | order:'订单', |
| | | orderType:'订单类型', |
| | | orderClassify:'订单分类', |
| | | icon:'商标选项', |
| | | packType:'包装方式', |
| | | alType:'铝条方式', |
| | | saleMan:'业务员', |
| | | product:'产品', |
| | | stuffThickness:'材料厚度', |
| | | stuffColor:'材料颜色', |
| | | stuffCraft:'工艺属性', |
| | | stuffPosition:'玻璃位置', |
| | | stuffLowE:'lowe', |
| | | InterlayerThickness:'夹胶厚度', |
| | | InterlayerType:'夹胶类型', |
| | | InterlayerColor:'夹胶颜色', |
| | | process:'工艺流程', |
| | | hollowThickness:'中空厚度', |
| | | hollowGasType:'充气方式', |
| | | hollowType:'封胶', |
| | | hollowGlueDepth:'默认胶深', |
| | | paymentTerms:'付款条件', |
| | | payMethod:'收款方式', |
| | | delivery:'送货', |
| | | |
| | | basicType:'基础类型', |
| | | name:'名称', |
| | | glassCategory:'玻璃类别', |
| | | level:'类别等级', |
| | | firstLevel:'一级类别', |
| | | towLevel:'二级类别', |
| | | |
| | | }, |
| | | |
| | | machine:{ |
| | | basicId:'设备编号', |
| | | basicName:'设备名称', |
| | | basicCategory:'所在工序', |
| | | type:'类型', |
| | | faultTime:'故障日期', |
| | | faultReason:'故障原因', |
| | | maintenanceTime:'保养日期', |
| | | maintenanceIllustrate:'保养说明', |
| | | startTime:'维修/保养开始时间', |
| | | stopTime:'维修/保养结束时间', |
| | | process:'所在工序', |
| | | personnel:'维修/保养人员', |
| | | cost:'费用', |
| | | |
| | | equipmentSituation:'设备情况', |
| | | equipmentAddition:'设备新增', |
| | | maintenanceAndRepair:'保养与维修', |
| | | maintenanceAndRepairAddition:'保养与维修新增', |
| | | maintenanceAndRepairEdit:'保养与维修编辑', |
| | | service:'维修', |
| | | maintain:'保养', |
| | | |
| | | faultCount:'维修次数', |
| | | maintenanceCount:'保养次数', |
| | | faultLastTime:'最后维修时间', |
| | | maintenanceLastTime:'最后保养时间', |
| | | faultCost:'维修费用', |
| | | maintenanceCost:'保养费用', |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | |
| | | {field: 'width', width: 80, title: t('order.width'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'height', width: 80, title: t('order.height'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'shape', width: 80, title: t('order.shape'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'responsibleProcess', width: 100, title: '责任工序', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'responsibleProcess', width: 100, title: t('reportingWorks.responsibleProcess'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'patchProcesses', width: 100, title: t('reportingWorks.reportingProcess'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'patchType', width: 100, title: t('reportingWorks.breakageType'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'patchReason', width: 120, title: t('reportingWorks.breakageReason'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | |
| | | ElMessage.success(t('basicData.msg.saveSuccess')) |
| | | router.push({path:'/main/Replenish/AddReplenish',query:{random:Math.random()}}) |
| | | }else{ |
| | | ElMessage.warning("保存失败") |
| | | ElMessage.warning(t('basicData.msg.saveFail')) |
| | | router.push("/login") |
| | | } |
| | | }) |
| | |
| | | router.push({path:'/main/Replenish/SelectReplenish',query:{random:Math.random()}}) |
| | | |
| | | }else{ |
| | | ElMessage.warning("审核失败") |
| | | ElMessage.warning(t('basicData.msg.reviewFail')) |
| | | router.push("/login") |
| | | } |
| | | }) |
| | |
| | | <el-date-picker |
| | | v-model="selectDate" |
| | | type="daterange" |
| | | start-placeholder="开始时间" |
| | | end-placeholder="结束时间" |
| | | :start-placeholder="$t('basicData.startDate')" |
| | | :end-placeholder="$t('basicData.endDate')" |
| | | format="YYYY-MM-DD" |
| | | value-format="YYYY-MM-DD" |
| | | |
| | |
| | | {type: 'seq', fixed: "left", title: '自序', width: 50}, |
| | | { |
| | | field: 'basicName', |
| | | title: '设备名称', |
| | | title: t('machine.basicName'), |
| | | width: 500, |
| | | editRender: {name: 'input', attrs: {placeholder: ''}}, |
| | | }, |
| | | |
| | | { |
| | | field: 'basicCategory', |
| | | title: '所在工序', |
| | | title: t('machine.basicCategory'), |
| | | width: 500, |
| | | editRender: {}, |
| | | slots: {default: 'basicCategory_default', edit: 'basicCategory'} |
| | |
| | | buttons: [ |
| | | {code: 'removeRow', name: t('basicData.delete'), status: 'primary', icon: 'vxe-icon-delete'}, |
| | | {code: 'addRow', name: t('reportingWorks.increase'), status: 'primary', icon: 'vxe-icon-square-plus'}, |
| | | {code: 'save', name: '保存', status: 'primary', icon: 'vxe-icon-save'}, |
| | | {code: 'save', name: t('basicData.save'), status: 'primary', icon: 'vxe-icon-save'}, |
| | | ], |
| | | // import: false, |
| | | // export: true, |
| | |
| | | return [ |
| | | columns.map((column, columnIndex) => { |
| | | if (columnIndex === 0) { |
| | | return '合计:' |
| | | return '' |
| | | } |
| | | if (footList.includes(column.field)) { |
| | | return sumNum(data, column.field) |
| | |
| | | }) |
| | | request.post("/maintenance/saveMachine", machineData.value).then((res) => { |
| | | if (res.code == 200) { |
| | | ElMessage.success("保存成功") |
| | | ElMessage.success(t('basicData.msg.saveSuccess')) |
| | | //router.push('/main/processCard/SplittingDetails?orderId=${orderId}') |
| | | router.push({ |
| | | path: '/main/machine/AddMachine', |
| | |
| | | {type: 'seq', fixed: "left", title: '自序', width: 50}, |
| | | { |
| | | field: 'deviceName', |
| | | title: '设备名称', |
| | | title: t('machine.basicName'), |
| | | editRender: {}, |
| | | slots: {default: 'basicCategory_default', edit: 'deviceName'} |
| | | }, |
| | | { |
| | | field: 'type', |
| | | title: '类型', |
| | | title: t('machine.type'), |
| | | editRender: {name: 'input', attrs: {placeholder: ''}}, |
| | | }, |
| | | { |
| | | field: 'faultTime', |
| | | title: '故障日期', |
| | | title: t('machine.faultTime'), |
| | | editRender: {name: 'input', attrs: {placeholder: '', type: 'date'}}, |
| | | }, |
| | | { |
| | | field: 'faultReason', |
| | | title: '故障原因', |
| | | title: t('machine.faultReason'), |
| | | editRender: {name: 'input', attrs: {placeholder: ''}}, |
| | | }, |
| | | { |
| | | field: 'maintenanceTime', |
| | | title: '保养日期', |
| | | title: t('machine.maintenanceTime'), |
| | | editRender: {name: 'input', attrs: {placeholder: '', type: 'date'}}, |
| | | }, |
| | | { |
| | | field: 'maintenanceIllustrate', |
| | | title: '保养说明', |
| | | title: t('machine.maintenanceIllustrate'), |
| | | editRender: {name: 'input', attrs: {placeholder: ''}}, |
| | | }, |
| | | { |
| | | field: 'startTime', |
| | | title: '维修/保养开始时间', |
| | | title: t('machine.startTime'), |
| | | editRender: {name: 'input', attrs: {placeholder: '', type: 'date'}}, |
| | | }, |
| | | { |
| | | field: 'stopTime', |
| | | title: '维修/保养结束时间', |
| | | title: t('machine.stopTime'), |
| | | editRender: {name: 'input', attrs: {placeholder: '', type: 'date'}}, |
| | | }, |
| | | |
| | | { |
| | | field: 'process', |
| | | title: '所在工序', |
| | | title: t('machine.process'), |
| | | editRender: {}, |
| | | slots: {default: 'reportingDeviceSort_default', edit: 'process'} |
| | | }, |
| | | { |
| | | field: 'personnel', |
| | | title: '维修/保养人员', |
| | | title: t('machine.personnel'), |
| | | editRender: {name: 'input', attrs: {placeholder: ''}}, |
| | | }, |
| | | { |
| | | field: 'cost', |
| | | title: '费用', |
| | | title: t('machine.cost'), |
| | | editRender: {name: 'input', attrs: {placeholder: ''}}, |
| | | }, |
| | | ], |
| | |
| | | buttons: [ |
| | | {code: 'removeRow', name: t('basicData.delete'), status: 'primary', icon: 'vxe-icon-delete'}, |
| | | {code: 'addRow', name: t('reportingWorks.increase'), status: 'primary', icon: 'vxe-icon-square-plus'}, |
| | | {code: 'save', name: '保存', status: 'primary', icon: 'vxe-icon-save'}, |
| | | {code: 'save', name: t('basicData.save'), status: 'primary', icon: 'vxe-icon-save'}, |
| | | ], |
| | | // import: false, |
| | | // export: true, |
| | |
| | | return [ |
| | | columns.map((column, columnIndex) => { |
| | | if (columnIndex === 0) { |
| | | return '合计:' |
| | | return '' |
| | | } |
| | | if (footList.includes(column.field)) { |
| | | return sumNum(data, column.field) |
| | |
| | | }) |
| | | request.post("/maintenance/saveMaintenanceAndRepair", machineData.value).then((res) => { |
| | | if (res.code == 200) { |
| | | ElMessage.success("保存成功") |
| | | ElMessage.success(t('basicData.msg.saveSuccess')) |
| | | //router.push('/main/processCard/SplittingDetails?orderId=${orderId}') |
| | | router.push({ |
| | | path: '/main/machine/AddMaintenanceAndRepair', |
| | |
| | | <div id="main"> |
| | | <div id="div-title"> |
| | | <el-breadcrumb :separator-icon="ArrowRight"> |
| | | <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/machine/SelectMachine' }">设备情况</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/machine/AddMachine' }">设备新增</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(3)" :class="indexFlag===3?'indexTag':''" :to="{ path: '/main/machine/MaintenanceAndRepair' }">保养与维修</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(4)" :class="indexFlag===4?'indexTag':''" :to="{ path: '/main/machine/AddMaintenanceAndRepair' }">保养与维修新增</el-breadcrumb-item> |
| | | <el-breadcrumb-item :to="{ path: '/main/processCard/SelectPrintFlowCard' }" style="display: none">打印</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/machine/SelectMachine' }">{{$t('machine.equipmentSituation')}}</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/machine/AddMachine' }">{{$t('machine.equipmentAddition')}}</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(3)" :class="indexFlag===3?'indexTag':''" :to="{ path: '/main/machine/MaintenanceAndRepair' }">{{$t('machine.maintenanceAndRepair')}}</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(4)" :class="indexFlag===4?'indexTag':''" :to="{ path: '/main/machine/AddMaintenanceAndRepair' }">{{$t('machine.maintenanceAndRepairAddition')}}</el-breadcrumb-item> |
| | | <el-breadcrumb-item :to="{ path: '/main/processCard/SelectPrintFlowCard' }" style="display: none">{{$t('basicData.print')}}</el-breadcrumb-item> |
| | | </el-breadcrumb> |
| | | </div> |
| | | |
| | |
| | | },//表头参数 |
| | | columns: [ |
| | | {type: 'expand', fixed: "left", slots: {content: 'content'}, width: 50}, |
| | | {title: '操作', width: 140, slots: {default: 'button_slot'}, fixed: "left"}, |
| | | {title: t('basicData.operate'), width: 140, slots: {default: 'button_slot'}, fixed: "left"}, |
| | | { |
| | | field: 'id', width: 130, title: 'Id' |
| | | }, |
| | | |
| | | { |
| | | field: 'deviceName', width: 130, title: '设备名称', filters: [{data: ''}], |
| | | field: 'deviceName', width: 130, title: t('machine.basicName'), filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'type', width: 120, title: '类型', filters: [{data: ''}], |
| | | field: 'type', width: 120, title: t('machine.type'), filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | {field: 'faultTime', width: 100, title: '故障日期', showOverflow: "ellipsis"}, |
| | | {field: 'faultTime', width: 100, title: t('machine.faultTime'), showOverflow: "ellipsis"}, |
| | | { |
| | | field: 'faultReason', width: 100, title: '故障原因', filters: [{data: ''}], |
| | | field: 'faultReason', width: 100, title: t('machine.faultReason'), filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | {field: 'maintenanceTime', width: 100, title: '保养日期'}, |
| | | {field: 'maintenanceIllustrate', width: 120, title: '保养说明', showOverflow: "ellipsis"}, |
| | | {field: 'startTime', width: 160, title: '维修/保养开始时间'}, |
| | | {field: 'stopTime', width: 160, title: '维修/保养结束时间'}, |
| | | {field: 'maintenanceTime', width: 100, title: t('machine.maintenanceTime')}, |
| | | {field: 'maintenanceIllustrate', width: 120, title: t('machine.maintenanceIllustrate'), showOverflow: "ellipsis"}, |
| | | {field: 'startTime', width: 160, title: t('machine.startTime')}, |
| | | {field: 'stopTime', width: 160, title: t('machine.stopTime')}, |
| | | { |
| | | field: 'process', width: 120, title: '所在工艺', filters: [{data: ''}], |
| | | field: 'process', width: 120, title: t('machine.process'), filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | {field: 'personnel', width: 150, title: '维修/保养人员'}, |
| | | {field: 'cost', width: 120, title: '费用'}, |
| | | {field: 'personnel', width: 150, title: t('machine.personnel')}, |
| | | {field: 'cost', width: 120, title: t('machine.cost')}, |
| | | ],//表头按钮 |
| | | |
| | | toolbarConfig: { |
| | |
| | | data: [],//table body实际数据 |
| | | //脚部求和 |
| | | footerMethod({columns, data}) {//页脚函数 |
| | | let footList = ['费用'] |
| | | let footList = [''] |
| | | return [ |
| | | columns.map((column, columnIndex) => { |
| | | if (columnIndex === 0) { |
| | | return '合计:' |
| | | return t('basicData.total') |
| | | } |
| | | if (footList.includes(column.field)) { |
| | | return sumNum(data, column.field) |
| | |
| | | size="small"> |
| | | {{ $t('basicData.edit') }} |
| | | </el-button> |
| | | <el-button link size="small" type="primary" @click="getTableRow(row,'delete')">删除</el-button> |
| | | <el-button link size="small" type="primary" @click="getTableRow(row,'delete')">{{$t('basicData.delete')}}</el-button> |
| | | </template> |
| | | |
| | | <template #num1_filter="{ column, $panel }"> |
| | |
| | | |
| | | </vxe-grid> |
| | | |
| | | <el-dialog v-model="dialogTableVisible" title="保养与维修编辑"> |
| | | <el-dialog v-model="dialogTableVisible" :title="$t('machine.maintenanceAndRepairEdit')"> |
| | | |
| | | <el-form :model="form"> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item :label-width="formLabelWidth" label="设备名称"> |
| | | <el-form-item :label-width="formLabelWidth" :label="$t('machine.basicName')"> |
| | | <el-input v-model="getBasicData.device_name" autocomplete="off" style="width: 220px"/> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item :label-width="formLabelWidth" label="类型"> |
| | | <el-select v-model="getBasicData.type" placeholder="维修" style="width: 220px"> |
| | | <el-option label="保养" value="1"/> |
| | | <el-option label="维修" value="2"/> |
| | | <el-form-item :label-width="formLabelWidth" :label="$t('machine.type')"> |
| | | <el-select v-model="getBasicData.type" :placeholder="$t('machine.service')" style="width: 220px"> |
| | | <el-option :label="$t('machine.maintain')" value="1"/> |
| | | <el-option :label="$t('machine.service')" value="2"/> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item :label-width="formLabelWidth" label="故障日期"> |
| | | <el-form-item :label-width="formLabelWidth" :label="$t('machine.faultTime')"> |
| | | <el-date-picker |
| | | v-model="getBasicData.fault_time" |
| | | :size="size" |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item :label-width="formLabelWidth" label="故障原因"> |
| | | <el-form-item :label-width="formLabelWidth" :label="$t('machine.faultReason')"> |
| | | <el-input v-model="getBasicData.fault_reason" autocomplete="off" style="width: 220px"/> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item :label-width="formLabelWidth" label="保养日期"> |
| | | <el-form-item :label-width="formLabelWidth" :label="$t('machine.maintenanceTime')"> |
| | | <el-date-picker |
| | | v-model="getBasicData.maintenance_time" |
| | | :size="size" |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item :label-width="formLabelWidth" label="保养说明"> |
| | | <el-form-item :label-width="formLabelWidth" :label="$t('machine.maintenanceIllustrate')"> |
| | | <el-input v-model="getBasicData.maintenance_illustrate" autocomplete="off" style="width: 220px"/> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item :label-width="formLabelWidth" label="保养/维修开始时间"> |
| | | <el-form-item :label-width="formLabelWidth" :label="$t('machine.startTime')"> |
| | | <el-date-picker |
| | | v-model="getBasicData.start_time" |
| | | type="date" |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item :label-width="formLabelWidth" label="保养/维修完成时间"> |
| | | <el-form-item :label-width="formLabelWidth" :label="$t('machine.stopTime')"> |
| | | <el-date-picker |
| | | v-model="getBasicData.stop_time" |
| | | :size="size" |
| | |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item :label-width="formLabelWidth" label="所在工艺"> |
| | | <el-form-item :label-width="formLabelWidth" :label="$t('machine.process')"> |
| | | <el-select v-model="getBasicData.process" clearable placeholder="" style="width: 220px" |
| | | > |
| | | <el-option |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item :label-width="formLabelWidth" label="保养/维修人员"> |
| | | <el-form-item :label-width="formLabelWidth" :label="$t('machine.personnel')"> |
| | | <el-input v-model="getBasicData.personnel" autocomplete="off" style="width: 220px"/> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-form-item :label-width="formLabelWidth" label="费用"> |
| | | <el-form-item :label-width="formLabelWidth" :label="$t('machine.cost')"> |
| | | <el-input v-model="getBasicData.cost" autocomplete="off" style="width: 220px"/> |
| | | </el-form-item> |
| | | </el-form> |
| | | <template #footer> |
| | | <span class="dialog-footer"> |
| | | <el-button @click="dialogTableVisible = false">取消</el-button> |
| | | <el-button @click="dialogTableVisible = false">{{$t('basicData.cancelButtonText')}}</el-button> |
| | | <el-button type="primary" @click="updateBasic"> |
| | | 修改 |
| | | {{$t('basicData.update')}} |
| | | </el-button> |
| | | </span> |
| | | </template> |
| | |
| | | },//表头参数 |
| | | columns:[ |
| | | {type:'expand',fixed:"left",slots: { content:'content' },width: 50}, |
| | | { type: 'seq',fixed:"left", title: '自序', width: 50 }, |
| | | {field: 'deviceId', width: 120, title: '设备编号',filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged }, |
| | | {field: 'deviceName', width: 130,title: '设备名称' ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'type',width: 100, title: '使用状态',filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged }, |
| | | {field: 'faultCount',width: 120, title: '维修次数' ,showOverflow:"ellipsis"}, |
| | | {field: 'maintenanceCount', width: 120,title: '保养次数', }, |
| | | {field: 'faultLastTime',width: 120, title: '最后维修时间', }, |
| | | {field: 'maintenanceLastTime',width: 120, title: '最后保养时间', }, |
| | | {field: 'faultCost',width: 120, title: '维修费用', }, |
| | | {field: 'maintenanceCost',width: 120, title: '保养费用', }, |
| | | {field: 'process',width: 120, title: '所在工艺',filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged } |
| | | { type: 'seq',fixed:"left", title: t('basicData.Number'), width: 50 }, |
| | | {field: 'deviceId', width: 120, title: t('machine.basicId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged }, |
| | | {field: 'deviceName', width: 130,title: t('machine.basicName') ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'type',width: 100, title: t('machine.type'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged }, |
| | | {field: 'faultCount',width: 120, title: t('machine.faultCount') ,showOverflow:"ellipsis"}, |
| | | {field: 'maintenanceCount', width: 120,title: t('machine.maintenanceCount'), }, |
| | | {field: 'faultLastTime',width: 120, title: t('machine.faultLastTime'), }, |
| | | {field: 'maintenanceLastTime',width: 120, title: t('machine.maintenanceLastTime'), }, |
| | | {field: 'faultCost',width: 120, title: t('machine.faultCost'), }, |
| | | {field: 'maintenanceCost',width: 120, title: t('machine.maintenanceCost'), }, |
| | | {field: 'process',width: 120, title: t('machine.basicCategory'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged } |
| | | ], |
| | | //表头按钮 |
| | | toolbarConfig: { |
| | |
| | | return[ |
| | | columns.map((column, columnIndex) => { |
| | | if (columnIndex === 0) { |
| | | return '合计:' |
| | | return t('basicData.total') |
| | | } |
| | | if (footList.includes(column.field)) { |
| | | return sumNum(data, column.field) |
| | |
| | | // const selectRight = $tableRight.getCheckboxRecords() |
| | | let leftData = $tableRight.getTableData().fullData |
| | | if (selectRecords.length === 0) { |
| | | ElMessage.warning("请先选择保存的数据") |
| | | ElMessage.warning(t('processCard.pleaseSelectTheSavedDataFirst')) |
| | | return |
| | | } |
| | | |
| | | if (leftData.length > 0) { |
| | | ElMessage.warning("请先将右侧数据全部建立流程卡后保存") |
| | | ElMessage.warning(t('processCard.pleaseFirstCreateAProcessCardForAllTheDataOnTheRightSideAndSaveIt')) |
| | | return; |
| | | } |
| | | let flowCardData = ref({ |
| | |
| | | |
| | | request.post("/processCard/addFlowCard", flowCardData.value).then((res) => { |
| | | if (res.code == 200) { |
| | | ElMessage.success("保存成功") |
| | | ElMessage.success(t('basicData.msg.saveSuccess')) |
| | | //router.push('/main/processCard/SplittingDetails?orderId=${orderId}') |
| | | router.push({ |
| | | path: '/main/processCard/AddProcessCard', |
| | |
| | | |
| | | |
| | | }) |
| | | |
| | | //定义页面总页数 |
| | | let pageTotal = ref('') |
| | | //定义数据返回结果 |
| | |
| | | ElMessage.warning(res.msg) |
| | | } |
| | | }) |
| | | |
| | | |
| | | //表尾求和 |
| | | const sumNum = (list, field) => { |
| | |
| | | }, |
| | | { |
| | | field: 'process_id', |
| | | title: '流程卡号', |
| | | title: t('processCard.processId'), |
| | | showOverflow: "ellipsis", |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | |
| | | }, |
| | | { |
| | | field: 'customer_name', |
| | | title: '客户名称', |
| | | title: t('customer.customerName'), |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'project', |
| | | title: '项目名称', |
| | | title: t('order.project'), |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | {field: 'technology_number', title: '小片顺序', showOverflow: "ellipsis"}, |
| | | {field: 'glass_address', title: '小片标记',}, |
| | | {field: 'quantity', title: '数量',}, |
| | | {field: 'total_area', title: '面积',}, |
| | | {field: 'product_name', title: '产品名称',}, |
| | | {field: 'glass_child', title: '单片名称',}, |
| | | {field: 'founder', title: '分架员',}, |
| | | {field: 'splitFrame_time', title: '分架时间',}, |
| | | {field: 'technology_number', title: t('processCard.technologyNumber'), showOverflow: "ellipsis"}, |
| | | {field: 'glass_address', title: t('processCard.glassAddress'),}, |
| | | {field: 'quantity', title: t('order.quantity'),}, |
| | | {field: 'total_area', title: t('order.area'),}, |
| | | {field: 'product_name', title: t('order.product'),}, |
| | | {field: 'glass_child', title: t('reportingWorks.glassChild'),}, |
| | | {field: 'founder', title: t('processCard.founder'),}, |
| | | {field: 'splitFrame_time', title: t('processCard.splitFrameTime'),}, |
| | | ],//表头按钮 |
| | | |
| | | toolbarConfig: { |
| | | buttons: [ |
| | | {code: 'print', name: '打印流程卡', status: 'primary'}, |
| | | {code: 'printLabel', name: '打印标签', status: 'primary'}, |
| | | {code: 'print', name: t('processCard.print'), status: 'primary'}, |
| | | {code: 'printLabel', name: t('processCard.printLabel'), status: 'primary'}, |
| | | |
| | | ], |
| | | // import: false, |
| | | // export: true, |
| | |
| | | } |
| | | }, |
| | | } |
| | | |
| | | |
| | | |
| | | const detailGridOptions = reactive({ |
| | |
| | | xGridDetail.value.reloadData(detail.value) |
| | | } |
| | | |
| | | |
| | | </script> |
| | | |
| | | <template> |
| | |
| | | <el-dialog |
| | | v-model="dialogTableVisible" |
| | | destroy-on-close |
| | | title="流程卡打印" |
| | | :title="$t('processCard.print')" |
| | | style="width: 80%;height:75% "> |
| | | <PrintProcess :printList="selectRecords" |
| | | style="width: 100%;height: 100%" /> |
| | |
| | | <el-dialog |
| | | v-model="dialogTableVisibleLabel" |
| | | destroy-on-close |
| | | title="标签打印" |
| | | :title="$t('processCard.printLabel')" |
| | | style="width: 80%;height:75% "> |
| | | <PrintLabel :printList="selectRecords" |
| | | style="width: 100%;height: 100%" /> |
| | |
| | | |
| | | </vxe-grid> |
| | | </el-dialog> |
| | | |
| | | |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | const data = ref({ |
| | | printList: [] |
| | | }) |
| | | const setupData = ref({ |
| | | }) |
| | | let printSetupData = { |
| | | printState:'' |
| | | } |
| | | |
| | | |
| | | const {currentRoute} = useRouter() |
| | | const route = currentRoute.value |
| | |
| | | |
| | | ) |
| | | |
| | | request.post(`/processCard/printSetup`, setupData.value).then((res) => { |
| | | if (res.code == 200) { |
| | | printSetupData = deepClone(res.data.data) |
| | | } else { |
| | | ElMessage.warning(res.msg) |
| | | router.push("/login") |
| | | } |
| | | }) |
| | | |
| | | |
| | | |
| | |
| | | </script> |
| | | |
| | | <template> |
| | | <el-button id="printButton" @click="printFlowCard();">打印</el-button> |
| | | <el-button id="printButton" @click="printFlowCard();">{{ $t('basicData.print') }}</el-button> |
| | | <div id="printFlowCard" > |
| | | <div id="entirety" v-for="(item,id) in labelList" > |
| | | <div v-show="printSetupData[0].printState" class="row1">{{ item.customer_name }}</div> |
| | | <div v-show="printSetupData[6].printState || printSetupData[7].printState" class="row2"> |
| | | <span v-show="printSetupData[6].printState">{{ item.order_id }}</span> |
| | | <span v-show="printSetupData[7].printState">{{ item.type_name }}</span> |
| | | <div class="row1">{{ item.customer_name }}</div> |
| | | <div class="row2"> |
| | | <span>{{ item.order_id }}</span> |
| | | <span>{{ item.type_name }}</span> |
| | | </div> |
| | | <div v-show="printSetupData[2].printState" class="row3">{{item.child_width}}*{{item.child_height}}={{item.quantity}}</div> |
| | | <div v-show="printSetupData[1].printState || printSetupData[3].printState" class="row5"> |
| | | <span v-show="printSetupData[1].printState">{{item.project}}</span> |
| | | <span v-show="printSetupData[3].printState">{{ item.remarks }}</span> |
| | | <div class="row3">{{item.child_width}}*{{item.child_height}}={{item.quantity}}</div> |
| | | <div class="row5"> |
| | | <span>{{item.project}}</span> |
| | | <span>{{ item.remarks }}</span> |
| | | </div> |
| | | <div v-show="printSetupData[5].printState || printSetupData[4].printState" class="row6"> |
| | | <span v-show="printSetupData[5].printState">{{item.glass_child}}</span> |
| | | <span v-show="printSetupData[4].printState">{{item.processing_note}}</span></div> |
| | | <div class="row6"> |
| | | <span>{{item.glass_child}}</span> |
| | | <span>{{item.processing_note}}</span></div> |
| | | </div> |
| | | </div> |
| | | |
| | |
| | | </script> |
| | | |
| | | <template> |
| | | <el-button id="printButton" @click="printFlowCard();">打印</el-button> |
| | | <el-button id="printButton" @click="printFlowCard();">{{ $t('basicData.print') }}</el-button> |
| | | <div id="printFlowCard"> |
| | | <table v-for="(item,id) in produceList" id="contentTable" :key="id"> |
| | | <thead> |
| | |
| | | </el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(3)" :class="indexFlag===3?'indexTag':''" :to="{ path: '/main/processCard/ProductionScheduling' }">{{$t('processCard.scheduling')}} |
| | | </el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(4)" :class="indexFlag===4?'indexTag':''" :to="{ path: '/main/processCard/SelectPrintFlowCard' }" >打印</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(4)" :class="indexFlag===4?'indexTag':''" :to="{ path: '/main/processCard/SelectPrintFlowCard' }" style="display: none">打印</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(4)" :class="indexFlag===4?'indexTag':''" :to="{ path: '/main/processCard/SelectPrintFlowCard' }" >{{ $t('basicData.print') }}</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(4)" :class="indexFlag===4?'indexTag':''" :to="{ path: '/main/processCard/SelectPrintFlowCard' }" style="display: none">{{ $t('basicData.print') }}</el-breadcrumb-item> |
| | | </el-breadcrumb> |
| | | </div> |
| | | |
| | |
| | | break |
| | | } |
| | | |
| | | case 'setType': { |
| | | alert('我接收到子组件传送的排版状态') |
| | | break |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | //工序 |
| | | const value = ref('切割') |
| | | const processVal = ref('切割') |
| | | |
| | | |
| | | //排产状态 |
| | |
| | | }, |
| | | ] |
| | | |
| | | function padLeftZero(str) { |
| | | return ('00' + str).substr(str.length) |
| | | } |
| | | |
| | | //定义表单值 |
| | | const form = reactive({ |
| | | date1: '', |
| | |
| | | }) |
| | | |
| | | |
| | | //表尾求和 |
| | | const sumNum = (list, field) => { |
| | | let count = 0 |
| | | list.forEach(item => { |
| | | count += Number(item[field]) |
| | | }) |
| | | return count.toFixed(2) |
| | | } |
| | | |
| | | //定义滚动条高度 |
| | | let scrollTop = ref(null) |
| | | let scrollHeight = ref(null) |
| | | let clientHeight = ref(null) |
| | | const scrollEvnt = (row) => { |
| | | // 内容高度 |
| | | scrollTop.value = row.$event.target.scrollTop |
| | | scrollHeight.value = row.$event.target.scrollHeight |
| | | clientHeight.value = row.$event.target.clientHeight |
| | | } |
| | | //筛选条件,有外键需要先定义明细里面的数据 |
| | | let filterData = ref({ |
| | | order: { |
| | |
| | | form.date1 = getNowTime() |
| | | let startTime = form.date1[0] |
| | | let endTime = form.date1[1] |
| | | let selectProcesses = value.value |
| | | let selectProcesses = processVal.value |
| | | let inputVal = form.orderId |
| | | if (inputVal == '') { |
| | | inputVal = null |
| | |
| | | const getWorkOrder = () => { |
| | | let startTime = form.date1[0] |
| | | let endTime = form.date1[1] |
| | | let selectProcesses = value.value |
| | | let selectProcesses = processVal.value |
| | | let selectState = stateValue.value |
| | | let inputVal = form.orderId |
| | | if (inputVal == '') { |
| | |
| | | if (selectProcesses == '') { |
| | | selectProcesses = null |
| | | } |
| | | // if (inputVal == null && selectState == 1) { |
| | | // //根据时间查询未排产数据 |
| | | // request.post(`/productionScheduling/selectLastScheduling/${startTime}/${endTime}/${selectProcesses}/${inputVal}`, filterData.value).then((res) => { |
| | | // |
| | | // if (res.code == 200) { |
| | | // pageTotal.value = res.data.total |
| | | // xGrid.value.loadData(res.data.data) |
| | | // gridOptions.loading = false |
| | | // //禁用删除、审核按钮 |
| | | // gridOptions.toolbarConfig.buttons[0].disabled = true |
| | | // gridOptions.toolbarConfig.buttons[1].disabled = true |
| | | // //启用保存 |
| | | // gridOptions.toolbarConfig.buttons[2].disabled = false |
| | | // } else { |
| | | // ElMessage.warning(res.msg) |
| | | // } |
| | | // }) |
| | | // } else if (inputVal != null && selectState == 1) { |
| | | //根据工序查询未排产数据 |
| | | request.post(`/productionScheduling/selectScheduling/${pageNum.value}/${total.pageSize}/${startTime}/${endTime}/${inputVal}/${selectProcesses}/${selectState}`, filterData.value).then((res) => { |
| | | if (res.code == 200) { |
| | |
| | | xGrid.value.loadData(res.data.data) |
| | | console.log(res.data.data) |
| | | gridOptions.loading = false |
| | | //禁用删除、审核按钮 |
| | | gridOptions.toolbarConfig.buttons[0].disabled = true |
| | | gridOptions.toolbarConfig.buttons[1].disabled = true |
| | | //启用保存 |
| | | gridOptions.toolbarConfig.buttons[2].disabled = false |
| | | if (selectState==1){ |
| | | //禁用删除、审核按钮 |
| | | gridOptions.toolbarConfig.buttons[0].disabled = true |
| | | gridOptions.toolbarConfig.buttons[1].disabled = true |
| | | //启用保存 |
| | | gridOptions.toolbarConfig.buttons[2].disabled = false |
| | | }else{ |
| | | //禁用删除、审核按钮 |
| | | gridOptions.toolbarConfig.buttons[0].disabled = false |
| | | gridOptions.toolbarConfig.buttons[1].disabled = false |
| | | //启用保存 |
| | | gridOptions.toolbarConfig.buttons[2].disabled = false |
| | | |
| | | } |
| | | } else { |
| | | ElMessage.warning(res.msg) |
| | | } |
| | | }) |
| | | // } else if (inputVal == null && selectState == 2) { |
| | | // //根据时间查询已排产数据 |
| | | // request.post(`/productionScheduling/selectScheduling/${startTime}/${endTime}/${inputVal}/${selectProcesses}/${selectState}`, filterData.value).then((res) => { |
| | | // if (res.code == 200) { |
| | | // pageTotal.value = res.data.total |
| | | // xGrid.value.loadData(res.data.data) |
| | | // gridOptions.loading = false |
| | | // //启用删除、审核按钮 |
| | | // gridOptions.toolbarConfig.buttons[0].disabled = false |
| | | // gridOptions.toolbarConfig.buttons[1].disabled = false |
| | | // //禁用保存 |
| | | // gridOptions.toolbarConfig.buttons[2].disabled = true |
| | | // } else { |
| | | // ElMessage.warning(res.msg) |
| | | // } |
| | | // }) |
| | | // } else if (inputVal != null && selectState == 2) { |
| | | // //根据订单号查询已排产数据 |
| | | // request.post(`/productionScheduling/selectSchedulingNot/${startTime}/${endTime}/${inputVal}/${selectProcesses}/${selectState}`, filterData.value).then((res) => { |
| | | // if (res.code == 200) { |
| | | // pageTotal.value = res.data.total |
| | | // xGrid.value.loadData(res.data.data) |
| | | // gridOptions.loading = false |
| | | // //启用删除、审核按钮 |
| | | // gridOptions.toolbarConfig.buttons[0].disabled = false |
| | | // gridOptions.toolbarConfig.buttons[1].disabled = false |
| | | // //禁用保存 |
| | | // gridOptions.toolbarConfig.buttons[2].disabled = true |
| | | // } else { |
| | | // ElMessage.warning(res.msg) |
| | | // } |
| | | // }) |
| | | // } |
| | | |
| | | |
| | | } |
| | |
| | | //获取选中时间 |
| | | let startTime = form.date1[0] |
| | | let endTime = form.date1[1] |
| | | let selectProcesses = value.value |
| | | let selectProcesses = processVal.value |
| | | let selectState = stateValue.value |
| | | let inputVal = form.orderId |
| | | if (inputVal == '') { |
| | |
| | | if (selectProcesses == '') { |
| | | selectProcesses = null |
| | | } |
| | | |
| | | request.post(`/productionScheduling/selectScheduling/1/${total.pageSize}/${startTime}/${endTime}/${inputVal}/${selectProcesses}/${selectState}`, filterData.value).then((res) => { |
| | | if (res.code == 200) { |
| | | total.dataTotal = res.data.total.total * 1 |
| | |
| | | pageNum.value = 1 |
| | | xGrid.value.loadData(res.data.data) |
| | | gridOptions.loading = false |
| | | //禁用删除、审核按钮 |
| | | gridOptions.toolbarConfig.buttons[0].disabled = true |
| | | gridOptions.toolbarConfig.buttons[1].disabled = true |
| | | //启用保存 |
| | | gridOptions.toolbarConfig.buttons[2].disabled = false |
| | | } else { |
| | | ElMessage.warning(res.msg) |
| | | } |
| | |
| | | keepSource: true,//保持源数据 |
| | | align: 'center',//文字居中 |
| | | stripe: true,//斑马纹 |
| | | rowConfig: {isCurrent: true, isHover: true, height: 30},//鼠标移动或选择高亮 |
| | | rowConfig: {isCurrent: true, isHover: true, height: 50},//鼠标移动或选择高亮 |
| | | id: 'CustomerList', |
| | | showFooter: true,//显示脚 |
| | | printConfig: {}, |
| | |
| | | customConfig: { |
| | | storage: true |
| | | }, |
| | | |
| | | editConfig: { |
| | | trigger: 'click', |
| | | mode: 'row', |
| | |
| | | }, |
| | | //表头参数 |
| | | columns: [ |
| | | {type: 'expand', fixed: "left", slots: {content: 'content'}, width: 50}, |
| | | {type: 'checkbox', fixed: "left", title: t('basicData.check'), width: 80}, |
| | | {type: 'expand',fixed: "left", slots: {content: 'content'}, width: 50}, |
| | | {type: 'seq', fixed: "left", title: t('basicData.Number'), width: 50}, |
| | | {type: 'checkbox', fixed: "left", title: t('basicData.check'), width: 80}, |
| | | { |
| | | field: 'scheduled_start_time', |
| | | width: 120, |
| | | editRender: {name: 'input', attrs: {placeholder: '', type: 'date'}}, |
| | | field: 'scheduledStartTime', |
| | | width: 130, |
| | | editRender: {name: 'input', attrs: {placeholder: '', type: 'date'},}, |
| | | title: t('processCard.scheduledStartTime') |
| | | }, |
| | | { |
| | | field: 'plan_end_time', |
| | | width: 120, |
| | | field: 'planEndTime', |
| | | width: 130, |
| | | editRender: {name: 'input', attrs: {placeholder: '', type: 'date'}}, |
| | | title: t('processCard.planEndTime') |
| | | }, |
| | |
| | | title: t('order.orderId'), |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | width: 100, |
| | | width: 110, |
| | | }, |
| | | { |
| | | field: 'order.customerName', |
| | |
| | | title: t('order.OrderNum'), |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | width: 70, |
| | | width: 100, |
| | | }, |
| | | { |
| | | field: 'technologyNumber', |
| | | title: t('processCard.technologyNumber'), |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | width: 70, |
| | | width: 100, |
| | | }, |
| | | { |
| | | field: 'orderGlassDetail.childWidth', |
| | |
| | | title: t('order.height'), |
| | | width: 60, |
| | | }, |
| | | {field: 'orderDetail.quantity', title: t('processCard.orderQuantity'), width: 70}, |
| | | {field: 'orderDetail.quantity', title: t('processCard.orderQuantity'), width: 90}, |
| | | {field: 'orderGlassDetail.area', title: t('processCard.orderArea'), width: 90}, |
| | | { |
| | | field: 'schedulingQuantity', |
| | |
| | | title: t('processCard.productionSchedulingQuantity'), |
| | | sortable: true |
| | | }, |
| | | {field: 'pendingProductionQuantity', title: t('processCard.quantityToScheduled'), width: 120}, |
| | | {field: 'pendingProductionArea', title: t('processCard.areaToScheduled'), width: 120}, |
| | | {field: 'productionScheduledQuantity', title: t('processCard.plannedProductionQuantity'), width: 120}, |
| | | {field: 'productionScheduledArea', title: t('processCard.plannedProductionArea'), width: 120}, |
| | | {field: 'reviewStatus', title: t('processCard.reviewedState'), width: 140}, |
| | | {field: 'reviewer', title: t('processCard.reviewed'), width: 140}, |
| | | {field: 'orderGlassDetail.glassChild', title: t('order.product'), width: 140}, |
| | | {field: 'pendingProductionQuantity', title: t('processCard.quantityToScheduled'), width: 100}, |
| | | {field: 'pendingProductionArea', title: t('processCard.areaToScheduled'), width: 100}, |
| | | {field: 'productionScheduledQuantity', title: t('processCard.plannedProductionQuantity'), width: 100}, |
| | | {field: 'productionScheduledArea', title: t('processCard.plannedProductionArea'), width: 100}, |
| | | {field: 'reviewStatus', title: t('processCard.reviewedState'), width: 80}, |
| | | {field: 'reviewer', title: t('processCard.reviewed'), width: 80}, |
| | | {field: 'orderDetail.productName', title: t('order.product'), width: 140}, |
| | | {field: 'orderDetail.shape', title: t('order.shape'), width: 80}, |
| | | {field: 'notes', title: t('processCard.notes'), editRender: {name: 'input', attrs: {placeholder: ''}}, width: 120}, |
| | | {field: 'schedulingId', title: t('processCard.schedulingId'), width: 120}, |
| | |
| | | if ($table) { |
| | | const selectRecords = $table.getCheckboxRecords() |
| | | if (selectRecords.length == 0) { |
| | | ElMessage.warning("请勾选排产数据") |
| | | ElMessage.warning(t('processCard.checkProductionScheduling')) |
| | | return; |
| | | } |
| | | for (let i = 0; i < selectRecords.length; i++) { |
| | | let start = selectRecords[i].scheduled_start_time |
| | | let end = selectRecords[i].plan_end_time |
| | | let number = selectRecords[i].scheduling_quantity |
| | | let start = selectRecords[i].scheduledStartTime |
| | | let end = selectRecords[i].planEndTime |
| | | let number = selectRecords[i].schedulingQuantity |
| | | //计划开始、结束时间,排产数量不能为空 |
| | | if (start == null || end == null || number == null) { |
| | | ElMessage.warning("请填入对应的值再进行保存") |
| | | ElMessage.warning(t('processCard.saveCorrespondingValues')) |
| | | return; |
| | | } |
| | | } |
| | | let selectProcesses = value.value |
| | | let selectProcesses = processVal.value |
| | | if (selectProcesses == null || selectProcesses == "") { |
| | | ElMessage.warning("请选择排产工序") |
| | | ElMessage.warning(t('processCard.selectProductionSchedulingProcess')) |
| | | return; |
| | | } |
| | | |
| | |
| | | //保存排产数据 |
| | | request.post("/productionScheduling/addScheduling", schedulingData.value).then((res) => { |
| | | if (res.code == 200) { |
| | | ElMessage.success("保存成功") |
| | | ElMessage.success(t('basicData.msg.saveSuccess')) |
| | | // 启用保存 |
| | | gridOptions.toolbarConfig.buttons[2].disabled = false |
| | | router.push({ |
| | |
| | | const selectRecords = $table.getCheckboxRecords() |
| | | if ($table) { |
| | | if (selectRecords.length == 0) { |
| | | ElMessage.warning("请勾选排产数据") |
| | | ElMessage.warning(t('processCard.checkProductionScheduling')) |
| | | return; |
| | | } |
| | | const type = await VXETable.modal.confirm('您确定要删除该数据?') |
| | | const type = await VXETable.modal.confirm(t('processCard.deleteThisData')) |
| | | if (type === 'confirm') { |
| | | let schedulingData = ref({ |
| | | scheduling: selectRecords, |
| | |
| | | |
| | | request.post("/productionScheduling/deleteScheduling", schedulingData.value).then((res) => { |
| | | if (res.code == 200) { |
| | | ElMessage.success("删除成功") |
| | | ElMessage.success(t('basicData.msg.deleteSuccess')) |
| | | location.reload(); |
| | | } else { |
| | | ElMessage.warning(res.msg) |
| | |
| | | const selectRecords = $table.getCheckboxRecords() |
| | | if ($table) { |
| | | if (selectRecords.length == 0) { |
| | | ElMessage.warning("请勾选排产数据") |
| | | ElMessage.warning(t('processCard.checkProductionScheduling')) |
| | | return; |
| | | } |
| | | let schedulingData = ref({ |
| | |
| | | }) |
| | | request.post("/productionScheduling/examineScheduling", schedulingData.value).then((res) => { |
| | | if (res.code == 200) { |
| | | ElMessage.success("审核成功") |
| | | ElMessage.success(t('basicData.msg.ReviewSuccess')) |
| | | location.reload(); |
| | | } else { |
| | | ElMessage.warning(res.msg) |
| | |
| | | switch (menu.code) { |
| | | case 'copyChecked' : { |
| | | let result = toolbarButtonClickEvent() |
| | | if (result.cell === "scheduled_start_time" || result.cell === "plan_end_time") { |
| | | if (result.cell === "scheduledStartTime" || result.cell === "planEndTime" || result.cell === "schedulingQuantity"){ |
| | | if (result) { |
| | | const dataList = xGrid.value.getTableData().visibleData |
| | | const val = dataList[result.start][result.cell] |
| | |
| | | } |
| | | case 'copyAll' : { |
| | | let result = toolbarButtonClickEvent() |
| | | if (result.cell === "scheduled_start_time" || result.cell === "plan_end_time") { |
| | | if (result.cell === "scheduledStartTime" || result.cell === "planEndTime"|| result.cell === "schedulingQuantity") { |
| | | if (result) { |
| | | const dataList = xGrid.value.getTableData().visibleData |
| | | const val = dataList[result.start][result.cell] |
| | |
| | | } |
| | | case 'clearChecked' : { |
| | | let result = toolbarButtonClickEvent() |
| | | if (result.cell === "scheduled_start_time" || result.cell === "plan_end_time") { |
| | | if (result.cell === "scheduledStartTime" || result.cell === "planEndTime"|| result.cell === "schedulingQuantity") { |
| | | if (result) { |
| | | const dataList = xGrid.value.getTableData().visibleData |
| | | dataList.forEach((item, index) => { |
| | |
| | | let selectState = stateValue.value |
| | | table.forEach((selectRecords) => { |
| | | if (selectRecords.scheduling_quantity > selectRecords.pendingProductionQuantity && selectState == 1) { |
| | | ElMessage.warning("排产数量不能大于待排产数量") |
| | | ElMessage.warning(t('processCard.schedulingQuantityNoQuantityScheduled')) |
| | | //禁用保存按钮 |
| | | //gridOptions.toolbarConfig.buttons[2].disabled = true |
| | | } |
| | |
| | | <el-date-picker |
| | | v-model="form.date1" |
| | | :default-time="defaultTime" |
| | | end-placeholder="结束时间" |
| | | :start-placeholder="$t('basicData.startDate')" |
| | | :end-placeholder="$t('basicData.endDate')" |
| | | format="YYYY/MM/DD" |
| | | start-placeholder="开始时间" |
| | | type="daterange" |
| | | value-format="YYYY-MM-DD" |
| | | |
| | |
| | | |
| | | <el-input v-model="form.orderId" :placeholder="$t('order.orderId')" clearable style="width: 110px"></el-input> |
| | | |
| | | <el-select v-model="value" clearable default-value="default_city" style="width: 120px"> |
| | | <el-select v-model="processVal" clearable default-value="default_city" style="width: 120px"> |
| | | <el-option |
| | | v-for="item in titleSelectJson['processType']" |
| | | :key="item.id" |
| | |
| | | /> |
| | | </el-select> |
| | | |
| | | <el-select v-model="stateValue" class="m-2" placeholder="是否排产" style="width: 120px"> |
| | | <el-select v-model="stateValue" class="m-2" :placeholder="$t('processCard.whetherToScheduleProduction')" style="width: 120px"> |
| | | <el-option |
| | | v-for="item in stateOptions" |
| | | :key="item.value" |
| | |
| | | |
| | | </vxe-grid> |
| | | </div> |
| | | <div ref="cellArea" class="vxe-table--cell-area"> |
| | | <span class="vxe-table--cell-main-area"></span> |
| | | |
| | | <span class="vxe-table--cell-active-area"></span> |
| | | </div> |
| | | </template> |
| | | |
| | | <style scoped> |
| | |
| | | },//表头参数 |
| | | columns:[ |
| | | {type:'expand',fixed:"left",slots: { content:'content' },width: 50}, |
| | | { type: 'seq',fixed:"left", title: '自序', width: 50 }, |
| | | {field: 'order_id', title: '销售单号',filters:[{ data: '' }],slots: { filter: 'num1_filter' },width: 80 }, |
| | | {field: 'process_id', width: 140, title: '流程卡号' ,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'order_number', title: '订单序号' ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },}, |
| | | {field: 'technology_number', title: '小片顺序' ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },}, |
| | | {field: 'quantity', title: '数量',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, width: 80}, |
| | | {field: 'child_width', title: '宽', }, |
| | | {field: 'child_height', title: '高', }, |
| | | {field: 'area', title: '面积' ,showOverflow:"ellipsis"}, |
| | | {field: 'product_name', title: '产品名称', }, |
| | | {field: 'glass_child', title: '单片名称', }, |
| | | {field: 'founder', title: '分架员', }, |
| | | {field: 'splitFrame_time', title: '分架时间', }, |
| | | { type: 'seq',fixed:"left", title: t('basicData.Number'), width: 50 }, |
| | | {field: 'order_id', title: t('order.orderId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },width: 80 }, |
| | | {field: 'process_id', width: 140, title: t('processCard.processId') ,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'order_number', title: t('order.OrderNum') ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },}, |
| | | {field: 'technology_number', title: t('processCard.technologyNumber') ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },}, |
| | | {field: 'quantity', title: t('order.OrderNum'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, width: 80}, |
| | | {field: 'child_width', title: t('order.width'), }, |
| | | {field: 'child_height', title: t('order.height'), }, |
| | | {field: 'area', title: t('order.area') ,showOverflow:"ellipsis"}, |
| | | {field: 'product_name', title: t('order.product'), }, |
| | | {field: 'glass_child', title: t('reportingWorks.glassChild'), }, |
| | | {field: 'founder', title: t('processCard.founder'), }, |
| | | {field: 'splitFrame_time', title: t('processCard.splitFrameTime'), }, |
| | | ],//表头按钮 |
| | | |
| | | toolbarConfig: { |
| | |
| | | {type: 'seq', fixed: "left", title: t('basicData.Number'), width: 50}, |
| | | { |
| | | field: 'order_id', |
| | | title: '销售单号', |
| | | title: t('order.orderId'), |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'project', |
| | | title: '项目名称', |
| | | title: t('order.project'), |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'quantity', |
| | | title: '数量', |
| | | title: t('order.quantity'), |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'area', |
| | | title: '面积', |
| | | title: t('order.area'), |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | |
| | | <el-row :gutter="0"> |
| | | <el-date-picker |
| | | v-model="form.date1" |
| | | end-placeholder="结束时间" |
| | | :start-placeholder="$t('basicData.startDate')" |
| | | :end-placeholder="$t('basicData.endDate')" |
| | | format="YYYY/MM/DD" |
| | | start-placeholder="开始时间" |
| | | type="daterange" |
| | | value-format="YYYY-MM-DD" |
| | | |
| | |
| | | |
| | | <el-input v-model="form.orderId" :placeholder="$t('order.orderId')" clearable style="width: 110px"></el-input> |
| | | |
| | | <el-input v-model="form.project" clearable placeholder="项目名称" style="width: 110px"></el-input> |
| | | <el-input v-model="form.project" clearable :placeholder="$t('order.project')" style="width: 110px"></el-input> |
| | | |
| | | <el-button |
| | | id="select" |
| | |
| | | ElMessage.success(t('workOrder.deleteOk')) |
| | | router.push({path: '/main/processCard/SelectProcessCard', query: {random: Math.random()}}) |
| | | } else { |
| | | ElMessage.warning('删除失败,检查流程卡是否已报工') |
| | | ElMessage.warning(t('processCard.deleteOk')) |
| | | } |
| | | }) |
| | | |
| | |
| | | //定义变量 |
| | | const form = reactive({ |
| | | date1: '', |
| | | getSelect:'不可排版' |
| | | getSelect:t('processCard.composingNo') |
| | | }) |
| | | |
| | | |
| | |
| | | }) |
| | | |
| | | const sexOptions = ref([ |
| | | {label: '已排版', value: '已排版'}, |
| | | {label: '可排版', value: '可排版'}, |
| | | {label: '不可排版', value: '不可排版'} |
| | | {label: t('processCard.typesetter'), value: t('processCard.typesetter')}, |
| | | {label: t('processCard.composingOk'), value: t('processCard.composingOk')}, |
| | | {label: t('processCard.composingNo'), value: t('processCard.composingNo')} |
| | | ]) |
| | | |
| | | //表格按钮 |
| | |
| | | if ($table) { |
| | | const selectRecords = $table.getCheckboxRecords() |
| | | if (selectRecords.length == 0) { |
| | | ElMessage.warning("请勾选需要的数据") |
| | | ElMessage.warning(t('processCard.pleaseCheckTheRequiredData')) |
| | | return; |
| | | } |
| | | |
| | |
| | | //修改排版状态 |
| | | request.post("/processCard/updateComposing", composingData.value).then((res) => { |
| | | if (res.code == 200 && res.data === true) { |
| | | ElMessage.success("修改成功") |
| | | ElMessage.success(t('basicData.msg.saveSuccess')) |
| | | router.push({ |
| | | path: '/main/processCard/SelectProcessCard', |
| | | query: {random: Math.random()} |
| | | }) |
| | | } else { |
| | | |
| | | ElMessage.warning('修改失败') |
| | | ElMessage.warning(t('basicData.msg.saveFail')) |
| | | |
| | | } |
| | | }) |
| | |
| | | } |
| | | const checkBoxConfig = { |
| | | checkMethod: ({row}) => { |
| | | if (row['layoutStatus'] === '可排版' || row['layoutStatus'] === '已排版') { |
| | | if (row['layoutStatus'] === t('processCard.composingOk') || row['layoutStatus'] === t('processCard.typesetter')) { |
| | | return row.disable |
| | | } else { |
| | | return !row.disable |
| | |
| | | |
| | | <div v-for="(option, index) in column.filters" :key="index"> |
| | | <select v-model="option.data" @change="changeFilterEvent($event, option, $panel)" style="width: 100%"> |
| | | <option value="已排版" label="已排版"></option> |
| | | <option value="可排版" label="可排版"></option> |
| | | <option value="不可排版" label="不可排版"></option> |
| | | <option :value="$t('processCard.typesetter')" :label="$t('processCard.typesetter')"></option> |
| | | <option :value="$t('processCard.composingOk')" :label="$t('processCard.composingOk')"></option> |
| | | <option :value="$t('processCard.composingNo')" :label="$t('processCard.composingNo')"></option> |
| | | </select> |
| | | </div> |
| | | </div> |
| | |
| | | xGrid.value.reloadData(res.data.reportingWorkDetails) |
| | | let button = { |
| | | code: 'update', |
| | | name: '修改', |
| | | name: t('basicData.update'), |
| | | status: 'primary', |
| | | } |
| | | if(route.query.reviewStatus === "1"){ |
| | | button.name='审核' |
| | | button.name=t('basicData.review') |
| | | titleUploadData.value.qualityInspector=user.user.userName |
| | | } |
| | | |
| | |
| | | const optionVal = ref('') |
| | | |
| | | //班次 |
| | | const classesVal = ref('早班') |
| | | const classesVal = ref(t('reportingWorks.early')) |
| | | const classesOption = [ |
| | | { |
| | | value: '早班', |
| | | label: '早班', |
| | | value: t('reportingWorks.early'), |
| | | label: t('reportingWorks.early'), |
| | | }, |
| | | { |
| | | value: '晚班', |
| | | label: '晚班', |
| | | value: t('reportingWorks.nightShift'), |
| | | label: t('reportingWorks.nightShift'), |
| | | }, |
| | | ] |
| | | |
| | |
| | | const brokenNum = |
| | | (row.breakageQuantity === undefined || row.breakageQuantity===null) ? 0 : row.breakageQuantity |
| | | if (row.completedQuantity && !regex.test(row.completedQuantity)) { |
| | | return new Error('请输入整数,并且大于等于0') |
| | | return new Error(t('reportingWorks.enterIntegerGreaterThanEqualTo')) |
| | | }else if((row.completedQuantity*1+brokenNum*1)>row.quantity*1){ |
| | | return new Error((`${row.completedQuantity}+${brokenNum}>${row.quantity}`)) |
| | | } |
| | |
| | | case 'saveReportingWork': { |
| | | const errMap = await $grid.validate(true) |
| | | if (errMap) { |
| | | ElMessage.error(`校验不通过!`) |
| | | ElMessage.error(t('basicData.msg.checkoutLose')) |
| | | return |
| | | } |
| | | saveReportingWork(0,'save') |
| | |
| | | case 'saveReportingWorkReview': { |
| | | const errMap = await $grid.validate(true) |
| | | if (errMap) { |
| | | ElMessage.error(`校验不通过!`) |
| | | ElMessage.error(t('basicData.msg.checkoutLose')) |
| | | return |
| | | } |
| | | saveReportingWork(1,'save') |
| | |
| | | getQuantity() |
| | | const errMap = await $grid.validate(true) |
| | | if (errMap) { |
| | | ElMessage.error(`校验不通过!`) |
| | | ElMessage.error(t('basicData.msg.checkoutLose')) |
| | | return |
| | | } |
| | | saveReportingWork(0,'update') |
| | |
| | | validator ({ cellValue }) { |
| | | const regex = /^[1-9]\d*$/ |
| | | if (!regex.test(cellValue)) { |
| | | return new Error('输入大于0的整数') |
| | | return new Error(t('reportingWorks.enterIntegerGreaterThan')) |
| | | } |
| | | } |
| | | } |
| | |
| | | validator ({ row }) { |
| | | const regex = /^\s*$/i |
| | | if(row.available===true && (regex.test(row.returnProcess)==='' || row.returnProcess===null)){ |
| | | return new Error('可利用已选择,请选择返回工序') |
| | | return new Error(t('reportingWorks.availableOkReturnProcess')) |
| | | } |
| | | } |
| | | } |
| | | ], |
| | | breakageType: [ |
| | | { required: true, message: '请选择次破类型' } |
| | | { required: true, message: t('reportingWorks.selectBreakageType') } |
| | | ], |
| | | breakageReason: [ |
| | | { required: true, message: '请选择次破原因' } |
| | | { required: true, message: t('reportingWorks.selectBreakageReason') } |
| | | ], |
| | | responsibleProcess: [ |
| | | { required: true, message: '请选择责任工序' } |
| | | { required: true, message: t('reportingWorks.selectResponsibleProcess')} |
| | | ], |
| | | responsibleEquipment: [ |
| | | { required: true, message: '请选择责任设备' } |
| | | { required: true, message: t('reportingWorks.selectResponsibleEquipment') } |
| | | ], |
| | | responsibleTeam: [ |
| | | { required: true, message: '责任班组' } |
| | | { required: true, message: t('reportingWorks.selectResponsibleTeam') } |
| | | ], |
| | | }, |
| | | toolbarConfig: {//表头按钮 |
| | |
| | | } |
| | | const errMap = await brokenGrid.value.validate(true) |
| | | if (errMap) { |
| | | ElMessage.error(`校验不通过!`) |
| | | ElMessage.error(t('basicData.msg.checkoutLose')) |
| | | return false |
| | | } |
| | | let breakageQuantityCount = 0 |
| | |
| | | const saveReportingWork = (state,saveType) => { |
| | | |
| | | if(xGrid.value.getTableData().fullData.length===0){ |
| | | ElMessage.warning(`请选择流程卡数据`) |
| | | ElMessage.warning(t('reportingWorks.selectProcessCardData')) |
| | | return |
| | | } |
| | | const device = titleUploadData.value.deviceName |
| | | if(device === null || device === undefined || device === ''){ |
| | | ElMessage.error('请选择报工设备!') |
| | | ElMessage.error(t('reportingWorks.selectWorkReportingEquipment')) |
| | | return |
| | | } |
| | | const teamsGroupsName = titleUploadData.value.teamsGroupsName |
| | | if(teamsGroupsName === null || teamsGroupsName === undefined || teamsGroupsName === ''){ |
| | | ElMessage.error('请选择报工设备!') |
| | | ElMessage.error(t('reportingWorks.selectWorkReportingTeam')) |
| | | return |
| | | } |
| | | |
| | |
| | | return (a || b) |
| | | }) |
| | | if(requestDetailData.length === 0){ |
| | | ElMessage.warning('请填写至少一条损耗数和完工数大于0') |
| | | ElMessage.warning(t('reportingWorks.atLeastOneFinishedAndWornEligible')) |
| | | return false |
| | | } |
| | | |
| | |
| | | const saveReportingWorkRequest = (requestData) =>{ |
| | | request.post(`/reportingWork/saveReportingWork`,requestData).then(res =>{ |
| | | if (res.code == 200){ |
| | | ElMessage.success("报工成功") |
| | | 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) |
| | |
| | | } |
| | | request.post(`/reportingWork/updateReportingWork/${reviewState}`,requestData).then(res =>{ |
| | | if (res.code == 200){ |
| | | ElMessage.success("报工修改成功") |
| | | ElMessage.success(t('reportingWorks.successfulModificationOfWorkApplication')) |
| | | router.push({path:'/main/reportingWorks/AddReportingWork', |
| | | query:{ |
| | | processId:titleUploadData.value.processId, |
| | |
| | | const reviewReportingWork = () => { |
| | | const processId = titleUploadData.value.processId |
| | | if (processId.indexOf("/") < 0) { |
| | | ElMessage.warning("请输入正确格式流程卡") |
| | | ElMessage.warning(t('reportingWorks.correctFormatProcessCard')) |
| | | return |
| | | } |
| | | let indexOfChar = processId.indexOf("/") |
| | | let leftString = processId.slice(0, indexOfChar) |
| | | if (leftString.length < 14) { |
| | | ElMessage.warning("请输入正确位数的流程卡") |
| | | ElMessage.warning(t('reportingWorks.processCardCorrectNumberDigits')) |
| | | return |
| | | } |
| | | //工序 |
| | | let process = titleUploadData.value.thisProcess |
| | | if (process === "" || process == null) { |
| | | ElMessage.warning("请选择工序") |
| | | ElMessage.warning(t('reportingWorks.selectProcess')) |
| | | return |
| | | } |
| | | if(titleUploadData.value.previousProcess===''){ |
| | | ElMessage.warning("第一道工序不需要审核") |
| | | ElMessage.warning(t('reportingWorks.firstProcessNotReview')) |
| | | return |
| | | } |
| | | const reportWork = { |
| | |
| | | loadingFlag.value= true |
| | | request.post("/reportingWork/reviewReportingWork",reportWork).then((res) =>{ |
| | | if(res.code === '200'){ |
| | | ElMessage.success("审核成功") |
| | | ElMessage.success(t('basicData.msg.ReviewSuccess')) |
| | | router.push({path:'/main/reportingWorks/AddReportingWork', |
| | | query:{ |
| | | processId:titleUploadData.value.processId, |
| | |
| | | |
| | | let processId = titleUploadData.value.processId |
| | | if (processId == "" || processId == null) { |
| | | ElMessage.warning("流程卡号不能为空") |
| | | ElMessage.warning(t('reportingWorks.theProcessCardNumberCannotBeEmpty')) |
| | | return |
| | | } |
| | | let parts = processId.split('/'); |
| | | |
| | | if (processId.indexOf("/") < 0 ||parts[1].trim() == '') { |
| | | ElMessage.warning("请输入正确格式流程卡") |
| | | ElMessage.warning(t('reportingWorks.correctFormatProcessCard')) |
| | | return |
| | | } |
| | | let indexOfChar = processId.indexOf("/") |
| | | let leftString = processId.slice(0, indexOfChar) |
| | | if (leftString.length < 14) { |
| | | ElMessage.warning("请输入正确位数的流程卡") |
| | | ElMessage.warning(t('reportingWorks.processCardCorrectNumberDigits')) |
| | | return |
| | | } |
| | | //工序 |
| | | let process = titleUploadData.value.thisProcess |
| | | if (process == "" || process == null) { |
| | | ElMessage.warning("请选择工序") |
| | | ElMessage.warning(t('reportingWorks.selectProcess')) |
| | | return |
| | | } |
| | | |
| | | if (titleSelectJson.value.thisProcessType.indexOf(process) == -1 && process != "切割" && titleSelectJson.value.thisProcessType != "") { |
| | | ElMessage.warning("此工序不属于该流程卡") |
| | | ElMessage.warning(t('reportingWorks.thisProcessNotProcessCard')) |
| | | return |
| | | } |
| | | //匹配“/”前后字符串 |
| | |
| | | request.post(`/reportingWork/addSelectLastWork/${processIdStr}/${technologyStr}/${process}`).then((res) => { |
| | | if (res.code == 200) { |
| | | if(res.data.data==null){ |
| | | ElMessage.error("未查询到此流程卡数据") |
| | | ElMessage.error(t('reportingWorks.noDataThisProcessCard')) |
| | | return |
| | | } |
| | | |
| | |
| | | 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='晚班' |
| | | if(parseInt(hours)>=17 && parseInt(hours)<8)titleUploadData.value.classes=t('reportingWorks.nightShift') |
| | | return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; // 返回格式化后的时间字符串 |
| | | } |
| | | |
| | |
| | | <template> |
| | | <div style="height: 100%;width: 100%"> |
| | | <div id="head" style="height: 5%;width: 100%;margin-bottom: 5px"> |
| | | <el-input :disabled="inputDisabled" v-if="titleUploadData.reportingWorkId" v-model="titleUploadData.reportingWorkId" placeholder="报工编号" style="width: 200px" /> |
| | | <el-input :disabled="inputDisabled" v-model="titleUploadData.processId" placeholder="流程卡号" style="width: 200px" @keyup.enter.native="getWork();getQuantity()"/> |
| | | <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" v-model="titleUploadData.thisProcess" clearable placeholder="请选择工序" style="width: 120px" |
| | | <el-select :disabled="inputDisabled" v-model="titleUploadData.thisProcess" clearable :placeholder="$t('reportingWorks.selectProcess')" style="width: 120px" |
| | | @change="getWork();getQuantity()"> |
| | | <el-option |
| | | v-for="item in titleSelectJson['processType']" |
| | |
| | | columns:[ |
| | | {type:'expand',fixed:"left",slots: { content:'content' },width: 50}, |
| | | // { type: 'seq',fixed:"left", title: '自序', width: 50 }, |
| | | {field: 'order_number',fixed:"left", width: 120, title: '序号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true, }, |
| | | {field: 'glass_child',fixed:"left",width: 120, title: '单片名称', sortable: true,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'technology_number', width: 130,title: '小片顺序', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'glass_address',width: 120, title: '片标记',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'child_width', width: 100,title: '宽', sortable: true}, |
| | | {field: 'child_height',width: 100, title: '高', sortable: true}, |
| | | {field: 'shape',width: 120, title: '形状', sortable: true,showOverflow:"ellipsis"}, |
| | | {field: 'completed_quantity',width: 120, title: '完工数量', sortable: true}, |
| | | {field: 'breakage_quantity',width: 120, title: '次破数量', sortable: true}, |
| | | {field: 'available',width: 120, title: '可利用', sortable: true}, |
| | | {field: 'return_process',width: 120, title: '退回工序', sortable: true}, |
| | | {field: 'breakage_type',width: 120, title: '次破类型', sortable: true}, |
| | | {field: 'breakage_reason',width: 120, title: '次破原因', sortable: true}, |
| | | {field: 'responsible_equipment',width: 120, title: '责任设备', sortable: true}, |
| | | {field: 'responsible_process',width: 120, title: '责任工序', sortable: true}, |
| | | {field: 'responsible_team',width: 120, title: '责任班组', sortable: true}, |
| | | {field: 'responsible_personnel',width: 120, title: '责任人员', sortable: true}, |
| | | {field: 'order_number',fixed:"left", width: 120, title: t('order.OrderNum'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true, }, |
| | | {field: 'glass_child',fixed:"left",width: 120, title: t('reportingWorks.glassChild'), sortable: true,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'technology_number', width: 130,title: t('processCard.technologyNumber'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'glass_address',width: 120, title: t('reportingWorks.glassAddress'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'child_width', width: 100,title: t('order.width'), sortable: true}, |
| | | {field: 'child_height',width: 100, title: t('order.height'), sortable: true}, |
| | | {field: 'shape',width: 120, title: t('order.shape'), sortable: true,showOverflow:"ellipsis"}, |
| | | {field: 'completed_quantity',width: 120, title: t('reportingWorks.thisCompletedQuantity'), sortable: true}, |
| | | {field: 'breakage_quantity',width: 120, title: t('reportingWorks.thisWornQuantity'), sortable: true}, |
| | | {field: 'available',width: 120, title: t('reportingWorks.available'), sortable: true}, |
| | | {field: 'return_process',width: 120, title: t('reportingWorks.returnProcess'), sortable: true}, |
| | | {field: 'breakage_type',width: 120, title: t('reportingWorks.breakageType'), sortable: true}, |
| | | {field: 'breakage_reason',width: 120, title: t('reportingWorks.breakageReason'), sortable: true}, |
| | | {field: 'responsible_equipment',width: 120, title: t('reportingWorks.responsibleEquipment'), sortable: true}, |
| | | {field: 'responsible_process',width: 120, title: t('reportingWorks.responsibleProcess'), sortable: true}, |
| | | {field: 'responsible_team',width: 120, title: t('reportingWorks.responsibleTeam'), sortable: true}, |
| | | {field: 'responsible_personnel',width: 120, title: t('reportingWorks.responsiblePersonnel'), sortable: true}, |
| | | ],//表头按钮 |
| | | |
| | | toolbarConfig: { |
| | | buttons: [ |
| | | {code: 'print_lck', name: '审核通过',status:'primary' }, |
| | | {code: 'print_lck', name: t('reportingWorks.passAudit'),status:'primary' }, |
| | | ], |
| | | // import: false, |
| | | // export: true, |
| | |
| | | return[ |
| | | columns.map((column, columnIndex) => { |
| | | if (columnIndex === 0) { |
| | | return '合计:' |
| | | return t('basicData.total') |
| | | } |
| | | if (footList.includes(column.field)) { |
| | | return sumNum(data, column.field) |
| | |
| | | const options = [ |
| | | { |
| | | value: '1', |
| | | label: '未质检', |
| | | label: t('reportingWorks.unqualified'), |
| | | }, |
| | | { |
| | | value: '2', |
| | | label: '已质检', |
| | | label: t('reportingWorks.qualified'), |
| | | }, |
| | | ] |
| | | |
| | |
| | | },//表头参数 |
| | | columns:[ |
| | | {type:'expand',fixed:"left",slots: { content:'content' }}, |
| | | {title: '操作', width: 100, slots: { default: 'button_slot' },fixed:"left"}, |
| | | { type: 'seq',fixed:"left", title: '自序',}, |
| | | {title: t('basicData.operate'), width: 100, slots: { default: 'button_slot' },fixed:"left"}, |
| | | { type: 'seq',fixed:"left", title: t('basicData.Number'),}, |
| | | |
| | | {field: 'reportingWorkId',width: 130, title: '报工编号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, }, |
| | | {field: 'reportingWorkTime',width: 120, title: '报工时间',showOverflow:"ellipsis" }, |
| | | {field: 'processId',width: 130, title: '流程卡号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'order.project',width: 120, title: '项目名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'order.customerName',width: 120, title: '客户名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'thisProcess',width: 100, title: '本工序',showOverflow:"ellipsis"}, |
| | | {field: 'thisCompletedQuantity',width: 100, title: '完工数量'}, |
| | | {field: 'thisWornQuantity', width: 100,title: '次破数量'}, |
| | | {field: 'teamsGroupsName',width: 110, title: '报工班组'}, |
| | | {field: 'deviceName',width: 110, title: '报工设备'}, |
| | | {field: 'previousProcess', width: 100,title: '上工序'}, |
| | | {field: 'nextProcess',width: 100, title: '下工序'}, |
| | | {field: 'qualityInspector',width: 120, title: '质检员'}, |
| | | {field: 'qualityInsTime',width: 120, title: '质检时间'}, |
| | | {field: 'damageDetails.qualityInsStatus',width: 120, title: '质检状态'} |
| | | {field: 'reportingWorkId',width: 130, title: t('reportingWorks.reportingWorkId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, }, |
| | | {field: 'reportingWorkTime',width: 120, title: t('reportingWorks.reportingWorkTime'),showOverflow:"ellipsis" }, |
| | | {field: 'processId',width: 130, title: t('processCard.processId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'order.project',width: 120, title: t('order.project'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'order.customerName',width: 120, title: t('customer.customerName'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'thisProcess',width: 100, title: t('reportingWorks.thisProcess'),showOverflow:"ellipsis"}, |
| | | {field: 'thisCompletedQuantity',width: 100, title: t('reportingWorks.thisCompletedQuantity')}, |
| | | {field: 'thisWornQuantity', width: 100,title: t('reportingWorks.thisWornQuantity')}, |
| | | {field: 'teamsGroupsName',width: 110, title: t('reportingWorks.teamsType')}, |
| | | {field: 'deviceName',width: 110, title: t('reportingWorks.deviceType')}, |
| | | {field: 'previousProcess', width: 100,title: t('reportingWorks.previousProcess')}, |
| | | {field: 'nextProcess',width: 100, title: t('reportingWorks.nextProcess')}, |
| | | {field: 'qualityInspector',width: 120, title: t('reportingWorks.qualityInspector')}, |
| | | {field: 'qualityInsTime',width: 120, title: t('reportingWorks.qualityInsTime')}, |
| | | {field: 'damageDetails.qualityInsStatus',width: 120, title: t('reportingWorks.qualityInsStatus')} |
| | | ],//表头按钮 |
| | | |
| | | toolbarConfig: { |
| | |
| | | /> |
| | | </el-select> |
| | | |
| | | <el-input v-model="form.processId" clearable placeholder="流程卡号" style="width: 130px"></el-input> |
| | | <el-input v-model="form.processId" clearable :placeholder="$t('processCard.processId')" style="width: 130px"></el-input> |
| | | |
| | | <el-button |
| | | @click="getWorkOrder" |
| | |
| | | size="small"> |
| | | {{ $t('basicData.edit') }} |
| | | </el-button> |
| | | <el-button v-if="row.damageDetails.qualityInsStatus===1" @click="getTableRow(row,'setType')" link type="primary" size="small">审核</el-button> |
| | | <el-button v-else disabled @click="getTableRow(row,'setType')" link type="primary" size="small">审核</el-button> |
| | | <el-button v-if="row.damageDetails.qualityInsStatus===1" @click="getTableRow(row,'setType')" link type="primary" size="small">{{ $t('basicData.review') }}</el-button> |
| | | <el-button v-else disabled @click="getTableRow(row,'setType')" link type="primary" size="small">{{ $t('basicData.review') }}</el-button> |
| | | </template> |
| | | |
| | | <template #num1_filter="{ column, $panel }"> |
| | |
| | | <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/reportingWorks/AddReportingWork' }">{{$t('reportingWorks.addReportingWorks')}}</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/reportingWorks/SelectReportingWorks' }">{{$t('reportingWorks.WorkReportingManagement')}}</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(3)" :class="indexFlag===3?'indexTag':''" :to="{ path: '/main/reportingWorks/QualityInspectionReview' }">{{$t('reportingWorks.qualityInspectionReview')}}</el-breadcrumb-item> |
| | | <el-breadcrumb-item :to="{ path: '/main/processCard/SelectPrintFlowCard' }" style="display: none">打印</el-breadcrumb-item> |
| | | <el-breadcrumb-item :to="{ path: '/main/processCard/SelectPrintFlowCard' }" style="display: none">{{$t('basicData.print')}}</el-breadcrumb-item> |
| | | </el-breadcrumb> |
| | | </div> |
| | | |
| | |
| | | ElMessage.success(t('workOrder.deleteOk')) |
| | | router.push({path: '/main/reportingWorks/SelectReportingWorks', query: {random:Math.random()}}) |
| | | } else { |
| | | ElMessage.warning('删除失败,检查下工序是否已报工') |
| | | ElMessage.warning(t('processCard.deleteNoProcedure')) |
| | | } |
| | | }) |
| | | break |
| | |
| | | },//表头参数 |
| | | columns:[ |
| | | {type:'expand',fixed:"left",slots: { content:'content' },width: 50}, |
| | | {title: '操作', width: 140, slots: { default: 'button_slot' },fixed:"left"}, |
| | | { type: 'seq',fixed:"left", title: '自序', width: 50 }, |
| | | {field: 'reportingWorkId', width: 120, title: '报工编号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, }, |
| | | {field: 'reportingWorkTime',width: 120, title: '报工时间' ,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'orderId', width: 130,title: '销售单号' ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'processId', width: 130,title: '流程卡号' ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'order.project',width: 120, title: '项目名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, }, |
| | | {field: 'order.batch', width: 100,title: '批次' ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {title: t('basicData.operate'), width: 140, slots: { default: 'button_slot' },fixed:"left"}, |
| | | { type: 'seq',fixed:"left", title: t('basicData.Number'), width: 50 }, |
| | | {field: 'reportingWorkId', width: 120, title: t('reportingWorks.reportingWorkId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, }, |
| | | {field: 'reportingWorkTime',width: 120, title: t('reportingWorks.reportingWorkTime') ,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'orderId', width: 130,title: t('order.orderId') ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'processId', width: 130,title: t('processCard.processId') ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'order.project',width: 120, title: t('order.project'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, }, |
| | | {field: 'order.batch', width: 100,title: t('order.batch') ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | |
| | | {field: 'thisProcess',width: 100, title: '本工序',filters:[{ data: '' }],slots: { filter: 'num1_filter' } }, |
| | | {field: 'thisCompletedQuantity',width: 120, title: '本工序完工' }, |
| | | {field: 'completedArea', width: 120,title: '完工面积', }, |
| | | {field: 'thisWornQuantity',width: 120, title: '本工序次破', }, |
| | | {field: 'wornArea',width: 120, title: '次破面积', }, |
| | | {field: 'deviceName', width: 100,title: '报工设备', }, |
| | | {field: 'teamsGroupsName',width: 120, title: '报工班组', }, |
| | | {field: 'reviewedState',width: 120, title: '审核状态', }, |
| | | {field: 'thisProcess',width: 100, title: t('reportingWorks.thisProcess'),filters:[{ data: '' }],slots: { filter: 'num1_filter' } }, |
| | | {field: 'thisCompletedQuantity',width: 120, title: t('reportingWorks.thisCompletedQuantity') }, |
| | | {field: 'completedArea', width: 120,title: t('reportingWorks.completedArea'), }, |
| | | {field: 'thisWornQuantity',width: 120, title: t('reportingWorks.thisWornQuantity'), }, |
| | | {field: 'wornArea',width: 120, title: t('reportingWorks.wornArea'), }, |
| | | {field: 'deviceName', width: 100,title: t('reportingWorks.deviceType'), }, |
| | | {field: 'teamsGroupsName',width: 120, title: t('reportingWorks.teamsType'), }, |
| | | {field: 'reviewedState',width: 120, title: t('processCard.reviewedState'), }, |
| | | |
| | | ],//表头按钮 |
| | | |
| | |
| | | ElMessage.success(t('basicData.msg.saveSuccess')) |
| | | router.push({path:'/main/rework/AddRework',query:{random:Math.random()}}) |
| | | }else{ |
| | | ElMessage.warning("保存失败") |
| | | ElMessage.warning(t('basicData.msg.saveFail')) |
| | | router.push("/login") |
| | | } |
| | | }).catch((err)=>{ |
| | | ElMessage.error('系统错误') |
| | | ElMessage.error(t('basicData.msg.ServerConnectionError')) |
| | | router.push("/login") |
| | | }) |
| | | break |
| | |
| | | router.push({path:'/main/rework/SelectRework',query:{random:Math.random()}}) |
| | | |
| | | }else{ |
| | | ElMessage.warning("审核失败") |
| | | ElMessage.warning(t('basicData.msg.reviewFail')) |
| | | router.push("/login") |
| | | } |
| | | }).catch((err)=>{ |
| | | ElMessage.error('系统错误') |
| | | ElMessage.error(t('basicData.msg.ServerConnectionError')) |
| | | router.push("/login") |
| | | }) |
| | | } |
| | |
| | | <el-date-picker |
| | | v-model="selectDate" |
| | | type="daterange" |
| | | start-placeholder="开始时间" |
| | | end-placeholder="结束时间" |
| | | :start-placeholder="$t('basicData.startDate')" |
| | | :end-placeholder="$t('basicData.endDate')" |
| | | format="YYYY-MM-DD" |
| | | value-format="YYYY-MM-DD" |
| | | |
| | |
| | | |
| | | <!--左边固定显示的插槽--> |
| | | <template #button_slot="{ row }"> |
| | | <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">转工单</el-button> |
| | | <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">删除</el-button> |
| | | <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">{{ $t('workOrder.transferOrder') }}</el-button> |
| | | <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">{{ $t('basicData.delete') }}</el-button> |
| | | </template> |
| | | |
| | | <template #num1_filter="{ column, $panel }"> |
| | |
| | | router.push({path: '/main/workOrder/SelectWorkOrder', query: {startTime:startTime,endTime:endTime,state:state,random:Math.random()}}) |
| | | } else { |
| | | |
| | | ElMessage.warning('删除失败,检查是否已分架') |
| | | ElMessage.warning(t('workOrder.deleteNo')) |
| | | |
| | | } |
| | | }) |
| | |
| | | , width: 130 |
| | | }, |
| | | {field: 'order.batch', title: t('order.batch'), filters: [{data: ''}], slots: {filter: 'num1_filter'}, width: 110}, |
| | | {field: 'order.project', title: '项目名称', filters: [{data: ''}], slots: {filter: 'num1_filter'}, width: 210}, |
| | | {field: 'order.orderType', title: '订单类型', showOverflow: "ellipsis", width: 110}, |
| | | {field: 'orderDetail.grossArea', title: '面积', width: 70}, |
| | | {field: 'orderDetail.quantity', title: '数量',}, |
| | | {field: 'order.creator', title: '创建人',}, |
| | | {field: 'order.project', title: t('order.project'), filters: [{data: ''}], slots: {filter: 'num1_filter'}, width: 210}, |
| | | {field: 'order.orderType', title: t('order.orderType'), showOverflow: "ellipsis", width: 110}, |
| | | {field: 'orderDetail.grossArea', title: t('order.orderType'), width: 70}, |
| | | {field: 'orderDetail.quantity', title: t('order.grossArea'),}, |
| | | {field: 'order.creator', title: t('order.creator'),}, |
| | | ],//表头按钮 |
| | | data: null,//表格数据 |
| | | toolbarConfig: { |
| | |
| | | <div id="div-title"> |
| | | <el-breadcrumb :separator-icon="ArrowRight"> |
| | | <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/workOrder/SelectWorkOrder' }">{{$t('workOrder.workOrder')}}</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/processCard/SelectPrintFlowCard' }" style="display: none">打印</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/processCard/SelectPrintFlowCard' }" style="display: none">{{$t('basicData.print')}}</el-breadcrumb-item> |
| | | </el-breadcrumb> |
| | | </div> |
| | | <div id="main-body"> |
| | |
| | | <div id="main-div"> |
| | | <div id="div-title"> |
| | | <el-breadcrumb :separator-icon="ArrowRight"> |
| | | <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/orderBasicData/searchBasicData' }">基础数据</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/orderBasicData/searchGlassType' }">玻璃类别</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/orderBasicData/searchBasicData' }">{{ $t('orderBasicData.basicType') }}</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/orderBasicData/searchGlassType' }">{{ $t('orderBasicData.glassCategory') }}</el-breadcrumb-item> |
| | | <el-breadcrumb-item v-show="false" :to="{ path: '/main/order/orderReport' }">报表</el-breadcrumb-item> |
| | | </el-breadcrumb> |
| | | </div> |
| | |
| | | input:'' |
| | | }) |
| | | let options=ref([ |
| | | { "label": "订单", |
| | | { "label": t('orderBasicData.order'), |
| | | "value": "order", |
| | | "children": [ |
| | | { |
| | | "label": "订单类型", |
| | | "label": t('orderBasicData.orderType'), |
| | | "value": "orderType" |
| | | }, |
| | | { |
| | | "label": "订单分类", |
| | | "label": t('orderBasicData.orderClassify'), |
| | | "value": "orderClassify" |
| | | }, |
| | | { |
| | | "label": "商标选项", |
| | | "label": t('orderBasicData.icon'), |
| | | "value": "icon" |
| | | }, |
| | | { |
| | | "label": "包装方式", |
| | | "label": t('orderBasicData.packType'), |
| | | "value": "packType" |
| | | }, |
| | | { |
| | | "label": "铝条方式", |
| | | "label": t('orderBasicData.alType'), |
| | | "value": "alType" |
| | | }, |
| | | { |
| | | "label": "业务员", |
| | | "label": t('orderBasicData.saleMan'), |
| | | "value": "saleMan" |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | "label": "产品", |
| | | "label": t('orderBasicData.product'), |
| | | "value": "product", |
| | | "children": [ |
| | | { |
| | | "label": "材料厚度", |
| | | "label": t('orderBasicData.stuffThickness'), |
| | | "value": "stuffThickness" |
| | | }, |
| | | { |
| | | "label": "材料颜色", |
| | | "label": t('orderBasicData.stuffColor'), |
| | | "value": "stuffColor" |
| | | }, |
| | | { |
| | | "label": "工艺属性", |
| | | "label": t('orderBasicData.stuffCraft'), |
| | | "value": "stuffCraft" |
| | | }, |
| | | { |
| | | "label": "玻璃位置", |
| | | "label": t('orderBasicData.stuffPosition'), |
| | | "value": "stuffPosition" |
| | | }, |
| | | { |
| | | "label": "lowe", |
| | | "label": t('orderBasicData.stuffLowE'), |
| | | "value": "stuffLowE" |
| | | }, |
| | | { |
| | | "label": "夹胶厚度", |
| | | "label": t('orderBasicData.InterlayerThickness'), |
| | | "value": "InterlayerThickness" |
| | | }, |
| | | { |
| | | "label": "夹胶类型", |
| | | "label": t('orderBasicData.InterlayerType'), |
| | | "value": "InterlayerType" |
| | | }, |
| | | { |
| | | "label": "夹胶颜色", |
| | | "label": t('orderBasicData.InterlayerColor'), |
| | | "value": "InterlayerColor" |
| | | }, |
| | | { |
| | | "label": "工艺流程", |
| | | "label": t('orderBasicData.process'), |
| | | "value": "process" |
| | | }, |
| | | { |
| | | "label": "中空厚度", |
| | | "label": t('orderBasicData.hollowThickness'), |
| | | "value": "hollowThickness" |
| | | }, |
| | | { |
| | | "label": "充气方式", |
| | | "label": t('orderBasicData.hollowGasType'), |
| | | "value": "hollowGasType" |
| | | }, |
| | | { |
| | | "label": "封胶", |
| | | "label": t('orderBasicData.hollowType'), |
| | | "value": "hollowType" |
| | | }, |
| | | { |
| | | "label": "默认胶深", |
| | | "label": t('orderBasicData.hollowGlueDepth'), |
| | | "value": "hollowGlueDepth" |
| | | } |
| | | ] |
| | |
| | | { |
| | | "children": [ |
| | | { |
| | | "label": "付款条件", |
| | | "label": t('orderBasicData.paymentTerms'), |
| | | "value": "paymentTerms" |
| | | }, |
| | | { |
| | | "label": "收款方式", |
| | | "label": t('orderBasicData.payMethod'), |
| | | "value": "payMethod" |
| | | } |
| | | ], |
| | | "label": "送货", |
| | | "label": t('orderBasicData.delivery'), |
| | | "value": "delivery" |
| | | } |
| | | ]) |
| | |
| | | const saveBasicData = () =>{ |
| | | request.post(`/basicData/addBasicData`, basic.value).then(res => { |
| | | if (res.data) { |
| | | ElMessage.success('保存成功') |
| | | ElMessage.success(t('basicData.msg.saveSuccess')) |
| | | emit('gaveParent', true) |
| | | } |
| | | }) |
| | |
| | | submitArr.basicName = basic.value.input |
| | | request.post(`/basicData/updateBasicData`, submitArr).then(res => { |
| | | if (res.data) { |
| | | ElMessage.success('修改成功') |
| | | ElMessage.success(t('basicData.msg.saveSuccess')) |
| | | emit('gaveParent', true) |
| | | } |
| | | }) |
| | |
| | | <template> |
| | | <div> |
| | | <el-row> |
| | | <el-col :span="4">基础类型:</el-col> |
| | | <el-col :span="4">{{ $t('orderBasicData.basicType') }}:</el-col> |
| | | <el-col :span="12"> |
| | | <el-cascader |
| | | v-model="basic.basicType" |
| | |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="4">名称:</el-col> |
| | | <el-col :span="4">{{ $t('orderBasicData.name') }}:</el-col> |
| | | <el-col :span="12"> |
| | | <el-input v-model="basic.input"/> |
| | | </el-col> |
| | |
| | | <el-row> |
| | | <el-col :span="4"></el-col> |
| | | <el-col :span="12"> |
| | | <el-button v-show="!props.rowIndex" @click="saveBasicData" type="primary">新增</el-button> |
| | | <el-button v-show="props.rowIndex" @click="updateBasicData" type="primary">修改</el-button> |
| | | <el-button v-show="!props.rowIndex" @click="saveBasicData" type="primary">{{ $t('basicData.insert') }}</el-button> |
| | | <el-button v-show="props.rowIndex" @click="updateBasicData" type="primary">{{ $t('basicData.update') }}</el-button> |
| | | |
| | | </el-col> |
| | | </el-row> |
| | |
| | | //表头参数 |
| | | columns:[ |
| | | {title: t('basicData.operate'), width: 110, slots: { default: 'button_slot' },fixed:"left",}, |
| | | {type: 'seq', title: '序号', width: 80 ,fixed:"left",}, |
| | | {field:'basicName',title: '名称'}, |
| | | {field:'createTime',title: '创建日期'}, |
| | | {type: 'seq', title: t('basicData.number'), width: 80 ,fixed:"left",}, |
| | | {field:'basicName',title: t('orderBasicData.name')}, |
| | | {field:'createTime',title: t('basicData.creationTime')}, |
| | | |
| | | |
| | | ], |
| | |
| | | //表头按钮 |
| | | toolbarConfig: { |
| | | buttons: [ |
| | | {'code': 'add', 'name': '新增',status: 'primary'}, |
| | | {'code': 'add', 'name': t('basicData.insert'),status: 'primary'}, |
| | | ], |
| | | |
| | | // import: false, |
| | |
| | | //表头参数 |
| | | columns:[ |
| | | {title: t('basicData.operate'), width: 110, slots: { default: 'button_slot' },fixed:"left",}, |
| | | {type: 'seq', title: '序号', width: 80 ,fixed:"left",}, |
| | | {field:'level',title: '类别等级'}, |
| | | {field:'typeName',title: '名称'}, |
| | | {field:'createTime',title: '创建日期'} |
| | | {type: 'seq', title: t('basicData.number'), width: 80 ,fixed:"left",}, |
| | | {field:'level',title: t('orderBasicData.level')}, |
| | | {field:'typeName',title: t('orderBasicData.name')}, |
| | | {field:'createTime',title: t('basicData.creationTime')} |
| | | ], |
| | | |
| | | //表头按钮 |
| | | toolbarConfig: { |
| | | buttons: [ |
| | | {'code': 'add', 'name': '新增',status: 'primary'}, |
| | | {'code': 'add', 'name': t('basicData.insert'),status: 'primary'}, |
| | | ], |
| | | |
| | | // import: false, |
| | |
| | | const glassType = reactive([ |
| | | { |
| | | value:1, |
| | | label:'一级类别' |
| | | label:t('orderBasicData.firstLevel') |
| | | }, |
| | | { |
| | | value: 2, |
| | | label: '二级类别', |
| | | label: t('orderBasicData.towLevel'), |
| | | children: [] |
| | | } |
| | | ]) |
| | |
| | | submit.value.type = type |
| | | request.post(`/basicGlassType/add`, submit.value).then(res => { |
| | | if (res.code==='200') { |
| | | ElMessage.success('保存成功') |
| | | ElMessage.success(t('basicData.msg.saveSuccess')) |
| | | router.push({ |
| | | path:'/main/orderBasicData/searchGlassType', |
| | | query:{random:Math.random() |
| | |
| | | <el-input v-model="submit.value"/> |
| | | </el-row> |
| | | <el-row> |
| | | <el-button v-if="!rowIndex" @click="saveBasicData('add')" type="primary">新增</el-button> |
| | | <el-button v-else @click="saveBasicData('update')" type="primary">修改</el-button> |
| | | <el-button v-if="!rowIndex" @click="saveBasicData('add')" type="primary">{{ $t('basicData.insert') }}</el-button> |
| | | <el-button v-else @click="saveBasicData('update')" type="primary">{{ $t('basicData.update') }}</el-button> |
| | | </el-row> |
| | | </el-dialog> |
| | | |
| | |
| | | resetForm() |
| | | ElMessage.success(t('basicData.msg.saveSuccess')) |
| | | }else{ |
| | | ElMessage.warning("保存失败") |
| | | ElMessage.warning(t('basicData.msg.saveFail')) |
| | | router.push("/login") |
| | | } |
| | | }).catch((err)=>{ |
| | | ElMessage.error('系统错误') |
| | | ElMessage.error(t('basicData.msg.ServerConnectionError')) |
| | | router.push("/login") |
| | | }) |
| | | |
| | |
| | | |
| | | request.post("/customer/deleteCustomer", flowData.value).then((res) => { |
| | | if(res.code==200 && res.data===true){ |
| | | ElMessage.success("删除成功") |
| | | ElMessage.success(t('basicData.msg.deleteSuccess')) |
| | | router.push({path:'/main/customer/selectCustomer',query:{random:Math.random()}}) |
| | | }else{ |
| | | ElMessage.warning("删除失败") |
| | | ElMessage.warning(t('basicData.msg.deleteFail')) |
| | | router.push("/login") |
| | | } |
| | | }).catch((err)=>{ |
| | | ElMessage.error('系统错误') |
| | | ElMessage.error(t('basicData.msg.ServerConnectionError')) |
| | | router.push("/login") |
| | | }) |
| | | break |
| | |
| | | v-if="userStore.user.permissions.indexOf('selectCustomer.edit') > -1" |
| | | link type="primary" size="small">{{$t('basicData.edit')}}</el-button> |
| | | <el-button @click="getTableRow(row,'customerOrder')" |
| | | link type="primary" size="small">客户订单</el-button> |
| | | <el-popconfirm @confirm="getTableRow(row,'delete')" title="确定删除?"> |
| | | link type="primary" size="small">{{$t('customer.customerOrders')}}</el-button> |
| | | <el-popconfirm @confirm="getTableRow(row,'delete')" :title="$t('searchOrder.deleteConfirm')"> |
| | | <template #reference> |
| | | <el-button link type="primary" size="small">{{ $t('basicData.delete') }}</el-button> |
| | | </template> |
| | |
| | | {field: 'order.customerId',width:120, title: t('customer.customerNumber')}, |
| | | {field: 'order.customerName',width:120, title: t('customer.customerName')}, |
| | | {field: 'quantity',width:120, title: t('order.quantity')}, |
| | | {field: 'productId',width:120, title: "产品编号",filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'productName',width:120, title: "产品名称",filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'shape',width:120, title: "形状",filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'width',width:120, title: "宽度",filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'height',width:120, title: "高度",filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'productId',width:120, title: t('order.productId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'productName',width:120, title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'shape',width:120, title: t('order.shape'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'width',width:120, title: t('order.width'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'height',width:120, title: t('order.height'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.project',width:120, title: t('order.project'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.batch',width:120, title: t('order.batch'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.money',width:120, title: "订单金额",filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.money',width:120, title: t('customer.orderAmount'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'area',width:120, title: t('productStock.totalArea')}, |
| | | {field: 'order.orderType',width:120, title: t('order.orderType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.salesman',width:120, title:t('order.salesman'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.createTime',width:120, title:"创建时间"}, |
| | | {field: 'order.createTime',width:120, title:t('basicData.creationTime')}, |
| | | |
| | | |
| | | ],//表头按钮 |
| | |
| | | <el-date-picker |
| | | v-model="selectDate" |
| | | type="daterange" |
| | | start-placeholder="开始时间" |
| | | end-placeholder="结束时间" |
| | | :start-placeholder="t('basicData.startDate')" |
| | | :end-placeholder="t('basicData.endDate')" |
| | | format="YYYY-MM-DD" |
| | | value-format="YYYY-MM-DD" |
| | | |
| | |
| | | body: { |
| | | options: [ |
| | | [ |
| | | { code: 'copyChecked', name: '选中相同', prefixIcon: 'vxe-icon-copy', visible: true, disabled: false }, |
| | | { code: 'otherMoney', name: '其他金额', prefixIcon: 'vxe-icon-chart-bar-x', visible: true, disabled: false } |
| | | { code: 'copyChecked', name: t('basicData.selectSame'), prefixIcon: 'vxe-icon-copy', visible: true, disabled: false }, |
| | | { code: 'otherMoney', name: t('basicData.otherAmounts'), prefixIcon: 'vxe-icon-chart-bar-x', visible: true, disabled: false } |
| | | ] |
| | | ] |
| | | } |
| | |
| | | ElMessage.success(t('delivery.deliveryNoteSubmittedSuccessfully')) |
| | | router.push({path: '/main/delivery/selectDelivery', query:{random:Math.random()}}) |
| | | }else{ |
| | | ElMessage.warning("保存失败") |
| | | ElMessage.warning(t('basicData.msg.saveFail')) |
| | | router.push("/login") |
| | | } |
| | | }).catch((err)=>{ |
| | | ElMessage.error('系统错误') |
| | | ElMessage.error(t('basicData.msg.ServerConnectionError')) |
| | | router.push("/login") |
| | | }) |
| | | break |
| | |
| | | ElMessage.success(t('basicData.msg.ReviewSuccess')) |
| | | router.push({path: '/main/delivery/selectDelivery', query:{random:Math.random()}}) |
| | | } else { |
| | | ElMessage.warning("审核失败") |
| | | ElMessage.warning(t('basicData.msg.reviewFail')) |
| | | router.push("/login") |
| | | } |
| | | }).catch((err)=>{ |
| | | ElMessage.error('系统错误') |
| | | ElMessage.error(t('basicData.msg.ServerConnectionError')) |
| | | router.push("/login") |
| | | }) |
| | | break |
| | |
| | | ElMessage.success(t('basicData.msg.cancelReviewSuccess')) |
| | | router.push({path: '/main/delivery/selectDelivery', query:{random:Math.random()}}) |
| | | } else { |
| | | ElMessage.warning("审核失败") |
| | | ElMessage.warning(t('basicData.msg.reviewFail')) |
| | | router.push("/login") |
| | | } |
| | | }).catch((err)=>{ |
| | | ElMessage.error('系统错误') |
| | | ElMessage.error(t('basicData.msg.ServerConnectionError')) |
| | | router.push("/login") |
| | | }) |
| | | break |
| | |
| | | </div> |
| | | |
| | | <el-dialog v-model="otherMoneyVisible" |
| | | :title="'其他金额'" |
| | | :title="$t('basicData.otherAmounts')" |
| | | :close-on-click-modal="false" |
| | | :close-on-press-escape="false" |
| | | :before-close="closeOtherMoneyDialog" |
| | |
| | | > |
| | | <el-dropdown @command="handleCommand"> |
| | | <span class="el-dropdown-link" style="font-weight: 700;outline: none;"> |
| | | 报表 |
| | | {{$t('basicData.reportForms')}} |
| | | <el-icon class="el-icon--right"> |
| | | <arrow-down /> |
| | | </el-icon> |
| | | </span> |
| | | <template #dropdown> |
| | | <el-dropdown-menu> |
| | | <el-dropdown-item command="/main/delivery/deliveryReport" >发货明细报表</el-dropdown-item> |
| | | <el-dropdown-item command="/main/delivery/deliveryProductReport">发货产品分类报表</el-dropdown-item> |
| | | <el-dropdown-item command="/main/delivery/deliveryReport" >{{$t('delivery.shipmentDetailsReport')}}</el-dropdown-item> |
| | | <el-dropdown-item command="/main/delivery/deliveryProductReport">{{$t('delivery.shipmentProductClassificationReport')}}</el-dropdown-item> |
| | | </el-dropdown-menu> |
| | | </template> |
| | | </el-dropdown> |
| | |
| | | import BasicTable from "@/components/BasicTable.vue" |
| | | import request from "@/utils/request" |
| | | import { ref} from "vue" |
| | | import {useI18n} from "vue-i18n"; |
| | | |
| | | const { t } = useI18n() |
| | | const childrenData = ref({ |
| | | columns:[ |
| | | {type:'expand',fixed:"left",width: 80}, |
| | | {type: 'seq',fixed:"left", title: '自序', width: 80 }, |
| | | {field: 'deliveryId',width:120, title: '发货单号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'deliveryNumber',width:120, title: '发货序号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'orderDetail.productId',width:120, title: '产品编号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'orderDetail.productName',width:120, title: '产品名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.paymentTerms',width:120, title: '付款条件',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.project',width:140, title: '项目名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'quantity',width:120, title: '数量', sortable: true}, |
| | | {field: 'area',width:120, title: '面积', sortable: true}, |
| | | {field: 'money',width:120, title: '金额', sortable: true}, |
| | | {field: 'delivery.customerId',width:120, title: '客户编号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.customerName',width:120, title: '客户名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.deliveryDate',width:120, title: '送货日期',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.payMethod',width:120, title: '支付方式',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.payDate',width:120, title: '支付日期',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.salesman',width:120, title: '销售员',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.creator',width:120, title: '发货员',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.contacts',width:120, title: '联系人',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.contactNumber',width:120, title: '联系电话',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.deliveryAddress',width:150, title: '送货地址',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'orderId',width:120, title: '销售单号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'orderNumber',width:120, title: '订单序号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'deliveryDetailRemakes',width:120, title: '备注',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'createTime',width:120, title: '报表日期',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {type: 'seq',fixed:"left", title: t('basicData.Number'), width: 80 }, |
| | | {field: 'deliveryId',width:120, title: t('delivery.deliveryNoteId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'deliveryNumber',width:120, title: t('delivery.deliveryNoteNumber'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'orderDetail.productId',width:120, title: t('order.productId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'orderDetail.productName',width:120, title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.paymentTerms',width:120, title: t('delivery.paymentTerms'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.project',width:140, title: t('order.project'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'quantity',width:120, title: t('order.quantity'), sortable: true}, |
| | | {field: 'area',width:120, title: t('productStock.totalArea'), sortable: true}, |
| | | {field: 'money',width:120, title: t('delivery.money'), sortable: true}, |
| | | {field: 'delivery.customerId',width:120, title: t('customer.customerNumber'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.customerName',width:120, title: t('customer.customerName'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.deliveryDate',width:120, title: t('delivery.deliveryDate'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.payMethod',width:120, title: t('delivery.paymentMethod'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.payDate',width:120, title: t('delivery.deliveryDate'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.salesman',width:120, title: t('delivery.salesman'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.creator',width:120, title: t('delivery.shipper'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.contacts',width:120, title: t('delivery.contacts'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.contactNumber',width:120, title: t('delivery.contactNumber'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.deliveryAddress',width:150, title: t('delivery.shippingAddress'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'orderId',width:120, title: t('order.orderId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'orderNumber',width:120, title: t('order.OrderNum'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'deliveryDetailRemakes',width:120, title: t('basicData.remarks'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'createTime',width:120, title: t('basicData.reportData'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | |
| | | ],//表格表头字段 |
| | | data:[],//表格数据 |
| | | url :'/Delivery/getSelectDeliveryDetailProductReport', |
| | | exportUrl :'/Delivery/exportDeliveryDetailProductReport', |
| | | exportName:'发货明细产品分类报表', |
| | | exportName:t('delivery.shipmentProductClassificationReport'), |
| | | footList:['quantity','area','money'] |
| | | }) |
| | | |
| | |
| | | import BasicTable from "@/components/BasicTable.vue" |
| | | import request from "@/utils/request" |
| | | import { ref} from "vue" |
| | | import {useI18n} from "vue-i18n"; |
| | | |
| | | const { t } = useI18n() |
| | | const childrenData = ref({ |
| | | columns:[ |
| | | {type:'expand',fixed:"left",width: 80}, |
| | | {type: 'seq',fixed:"left", title: '自序', width: 80 }, |
| | | {field: 'deliveryId',width:120, title: '发货单号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'deliveryNumber',width:120, title: '发货序号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.paymentTerms',width:120, title: '付款条件',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.project',width:140, title: '项目名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'quantity',width:120, title: '数量',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'area',width:120, title: '面积',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'money',width:120, title: '金额',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.customerId',width:120, title: '客户编号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.customerName',width:120, title: '客户名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.deliveryDate',width:120, title: '送货日期',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.payMethod',width:120, title: '支付方式',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.payDate',width:120, title: '支付日期',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.salesman',width:120, title: '销售员',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.creator',width:120, title: '发货员',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.contacts',width:120, title: '联系人',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.contactNumber',width:120, title: '联系电话',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.deliveryAddress',width:150, title: '送货地址',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'orderId',width:120, title: '销售单号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'orderNumber',width:120, title: '订单序号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'deliveryDetailRemakes',width:120, title: '备注',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'createTime',width:120, title: '报表日期',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {type: 'seq',fixed:"left", title: t('basicData.Number'), width: 80 }, |
| | | {field: 'deliveryId',width:120, title: t('delivery.deliveryNoteId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'deliveryNumber',width:120, title: t('delivery.deliveryNoteNumber'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.paymentTerms',width:120, title: t('delivery.paymentTerms'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.project',width:140, title: t('order.project'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'quantity',width:120, title: t('order.quantity'), sortable: true}, |
| | | {field: 'area',width:120, title: t('productStock.totalArea'), sortable: true}, |
| | | {field: 'money',width:120, title: t('delivery.money'), sortable: true}, |
| | | {field: 'delivery.customerId',width:120, title: t('customer.customerNumber'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.customerName',width:120, title: t('customer.customerName'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.deliveryDate',width:120, title: t('delivery.deliveryDate'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.payMethod',width:120, title: t('delivery.paymentMethod'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.payDate',width:120, title: t('delivery.deliveryDate'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.salesman',width:120, title: t('delivery.salesman'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.creator',width:120, title: t('delivery.shipper'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.contacts',width:120, title: t('delivery.contacts'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.contactNumber',width:120, title: t('delivery.contactNumber'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'delivery.deliveryAddress',width:150, title: t('delivery.shippingAddress'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'orderId',width:120, title: t('order.orderId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'orderNumber',width:120, title: t('order.OrderNum'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'deliveryDetailRemakes',width:120, title: t('basicData.remarks'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'createTime',width:120, title: t('basicData.reportData'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | |
| | | ],//表格表头字段 |
| | | data:[],//表格数据 |
| | | url :'/Delivery/getSelectDeliveryDetailReport', |
| | | exportUrl :'/Delivery/exportDeliveryDetailReport', |
| | | exportName:'发货明细报表', |
| | | exportName:t('delivery.shipmentDetailsReport'), |
| | | footList:['quantity','area','money'] |
| | | }) |
| | | |
| | |
| | | ElMessage.success(t('searchOrder.msgDeleteSuccess')) |
| | | router.push({path:'/main/delivery/selectDelivery',query:{random:Math.random()}}) |
| | | }else{ |
| | | ElMessage.warning("删除失败") |
| | | ElMessage.warning(t('basicData.msg.deleteFail')) |
| | | router.push("/login") |
| | | } |
| | | }).catch((err)=>{ |
| | | ElMessage.error('系统错误') |
| | | ElMessage.error(t('basicData.msg.ServerConnectionError')) |
| | | router.push("/login") |
| | | }) |
| | | |
| | |
| | | body: { |
| | | options: [ |
| | | [ |
| | | { code: 'getProcessList', name: "打印", prefixIcon: 'vxe-icon-file-txt', visible: true} |
| | | { code: 'getProcessList', name: t('basicData.print'), prefixIcon: 'vxe-icon-file-txt', visible: true} |
| | | ] |
| | | ] |
| | | } |
| | |
| | | <el-date-picker |
| | | v-model="selectDate" |
| | | type="daterange" |
| | | start-placeholder="开始时间" |
| | | end-placeholder="结束时间" |
| | | :start-placeholder="t('basicData.startDate')" |
| | | :end-placeholder="t('basicData.endDate')" |
| | | format="YYYY-MM-DD" |
| | | value-format="YYYY-MM-DD" |
| | | |
| | |
| | | v-if="userStore.user.permissions.indexOf('selectDelivery.edit') > -1" |
| | | link type="primary" size="small">{{$t('basicData.edit')}}</el-button> |
| | | <el-button @click="getTableRow(row,'printing')" :disabled="row.deliveryState!==2" link type="primary" size="small">打印</el-button> |
| | | <el-popconfirm @confirm="getTableRow(row,'delete')" title="确定删除?"> |
| | | <el-popconfirm @confirm="getTableRow(row,'delete')" :title="$t('searchOrder.deleteConfirm')"> |
| | | <template #reference> |
| | | <el-button :disabled="row.deliveryState===2" link type="primary" size="small">{{ $t('basicData.delete') }}</el-button> |
| | | </template> |
| | |
| | | <el-date-picker |
| | | v-model="selectDate" |
| | | type="daterange" |
| | | start-placeholder="开始时间" |
| | | end-placeholder="结束时间" |
| | | :start-placeholder="$t('basicData.startDate')" |
| | | :end-placeholder="$t('basicData.endDate')" |
| | | format="YYYY-MM-DD" |
| | | value-format="YYYY-MM-DD" |
| | | |
| | |
| | | const xGrid = ref() |
| | | let cellArea = ref() |
| | | const shapeList = ref([ |
| | | {label:'普形',value:'1'}, {label:'异形',value:'2'} |
| | | {label:t('order.universalShape'),value:'1'}, {label:t('order.alien'),value:'2'} |
| | | ]) |
| | | |
| | | // 定义表头上传数据 |
| | |
| | | { 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: 'computedMoney', name: t('basicData.calculateAmount'), prefixIcon: 'vxe-icon-chart-bar-x', visible: true, disabled: true }, |
| | | { code: 'errorArea', name: '误差结算面积', prefixIcon: 'vxe-icon-chart-bar-x', visible: true, disabled: false }, |
| | | { code: 'otherMoney', name: '其他金额', prefixIcon: 'vxe-icon-chart-bar-x', visible: true, disabled: false }, |
| | | { code: 'sizeCheck', name: '尺寸审核', prefixIcon: 'vxe-icon-eye-fill', visible: true, disabled: true } |
| | | { code: 'errorArea', name: t('basicData.errorSettlementArea'), prefixIcon: 'vxe-icon-chart-bar-x', visible: true, disabled: false }, |
| | | { code: 'otherMoney', name: t('basicData.otherAmounts'), prefixIcon: 'vxe-icon-chart-bar-x', visible: true, disabled: false }, |
| | | { code: 'sizeCheck', name: t('basicData.sizeReview'), prefixIcon: 'vxe-icon-eye-fill', visible: true, disabled: true } |
| | | ] |
| | | ] |
| | | } |
| | |
| | | ) |
| | | if(errorAreaList.length){ |
| | | ElMessageBox.confirm( |
| | | `存在 |
| | | ${errorAreaList.length} |
| | | 条结算单片面积小于 |
| | | ${errorArea.value}是否按照${errorArea.value}计算`, |
| | | /*t('order.msg.calculationAreaPrompt1')+ |
| | | ${errorAreaList.length}+ |
| | | t('order.msg.calculationAreaPrompt2')+ |
| | | ${errorArea.value}+ |
| | | t('order.msg.calculationAreaPrompt3')+ |
| | | ${errorArea.value}+*/ |
| | | t('order.msg.calculationAreaPrompt4'), |
| | | 'Warning', |
| | | { |
| | | confirmButtonText: '确定', |
| | | cancelButtonText: '取消', |
| | | confirmButtonText: t('basicData.confirmButtonText'), |
| | | cancelButtonText: t('basicData.cancelButtonText'), |
| | | type: 'warning', |
| | | } |
| | | ).then(()=>{ |
| | |
| | | } |
| | | const fullData = xGrid.value.getTableData().fullData |
| | | if (!fullData.length){ |
| | | ElMessage.warning("表格中无产品数据") |
| | | ElMessage.warning(t('basicData.msg.noProductDataInTheTable')) |
| | | } |
| | | fullData.forEach((item,index) => { |
| | | if( !isNaN(item.computeArea*1) && item.computeArea != null && item.computeArea*1 < errorArea.value){ |
| | |
| | | } |
| | | const length = xGrid.value.getTableData().fullData.length |
| | | if(length>maxTableLen.value){ |
| | | ElMessage.warning('表格数据超过最大限制') |
| | | ElMessage.warning(t('basicData.msg.tableDataExceedsMaximumLimit')) |
| | | return |
| | | } |
| | | if(evnt.$event.keyCode === 13 ){ |
| | |
| | | <el-col :span="2"><el-text>{{$t('order.calculateType')}}:</el-text></el-col> |
| | | <el-col :span="2"> |
| | | <el-select @change="changeCalculateType" v-model="titleUploadData.calculateType" placeholder=" " > |
| | | <el-option :value="1" label="面积金额(单片)"/> |
| | | <el-option :value="2" label="面积金额(总面积)"/> |
| | | <el-option :value="1" :label="t('order.areaAmountPerPiece')"/> |
| | | <el-option :value="2" :label="t('order.areaAmountAge')"/> |
| | | </el-select> |
| | | </el-col> |
| | | <el-col :span="2"><el-text>*{{$t('order.salesman')}}:</el-text></el-col> |
| | |
| | | <vxe-button @click="importEvent">{{$t('order.import')}}</vxe-button> |
| | | </template> |
| | | <template #default_shape="{ row }"> |
| | | <span>{{ row.shape=='1'?'普形':row.shape=='2'?'异形':null }}</span> |
| | | <span>{{ row.shape=='1'? t('order.universalShape'):row.shape=='2'? t('order.alien'):null }}</span> |
| | | </template> |
| | | <template #shape_edit="{ row }"> |
| | | <vxe-select v-model="row.shape" transfer :options="shapeList" placeholder=" "/> |
| | |
| | | <el-col :span="10"> |
| | | <el-input |
| | | v-model="errorArea" |
| | | :placeholder="'误差值'" |
| | | :placeholder="$t('order.errorValue')" |
| | | /> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <el-button @click="errorAreaComputed">确认</el-button> |
| | | <el-button @click="errorAreaComputed">{{$t('basicData.confirmButtonText')}}</el-button> |
| | | </el-col> |
| | | </el-row> |
| | | </el-dialog> |
| | | <el-dialog v-model="otherMoneyVisible" |
| | | :title="'其他金额'" |
| | | :title="$t('basicData.otherAmounts')" |
| | | :close-on-click-modal="false" |
| | | :close-on-press-escape="false" |
| | | :before-close="closeOtherMoneyDialog" |
| | |
| | | <el-dialog |
| | | id="sizeCheck" |
| | | v-model="sizeCheckVisible" |
| | | :title="'尺寸校验'" |
| | | :title="$t('basicData.sizeReview')" |
| | | :close-on-click-modal="false" |
| | | :close-on-press-escape="false" |
| | | style="width: 614px;height:445px " |
| | |
| | | > |
| | | <el-dropdown @command="handleCommand"> |
| | | <span class="el-dropdown-link" style="font-weight: 700;outline: none;"> |
| | | 报表 |
| | | {{ $t('basicData.reportForms') }} |
| | | <el-icon class="el-icon--right"> |
| | | <arrow-down /> |
| | | </el-icon> |
| | |
| | | <template #dropdown> |
| | | <el-dropdown-menu> |
| | | <el-dropdown-item command="/main/order/orderReport" >{{ $t('order.orderReport') }}</el-dropdown-item> |
| | | <el-dropdown-item command="/main/order/orderProductSummaryReport">订单明细汇总</el-dropdown-item> |
| | | <el-dropdown-item command="/main/order/orderProductSummaryReport">{{ $t('order.orderDetailsSummary') }}</el-dropdown-item> |
| | | </el-dropdown-menu> |
| | | </template> |
| | | </el-dropdown> |
| | |
| | | import BasicTable from "@/components/BasicTable.vue" |
| | | import { ref} from "vue" |
| | | import request from "@/utils/request" |
| | | import {useI18n} from "vue-i18n"; |
| | | |
| | | const { t } = useI18n() |
| | | const childrenData = ref({ |
| | | columns:[ |
| | | {type:'expand',fixed:"left",width: 80,slots: { content:'content' }}, |
| | | {type: 'seq',fixed:"left", title: '自序', width: 80 }, |
| | | {field: 'order.orderType',width:120, title: '订单类型',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.customerName',width:120, title: '客户名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.project',width:120, title: '项目名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.orderId',width:120, title: '销售单号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.batch',width:120, title: '批次',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'productId',width:120, title: '产品编号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'productName',width:120, title: '产品名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {type: 'seq',fixed:"left", title: t('basicData.Number'), width: 80 }, |
| | | {field: 'order.orderType',width:120, title: t('order.orderType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.customerName',width:120, title: t('customer.customerName'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.project',width:120, title: t('order.project'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.orderId',width:120, title: t('order.orderId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.batch',width:120, title: t('order.batch'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'productId',width:120, title: t('order.productId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'productName',width:120, title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | //{field: 'orderNumber',width:120, title: '订单序号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | // {field: 'buildingNumber',width:120, title: '楼号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | //{field: 'width',width:120, title: '宽',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | //{field: 'height',width:120, title: '高',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'quantity',width:120, title: '数量',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | //{field: 'bendRadius',width:120, title: '弯钢弧度',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'grossArea',width:120, title: '实际面积',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'computeGrossArea',width:150, title: '结算总面积',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | //{field: 'shape',width:120, title: '形状',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | //{field: 'edgingType',width:120, title: '磨边类型',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | //{field: 'order.processingNote',width:140, title: '主加工要求',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | //{field: 'processingNote',width:120, title: '加工要求',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | //{field: 'order.remarks',width:120, title: '备注',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.icon',width:120, title: '商标选项',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.packType',width:120, title: '包装方式',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | //{field: 'width',width:120, title: t('order.width'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | //{field: 'height',width:120, title: t('order.height'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'quantity',width:120, title: t('order.quantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | //{field: 'bendRadius',width:120, title: t('order.bendRadius'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'grossArea',width:120, title: t('order.trueGrossArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'computeGrossArea',width:150, title: t('order.computeGrossArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | //{field: 'shape',width:120, title: t('order.shape'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | //{field: 'edgingType',width:120, title: t('order.edgingType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | //{field: 'order.processingNote',width:140, title: t('order.processingNotes'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | //{field: 'processingNote',width:120, title: t('order.processingNote'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | //{field: 'order.remarks',width:120, title: t('basicData.remarks'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.icon',width:120, title: t('order.icon'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.packType',width:120, title: t('order.packType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | // {field: 'prodID',width:120, title: '工艺流程',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'perimeter',width:120, title: '周长',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'price',width:120, title: '单价',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'grossAmount',width:120, title: '金额',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.alType',width:120, title: '铝条方式',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'perimeter',width:120, title: t('order.perimeter'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'price',width:120, title: t('order.price'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'grossAmount',width:120, title: t('order.grossAmount'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.alType',width:120, title: t('order.alType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | // {field: 'prodID',width:120, title: '订单类型',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.salesman',width:120, title: '业务员',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.deliveryAddress',width:120, title: '送货地址',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.creator',width:120, title: '制单员',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'createTime',width:120, title: '建立时间',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'totalThickness',width:120, title: '总厚度',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'levelOne',width:120, title: '产品大类',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'levelTwo',width:120, title: '产品小类',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.customerBatch',width:120, title: '客户批次',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true} |
| | | {field: 'order.salesman',width:120, title: t('order.salesman'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.deliveryAddress',width:120, title: t('order.deliveryAddress'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.creator',width:120, title: t('order.creator'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'createTime',width:120, title: t('basicData.creationTime'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'totalThickness',width:120, title:t('order.totalThickness'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'levelOne',width:120, title: t('order.levelOne'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'levelTwo',width:120, title: t('order.levelTwo'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.customerBatch',width:120, title: t('order.customerBatch'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true} |
| | | ],//表格表头字段 |
| | | data:[],//表格数据 |
| | | url :'/order/getOrderProductSummary', |
| | | exportUrl :'/order/getOrderProductSummary', |
| | | exportName:t('order.orderDetailsSummaryReport'), |
| | | footList:['quantity','grossArea','computeGrossArea','perimeter','price','grossAmount'] |
| | | }) |
| | | |
| | |
| | | import BasicTable from "@/components/BasicTable.vue" |
| | | import { ref} from "vue" |
| | | import request from "@/utils/request" |
| | | import {useI18n} from "vue-i18n"; |
| | | |
| | | const { t } = useI18n() |
| | | const childrenData = ref({ |
| | | columns:[ |
| | | {type:'expand',fixed:"left",width: 80,slots: { content:'content' }}, |
| | | {type: 'seq',fixed:"left", title: '自序', width: 80 }, |
| | | {field: 'order.orderType',width:120, title: '订单类型',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.customerName',width:120, title: '客户名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.project',width:120, title: '项目名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.orderId',width:120, title: '销售单号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.batch',width:120, title: '批次',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'productId',width:120, title: '产品编号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'productName',width:120, title: '产品名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {type: 'seq',fixed:"left", title: t('basicData.Number'), width: 80 }, |
| | | {field: 'order.orderType',width:120, title: t('order.orderType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.customerName',width:120, title: t('customer.customerName'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.project',width:120, title: t('order.project'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.orderId',width:120, title: t('order.orderId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.batch',width:120, title: t('order.batch'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'productId',width:120, title: t('order.productId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'productName',width:120, title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'orderNumber',width:120, title: '订单序号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | // {field: 'buildingNumber',width:120, title: '楼号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'width',width:120, title: '宽',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'height',width:120, title: '高',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'quantity',width:120, title: '数量',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'bendRadius',width:120, title: '弯钢弧度',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'grossArea',width:120, title: '实际面积',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'computeGrossArea',width:150, title: '结算总面积',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'shape',width:120, title: '形状',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'edgingType',width:120, title: '磨边类型',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.processingNote',width:140, title: '主加工要求',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'processingNote',width:120, title: '加工要求',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.remarks',width:120, title: '备注',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.icon',width:120, title: '商标选项',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.packType',width:120, title: '包装方式',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'width',width:120, title: t('order.width'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'height',width:120, title: t('order.height'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'quantity',width:120, title: t('order.quantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'bendRadius',width:120, title: t('order.bendRadius'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'grossArea',width:120, title: t('order.trueGrossArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'computeGrossArea',width:150, title: t('order.computeGrossArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'shape',width:120, title: t('order.shape'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'edgingType',width:120, title: t('order.edgingType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.processingNote',width:140, title: t('order.processingNotes'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'processingNote',width:120, title: t('order.processingNote'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.remarks',width:120, title: t('basicData.remarks'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.icon',width:120, title: t('order.icon'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.packType',width:120, title: t('order.packType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | // {field: 'prodID',width:120, title: '工艺流程',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'perimeter',width:120, title: '周长',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'price',width:120, title: '单价',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'grossAmount',width:120, title: '金额',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.alType',width:120, title: '铝条方式',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'perimeter',width:120, title: t('order.perimeter'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'price',width:120, title: t('order.price'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'grossAmount',width:120, title: t('order.grossAmount'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.alType',width:120, title: t('order.alType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | // {field: 'prodID',width:120, title: '订单类型',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.salesman',width:120, title: '业务员',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.deliveryAddress',width:120, title: '送货地址',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.creator',width:120, title: '制单员',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'createTime',width:120, title: '建立时间',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'totalThickness',width:120, title: '总厚度',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'levelOne',width:120, title: '产品大类',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'levelTwo',width:120, title: '产品小类',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.customerBatch',width:120, title: '客户批次',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true} |
| | | {field: 'order.salesman',width:120, title: t('order.salesman'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.deliveryAddress',width:120, title: t('order.deliveryAddress'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.creator',width:120, title: t('order.creator'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'createTime',width:120, title: t('basicData.creationTime'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'totalThickness',width:120, title:t('order.totalThickness'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'levelOne',width:120, title: t('order.levelOne'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'levelTwo',width:120, title: t('order.levelTwo'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}, |
| | | {field: 'order.customerBatch',width:120, title: t('order.customerBatch'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true} |
| | | ],//表格表头字段 |
| | | data:[],//表格数据 |
| | | url :'/order/getOrderReport', |
| | | exportUrl :'/order/exportOrderReport', |
| | | exportName:'订单明细报表', |
| | | exportName:t('order.orderDetailsReport'), |
| | | footList:['quantity','grossArea','computeGrossArea','perimeter','price','grossAmount'] |
| | | }) |
| | | |
| | |
| | | v-model="tabsValue" |
| | | class="demo-tabs" |
| | | style="width: 100%;height: 100%" > |
| | | <el-tab-pane label="详情" name="1" > |
| | | <el-tab-pane :label="$t('order.details')" name="1" > |
| | | <order-detail |
| | | v-if="tabsValue==='1'" |
| | | :orderId="rowClickIndex===null?null:rowClickIndex.orderId" |
| | | /> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="工艺 " name="2"> |
| | | <el-tab-pane :label="$t('order.workmanship')" name="2"> |
| | | <order-craft-detail |
| | | v-if="tabsValue==='2'" |
| | | :orderId="rowClickIndex===null?null:rowClickIndex.orderId" |
| | | /> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="流程卡" name="3"> |
| | | <el-tab-pane :label="$t('order.processCard')" name="3"> |
| | | <order-process |
| | | v-if="tabsValue==='3'" |
| | | :orderId="rowClickIndex===null?null:rowClickIndex.orderId" |
| | |
| | | let dialogTableVisible = ref(false) |
| | | let craftVisible = ref(false) |
| | | const xGrid = ref() |
| | | const trademarkLocation=ref(['左上','右上','左下','右下']) |
| | | const trademarkLocation=ref([t('craft.upperLeft'),t('craft.upperRight'),t('craft.lowLeft'),t('craft.lowRight')]) |
| | | const gridOptions = reactive({ |
| | | border: "full",//表格加边框 |
| | | keepSource: true,//保持源数据 |
| | |
| | | tag3:true, |
| | | xMargin:30, |
| | | yMargin:30, |
| | | location:'左下' |
| | | location:t('craft.lowLeft') |
| | | } |
| | | if(row.icon!=null){ |
| | | trademarkAttr.value = JSON.parse(row.icon) |
| | |
| | | |
| | | <!--左边固定显示的插槽--> |
| | | <template #button_slot="{ row }"> |
| | | <el-button @click="updateCraft(row)" link type="primary" size="small">{{t('craft.updateCraft')}}</el-button> |
| | | <el-button @click="updateTrademark(row)" link type="primary" size="small">修改商标</el-button> |
| | | <el-button @click="updateCraft(row)" link type="primary" size="small">{{$t('craft.updateCraft')}}</el-button> |
| | | <el-button @click="updateTrademark(row)" link type="primary" size="small">{{$t('craft.modifyTrademark')}}</el-button> |
| | | </template> |
| | | |
| | | <template #num1_filter="{ column, $panel }"> |
| | |
| | | <el-dialog |
| | | id="trademark" |
| | | v-model="trademarkVisible" |
| | | :title="'商标参数'" |
| | | :title="$t('craft.TrademarkAttribute')" |
| | | :close-on-click-modal="false" |
| | | :close-on-press-escape="false" |
| | | style="width: 922px;height:443px ; |
| | | position: relative;" > |
| | | <div style="width: 50%;height: 100%;float: left"> |
| | | <el-row style=""> |
| | | <el-col :span="4">商标选项:</el-col> |
| | | <el-col :span="4">{{$t('craft.TrademarkOptions')}}:</el-col> |
| | | <el-col :span="6"> |
| | | <el-select v-model="trademarkAttr.trademark" |
| | | > |
| | |
| | | </el-row> |
| | | |
| | | <el-row> |
| | | <el-col :span="4">X轴镜像:</el-col> |
| | | <el-col :span="4">{{$t('craft.xImage')}}:</el-col> |
| | | <el-col :span="6"> |
| | | <el-select v-model="trademarkAttr.xImage"> |
| | | <el-option :value="true" :label="'是'"/> |
| | |
| | | </el-row> |
| | | |
| | | <el-row> |
| | | <el-col :span="4">Y轴镜像:</el-col> |
| | | <el-col :span="4">{{$t('craft.yImage')}}:</el-col> |
| | | <el-col :span="6"> |
| | | <el-select v-model="trademarkAttr.yImage"> |
| | | <el-option :value="true" :label="'是'"/> |
| | |
| | | </el-row> |
| | | |
| | | <el-row> |
| | | <el-col :span="4">打标使能:</el-col> |
| | | <el-col :span="4">{{$t('craft.tag')}}:</el-col> |
| | | <el-col :span="6"> |
| | | <el-select v-model="trademarkAttr.tag"> |
| | | <el-option :value="true" :label="'是'"/> |
| | |
| | | </el-row> |
| | | |
| | | <el-row> |
| | | <el-col :span="4">二维码打印1:</el-col> |
| | | <el-col :span="4">{{$t('craft.tag2')}}:</el-col> |
| | | <el-col :span="6"> |
| | | <el-select v-model="trademarkAttr.tag2"> |
| | | <el-option :value="true" :label="'是'"/> |
| | |
| | | </el-row> |
| | | |
| | | <el-row> |
| | | <el-col :span="4">二维码打印2:</el-col> |
| | | <el-col :span="4">{{$t('craft.tag3')}}:</el-col> |
| | | <el-col :span="6"> |
| | | <el-select v-model="trademarkAttr.tag3"> |
| | | <el-option :value="true" :label="'是'"/> |
| | |
| | | </el-row> |
| | | |
| | | <el-row> |
| | | <el-col :span="4">X轴边距:</el-col> |
| | | <el-col :span="4">{{$t('craft.xMargin')}}:</el-col> |
| | | <el-col :span="6"> |
| | | <el-input-number v-model="trademarkAttr.xMargin"/> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row> |
| | | <el-col :span="4">Y轴边距:</el-col> |
| | | <el-col :span="4">{{$t('craft.yMargin')}}:</el-col> |
| | | <el-col :span="6"> |
| | | <el-input-number v-model="trademarkAttr.yMargin"/> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row> |
| | | <el-col :span="4">商标位置:</el-col> |
| | | <el-col :span="4">{{$t('craft.location')}}:</el-col> |
| | | <el-col :span="25"> |
| | | <el-radio v-model="trademarkAttr.location" v-for="item in trademarkLocation" :label="item" /> |
| | | </el-col> |
| | |
| | | </div> |
| | | <div style="width: 400px;height: 250px;border: 2px solid #000;float: left;position: relative;"> |
| | | <div |
| | | v-if="tagCheck('左上')" |
| | | v-if="tagCheck(t('craft.upperLeft'))" |
| | | style="float: left;width: 60px;height: 60px;margin-left: 1rem"> |
| | | <el-row> |
| | | <el-col :span="20"><el-image :class="{'xStyle':trademarkAttr.xImage,'yStyle':trademarkAttr.yImage}" src="/trademark.png"/></el-col> |
| | |
| | | </div> |
| | | |
| | | <div |
| | | v-if="tagCheck('右上')" |
| | | v-if="tagCheck(t('craft.upperRight'))" |
| | | style="float: right;width: 60px;height: 60px;margin-right: 1rem"> |
| | | <el-row> |
| | | <el-col :span="20"><el-image :class="{'xStyle':trademarkAttr.xImage,'yStyle':trademarkAttr.yImage}" src="/trademark.png"/></el-col> |
| | |
| | | </div> |
| | | |
| | | <div |
| | | v-if="tagCheck('左下')" |
| | | v-if="tagCheck(t('craft.lowLeft'))" |
| | | style="width: 60px;height: 60px;margin-left: 1rem;float: left;position: absolute;bottom: 15px"> |
| | | <el-row> |
| | | <el-col :span="20"><el-image :class="{'xStyle':trademarkAttr.xImage,'yStyle':trademarkAttr.yImage}" src="/trademark.png"/></el-col> |
| | |
| | | </div> |
| | | |
| | | <div |
| | | v-if="tagCheck('右下')" |
| | | v-if="tagCheck(t('craft.lowRight'))" |
| | | style="width: 60px;height: 60px;position: absolute;bottom: 15px;right: 1rem"> |
| | | <el-row> |
| | | <el-col :span="20"> |
| | |
| | | import {useRouter,useRoute} from "vue-router" |
| | | import GlassType from "@/components/sd/product/GlassType.vue" |
| | | import useProductGlassTypeStore from "@/stores/sd/product/productGlassType" |
| | | |
| | | import {useI18n} from "vue-i18n"; |
| | | const { t } = useI18n() |
| | | const router = useRouter() |
| | | const route = useRoute() |
| | | let userInfo = useUserInfo() |
| | | const disposeList = $ref([ |
| | | '彩釉', |
| | | '蒙砂', |
| | | '镀膜', |
| | | '贴膜', |
| | | '喷砂', |
| | | '磨边' |
| | | t('product.coloredGlaze'), |
| | | t('product.frostedSand'), |
| | | t('product.coating'), |
| | | t('product.filmApplication'), |
| | | t('product.sandblasting'), |
| | | t('product.edgeGrinding') |
| | | ]) |
| | | let BasicData = ref({ |
| | | stuffColor:null, |
| | |
| | | |
| | | const saveProduct = () => { |
| | | if(productDetailList.value.length===0){ |
| | | ElMessage.warning("请添加产品详情") |
| | | ElMessage.warning(t('product.msg.productLength')) |
| | | return |
| | | }else if(productDetailList.value[productDetailList.value.length-1].detailType!=='glass'){ |
| | | ElMessage.warning("产品详情最后一条不是玻璃,请完善") |
| | | ElMessage.warning(t('product.msg.lastGlass')) |
| | | return |
| | | }else if(productGlassTypeStore.GlassType[1]==='' || productGlassTypeStore.GlassType[1]===null){ |
| | | ElMessage.warning("请选择产品类别") |
| | | ElMessage.warning(t('product.msg.glassType')) |
| | | return |
| | | } |
| | | productTotal.value.typeId = productGlassTypeStore.GlassType[1] |
| | |
| | | } |
| | | request.post(`/product/saveProduct`,product).then((res) =>{ |
| | | if(res.code==200){ |
| | | ElMessage.success("创建成功") |
| | | ElMessage.success(t('product.msg.saveSuccess')) |
| | | router.push("/main/product/selectProduct") |
| | | } |
| | | }) |
| | |
| | | const updateProductState = (state) => { |
| | | request.post(`/product/updateProductStateById/${productTotal.value.id}/${state}`).then((res) =>{ |
| | | if(res.code==200){ |
| | | ElMessage.success("操作成功") |
| | | ElMessage.success(t('product.msg.operateSuccess')) |
| | | //router.go(0) |
| | | router.push({path:'/main/product/createProduct',query:{id:productTotal.value.id,random:Math.random()}}) |
| | | }else{ |
| | | ElMessage.error("操作失败") |
| | | ElMessage.error(t('product.msg.operateFail')) |
| | | } |
| | | }) |
| | | } |
| | |
| | | }) |
| | | let rege = /^\s*$/ |
| | | if(rege.test(childName) || processChecked.value.length===0){ |
| | | ElMessage.warning('请输入产品材料属性与工艺属性') |
| | | ElMessage.warning(t('product.msg.glassReview')) |
| | | return |
| | | } |
| | | let productDetail = { |
| | |
| | | productDetailList.value.push(productDetail) |
| | | }else{ |
| | | if (productDetailList.value[productDetailList.value.length-1].detailType === 'glass') { |
| | | ElMessage.warning('请先选择间隔物') |
| | | ElMessage.warning(t('product.msg.glassRepeat')) |
| | | return |
| | | } |
| | | productDetailList.value.push(productDetail) |
| | |
| | | try { |
| | | Object.keys(hollowBasic.value).forEach((item, index) => { |
| | | if (hollowBasic.value[item] === '') { |
| | | throw new Error("请选择全部中空间隔物下拉框") |
| | | throw new Error(t('product.msg.HollowReview')) |
| | | } |
| | | childName += hollowBasic.value[item] |
| | | }) |
| | |
| | | } |
| | | if(hollowFlag.value.flag){ |
| | | if (productDetailList.value.length ===0) { |
| | | ElMessage.warning('请先选择产品') |
| | | ElMessage.warning(t('product.msg.firstGlass')) |
| | | return |
| | | }else if(productDetailList.value[productDetailList.value.length-1].detailType !== 'glass'){ |
| | | ElMessage.warning('请先选择产品') |
| | | ElMessage.warning(t('product.msg.firstGlass')) |
| | | return |
| | | } |
| | | productDetailList.value.push(Object.assign({},hollowDetail)) |
| | |
| | | try { |
| | | Object.keys(InterlayerBasic.value).forEach((item, index) => { |
| | | if (InterlayerBasic.value[item] === '') { |
| | | throw new Error("请选择全部中空间隔物下拉框") |
| | | throw new Error(t('product.msg.InterlayerReview')) |
| | | } |
| | | childName += InterlayerBasic.value[item] |
| | | }) |
| | |
| | | } |
| | | if(InterlayerFlag.value.flag){ |
| | | if (productDetailList.value.length ===0) { |
| | | ElMessage.warning('请先选择产品') |
| | | ElMessage.warning(t('product.msg.firstGlass')) |
| | | return |
| | | }else if(productDetailList.value[productDetailList.value.length-1].detailType !== 'glass'){ |
| | | ElMessage.warning('请先选择产品') |
| | | ElMessage.warning(t('product.msg.firstGlass')) |
| | | return |
| | | } |
| | | productDetailList.value.push(Object.assign({},InterlayerDetail)) |
| | |
| | | <div class="line"/> |
| | | |
| | | <div class="glass-type"> |
| | | <h5>材料属性</h5> |
| | | <h5>{{ $t('product.msg.glassTypeTitle') }}</h5> |
| | | <el-row :gutter="50"> |
| | | <!-- <el-col :span="6"></el-col>--> |
| | | <el-col :span="4"> |
| | | <div class="grid-content ep-bg-purple" > |
| | | <el-select v-model="stuff.thickness" size="small" clearable placeholder="*厚度:" > |
| | | <el-select v-model="stuff.thickness" size="small" clearable :placeholder="$t('product.msg.thickness')" > |
| | | <el-option v-for="item in BasicData.stuffThickness" |
| | | :key="item.id" |
| | | :label="item.basicName" |
| | |
| | | </el-col> |
| | | <el-col :span="5"> |
| | | <div class="grid-content ep-bg-purple" > |
| | | <el-select v-model="stuff.color" size="small" clearable placeholder="*颜色:" filterable> |
| | | <el-select v-model="stuff.color" size="small" clearable :placeholder="$t('product.msg.color')" filterable> |
| | | <el-option v-for="item in BasicData.stuffColor" |
| | | :key="item.id" |
| | | :label="item.basicName" |
| | |
| | | </el-col> |
| | | <el-col :span="4"> |
| | | <div class="grid-content ep-bg-purple" > |
| | | <el-select v-model="stuff.craft" size="small" clearable placeholder="*工艺属性:" > |
| | | <el-select v-model="stuff.craft" size="small" clearable :placeholder="$t('product.msg.craft')" > |
| | | <el-option v-for="item in BasicData.stuffCraft" |
| | | :key="item.id" |
| | | :label="item.basicName" |
| | |
| | | </el-col> |
| | | <el-col :span="4"> |
| | | <div class="grid-content ep-bg-purple" > |
| | | <el-select v-model="stuff.position" size="small" clearable placeholder="位置:" > |
| | | <el-select v-model="stuff.position" size="small" clearable :placeholder="$t('product.msg.location')" > |
| | | <el-option v-for="item in BasicData.stuffPosition" |
| | | :key="item.id" |
| | | :label="item.basicName" |
| | |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <div class="grid-content ep-bg-purple" > |
| | | <el-select v-model="stuff.lowE" size="small" clearable placeholder="LOW-E面:" > |
| | | <el-select v-model="stuff.lowE" size="small" clearable :placeholder="$t('product.msg.lowELocation')" > |
| | | <el-option v-for="item in BasicData.stuffLowE" |
| | | :key="item.id" |
| | | :label="item.basicName" |
| | |
| | | |
| | | <div class="line"/> |
| | | <div class="glass-process"> |
| | | <h5>工艺属性</h5> |
| | | <h5>{{ $t('product.msg.processAttribute') }}</h5> |
| | | <el-checkbox |
| | | v-model="processChecked" |
| | | v-for="item in BasicData.process" |
| | |
| | | v-model="hollowBasic.thickness" |
| | | size="small" |
| | | style="width: 100px" |
| | | clearable placeholder="*中空厚度:" > |
| | | clearable :placeholder="$t('product.msg.hollowThickness')" > |
| | | <el-option v-for="item in BasicData.hollowThickness" |
| | | :key="item.id" |
| | | :label="item.basicName" |
| | |
| | | v-model="hollowBasic.gasType" |
| | | size="small" |
| | | style="width: 100px" |
| | | clearable placeholder="*充气方式:" > |
| | | clearable :placeholder="$t('product.msg.hollowGasType')" > |
| | | <el-option v-for="item in BasicData.hollowGasType" |
| | | :key="item.id" |
| | | :label="item.basicName" |
| | |
| | | v-model="hollowBasic.Type" |
| | | size="small" |
| | | style="width: 100px" |
| | | clearable placeholder="*封胶:" > |
| | | clearable :placeholder="$t('product.msg.hollowType')" > |
| | | <el-option v-for="item in BasicData.hollowType" |
| | | :key="item.id" |
| | | :label="item.basicName" |
| | |
| | | v-model="hollowBasic.GlueDepth" |
| | | size="small" |
| | | style="width: 100px" |
| | | clearable placeholder="*默认胶深:" > |
| | | clearable :placeholder="$t('product.msg.hollowGlueDepth')" > |
| | | <el-option v-for="item in BasicData.hollowGlueDepth" |
| | | :key="item.id" |
| | | :label="item.basicName" |
| | |
| | | @click="addHollow" |
| | | size="small" |
| | | type="primary" |
| | | round>中空间隔物</el-button> |
| | | round>{{ $t('product.msg.hollow') }}</el-button> |
| | | <el-button |
| | | v-else |
| | | @click="updateHollowSure" |
| | | size="small" |
| | | type="primary" |
| | | round>中空间隔物修改</el-button> |
| | | round>{{ $t('product.msg.hollowUpdate') }}</el-button> |
| | | </div> |
| | | <div class="glass-spacer-zk"> |
| | | <el-select |
| | | v-model="InterlayerBasic.thickness" |
| | | size="small" |
| | | style="width: 100px" |
| | | clearable placeholder="*夹层厚度:" > |
| | | clearable :placeholder="$t('product.msg.interlayerThickness')" > |
| | | <el-option v-for="item in BasicData.InterlayerThickness" |
| | | :key="item.id" |
| | | :label="item.basicName" |
| | |
| | | v-model="InterlayerBasic.type" |
| | | size="small" |
| | | style="width: 100px" |
| | | clearable placeholder="*类型:" > |
| | | clearable :placeholder="$t('product.msg.interlayerType')" > |
| | | <el-option v-for="item in BasicData.InterlayerType" |
| | | :key="item.id" |
| | | :label="item.basicName" |
| | |
| | | v-model="InterlayerBasic.color" |
| | | size="small" |
| | | style="width: 100px" |
| | | clearable placeholder="*颜色:" > |
| | | clearable :placeholder="$t('product.msg.interlayerColor')"> |
| | | <el-option v-for="item in BasicData.InterlayerColor" |
| | | :key="item.id" |
| | | :label="item.basicName" |
| | |
| | | size="small" |
| | | type="primary" |
| | | style="margin-left: 100px" |
| | | round>夹层间隔物</el-button> |
| | | round>{{ $t('product.msg.interlayer') }}</el-button> |
| | | <el-button |
| | | v-else |
| | | @click="updateInterlayerSure" |
| | | size="small" |
| | | type="primary" |
| | | style="margin-left: 100px" |
| | | round>夹层间隔物修改</el-button> |
| | | round>{{ $t('product.msg.interlayerUpdate') }}</el-button> |
| | | </div> |
| | | </div> |
| | | <div class="line"/> |
| | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="5"> |
| | | <div class="grid-content ep-bg-purple" > |
| | | <el-text class="mx-1" style="margin-left: 0.5rem" >单片玻璃属性:</el-text> |
| | | <el-text class="mx-1" style="margin-left: 0.5rem" >{{ $t('product.msg.glassAttribute') }}:</el-text> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="13"> |
| | |
| | | @click="reset" |
| | | size="small" |
| | | type="primary" |
| | | round>重置</el-button> |
| | | round>{{ $t('product.msg.reset') }}</el-button> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="5"> |
| | | <div class="grid-content ep-bg-purple" > |
| | | <el-text class="mx-1" style="margin-left: 0.5rem" >工艺流程属性:</el-text> |
| | | <el-text class="mx-1" style="margin-left: 0.5rem" >{{ $t('product.msg.processFlowAttribute') }}:</el-text> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="13"> |
| | |
| | | @click="glassSure" |
| | | size="small" |
| | | type="primary" |
| | | round>确认</el-button> |
| | | round>{{ $t('product.msg.sure') }}</el-button> |
| | | <el-button v-else |
| | | @click="updateGlassSure" |
| | | size="small" |
| | | type="primary" |
| | | round>修改</el-button> |
| | | round>{{ $t('product.msg.update') }}</el-button> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | |
| | | <div class="grid-content ep-bg-purple" > |
| | | <el-text class="mx-1" |
| | | style="margin-left: 0.5rem;text-align: center"> |
| | | 快速查询: |
| | | {{ $t('product.msg.quickSearch') }}: |
| | | </el-text> |
| | | <el-input v-model="productTotal.query" size="small" disabled /> |
| | | </div> |
| | |
| | | <div class="grid-content ep-bg-purple" > |
| | | <el-text class="mx-1" |
| | | style="margin-left: 0.5rem;text-align: center"> |
| | | 计重厚度: |
| | | {{ $t('product.msg.weightThickness') }}: |
| | | </el-text> |
| | | <el-input v-model="productTotal.thickness" size="small" disabled /> |
| | | </div> |
| | |
| | | <div class="grid-content ep-bg-purple" > |
| | | <el-text class="mx-1" |
| | | style="margin-left: 0.5rem;text-align: center"> |
| | | 厚度: |
| | | {{ $t('product.msg.allThickness') }}: |
| | | </el-text> |
| | | <el-input v-model="productTotal.totalThickness" size="small" disabled /> |
| | | </div> |
| | |
| | | <div class="grid-content ep-bg-purple" > |
| | | <el-text class="mx-1" |
| | | style="margin-left: 0.5rem;text-align: center"> |
| | | 备注: |
| | | {{ $t('product.msg.remarks') }}: |
| | | </el-text> |
| | | <el-input v-model="productTotal.remarks" size="small" /> |
| | | </div> |
| | |
| | | <el-row > |
| | | <el-col :span="4"> |
| | | <div class="grid-content ep-bg-purple" > |
| | | <el-text class="mx-1" size="large" >产品名称:</el-text> |
| | | <el-text class="mx-1" size="large" >{{ $t('product.msg.product') }}:</el-text> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="20"> |
| | |
| | | <el-button |
| | | @click = "updateGlass(index)" |
| | | size="small" |
| | | type="primary">修改玻璃</el-button> |
| | | type="primary">{{ $t('product.msg.updateGlass') }}</el-button> |
| | | </el-col> |
| | | <el-col :span="4" v-show="item.detailType === 'Interlayer'"> |
| | | <el-button |
| | | @click = "updateInterlayer(index)" |
| | | size="small" |
| | | type="primary">修改夹层</el-button> |
| | | type="primary">{{ $t('product.msg.updateHollow') }}</el-button> |
| | | </el-col> |
| | | <el-col :span="4" v-show="item.detailType === 'hollow'"> |
| | | <el-button |
| | | @click = "updateHollow(index)" |
| | | size="small" |
| | | type="primary">修改中空</el-button> |
| | | type="primary">{{ $t('product.msg.updateInterlayer') }}</el-button> |
| | | </el-col> |
| | | <el-col :span="16"> |
| | | <el-input |
| | |
| | | <el-button |
| | | @click="deleteProductDetail(index)" |
| | | size="small" |
| | | type="primary">删除</el-button> |
| | | type="primary">{{ $t('product.msg.delete') }}</el-button> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | |
| | | margin-right: 0.5rem;" |
| | | size="large" |
| | | type="primary" |
| | | round>{{productTotal.id?'修改':'创建'}}</el-button> |
| | | round>{{productTotal.id?$t('product.msg.update'):$t('product.msg.create')}}</el-button> |
| | | <el-button |
| | | v-if="productTotal.state===0" |
| | | @click="updateProductState(1)" |
| | |
| | | margin-right: 0.5rem;" |
| | | size="large" |
| | | type="primary" |
| | | round>审核</el-button> |
| | | round>{{ $t('product.msg.review') }}</el-button> |
| | | <el-button |
| | | v-else-if="productTotal.state===1" |
| | | @click="updateProductState(0)" |
| | |
| | | margin-right: 0.5rem;" |
| | | size="large" |
| | | type="primary" |
| | | round>反审</el-button> |
| | | round>{{ $t('product.msg.cancelReview') }}</el-button> |
| | | |
| | | </div> |
| | | |
| | |
| | | import Sortable from 'sortablejs' |
| | | import BasicTable from '@/components/sd/product/BasicTable.vue' |
| | | import {VXETable} from "vxe-table"; |
| | | import {useI18n} from "vue-i18n"; |
| | | const { t } = useI18n() |
| | | let productGlassTypeStore = useProductGlassTypeStore() |
| | | let router=useRouter() |
| | | //监听玻璃类型改变 |
| | |
| | | request.post(`/product/deleteProductById/${row.id}`).then((res) => { |
| | | if(res.code==200){ |
| | | router.push({path:"/main/product/selectProduct",query:{random:Math.random()}}) |
| | | ElMessage.success('删除成功') |
| | | ElMessage.success(t('basicData.deleteSuccess')) |
| | | } |
| | | }).catch((err) => { |
| | | if(err==="600")ElMessage.warning("产品已审核,无法删除") |
| | | if(err==="600")ElMessage.warning(t('product.msg.theProductHasBeenReviewedAndCannotBeDeleted')) |
| | | }) |
| | | break |
| | | } |
| | |
| | | }, |
| | | columns:[ |
| | | {type:'expand',fixed:"left",slots: { content:'content' },width: 60}, |
| | | {title: '操作', width: 110, slots: { default: 'button_slot' },fixed:"left"}, |
| | | {field:'state',title: '审核', width: 40, slots: { default: 'state' }}, |
| | | {type: 'seq',fixed:"left", title: '自序', width: 80 }, |
| | | {field: 'id', title: '编号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: false}, |
| | | {field: 'productName', title: '名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: false}, |
| | | {field: 'basicGlassType.typeName', title: '所属类别',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: false}, |
| | | {field: 'query', title: '快速查询',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: false}, |
| | | {field: 'remarks', title: '备注',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: false}, |
| | | {field: 'creator', title: '创建人',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: false}, |
| | | {field: 'createTime', title: '创建时间',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: false} |
| | | {title: t('basicData.operate'), width: 110, slots: { default: 'button_slot' },fixed:"left"}, |
| | | {field:'state',title: t('basicData.review'), width: 40, slots: { default: 'state' }}, |
| | | {type: 'seq',fixed:"left", title: t('basicData.Number'), width: 80 }, |
| | | {field: 'id', title: t('basicData.number'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: false}, |
| | | {field: 'productName', title: t('product.productName'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: false}, |
| | | {field: 'basicGlassType.typeName', title: t('product.typeName'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: false}, |
| | | {field: 'query', title: t('product.query'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: false}, |
| | | {field: 'remarks', title: t('basicData.remarks'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: false}, |
| | | {field: 'creator', title: t('product.creator'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: false}, |
| | | {field: 'createTime', title: t('basicData.creationTime'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: false} |
| | | ],//表头参数 |
| | | data:null,//表格数据 |
| | | toolbarConfig: { |
| | |
| | | return[ |
| | | columns.map((column, columnIndex) => { |
| | | if (columnIndex === 0) { |
| | | return `${pageNum}/${pageTotal.value}` |
| | | return t('basicData.total') |
| | | } |
| | | |
| | | return '' |
| | |
| | | <el-button |
| | | @click="getProduct" |
| | | id="select" |
| | | type="primary" :icon="Search">查询</el-button> |
| | | type="primary" :icon="Search">{{ $t('basicData.search') }}</el-button> |
| | | |
| | | |
| | | |
| | |
| | | |
| | | <!--左边固定显示的插槽--> |
| | | <template #button_slot="{ row }" v-if="!props.rowIndex"> |
| | | <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">编辑</el-button> |
| | | <el-popconfirm @confirm="getTableRow(row,'delete')" title="确认删除产品?"> |
| | | <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">{{ $t('basicData.edit') }}</el-button> |
| | | <el-popconfirm @confirm="getTableRow(row,'delete')" :title="$t('searchOrder.deleteConfirm')"> |
| | | <template #reference> |
| | | <el-button link type="primary" size="small">删除</el-button> |
| | | <el-button link type="primary" size="small">{{ $t('basicData.delete') }}</el-button> |
| | | </template> |
| | | </el-popconfirm> |
| | | </template> |
| | | <template #button_slot="{ row }" v-else> |
| | | <el-button @click="emitParent(row)" link type="primary" size="small">添加</el-button> |
| | | <el-button @click="emitParent(row)" link type="primary" size="small">{{ $t('basicData.add') }}</el-button> |
| | | </template> |
| | | |
| | | <template #num1_filter="{ column, $panel }"> |
| | |
| | | <div id="main-div"> |
| | | <div id="div-title"> |
| | | <el-breadcrumb :separator-icon="ArrowRight"> |
| | | <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/role/roleList' }">角色首页</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/role/roleList' }">{{$t('role.characterHomepage')}}</el-breadcrumb-item> |
| | | <el-breadcrumb-item v-show="false" @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/order/createOrder' }">{{$t('basicData.create')}}</el-breadcrumb-item> |
| | | </el-breadcrumb> |
| | | </div> |
| | |
| | | onBeforeMount(()=>{ |
| | | let columns = [{title: t('basicData.operate'), width: 133, slots: { default: 'button_slot' }}] |
| | | const columnName = { |
| | | id: 'ID', |
| | | role:'角色' |
| | | id: t('role.id'), |
| | | role:t('role.role') |
| | | } |
| | | for (let columnNameKey in columnName) { |
| | | let column = {field: columnNameKey, |
| | |
| | | } |
| | | ] |
| | | const columnNameP = { |
| | | id: 'ID', |
| | | menu: '菜单', |
| | | page:'页面', |
| | | permission:'权限' |
| | | id: t('role.id'), |
| | | menu: t('role.menu'), |
| | | page:t('role.page'), |
| | | permission:t('role.permission') |
| | | } |
| | | for (let columnNameKey in columnNameP) { |
| | | let column = {field: columnNameKey, |
| | |
| | | // return |
| | | // } |
| | | ElMessageBox.confirm( |
| | | '确认修改角色权限?', |
| | | t('role.ConfirmModifyingRolePermissions'), |
| | | 'Warning', |
| | | { |
| | | confirmButtonText: '确认', |
| | | cancelButtonText: '取消', |
| | | confirmButtonText: t('basicData.confirmButtonText'), |
| | | cancelButtonText: t('basicData.cancelButtonText'), |
| | | type: 'warning', |
| | | } |
| | | ).then(() => { |
| | |
| | | } |
| | | request.post(`/permissionRole/savePermissionRole`,permission).then(res=>{ |
| | | if(res.data=== true && res.code==='200'){ |
| | | ElMessage.success('保存成功') |
| | | ElMessage.success(t('basicData.msg.saveSuccess')) |
| | | dialogVisible.value = false |
| | | getPermissionList() |
| | | }else{ |
| | | ElMessage.error('保存失败') |
| | | ElMessage.error(t('basicData.msg.saveFail')) |
| | | } |
| | | }) |
| | | }) |
| | | } |
| | | |
| | | const addRole = () =>{ |
| | | ElMessageBox.prompt('请输入新角色', '新增角色', { |
| | | confirmButtonText: '确定', |
| | | cancelButtonText: '取消', |
| | | ElMessageBox.prompt(t('role.PleaseEnterANewRole'), t('role.AddANewRole'), { |
| | | confirmButtonText: t('basicData.confirmButtonText'), |
| | | cancelButtonText: t('basicData.cancelButtonText'), |
| | | inputPattern:/^.{1,255}$/, |
| | | inputErrorMessage: '不能为空且长度不能超过255', |
| | | inputErrorMessage: t('role.CannotBeEmptyAndTheLengthCannotExceed255'), |
| | | }) |
| | | .then(({ value }) => { |
| | | const role= { |
| | |
| | | } |
| | | request.post("/role/add",role).then(res=>{ |
| | | if(res.code==='200' && res.data===true){ |
| | | ElMessage.success('新增成功') |
| | | ElMessage.success(t('basicData.msg.saveSuccess')) |
| | | router.push({path:'/main/role/roleList',query:{random:Math.random()}}) |
| | | }else{ |
| | | ElMessage.error('新增失败') |
| | | ElMessage.error(t('basicData.msg.saveFail')) |
| | | } |
| | | }) |
| | | }) |
| | |
| | | @click="addRole" |
| | | status='primary' |
| | | style="margin-right: 1rem" |
| | | >角色新增</vxe-button> |
| | | >{{$t('role.roleAdd')}}</vxe-button> |
| | | </template> |
| | | |
| | | |
| | |
| | | </template> |
| | | |
| | | <template #button_slot="{ row }"> |
| | | <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">角色权限</el-button> |
| | | <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">{{$t('role.rolePermissions')}}</el-button> |
| | | </template> |
| | | </vxe-grid> |
| | | |
| | |
| | | v-model="dialogVisible" |
| | | @open="getPermissionList" |
| | | style="height: 70%;width: 70%" |
| | | title="权限选择"> |
| | | :title="$t('role.permissionSelection')"> |
| | | <vxe-grid |
| | | height="100%" |
| | | class="mytable-scrollbar" |
| | |
| | | @click="saveBatch" |
| | | status='primary' |
| | | style="margin-right: 1rem" |
| | | >保存</vxe-button> |
| | | >{{$t('basicData.save')}}</vxe-button> |
| | | </template> |
| | | |
| | | </vxe-grid> |
| | |
| | | <div id="main-div"> |
| | | <div id="div-title"> |
| | | <el-breadcrumb :separator-icon="ArrowRight"> |
| | | <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/user/userList' }">用户首页</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/user/userList' }">{{$t('user.userHomepage')}}</el-breadcrumb-item> |
| | | <el-breadcrumb-item v-show="false" @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/order/createOrder' }">{{$t('basicData.create')}}</el-breadcrumb-item> |
| | | </el-breadcrumb> |
| | | </div> |
| | |
| | | onBeforeMount(()=>{ |
| | | let columns = [{title: t('basicData.operate'), width: 133, slots: { default: 'button_slot' }}] |
| | | const columnName = { |
| | | loginName: '用户ID', |
| | | userName:'用户', |
| | | loginName: t('user.userId'), |
| | | userName:t('user.user'), |
| | | // address:'地址', |
| | | // phone:'电话', |
| | | role:'角色', |
| | | createTime:'创建时间' |
| | | role:t('role.role'), |
| | | createTime:t('basicData.creationTime') |
| | | } |
| | | for (let columnNameKey in columnName) { |
| | | let column = {field: columnNameKey, |
| | |
| | | </template> |
| | | |
| | | <template #button_slot="{ row }"> |
| | | <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">设置角色</el-button> |
| | | <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">{{ $t('user.setUpRoles') }}</el-button> |
| | | <el-popconfirm @confirm="getTableRow(row,'delete')" :title="$t('searchOrder.deleteConfirm')"> |
| | | <template #reference> |
| | | <el-button link type="primary" size="small">{{ $t('basicData.delete') }}</el-button> |
| | |
| | | </span> |
| | | <template #footer> |
| | | <span class="dialog-footer"> |
| | | <el-button @click="dialogVisible = false">取消</el-button> |
| | | <el-button @click="dialogVisible = false">{{ $t('basicData.cancelButtonText') }}</el-button> |
| | | <el-button type="primary" @click="roleUpdate"> |
| | | 确认 |
| | | {{ $t('basicData.confirmButtonText') }} |
| | | </el-button> |
| | | </span> |
| | | </template> |
| | |
| | | |
| | | const oldPassword = (rule: any, value: any, callback: any) => { |
| | | if (value.trim() === '') { |
| | | callback(new Error('旧密码不能为空')) |
| | | callback(new Error(t('user.OldPasswordCannotBeEmpty'))) |
| | | }else{ |
| | | callback() |
| | | } |
| | |
| | | |
| | | const checkPassword = (rule: any, value: any, callback: any) => { |
| | | if (value.trim() === '') { |
| | | callback(new Error('新密码不能为空')) |
| | | callback(new Error(t('user.TheNewPasswordCannotBeEmpty'))) |
| | | }else if(value.length>16 || value.length<6){ |
| | | callback(new Error('密码长度不能低于6或超过16')) |
| | | callback(new Error(t('user.ThePasswordLengthCannotBeLessThan6OrMoreThan16'))) |
| | | }else{ |
| | | callback() |
| | | } |
| | |
| | | |
| | | const checkConfirmPassword = (rule: any, value: any, callback: any) => { |
| | | if (value.trim() === '') { |
| | | callback(new Error('确认密码不能为空')) |
| | | callback(new Error(t('user.ConfirmPasswordCannotBeEmpty'))) |
| | | }else if(value !== register.password){ |
| | | callback(new Error('两次密码不相同')) |
| | | callback(new Error(t('user.ConfirmPasswordCannotBeEmpty'))) |
| | | }else if(value.length>16 || value.length<6){ |
| | | callback(new Error('密码长度不能低于6或超过16')) |
| | | callback(new Error(t('user.TheTwoPasswordsAreNotTheSame'))) |
| | | }else{ |
| | | callback() |
| | | } |
| | |
| | | register.oldPassword = btoa(register.oldPassword) |
| | | request.post('/user/updatePassWord', register).then((res) => { |
| | | if (res.data === true) { |
| | | ElMessage.success(`修改成功`) |
| | | ElMessage.success(t('basicData.msg.saveSuccess')) |
| | | router.push("/login") |
| | | } else { |
| | | ElMessage.error('旧密码错误') |
| | | ElMessage.error(t('user.OldPasswordError')) |
| | | return false |
| | | } |
| | | }).catch(error => { |
| | | ElMessage.error("服务器连接失败") |
| | | ElMessage.error(t('basicData.msg.ServerConnectionError')) |
| | | return false |
| | | }) |
| | | } |
| | |
| | | status-icon |
| | | :rules="rules" |
| | | > |
| | | <el-form-item label="旧密码:" prop="oldPassword"> |
| | | <el-form-item :label="$t('user.OldPassword')" prop="oldPassword"> |
| | | <el-input autocomplete="off" type="text" style="-webkit-text-security: disc" v-model="register.oldPassword" /> |
| | | </el-form-item> |
| | | <el-form-item label="新密码:" prop="password"> |
| | | <el-form-item :label="$t('user.TheNewPassword')" prop="password"> |
| | | <el-input autocomplete="off" type="text" style="-webkit-text-security: disc" v-model="register.password" /> |
| | | </el-form-item> |
| | | <el-form-item label="确认密码:" prop="confirmPassword"> |
| | | <el-form-item :label="$t('user.ConfirmPassword')" prop="confirmPassword"> |
| | | <el-input autocomplete="off" type="text" style="-webkit-text-security: disc" v-model="register.confirmPassword" /> |
| | | </el-form-item> |
| | | <el-form-item > |
| | | <el-button |
| | | type="primary" |
| | | @click="submitForm(ruleFormRef)" |
| | | >修改 |
| | | >{{ $t('basicData.save') }} |
| | | </el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | |
| | | <div id="main-div"> |
| | | <div id="div-title"> |
| | | <el-breadcrumb :separator-icon="ArrowRight"> |
| | | <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/userPassWord/updateUserPassWord' }">修改密码</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/userPassWord/updateUserPassWord' }">{{$t('user.changePassword')}}</el-breadcrumb-item> |
| | | <el-breadcrumb-item v-show="false" @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/order/createOrder' }">{{$t('basicData.create')}}</el-breadcrumb-item> |
| | | </el-breadcrumb> |
| | | </div> |
| | |
| | | import cn.dev33.satoken.annotation.SaCheckPermission; |
| | | import com.example.erp.common.Constants; |
| | | import com.example.erp.entity.pp.FlowCard; |
| | | import com.example.erp.entity.pp.PrintSetup; |
| | | import com.example.erp.entity.sd.DeliveryDetail; |
| | | import com.example.erp.entity.sd.Order; |
| | | import com.example.erp.common.Result; |
| | |
| | | } |
| | | } |
| | | |
| | | @ApiOperation("打印标签设置查询") |
| | | @SaCheckPermission("PrintFlowCard.search") |
| | | @PostMapping ("/printSetup") |
| | | public Result printSetup(@RequestBody PrintSetup printSetup){ |
| | | return Result.seccess(flowCardService.printSetup(printSetup)); |
| | | |
| | | } |
| | | } |
| | |
| | | //点击查询排版数据 |
| | | @ApiOperation("点击查询排版数据接口") |
| | | @SaCheckPermission("ProductionScheduling.search") |
| | | @PostMapping ("/selectScheduling/{pageNum}/{pageSize}/{selectTime1}/{selectTime2}/{orderId}/{processes}/{state}") |
| | | @PostMapping ("/selectScheduling/{pageNum}/{pageSize}/{selectTime1}/{selectTime2}/{orderIds}/{processes}/{state}") |
| | | public Result selectScheduling( |
| | | @PathVariable Integer pageNum, |
| | | @PathVariable Integer pageSize, |
| | | @PathVariable String selectTime1, |
| | | @PathVariable String selectTime2, |
| | | @PathVariable String orderId, |
| | | @PathVariable String orderIds, |
| | | @PathVariable String processes, |
| | | @PathVariable Integer state, |
| | | @RequestBody ProductionScheduling productionScheduling){ |
| | | |
| | | return Result.seccess(productionSchedulingService.selectSchedulingSv(pageNum, pageSize,selectTime1,selectTime2,orderId,processes,state,productionScheduling)); |
| | | return Result.seccess(productionSchedulingService.selectSchedulingSv(pageNum, pageSize,selectTime1,selectTime2,orderIds,processes,state,productionScheduling)); |
| | | |
| | | } |
| | | |
| | | //点击查询排版数据(带订单号查询) |
| | | @ApiOperation("根据条件查询排版数据接口") |
| | | @SaCheckPermission("ProductionScheduling.search") |
| | | @PostMapping ("/selectSchedulingNot/{selectTime1}/{selectTime2}/{orderId}/{processes}/{state}") |
| | | public Result selectSchedulingNot( |
| | | @PathVariable String selectTime1, |
| | | @PathVariable String selectTime2, |
| | | @PathVariable String orderId, |
| | | @PathVariable String processes, |
| | | @PathVariable Integer state, |
| | | @RequestBody ProductionScheduling productionScheduling){ |
| | | return Result.seccess(productionSchedulingService.selectSchedulingNotSv(selectTime1,selectTime2,orderId,processes,state,productionScheduling)); |
| | | |
| | | } |
| | | |
| | | //添加排产数据 |
| | | @ApiOperation("添加排产数据接口") |
| | |
| | | |
| | | private Double productionScheduledArea; |
| | | |
| | | private String reviewer; |
| | | |
| | | //外键订单表 |
| | | private Order order; |
| | |
| | | |
| | | Boolean printSortMp(String processId, Integer orderNumber, Integer technologyNumber, Integer sort); |
| | | |
| | | List<Map<String, String>> selectPrintSetup(PrintSetup printSetup); |
| | | } |
| | |
| | | public interface ProductionSchedulingMapper extends BaseMapper<ProductionScheduling> { |
| | | |
| | | |
| | | List<Map<String,String>> selectOkSchedulingMp(Integer offset, Integer pageSize, String selectTime1, String selectTime2, String orderId, String processes, ProductionScheduling productionScheduling); |
| | | List<ProductionScheduling> selectOkSchedulingMp(Integer offset, Integer pageSize, String selectTime1, String selectTime2, String orderIds, String processes, ProductionScheduling productionScheduling); |
| | | |
| | | List<ProductionScheduling> selectNoSchedulingMp(Integer offset, Integer pageSize, String selectTime1, String selectTime2, String orderId, String processes, ProductionScheduling productionScheduling); |
| | | |
| | | List<Map<String,String>> selectLastSchedulingMp(String selectTime1, String selectTime2,String processes,String orderId, ProductionScheduling productionScheduling); |
| | | |
| | | List<Map<String,String>> selectSchedulingNotMp(String selectTime1, String selectTime2, String orderId, String processes, ProductionScheduling productionScheduling); |
| | | List<ProductionScheduling> selectNoSchedulingMp(Integer offset, Integer pageSize, String selectTime1, String selectTime2, String orderIds, String processes, ProductionScheduling productionScheduling); |
| | | |
| | | Integer selectMaxId(); |
| | | |
| | |
| | | |
| | | Map<String, Integer> getPageTotal(Integer offset, Integer pageSize, String selectTime1, String selectTime2, String orderId, String processes, ProductionScheduling productionScheduling); |
| | | |
| | | Map<String, Integer> getOkPageTotal(Integer offset, Integer pageSize, String selectTime1, String selectTime2, String orderId, String processes, ProductionScheduling productionScheduling); |
| | | |
| | | // Integer selectNumberMp(String orderId, String orderNumber, String processes); |
| | | } |
| | |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.sql.Date; |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.*; |
| | | |
| | | import static com.example.erp.service.sd.OrderService.getOrderProcessDetails; |
| | | |
| | |
| | | return true; |
| | | } |
| | | |
| | | public Map<String, Object> printSetup(PrintSetup printSetup) { |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("data", flowCardMapper.selectPrintSetup(printSetup)); |
| | | return map; |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | |
| | | ProductionSchedulingMapper productionSchedulingMapper; |
| | | |
| | | //未排产查询 |
| | | public Map<String, Object> selectSchedulingSv(Integer pageNum, Integer pageSize, String selectTime1, String selectTime2, String orderId, String processes, Integer state, ProductionScheduling productionScheduling ) { |
| | | public Map<String, Object> selectSchedulingSv(Integer pageNum, Integer pageSize, String selectTime1, String selectTime2, String orderIds, String processes, Integer state, ProductionScheduling productionScheduling ) { |
| | | |
| | | Integer offset = (pageNum - 1) * pageSize; |
| | | Map<String, Object> map = new HashMap<>(); |
| | | if("null".equals(orderId)){ |
| | | orderId=""; |
| | | if("null".equals(orderIds)){ |
| | | orderIds=""; |
| | | } |
| | | if ("null".equals(processes)){ |
| | | |
| | |
| | | } |
| | | |
| | | if (state==2){//已排产 |
| | | map.put("data", productionSchedulingMapper.selectOkSchedulingMp(offset, pageSize,selectTime1, selectTime2,orderId,processes, productionScheduling)); |
| | | map.put("data", productionSchedulingMapper.selectOkSchedulingMp(offset, pageSize,selectTime1, selectTime2,orderIds,processes, productionScheduling)); |
| | | map.put("total", productionSchedulingMapper.getOkPageTotal(offset, pageSize,selectTime1, selectTime2,orderIds,processes, productionScheduling)); |
| | | |
| | | }else if (state==1){//未排产 |
| | | map.put("data", productionSchedulingMapper.selectNoSchedulingMp(offset, pageSize,selectTime1, selectTime2,orderId,processes, productionScheduling)); |
| | | map.put("data", productionSchedulingMapper.selectNoSchedulingMp(offset, pageSize,selectTime1, selectTime2,orderIds,processes, productionScheduling)); |
| | | map.put("total", productionSchedulingMapper.getPageTotal(offset, pageSize,selectTime1, selectTime2,orderIds,processes, productionScheduling)); |
| | | |
| | | } |
| | | map.put("total", productionSchedulingMapper.getPageTotal(offset, pageSize,selectTime1, selectTime2,orderId,processes, productionScheduling)); |
| | | return map; |
| | | } |
| | | |
| | |
| | | //首次查询排产数据 |
| | | public Map<String, Object> selectLastScheduling(String selectTime1, String selectTime2,String processes,String orderId,ProductionScheduling productionScheduling ) { |
| | | Map<String, Object> map = new HashMap<>(); |
| | | if("null".equals(orderId)){ |
| | | orderId=""; |
| | | } |
| | | if ("null".equals(processes)){ |
| | | |
| | | processes=""; |
| | | } |
| | | map.put("data", productionSchedulingMapper.selectLastSchedulingMp(selectTime1, selectTime2,processes,orderId, productionScheduling)); |
| | | map.put("process", productionSchedulingMapper.selectProcess()); |
| | | return map; |
| | | } |
| | | |
| | | //带订单号查询 |
| | | public Map<String, Object> selectSchedulingNotSv(String selectTime1, String selectTime2, String orderId, String processes, Integer state, ProductionScheduling productionScheduling) { |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("data", productionSchedulingMapper.selectSchedulingNotMp(selectTime1, selectTime2,orderId,processes, productionScheduling)); |
| | | return map; |
| | | } |
| | | |
| | | |
| | | public Boolean addSchedulingSv(Map<String, Object> object) { |
| | | String userName = ""; |
| | |
| | | //查询已排产工序数量 |
| | | // Integer num = productionSchedulingMapper.selectNumberMp(productionScheduling.getOrderId(),productionScheduling.getOrderNumber(),processes); |
| | | |
| | | productionSchedulingMapper.insertSelective(schedulingId,productionScheduling.getOrderId(),productionScheduling.getOrderNumber(),productionScheduling.getTechnologyNumber(),processes,productionScheduling.getSchedulingQuantity(),productionScheduling.getScheduledStartTime(),productionScheduling.getPlanEndTime(),productionScheduling.getNotes()); |
| | | //System.out.println(productionScheduling.getOrderNumber()+"***"+productionScheduling.getTechnologyNumber()); |
| | | productionSchedulingMapper.insertSelective(schedulingId,productionScheduling.getOrderGlassDetail().getOrderId(),productionScheduling.getOrderNumber(),productionScheduling.getTechnologyNumber(),processes,productionScheduling.getSchedulingQuantity(),productionScheduling.getScheduledStartTime(),productionScheduling.getPlanEndTime(),productionScheduling.getNotes()); |
| | | // System.out.println(productionScheduling.getOrderId()+"***"+productionScheduling.getOrderGlassDetail().getOrderId()+"--"+productionScheduling.getOrderDetail().getOrderId()); |
| | | } |
| | | return true; |
| | | } |
| | |
| | | strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候回抛出异常,不启动会使用默认数据源. |
| | | datasource: |
| | | user_info: |
| | | url: jdbc:mysql://192.168.1.108:3306/erp_user_info?serverTimezone=GMT%2b8 |
| | | url: jdbc:mysql://localhost:3306/erp_user_info?serverTimezone=GMT%2b8 |
| | | username: root |
| | | password: beibo.123/ |
| | | driver-class-name: com.mysql.cj.jdbc.Driver |
| | | sd: |
| | | url: jdbc:mysql://192.168.1.108:3306/sd?serverTimezone=GMT%2b8&allowMultiQueries=true |
| | | url: jdbc:mysql://localhost:3306/sd?serverTimezone=GMT%2b8&allowMultiQueries=true |
| | | username: root |
| | | password: beibo.123/ |
| | | driver-class-name: com.mysql.cj.jdbc.Driver |
| | | mm: |
| | | url: jdbc:mysql://192.168.1.108:3306/mm?serverTimezone=GMT%2b8 |
| | | url: jdbc:mysql://localhost:3306/mm?serverTimezone=GMT%2b8 |
| | | username: root |
| | | password: beibo.123/ |
| | | driver-class-name: com.mysql.cj.jdbc.Driver |
| | | pp: |
| | | url: jdbc:mysql://192.168.1.108:3306/pp?serverTimezone=GMT%2b8 |
| | | url: jdbc:mysql://localhost:3306/pp?serverTimezone=GMT%2b8 |
| | | username: root |
| | | password: beibo.123/ |
| | | driver-class-name: com.mysql.cj.jdbc.Driver |
| | |
| | | and technology_number = #{technologyNumber} |
| | | </update> |
| | | |
| | | <select id="selectPrintSetup"> |
| | | select id, |
| | | print_type as printType, |
| | | print_type_name as printTypeName, |
| | | print_state as printState |
| | | from pp.print_setup |
| | | </select> |
| | | |
| | | </mapper> |
| | |
| | | <result column="productionScheduledQuantity" property="productionScheduledQuantity"/> |
| | | <result column="productionScheduledArea" property="productionScheduledArea"/> |
| | | <result column="review_status" property="reviewStatus"/> |
| | | <result column="scheduled_start_time" property="scheduledStartTime"/> |
| | | <result column="plan_end_time" property="planEndTime"/> |
| | | <result column="reviewer" property="reviewer"/> |
| | | <!--接收其他外键实体类数据--> |
| | | <result column="project" property="order.project"/> |
| | | <result column="customer_name" property="order.customerName"/> |
| | |
| | | |
| | | |
| | | <!-- 查询已排版数据--> |
| | | <select id="selectOkSchedulingMp"> |
| | | select date(ps.scheduled_start_time) as scheduled_start_time, |
| | | date(ps.plan_end_time) as plan_end_time, |
| | | od.order_id, |
| | | o.customer_name, |
| | | o.project, |
| | | od.order_number, |
| | | od.width, |
| | | od.height, |
| | | od.quantity, |
| | | round(od.width * od.height * od.quantity / 1000000, 2) as area, |
| | | ps.scheduling_quantity, |
| | | (od.quantity - IFNULL(sum(ps.scheduling_quantity), 0)) as pendingProductionQuantity, |
| | | round(od.width * od.height * (od.quantity - IFNULL(sum(ps.scheduling_quantity), 0)) / 1000000, |
| | | 2) as pendingProductionArea, |
| | | IFNULL(ps.scheduling_quantity, 0) as productionScheduledQuantity, |
| | | round(od.width * od.height * (IFNULL(ps.scheduling_quantity, 0)) / 1000000, |
| | | 2) as productionScheduledArea, |
| | | IF(ps.review_status = 0, "未审核", "已审核") as review_status, |
| | | ps.reviewer, |
| | | od.product_name, |
| | | od.shape, |
| | | ps.scheduling_id |
| | | <select id="selectOkSchedulingMp" resultMap="productionSchedulingMap"> |
| | | select date(ps.scheduled_start_time) as scheduled_start_time, |
| | | date(ps.plan_end_time) as plan_end_time, |
| | | od.order_id, |
| | | o.customer_name, |
| | | o.project, |
| | | ps.order_number, |
| | | ps.technology_number, |
| | | ogd.child_width, |
| | | ogd.child_height, |
| | | od.quantity, |
| | | round(od.width * od.height * od.quantity / 1000000, 2) as area, |
| | | ps.scheduling_quantity, |
| | | (od.quantity - IFNULL(sum(ps.scheduling_quantity), 0)) as pendingProductionQuantity, |
| | | round(od.width * od.height * (od.quantity - IFNULL(sum(ps.scheduling_quantity), 0)) / 1000000, |
| | | 2) as pendingProductionArea, |
| | | IFNULL(ps.scheduling_quantity, 0) as productionScheduledQuantity, |
| | | round(od.width * od.height * (IFNULL(ps.scheduling_quantity, 0)) / 1000000, |
| | | 2) as productionScheduledArea, |
| | | IF(ps.review_status = 0, "未审核", "已审核") as review_status, |
| | | ps.reviewer, |
| | | od.product_name, |
| | | if(od.shape=1,'普形',if(od.shape=2,'异形','')) as shape, |
| | | ps.scheduling_id |
| | | from sd.order_detail as od |
| | | left join sd.order as o on od.order_id = o.order_id |
| | | left join production_scheduling as ps |
| | | on ps.order_id = od.order_id and ps.order_number = od.order_number |
| | | left join sd.order as o on od.order_id = o.order_id |
| | | left join production_scheduling as ps |
| | | on ps.order_id = od.order_id and ps.order_number = od.order_number |
| | | left join sd.order_glass_detail as ogd on ogd.order_id=od.order_id and ogd.order_number=od.order_number and |
| | | ogd.technology_number=ps.technology_number |
| | | where ps.scheduling_id IS NOT NULL |
| | | and od.create_time between #{selectTime1} and #{selectTime2} |
| | | and position(#{processes} in ps.processes) |
| | | and position(#{orderId} in ps.order_id) |
| | | group by od.order_id, od.order_number |
| | | and od.create_time between #{selectTime1} and #{selectTime2} |
| | | and position(#{processes} in ps.processes) |
| | | and position(#{orderIds} in ps.order_id) |
| | | <if test="productionScheduling.orderId != null and productionScheduling.orderId != ''"> |
| | | and ogd.order_id regexp #{productionScheduling.orderId} |
| | | </if> |
| | | <if test="productionScheduling.order.customerName != null and productionScheduling.order.customerName != ''"> |
| | | and o.customer_name regexp #{productionScheduling.order.customerName} |
| | | </if> |
| | | <if test="productionScheduling.order.project != null and productionScheduling.order.project != ''"> |
| | | and o.project regexp #{productionScheduling.order.project} |
| | | </if> |
| | | <if test="productionScheduling.orderNumber != null and productionScheduling.orderNumber != ''"> |
| | | and ogd.order_number regexp #{productionScheduling.orderNumber} |
| | | </if> |
| | | <if test="productionScheduling.technologyNumber != null and productionScheduling.technologyNumber != ''"> |
| | | and ogd.technology_number regexp #{productionScheduling.technologyNumber} |
| | | </if> |
| | | group by ps.id |
| | | order by ps.id desc |
| | | limit #{offset},#{pageSize}; |
| | | </select> |
| | | |
| | | <!-- 查询已排产的数据--> |
| | | <select id="selectSchedulingNotMp"> |
| | | select date(ps.scheduled_start_time) as scheduled_start_time, |
| | | date(ps.plan_end_time) as plan_end_time, |
| | | od.order_id, |
| | | o.customer_name, |
| | | o.project, |
| | | od.order_number, |
| | | od.width, |
| | | od.height, |
| | | od.quantity, |
| | | round(od.width * od.height * od.quantity / 1000000, 2) as area, |
| | | ps.scheduling_quantity, |
| | | (od.quantity - IFNULL(sum(ps.scheduling_quantity), 0)) as scheduling_quantity, |
| | | round(od.width * od.height * (od.quantity - IFNULL(sum(ps.scheduling_quantity), 0)) / 1000000, 2) |
| | | as pendingProductionArea, |
| | | IFNULL(ps.scheduling_quantity, 0) as productionScheduledQuantity, |
| | | round(od.width * od.height * (IFNULL(ps.scheduling_quantity, 0)) / 1000000, 2) |
| | | as productionScheduledArea, |
| | | IF(ps.review_status = 0, "未审核", "已审核") |
| | | as review_status, |
| | | ps.reviewer, |
| | | od.product_name, |
| | | od.shape, |
| | | ps.scheduling_id |
| | | from sd.order_detail as od |
| | | left join sd.order as o on od.order_id = o.order_id |
| | | left join production_scheduling as ps |
| | | on ps.order_id = od.order_id and ps.order_number = od.order_number |
| | | where (ps.scheduling_id IS NOT NULL) |
| | | and position(#{processes} in ps.processes) |
| | | and position(#{orderId} in ps.order_id) |
| | | group by od.order_id, od.order_number |
| | | order by ps.id desc |
| | | </select> |
| | | |
| | | <!-- 查询未排产数据--> |
| | | <select id="selectNoSchedulingMp" resultMap="productionSchedulingMap"> |
| | | select ogd.order_id, |
| | |
| | | IFNULL(ps.schedulingQuantity, 0) as productionScheduledQuantity, |
| | | round(ogd.child_width * ogd.child_height * (IFNULL(ps.schedulingQuantity, 0)) / 1000000, |
| | | 2) as productionScheduledArea, |
| | | ogd.glass_child, |
| | | od.shape |
| | | od.product_name, |
| | | if(od.shape=1,'普形',if(od.shape=2,'异形','')) as shape |
| | | from sd.order_glass_detail as ogd |
| | | |
| | | left join sd.order as o on ogd.order_id = o.order_id |
| | |
| | | and od.create_time between #{selectTime1} and #{selectTime2} |
| | | and opd.reporting_work_num_count = 0 |
| | | |
| | | and position(#{orderId} in ogd.order_id) |
| | | and position(#{orderIds} in ogd.order_id) |
| | | -- and position("切割" in ps.processes) |
| | | <if test="productionScheduling.orderId != null and productionScheduling.orderId != ''"> |
| | | and ogd.order_id regexp #{productionScheduling.orderId} |
| | |
| | | order by ogd.order_id desc |
| | | limit #{offset},#{pageSize}; |
| | | </select> |
| | | <!-- 首次查询排产数据--> |
| | | <select id="selectLastSchedulingMp"> |
| | | select ogd.order_id, |
| | | o.customer_name, |
| | | o.project, |
| | | ogd.order_number, |
| | | ogd.technology_number, |
| | | ogd.child_width, |
| | | ogd.child_height, |
| | | od.quantity, |
| | | round(ogd.child_width * ogd.child_height * od.quantity / 1000000, 2) as area, |
| | | (od.quantity - IFNULL((ps.schedulingQuantity), 0)) as scheduling_quantity, |
| | | (od.quantity - IFNULL((ps.schedulingQuantity), 0)) as pendingProductionQuantity, |
| | | round(ogd.child_width * ogd.child_height * (od.quantity - IFNULL((ps.schedulingQuantity), 0)) / 1000000, |
| | | 2) |
| | | as pendingProductionArea, |
| | | IFNULL(ps.schedulingQuantity, 0) as productionScheduledQuantity, |
| | | round(ogd.child_width * ogd.child_height * (IFNULL(ps.schedulingQuantity, 0)) / 1000000, |
| | | 2) as productionScheduledArea, |
| | | ogd.glass_child, |
| | | od.shape |
| | | from sd.order_glass_detail as ogd |
| | | |
| | | left join sd.order as o on ogd.order_id = o.order_id |
| | | left join sd.order_detail as od on od.order_id = ogd.order_id and od.order_number = ogd.order_number |
| | | left join sd.order_process_detail as opd |
| | | on opd.order_id = ogd.order_id and opd.order_number = ogd.order_number and |
| | | opd.technology_number = ogd.technology_number |
| | | left join |
| | | (select order_id, order_number, technology_number, SUM(scheduling_quantity) as schedulingQuantity |
| | | from production_scheduling |
| | | where processes = #{processes} |
| | | group by order_id, order_number, technology_number) as ps |
| | | on ps.order_id = ogd.order_id and ps.order_number = ogd.order_number and |
| | | ps.technology_number = ogd.technology_number |
| | | |
| | | where (od.quantity - IFNULL((ps.schedulingQuantity), 0)) > 0 |
| | | and od.create_time between #{selectTime1} and #{selectTime2} |
| | | and opd.reporting_work_num_count = 0 |
| | | |
| | | and position(#{orderId} in ogd.order_id) |
| | | -- and position("切割" in ps.processes) |
| | | |
| | | group by ogd.order_id, ogd.order_number, ogd.technology_number |
| | | order by ogd.order_id desc |
| | | </select> |
| | | |
| | | <select id="selectMaxId"> |
| | | select COUNT(ps.scheduling_id) |
| | |
| | | order by ogd.order_id desc |
| | | limit #{offset},#{pageSize}; |
| | | </select> |
| | | |
| | | <select id="getOkPageTotal"> |
| | | select CEILING(count(ps.id)/#{pageSize}) as 'pageTotal', |
| | | count(distinct ps.id) as 'total' |
| | | from sd.order_detail as od |
| | | left join sd.order as o on od.order_id = o.order_id |
| | | left join production_scheduling as ps |
| | | on ps.order_id = od.order_id and ps.order_number = od.order_number |
| | | left join sd.order_glass_detail as ogd on ogd.order_id=od.order_id and ogd.order_number=od.order_number and |
| | | ogd.technology_number=ps.technology_number |
| | | where ps.scheduling_id IS NOT NULL |
| | | and od.create_time between #{selectTime1} and #{selectTime2} |
| | | and position(#{processes} in ps.processes) |
| | | and position(#{orderId} in ps.order_id) |
| | | <if test="productionScheduling.orderId != null and productionScheduling.orderId != ''"> |
| | | and ogd.order_id regexp #{productionScheduling.orderId} |
| | | </if> |
| | | <if test="productionScheduling.order.customerName != null and productionScheduling.order.customerName != ''"> |
| | | and o.customer_name regexp #{productionScheduling.order.customerName} |
| | | </if> |
| | | <if test="productionScheduling.order.project != null and productionScheduling.order.project != ''"> |
| | | and o.project regexp #{productionScheduling.order.project} |
| | | </if> |
| | | <if test="productionScheduling.orderNumber != null and productionScheduling.orderNumber != ''"> |
| | | and ogd.order_number regexp #{productionScheduling.orderNumber} |
| | | </if> |
| | | <if test="productionScheduling.technologyNumber != null and productionScheduling.technologyNumber != ''"> |
| | | and ogd.technology_number regexp #{productionScheduling.technologyNumber} |
| | | </if> |
| | | order by ps.id desc |
| | | limit #{offset},#{pageSize}; |
| | | </select> |
| | | </mapper> |
| | |
| | | o.project, |
| | | o.order_id, |
| | | o.batch, |
| | | od.shape, |
| | | if(od.shape=1,'普形',if(od.shape=2,'异形','')) as shape, |
| | | ogd.order_number, |
| | | ogd.technology_number, |
| | | ogd.process, |
| | |
| | | ogd.child_height as childHeight, |
| | | fc.quantity, |
| | | round( ogd.child_width * ogd.child_height * fc.quantity / 1000000, 2 ) as area, |
| | | od.shape, |
| | | if(od.shape=1,'普形',if(od.shape=2,'异形','')) as shape, |
| | | od.remarks |
| | | FROM |
| | | sd.ORDER AS o |
| | |
| | | <select id="productionScheduleMp"> |
| | | select |
| | | a.order_number, |
| | | a.shape, |
| | | if(od.shape=1,'普形',if(od.shape=2,'异形','')) as shape, |
| | | a.product_name, |
| | | b.child_width, |
| | | b.child_height, |
| | |
| | | o.project, |
| | | o.order_id, |
| | | o.batch, |
| | | od.shape, |
| | | if(od.shape=1,'普形',if(od.shape=2,'异形','')) as shape, |
| | | ogd.order_number, |
| | | ogd.technology_number, |
| | | ogd.process, |
| | |
| | | rwd.order_number, |
| | | MAX( ogd.child_width ) as width, |
| | | MAX( ogd.child_height ) as height, |
| | | od.shape, |
| | | if(od.shape=1,'普形',if(od.shape=2,'异形','')) as shape, |
| | | sum( pd.thickness ) as thickness, |
| | | od.edging_type, |
| | | rwd.completed_quantity, |
| | |
| | | fc.quantity AS quantity_card, |
| | | ogd.child_width, |
| | | ogd.child_height, |
| | | od.shape, |
| | | if(od.shape=1,'普形',if(od.shape=2,'异形','')) as shape, |
| | | fc.quantity -odpd.reporting_work_num -odpd.broken_num as quantity, |
| | | fc.quantity -odpd.reporting_work_num -odpd.broken_num as completedQuantity, |
| | | odpd.reporting_work_num as completed, |
| | |
| | | fc.quantity AS quantity_card, |
| | | ogd.child_width, |
| | | ogd.child_height, |
| | | od.shape, |
| | | if(od.shape=1,'普形',if(od.shape=2,'异形','')) as shape, |
| | | if((odpds.reporting_work_num_count + ifnull(c.patchNumSum,0) -odpd.reporting_work_num_count -odpd.broken_num ) < 0, |
| | | 0, |
| | | odpds.reporting_work_num_count + ifnull(c.patchNumSum,0) -odpd.reporting_work_num_count -odpd.broken_num) as quantity, |
| | |
| | | c.quantity as quantity_card, |
| | | d.child_width, |
| | | d.child_height, |
| | | e.shape, |
| | | if(e.shape=1,'普形',if(e.shape=2,'异形','')) as shape, |
| | | if(ifnull(a.completed_quantity+a.breakage_quantity,0)=0, |
| | | c.quantity-ifnull(a.completed_quantity+a.breakage_quantity,0), |
| | | ifnull(a.completed_quantity+a.breakage_quantity,0)) as 'quantity', -- 可报工数 |