| | |
| | | options: [ |
| | | [ |
| | | |
| | | { code: 'exportExcelChecked', name: '导出选中', prefixIcon: 'vxe-icon-download', visible: true } |
| | | { code: 'exportExcelChecked', name: t('components.exportSelected'), prefixIcon: 'vxe-icon-download', visible: true } |
| | | ] |
| | | ] |
| | | } |
| | |
| | | return[ |
| | | columns.map((column, columnIndex) => { |
| | | if (columnIndex === 0) { |
| | | return '合计:' |
| | | return t('basicData.total') |
| | | } |
| | | if (props.childrenData.footList.includes(column.field)) { |
| | | return sumNum(data, column.field) |
| | |
| | | <el-date-picker |
| | | v-model="basicProp.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" |
| | | /> |
| | |
| | | id="searchButton" |
| | | type="primary" |
| | | style="margin-top: -5px" |
| | | :icon="Search">查询</el-button> |
| | | :icon="Search">{{$t('basicData.search')}}</el-button> |
| | | <div class="order-detail"> |
| | | <vxe-grid |
| | | @filter-change="filterChanged" |
| | |
| | | @click="exportExcel(props.childrenData.exportUrl, |
| | | props.childrenData.exportName, |
| | | basicProp.selectDate)"> |
| | | 导出</vxe-button> |
| | | {{$t('basicData.export')}}</vxe-button> |
| | | </template> |
| | | |
| | | <template #pager> |
| | |
| | | }) |
| | | |
| | | const saveTag = () => { |
| | | ElMessageBox.prompt( '新增标签名:', { |
| | | confirmButtonText: '保存', |
| | | cancelButtonText: '取消', |
| | | ElMessageBox.prompt( t('components.addNewSignature')+':', { |
| | | confirmButtonText: t('basicData.save'), |
| | | cancelButtonText: t('basicData.cancelButtonText'), |
| | | inputPattern:/^.{1,20}$/, |
| | | inputErrorMessage: '请输入20个字符以内的且不为空的字符', |
| | | inputErrorMessage: t('components.message'), |
| | | inputValue:tag.value.name |
| | | }).then(({ value }) => { |
| | | tag.value.name = value |
| | |
| | | tag.value.size = JSON.stringify(size.value) |
| | | request.post('tagStyle/saveTag',tag.value).then(res => { |
| | | if(res.code === '200' && res.data===true){ |
| | | ElMessage.success("保存成功") |
| | | ElMessage.success(t('basicData.msg.saveSuccess')) |
| | | getTags() |
| | | } |
| | | }) |
| | |
| | | const deleteTag = () => { |
| | | request.post(`tagStyle/deleteTag/${tag.value.id}`).then(res => { |
| | | if(res.code === '200' && res.data===true){ |
| | | ElMessage.success("删除成功") |
| | | ElMessage.success(t('basicData.msg.deleteSuccess')) |
| | | getTags() |
| | | close() |
| | | } |
| | |
| | | <el-container style="width: 100%;height: 100%;"> |
| | | <el-aside width="200px"> |
| | | <el-collapse v-model="activeName" accordion> |
| | | <el-collapse-item title="标签列表" name="1"> |
| | | <el-collapse-item :title="$t('components.orderHeader')" name="1"> |
| | | <div v-for="(tag,index) in tags" |
| | | :class="{'tag-active':index===clickIndex}" |
| | | @dblclick="searchTag(tag,index)"> |
| | |
| | | v-model="tag.type" |
| | | @change="changeType" |
| | | placeholder="" > |
| | | <el-option label="成品" :value="1"/> |
| | | <el-option label="半成品" :value="2"/> |
| | | <el-option :label="$t('components.finishedProduct')" :value="1"/> |
| | | <el-option :label="$t('components.semiFinishedProducts')" :value="2"/> |
| | | </el-select> |
| | | <el-select placeholder="订单表头"> |
| | | <el-option @click="addList(keys,item)" |
| | |
| | | <el-footer style="padding-top: 0.5rem"> |
| | | <el-popconfirm |
| | | width="220" |
| | | confirm-button-text="确定" |
| | | cancel-button-text="取消" |
| | | :confirm-button-text="$t('basicData.confirmButtonText')" |
| | | :cancel-button-text="$t('basicData.cancelButtonText')" |
| | | :icon="InfoFilled" |
| | | icon-color="#626AEF" |
| | | title="确定删除?" |
| | | :title="$t('searchOrder.deleteConfirm')" |
| | | @confirm="deleteTag" |
| | | v-if="tag.id!==null" |
| | | > |
| | | <template #reference> |
| | | <el-button type="primary" style="float: left" >删除</el-button> |
| | | <el-button type="primary" style="float: left" >{{ $t('basicData.delete') }}</el-button> |
| | | </template> |
| | | </el-popconfirm> |
| | | |
| | | <el-button type="primary" @click="clearList">清空</el-button> |
| | | <el-button v-if="tag.id===null" type="primary" @click="saveTag" >新增</el-button> |
| | | <el-button v-else type="primary" @click="saveTag" >修改</el-button> |
| | | <el-button type="primary" @click="clearList">{{ $t('basicData.empty') }}</el-button> |
| | | <el-button v-if="tag.id===null" type="primary" @click="saveTag" >{{ $t('basicData.insert') }}</el-button> |
| | | <el-button v-else type="primary" @click="saveTag" >{{ $t('basicData.update') }}</el-button> |
| | | </el-footer> |
| | | </el-container> |
| | | </el-container> |
| | |
| | | </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> |
| | | |
| | | </vxe-grid> |
| | |
| | | </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> |
| | | |
| | | </vxe-grid> |
| | |
| | | },//表头参数 |
| | | columns:[ |
| | | // {field: 'buildingNumber',width:120, title: '楼号',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter'}, sortable: true,filterMethod:filterChanged}, |
| | | {field: 'alias', title:'其他加工',minWith:'130'}, |
| | | {field: 'price', title:'单价',editRender: { name: 'input'}}, |
| | | {field: 'quantity', title:'数量' }, |
| | | {field: 'money', slots:{default:'default'}, title:'金额'} |
| | | {field: 'alias', title:t('components.otherProcessing'),minWith:'130'}, |
| | | {field: 'price', title:t('order.price'),editRender: { name: 'input'}}, |
| | | {field: 'quantity', title:t('order.quantity')}, |
| | | {field: 'money', slots:{default:'default'}, title:t('delivery.money')} |
| | | ], |
| | | //表单验证 |
| | | editRules: { |
| | |
| | | }, |
| | | toolbarConfig: { |
| | | buttons: [ |
| | | {'code': 'add', 'name': '新增',status: 'primary'}, |
| | | {'code': 'delete', 'name': '删除',status: 'primary'} |
| | | {'code': 'add', 'name': t('basicData.insert'),status: 'primary'}, |
| | | {'code': 'delete', 'name': t('basicData.delete'),status: 'primary'} |
| | | ], |
| | | |
| | | |
| | |
| | | } |
| | | case 'delete': { |
| | | if(rowClickIndex.value === null){ |
| | | ElMessage.warning('请先单击选择行') |
| | | ElMessage.warning(t('components.pleaseClickToSelectARowFirst')) |
| | | return |
| | | } |
| | | deleteColum(rowClickIndex.value.id) |
| | |
| | | const validate = async () => { |
| | | const errMap = await xGrid.value.validate(true) |
| | | if (errMap) { |
| | | ElMessage.error(`校验不通过!`) |
| | | ElMessage.error(t('basicData.msg.checkoutLose')) |
| | | return false |
| | | } |
| | | return true |
| | |
| | | |
| | | |
| | | const addColumn = () => { |
| | | ElMessageBox.prompt( '新增列名:', { |
| | | confirmButtonText: '新增', |
| | | cancelButtonText: '取消', |
| | | ElMessageBox.prompt( t('components.addColumnNames')+':', { |
| | | confirmButtonText: t('basicData.insert'), |
| | | cancelButtonText: t('basicData.cancelButtonText'), |
| | | inputPattern:/^.{1,20}$/, |
| | | inputErrorMessage: '请输入20个字符以内的且不为空的字符', |
| | | inputErrorMessage: t('components.message'), |
| | | }) |
| | | .then(({ value }) => { |
| | | request.post('/basicOtherMoney/save',{alias:value}).then(res=>{ |
| | | if (res.code==='200' && res.data!==false){ |
| | | ElMessage.success('新增成功') |
| | | ElMessage.success(t('basicData.msg.saveSuccess')) |
| | | setTimeout(()=>{ |
| | | window.location.reload() |
| | | },1500) |
| | | |
| | | }else{ |
| | | ElMessage.error('新增失败,不能重复添加或超过100条列') |
| | | ElMessage.error(t('basicData.msg.saveFail')) |
| | | } |
| | | }) |
| | | }) |
| | |
| | | |
| | | const deleteColum = (id) => { |
| | | ElMessageBox.confirm( |
| | | '确认删除此列名?', |
| | | t('searchOrder.deleteConfirm'), |
| | | 'Warning', |
| | | { |
| | | confirmButtonText: '删除', |
| | | cancelButtonText: '取消', |
| | | confirmButtonText: t('basicData.confirmButtonText'), |
| | | cancelButtonText: t('basicData.cancelButtonText'), |
| | | type: 'warning', |
| | | } |
| | | ) |
| | | .then(() => { |
| | | request.post(`/basicOtherMoney/deleteById/${id}`,).then(res=>{ |
| | | if (res.code==='200' && res.data!==false){ |
| | | ElMessage.success('删除成功') |
| | | ElMessage.success(t('basicData.msg.deleteSuccess')) |
| | | setTimeout(()=>{ |
| | | window.location.reload() |
| | | },1500) |
| | | }else{ |
| | | ElMessage.error('删除失败') |
| | | ElMessage.error(t('basicData.msg.deleteFail')) |
| | | } |
| | | }) |
| | | }) |
| | |
| | | orderId:null |
| | | }) |
| | | const columns = [ |
| | | {field: 'order_number',fixed:"left", width: 90,title: '订单序号',showOverflow:"ellipsis"}, |
| | | {field: 'order_number',fixed:"left", width: 90,title: t('order.OrderNum'),showOverflow:"ellipsis"}, |
| | | // {type:'expand',fixed:"left",slots: { content:'content' },width: 50}, |
| | | {field: 'product_name', width: 150, title: '产品名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'glass_child',width: 130, title: '单片名称' ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'order_type', width: 120,title: '订单类型',filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'process_id',width: 110, title: '流程卡号',filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'product_name', width: 150, title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'glass_child',width: 130, title: t('reportingWorks.glassChild') ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'order_type', width: 120,title: t('order.orderType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'process_id',width: 110, title: t('processCard.processId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | |
| | | {field: 'technology_number', width: 90,title: '小片顺序',showOverflow:"ellipsis"}, |
| | | {field: 'quantity', width: 90,title: '数量'}, |
| | | {field: 'shippedQuantity',width: 120, title: '发货数量'}, |
| | | {field: 'inventory',width: 120, title: '库存数量'}, |
| | | {field: 'inventoryArea',width: 120, title: '库存面积'}, |
| | | {field: 'broken_num',width: 90, title: '次破数量'}, |
| | | {field: 'technology_number', width: 90,title: t('processCard.technologyNumber'),showOverflow:"ellipsis"}, |
| | | {field: 'quantity', width: 90,title: t('order.quantity')}, |
| | | {field: 'shippedQuantity',width: 120, title: t('delivery.deliveryQuantity')}, |
| | | {field: 'inventory',width: 120, title: t('productStock.inventoryQuantity')}, |
| | | {field: 'inventoryArea',width: 120, title: t('report.inventoryArea')}, |
| | | {field: 'broken_num',width: 90, title: t('reportingWorks.quantityBroken')}, |
| | | ] |
| | | let column = [0,1,3,6,7,8,9] |
| | | |
| | |
| | | id:'sizeCheck', |
| | | toolbarConfig: { |
| | | buttons: [ |
| | | {'code': 'review', 'name': '审核',status: 'primary'}, |
| | | {'code': 'review', 'name': t('basicData.review'),status: 'primary'}, |
| | | ] |
| | | }, |
| | | |
| | |
| | | storage: true |
| | | }, |
| | | columns:[ |
| | | {field: 'width', title: '宽',editRender: { name: 'input'}}, |
| | | {field: 'height', title:'高', editRender: { name: 'input'}}, |
| | | {field: 'quantity', title: '数量' ,editRender: { name: 'input'}, }, |
| | | {field: 'width', title: t('order.width'),editRender: { name: 'input'}}, |
| | | {field: 'height', title:t('order.height'), editRender: { name: 'input'}}, |
| | | {field: 'quantity', title: t('order.quantity') ,editRender: { name: 'input'}, }, |
| | | ], |
| | | editRules: { |
| | | width: [ |
| | | { required: true, message: '必填,参数不一致' } |
| | | { required: true, message: t('components.inconsistentParameters') } |
| | | ], |
| | | height: [ |
| | | { required: true, message: '必填,参数不一致' } |
| | | { required: true, message:t('components.inconsistentParameters') } |
| | | ], |
| | | quantity: [ |
| | | { required: true, message: '必填,参数不一致' } |
| | | { required: true, message:t('components.inconsistentParameters') } |
| | | ] |
| | | } |
| | | }) |
| | |
| | | |
| | | <!--左边固定显示的插槽--> |
| | | <template #button_slot="{ row }"> |
| | | <el-button @click="gaveParent(row,'edit')" link type="primary" size="small">编辑</el-button> |
| | | <el-button @click="gaveParent(row,'delete')" link type="primary" size="small">删除</el-button> |
| | | <el-button @click="gaveParent(row,'edit')" link type="primary" size="small">{{ $t('basicData.edit') }}</el-button> |
| | | <el-button @click="gaveParent(row,'delete')" link type="primary" size="small">{{ $t('basicData.delete') }}</el-button> |
| | | </template> |
| | | |
| | | <template #num1_filter="{ column, $panel }"> |
| | |
| | | import deepClone from "@/utils/deepClone"; |
| | | import {ElMessage} from "element-plus"; |
| | | import router from "@/router"; |
| | | import {useI18n} from "vue-i18n"; |
| | | //prop接收父组件函数 |
| | | |
| | | |
| | | const { t } = useI18n() |
| | | |
| | | let props = defineProps({ |
| | | tableProp:{ |
| | |
| | | return[ |
| | | columns.map((column, columnIndex) => { |
| | | if (columnIndex === 0) { |
| | | return '合计:' |
| | | return t('basicData.total') |
| | | } |
| | | if (props.tableProp.footList.includes(column.field)) { |
| | | return sumNum(data, column.field) |
| | |
| | | switch (code) { |
| | | case 'checkList': { |
| | | if($grid.getCheckboxRecords().length==0){ |
| | | VXETable.modal.message( '请选择一条数据!') |
| | | VXETable.modal.message( t('searchOrder.msg')) |
| | | return |
| | | } |
| | | emit('getCheckList',$grid.getCheckboxRecords()) |
| | |
| | | } |
| | | case 'mySave': { |
| | | const { insertRecords, removeRecords, updateRecords } = $grid.getRecordset() |
| | | VXETable.modal.message({ content: `新增 ${insertRecords.length} 条,删除 ${removeRecords.length} 条,更新 ${updateRecords.length} 条`, status: 'success' }) |
| | | VXETable.modal.message({ content: `${t('basicData.insert')} ${insertRecords.length} ${t('components.strip')},${t('basicData.delete')} ${removeRecords.length} ${t('components.strip')},${t('basicData.update')} ${updateRecords.length} ${t('components.strip')}`, status: 'success' }) |
| | | break |
| | | } |
| | | case 'myExport': { |
| | |
| | | import deepClone from "@/utils/deepClone"; |
| | | import {ElMessage} from "element-plus"; |
| | | import useProductGlassTypeStore from "@/stores/sd/product/productGlassType" |
| | | import {useI18n} from "vue-i18n"; |
| | | const { t } = useI18n() |
| | | let productGlassTypeStore = useProductGlassTypeStore() |
| | | |
| | | let options=$ref([]) |
| | |
| | | v-model="productGlassTypeStore.GlassType" |
| | | :options="options" |
| | | clearable |
| | | placeholder="玻璃类别" |
| | | :placeholder="$t('orderBasicData.glassCategory')" |
| | | /> |
| | | </div> |
| | | </template> |
| | |
| | | updateAmountSuccessfully:'Updated amount successfully', |
| | | updateOrderState:'Order status update succeeded', |
| | | } |
| | | |
| | | }, |
| | | searchOrder:{ |
| | | createOrder:'Create', |
| | |
| | | reset:'Reset', |
| | | sure:'Sure', |
| | | }, |
| | | |
| | | workOrder:{ |
| | | workOrder:'Work Order Management', |
| | | productionId:'Production Order Number', |
| | |
| | | technologyNumber:'Chip Sequence', |
| | | otherRemarks:'Original Film Requirement', |
| | | }, |
| | | |
| | | reportingWorks:{ |
| | | glassAddress:'Glass Address', |
| | | WorkReportingManagement:'Work Reporting Management ', |
| | |
| | | thisCompletedQuantity:'This Completed Quantity', |
| | | thisWornQuantity:'This Worn Quantity', |
| | | passAudit:'Pass The Audit', |
| | | |
| | | |
| | | }, |
| | | |
| | | |
| | | |
| | | |
| | | productStock:{ |
| | | inventoryQuery:'Stock Inquiry', |
| | |
| | | quantityToBeStockedIn:'Quantity To Be Stocked In', |
| | | return:'Return', |
| | | reverseReviewList:'Reverse Review List', |
| | | |
| | | receivedSuccessfully:'Successfully entered the warehouse', |
| | | deliverySuccessful:"Successfully transferred out of warehouse ", |
| | | successfullyRetrieved:'Successfully claimed', |
| | |
| | | reviewSuccessful:'Successfully review ', |
| | | invalidSuccessfully:'Successfully cancel', |
| | | reverseReviewSuccessful:'Successfully re-audit', |
| | | |
| | | confirmWithdrawal:'Take Out Confirmation', |
| | | pickingOutRecords:'Take Out Records', |
| | | confirmTransfer:'Mutual Exchange Confirmation', |
| | |
| | | reworkRecords:'Rework Records', |
| | | warehousingRecords:'Warehousing Records', |
| | | outboundRecords:'Outbound Records', |
| | | |
| | | |
| | | pleaseSelectTheTypeOfWithdrawal:'Please select the type of withdrawal', |
| | | pleaseSelectTheTypeOfRework:'Please select the type of rework', |
| | | receivedQuantity:'Received Quantity', |
| | |
| | | receivedReworkedQuantity:'Received/Reworked Quantity', |
| | | inventoryQuantity:'Inventory Quantity', |
| | | availableQuantity:'Available Quantity', |
| | | |
| | | newOrderNumber:'New Order Number', |
| | | newOrderId:'New Order Id', |
| | | transferOrderNumber:'Mutual Exchange Order Number', |
| | | operationOrderNumber:'Operation Order Number', |
| | | inventoryArea:'Inventory Location', |
| | | |
| | | |
| | | dataVerificationFailed:'Fail data check', |
| | | unselectedData:'No data selected', |
| | | pleaseEnterAPositiveInteger:'Please enter a positive integer', |
| | |
| | | claimedQuantityCannotBeEmptyOr0:'The claimed quantity cannot be empty or 0', |
| | | theReworkQuantityCannotBeGreaterThanTheOrderQuantity:'The quantity of rework cannot be greater than the number of orders', |
| | | reworkQuantityCannotBeEmptyOr0:'Rework quantity cannot be empty or 0', |
| | | |
| | | storageTime:'Warehouse Entry Time', |
| | | outboundTime:'Time Of Leaving The Warehouse', |
| | | modificationTime:'modification Time', |
| | |
| | | reviewed:'Audit Staff', |
| | | documentStatus:'Document Status', |
| | | status:'Status', |
| | | |
| | | totalNumberOfOrders :'Total Number Of Orders', |
| | | quantityAlreadyInStock:'Quantity Already In Stock', |
| | | totalArea:'Total Area', |
| | |
| | | customerHomePage:'Customer Homepage', |
| | | increaseCustomers:'Increase Customers', |
| | | resetting:'Revoke', |
| | | |
| | | }, |
| | | delivery:{ |
| | | delivery:'Delivery', |
| | |
| | | deliveryNoteId:'Delivery Note Id', |
| | | deliveryNoteNumber:'Delivery Note Number', |
| | | deliveryDate:"Delivery Date ", |
| | | |
| | | }, |
| | | replenish:{ |
| | | patchManagement:'Patch Management', |
| | | addPatches:"Add Patches ", |
| | | printPatches:'Print Patches', |
| | | patchNumber:'Patch Number', |
| | | |
| | | mark:'Mark', |
| | | sliceMarking:'Slice Marking', |
| | | |
| | | |
| | | |
| | | }, |
| | | rework:{ |
| | | reworkManagement:'Rework Management', |
| | |
| | | reworkProcess:'Rework Process', |
| | | reworkType:'Rework Type', |
| | | reworkArea:'Rework Area', |
| | | |
| | | PleaseSelectAReworkTeam:'Please select a rework team', |
| | | TheReworkQuantityCannotBeGreaterThanTheSecondBreakQuantity:'The rework quantity cannot be greater than the second break quantity', |
| | | reworkQuantityCannotBeEmptyOr0:'Rework quantity cannot be empty or 0', |
| | |
| | | sizeReview:'尺寸审核', |
| | | reportForms:'报表', |
| | | print:'打印', |
| | | export:'导出', |
| | | empty:'清空', |
| | | msg:{ |
| | | max255:"最多输入255个字符", |
| | | range99999Dec2: |
| | |
| | | saveFail:'保存失败', |
| | | cancelReviewSuccess:'反审成功', |
| | | ReviewSuccess:'审核成功', |
| | | |
| | | ServerConnectionError:'服务器连接错误', |
| | | deleteSuccess:'删除成功', |
| | | deleteFail:'删除失败', |
| | | cancelReviewFail:'反审失败', |
| | | reviewFail:'审核失败', |
| | | noProductDataInTheTable:'表格中无产品数据', |
| | | tableDataExceedsMaximumLimit:'表格数据超过最大限制', |
| | | |
| | | |
| | | } |
| | | }, |
| | | product:{ |
| | |
| | | cancelReview:'反审', |
| | | theProductHasBeenReviewedAndCannotBeDeleted:'产品已审核,无法删除', |
| | | } |
| | | |
| | | |
| | | }, |
| | | |
| | | order:{ |
| | | orderHomePage:'订单首页', |
| | | orderReport:'订单明细报表', |
| | |
| | | importMaxCheckFailLast:'条,请分订单导入', |
| | | updateAmountSuccessfully:'更新金额成功', |
| | | updateOrderState:'更新订单状态成功', |
| | | |
| | | calculationAreaPrompt1:'存在', |
| | | calculationAreaPrompt2:'条结算单片面积小于', |
| | | calculationAreaPrompt3:'是否按照', |
| | | calculationAreaPrompt4:'计算', |
| | | warning:'提示', |
| | | } |
| | | |
| | | }, |
| | |
| | | msgDelete:'已审核的订单不能删除', |
| | | msgDeleteFail:'删除失败', |
| | | msgDeleteSuccess:'删除成功', |
| | | deleteConfirm:'确认删除订单?', |
| | | deleteConfirm:'确认删除?', |
| | | orderType:'订单类型', |
| | | processFlows:'流程卡进度', |
| | | copy:'复制订单', |
| | |
| | | msgList:{ |
| | | checkOrder:'未查询到订单信息,请先单击订单' |
| | | } |
| | | |
| | | }, |
| | | craft:{ |
| | | glassAddress:'标记', |
| | |
| | | deleteNoProcedure:'删除失败,检查下工序是否已报工', |
| | | pleaseCheckTheRequiredData:'请勾选需要的数据', |
| | | }, |
| | | |
| | | reportingWorks:{ |
| | | glassAddress:'片标记', |
| | | WorkReportingManagement:'报工管理', |
| | |
| | | thisWornQuantity:'本工序次破', |
| | | passAudit:'审核通过', |
| | | |
| | | ThanEqualTo1:'请输入大于等于', |
| | | ThanEqualTo2:'的数字', |
| | | |
| | | selectResponsibleTeam:'请选择责任班组', |
| | | selectWorkReportingTeam:'请选择责任班组', |
| | | successfulModificationOfWorkApplication:'报工修改成功', |
| | |
| | | qualityInsTime:'质检时间', |
| | | completedArea:'完工面积', |
| | | wornArea:'次破面积', |
| | | |
| | | pleaseGreaterThanOrEqual1:'请输入大于等于', |
| | | pleaseGreaterThanOrEqual2:'的数字', |
| | | lossCount1:'损耗数', |
| | | lossCount2:'不能大于', |
| | | pleaseCheckTheOrderNumber1:'请检查订单序号', |
| | | pleaseCheckTheOrderNumber2:'报工数量是否相同', |
| | | pleaseNumber1:'序号', |
| | | pleaseNumber2:'小片顺序', |
| | | pleaseNumber3:'实际可报工数量', |
| | | pleaseNumber4:'报工数量', |
| | | pleaseNumber5:'请刷新界面重新报工', |
| | | pleaseNumber6:'序号', |
| | | pleaseNumber7:'的数量不能大于上工序数量', |
| | | pleaseNumber8:'请输入序号', |
| | | pleaseNumber9:'正确的完工或次破数量', |
| | | |
| | | }, |
| | | |
| | | |
| | | |
| | | |
| | | productStock:{ |
| | | inventoryQuery:'库存查询', |
| | |
| | | quantityToBeStockedIn:'待入库数量', |
| | | return:'返回', |
| | | reverseReviewList:'反审列表', |
| | | |
| | | |
| | | |
| | | receivedSuccessfully:'入库成功', |
| | | deliverySuccessful:"出库成功 ", |
| | | successfullyRetrieved:'领出成功', |
| | |
| | | reviewSuccessful:'审核成功', |
| | | invalidSuccessfully:'返库成功', |
| | | reverseReviewSuccessful:'反审成功', |
| | | |
| | | confirmWithdrawal:'确认领出', |
| | | pickingOutRecords:'领出记录', |
| | | confirmTransfer:'确认调拨', |
| | |
| | | reworkRecords:'返工记录', |
| | | warehousingRecords:'入库记录', |
| | | outboundRecords:'出库记录', |
| | | |
| | | |
| | | pleaseSelectTheTypeOfWithdrawal:'请选择领出类型', |
| | | pleaseSelectTheTypeOfRework:'请选择返工类型', |
| | | receivedQuantity:'领出数量', |
| | |
| | | receivedReworkedQuantity:'领出/返工数量', |
| | | inventoryQuantity:'库存数量', |
| | | availableQuantity:'可用数量', |
| | | |
| | | newOrderNumber:'新订单序号', |
| | | newOrderId:'新订单号', |
| | | transferOrderNumber:'调拨单号', |
| | | operationOrderNumber:'操作单号', |
| | | inventoryArea:'库存区域', |
| | | |
| | | |
| | | dataVerificationFailed:'数据校验失败', |
| | | unselectedData:'未选中数据', |
| | | pleaseEnterAPositiveInteger:'请输入正整数', |
| | |
| | | claimedQuantityCannotBeEmptyOr0:'领出数量不能为空或者是0', |
| | | theReworkQuantityCannotBeGreaterThanTheOrderQuantity:'返工数量不能大于订单数', |
| | | reworkQuantityCannotBeEmptyOr0:'返工数量不能为空或者是0', |
| | | |
| | | storageTime:'入库时间', |
| | | outboundTime:'出库时间', |
| | | modificationTime:'修改时间', |
| | |
| | | reviewed:'审核人', |
| | | documentStatus:'单据状态', |
| | | status:'状态', |
| | | |
| | | totalNumberOfOrders :'订单总数', |
| | | quantityAlreadyInStock:'已入数量', |
| | | totalArea:'总面积', |
| | | singlePieceArea:'单片面积', |
| | | perimeter:'周长', |
| | | returnToWarehouse:'撤销', |
| | | |
| | | entryFailure:'入库失败', |
| | | entry:'入库', |
| | | failedToRetrieve:'领出失败', |
| | | deliveryFailed:'发货失败', |
| | | reworkFailed:'返工失败', |
| | | transferFailed:'调拨失败', |
| | | approved:'已审核', |
| | | notPassed:'未通过', |
| | | cancellationFailed:'反作废失败', |
| | | voidFailed:'作废失败', |
| | | staterOperationOrderNumber:'调拨销售单号', |
| | | endOperationOrderNumber:'调拨序号', |
| | | typeClaim:'领出类型', |
| | | |
| | | |
| | | }, |
| | |
| | | unpaidQuantity:"未发数量 ", |
| | | availableStock:'可用库存', |
| | | deliveryQuantity:'发货数量', |
| | | |
| | | pleaseEnterTheAmountOfFunds:'请输入项目名称', |
| | | pleaseSelectPaymentTerms:"请选择付款条件 ", |
| | | pleaseEnterThePaymentMethod:"请输入收款方式 ", |
| | |
| | | pleaseEnterANumericalValueGreaterThanOrEqualTo0:'请输入大于等于0的数值', |
| | | theShipmentQuantityCannotBeGreaterThanTheInventoryQuantity:"发货数量不能大于库存数 ", |
| | | theShipmentQuantityCannotBeEmptyOr0:"发货数量不能为空或者是0 ", |
| | | |
| | | paymentTerms:'付款条件', |
| | | paymentDate:"收款日期 ", |
| | | selectDate:'选择日期', |
| | |
| | | addPatches:"补片新增 ", |
| | | printPatches:'补片打印', |
| | | patchNumber:'补片单号', |
| | | |
| | | mark:'标记', |
| | | sliceMarking:'片标记', |
| | | |
| | |
| | | reworkProcess:'返工工序', |
| | | reworkType:'返工类型', |
| | | reworkArea:'返工面积', |
| | | |
| | | PleaseSelectAReworkTeam:'请选择返工班组', |
| | | TheReworkQuantityCannotBeGreaterThanTheSecondBreakQuantity:'返工数量不能大于次破数量', |
| | | reworkQuantityCannotBeEmptyOr0:'返工数量不能为空或者是0', |
| | | |
| | | }, |
| | | |
| | | |
| | | role:{ |
| | | id:'ID', |
| | |
| | | permission:'权限', |
| | | rolePermissions:'角色权限', |
| | | permissionSelection:"权限选择 ", |
| | | |
| | | |
| | | ConfirmModifyingRolePermissions:'确认修改角色权限?', |
| | | PleaseEnterANewRole:'请输入新角色', |
| | | AddANewRole:'新增角色', |
| | | CannotBeEmptyAndTheLengthCannotExceed255:'不能为空且长度不能超过255', |
| | | |
| | | }, |
| | | |
| | | user:{ |
| | | userId:'用户ID', |
| | | userHomepage:'用户首页', |
| | |
| | | OldPassword:'旧密码', |
| | | TheNewPassword:'新密码', |
| | | ConfirmPassword:'确认密码', |
| | | |
| | | OldPasswordCannotBeEmpty:'旧密码不能为空', |
| | | TheNewPasswordCannotBeEmpty:'新密码不能为空', |
| | | ThePasswordLengthCannotBeLessThan6OrMoreThan16:'密码长度不能低于6或超过16', |
| | | ConfirmPasswordCannotBeEmpty:'确认密码不能为空', |
| | | TheTwoPasswordsAreNotTheSame:'两次密码不相同', |
| | | OldPasswordError:'旧密码错误', |
| | | |
| | | |
| | | }, |
| | | |
| | | orderBasicData:{ |
| | | order:'订单', |
| | | orderType:'订单类型', |
| | |
| | | paymentTerms:'付款条件', |
| | | payMethod:'收款方式', |
| | | delivery:'送货', |
| | | |
| | | basicType:'基础类型', |
| | | name:'名称', |
| | | glassCategory:'玻璃类别', |
| | | level:'类别等级', |
| | | firstLevel:'一级类别', |
| | | towLevel:'二级类别', |
| | | |
| | | }, |
| | | |
| | | machine:{ |
| | | basicId:'设备编号', |
| | | basicName:'设备名称', |
| | |
| | | process:'所在工序', |
| | | personnel:'维修/保养人员', |
| | | cost:'费用', |
| | | |
| | | equipmentSituation:'设备情况', |
| | | equipmentAddition:'设备新增', |
| | | maintenanceAndRepair:'保养与维修', |
| | |
| | | maintenanceAndRepairEdit:'保养与维修编辑', |
| | | service:'维修', |
| | | maintain:'保养', |
| | | |
| | | faultCount:'维修次数', |
| | | maintenanceCount:'保养次数', |
| | | faultLastTime:'最后维修时间', |
| | | maintenanceLastTime:'最后保养时间', |
| | | faultCost:'维修费用', |
| | | maintenanceCost:'保养费用', |
| | | |
| | | |
| | | deviceEditing:'设备编辑', |
| | | standardName:'标准名称', |
| | | purchaseTime:'购买时间', |
| | | installationTime:'安装时间', |
| | | maintenanceCycle:'保养周期', |
| | | cutting:'切割', |
| | | edgeGrinding:'磨边', |
| | | tempering:'钢化', |
| | | }, |
| | | report:{ |
| | | productionReport:'生产报表', |
| | | workInProgressReport:'在制品报表', |
| | | processToBeCompleted:'工序待完成报表', |
| | | productionAndShippingProgress:'生产发货进度报表', |
| | | processCardProgress:'流程卡进度报表', |
| | | orderPlanDecomposition:'订单计划分解报表', |
| | | secondaryBrokenReport:'次破报表', |
| | | crossProcessBreakdown:'跨工序次破报表', |
| | | teamOutput:'班组产量报表', |
| | | splittingDetails:'分架明细报表', |
| | | TaskCompletionStatus:'任务完成情况报表', |
| | | rawMaterialRequisition:'原片领料报表', |
| | | qualityReport:'品质报表', |
| | | yieldReport:'成品率报表', |
| | | workingProcedure:'工序', |
| | | inventoryArea:'库存面积', |
| | | pleaseSelectADateFirst:'请先选择日期', |
| | | pleaseSelectAProcessFirst:'请先选择工序', |
| | | theFilteringTimeForExportCannotExceed180Days:'导出的筛选时间不能超过180天', |
| | | orderTime :'下单时间', |
| | | deliveryDate:'交货日期', |
| | | completedQuantity:'已完成数量', |
| | | completedArea:'已完成面积', |
| | | unfinishedQuantity :'未完成数量', |
| | | unfinishedArea:'未完成面积', |
| | | inventoryNum:'入库数量', |
| | | shippedQuantity :'发货数量', |
| | | area:'发货面积', |
| | | noDataFoundForThisOrder:'未查询到此订单数据', |
| | | startTime:'切割开始时间', |
| | | daysDifference :'生产天数', |
| | | accomplish:'是否清单', |
| | | receivedNo:'未入库数量', |
| | | projectNo :'工程编号', |
| | | quantityClaimed :'已领数量', |
| | | areaClaimed :'已领面积', |
| | | dateClaimed :'领出日期', |
| | | quantityMax :'投入数量', |
| | | patchNum :'补片数量', |
| | | finished :'成品率', |
| | | finishedProductReport :'成品报表', |
| | | }, |
| | | productionBasicData:{ |
| | | basicDataQuery :'基础数据查询', |
| | | newTypeOfSecondaryDamageAdded :'次破类型新增', |
| | | reasonForSecondaryFailureAdded :'次破原因新增', |
| | | teamAdditionAndAddition :'班组新增新增', |
| | | id:'id', |
| | | basicName:'类别', |
| | | basicDataEdit:'基础数据修改', |
| | | teamName:'班组名称', |
| | | processInvolved:'所在工序', |
| | | }, |
| | | mainIngredient:{ |
| | | materialInformation :'物料资料', |
| | | materialAddition :'物料新增', |
| | | originalFilm :'原片', |
| | | accessories :'辅料', |
| | | materialCode :'物料编码', |
| | | pleaseSelectACategory :'请选择类别', |
| | | films :'膜系', |
| | | pleaseEnterData :'请输入数据', |
| | | pleaseEnter :'请输入', |
| | | }, |
| | | mainIngredientStock:{ |
| | | materialName :'物料名称', |
| | | producer :'产地', |
| | | dateOfManufacture :'生产日期', |
| | | selectIngredientsStock :'物料库存', |
| | | materialOutbound :'物料出库', |
| | | returnToStorage :'返库', |
| | | inventory :'库存', |
| | | engineering :'工程', |
| | | inventoryOrganization :'库存组织', |
| | | id :'库存编号', |
| | | projectNo :'工程号', |
| | | planQuantity :'计划数量', |
| | | qualityGuaranteePeriod :'保质期', |
| | | pleaseSelectInventoryOrganization :'请选择库存组织', |
| | | pleaseEnterTheQuantity :'请输入数量', |
| | | pleaseDateOfManufacture :'请选择生产日期', |
| | | materialOutboundId :'出库单号', |
| | | materialRequisitionPersonnel :'领料员', |
| | | materialRequisitionTeam :'领料班组', |
| | | outboundType :'出库类型', |
| | | warehouseManager :'仓管员', |
| | | materialRequisitionDate :'领料日期', |
| | | reviewed :'审核员', |
| | | reviewedTime :'审核时间', |
| | | outboundQuantity :'出库数量', |
| | | materialOutboundType :'材料出库类型', |
| | | pleaseOutboundType :'请选择出库类型', |
| | | pleaseMaterialRequisitionPersonnel :'请输入领料员', |
| | | pleaseMaterialRequisitionTeam :'请输入领料班组', |
| | | pleaseOrderId :'请输入销售单号', |
| | | theOutboundQuantityCannotBeGreaterThanTheAvailableQuantity :'出库数量不能大于可用数量', |
| | | theOutboundQuantityCannotBeEmptyOrEqualTo0 :'出库数量不能为空或者是等于0', |
| | | theReturnQuantityCannotBeEmptyOrEqualTo0 :'返库数量不能为空或者是等于0', |
| | | returningId :'返库单号', |
| | | returningType :'返库类型', |
| | | returningAdd :'返库新增', |
| | | returnQuantity :'返库数量', |
| | | materialReturnType :'材料返库类型', |
| | | createTime :'返库日期', |
| | | }, |
| | | mainBasicData:{ |
| | | BasicData :'基础数据', |
| | | operateTypeName :'名称', |
| | | operateType :'别称', |
| | | type :'类型', |
| | | takeOut :'领出', |
| | | }, |
| | | components:{ |
| | | addNewSignature :'新增标签名', |
| | | addColumnNames :'新增列名', |
| | | message :'请输入20个字符以内的且不为空的字符', |
| | | activeName :'标签列表', |
| | | orderHeader :'订单表头', |
| | | finishedProduct :'成品', |
| | | semiFinishedProducts :'半成品', |
| | | pleaseClickToSelectARowFirst :'请先单击选择行', |
| | | otherProcessing :'其他加工', |
| | | inconsistentParameters :'必填,参数不一致', |
| | | strip :'条', |
| | | exportSelected :'导出选中', |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | |
| | | component: () => import('../views/pp/processCard/PrintLabel.vue'), |
| | | }, |
| | | { |
| | | path: 'printCustomLabel', |
| | | name: 'printCustomLabel', |
| | | component: () => import('../views/pp/processCard/PrintCustomLabel.vue'), |
| | | }, |
| | | { |
| | | path: 'productionScheduling', |
| | | name: 'productionScheduling', |
| | | component: () => import('../views/pp/processCard/ProductionScheduling.vue'), |
| | |
| | | <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/warehouseBasicData/warehouseSearchBasicData' }">基础数据</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/warehouseBasicData/warehouseSearchBasicData' }">{{$t('mainBasicData.BasicData')}}</el-breadcrumb-item> |
| | | <el-breadcrumb-item v-show="false" :to="{ path: '/main/order/orderReport' }">{{$t('productStock.reportForms')}}</el-breadcrumb-item> |
| | | </el-breadcrumb> |
| | | </div> |
| | |
| | | input:'' |
| | | }) |
| | | let options=ref([ |
| | | { label: "库存组织", |
| | | { label: t('mainIngredientStock.inventoryOrganization'), |
| | | value: "inventoryOrganization", |
| | | }, |
| | | { label: "领出", |
| | | { label: t('mainBasicData.takeOut'), |
| | | value: "takeOut", |
| | | }, |
| | | { label: "材料出库类型", |
| | | { label: t('mainIngredientStock.materialOutboundType'), |
| | | value: "outboundType", |
| | | }, |
| | | { label: "材料返库类型", |
| | | { label: t('mainIngredientStock.materialReturnType'), |
| | | value: "returningType", |
| | | }, |
| | | ]) |
| | |
| | | const emit = defineEmits(['gaveParent']) |
| | | const saveBasicData = () =>{ |
| | | if (basic.value.operateType[0]==='inventoryOrganization'){ |
| | | basic.value.type='库存组织' |
| | | basic.value.type=t('mainIngredientStock.inventoryOrganization') |
| | | } |
| | | else if(basic.value.operateType[0]==='takeOut'){ |
| | | basic.value.type='领出' |
| | | basic.value.type=t('mainBasicData.takeOut') |
| | | } |
| | | else if(basic.value.operateType[0]==='outboundType'){ |
| | | basic.value.type='材料出库类型' |
| | | basic.value.type=t('mainIngredientStock.materialOutboundType') |
| | | } |
| | | else if(basic.value.operateType[0]==='returningType'){ |
| | | basic.value.type='材料返库类型' |
| | | basic.value.type=t('mainIngredientStock.materialReturnType') |
| | | } |
| | | if(basic.value.operateType[0]==='' || basic.value.input===''){ |
| | | return |
| | | } |
| | | request.post(`/BasicWarehouse/addBasicWarehouse`, basic.value).then(res => { |
| | | if (res.data) { |
| | | ElMessage.success('保存成功') |
| | | ElMessage.success(t('basicData.msg.saveSuccess')) |
| | | emit('gaveParent', true) |
| | | } |
| | | }).catch((err)=>{ |
| | | ElMessage.error('系统错误') |
| | | ElMessage.error(t('basicData.msg.ServerConnectionError')) |
| | | router.push("/login") |
| | | }) |
| | | } |
| | |
| | | submitArr.type = basic.value.type |
| | | submitArr.operateTypeName = basic.value.input |
| | | if(basic.value.input===''){ |
| | | ElMessage.warning('请输入数据') |
| | | ElMessage.warning(t('mainIngredient.pleaseEnterData')) |
| | | }else{ |
| | | request.post(`/BasicWarehouse/updateBasicWarehouse`, submitArr).then(res => { |
| | | if (res.data) { |
| | | ElMessage.success('修改成功') |
| | | ElMessage.success(t('basicData.msg.saveSuccess')) |
| | | emit('gaveParent', true) |
| | | } |
| | | }).catch((err)=>{ |
| | | ElMessage.error('系统错误') |
| | | ElMessage.error(t('basicData.msg.ServerConnectionError')) |
| | | router.push("/login") |
| | | }) |
| | | } |
| | |
| | | <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.operateType" |
| | |
| | | </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:'operateTypeName',title: '名称'}, |
| | | {field:'operateType',title: '别称'}, |
| | | {field:'type',title: '类型'}, |
| | | {field:'createTime',title: '创建日期'}, |
| | | {type: 'seq', title: t('basicData.Number'), width: 80 ,fixed:"left",}, |
| | | {field:'operateTypeName',title: t('mainBasicData.operateTypeName')}, |
| | | {field:'operateType',title: t('mainBasicData.operateType')}, |
| | | {field:'type',title: t('mainBasicData.type')}, |
| | | {field:'createTime',title: t('basicData.creationTime')}, |
| | | |
| | | |
| | | ], |
| | |
| | | //表头按钮 |
| | | toolbarConfig: { |
| | | buttons: [ |
| | | {'code': 'add', 'name': '新增',status: 'primary'}, |
| | | {'code': 'add', 'name': t('basicData.insert'),status: 'primary'}, |
| | | ], |
| | | |
| | | // import: false, |
| | |
| | | ElMessage.warning(t('searchOrder.msgDeleteFail')) |
| | | } |
| | | }).catch((err)=>{ |
| | | ElMessage.error('系统错误') |
| | | ElMessage.error(t('basicData.msg.ServerConnectionError')) |
| | | router.push("/login") |
| | | }) |
| | | break |
| | |
| | | <el-button @click="getTableRow(row,'edit')" |
| | | v-if="userStore.user.permissions.indexOf('warehouseSearchBasicData.edit') > -1" |
| | | link type="primary" size="small">{{ $t('basicData.edit') }}</el-button> |
| | | <el-popconfirm @confirm="getTableRow(row,'delete')" title="确定删除数据?"> |
| | | <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> |
| | |
| | | import useUserInfo from "@/stores/userInfo" |
| | | 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() |
| | | const value = ref('') |
| | | const options = [ |
| | | { |
| | | value: '原片', |
| | | label: '原片' |
| | | value: t('mainIngredient.originalFilm'), |
| | | label: t('mainIngredient.originalFilm') |
| | | }, |
| | | { |
| | | value: '辅料', |
| | | label: '辅料', |
| | | value: t('mainIngredient.accessories'), |
| | | label: t('mainIngredient.accessories'), |
| | | } |
| | | ] |
| | | |
| | |
| | | filterData[item.OperateType]=item.Type |
| | | const customerName = item.Type |
| | | if(customerName === null || customerName === undefined || customerName === ''){ |
| | | ElMessage.error('请输入'+item.OperateTypeName) |
| | | ElMessage.error(t('mainIngredient.pleaseEnter')+item.OperateTypeName) |
| | | isBool=false |
| | | return |
| | | } |
| | |
| | | |
| | | let materialStore |
| | | |
| | | if(value.value==='原片'){ |
| | | if(value.value===t('mainIngredient.originalFilm')){ |
| | | materialStore={ |
| | | id:ruleForm.value.id, |
| | | type:value.value, |
| | |
| | | width:BasicData.value[0].Type, |
| | | height:BasicData.value[1].Type |
| | | } |
| | | }else if(value.value==='辅料'){ |
| | | }else if(value.value===t('mainIngredient.accessories')){ |
| | | materialStore={ |
| | | id:ruleForm.value.id, |
| | | type:value.value, |
| | |
| | | request.post("/MaterialStore/saveMaterialStore", materialStore).then((res) => { |
| | | if(res.code==200 && res.data===true){ |
| | | resetForm() |
| | | ElMessage.success('保存成功') |
| | | ElMessage.success(t('basicData.msg.saveSuccess')) |
| | | }else{ |
| | | ElMessage.warning("保存失败") |
| | | ElMessage.warning(t('basicData.msg.saveFail')) |
| | | } |
| | | }).catch((err)=>{ |
| | | ElMessage.error('系统错误') |
| | | ElMessage.error(t('basicData.msg.ServerConnectionError')) |
| | | router.push("/login") |
| | | }) |
| | | } |
| | |
| | | <div> |
| | | <el-row> |
| | | <el-col :span="4"> |
| | | <el-select v-model="value" placeholder="请选择类别" @change="getWork"> |
| | | <el-select v-model="value" :placeholder="$t('mainIngredient.pleaseSelectACategory')" @change="getWork"> |
| | | <el-option |
| | | v-for="item in options" |
| | | :key="item.value" |
| | |
| | | v-for="item in BasicData" > |
| | | <el-col :span="4.5" > |
| | | {{item.OperateTypeName}}: |
| | | <el-select filterable v-if="item.OperateTypeName=='膜系'" v-model="item.Type" placeholder="请输入数据" style="width: 150px; height: 30px;" > |
| | | <el-select filterable v-if="item.OperateTypeName==$t('mainIngredient.films')" v-model="item.Type" :placeholder="$t('mainIngredient.pleaseEnterData')" style="width: 150px; height: 30px;" > |
| | | <el-option |
| | | v-for="item in titleSelectJson" |
| | | :key="item.id" |
| | |
| | | :value="item.basicName" |
| | | /> |
| | | </el-select> |
| | | <el-input v-else v-model="item.Type" placeholder="请输入数据" style="width: 150px; height: 30px;" /> |
| | | <el-input v-else v-model="item.Type" :placeholder="$t('mainIngredient.pleaseEnterData')" style="width: 150px; height: 30px;" /> |
| | | |
| | | </el-col> |
| | | |
| | |
| | | <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/ingredients/SelectIngredients' }">物料资料</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/ingredients/CreateIngredients' }">物料新增</el-breadcrumb-item> |
| | | <el-breadcrumb-item v-show="false" :to="{ path: '/main/order/orderReport' }">报表</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/ingredients/SelectIngredients' }">{{$t('mainIngredient.materialInformation')}}</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/ingredients/CreateIngredients' }">{{$t('mainIngredient.materialAddition')}}</el-breadcrumb-item> |
| | | <el-breadcrumb-item v-show="false" :to="{ path: '/main/order/orderReport' }">{{$t('mainIngredient.materialAddition')}}</el-breadcrumb-item> |
| | | </el-breadcrumb> |
| | | |
| | | </div> |
| | |
| | | }) |
| | | request.post("/MaterialStore/deleteMaterialStore",flowData.value).then((res) => { |
| | | if(res.code==200 && res.data===true){ |
| | | ElMessage.success("删除成功") |
| | | ElMessage.success(t('basicData.msg.deleteSuccess')) |
| | | router.push({path:'/main/ingredients/SelectIngredients',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") |
| | | }) |
| | | return |
| | |
| | | const value = ref('') |
| | | const options = [ |
| | | { |
| | | value: '原片', |
| | | label: '原片' |
| | | value: t('mainIngredient.originalFilm'), |
| | | label: t('mainIngredient.originalFilm') |
| | | }, |
| | | { |
| | | value: '辅料', |
| | | label: '辅料', |
| | | value: t('mainIngredient.accessories'), |
| | | label: t('mainIngredient.accessories'), |
| | | } |
| | | ] |
| | | |
| | |
| | | |
| | | let arr = [ |
| | | {type:'expand',fixed:'left',slots: { content:'content' },width: '60'}, |
| | | {title: '操作', width: '110', slots: { default: 'button_slot' },fixed:'left'}, |
| | | { type: 'seq',fixed:'left', title: '自序', width: '80' }, |
| | | {field: 'id', width: '150',title: '物料编码', sortable: true,showOverflow:'ellipsis' ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged} |
| | | {title: t('basicData.operate'), width: '110', slots: { default: 'button_slot' },fixed:'left'}, |
| | | { type: 'seq',fixed:'left', title: t('basicData.Number'), width: '80' }, |
| | | {field: 'id', width: '150',title: t('mainIngredient.materialCode'), sortable: true,showOverflow:'ellipsis' ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged} |
| | | ] |
| | | |
| | | //第一次加载默认 |
| | | value.value='原片' |
| | | filterData.value.type='原片' |
| | | value.value=t('mainIngredient.originalFilm') |
| | | filterData.value.type=t('mainIngredient.originalFilm') |
| | | request.get(`/BasicWarehouse/BasicWarehouseType/${value.value}`).then((res) => { |
| | | if(res.code==200){ |
| | | gridOptions.columns.splice(0,gridOptions.columns.length) |
| | |
| | | align: 'center',//文字居中 |
| | | stripe:true,//斑马纹 |
| | | rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮 |
| | | id: 'CustomerList', |
| | | id: 'SelectIngredients', |
| | | showFooter: true,//显示脚 |
| | | printConfig: {}, |
| | | importConfig: {}, |
| | |
| | | return[ |
| | | columns.map((column, columnIndex) => { |
| | | if (columnIndex === 0) { |
| | | return '合计:' |
| | | return t('basicData.total') |
| | | } |
| | | |
| | | return '' |
| | |
| | | <div> |
| | | <el-row> |
| | | <el-col :span="4"> |
| | | <el-select v-model="value" placeholder="请选择类别" @change="getWork"> |
| | | <el-select v-model="value" :placeholder="$t('mainIngredient.pleaseSelectACategory')" @change="getWork"> |
| | | <el-option |
| | | v-for="item in options" |
| | | :key="item.value" |
| | |
| | | <template #button_slot="{ row }"> |
| | | <el-button @click="getTableRow(row,'edit')" |
| | | v-if="userStore.user.permissions.indexOf('SelectIngredients.edit') > -1" |
| | | link type="primary" size="small">编辑</el-button> |
| | | <el-popconfirm @confirm="getTableRow(row,'delete')" title="确定删除?"> |
| | | 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">{{ $t('basicData.delete') }}</el-button> |
| | | </template> |
| | |
| | | let materialStore= ref([]) |
| | | |
| | | let arr = [ |
| | | {type:'expand',fixed:"left",slots: { content:'content' },width: '60'}, |
| | | {field: 'select',type: 'checkbox',fixed:"left", title: '选择', width: '80' }, |
| | | { type: 'seq',fixed:"left", title: '自序', width: '80' }, |
| | | {field: 'inventoryOrganization', width:'150', title: '库存组织', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged }, |
| | | {field: 'materialCode', width: '150',title: '物料编码', sortable: true,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'producer', width: '100',title: '产地', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'projectNo', width: '100',title: '工程号', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'inventoryQuantity',width: '100', title: '库存数量', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'availableQuantity', width: '100',title: '可用库存', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'outboundQuantity', width:'150', title: '出库数量', sortable: true,editRender: { name: 'input', attrs: { placeholder: '' } }}, |
| | | {field: 'singlePieceArea', width: '100',title: '单片面积', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'dateOfManufacture',width: '100', title: '生产日期', sortable: true}, |
| | | {field: 'inventoryArea',width: '100', title: '库存区域', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'remarks',width: '80', title: '备注', sortable: true,editRender: { name: 'input', attrs: { placeholder: '' } }}, |
| | | //{type:'expand',fixed:"left",slots: { content:'content' },width: '60'}, |
| | | {field: 'select',type: 'checkbox',fixed:"left", title: t('basicData.check'), width: '80' }, |
| | | { type: 'seq',fixed:"left", title: t('basicData.Number'), width: '80' }, |
| | | {field: 'inventoryOrganization', width:'150', title: t('mainIngredientStock.inventoryOrganization'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged }, |
| | | {field: 'materialCode', width: '150',title: t('mainIngredient.materialCode'), sortable: true,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'producer', width: '100',title: t('mainIngredientStock.producer'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'projectNo', width: '100',title: t('mainIngredientStock.projectNo'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'inventoryQuantity',width: '100', title: t('productStock.inventoryQuantity'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'availableQuantity', width: '100',title: t('productStock.availableQuantity'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'outboundQuantity', width:'150', title: t('mainIngredientStock.outboundQuantity'), sortable: true,editRender: { name: 'input', attrs: { placeholder: '' } }}, |
| | | {field: 'singlePieceArea', width: '100',title: t('productStock.singlePieceArea'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'dateOfManufacture',width: '100', title: t('mainIngredientStock.dateOfManufacture'), sortable: true}, |
| | | {field: 'inventoryArea',width: '100', title: t('productStock.inventoryArea'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'remarks',width: '80', title: t('basicData.remarks'), sortable: true,editRender: { name: 'input', attrs: { placeholder: '' } }}, |
| | | ] |
| | | |
| | | |
| | | //页面第一次加载 |
| | | request.get(`/BasicWarehouse/BasicWarehouseTypes/材料出库类型`).then((res) => { |
| | | request.get(`/BasicWarehouse/BasicWarehouseTypes/`+t('mainIngredientStock.materialOutboundType')).then((res) => { |
| | | |
| | | if(res.code==200){ |
| | | |
| | |
| | | |
| | | //列查询 |
| | | const getWork = () => { |
| | | request.get(`/BasicWarehouse/BasicWarehouseType/原片|辅料`).then((res) => { |
| | | request.get(`/BasicWarehouse/BasicWarehouseType/`+t('mainIngredient.originalFilm')+'|'+t('mainIngredient.accessories')).then((res) => { |
| | | if(res.code==200){ |
| | | gridOptions.columns=[] |
| | | BasicData.value = res.data |
| | |
| | | const type = route.query.type |
| | | if (typeof id !== 'undefined' && id !== null && id !== '' && id !== '\n' && id !== '\r'){ |
| | | |
| | | if(type==='库存'){ |
| | | if(type===t('mainIngredientStock.inventory')){ |
| | | filterData.value.stockId=id |
| | | number.value=id |
| | | request.post("/MaterialInventory/getSelectMaterialInventory/1/100",filterData.value).then((res) => { |
| | |
| | | //表头数据校验 |
| | | const outboundType = titleUploadData.value.outboundType |
| | | if(outboundType === null || outboundType === undefined || outboundType === ''){ |
| | | ElMessage.error("请选择出库类型") |
| | | ElMessage.error(t('mainIngredientStock.pleaseOutboundType')) |
| | | return |
| | | } |
| | | const materialRequisitionPersonnel = titleUploadData.value.materialRequisitionPersonnel |
| | | if(materialRequisitionPersonnel === null || materialRequisitionPersonnel === undefined || materialRequisitionPersonnel === ''){ |
| | | ElMessage.error("请输入领料员") |
| | | ElMessage.error(t('mainIngredientStock.pleaseMaterialRequisitionPersonnel')) |
| | | return |
| | | } |
| | | const materialRequisitionTeam = titleUploadData.value.materialRequisitionTeam |
| | | if(materialRequisitionTeam === null || materialRequisitionTeam === undefined || materialRequisitionTeam === ''){ |
| | | ElMessage.error("请输入领料班组") |
| | | ElMessage.error(t('mainIngredientStock.pleaseMaterialRequisitionTeam')) |
| | | return |
| | | } |
| | | const orderId = titleUploadData.value.orderId |
| | | if(orderId === null || orderId === undefined || orderId === ''){ |
| | | ElMessage.error("请输入销售单号") |
| | | ElMessage.error(t('mainIngredientStock.pleaseOrderId')) |
| | | return |
| | | } |
| | | |
| | |
| | | }) |
| | | request.post("/MaterialInventory/saveMaterialOutbound", flowData.value).then((res) => { |
| | | if(res.code==200){ |
| | | ElMessage.success('保存成功') |
| | | ElMessage.success(t('basicData.msg.saveSuccess')) |
| | | router.push({path: '/main/ingredientsStock/MaterialOutbound', query:{random:Math.random()}}) |
| | | }else{ |
| | | ElMessage.warning(res.msg) |
| | |
| | | ElMessage.success(t('basicData.msg.ReviewSuccess')) |
| | | router.push({path: '/main/ingredientsStock/MaterialOutbound', 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/ingredientsStock/MaterialOutbound', query:{random:Math.random()}}) |
| | | } else { |
| | | ElMessage.warning("反审失败") |
| | | ElMessage.warning(t('basicData.msg.cancelReviewFail')) |
| | | router.push("/login") |
| | | } |
| | | }).catch((err)=>{ |
| | | ElMessage.error('系统错误') |
| | | ElMessage.error(t('basicData.msg.ServerConnectionError')) |
| | | router.push("/login") |
| | | }) |
| | | break |
| | |
| | | align: 'center',//文字居中 |
| | | stripe:true,//斑马纹 |
| | | rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮 |
| | | id: 'CustomerList', |
| | | id: 'CreateOutBound', |
| | | showFooter: true,//显示脚 |
| | | printConfig: {}, |
| | | importConfig: {}, |
| | |
| | | outboundQuantity: [{ |
| | | validator (e) { |
| | | if (e.row.outboundQuantity > e.row.availableQuantity) { |
| | | return new Error("出库数量不能大于可用数量") |
| | | return new Error(t('mainIngredientStock.theOutboundQuantityCannotBeGreaterThanTheAvailableQuantity')) |
| | | }else if (e.row.outboundQuantity ==="") { |
| | | return new Error("出库数量不能为空或者是等于0") |
| | | return new Error(t('mainIngredientStock.theOutboundQuantityCannotBeEmptyOrEqualTo0')) |
| | | } |
| | | const regex = /^[1-9]\d*$/g |
| | | if ( !regex.test(e.row.outboundQuantity) ) { |
| | |
| | | <div class="main-div"> |
| | | <div class="order-primary" style="background-color: white"> |
| | | <el-row> |
| | | <el-col :span="2"><el-text>领料日期:</el-text></el-col> |
| | | <el-col :span="2"><el-text>{{$t('mainIngredientStock.materialRequisitionDate')}}:</el-text></el-col> |
| | | <el-col :span="3"><el-input v-model="titleUploadData.materialRequisitionDate" :readonly="true" ></el-input></el-col> |
| | | <el-col :span="2"><el-text>领料员:</el-text></el-col> |
| | | <el-col :span="2"><el-text>{{$t('mainIngredientStock.materialRequisitionPersonnel')}}:</el-text></el-col> |
| | | <el-col :span="3"><el-input v-model="titleUploadData.materialRequisitionPersonnel" /></el-col> |
| | | <el-col :span="2"><el-text>领料班组:</el-text></el-col> |
| | | <el-col :span="2"><el-text>{{$t('mainIngredientStock.materialRequisitionTeam')}}:</el-text></el-col> |
| | | <el-col :span="3"><el-input v-model="titleUploadData.materialRequisitionTeam" /></el-col> |
| | | |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="2"><el-text>出库类型:</el-text></el-col> |
| | | <el-col :span="2"><el-text>{{$t('mainIngredientStock.outboundType')}}:</el-text></el-col> |
| | | <el-col :span="3"> |
| | | <el-select v-model="titleUploadData.outboundType" clearable placeholder="" > |
| | | <el-option |
| | |
| | | /> |
| | | </el-select> |
| | | </el-col> |
| | | <el-col :span="2"><el-text>销售单号:</el-text></el-col> |
| | | <el-col :span="2"><el-text>{{$t('order.orderId')}}:</el-text></el-col> |
| | | <el-col :span="3"><el-input v-model="titleUploadData.orderId" /></el-col> |
| | | <el-col :span="2"><el-text>仓管员:</el-text></el-col> |
| | | <el-col :span="2"><el-text>{{$t('mainIngredientStock.warehouseManager')}}:</el-text></el-col> |
| | | <el-col :span="3"><el-input v-model="titleUploadData.warehouseManager" :readonly="true" /></el-col> |
| | | |
| | | </el-row> |
| | |
| | | |
| | | <!--左边固定显示的插槽--> |
| | | <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('basicData.edit')}}</el-button> |
| | | <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">{{$t('basicData.delete')}}</el-button> |
| | | </template> |
| | | |
| | | <template #num1_filter="{ column, $panel }"> |
| | |
| | | <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/ingredientsStock/SelectIngredientsStock' }">物料库存</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/ingredientsStock/MaterialOutbound' }">物料出库</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/ingredientsStock/SelectIngredientsStock' }">{{$t('mainIngredientStock.selectIngredientsStock')}}</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/ingredientsStock/MaterialOutbound' }">{{$t('mainIngredientStock.materialOutbound')}}</el-breadcrumb-item> |
| | | <!-- <el-breadcrumb-item @click="changeRouter(3)" :class="indexFlag===3?'indexTag':''" :to="{ path: '/main/ingredientsStock/OriginalMonthlySettlement' }">原片月结</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(4)" :class="indexFlag===4?'indexTag':''" :to="{ path: '/main/ingredientsStock/AccessoriesMonthlySettlement' }">辅料月结</el-breadcrumb-item>--> |
| | | <el-breadcrumb-item @click="changeRouter(5)" :class="indexFlag===5?'indexTag':''" :to="{ path: '/main/ingredientsStock/ReturnToStorage' }">返库</el-breadcrumb-item> |
| | | <el-breadcrumb-item v-show="false" :to="{ path: '/main/order/orderReport' }">报表</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(5)" :class="indexFlag===5?'indexTag':''" :to="{ path: '/main/ingredientsStock/ReturnToStorage' }">{{$t('mainIngredientStock.returnToStorage')}}</el-breadcrumb-item> |
| | | <el-breadcrumb-item v-show="false" :to="{ path: '/main/order/orderReport' }">{{$t('mainIngredientStock.returnToStorage')}}</el-breadcrumb-item> |
| | | </el-breadcrumb> |
| | | |
| | | </div> |
| | |
| | | ElMessage.success(t('searchOrder.msgDeleteSuccess')) |
| | | router.push({path:'/main/ingredientsStock/MaterialOutbound', query:{random:Math.random()}}) |
| | | }else{ |
| | | ElMessage.warning("删除失败") |
| | | ElMessage.warning(t('basicData.msg.deleteSuccess')) |
| | | router.push("/login") |
| | | } |
| | | }).catch((err)=>{ |
| | | ElMessage.error('系统错误') |
| | | ElMessage.error(t('basicData.msg.ServerConnectionError')) |
| | | router.push("/login") |
| | | }) |
| | | |
| | |
| | | align: 'center',//文字居中 |
| | | stripe:true,//斑马纹 |
| | | rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮 |
| | | id: 'CustomerList', |
| | | id: 'MaterialOutbound', |
| | | showFooter: true,//显示脚 |
| | | printConfig: {}, |
| | | importConfig: {}, |
| | |
| | | },//表头参数 |
| | | columns:[ |
| | | {type:'expand',fixed:"left",slots: { content:'content' },width: '60'}, |
| | | {title: '操作', width: '110', slots: { default: 'button_slot' },fixed:"left"}, |
| | | { type: 'seq',fixed:"left", title: '自序', width: '80' }, |
| | | {field: 'reviewedState',title: '审核', width: 50, slots: { default: 'state' },}, |
| | | {field: 'materialOutboundId', width:'150', title: '出库单号', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'materialRequisitionPersonnel', width: '150',title: '领料员', sortable: true,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'materialRequisitionTeam', width: '120',title: '领料班组', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'orderId', width:'150', title: '销售单号', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'outboundType', width: '100',title: '出库类型', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'warehouseManager',width: '100', title: '仓管员', sortable: true,showOverflow:"ellipsis",filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'materialRequisitionDate', width: '80',title: '领料日期', sortable: true}, |
| | | {field: 'reviewed',width: '100', title: '审核员', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'reviewedTime', width: '100',title: '审核时间', sortable: true}, |
| | | {field: 'createTime',width: '100', title: '创建时间', sortable: true}, |
| | | {title: t('basicData.operate'), width: '110', slots: { default: 'button_slot' },fixed:"left"}, |
| | | { type: 'seq',fixed:"left", title: t('basicData.Number'), width: '80' }, |
| | | {field: 'reviewedState',title: t('basicData.review'), width: 50, slots: { default: 'state' },}, |
| | | {field: 'materialOutboundId', width:'150', title: t('mainIngredientStock.materialOutboundId'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'materialRequisitionPersonnel', width: '150',title: t('mainIngredientStock.materialRequisitionPersonnel'), sortable: true,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'materialRequisitionTeam', width: '120',title: t('mainIngredientStock.materialRequisitionTeam'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'orderId', width:'150', title: t('order.orderId'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'outboundType', width: '100',title: t('mainIngredientStock.outboundType'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'warehouseManager',width: '100', title: t('mainIngredientStock.warehouseManager'), sortable: true,showOverflow:"ellipsis",filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'materialRequisitionDate', width: '80',title: t('mainIngredientStock.materialRequisitionDate'), sortable: true}, |
| | | {field: 'reviewed',width: '100', title: t('mainIngredientStock.reviewed'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'reviewedTime', width: '100',title: t('mainIngredientStock.reviewedTime'), sortable: true}, |
| | | {field: 'createTime',width: '100', title: t('basicData.creationTime'), sortable: true}, |
| | | ],//表头按钮 |
| | | toolbarConfig: { |
| | | |
| | |
| | | return[ |
| | | columns.map((column, columnIndex) => { |
| | | if (columnIndex === 0) { |
| | | return '合计:' |
| | | return t('basicData.total') |
| | | } |
| | | // if (props.tableProp.footList.includes(column.field)) { |
| | | // return sumNum(data, column.field) |
| | |
| | | <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" |
| | | |
| | | /> |
| | | <el-button @click="changeDate" style="margin-top: -5px" id="searchButton" type="primary" :icon="Search">查询</el-button> |
| | | <el-button @click="changeDate" style="margin-top: -5px" id="searchButton" type="primary" :icon="Search">{{$t('basicData.search')}}</el-button> |
| | | |
| | | <vxe-grid |
| | | max-height="100%" |
| | |
| | | <template #button_slot="{ row }"> |
| | | <el-button @click="getTableRow(row,'edit')" |
| | | v-if="userStore.user.permissions.indexOf('MaterialOutbound.edit') > -1" |
| | | link type="primary" size="small">编辑</el-button> |
| | | link type="primary" size="small">{{$t('basicData.edit')}}</el-button> |
| | | <!-- <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">删除</el-button>--> |
| | | </template> |
| | | |
| | |
| | | align: 'center',//文字居中 |
| | | stripe:true,//斑马纹 |
| | | rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮 |
| | | id: 'CustomerList', |
| | | id: 'ReturnToStorage', |
| | | showFooter: true,//显示脚 |
| | | printConfig: {}, |
| | | importConfig: {}, |
| | |
| | | columns:[ |
| | | {type:'expand',fixed:"left",slots: { content:'content' },width: '60'}, |
| | | {title: '操作', width: '110', slots: { default: 'button_slot' },fixed:"left"}, |
| | | { type: 'seq',fixed:"left", title: '自序', width: '80' }, |
| | | {field: 'reviewedState',title: '审核', width: 50, slots: { default: 'state' },}, |
| | | {field: 'returningId', width:'150', title: '返库单号', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'materialRequisitionPersonnel', width: '150',title: '领料员/供应商', sortable: true,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'materialRequisitionTeam', width: '120',title: '领料班组/供应商', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'orderId', width:'150', title: '销售单号', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'project', width:'150', title: '项目名称', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'batch', width:'150', title: '批次', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'returningType', width: '100',title: '返库类型', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'warehouseManager',width: '100', title: '仓管员', sortable: true,showOverflow:"ellipsis",filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'reviewed',width: '100', title: '审核员', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'reviewedTime', width: '100',title: '审核时间', sortable: true}, |
| | | {field: 'createTime',width: '100', title: '制单日期', sortable: true}, |
| | | { type: 'seq',fixed:"left", title: t('basicData.Number'), width: '80' }, |
| | | {field: 'reviewedState',title: t('basicData.review'), width: 50, slots: { default: 'state' },}, |
| | | {field: 'returningId', width:'150', title: t('mainIngredientStock.returningId'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'materialRequisitionPersonnel', width: '150',title: t('mainIngredientStock.materialRequisitionPersonnel'), sortable: true,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'materialRequisitionTeam', width: '120',title: t('mainIngredientStock.materialRequisitionTeam'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'orderId', width:'150', title: t('order.orderId'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'project', width:'150', title: t('order.project'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'batch', width:'150', title: t('order.batch'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'returningType', width: '100',title: t('mainIngredientStock.returningType'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'warehouseManager',width: '100', title: t('mainIngredientStock.warehouseManager'), sortable: true,showOverflow:"ellipsis",filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'reviewed',width: '100', title:t('mainIngredientStock.reviewed'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'reviewedTime', width: '100',title: t('mainIngredientStock.reviewedTime'), sortable: true}, |
| | | {field: 'createTime',width: '100', title: t('basicData.creationTime'), sortable: true}, |
| | | ],//表头按钮 |
| | | toolbarConfig: { |
| | | buttons: [ |
| | | {'code': 'add', 'name': '返库新增',status: 'primary'}, |
| | | {'code': 'add', 'name': t('mainIngredientStock.returningAdd'),status: 'primary'}, |
| | | ], |
| | | /*import: false, |
| | | export: true, |
| | |
| | | return[ |
| | | columns.map((column, columnIndex) => { |
| | | if (columnIndex === 0) { |
| | | return '合计:' |
| | | return t('basicData.total') |
| | | } |
| | | // if (props.tableProp.footList.includes(column.field)) { |
| | | // return sumNum(data, column.field) |
| | |
| | | <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" |
| | | |
| | | /> |
| | | <el-button @click="changeDate" style="margin-top: -5px" id="searchButton" type="primary" :icon="Search">查询</el-button> |
| | | <el-button @click="changeDate" style="margin-top: -5px" id="searchButton" type="primary" :icon="Search">{{$t('basicData.search')}}</el-button> |
| | | |
| | | <vxe-grid |
| | | max-height="100%" |
| | |
| | | <template #button_slot="{ row }"> |
| | | <el-button @click="getTableRow(row,'edit')" |
| | | v-if="userStore.user.permissions.indexOf('ReturnToStorage.edit') > -1" |
| | | link type="primary" size="small">编辑</el-button> |
| | | link type="primary" size="small">{{$t('basicData.edit')}}</el-button> |
| | | <!-- <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">删除</el-button>--> |
| | | </template> |
| | | |
| | |
| | | const value = ref('') |
| | | const options = [ |
| | | { |
| | | value: '原片', |
| | | label: '原片' |
| | | value: t('mainIngredient.originalFilm'), |
| | | label: t('mainIngredient.originalFilm') |
| | | }, |
| | | { |
| | | value: '辅料', |
| | | label: '辅料', |
| | | value: t('mainIngredient.accessories'), |
| | | label: t('mainIngredient.accessories'), |
| | | } |
| | | ] |
| | | |
| | | let arr = [ |
| | | {field: 'select',type: 'checkbox',fixed:"left", title: '选择', width: '80' }, |
| | | { type: 'seq',fixed:"left", title: '自序', width: '80' }, |
| | | {field: 'returnQuantity', width:'150', title: '返库数量', sortable: true,editRender: { name: 'input', attrs: { placeholder: '' } }}, |
| | | {field: 'dateOfManufacture', width:'150', title: '生产日期', sortable: true,editRender: {name: 'input', attrs: {placeholder: '', type: 'date'}},}, |
| | | {field: 'select',type: 'checkbox',fixed:"left", title: t('basicData.check'), width: '80' }, |
| | | { type: 'seq',fixed:"left", title: t('basicData.Number'), width: '80' }, |
| | | {field: 'returnQuantity', width:'150', title: t('mainIngredientStock.returnQuantity'), sortable: true,editRender: { name: 'input', attrs: { placeholder: '' } }}, |
| | | {field: 'dateOfManufacture', width:'150', title: t('mainIngredientStock.dateOfManufacture'), sortable: true,editRender: {name: 'input', attrs: {placeholder: '', type: 'date'}},}, |
| | | |
| | | {field: 'inventoryOrganization', width:'150', title: '库存组织', sortable: true,folding: true,slots: { edit: 'inventoryOrganization'},editRender: { name: '$select', attrs: { placeholder: '' } }}, |
| | | {field: 'producer', width:'150', title: '产地', sortable: true,editRender: { name: 'input', attrs: { placeholder: '' } }}, |
| | | {field: 'qualityGuaranteePeriod', width:'150', title: '保质期', sortable: true,editRender: { name: 'input', attrs: { placeholder: '' } }}, |
| | | {field: 'inventoryArea', width:'150', title: '库存区域',sortable: true,editRender: { name: 'input', attrs: { placeholder: '' } }}, |
| | | {field: 'inventoryOrganization', width:'150', title: t('mainIngredientStock.inventoryOrganization'), sortable: true,folding: true,slots: { edit: 'inventoryOrganization'},editRender: { name: '$select', attrs: { placeholder: '' } }}, |
| | | {field: 'producer', width:'150', title: t('mainIngredientStock.producer'), sortable: true,editRender: { name: 'input', attrs: { placeholder: '' } }}, |
| | | {field: 'qualityGuaranteePeriod', width:'150', title: t('mainIngredientStock.qualityGuaranteePeriod'), sortable: true,editRender: { name: 'input', attrs: { placeholder: '' } }}, |
| | | {field: 'inventoryArea', width:'150', title: t('productStock.inventoryArea'),sortable: true,editRender: { name: 'input', attrs: { placeholder: '' } }}, |
| | | |
| | | {field: 'remarks',width: '80', title: '备注', sortable: true,editRender: { name: 'input', attrs: { placeholder: '' } }}, |
| | | {field: 'id', width: '150',title: '物料编码', sortable: true,showOverflow:'ellipsis' ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged} |
| | | {field: 'remarks',width: '80', title: t('basicData.remarks'), sortable: true,editRender: { name: 'input', attrs: { placeholder: '' } }}, |
| | | {field: 'id', width: '150',title: t('mainIngredient.materialCode'), sortable: true,showOverflow:'ellipsis' ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged} |
| | | ] |
| | | |
| | | |
| | | |
| | | |
| | | //页面第一次加载 |
| | | request.get(`/BasicWarehouse/BasicWarehouseTypes/库存组织|材料返库类型`).then((res) => { |
| | | request.get(`/BasicWarehouse/BasicWarehouseTypes/`+t('mainIngredientStock.inventoryOrganization')+'|'+t('mainIngredientStock.materialReturnType')).then((res) => { |
| | | |
| | | if(res.code==200){ |
| | | titleSelectJson.value=deepClone(res.data) |
| | |
| | | if(res.code==200){ |
| | | titleUploadData.value=deepClone(res.data.returningWarehouse) |
| | | //根据审核状态显示审核按钮或者是反审按钮 |
| | | value.value='原片|辅料' |
| | | value.value=t('mainIngredient.originalFilm')+'|'+t('mainIngredient.accessories') |
| | | getStoreWork() |
| | | if(titleUploadData.value.reviewedState!==0){ |
| | | gridOptions.toolbarConfig.buttons[1].disabled = true |
| | |
| | | //显示复选框 |
| | | xGrid.value.showColumn("select") |
| | | |
| | | value.value='原片' |
| | | value.value=t('mainIngredient.originalFilm') |
| | | getStoreWork() |
| | | |
| | | getStoreWorks() |
| | |
| | | //库存组织 |
| | | const getInventoryOrganization=()=>{ |
| | | //页面第一次加载 |
| | | request.get(`/BasicWarehouse/BasicWarehouseTypes/库存组织|材料返库类型`).then((res) => { |
| | | request.get(`/BasicWarehouse/BasicWarehouseTypes//`+t('mainIngredientStock.inventoryOrganization')+'|'+t('mainIngredientStock.materialReturnType')).then((res) => { |
| | | |
| | | if(res.code==200){ |
| | | titleSelectJson.value=deepClone(res.data) |
| | |
| | | materialStore.value[i].json=(JSON.parse(res.data.data[i].json)) |
| | | |
| | | } |
| | | if(value.value==='原片'){ |
| | | if(value.value===t('mainIngredient.originalFilm')){ |
| | | materialStore.value.forEach(item => { |
| | | item['inventoryOrganization'] = titleSelectJson.value["inventoryOrganization"][0].operateTypeName |
| | | }) |
| | | }else if(value.value==='辅料'){ |
| | | }else if(value.value===t('mainIngredient.accessories')){ |
| | | materialStore.value.forEach(item => { |
| | | item['inventoryOrganization'] = titleSelectJson.value["inventoryOrganization"][1].operateTypeName |
| | | }) |
| | |
| | | } |
| | | const materialRequisitionPersonnel = titleUploadData.value.materialRequisitionPersonnel |
| | | if(materialRequisitionPersonnel === null || materialRequisitionPersonnel === undefined || materialRequisitionPersonnel === ''){ |
| | | ElMessage.error("请输入领料员") |
| | | ElMessage.error(t('mainIngredientStock.materialRequisitionPersonnel')) |
| | | return |
| | | } |
| | | const materialRequisitionTeam = titleUploadData.value.materialRequisitionTeam |
| | | if(materialRequisitionTeam === null || materialRequisitionTeam === undefined || materialRequisitionTeam === ''){ |
| | | ElMessage.error("请输入领料班组") |
| | | ElMessage.error(t('mainIngredientStock.materialRequisitionTeam')) |
| | | return |
| | | } |
| | | const orderId = titleUploadData.value.orderId |
| | | if(orderId === null || orderId === undefined || orderId === ''){ |
| | | ElMessage.error("请输入销售单号") |
| | | ElMessage.error(t('order.orderId')) |
| | | return |
| | | } |
| | | const project = titleUploadData.value.project |
| | | if(project === null || project === undefined || project === ''){ |
| | | ElMessage.error("请输入项目名称") |
| | | ElMessage.error(t('order.project')) |
| | | return |
| | | } |
| | | const batch = titleUploadData.value.batch |
| | | if(batch === null || batch === undefined || batch === ''){ |
| | | ElMessage.error("请输入批次") |
| | | ElMessage.error(t('order.batch')) |
| | | return |
| | | } |
| | | |
| | |
| | | }) |
| | | request.post("/MaterialInventory/saveReturningWarehouse", flowData.value).then((res) => { |
| | | if(res.code==200 && res.data===true){ |
| | | ElMessage.success('保存成功') |
| | | ElMessage.success(t('basicData.msg.saveSuccess')) |
| | | router.push({path: '/main/ingredientsStock/ReturnToStorage', 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/ingredientsStock/ReturnToStorage', 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/ingredientsStock/ReturnToStorage', query:{random:Math.random()}}) |
| | | } else { |
| | | ElMessage.warning("反审失败") |
| | | ElMessage.warning(t('basicData.msg.cancelReviewFail')) |
| | | router.push("/login") |
| | | } |
| | | }).catch((err)=>{ |
| | | ElMessage.error('系统错误') |
| | | ElMessage.error(t('basicData.msg.ServerConnectionError')) |
| | | router.push("/login") |
| | | }) |
| | | break |
| | |
| | | align: 'center',//文字居中 |
| | | stripe:true,//斑马纹 |
| | | rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮 |
| | | id: 'OrderList', |
| | | id: 'ReturnToStorageCreate', |
| | | showFooter: true,//显示脚 |
| | | printConfig: {}, |
| | | importConfig: {}, |
| | |
| | | return[ |
| | | columns.map((column, columnIndex) => { |
| | | if (columnIndex === 0) { |
| | | return '合计:' |
| | | return t('basicData.total') |
| | | } |
| | | // if (props.tableProp.footList.includes(column.field)) { |
| | | // return sumNum(data, column.field) |
| | |
| | | returnQuantity: [{ |
| | | validator (e) { |
| | | if (e.row.returnQuantity ==="") { |
| | | return new Error("返库数量不能为空或者是等于0") |
| | | return new Error(t('mainIngredientStock.theReturnQuantityCannotBeEmptyOrEqualTo0')) |
| | | } |
| | | const regex = /^[1-9]\d*$/g |
| | | if ( !regex.test(e.row.returnQuantity) ) { |
| | |
| | | |
| | | <div class="order-primary" style="background-color: white"> |
| | | <el-row> |
| | | <el-col :span="2"><el-text>返库日期:</el-text></el-col> |
| | | <el-col :span="2"><el-text>{{$t('mainIngredientStock.createTime')}}:</el-text></el-col> |
| | | <el-col :span="3"><el-input v-model="titleUploadData.createTime" :readonly="true" ></el-input></el-col> |
| | | <el-col :span="2"><el-text>领料员/供应商:</el-text></el-col> |
| | | <el-col :span="2"><el-text>{{$t('mainIngredientStock.materialRequisitionPersonnel')}}:</el-text></el-col> |
| | | <el-col :span="3"><el-input v-model="titleUploadData.materialRequisitionPersonnel" /></el-col> |
| | | <el-col :span="2"><el-text>领料班组/供应商:</el-text></el-col> |
| | | <el-col :span="2"><el-text>{{$t('mainIngredientStock.materialRequisitionTeam')}}:</el-text></el-col> |
| | | <el-col :span="3"><el-input v-model="titleUploadData.materialRequisitionTeam" /></el-col> |
| | | <el-col :span="2"><el-text>仓管员:</el-text></el-col> |
| | | <el-col :span="2"><el-text>{{$t('mainIngredientStock.warehouseManager')}}:</el-text></el-col> |
| | | <el-col :span="3"><el-input v-model="titleUploadData.warehouseManager" :readonly="true" /></el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="2"><el-text>返库类型:</el-text></el-col> |
| | | <el-col :span="2"><el-text>{{$t('mainIngredientStock.returningType')}}:</el-text></el-col> |
| | | <el-col :span="3"> |
| | | <el-select v-model="titleUploadData.returningType" clearable placeholder="" > |
| | | <el-option |
| | |
| | | /> |
| | | </el-select> |
| | | </el-col> |
| | | <el-col :span="2"><el-text>销售单号:</el-text></el-col> |
| | | <el-col :span="2"><el-text>{{$t('order.orderId')}}:</el-text></el-col> |
| | | <el-col :span="3"><el-input v-model="titleUploadData.orderId" /></el-col> |
| | | <el-col :span="2"><el-text>项目名称:</el-text></el-col> |
| | | <el-col :span="2"><el-text>{{$t('order.project')}}:</el-text></el-col> |
| | | <el-col :span="3"><el-input v-model="titleUploadData.project" /></el-col> |
| | | <el-col :span="2"><el-text>批次:</el-text></el-col> |
| | | <el-col :span="2"><el-text>{{$t('order.batch')}}:</el-text></el-col> |
| | | <el-col :span="3"><el-input v-model="titleUploadData.batch" /></el-col> |
| | | |
| | | |
| | |
| | | |
| | | |
| | | <el-row> |
| | | <el-select v-model="value" placeholder="请选择类别" @change="getWork" style="margin-top: 10px;border: #181818 1px solid;"> |
| | | <el-select v-model="value" :placeholder="$t('mainIngredient.pleaseSelectACategory')" @change="getWork" style="margin-top: 10px;border: #181818 1px solid;"> |
| | | <el-option |
| | | v-for="item in options" |
| | | :key="item.value" |
| | |
| | | const values = ref('') |
| | | const selectOptions = [ |
| | | { |
| | | value: '库存', |
| | | label: '库存' |
| | | value: t('mainIngredientStock.inventory'), |
| | | label: t('mainIngredientStock.inventory') |
| | | }, |
| | | { |
| | | value: '工程', |
| | | label: '工程', |
| | | value: t('mainIngredientStock.engineering'), |
| | | label: t('mainIngredientStock.engineering'), |
| | | } |
| | | ] |
| | | |
| | |
| | | |
| | | let arr = [ |
| | | |
| | | { type: 'checkbox',fixed:"left", title: '选择', width: '80' }, |
| | | { type: 'seq',fixed:"left", title: '自序', width: '80' }, |
| | | {field: 'inventoryOrganization', width:'150', title: '库存组织', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged }, |
| | | {field: 'materialCode', width: '150',title: '物料编码', sortable: true,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'producer', width: '100',title: '产地', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'id',width: '100', title: '库存编号', sortable: true,showOverflow:"ellipsis",filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'projectNo',width: '100', title: '工程号', sortable: true,showOverflow:"ellipsis",filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | { type: 'checkbox',fixed:"left", title: t('basicData.check'), width: '80' }, |
| | | { type: 'seq',fixed:"left", title: t('basicData.Number'), width: '80' }, |
| | | {field: 'inventoryOrganization', width:'150', title: t('mainIngredientStock.inventoryOrganization'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged }, |
| | | {field: 'materialCode', width: '150',title: t('mainIngredient.materialCode'), sortable: true,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'producer', width: '100',title: t('mainIngredientStock.producer'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'id',width: '100', title: t('mainIngredientStock.id'), sortable: true,showOverflow:"ellipsis",filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'projectNo',width: '100', title: t('mainIngredientStock.projectNo'), sortable: true,showOverflow:"ellipsis",filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | //{field: 'safetyStock', width: '100',title: '安全库存', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'inventoryQuantity',width: '100', title: '库存数量', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'availableQuantity', width: '100',title: '可用库存', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'planQuantity', width: '100',title: '计划数量', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'totalArea',width: '100', title: '总面积', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'dateOfManufacture',width: '100', title: '生产日期', sortable: true}, |
| | | {field: 'qualityGuaranteePeriod',width: '100', title: '保质期', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'inventoryArea',width: '100', title: '库存区域', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'inventoryQuantity',width: '100', title: t('productStock.inventoryQuantity'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'availableQuantity', width: '100',title: t('productStock.availableQuantity'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'planQuantity', width: '100',title: t('mainIngredientStock.planQuantity'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'totalArea',width: '100', title: t('order.grossArea'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'dateOfManufacture',width: '100', title: t('mainIngredientStock.dateOfManufacture'), sortable: true}, |
| | | {field: 'qualityGuaranteePeriod',width: '100', title: t('mainIngredientStock.qualityGuaranteePeriod'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'inventoryArea',width: '100', title: t('productStock.inventoryArea'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | //{field: 'deadStock',width: '100', title: '积压库存', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'createTime',width: '100', title: '入库时间', sortable: true}, |
| | | {field: 'remarks',width: '80', title: '备注', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | {field: 'createTime',width: '100', title: t('productStock.storageTime'), sortable: true}, |
| | | {field: 'remarks',width: '80', title: t('basicData.remarks'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}, |
| | | ] |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | request.get(`/BasicWarehouse/BasicWarehouseType/原片|辅料`).then((res) => { |
| | | request.get(`/BasicWarehouse/BasicWarehouseType/`+t('mainIngredient.originalFilm')+'|'+t('mainIngredient.accessories')).then((res) => { |
| | | if(res.code==200){ |
| | | gridOptions.columns.splice(0,gridOptions.columns.length) |
| | | BasicData.value = res.data |
| | |
| | | gridOptions.columns.push(aa) |
| | | |
| | | } |
| | | values.value='库存' |
| | | values.value=t('mainIngredientStock.inventory') |
| | | getInventoryWorks() |
| | | |
| | | }else{ |
| | |
| | | } |
| | | |
| | | const selectInventoryWork = () => { |
| | | if(values.value==='库存'){ |
| | | if(values.value===t('mainIngredientStock.inventory')){ |
| | | getInventoryWorks() |
| | | }else{ |
| | | getInventoryEngineeringWork() |
| | |
| | | |
| | | |
| | | const selectOrderList = ()=>{ |
| | | request.get(`/BasicWarehouse/BasicWarehouseType/原片|辅料`).then((res) => { |
| | | request.get(`/BasicWarehouse/BasicWarehouseType/`+t('mainIngredient.originalFilm')+'|'+t('mainIngredient.accessories')).then((res) => { |
| | | if(res.code==200){ |
| | | gridOptions.columns.splice(0,gridOptions.columns.length) |
| | | BasicData.value = res.data |
| | |
| | | gridOptions.columns.push(aa) |
| | | |
| | | } |
| | | if(values.value==='库存'){ |
| | | if(values.value===t('mainIngredientStock.inventory')){ |
| | | getInventoryWorkPaging() |
| | | }else{ |
| | | getInventoryEngineeringWork() |
| | |
| | | align: 'center',//文字居中 |
| | | stripe:true,//斑马纹 |
| | | rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮 |
| | | id: 'CustomerList', |
| | | id: 'SelectIngredientsStock', |
| | | showFooter: true,//显示脚 |
| | | printConfig: {}, |
| | | importConfig: {}, |
| | |
| | | ],//表头按钮 |
| | | toolbarConfig: { |
| | | buttons: [ |
| | | {'code': 'out', 'name': '物料出库',status: 'primary'}, |
| | | {'code': 'add', 'name': '物料新增',status: 'primary'}, |
| | | {'code': 'out', 'name': t('mainIngredientStock.materialOutbound'),status: 'primary'}, |
| | | {'code': 'add', 'name': t('mainIngredient.materialAddition'),status: 'primary'}, |
| | | ], |
| | | /*import: false, |
| | | export: true, |
| | |
| | | return[ |
| | | columns.map((column, columnIndex) => { |
| | | if (columnIndex === 0) { |
| | | return '合计:' |
| | | return t('basicData.total') |
| | | } |
| | | // if (props.tableProp.footList.includes(column.field)) { |
| | | // return sumNum(data, column.field) |
| | |
| | | } |
| | | let id = "" |
| | | const array = []; |
| | | if (values.value==='库存'){ |
| | | if (values.value===t('mainIngredientStock.inventory')){ |
| | | for (let i = 0; i < selectRecords.length; i++) { |
| | | array.push(selectRecords[i].id) |
| | | if (i + 1 === selectRecords.length) { |
| | |
| | | dialogTableVisible.value=true |
| | | select() |
| | | //第一次加载默认 |
| | | value.value='原片' |
| | | filterData.value.type='原片' |
| | | value.value=t('mainIngredient.originalFilm') |
| | | filterData.value.type=t('mainIngredient.originalFilm') |
| | | request.get(`/BasicWarehouse/BasicWarehouseType/${value.value}`).then((res) => { |
| | | if(res.code==200){ |
| | | gridOption.columns.splice(0,gridOption.columns.length) |
| | |
| | | |
| | | |
| | | let arrs = [ |
| | | { type: 'radio',fixed:"left", title: '选择', width: '80' }, |
| | | { type: 'seq',fixed:'left', title: '自序', width: '80' }, |
| | | {field: 'id', width: '150',title: '物料编码', sortable: true,showOverflow:'ellipsis' ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged} |
| | | { type: 'radio',fixed:"left", title: t('basicData.check'), width: '80' }, |
| | | { type: 'seq',fixed:'left', title: t('basicData.Number'), width: '80' }, |
| | | {field: 'id', width: '150',title: t('mainIngredient.materialCode'), sortable: true,showOverflow:'ellipsis' ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged} |
| | | ] |
| | | |
| | | const value = ref('') |
| | | const options = [ |
| | | { |
| | | value: '原片', |
| | | label: '原片' |
| | | value: t('mainIngredient.originalFilm'), |
| | | label: t('mainIngredient.originalFilm') |
| | | }, |
| | | { |
| | | value: '辅料', |
| | | label: '辅料', |
| | | value: t('mainIngredient.accessories'), |
| | | label: t('mainIngredient.accessories'), |
| | | } |
| | | ] |
| | | |
| | |
| | | align: 'center',//文字居中 |
| | | stripe:true,//斑马纹 |
| | | rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮 |
| | | id: 'CustomerList', |
| | | id: 'SelectIngredientsStocks', |
| | | showFooter: true,//显示脚 |
| | | printConfig: {}, |
| | | importConfig: {}, |
| | |
| | | }) |
| | | |
| | | const select=() =>{ |
| | | request.get(`/BasicWarehouse/BasicWarehouseTypes/库存组织`).then((res) => { |
| | | request.get(`/BasicWarehouse/BasicWarehouseTypes/`+t('mainIngredientStock.inventoryOrganization')).then((res) => { |
| | | |
| | | if(res.code==200){ |
| | | titleSelectJson.value=deepClone(res.data) |
| | |
| | | //表头数据校验 |
| | | const outboundType = titleUploadData.value.inventoryOrganization |
| | | if(outboundType === null || outboundType === undefined || outboundType === ''){ |
| | | ElMessage.error("请选择库存组织") |
| | | ElMessage.error(t('mainIngredientStock.pleaseSelectInventoryOrganization')) |
| | | return |
| | | } |
| | | const materialRequisitionPersonnel = titleUploadData.value.inventoryQuantity |
| | | if(materialRequisitionPersonnel === null || materialRequisitionPersonnel === undefined || materialRequisitionPersonnel === ''){ |
| | | ElMessage.error("请输入数量") |
| | | ElMessage.error(t('mainIngredientStock.pleaseEnterTheQuantity')) |
| | | return |
| | | } |
| | | const dateOfManufacture= titleUploadData.value.dateOfManufacture |
| | |
| | | |
| | | request.post("/MaterialInventory/saveMaterialInventory", flowData.value).then((res) => { |
| | | if(res.code==200){ |
| | | ElMessage.success('保存成功') |
| | | ElMessage.success(t('basicData.msg.saveSuccess')) |
| | | router.push({path: '/main/ingredientsStock/SelectIngredientsStock', query:{random:Math.random()}}) |
| | | }else{ |
| | | ElMessage.warning(res.msg) |
| | |
| | | <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" |
| | | |
| | | /> |
| | | <el-button @click="changeDate" style="margin-top: -5px" id="searchButton" type="primary" :icon="Search">查询</el-button> |
| | | <el-button @click="changeDate" style="margin-top: -5px" id="searchButton" type="primary" :icon="Search">{{$t('basicData.search')}}</el-button> |
| | | <div> |
| | | <el-row> |
| | | <el-select v-model="values" placeholder="请选择类别" @change="selectInventoryWork"> |
| | | <el-select v-model="values" :placeholder="$t('mainIngredient.pleaseSelectACategory')" @change="selectInventoryWork"> |
| | | <el-option |
| | | v-for="item in selectOptions" |
| | | :key="item.value" |
| | |
| | | <!--左边固定显示的插槽--> |
| | | <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> |
| | | link type="primary" size="small">{{$t('basicData.edit')}}</el-button> |
| | | <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">{{$t('basicData.delete')}}</el-button> |
| | | </template> |
| | | |
| | | <template #num1_filter="{ column, $panel }"> |
| | |
| | | |
| | | </vxe-grid> |
| | | |
| | | <el-dialog v-model="dialogTableVisible" title="物料新增" style="width: 70%;height:75% "> |
| | | <el-dialog v-model="dialogTableVisible" :title="$t('mainIngredient.materialAddition')" style="width: 70%;height:75% "> |
| | | <div class="order-primary" > |
| | | <el-row> |
| | | <el-col :span="2"><el-text>生产日期:</el-text></el-col> |
| | | <el-col :span="2"><el-text>{{$t('mainIngredientStock.dateOfManufacture')}}:</el-text></el-col> |
| | | <el-col :span="4"> |
| | | <el-date-picker |
| | | v-model="titleUploadData.dateOfManufacture" |
| | | type="date" |
| | | format="YYYY-MM-DD" |
| | | value-format="YYYY-MM-DD" |
| | | placeholder="请选择生产日期"/> |
| | | :placeholder="$t('mainIngredientStock.pleaseDateOfManufacture')"/> |
| | | </el-col> |
| | | |
| | | <el-col :span="2"><el-text>保质期:</el-text></el-col> |
| | | <el-col :span="2"><el-text>{{$t('mainIngredientStock.qualityGuaranteePeriod')}}:</el-text></el-col> |
| | | <el-col :span="3"><el-input v-model="titleUploadData.qualityGuaranteePeriod" /></el-col> |
| | | <el-col :span="1"><el-text>产地:</el-text></el-col> |
| | | <el-col :span="1"><el-text>{{$t('mainIngredientStock.producer')}}:</el-text></el-col> |
| | | <el-col :span="3"><el-input v-model="titleUploadData.producer" /></el-col> |
| | | |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="2"><el-text>库存组织:</el-text></el-col> |
| | | <el-col :span="2"><el-text>{{$t('mainIngredientStock.inventoryOrganization')}}:</el-text></el-col> |
| | | <el-col :span="4"> |
| | | <el-select v-model="titleUploadData.inventoryOrganization" clearable placeholder="" > |
| | | <el-option |
| | |
| | | /> |
| | | </el-select> |
| | | </el-col> |
| | | <el-col :span="2"><el-text>库存区域:</el-text></el-col> |
| | | <el-col :span="2"><el-text>{{$t('productStock.inventoryArea')}}:</el-text></el-col> |
| | | <el-col :span="3"><el-input v-model="titleUploadData.inventoryArea" /></el-col> |
| | | <el-col :span="1"><el-text>数量:</el-text></el-col> |
| | | <el-col :span="1"><el-text>{{$t('order.quantity')}}:</el-text></el-col> |
| | | <el-col :span="3"><el-input v-model="titleUploadData.inventoryQuantity" /></el-col> |
| | | <el-col :span="1"><el-text>备注:</el-text></el-col> |
| | | <el-col :span="1"><el-text>{{$t('basicData.remarks')}}:</el-text></el-col> |
| | | <el-col :span="3"><el-input v-model="titleUploadData.remarks" /></el-col> |
| | | |
| | | </el-row> |
| | | </div> |
| | | <div> |
| | | <el-row> |
| | | <el-select v-model="value" placeholder="请选择类别" @change="getStoreWork"> |
| | | <el-select v-model="value" :placeholder="$t('mainIngredientStock.pleaseSelectACategory')" @change="getStoreWork"> |
| | | <el-option |
| | | v-for="item in options" |
| | | :key="item.value" |
| | |
| | | align: 'center',//文字居中 |
| | | stripe:true,//斑马纹 |
| | | rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮 |
| | | id: 'CustomerList', |
| | | id: 'CreateProductStock', |
| | | showFooter: true,//显示脚 |
| | | printConfig: {}, |
| | | importConfig: {}, |
| | |
| | | ElMessage.success(t('productStock.receivedSuccessfully')) |
| | | router.push({path:'/main/productStock/CreateProductStock',query:{random:Math.random()}}) |
| | | }else{ |
| | | ElMessage.warning("入库失败") |
| | | ElMessage.warning(t('productStock.entryFailure')) |
| | | router.push("/login") |
| | | } |
| | | }) |
| | |
| | | |
| | | } |
| | | case 'jump': { |
| | | router.push({path: '/main/productStock/storageRecord', query: { storageType: '入库' }}) |
| | | router.push({path: '/main/productStock/storageRecord', query: { storageType: t('productStock.entry') }}) |
| | | return; |
| | | |
| | | } |
| | |
| | | ElMessage.success(t('productStock.successfullyRetrieved')) |
| | | router.push({path:'/main/productStock/FinishedGoodsIssue',query:{random:Math.random()}}) |
| | | }else{ |
| | | ElMessage.warning("领出失败") |
| | | ElMessage.warning(t('productStock.failedToRetrieve')) |
| | | router.push("/login") |
| | | } |
| | | }).catch((err)=>{ |
| | | ElMessage.error('系统错误') |
| | | ElMessage.error(t('basicData.msg.ServerConnectionError')) |
| | | router.push("/login") |
| | | }) |
| | | |
| | |
| | | align: 'center',//文字居中 |
| | | stripe:true,//斑马纹 |
| | | rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮 |
| | | id: 'CustomerList', |
| | | id: 'FinishedGoodsIssue', |
| | | showFooter: true,//显示脚 |
| | | printConfig: {}, |
| | | importConfig: {}, |
| | |
| | | align: 'center',//文字居中 |
| | | stripe:true,//斑马纹 |
| | | rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮 |
| | | id: 'CustomerList', |
| | | id: 'FinishedProductOut', |
| | | showFooter: true,//显示脚 |
| | | printConfig: {}, |
| | | importConfig: {}, |
| | |
| | | ElMessage.success(t('productStock.deliverySuccessful')) |
| | | router.push({path: '/main/productStock/FinishedProductOut', query: {random: Math.random()}}) |
| | | } else { |
| | | ElMessage.warning("发货失败") |
| | | ElMessage.warning(t('productStock.deliveryFailed')) |
| | | router.push("/login") |
| | | } |
| | | }).catch((err)=>{ |
| | | ElMessage.error('系统错误') |
| | | ElMessage.error(t('basicData.msg.ServerConnectionError')) |
| | | router.push("/login") |
| | | }) |
| | | |
| | |
| | | |
| | | } |
| | | case 'jump': { |
| | | router.push({path: '/main/productStock/storageRecord', query: {storageType: '出库'}}) |
| | | router.push({path: '/main/productStock/storageRecord', query: {storageType: t('productStock.outbound')}}) |
| | | return; |
| | | |
| | | } |
| | |
| | | align: 'center',//文字居中 |
| | | stripe:true,//斑马纹 |
| | | rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮 |
| | | id: 'CustomerList', |
| | | id: 'FinishedProductReturn', |
| | | showFooter: true,//显示脚 |
| | | printConfig: {}, |
| | | importConfig: {}, |
| | |
| | | ElMessage.success(t('productStock.reworkSuccessful')) |
| | | router.push({path:'/main/productStock/FinishedProductRework',query:{random:Math.random()}}) |
| | | } else { |
| | | ElMessage.warning("返工失败") |
| | | ElMessage.warning(t('productStock.reworkFailed')) |
| | | router.push("/login") |
| | | } |
| | | }).catch((err)=>{ |
| | | ElMessage.error('系统错误') |
| | | ElMessage.error(t('basicData.msg.ServerConnectionError')) |
| | | router.push("/login") |
| | | }) |
| | | |
| | |
| | | align: 'center',//文字居中 |
| | | stripe:true,//斑马纹 |
| | | rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮 |
| | | id: 'CustomerList', |
| | | id: 'FinishedProductRework', |
| | | showFooter: true,//显示脚 |
| | | printConfig: {}, |
| | | importConfig: {}, |
| | |
| | | align: 'center',//文字居中 |
| | | stripe:true,//斑马纹 |
| | | rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮 |
| | | id: 'CustomerList', |
| | | id: 'OrderAllocation', |
| | | showFooter: true,//显示脚 |
| | | printConfig: {}, |
| | | importConfig: {}, |
| | |
| | | ElMessage.success(t('productStock.transferSuccessful')) |
| | | router.push({path:'/main/productStock/OrderAllocation',query:{random:Math.random()}}) |
| | | } else { |
| | | ElMessage.warning("调拨失败") |
| | | ElMessage.warning(t('productStock.transferFailed')) |
| | | router.push("/login") |
| | | } |
| | | }).catch((err)=>{ |
| | | ElMessage.error('系统错误') |
| | | ElMessage.error(t('basicData.msg.ServerConnectionError')) |
| | | router.push("/login") |
| | | }) |
| | | |
| | |
| | | align: 'center',//文字居中 |
| | | stripe:true,//斑马纹 |
| | | rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮 |
| | | id: 'CustomerList', |
| | | id: 'ProductStockList', |
| | | showFooter: true,//显示脚 |
| | | printConfig: {}, |
| | | importConfig: {}, |
| | |
| | | align: 'center',//文字居中 |
| | | stripe:true,//斑马纹 |
| | | rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮 |
| | | id: 'CustomerList', |
| | | id: 'ReworkRecord', |
| | | showFooter: true,//显示脚 |
| | | printConfig: {}, |
| | | importConfig: {}, |
| | |
| | | router.push({path:'/main/productStock/ReworkRecord',query:{random:Math.random()}}) |
| | | |
| | | }else{ |
| | | ElMessage.warning("反审失败") |
| | | ElMessage.warning(t('basicData.msg.cancelReviewFail')) |
| | | router.push("/login") |
| | | } |
| | | }).catch((err)=>{ |
| | | ElMessage.error('系统错误') |
| | | ElMessage.error(t('basicData.msg.ServerConnectionError')) |
| | | router.push("/login") |
| | | }) |
| | | } |
| | |
| | | |
| | | const checkBoxConfig = { |
| | | checkMethod: ({ row }) => { |
| | | if (row['status']==='已审核'||row['status']==='未通过'){ |
| | | if (row['status']===t('productStock.approved')||row['status']===t('productStock.notPassed')){ |
| | | return !row.disable |
| | | }else{ |
| | | return row.disable |
| | |
| | | <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" |
| | | |
| | |
| | | align: 'center',//文字居中 |
| | | stripe:true,//斑马纹 |
| | | rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮 |
| | | id: 'CustomerList', |
| | | id: 'StorageRecord', |
| | | showFooter: true,//显示脚 |
| | | printConfig: {}, |
| | | importConfig: {}, |
| | |
| | | router.push({path:'/main/productStock/storageRecord',query:{random:Math.random(),storageType: type.value}}) |
| | | |
| | | }else{ |
| | | ElMessage.warning("反作废失败") |
| | | ElMessage.warning(t('productStock.cancellationFailed')) |
| | | router.push("/login") |
| | | } |
| | | }).catch((err)=>{ |
| | | ElMessage.error('系统错误') |
| | | ElMessage.error(t('basicData.msg.ServerConnectionError')) |
| | | router.push("/login") |
| | | }) |
| | | } |
| | |
| | | |
| | | const checkBoxConfig = { |
| | | checkMethod: ({ row }) => { |
| | | if (row['status']==='已审核'||row['status']==='未通过'){ |
| | | if (row['status']===t('productStock.approved')||row['status']===t('productStock.notPassed')){ |
| | | return row.disable |
| | | }else{ |
| | | return !row.disable |
| | |
| | | <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" |
| | | |
| | |
| | | align: 'center',//文字居中 |
| | | stripe:true,//斑马纹 |
| | | rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮 |
| | | id: 'CustomerList', |
| | | id: 'TakeOutRecord', |
| | | showFooter: true,//显示脚 |
| | | printConfig: {}, |
| | | importConfig: {}, |
| | |
| | | router.push({path:'/main/productStock/TakeOutRecord',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") |
| | | }) |
| | | } |
| | |
| | | router.push({path:'/main/productStock/TakeOutRecord',query:{random:Math.random()}}) |
| | | |
| | | }else{ |
| | | ElMessage.warning("作废失败") |
| | | ElMessage.warning(t('productStock.voidFailed')) |
| | | router.push("/login") |
| | | } |
| | | }).catch((err)=>{ |
| | | ElMessage.error('系统错误') |
| | | ElMessage.error(t('basicData.msg.ServerConnectionError')) |
| | | router.push("/login") |
| | | }) |
| | | } |
| | |
| | | |
| | | const checkBoxConfig = { |
| | | checkMethod: ({ row }) => { |
| | | if (row['status']==='已审核'||row['status']==='未通过'){ |
| | | if (row['status']===t('productStock.approved')||row['status']===t('productStock.notPassed')){ |
| | | return row.disable |
| | | }else{ |
| | | return !row.disable |
| | |
| | | <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" |
| | | |
| | |
| | | align: 'center',//文字居中 |
| | | stripe:true,//斑马纹 |
| | | rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮 |
| | | id: 'CustomerList', |
| | | id: 'TransferRecord', |
| | | showFooter: true,//显示脚 |
| | | printConfig: {}, |
| | | importConfig: {}, |
| | |
| | | router.push({path:'/main/productStock/TransferRecord',query:{random:Math.random()}}) |
| | | |
| | | }else{ |
| | | ElMessage.warning("反审失败") |
| | | ElMessage.warning(t('basicData.msg.cancelReviewFail')) |
| | | 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" |
| | | |
| | |
| | | :to="{path:'/main/stockReport/WarehouseReport'}">原材料报表 |
| | | </el-breadcrumb-item>--> |
| | | <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" |
| | | :to="{path:'/main/stockReport/StockWarehouseReport'}">成品报表 |
| | | :to="{path:'/main/stockReport/StockWarehouseReport'}">{{$t('report.finishedProductReport')}} |
| | | </el-breadcrumb-item> |
| | | <!-- <el-breadcrumb-item @click="changeRouter(3)" :class="indexFlag===3?'indexTag':''" |
| | | :to="{path:'/main/stockReport/StockMonthReport'}">原片月结报表 |
| | |
| | | {field: 'orderDetail.productName',width: '140', title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'orderDetail.width', width: '100',title: t('order.width'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'orderDetail.height',width: '100', title: t('order.height'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'staterOperationOrderNumber', width: '150',title: '调拨销售单号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'endOperationOrderNumber', width: '100',title: '调拨序号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'staterOperationOrderNumber', width: '150',title: t('productStock.staterOperationOrderNumber'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'endOperationOrderNumber', width: '100',title: t('productStock.endOperationOrderNumber'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'operator', width: '100',title: t('productStock.creator'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'operateTime', width:'140', title: t('productStock.productionDate'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'processId', width:'140', title: '流程卡号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'type', width:'140', title: '领出类型',filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'processId', width:'140', title: t('processCard.processId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'type', width:'140', title: t('productStock.领出类型'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'reviewed', width: '100',title: t('productStock.reviewed'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'reviewedTime', width: '140',title: t('productStock.approvedDate'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'remarks', width: '140',title: t('productStock.remarks'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | |
| | | data:[],//表格数据 |
| | | url :'/FinishedGoodsInventory/getSelectFinishedOperateLogReport', |
| | | exportUrl :'/FinishedGoodsInventory/exportFinishedOperateLogReport', |
| | | exportName:'成品报表', |
| | | exportName:t('report.finishedProductReport'), |
| | | footList:['quantity'] |
| | | }) |
| | | |
| | |
| | | align: 'center',//文字居中 |
| | | stripe:true,//斑马纹 |
| | | rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮 |
| | | id: 'CustomerList', |
| | | id: 'AddReplenish', |
| | | showFooter: true,//显示脚 |
| | | printConfig: {}, |
| | | importConfig: {}, |
| | |
| | | align: 'center',//文字居中 |
| | | stripe:true,//斑马纹 |
| | | rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮 |
| | | id: 'CustomerList', |
| | | id: 'SelectReplenish', |
| | | showFooter: true,//显示脚 |
| | | printConfig: {}, |
| | | importConfig: {}, |
| | |
| | | |
| | | </vxe-grid> |
| | | |
| | | <el-dialog v-model="dialogFormVisible" title="设备编辑"> |
| | | <el-dialog v-model="dialogFormVisible" :title="$t('machine.deviceEditing')"> |
| | | <el-form :model="form"> |
| | | <el-form-item label="标准名称" :label-width="formLabelWidth"> |
| | | <el-form-item :label="$t('machine.standardName')" :label-width="formLabelWidth"> |
| | | <el-input v-model="form.name" autocomplete="off" style="width: 220px"/> |
| | | </el-form-item> |
| | | <el-form-item label="设备名称" :label-width="formLabelWidth"> |
| | | <el-form-item :label="$t('machine.basicName')" :label-width="formLabelWidth"> |
| | | <el-input v-model="form.name" autocomplete="off" style="width: 220px"/> |
| | | </el-form-item> |
| | | <el-form-item label="购买时间" :label-width="formLabelWidth"> |
| | | <el-form-item :label="$t('machine.purchaseTime')" :label-width="formLabelWidth"> |
| | | <el-date-picker |
| | | v-model="value1" |
| | | type="date" |
| | |
| | | :size="size" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="安装时间" :label-width="formLabelWidth"> |
| | | <el-form-item :label="$t('machine.installationTime')" :label-width="formLabelWidth"> |
| | | <el-date-picker |
| | | v-model="value1" |
| | | type="date" |
| | |
| | | :size="size" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="保养周期" :label-width="formLabelWidth"> |
| | | <el-form-item :label="$t('machine.maintenanceCycle')" :label-width="formLabelWidth"> |
| | | <el-input v-model="form.name" autocomplete="off" style="width: 220px"/> |
| | | </el-form-item> |
| | | <el-form-item label="所在工艺" :label-width="formLabelWidth"> |
| | | <el-select v-model="form.region" placeholder="钢化" style="width: 220px"> |
| | | <el-option label="切割" value="shanghai" /> |
| | | <el-option label="磨边" value="mobian" /> |
| | | <el-option label="钢化" value="ganghua" /> |
| | | <el-form-item :label="$t('machine.standardName')" :label-width="formLabelWidth"> |
| | | <el-select v-model="form.region" :placeholder="$t('machine.tempering')" style="width: 220px"> |
| | | <el-option :label="$t('machine.cutting')" value="shanghai" /> |
| | | <el-option :label="$t('machine.edgeGrinding')" value="mobian" /> |
| | | <el-option :label="$t('machine.tempering')" value="ganghua" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-form> |
| | | <template #footer> |
| | | <span class="dialog-footer"> |
| | | <el-button @click="dialogFormVisible = false">取消</el-button> |
| | | <el-button @click="dialogFormVisible = false">{{$t('basicData.cancelButtonText')}}</el-button> |
| | | <el-button type="primary" @click="dialogFormVisible = false"> |
| | | 确认 |
| | | {{$t('basicData.confirmButtonText')}} |
| | | </el-button> |
| | | </span> |
| | | </template> |
New file |
| | |
| | | <script setup> |
| | | import request from "@/utils/request" |
| | | import {ElDatePicker, ElMessage} from "element-plus" |
| | | import {nextTick, onMounted, onUnmounted, reactive, ref, watch} from "vue" |
| | | import {Search} from "@element-plus/icons-vue" |
| | | import {useRouter} from 'vue-router' |
| | | import {changeFilterEvent, filterChanged} from "@/hook" |
| | | import {useI18n} from 'vue-i18n' |
| | | import deepClone from "@/utils/deepClone"; |
| | | //语言获取 |
| | | const {t} = useI18n() |
| | | let router = useRouter() |
| | | let produceList = ref([]) |
| | | let labelList = ref([]) |
| | | let titleList = ref([]) |
| | | let dataList = ref([]) |
| | | let list = ref([]) |
| | | let lastList=ref([]) |
| | | |
| | | let filterData = ref({}) |
| | | |
| | | const data = ref({ |
| | | printList: [] |
| | | }) |
| | | |
| | | |
| | | const {currentRoute} = useRouter() |
| | | const route = currentRoute.value |
| | | data.value.printList = JSON.parse(route.query.printList) |
| | | const type = route.query.type |
| | | const faceOrientation = route.query.faceOrientation |
| | | onMounted(() => { |
| | | request.post(`/processCard/getSelectPrintCustomLabel/${type}`, data.value).then((res) => { |
| | | if (res.code == 200) { |
| | | |
| | | produceList.value = deepClone(res.data.title) |
| | | list.value = deepClone(res.data.data) |
| | | const quantity = res.data.quantity |
| | | console.log(quantity) |
| | | const data = produceList.value[0].value |
| | | dataList = JSON.parse(`[${data}]`); |
| | | labelList = dataList[0] |
| | | for (let i = 0; i < list.value.length; i++) { |
| | | let count= list.value[i].quantity |
| | | for (let j = 0; j < quantity; j++) { |
| | | lastList.value.push(list.value[i]) |
| | | |
| | | } |
| | | } |
| | | console.log(lastList.value) |
| | | console.log(labelList) |
| | | |
| | | |
| | | } else { |
| | | ElMessage.warning(res.msg) |
| | | router.push("/login") |
| | | } |
| | | }) |
| | | |
| | | } |
| | | ) |
| | | |
| | | |
| | | // 打印方法 |
| | | const printFlowCard = () => { |
| | | // 需要打印的局部区域赋予"print-wrap"的id |
| | | let el = document.getElementById("printFlowCard"); |
| | | let doc = document; |
| | | let body = doc.body || doc.getElementsByTagName("body")[0]; |
| | | let printId = "print-" + Date.now(); |
| | | |
| | | // 创建无副作用的打印容器(因不确定页面的打印元素有无其它样式) |
| | | let content = doc.createElement("div"); |
| | | content.id = printId; |
| | | |
| | | // 样式控制与打印无关的元素隐藏 |
| | | let style = doc.createElement("style"); |
| | | style.innerHTML = |
| | | "body>#" + |
| | | printId + |
| | | "{display:none}@media print{body>:not(#" + |
| | | printId + |
| | | "){display:none !important}body>#" + |
| | | printId + |
| | | "{display:block;padding-top:1px}}"; |
| | | // |
| | | content.innerHTML = el.outerHTML; |
| | | // // console.log("el.outerHTML", el.outerHTML); |
| | | body.appendChild(style); |
| | | |
| | | // 与style元素设置的样式相配合 |
| | | // 把打印内容的元素添加到body(作为body的子元素,可用body的子选择器 '>' 控制打印样式) |
| | | body.appendChild(content); |
| | | setTimeout(() => { |
| | | window.print(); |
| | | body.removeChild(content); |
| | | body.removeChild(style); |
| | | }, 20); |
| | | } |
| | | </script> |
| | | |
| | | <template> |
| | | <el-button id="printButton" @click="printFlowCard();">{{ $t('basicData.print') }}</el-button> |
| | | <div id="printFlowCard"> |
| | | <div v-for="(item1,id) in lastList" id="entirety"> |
| | | <div class="row4">{{faceOrientation}}</div> |
| | | <div v-for="(item,id) in labelList" class="contentRow"> |
| | | <div class="row1">{{ item.title }}:</div> |
| | | <div class="row2">{{ item1.order[item.name] }}</div> |
| | | |
| | | </div> |
| | | <div class="row3"><label>W:</label>{{ item1.width }} <label>H:</label>{{ item1.height }}</div> |
| | | </div> |
| | | </div> |
| | | |
| | | </template> |
| | | |
| | | <style scoped> |
| | | * { |
| | | margin: 0; |
| | | padding: 0; |
| | | } |
| | | |
| | | #printButton { |
| | | margin-top: -20px; |
| | | width: 100px; |
| | | } |
| | | |
| | | #printFlowCard { |
| | | flex-wrap: wrap; |
| | | font-size: 20px; |
| | | margin-left: 5px; |
| | | margin-top: 15px; |
| | | } |
| | | |
| | | #entirety { |
| | | display: flex; |
| | | text-align: center; |
| | | width: 250px; |
| | | margin-bottom: 10px; |
| | | flex-direction:column; |
| | | |
| | | } |
| | | |
| | | .contentRow{ |
| | | display: flex; |
| | | text-align: center; |
| | | border: red solid 1px; |
| | | } |
| | | |
| | | label{ |
| | | font-weight: bolder; |
| | | } |
| | | |
| | | .row1{ |
| | | font-weight: bolder; |
| | | } |
| | | |
| | | .row4{ |
| | | font-weight: bolder; |
| | | text-align: right; |
| | | } |
| | | |
| | | .row1,.row2{ |
| | | text-align: left; |
| | | } |
| | | |
| | | @page { |
| | | size: auto; /* auto is the initial value */ |
| | | margin: 7mm 2mm 2mm 0mm /* this affects the margin in the printer settings */ |
| | | |
| | | } |
| | | |
| | | @media print { |
| | | div { |
| | | page-break-inside: avoid; |
| | | } |
| | | } |
| | | |
| | | </style> |
| | |
| | | import {addListener, toolbarButtonClickEvent} from "@/hook/mouseMove"; |
| | | import PrintProcess from '@/views/pp/processCard/PrintProcess.vue' |
| | | import PrintLabel from '@/views/pp/processCard/PrintLabel.vue' |
| | | import PrintCustomLabel from '@/views/pp/processCard/PrintCustomLabel.vue' |
| | | import footSum from "@/hook/footSum" |
| | | //语言获取 |
| | | const {t} = useI18n() |
| | | let router = useRouter() |
| | | const dialogTableVisible = ref(false) |
| | | const dialogTableVisibleLabel = ref(false) |
| | | const dialogTableVisibleCustomLabel = ref(false) |
| | | const printVisible= ref(false) |
| | | let selectRecords = ref(null) |
| | | |
| | |
| | | let pageNum = $ref(1) |
| | | let pageState = null |
| | | |
| | | //室内室外面 |
| | | const stateValue = ref('此面为室内面') |
| | | const stateOptions = [ |
| | | { |
| | | value: '此面为室内面', |
| | | label: '此面为室内面', |
| | | }, |
| | | { |
| | | value: '此面为室外面', |
| | | label: '此面为室外面', |
| | | }, |
| | | ] |
| | | |
| | | |
| | | //打印类型 |
| | | const printType = ref() |
| | | |
| | | //定义接收加载表头下拉数据 |
| | | const titleSelectJson = ref({ |
| | | dataType: [], |
| | | }) |
| | | |
| | | const {currentRoute} = useRouter() |
| | | const route = currentRoute.value |
| | | |
| | |
| | | |
| | | if (res.code == 200) { |
| | | produceList = produceList.value.concat(deepClone(res.data.data)) |
| | | titleSelectJson.value.dataType = res.data.type |
| | | xGrid.value.reloadData(produceList) |
| | | gridOptions.loading = false |
| | | } else { |
| | |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'order_number', |
| | | title: '序号', |
| | | showOverflow: "ellipsis", |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'customer_name', |
| | | title: t('customer.customerName'), |
| | | filters: [{data: ''}], |
| | |
| | | buttons: [ |
| | | {code: 'print', name: t('processCard.print'), status: 'primary'}, |
| | | {code: 'printLabel', name: t('processCard.printLabel'), status: 'primary'}, |
| | | // {code: 'customLabel', name: '自定义标签打印', status: 'primary'}, |
| | | |
| | | ], |
| | | // import: false, |
| | |
| | | toolbarButtonClick ({ code}) { |
| | | const $grid = xGrid.value |
| | | selectRecords = $grid.getCheckboxRecords() |
| | | let type=printType.value |
| | | let faceOrientation=stateValue.value |
| | | if ($grid) { |
| | | switch (code) { |
| | | case 'print': { |
| | |
| | | ElMessage.warning(res.msg) |
| | | } |
| | | }) |
| | | break |
| | | } |
| | | case 'customLabel': { |
| | | if(selectRecords===null ||selectRecords===''||selectRecords.length===0){ |
| | | ElMessage.warning(t('searchOrder.msgList.checkOrder')) |
| | | return |
| | | } |
| | | if (type===null||type===''||type===undefined){ |
| | | ElMessage.warning('请选择自定义打印标签样式') |
| | | return |
| | | } |
| | | |
| | | let id = "" |
| | | for (let i = 0; i < selectRecords.length; i++) { |
| | | if (i + 1 === selectRecords.length) { |
| | | id += selectRecords[i].id |
| | | } else { |
| | | id += selectRecords[i].id + "|" |
| | | } |
| | | } |
| | | |
| | | router.push({path: '/main/processCard/PrintCustomLabel', query: {type:type,faceOrientation:faceOrientation, printList: JSON.stringify(selectRecords)}}) |
| | | |
| | | break |
| | | } |
| | | } |
| | |
| | | |
| | | <template> |
| | | <div class="main-div-customer"> |
| | | <!-- <label>标签样式:</label>--> |
| | | <!-- <el-select v-model="printType" clearable default-value="default_city" style="width: 120px">--> |
| | | <!-- <el-option--> |
| | | <!-- v-for="item in titleSelectJson['dataType']"--> |
| | | <!-- :key="item.id"--> |
| | | <!-- :label="item.name"--> |
| | | <!-- :value="item.name"--> |
| | | <!-- />--> |
| | | <!-- </el-select>--> |
| | | <!-- <el-select v-model="stateValue" class="m-2" placeholder="室内外面" style="width: 140px">--> |
| | | <!-- <el-option--> |
| | | <!-- v-for="item in stateOptions"--> |
| | | <!-- :key="item.value"--> |
| | | <!-- :label="item.label"--> |
| | | <!-- :value="item.value"--> |
| | | <!-- />--> |
| | | <!-- </el-select>--> |
| | | <vxe-grid |
| | | ref="xGrid" |
| | | class="mytable-scrollbar" |
| | |
| | | </el-dialog> |
| | | |
| | | <el-dialog |
| | | v-model="dialogTableVisibleCustomLabel" |
| | | destroy-on-close |
| | | title="自定义标签" |
| | | style="width: 80%;height:75% "> |
| | | <PrintLabel :printList="selectRecords" |
| | | style="width: 100%;height: 100%" /> |
| | | </el-dialog> |
| | | |
| | | <el-dialog |
| | | @opened="openedTable" |
| | | v-model="printVisible" |
| | | title="流程卡明细" |
| | |
| | | } |
| | | |
| | | #printFlowCard { |
| | | margin-top: -40px; |
| | | text-align: center; |
| | | //font-weight: bolder; height: 600px; |
| | | } |
| | |
| | | if ($table) { |
| | | const selectRecords = $table.getCheckboxRecords() |
| | | if (selectRecords.length == 0) { |
| | | ElMessage.warning(t('processCard.checkProductionScheduling')) |
| | | ElMessage.warning("请勾选排产数据") |
| | | return; |
| | | } |
| | | for (let i = 0; i < selectRecords.length; i++) { |
| | |
| | | let number = selectRecords[i].schedulingQuantity |
| | | //计划开始、结束时间,排产数量不能为空 |
| | | if (start == null || end == null || number == null) { |
| | | ElMessage.warning(t('processCard.saveCorrespondingValues')) |
| | | ElMessage.warning("请填入对应的值再进行保存") |
| | | return; |
| | | } |
| | | } |
| | | let selectProcesses = processVal.value |
| | | if (selectProcesses == null || selectProcesses == "") { |
| | | ElMessage.warning(t('processCard.selectProductionSchedulingProcess')) |
| | | ElMessage.warning("请选择排产工序") |
| | | return; |
| | | } |
| | | |
| | |
| | | //保存排产数据 |
| | | request.post("/productionScheduling/addScheduling", schedulingData.value).then((res) => { |
| | | if (res.code == 200) { |
| | | ElMessage.success(t('basicData.msg.saveSuccess')) |
| | | ElMessage.success("保存成功") |
| | | // 启用保存 |
| | | gridOptions.toolbarConfig.buttons[2].disabled = false |
| | | router.push({ |
| | |
| | | const selectRecords = $table.getCheckboxRecords() |
| | | if ($table) { |
| | | if (selectRecords.length == 0) { |
| | | ElMessage.warning(t('processCard.checkProductionScheduling')) |
| | | ElMessage.warning("请勾选排产数据") |
| | | return; |
| | | } |
| | | const type = await VXETable.modal.confirm(t('processCard.deleteThisData')) |
| | | const type = await VXETable.modal.confirm('您确定要删除该数据?') |
| | | if (type === 'confirm') { |
| | | let schedulingData = ref({ |
| | | scheduling: selectRecords, |
| | |
| | | |
| | | request.post("/productionScheduling/deleteScheduling", schedulingData.value).then((res) => { |
| | | if (res.code == 200) { |
| | | ElMessage.success(t('basicData.msg.deleteSuccess')) |
| | | ElMessage.success("删除成功") |
| | | location.reload(); |
| | | } else { |
| | | ElMessage.warning(res.msg) |
| | |
| | | const selectRecords = $table.getCheckboxRecords() |
| | | if ($table) { |
| | | if (selectRecords.length == 0) { |
| | | ElMessage.warning(t('processCard.checkProductionScheduling')) |
| | | ElMessage.warning("请勾选排产数据") |
| | | return; |
| | | } |
| | | let schedulingData = ref({ |
| | |
| | | }) |
| | | request.post("/productionScheduling/examineScheduling", schedulingData.value).then((res) => { |
| | | if (res.code == 200) { |
| | | ElMessage.success(t('basicData.msg.ReviewSuccess')) |
| | | ElMessage.success("审核成功") |
| | | location.reload(); |
| | | } else { |
| | | ElMessage.warning(res.msg) |
| | |
| | | let selectState = stateValue.value |
| | | table.forEach((selectRecords) => { |
| | | if (selectRecords.scheduling_quantity > selectRecords.pendingProductionQuantity && selectState == 1) { |
| | | ElMessage.warning(t('processCard.schedulingQuantityNoQuantityScheduled')) |
| | | ElMessage.warning("排产数量不能大于待排产数量") |
| | | //禁用保存按钮 |
| | | //gridOptions.toolbarConfig.buttons[2].disabled = true |
| | | } |
| | |
| | | <el-date-picker |
| | | v-model="form.date1" |
| | | :default-time="defaultTime" |
| | | :start-placeholder="$t('basicData.startDate')" |
| | | :end-placeholder="$t('basicData.endDate')" |
| | | end-placeholder="结束时间" |
| | | format="YYYY/MM/DD" |
| | | start-placeholder="开始时间" |
| | | type="daterange" |
| | | value-format="YYYY-MM-DD" |
| | | |
| | |
| | | /> |
| | | </el-select> |
| | | |
| | | <el-select v-model="stateValue" class="m-2" :placeholder="$t('processCard.whetherToScheduleProduction')" style="width: 120px"> |
| | | <el-select v-model="stateValue" class="m-2" placeholder="是否排产" style="width: 120px"> |
| | | <el-option |
| | | v-for="item in stateOptions" |
| | | :key="item.value" |
| | |
| | | showStatus: true |
| | | },//表头参数 |
| | | columns:[ |
| | | { type: 'seq',fixed:"left", title: '自序', width: 50 }, |
| | | { type: 'seq',fixed:"left", title: t('basicData.Number'), width: 50 }, |
| | | { |
| | | field: 'basicName', |
| | | title: '次破原因', |
| | | title: t('reportingWorks.breakageReason'), |
| | | width: 1000, |
| | | 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 t('basicData.total') |
| | | } |
| | | if (footList.includes(column.field)) { |
| | | return sumNum(data, column.field) |
| | |
| | | }) |
| | | request.post("/basicDataProduce/saveBreakageReason", breakageTypeData.value).then((res) => { |
| | | if (res.code == 200) { |
| | | ElMessage.success("保存成功") |
| | | ElMessage.success(t('basicData.msg.saveSuccess')) |
| | | router.push({ |
| | | path: '/main/productionBasicData/AddBreakageReason', |
| | | query: {random: Math.random()} |
| | |
| | | showStatus: true |
| | | },//表头参数 |
| | | columns:[ |
| | | { type: 'seq',fixed:"left", title: '自序', width: 50 }, |
| | | { type: 'seq',fixed:"left", title: t('basicData.Number'), width: 50 }, |
| | | |
| | | { |
| | | field: 'basicName', |
| | | title: '次破类型', |
| | | title: t('reportingWorks.breakageType'), |
| | | width: 1000, |
| | | 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 t('basicData.total') |
| | | } |
| | | if (footList.includes(column.field)) { |
| | | return sumNum(data, column.field) |
| | |
| | | }) |
| | | request.post("/basicDataProduce/saveBreakageType", breakageTypeData.value).then((res) => { |
| | | if (res.code == 200) { |
| | | ElMessage.success("保存成功") |
| | | ElMessage.success(t('basicData.msg.saveSuccess')) |
| | | router.push({ |
| | | path: '/main/productionBasicData/AddBreakageType', |
| | | query: {random: Math.random()} |
| | |
| | | showStatus: true |
| | | },//表头参数 |
| | | columns: [ |
| | | {type: 'seq', fixed: "left", title: '自序', width: 50}, |
| | | {type: 'seq', fixed: "left", title: t('basicData.Number'), width: 50}, |
| | | { |
| | | field: 'basicName', |
| | | title: '班组名称', |
| | | title: t('productionBasicData.teamName'), |
| | | width: 600, |
| | | editRender: {name: 'input', attrs: {placeholder: ''}}, |
| | | |
| | | }, |
| | | { |
| | | field: 'basicCategory', |
| | | title: '所在工序', |
| | | title: t('productionBasicData.processInvolved'), |
| | | 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 t('basicData.total') |
| | | } |
| | | if (footList.includes(column.field)) { |
| | | return sumNum(data, column.field) |
| | |
| | | }) |
| | | request.post("/basicDataProduce/saveTeamGroup", teamGroupData.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/productionBasicData/AddTeamGroup', |
| | |
| | | <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/productionBasicData/SelectProductionBasicData' }">基础数据查询</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/productionBasicData/AddBreakageType' }">次破类型新增</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(3)" :class="indexFlag===3?'indexTag':''" :to="{ path: '/main/productionBasicData/AddBreakageReason' }">次破原因新增</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(4)" :class="indexFlag===4?'indexTag':''" :to="{ path: '/main/productionBasicData/AddTeamGroup' }">班组新增新增</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/productionBasicData/SelectProductionBasicData' }">{{$t('productionBasicData.basicDataQuery')}}</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/productionBasicData/AddBreakageType' }">{{$t('productionBasicData.newTypeOfSecondaryDamageAdded')}}</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(3)" :class="indexFlag===3?'indexTag':''" :to="{ path: '/main/productionBasicData/AddBreakageReason' }">{{$t('productionBasicData.reasonForSecondaryFailureAdded')}}</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(4)" :class="indexFlag===4?'indexTag':''" :to="{ path: '/main/productionBasicData/AddTeamGroup' }">{{$t('productionBasicData.teamAdditionAndAddition')}}</el-breadcrumb-item> |
| | | <!-- <el-breadcrumb-item @click="changeRouter(4)" :class="indexFlag===4?'indexTag':''" :to="{ path: '/main/productionBasicData/AddMaintenanceAndRepair' }">班组人员新增新增</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> |
| | | |
| | |
| | | },//表头参数 |
| | | columns:[ |
| | | {type:'expand',fixed:"left",slots: { content:'content' },width: 50}, |
| | | {title: '操作', width: 140, slots: { default: 'button_slot' },fixed:"left"}, |
| | | {field: 'id', width: 60, title: 'id',filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged,}, |
| | | {field: 'basic_type',width: 370, title: '类型', showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'basic_name', width: 330,title: '名称', filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'd_basic_name',width: 330, title: '类别'}, |
| | | {title: t('basicData.operate'), width: 140, slots: { default: 'button_slot' },fixed:"left"}, |
| | | {field: 'id', width: 60, title: t('productionBasicData.id'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged,}, |
| | | {field: 'basic_type',width: 370, title: t('machine.type'), showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'basic_name', width: 330,title: t('orderBasicData.name'), filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'd_basic_name',width: 330, title: t('productionBasicData.basicName')}, |
| | | ], |
| | | //表头按钮 |
| | | toolbarConfig: { |
| | |
| | | |
| | | </vxe-grid> |
| | | |
| | | <el-dialog v-model="dialogTableVisible" title="基础数据修改"> |
| | | <el-dialog v-model="dialogTableVisible" :title="$t('productionBasicData.basicDataEdit')"> |
| | | <el-row> |
| | | <el-col :span="2"> |
| | | <el-text>id:</el-text> |
| | | <el-text>{{$t('productionBasicData.id')}}:</el-text> |
| | | </el-col> |
| | | <el-col :span="3"> |
| | | <el-input v-model="getBasicData.id" readonly autocomplete="off" style="width: 220px"/> |
| | |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="2"> |
| | | <el-text>类型:</el-text> |
| | | <el-text>{{$t('machine.type')}}:</el-text> |
| | | </el-col> |
| | | <el-col :span="3"> |
| | | <el-input v-model="getBasicData.basic_type" readonly autocomplete="off" style="width: 220px"/> |
| | |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="2"> |
| | | <el-text>名称:</el-text> |
| | | <el-text>{{$t('orderBasicData.name')}}:</el-text> |
| | | </el-col> |
| | | <el-col :span="3"> |
| | | <el-input v-model="getBasicData.basic_name" autocomplete="off" style="width: 220px"/> |
| | |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="2"> |
| | | <el-text>类别:</el-text> |
| | | <el-text>{{$t('productionBasicData.basicName')}}:</el-text> |
| | | </el-col> |
| | | <el-col :span="3"> |
| | | <!-- <el-input v-model="getBasicData.d_basic_name" autocomplete="off" style="width: 220px"/>--> |
| | |
| | | |
| | | <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> |
| | |
| | | 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: 'reportingWork.reportingWorkTime', width: 120, title: '报工时间',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true, }, |
| | | {field: 'reportingWork.thisProcess',width: 120, title: '报工工序', sortable: true,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'responsibleProcess',width: 120, title: '责任工序', sortable: true,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'responsibleTeam', width: 130,title: '责任班组', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'breakageType', width: 100,title: '次破类型', sortable: true,showOverflow:"ellipsis"}, |
| | | {field: 'breakageReason', width: 100,title: '次破原因', sortable: true,showOverflow:"ellipsis"}, |
| | | {field: 'breakageQuantity', width: 100,title: '次破数量', sortable: true}, |
| | | {field: 'area',width: 100, title: '次破面积', sortable: true}, |
| | | {field: 'order.project', width: 120,title: '项目名称', sortable: true}, |
| | | {field: 'order.orderId',width: 120, title: '销售单号', sortable: true}, |
| | | {field: 'orderGlassDetail.glassChild',width: 120, title: '单片名称', sortable: true}, |
| | | {field: 'reportingWork.reportingWorkTime', width: 120, title: t('reportingWorks.reportingWorkTime'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true, }, |
| | | {field: 'reportingWork.thisProcess',width: 120, title: t('reportingWorks.reportingProcess'), sortable: true,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'responsibleProcess',width: 120, title: t('reportingWorks.responsibleProcess'), sortable: true,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'responsibleTeam', width: 130,title: t('reportingWorks.responsibleTeam'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'breakageType', width: 100,title: t('reportingWorks.breakageType'), sortable: true,showOverflow:"ellipsis"}, |
| | | {field: 'breakageReason', width: 100,title: t('reportingWorks.breakageReason'), sortable: true,showOverflow:"ellipsis"}, |
| | | {field: 'breakageQuantity', width: 100,title: t('reportingWorks.quantityBroken'), sortable: true}, |
| | | {field: 'area',width: 100, title: t('reportingWorks.wornArea'), sortable: true}, |
| | | {field: 'order.project', width: 120,title: t('order.project'), sortable: true}, |
| | | {field: 'order.orderId',width: 120, title: t('order.orderId'), sortable: true}, |
| | | {field: 'orderGlassDetail.glassChild',width: 120, title: t('reportingWorks.glassChild'), sortable: true}, |
| | | ],//表格表头字段 |
| | | data:[],//表格数据 |
| | | url :'/report/crossProcessBreaking', |
| | | exportUrl :'/report/exportCrossProcessBreaking', |
| | | exportName:'跨工序次破报表', |
| | | exportName:t('report.crossProcessBreakdown'), |
| | | footList:['breakageQuantity','area'] |
| | | }) |
| | | |
| | |
| | | }) |
| | | |
| | | //工序 |
| | | const value = ref('磨边') |
| | | const value = ref(t('machine.edgeGrinding')) |
| | | |
| | | //表尾求和 |
| | | const sumNum = (list, field) => { |
| | |
| | | },//表头参数 |
| | | columns: [ |
| | | {type: 'expand', fixed: "left", slots: {content: 'content'}, width: 50}, |
| | | {type: 'seq', fixed: "left", title: '自序', width: 50}, |
| | | {type: 'seq', fixed: "left", title: t('basicData.Number'), width: 50}, |
| | | { |
| | | field: 'orderId', width: 120, title: '销售单号',filters:[{ data: '' }],slots: { filter: 'num1_filter' } |
| | | field: 'orderId', width: 120, title: t('order.orderId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' } |
| | | }, |
| | | { |
| | | field: 'project', |
| | | width: 120, |
| | | title: '项目名称', |
| | | title: t('order.project'), |
| | | showOverflow: "ellipsis", |
| | | filters:[{ data: '' }],slots: { filter: 'num1_filter' } |
| | | }, |
| | | { |
| | | field: 'processId', width: 130, title: '流程卡号', filters:[{ data: '' }],slots: { filter: 'num1_filter' } |
| | | field: 'processId', width: 130, title: t('processCard.processId'), filters:[{ data: '' }],slots: { filter: 'num1_filter' } |
| | | }, |
| | | { |
| | | field: 'orderNumber', width: 120, title: '订单序号',filters:[{ data: '' }],slots: { filter: 'num1_filter' } |
| | | field: 'orderNumber', width: 120, title: t('order.OrderNum'),filters:[{ data: '' }],slots: { filter: 'num1_filter' } |
| | | }, |
| | | { |
| | | field: 'technologyNumber', width: 100, title: '小片顺序', filters:[{ data: '' }],slots: { filter: 'num1_filter' } |
| | | field: 'technologyNumber', width: 100, title: t('processCard.technologyNumber'), filters:[{ data: '' }],slots: { filter: 'num1_filter' } |
| | | }, |
| | | { |
| | | field: 'reportingWorkTime', |
| | | width: 100, |
| | | title: '报工时间', |
| | | title: t('reportingWorks.reportingWorkTime'), |
| | | type: 'date', |
| | | attrs: {placeholder: '', type: 'date'}, |
| | | }, |
| | | {field: 'responsibleProcess', width: 120, title: '责任工序',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, showOverflow: "ellipsis"}, |
| | | {field: 'responsibleTeam', width: 100, title: '责任班组',filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'responsibleEquipment', width: 120, title: '责任设备',filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'breakageType', width: 120, title: '次破类型',filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'breakageReason', width: 120, title: '次破原因',filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'breakageQuantity', width: 120, title: '次破数量'}, |
| | | {field: 'area', width: 120, title: '次破面积'}, |
| | | {field: 'personnel', width: 120, title: '责任人员'}, |
| | | {field: 'glassChild', width: 120, title: '单片名称'}, |
| | | {field: 'responsibleProcess', width: 120, title: t('reportingWorks.responsibleProcess'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, showOverflow: "ellipsis"}, |
| | | {field: 'responsibleTeam', width: 100, title: t('reportingWorks.responsibleTeam'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'responsibleEquipment', width: 120, title: t('reportingWorks.responsibleEquipment'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'breakageType', width: 120, title: t('reportingWorks.breakageType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'breakageReason', width: 120, title: t('reportingWorks.breakageReason'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'breakageQuantity', width: 120, title: t('reportingWorks.quantityBroken')}, |
| | | {field: 'area', width: 120, title: t('reportingWorks.wornArea')}, |
| | | {field: 'personnel', width: 120, title: t('reportingWorks.responsiblePersonnel')}, |
| | | {field: 'glassChild', width: 120, title: t('reportingWorks.glassChild')}, |
| | | ],//表头按钮 |
| | | |
| | | toolbarConfig: { |
| | |
| | | <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="开始时间" |
| | | style="width: 100px" |
| | | type="daterange" |
| | | value-format="YYYY-MM-DD" |
| | | /> |
| | | |
| | | <el-button type="primary" @click="getWorkOrder">查询</el-button> |
| | | <el-button type="primary" @click="getWorkOrder">{{$t('basicData.search')}}</el-button> |
| | | </el-row> |
| | | |
| | | </div> |
| | |
| | | <template #toolbar_buttons> |
| | | <vxe-button style="margin-right: 0.5rem" |
| | | @click="exportExcel('/report/exportDamageReport', |
| | | '次破明细报表', |
| | | t('report.secondaryBrokenReport'), |
| | | form.date1)"> |
| | | 导出</vxe-button> |
| | | {{t('basicData.export')}}</vxe-button> |
| | | </template> |
| | | |
| | | <template #num1_filter="{ column, $panel }"> |
| | |
| | | }) |
| | | |
| | | //工序 |
| | | const value = ref('磨边') |
| | | const value = ref(t('machine.edgeGrinding')) |
| | | |
| | | //表尾求和 |
| | | const sumNum = (list, field) => { |
| | |
| | | },//表头参数 |
| | | columns: [ |
| | | {type: 'expand', fixed: "left", slots: {content: 'content'}, width: 50}, |
| | | {type: 'seq', fixed: "left", title: '自序', width: 50}, |
| | | {type: 'seq', fixed: "left", title: t('basicData.Number'), width: 50}, |
| | | { |
| | | field: 'order_id', width: 120, title: '销售单号', filters: [{data: ''}], |
| | | field: 'order_id', width: 120, title: t('order.orderId'), filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'customer_name', |
| | | width: 120, |
| | | title: '客户名称', |
| | | title: t('customer.customerName'), |
| | | showOverflow: "ellipsis", |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | |
| | | { |
| | | field: 'project', |
| | | width: 120, |
| | | title: '项目名称', |
| | | title: t('order.project'), |
| | | showOverflow: "ellipsis", |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'batch', width: 130, title: '批次', filters: [{data: ''}], |
| | | field: 'batch', width: 130, title: t('order.batch'), filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'quantity', width: 120, title: '订单数量', filters: [{data: ''}], |
| | | field: 'quantity', width: 120, title: t('order.quantity'), filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'area', width: 100, title: '订单面积', filters: [{data: ''}], |
| | | field: 'area', width: 100, title: t('order.area'), filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'create_time', |
| | | width: 100, |
| | | title: '分架时间', |
| | | title: t('processCard.splitFrameTime'), |
| | | type: 'date', |
| | | attrs: {placeholder: '', type: 'date'}, |
| | | }, |
| | | {field: 'startTime', width: 120, title: '切割开始时间', showOverflow: "ellipsis"}, |
| | | {field: 'completionsNum', width: 100, title: '完工数量'}, |
| | | {field: 'received_quantity', width: 120, title: '入库数量'}, |
| | | {field: 'receivedNo', width: 120, title: '未入库数量'}, |
| | | {field: 'accomplish', width: 120, title: '是否清单'}, |
| | | {field: 'daysDifference', width: 120, title: '生产天数'}, |
| | | {field: 'startTime', width: 120, title: t('report.startTime'), showOverflow: "ellipsis"}, |
| | | {field: 'completionsNum', width: 100, title: t('reportingWorks.completedQuantity')}, |
| | | {field: 'received_quantity', width: 120, title: t('report.inventoryNum')}, |
| | | {field: 'receivedNo', width: 120, title: t('report.receivedNo')}, |
| | | {field: 'accomplish', width: 120, title: t('report.accomplish')}, |
| | | {field: 'daysDifference', width: 120, title: t('report.daysDifference')}, |
| | | ],//表头按钮 |
| | | |
| | | toolbarConfig: { |
| | |
| | | <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="开始时间" |
| | | style="width: 100px" |
| | | type="daterange" |
| | | value-format="YYYY-MM-DD" |
| | | /> |
| | | |
| | | <el-button type="primary" @click="getWorkOrder">查询</el-button> |
| | | <el-button type="primary" @click="getWorkOrder">{{$t('basicData.search')}}</el-button> |
| | | </el-row> |
| | | |
| | | </div> |
| | |
| | | </template> |
| | | <template #toolbar_buttons> |
| | | <vxe-button style="margin-right: 0.5rem" |
| | | @click="exportExcel('/report/exportOrderPlanDecomposition', |
| | | '订单计划分解报表', |
| | | @click="exportExcel('/report/orderPlanDecomposition', |
| | | t('report.orderPlanDecomposition'), |
| | | form.date1)"> |
| | | 导出</vxe-button> |
| | | {{t('basicData.export')}}</vxe-button> |
| | | </template> |
| | | |
| | | <template #num1_filter="{ column, $panel }"> |
| | |
| | | }) |
| | | const columns = [ |
| | | // {type:'expand',fixed:"left",slots: { content:'content' },width: 50}, |
| | | {field: 'product_name', width: 150, title: '产品名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'glass_child',width: 130, title: '单片名称' ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'order_type', width: 120,title: '订单类型',filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'process_id',width: 110, title: '流程卡号',filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'order_number', width: 90,title: '订单序号',showOverflow:"ellipsis"}, |
| | | {field: 'technology_number', width: 90,title: '小片顺序',showOverflow:"ellipsis"}, |
| | | {field: 'quantity', width: 90,title: '数量'}, |
| | | {field: 'broken_num',width: 90, title: '次破数量'}, |
| | | {field: 'shippedQuantity',width: 120, title: '发货数量'}, |
| | | {field: 'inventory',width: 120, title: '入库数量'}, |
| | | {field: 'inventoryArea',width: 120, title: '入库面积'}, |
| | | {field: 'product_name', width: 150, title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'glass_child',width: 130, title: t('reportingWorks.glassChild') ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'order_type', width: 120,title: t('order.orderType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'process_id',width: 110, title: t('processCard.processId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'order_number', width: 90,title: t('order.OrderNum'),showOverflow:"ellipsis"}, |
| | | {field: 'technology_number', width: 90,title: t('processCard.technologyNumber'),showOverflow:"ellipsis"}, |
| | | {field: 'quantity', width: 90,title: t('order.quantity')}, |
| | | {field: 'broken_num',width: 90, title: t('reportingWorks.quantityBroken')}, |
| | | {field: 'shippedQuantity',width: 120, title: t('report.shippedQuantity')}, |
| | | {field: 'inventory',width: 120, title: t('report.inventoryNum')}, |
| | | {field: 'inventoryArea',width: 120, title: t('report.inventoryArea')}, |
| | | ] |
| | | //需要合并的列 |
| | | let column = [1,3,8] |
| | |
| | | request.post(`/report/processCardProgress/${form.orderId}`,column).then((res) => { |
| | | if (res.code == 200) { |
| | | if(res.data.data.length===0){ |
| | | ElMessage.warning('未查询到此订单流程卡数据') |
| | | ElMessage.warning(t('report.noDataFoundForThisOrder')) |
| | | return |
| | | } |
| | | gridOptions.columns = JSON.parse(JSON.stringify(columns)) |
| | |
| | | }) |
| | | |
| | | //工序 |
| | | const value = ref('磨边') |
| | | const value = ref(t('machine.edgeGrinding')) |
| | | |
| | | //表尾求和 |
| | | const sumNum = (list, field) => { |
| | |
| | | },//表头参数 |
| | | columns: [ |
| | | {type: 'expand', fixed: "left", slots: {content: 'content'}, width: 50}, |
| | | {type: 'seq', fixed: "left", title: '自序', width: 50}, |
| | | {field: 'create_time', width: 120, title: '下单时间'}, |
| | | {field: 'delivery_date', width: 120, title: '交货日期'}, |
| | | {type: 'seq', fixed: "left", title: t('basicData.Number'), width: 50}, |
| | | {field: 'create_time', width: 120, title: t('report.orderTime')}, |
| | | {field: 'delivery_date', width: 120, title: t('report.deliveryDate')}, |
| | | { |
| | | field: 'order_id', width: 120, title: '销售单号', filters: [{data: ''}], |
| | | field: 'order_id', width: 120, title: t('order.orderId'), filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'process_id', |
| | | width: 120, |
| | | title: '流程卡号', |
| | | title: t('processCard.processId'), |
| | | showOverflow: "ellipsis", |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'customer_name', width: 130, title: '客户名称', filters: [{data: ''}], |
| | | field: 'customer_name', width: 130, title: t('customer.customerName'), filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'project', width: 120, title: '项目名称', filters: [{data: ''}], |
| | | field: 'project', width: 120, title: t('order.project'), filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'batch', width: 100, title: '批次', filters: [{data: ''}], |
| | | field: 'batch', width: 100, title: t('order.batch'), filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | {field: 'order_number', width: 100, title: '序号'}, |
| | | {field: 'technology_number', width: 120, title: '小片顺序', showOverflow: "ellipsis"}, |
| | | {field: 'glass_child', width: 100, title: '单片名称'}, |
| | | {field: 'child_width', width: 120, title: '宽'}, |
| | | {field: 'child_height', width: 120, title: '高'}, |
| | | {field: 'quantity', width: 120, title: '订单数量'}, |
| | | {field: 'childArea', width: 120, title: '单片面积'}, |
| | | {field: 'actualArea', width: 120, title: '实际面积'}, |
| | | {field: 'completeNum', width: 120, title: '已完成数量'}, |
| | | {field: 'completeArea', width: 120, title: '已完成面积'}, |
| | | {field: 'incompleteNum', width: 120, title: '未完成数量'}, |
| | | {field: 'incompleteArea', width: 120, title: '未完成面积'}, |
| | | {field: 'product_name', width: 120, title: '成品名称'}, |
| | | {field: 'order_number', width: 100, title: t('order.OrderNum')}, |
| | | {field: 'technology_number', width: 120, title: t('processCard.technologyNumber'), showOverflow: "ellipsis"}, |
| | | {field: 'glass_child', width: 100, title: t('reportingWorks.glassChild')}, |
| | | {field: 'child_width', width: 120, title: t('order.width')}, |
| | | {field: 'child_height', width: 120, title: t('order.height')}, |
| | | {field: 'quantity', width: 120, title: t('order.quantity')}, |
| | | {field: 'childArea', width: 120, title: t('order.trueArea')}, |
| | | {field: 'actualArea', width: 120, title: t('order.trueGrossArea')}, |
| | | {field: 'completeNum', width: 120, title: t('report.completedQuantity')}, |
| | | {field: 'completeArea', width: 120, title: t('report.completedArea')}, |
| | | {field: 'incompleteNum', width: 120, title: t('report.unfinishedQuantity')}, |
| | | {field: 'incompleteArea', width: 120, title: t('report.unfinishedArea')}, |
| | | {field: 'product_name', width: 120, title: t('order.product')}, |
| | | ],//表头按钮 |
| | | |
| | | toolbarConfig: { |
| | |
| | | inputProject = null |
| | | } |
| | | if(date===null){ |
| | | ElMessage.warning("请先选择日期") |
| | | ElMessage.warning(t('report.pleaseSelectADateFirst')) |
| | | return |
| | | } |
| | | |
| | | if(processes===null){ |
| | | ElMessage.warning("请先选择工序") |
| | | ElMessage.warning(t('report.pleaseSelectAProcessFirst')) |
| | | return |
| | | } |
| | | |
| | |
| | | const timeDiff = Math.abs(date2.getTime() - date1.getTime()); |
| | | const daysDiff = timeDiff / (1000 * 3600 * 24); |
| | | if(Math.floor(daysDiff)>180){ |
| | | ElMessage.warning("导出的筛选时间不能超过180天") |
| | | ElMessage.warning(t('report.theFilteringTimeForExportCannotExceed180Days')) |
| | | return |
| | | } |
| | | let dataMp = ref({ |
| | |
| | | |
| | | <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="开始时间" |
| | | style="width: 100px" |
| | | type="daterange" |
| | | value-format="YYYY-MM-DD" |
| | |
| | | |
| | | <el-input v-model="form.orderId" :placeholder="$t('order.orderId')" clearable style="width: 130px"></el-input> |
| | | |
| | | <el-input v-model="form.project" clearable placeholder="项目名称" style="width: 130px"></el-input> |
| | | <el-input v-model="form.project" clearable :placeholder="$t('order.project')" style="width: 130px"></el-input> |
| | | |
| | | <el-select v-model="value" clearable default-value="default_city" style="width: 120px"> |
| | | <el-option |
| | |
| | | :value="item.basic_name" |
| | | /> |
| | | </el-select> |
| | | <el-button type="primary" @click="getWorkOrder">查询</el-button> |
| | | <el-button type="primary" @click="getWorkOrder">{{$t('basicData.search')}}</el-button> |
| | | </el-row> |
| | | |
| | | </div> |
| | |
| | | |
| | | <!--左边固定显示的插槽--> |
| | | <template #button_slot="{ row }"> |
| | | <el-button link size="small" type="primary" @click="getTableRow(row,'edit')">编辑</el-button> |
| | | <el-button link size="small" type="primary" @click="getTableRow(row,'setType')">反审</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,'edit')">{{$t('basicData.edit')}}</el-button> |
| | | <el-button link size="small" type="primary" @click="getTableRow(row,'setType')">{{$t('basicData.cancelReview')}}</el-button> |
| | | <el-button link size="small" type="primary" @click="getTableRow(row,'delete')">{{$t('basicData.delete')}}</el-button> |
| | | </template> |
| | | |
| | | <template #toolbar_buttons> |
| | | <vxe-button style="margin-right: 0.5rem" |
| | | @click="exportExcel('/report/exportProcessToBeCompleted', |
| | | '工序待完成报表', |
| | | t('report.processToBeCompleted'), |
| | | form.date1)"> |
| | | 导出</vxe-button> |
| | | {{t('basicData.export')}}</vxe-button> |
| | | </template> |
| | | |
| | | <template #num1_filter="{ column, $panel }"> |
| | |
| | | }) |
| | | const columns = [ |
| | | {type:'expand',fixed:"left",slots: { content:'content' },width: 50}, |
| | | {field: 'order_number', width: 150, title: '订单序号',filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'shape',width: 130, title: '形状' ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'product_name', width: 120,title: '产品名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'child_width',width: 110, title: '宽',filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'child_height', width: 90,title: '高',showOverflow:"ellipsis"}, |
| | | {field: 'quantity', width: 90,title: '数量'}, |
| | | {field: 'technology_number',width: 90, title: '小片顺序'}, |
| | | {field: 'glass_child',width: 120, title: '单片名称'}, |
| | | {field: 'inventoryNum',width: 120, title: '入库数量'}, |
| | | {field: 'inventoryArea',width: 120, title: '入库面积'}, |
| | | {field: 'shippedQuantity',width: 120, title: '发货数量'}, |
| | | {field: 'area',width: 120, title: '发货面积'}, |
| | | {field: 'order_number', width: 150, title: t('order.OrderNum'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'shape',width: 130, title: t('order.shape') ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'product_name', width: 120,title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'child_width',width: 110, title: t('order.width'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'child_height', width: 90,title: t('order.height'),showOverflow:"ellipsis"}, |
| | | {field: 'quantity', width: 90,title: t('order.quantity')}, |
| | | {field: 'technology_number',width: 90, title: t('processCard.technologyNumber')}, |
| | | {field: 'glass_child',width: 120, title: t('reportingWorks.glassChild')}, |
| | | {field: 'inventoryNum',width: 120, title: t('report.inventoryNum')}, |
| | | {field: 'inventoryArea',width: 120, title: t('report.inventoryArea')}, |
| | | {field: 'shippedQuantity',width: 120, title: t('report.shippedQuantity')}, |
| | | {field: 'area',width: 120, title: t('report.area')}, |
| | | ] |
| | | //需要合并的列 |
| | | let column = [1,2,3] |
| | |
| | | request.post(`/report/productionSchedule/${form.orderId}`,column).then((res) => { |
| | | if (res.code == 200) { |
| | | if(res.data.data.length===0){ |
| | | ElMessage.warning('未查询到此订单数据') |
| | | ElMessage.warning(t('report.noDataFoundForThisOrder')) |
| | | return |
| | | } |
| | | gridOptions.columns = JSON.parse(JSON.stringify(columns)) |
| | |
| | | }) |
| | | |
| | | //工序 |
| | | const value = ref('磨边') |
| | | const value = ref(t('machine.edgeGrinding')) |
| | | |
| | | //表尾求和 |
| | | const sumNum = (list, field) => { |
| | |
| | | },//表头参数 |
| | | columns: [ |
| | | {type: 'expand', fixed: "left", slots: {content: 'content'}, width: 50}, |
| | | {type: 'seq', fixed: "left", title: '自序', width: 50}, |
| | | {type: 'seq', fixed: "left", title: t('basicData.Number'), width: 50}, |
| | | { |
| | | field: 'order_id', width: 120, title: '销售单号', filters: [{data: ''}], |
| | | field: 'order_id', width: 120, title: t('order.orderId'), filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'customer_name', |
| | | width: 120, |
| | | title: '客户名称', |
| | | title: t('customer.customerName'), |
| | | showOverflow: "ellipsis", |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | |
| | | { |
| | | field: 'project', |
| | | width: 120, |
| | | title: '项目名称', |
| | | title: t('order.project'), |
| | | showOverflow: "ellipsis", |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'order_number', width: 130, title: '订单序号', filters: [{data: ''}], |
| | | field: 'order_number', width: 130, title: t('order.OrderNum'), filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'technology_number', width: 120, title: '小片顺序', filters: [{data: ''}], |
| | | field: 'technology_number', width: 120, title: t('processCard.technologyNumber'), filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'product_name', width: 100, title: '产品名称', filters: [{data: ''}], |
| | | field: 'product_name', width: 100, title: t('order.product'), filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'quantity', |
| | | width: 100, |
| | | title: '订单数量', |
| | | title: t('order.quantity'), |
| | | type: 'date', |
| | | attrs: {placeholder: '', type: 'date'}, |
| | | }, |
| | | {field: 'quantityMax', width: 120, title: '投入数量', showOverflow: "ellipsis"}, |
| | | {field: 'breakage_quantity', width: 100, title: '次破数量'}, |
| | | {field: 'patch_num', width: 120, title: '补片数量'}, |
| | | {field: 'received_quantity', width: 120, title: '入库数量'}, |
| | | {field: 'finished', width: 120, title: '成品率'}, |
| | | {field: 'quantityMax', width: 120, title: t('report.quantityMax'), showOverflow: "ellipsis"}, |
| | | {field: 'breakage_quantity', width: 100, title: t('reportingWorks.quantityBroken')}, |
| | | {field: 'patch_num', width: 120, title: t('reportingWorks.quantityBroken')}, |
| | | {field: 'received_quantity', width: 120, title: t('report.patchNum')}, |
| | | {field: 'finished', width: 120, title: t('report.finished')}, |
| | | ],//表头按钮 |
| | | |
| | | toolbarConfig: { |
| | |
| | | <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="开始时间" |
| | | style="width: 100px" |
| | | type="daterange" |
| | | value-format="YYYY-MM-DD" |
| | | /> |
| | | |
| | | <el-button type="primary" @click="getWorkOrder">查询</el-button> |
| | | <el-button type="primary" @click="getWorkOrder">{{$t('basicData.search')}}</el-button> |
| | | </el-row> |
| | | |
| | | </div> |
| | |
| | | <template #toolbar_buttons> |
| | | <vxe-button style="margin-right: 0.5rem" |
| | | @click="exportExcel('/report/exportQualityReport', |
| | | '品质报表', |
| | | t('report.qualityReport'), |
| | | form.date1)"> |
| | | 导出</vxe-button> |
| | | {{t('basicData.export')}}</vxe-button> |
| | | </template> |
| | | |
| | | <template #num1_filter="{ column, $panel }"> |
| | |
| | | }) |
| | | |
| | | //工序 |
| | | const value = ref('磨边') |
| | | const value = ref(t('machine.edgeGrinding')) |
| | | |
| | | //表尾求和 |
| | | const sumNum = (list, field) => { |
| | |
| | | },//表头参数 |
| | | columns: [ |
| | | {type: 'expand', fixed: "left", slots: {content: 'content'}, width: 50}, |
| | | {type: 'seq', fixed: "left", title: '自序', width: 50}, |
| | | {type: 'seq', fixed: "left", title: t('basicData.Number'), width: 50}, |
| | | |
| | | { |
| | | field: 'project_no', |
| | | width: 120, |
| | | title: '工程编号', |
| | | title: t('report.projectNo'), |
| | | showOverflow: "ellipsis", |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'material_name', width: 120, title: '物料名称', filters: [{data: ''}], |
| | | field: 'material_name', width: 120, title: t('mainIngredient.materialName'), filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'producer',title: '原片产地', filters: [{data: ''}], |
| | | field: 'producer',title: t('mainIngredient.producer'), filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'width', |
| | | title: '宽', |
| | | title: t('order.width'), |
| | | type: 'date', |
| | | attrs: {placeholder: '', type: 'date'}, |
| | | }, |
| | | {field: 'height', title: '高', showOverflow: "ellipsis"}, |
| | | {field: 'quantity', title: '已领数量'}, |
| | | {field: 'area', title: '已领面积'}, |
| | | {field: 'date_of_manufacture', title: '原片生产日期'}, |
| | | {field: 'date', title: '领出日期'}, |
| | | {field: 'height', title: t('order.height'), showOverflow: "ellipsis"}, |
| | | {field: 'quantity', title: t('report.quantityClaimed')}, |
| | | {field: 'area', title: t('report.areaClaimed')}, |
| | | {field: 'date_of_manufacture', title: t('mainIngredient.dateOfManufacture')}, |
| | | {field: 'date', title: t('report.dateClaimed')}, |
| | | ],//表头按钮 |
| | | |
| | | toolbarConfig: { |
| | |
| | | <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="开始时间" |
| | | style="width: 100px" |
| | | type="daterange" |
| | | value-format="YYYY-MM-DD" |
| | | /> |
| | | |
| | | <el-button type="primary" @click="getWorkOrder">查询</el-button> |
| | | <el-button type="primary" @click="getWorkOrder">{{$t('basicData.search')}}</el-button> |
| | | </el-row> |
| | | |
| | | </div> |
| | |
| | | <template #toolbar_buttons> |
| | | <vxe-button style="margin-right: 0.5rem" |
| | | @click="exportExcel('/report/exportRawMaterialRequisition', |
| | | '原片领料报表', |
| | | t('report.rawMaterialRequisition'), |
| | | form.date1)"> |
| | | 导出</vxe-button> |
| | | {{t('basicData.export')}}</vxe-button> |
| | | </template> |
| | | |
| | | </vxe-grid> |
| | |
| | | > |
| | | |
| | | <el-sub-menu index="1" > |
| | | <template #title >生产报表</template> |
| | | <el-menu-item index="/main/report/WorkInProgress">在制品报表</el-menu-item> |
| | | <el-menu-item index="/main/report/ProcessToBeCompleted">工序待完成</el-menu-item> |
| | | <el-menu-item index="/main/report/ProductionSchedule">生产发货进度</el-menu-item> |
| | | <el-menu-item index="/main/report/ProcessCardProgress">流程卡进度</el-menu-item> |
| | | <el-menu-item index="/main/report/OrderPlanDecomposition">订单计划分解</el-menu-item> |
| | | <template #title >{{$t('report.productionReport')}}</template> |
| | | <el-menu-item index="/main/report/WorkInProgress">{{$t('report.workInProgressReport')}}</el-menu-item> |
| | | <el-menu-item index="/main/report/ProcessToBeCompleted">{{$t('report.processToBeCompleted')}}</el-menu-item> |
| | | <el-menu-item index="/main/report/ProductionSchedule">{{$t('report.productionAndShippingProgress')}}</el-menu-item> |
| | | <el-menu-item index="/main/report/ProcessCardProgress">{{$t('report.processCardProgress')}}</el-menu-item> |
| | | <el-menu-item index="/main/report/OrderPlanDecomposition">{{$t('report.orderPlanDecomposition')}}</el-menu-item> |
| | | </el-sub-menu> |
| | | <!-- <el-sub-menu index="2" popper-class="test">--> |
| | | <!-- <template #title>产量报表</template>--> |
| | |
| | | <!-- <el-menu-item index="/main/report/EquipmentOutput">设备产量</el-menu-item>--> |
| | | <!-- </el-sub-menu>--> |
| | | <el-sub-menu index="3" popper-class="test"> |
| | | <template #title>次破报表</template> |
| | | <el-menu-item index="/main/report/DamageReport">次破报表</el-menu-item> |
| | | <el-menu-item index="/main/report/CrossProcessBreaking">跨工序次破</el-menu-item> |
| | | <template #title>{{$t('report.secondaryBrokenReport')}}</template> |
| | | <el-menu-item index="/main/report/DamageReport">{{$t('report.secondaryBrokenReport')}}</el-menu-item> |
| | | <el-menu-item index="/main/report/CrossProcessBreaking">{{$t('report.crossProcessBreakdown')}}</el-menu-item> |
| | | </el-sub-menu> |
| | | <el-menu-item index="/main/report/TeamOutput">班组产量</el-menu-item> |
| | | <el-menu-item index="/main/report/SplittingDetailsOutside">分架明细</el-menu-item> |
| | | <el-menu-item index="/main/report/TaskCompletionStatus">任务完成情况</el-menu-item> |
| | | <el-menu-item index="/main/report/RawMaterialRequisition">原片领料</el-menu-item> |
| | | <el-menu-item index="/main/report/QualityReport">品质报表</el-menu-item> |
| | | <el-menu-item index="/main/report/Yield">成品率报表</el-menu-item> |
| | | <el-menu-item index="/main/report/TeamOutput">{{$t('report.teamOutput')}}</el-menu-item> |
| | | <el-menu-item index="/main/report/SplittingDetailsOutside">{{$t('report.splittingDetails')}}</el-menu-item> |
| | | <el-menu-item index="/main/report/TaskCompletionStatus">{{$t('report.TaskCompletionStatus')}}</el-menu-item> |
| | | <el-menu-item index="/main/report/RawMaterialRequisition">{{$t('report.rawMaterialRequisition')}}</el-menu-item> |
| | | <el-menu-item index="/main/report/QualityReport">{{$t('report.qualityReport')}}</el-menu-item> |
| | | <el-menu-item index="/main/report/Yield">{{$t('report.yieldReport')}}</el-menu-item> |
| | | <!-- <el-menu-item index="/main/report/OrderBOMOutside">BOM报表</el-menu-item>--> |
| | | </el-menu> |
| | | </div> |
| | |
| | | },//表头参数 |
| | | columns: [ |
| | | {type: 'expand', fixed: "left", slots: {content: 'content'}, width: 50}, |
| | | {type: 'seq', fixed: "left", title: '自序', width: 50}, |
| | | {type: 'seq', fixed: "left", title: t('basicData.Number'), width: 50}, |
| | | { |
| | | field: 'processId', width: 120, title: '流程卡号', filters: [{data: ''}], |
| | | field: 'processId', width: 120, title: t('processCard.processId'), filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'orderNumber', |
| | | width: 120, |
| | | title: '订单序号', |
| | | title: t('order.OrderNum'), |
| | | showOverflow: "ellipsis", |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'technologyNumber', width: 130, title: '小片顺序', filters: [{data: ''}], |
| | | field: 'technologyNumber', width: 130, title: t('processCard.technologyNumber'), filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'project', width: 120, title: '项目名称', filters: [{data: ''}], |
| | | field: 'project', width: 120, title: t('order.project'), filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'batch', width: 100, title: '批次', filters: [{data: ''}], |
| | | field: 'batch', width: 100, title: t('order.batch'), filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | {field: 'childWidth', width: 120, title: '宽'}, |
| | | {field: 'childHeight', width: 120, title: '高'}, |
| | | {field: 'quantity', width: 120, title: '订单数'}, |
| | | {field: 'childWidth', width: 120, title: t('order.width')}, |
| | | {field: 'childHeight', width: 120, title: t('order.height')}, |
| | | {field: 'quantity', width: 120, title: t('order.quantity')}, |
| | | |
| | | {field: 'area', width: 100, title: '面积'}, |
| | | {field: 'shape', width: 120, title: '形状',}, |
| | | {field: 'remarks', width: 100, title: '备注'}, |
| | | {field: 'area', width: 100, title: t('order.area')}, |
| | | {field: 'shape', width: 120, title: t('order.shape'),}, |
| | | {field: 'remarks', width: 100, title: t('basicData.remarks')}, |
| | | ],//表头按钮 |
| | | |
| | | toolbarConfig: { |
| | |
| | | <el-input v-model="form.orderId" :placeholder="$t('order.orderId')" clearable style="width: 130px"></el-input> |
| | | |
| | | |
| | | <el-button type="primary" @click="getWorkOrder">查询</el-button> |
| | | <el-button type="primary" @click="getWorkOrder">{{$t('basicData.search')}}</el-button> |
| | | </el-row> |
| | | |
| | | </div> |
| | |
| | | }) |
| | | const columns = [ |
| | | {type:'expand',fixed:"left",slots: { content:'content' },width: 50}, |
| | | {field: 'customerName', width: 150, title: '客户名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'project',width: 130, title: '项目名称' ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'batch', width: 120,title: '批次',filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'orderId',width: 110, title: '销售单号',filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'quantity', width: 90,title: '订单数量',showOverflow:"ellipsis"}, |
| | | {field: 'area', width: 90,title: '订单面积'}, |
| | | {field: 'shippedQuantity',width: 90, title: '发货数量'}, |
| | | {field: 'shippedArea',width: 120, title: '发货面积'}, |
| | | {field: 'customerName', width: 150, title: t('customer.customerName'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'project',width: 130, title: t('order.project') ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'batch', width: 120,title: t('order.batch'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'orderId',width: 110, title: t('order.orderId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'quantity', width: 90,title: t('order.quantity'),showOverflow:"ellipsis"}, |
| | | {field: 'area', width: 90,title: t('order.area')}, |
| | | {field: 'shippedQuantity',width: 90, title: t('delivery.deliveryQuantity')}, |
| | | {field: 'shippedArea',width: 120, title: t('report.area')}, |
| | | ] |
| | | //需要合并的列 |
| | | let column = [1,2,3] |
| | |
| | | request.post(`/report/taskCompletionStatus/${startTime}/${endTime}`,column).then((res) => { |
| | | if (res.code == 200) { |
| | | if(res.data.data.length===0){ |
| | | ElMessage.warning('未查询到此订单数据') |
| | | ElMessage.warning(t('report.noDataFoundForThisOrder')) |
| | | return |
| | | } |
| | | gridOptions.columns = JSON.parse(JSON.stringify(columns)) |
| | |
| | | <!-- style="width: 130px"></el-input>--> |
| | | <el-date-picker |
| | | v-model="time.date1" |
| | | end-placeholder="结束时间" |
| | | :start-placeholder="$t('basicData.startDate')" |
| | | :end-placeholder="$t('basicData.endDate')" |
| | | format="YYYY/MM/DD" |
| | | start-placeholder="开始时间" |
| | | style="width: 100px" |
| | | type="daterange" |
| | | value-format="YYYY-MM-DD" |
| | |
| | | <template #toolbar_buttons> |
| | | <vxe-button style="margin-right: 0.5rem" |
| | | @click="exportExcel('/report/exportTaskCompletionStatus', |
| | | '任务完成情况报表', |
| | | t('report.TaskCompletionStatus'), |
| | | time.date1)"> |
| | | 导出</vxe-button> |
| | | {{t('basicData.export')}}</vxe-button> |
| | | </template> |
| | | |
| | | </vxe-grid> |
| | |
| | | }) |
| | | |
| | | //工序 |
| | | const value = ref('切割') |
| | | const value = ref(t('machine.edgeGrinding')) |
| | | |
| | | //表尾求和 |
| | | const sumNum = (list, field) => { |
| | |
| | | },//表头参数 |
| | | columns: [ |
| | | {type: 'expand', fixed: "left", slots: {content: 'content'}, width: 50}, |
| | | {type: 'seq', fixed: "left", title: '自序', width: 40}, |
| | | {type: 'seq', fixed: "left", title: t('basicData.Number'), width: 40}, |
| | | { |
| | | field: 'reportingWorkTime', width: 160, title: '报工时间', |
| | | field: 'reportingWorkTime', width: 160, title: t('reportingWorks.reportingWorkTime'), |
| | | }, |
| | | { |
| | | field: 'thisProcess', |
| | | width: 100, |
| | | title: '报工工序', |
| | | title: t('reportingWorks.reportingProcess'), |
| | | showOverflow: "ellipsis", |
| | | filters:[{ data: '' }],slots: { filter: 'num1_filter' } |
| | | }, |
| | | { |
| | | field: 'teamsGroupsName', width: 100, title: '报工班组',filters:[{ data: '' }],slots: { filter: 'num1_filter' } |
| | | field: 'teamsGroupsName', width: 100, title: t('reportingWorks.teamsType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' } |
| | | }, |
| | | { |
| | | field: 'project', width: 120, title: '项目名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' } |
| | | field: 'project', width: 120, title: t('order.project'),filters:[{ data: '' }],slots: { filter: 'num1_filter' } |
| | | }, |
| | | { |
| | | field: 'processId', width: 140, title: '流程卡号',filters:[{ data: '' }],slots: { filter: 'num1_filter' } |
| | | field: 'processId', width: 140, title: t('processCard.processId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' } |
| | | }, |
| | | {field: 'orderNumber', width: 60, title: '序号'}, |
| | | {field: 'width', width: 100, title: '宽'}, |
| | | {field: 'height', width: 100, title: '高'}, |
| | | {field: 'shape', width: 90, title: '形状'}, |
| | | {field: 'thickness', width: 90, title: '厚度',filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'edgingType', width: 110, title: '磨边类型',filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'completedQuantity', width: 90, title: '完工数量'}, |
| | | {field: 'area', width: 100, title: '完工面积'}, |
| | | {field: 'productName', width: 150, title: '产品名称'}, |
| | | {field: 'orderNumber', width: 60, title: t('order.OrderNum')}, |
| | | {field: 'width', width: 100, title: t('order.width')}, |
| | | {field: 'height', width: 100, title: t('order.height')}, |
| | | {field: 'shape', width: 90, title: t('order.shape')}, |
| | | {field: 'thickness', width: 90, title: t('order.totalThickness'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'edgingType', width: 110, title: t('order.edgingType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'completedQuantity', width: 90, title: t('reportingWorks.completedQuantity')}, |
| | | {field: 'area', width: 100, title: t('reportingWorks.completedArea')}, |
| | | {field: 'productName', width: 150, title: t('order.product')}, |
| | | ],//表头按钮 |
| | | |
| | | toolbarConfig: { |
| | |
| | | function exportExcel(url, fileName,date) { |
| | | let processes = value.value |
| | | if(date===null){ |
| | | ElMessage.warning("请先选择日期") |
| | | ElMessage.warning(t('report.pleaseSelectADateFirst')) |
| | | return |
| | | } |
| | | |
| | | if(processes===null){ |
| | | ElMessage.warning("请先选择工序") |
| | | ElMessage.warning(t('report.pleaseSelectAProcessFirst')) |
| | | return |
| | | } |
| | | |
| | |
| | | const timeDiff = Math.abs(date2.getTime() - date1.getTime()); |
| | | const daysDiff = timeDiff / (1000 * 3600 * 24); |
| | | if(Math.floor(daysDiff)>180){ |
| | | ElMessage.warning("导出的筛选时间不能超过180天") |
| | | ElMessage.warning(t('report.theFilteringTimeForExportCannotExceed180Days')) |
| | | return |
| | | } |
| | | let dataMp = ref({ |
| | |
| | | |
| | | <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="开始时间" |
| | | style="width: 100px" |
| | | type="daterange" |
| | | value-format="YYYY-MM-DD" |
| | |
| | | :value="item.basic_name" |
| | | /> |
| | | </el-select> |
| | | <el-button type="primary" @click="getWorkOrder">查询</el-button> |
| | | <el-button type="primary" @click="getWorkOrder">{{$t('basicData.search')}}</el-button> |
| | | </el-row> |
| | | |
| | | </div> |
| | |
| | | <template #toolbar_buttons> |
| | | <vxe-button style="margin-right: 0.5rem" |
| | | @click="exportExcel('/report/exportTeamOutput', |
| | | '班组产量明细', |
| | | t('report.teamOutput'), |
| | | form.date1)"> |
| | | 导出</vxe-button> |
| | | {{t('basicData.export')}}</vxe-button> |
| | | </template> |
| | | |
| | | </vxe-grid> |
| | |
| | | }) |
| | | |
| | | //工序 |
| | | const value = ref('磨边') |
| | | const value = ref(t('machine.edgeGrinding')) |
| | | |
| | | //表尾求和 |
| | | const sumNum = (list, field) => { |
| | |
| | | },//表头参数 |
| | | columns: [ |
| | | {type: 'expand', fixed: "left", slots: {content: 'content'}, width: 50}, |
| | | {type: 'seq', fixed: "left", title: '自序', width: 50}, |
| | | {type: 'seq', fixed: "left", title: t('basicData.Number'), width: 50}, |
| | | { |
| | | field: 'thisProcess', width: 120, title: '工序', filters: [{data: ''}], |
| | | field: 'thisProcess', width: 120, title: t('report.workingProcedure'), filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'process_id', |
| | | width: 120, |
| | | title: '流程卡号', |
| | | title: t('processCard.processId'), |
| | | showOverflow: "ellipsis", |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'customer_name', width: 130, title: '客户名称', filters: [{data: ''}], |
| | | field: 'customer_name', width: 130, title: t('customer.customerName'), filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'project', width: 120, title: '项目名称', filters: [{data: ''}], |
| | | field: 'project', width: 120, title: t('order.project'), filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'batch', width: 100, title: '批次', filters: [{data: ''}], |
| | | field: 'batch', width: 100, title: t('order.batch'), filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | {field: 'order_number', width: 100, title: '序号'}, |
| | | {field: 'technology_number', width: 120, title: '小片顺序', showOverflow: "ellipsis"}, |
| | | {field: 'shape', width: 100, title: '形状'}, |
| | | {field: 'process', width: 120, title: '工艺流程'}, |
| | | {field: 'quantity', width: 120, title: '订单数'}, |
| | | {field: 'child_width', width: 120, title: '宽'}, |
| | | {field: 'child_height', width: 120, title: '高'}, |
| | | {field: 'stockNum', width: 120, title: '库存数'}, |
| | | {field: 'stockArea', width: 120, title: '库存面积'}, |
| | | {field: 'product_name', width: 120, title: '成品名称'}, |
| | | {field: 'bend_radius', width: 120, title: '弯钢半径'}, |
| | | {field: 'order_number', width: 100, title: t('order.OrderNum')}, |
| | | {field: 'technology_number', width: 120, title: t('processCard.technologyNumber'), showOverflow: "ellipsis"}, |
| | | {field: 'shape', width: 100, title: t('order.shape')}, |
| | | {field: 'process', width: 120, title: t('craft.process')}, |
| | | {field: 'quantity', width: 120, title: t('order.quantity')}, |
| | | {field: 'child_width', width: 120, title: t('order.width')}, |
| | | {field: 'child_height', width: 120, title: t('order.height')}, |
| | | {field: 'stockNum', width: 120, title: t('productStock.inventoryQuantity')}, |
| | | {field: 'stockArea', width: 120, title: t('report.inventoryArea')}, |
| | | {field: 'product_name', width: 120, title: t('order.product')}, |
| | | {field: 'bend_radius', width: 120, title: t('order.bendRadius')}, |
| | | ],//表头按钮 |
| | | |
| | | toolbarConfig: { |
| | |
| | | inputProject = null |
| | | } |
| | | if(date===null){ |
| | | ElMessage.warning("请先选择日期") |
| | | ElMessage.warning(t('report.pleaseSelectADateFirst')) |
| | | return |
| | | } |
| | | |
| | | if(processes===null){ |
| | | ElMessage.warning("请先选择工序") |
| | | ElMessage.warning(t('report.pleaseSelectAProcessFirst')) |
| | | return |
| | | } |
| | | |
| | |
| | | const timeDiff = Math.abs(date2.getTime() - date1.getTime()); |
| | | const daysDiff = timeDiff / (1000 * 3600 * 24); |
| | | if(Math.floor(daysDiff)>180){ |
| | | ElMessage.warning("导出的筛选时间不能超过180天") |
| | | ElMessage.warning(t('report.theFilteringTimeForExportCannotExceed180Days')) |
| | | return |
| | | } |
| | | let dataMp = ref({ |
| | |
| | | |
| | | <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="开始时间" |
| | | style="width: 100px" |
| | | type="daterange" |
| | | value-format="YYYY-MM-DD" |
| | |
| | | |
| | | <el-input v-model="form.orderId" :placeholder="$t('order.orderId')" clearable style="width: 130px"></el-input> |
| | | |
| | | <el-input v-model="form.project" clearable placeholder="项目名称" style="width: 130px"></el-input> |
| | | <el-input v-model="form.project" clearable :placeholder="$t('order.project')" style="width: 130px"></el-input> |
| | | |
| | | <el-select v-model="value" clearable default-value="default_city" style="width: 120px"> |
| | | <el-option |
| | |
| | | :value="item.basic_name" |
| | | /> |
| | | </el-select> |
| | | <el-button type="primary" @click="getWorkOrder">查询</el-button> |
| | | <el-button type="primary" @click="getWorkOrder">{{$t('basicData.search')}}</el-button> |
| | | </el-row> |
| | | |
| | | </div> |
| | |
| | | |
| | | <!--左边固定显示的插槽--> |
| | | <template #button_slot="{ row }"> |
| | | <el-button link size="small" type="primary" @click="getTableRow(row,'edit')">编辑</el-button> |
| | | <el-button link size="small" type="primary" @click="getTableRow(row,'setType')">反审</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,'edit')">{{$t('basicData.edit')}}</el-button> |
| | | <el-button link size="small" type="primary" @click="getTableRow(row,'setType')">{{$t('basicData.cancelReview')}}</el-button> |
| | | <el-button link size="small" type="primary" @click="getTableRow(row,'delete')">{{$t('basicData.delete')}}</el-button> |
| | | </template> |
| | | |
| | | <template #num1_filter="{ column, $panel }"> |
| | |
| | | <template #toolbar_buttons> |
| | | <vxe-button style="margin-right: 0.5rem" |
| | | @click="exportExcel('/report/exportWorkInProgress', |
| | | '在制品报表', |
| | | t('report.workInProgressReport'), |
| | | form.date1)"> |
| | | 导出</vxe-button> |
| | | {{t('basicData.export')}}</vxe-button> |
| | | </template> |
| | | |
| | | </vxe-grid> |
| | |
| | | },//表头参数 |
| | | columns: [ |
| | | {type: 'expand', fixed: "left", slots: {content: 'content'}, width: 50}, |
| | | {type: 'seq', fixed: "left", title: '自序', width: 50}, |
| | | {type: 'seq', fixed: "left", title: t('basicData.Number'), width: 50}, |
| | | { |
| | | field: 'process', width: 120, title: '工序', filters: [{data: ''}], |
| | | field: 'process', width: 120, title: t('report.workingProcedure'), filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'order_id', |
| | | width: 120, |
| | | title: '销售单号', |
| | | title: t('order.orderId'), |
| | | showOverflow: "ellipsis", |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'customer_name', title: '客户名称', filters: [{data: ''}], |
| | | field: 'customer_name', title: t('customer.customerName'), filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'project', |
| | | title: '项目名称', |
| | | title: t('order.project'), |
| | | showOverflow: "ellipsis", |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | |
| | | }, |
| | | |
| | | { |
| | | field: 'product_name', title: '产品名称', filters: [{data: ''}], |
| | | field: 'product_name', title: t('order.product'), filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'finishedArea', title: '完工面积', filters: [{data: ''}], |
| | | field: 'finishedArea', title: t('reportingWorks.completedArea'), filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'brokenArea', |
| | | title: '次破面积', |
| | | title: t('reportingWorks.wornArea'), |
| | | type: 'date', |
| | | attrs: {placeholder: '', type: 'date'}, |
| | | }, |
| | | {field: 'area', width: 120, title: '总面积', showOverflow: "ellipsis"}, |
| | | {field: 'finished', width: 100, title: '成品率'}, |
| | | {field: 'area', width: 120, title: t('productStock.totalArea'), showOverflow: "ellipsis"}, |
| | | {field: 'finished', width: 100, title: t('report.finished')}, |
| | | ],//表头按钮 |
| | | |
| | | toolbarConfig: { |
| | |
| | | let processes = value.value |
| | | |
| | | if(date===null){ |
| | | ElMessage.warning("请先选择日期") |
| | | ElMessage.warning(t('report.pleaseSelectADateFirst')) |
| | | return |
| | | } |
| | | |
| | | if(processes===null){ |
| | | ElMessage.warning("请先选择工序") |
| | | ElMessage.warning(t('report.pleaseSelectAProcessFirst')) |
| | | return |
| | | } |
| | | |
| | |
| | | const timeDiff = Math.abs(date2.getTime() - date1.getTime()); |
| | | const daysDiff = timeDiff / (1000 * 3600 * 24); |
| | | if(Math.floor(daysDiff)>180){ |
| | | ElMessage.warning("导出的筛选时间不能超过180天") |
| | | ElMessage.warning(t('report.theFilteringTimeForExportCannotExceed180Days')) |
| | | return |
| | | } |
| | | let dataMp = ref({ |
| | |
| | | <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="开始时间" |
| | | style="width: 100px" |
| | | type="daterange" |
| | | value-format="YYYY-MM-DD" |
| | |
| | | :value="item.basic_name" |
| | | /> |
| | | </el-select> |
| | | <el-button type="primary" @click="getWorkOrder">查询</el-button> |
| | | <el-button type="primary" @click="getWorkOrder">{{$t('basicData.search')}}</el-button> |
| | | </el-row> |
| | | |
| | | </div> |
| | |
| | | <template #toolbar_buttons> |
| | | <vxe-button style="margin-right: 0.5rem" |
| | | @click="exportExcel('/report/exportYield', |
| | | '成品率报表', |
| | | t('report.yieldReport'), |
| | | form.date1)"> |
| | | 导出</vxe-button> |
| | | {{t('basicData.export')}}</vxe-button> |
| | | </template> |
| | | |
| | | <template #num1_filter="{ column, $panel }"> |
| | |
| | | return new Error((`${row.completedQuantity}+${brokenNum}>${row.quantity}`)) |
| | | } |
| | | if(titleUploadData.value.reportingWorkId!=null && row.completedQuantity<row.minQuantity){ |
| | | return new Error(`请输入大于等于${row.minQuantity}的数字`) |
| | | return new Error(`${t('reportingWorks.pleaseGreaterThanOrEqual1')} |
| | | ${row.minQuantity} |
| | | ${t('reportingWorks.pleaseGreaterThanOrEqual2')}`) |
| | | } |
| | | |
| | | } |
| | |
| | | |
| | | let reportingWorkNum = isNaN(brokenRow.value.completedQuantity*1)?0:brokenRow.value.completedQuantity*1 |
| | | if((breakageQuantityCount>brokenRow.value.quantity*1) ){ |
| | | ElMessage.warning(`损耗数:'${breakageQuantityCount}' |
| | | 不能大于${brokenRow.value.quantity*1}`) |
| | | ElMessage.warning(`${t('reportingWorks.lossCount1')}':'${breakageQuantityCount} |
| | | ${t('reportingWorks.lossCount2')}${brokenRow.value.quantity*1}`) |
| | | return false |
| | | } |
| | | brokenRow.value.completedQuantity = brokenRow.value.quantity-breakageQuantityCount |
| | |
| | | |
| | | for(let item of uniqueByOrderNum){ |
| | | if(!checkSameNumForId(notFinishList,item.order_number)){ |
| | | ElMessage.error(`请检查订单序号: ${item.order_number} 报工数量是否相同!`) |
| | | ElMessage.error(`${t('reportingWorks.pleaseCheckTheOrderNumber1')}':' |
| | | ${item.order_number} |
| | | ${t('reportingWorks.pleaseCheckTheOrderNumber1')}`) |
| | | return false |
| | | } |
| | | } |
| | |
| | | router.push({path:'/main/reportingWorks/AddReportingWork',query:{processId:titleUploadData.value.processId,random:Math.random()}}) |
| | | }else{ |
| | | const errorObj = JSON.parse(res.msg) |
| | | const msg = "序号:"+errorObj.orderNumber+'\n' |
| | | +'小片顺序:'+errorObj.technologyNumber+'\n' |
| | | +"实际可报工数量:"+errorObj.processNum+'<'+ |
| | | "报工数量:"+errorObj.sumNum+'\n' |
| | | +"请刷新界面重新报工" |
| | | const msg = t('reportingWorks.pleaseNumber1')+":"+errorObj.orderNumber+'\n' |
| | | +t('reportingWorks.pleaseNumber2')+':'+errorObj.technologyNumber+'\n' |
| | | +t('reportingWorks.pleaseNumber3')+':'+errorObj.processNum+'<'+ |
| | | +t('reportingWorks.pleaseNumber4')+':'+errorObj.sumNum+'\n' |
| | | +t('reportingWorks.pleaseNumber5') |
| | | |
| | | ElMessage.error(msg) |
| | | } |
| | |
| | | return |
| | | } |
| | | |
| | | if (titleSelectJson.value.thisProcessType.indexOf(process) == -1 && process != "切割" && titleSelectJson.value.thisProcessType != "") { |
| | | if (titleSelectJson.value.thisProcessType.indexOf(process) === -1 && process !== t('machine.cutting') && titleSelectJson.value.thisProcessType !== "") { |
| | | ElMessage.warning(t('reportingWorks.thisProcessNotProcessCard')) |
| | | return |
| | | } |
| | |
| | | } |
| | | |
| | | if (item.quantity < item.completedQuantity) { |
| | | ElMessage.success("序号" + item.order_number + "的数量不能大于上工序数量") |
| | | ElMessage.success(t('reportingWorks.pleaseNumber6') + item.order_number + t('reportingWorks.pleaseNumber7')) |
| | | |
| | | |
| | | } else if (item.breakageQuantity * 1 + item.completedQuantity * 1 > item.quantity * 1) { |
| | | ElMessage.success("请输入序号" + item.order_number + "正确的完工或次破数量") |
| | | ElMessage.success(t('reportingWorks.pleaseNumber8') + item.order_number + t('reportingWorks.pleaseNumber9')) |
| | | } |
| | | |
| | | sum = item.completedQuantity * 1 + sum * 1 |
| | |
| | | align: 'center',//文字居中 |
| | | stripe: true,//斑马纹 |
| | | rowConfig: {isCurrent: true, isHover: true, height: 30},//鼠标移动或选择高亮 |
| | | id: 'CustomerList', |
| | | id: 'AddRework', |
| | | showFooter: true,//显示脚 |
| | | printConfig: {}, |
| | | importConfig: {}, |
| | |
| | | align: 'center',//文字居中 |
| | | stripe: true,//斑马纹 |
| | | rowConfig: {isCurrent: true, isHover: true, height: 30},//鼠标移动或选择高亮 |
| | | id: 'CustomerList', |
| | | id: 'SelectRework', |
| | | showFooter: true,//显示脚 |
| | | printConfig: {}, |
| | | importConfig: {}, |
| | |
| | | {field: 'order.batch', title: t('order.batch'), filters: [{data: ''}], slots: {filter: 'num1_filter'}, width: 110}, |
| | | {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: 'orderDetail.grossArea', title: t('order.grossArea'), width: 70}, |
| | | {field: 'orderDetail.quantity', title: t('order.quantity'),}, |
| | | {field: 'order.creator', title: t('order.creator'),}, |
| | | ],//表头按钮 |
| | | data: null,//表格数据 |
| | |
| | | ElMessage.error(t('customer.pleaseEnterTheCustomerName')) |
| | | return |
| | | } |
| | | const grade = ruleForm.value.grade |
| | | /*const grade = ruleForm.value.grade |
| | | if(grade === null || grade === undefined || grade === ''){ |
| | | ElMessage.error(t('customer.pleaseEnterCustomerLevel')) |
| | | return |
| | |
| | | if(moneyLimit === null || moneyLimit === undefined || moneyLimit === ''){ |
| | | ElMessage.error(t('customer.pleaseEnterTheAmountOfFunds')) |
| | | return |
| | | } |
| | | }*/ |
| | | const address = ruleForm.value.address |
| | | if(address === null || address === undefined || address === ''){ |
| | | ElMessage.error(t('customer.pleaseEnterTheContactAddress')) |
| | |
| | | align: 'center',//文字居中 |
| | | stripe:true,//斑马纹 |
| | | rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮 |
| | | id: 'CustomerList', |
| | | id: 'SelectCustomer', |
| | | showFooter: true,//显示脚 |
| | | printConfig: {}, |
| | | importConfig: {}, |
| | |
| | | align: 'center',//文字居中 |
| | | stripe:true,//斑马纹 |
| | | rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮 |
| | | id: 'OrderList', |
| | | id: 'SelectCustomerOrder', |
| | | showFooter: true,//显示脚 |
| | | printConfig: {}, |
| | | importConfig: {}, |
| | |
| | | |
| | | const hasDecimalhtml=(item,row)=>{ |
| | | let aa=item.split('.').length |
| | | console.log(item) |
| | | if (aa===2){ |
| | | |
| | | return row[item.split('.')[0]][item.split('.')[1]] |
| | | }else if(aa===3){ |
| | | return row[item.split('.')[0]][item.split('.')[1]][item.split('.')[2]] |
| | |
| | | align: 'center',//文字居中 |
| | | stripe:true,//斑马纹 |
| | | rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮 |
| | | id: 'OrderList', |
| | | id: 'CreateDelivery', |
| | | showFooter: true,//显示脚 |
| | | printConfig: {}, |
| | | importConfig: {}, |
| | |
| | | },//表头参数 |
| | | columns:[ |
| | | |
| | | {type:'expand',fixed:"left",slots: { content:'content' },width: 60}, |
| | | //{type:'expand',fixed:"left",slots: { content:'content' },width: 60}, |
| | | {field: 'select',type:'checkbox',title: t('basicData.check'), width: 80,fixed:"left"}, |
| | | {type: 'seq', title: t('basicData.Number'), width: 80 ,fixed:"left"}, |
| | | {field: 'orderId',width:120, title: t('order.orderId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged}, |
| | |
| | | return |
| | | } |
| | | form.value.deliveryId = props.deliveryId*/ |
| | | |
| | | /*form.value.orderId='NG24060501' |
| | | request.post(`/Delivery/getSelectOrderPrinting`,form.value).then((res) => { |
| | | if(res.code==200){ |
| | | produceList.value = deepClone(res.data.data) |
| | | delivery.value=deepClone(res.data.delivery) |
| | | money.value=deepClone(res.data.money) |
| | | console.log(res.data.data) |
| | | |
| | | }else{ |
| | | ElMessage.warning(res.msg) |
| | | router.push("/login") |
| | | } |
| | | })*/ |
| | | |
| | | |
| | | if(route.query.deliveryID===null || route.query.deliveryID===undefined || route.query.deliveryID===''){ |
| | | return |
| | | } |
| | |
| | | router.push("/login") |
| | | } |
| | | }) |
| | | |
| | | |
| | | |
| | | }) |
| | | |
| | |
| | | |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- <div> |
| | | <el-button @click="Printing" style="margin-top: -5px" id="searchButton" type="primary" >打印</el-button> |
| | | |
| | | <div id="pis" style="width: 100%;height: 100%"> |
| | | <div style="font-size: 30px;text-align: center;font-weight: bold;">常州市吉利玻璃有限公司</div> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="7"><div></div></el-col> |
| | | <el-col :span="10"><div style="font-size: 25px;text-align: center;font-weight: bold;">销售发货单</div></el-col> |
| | | <el-col :span="7"> |
| | | <div style="display: flex;margin-top: 10px;"> |
| | | <div style="font-weight: bold;font-size: 15px">发货单号:</div> |
| | | <div style="font-weight: bold;font-size: 15px">{{delivery.deliveryId}}</div> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <div style="border: 1px solid #d3dce6;border-collapse: collapse;width: 100%;height: 100%;"> |
| | | <table id="table1" style="border: 1px solid #d3dce6;border-collapse: collapse;width: 100%;height: 100%;"> |
| | | <tr> |
| | | <th style="text-align: left;border:none;" colspan="3">客户名称:<span>{{delivery.customerName}}</span></th> |
| | | <th style="text-align: left;border:none;" colspan="3">项目名称:<span>{{delivery.project}}</span></th> |
| | | <th style="text-align: left;border:none;" colspan="2">联系人:<span>{{delivery.contacts}}</span></th> |
| | | |
| | | </tr> |
| | | <tr> |
| | | <th style="text-align: left;border:none;" colspan="6">送货地址:<span>{{delivery.deliveryAddress}}</span></th> |
| | | <th style="text-align: left;border:none;" colspan="2">联系电话:<span>{{delivery.contactNumber}}</span></th> |
| | | |
| | | </tr> |
| | | <tr> |
| | | <th style="width: 6%;">序号</th> |
| | | <th style="width: 20%;">楼层编号</th> |
| | | <th style="width: 20%;">宽(弧度)*高</th> |
| | | <th style="width: 10%;">数量</th> |
| | | <th style="width: 10%;">面积</th> |
| | | <th style="width: 10%;">单价</th> |
| | | <th style="width: 12%;">金额</th> |
| | | <th style="width: 12%;">加工要求</th> |
| | | </tr> |
| | | |
| | | <template v-for="(item, index) in produceList" :key="index" > |
| | | <tr> |
| | | <td style="font-size: 15px;font-weight: bold;" colspan="3">产品名称:<span>{{item.DeliveryDetail.productName}}</span></td> |
| | | <td style="font-size: 15px;font-weight: bold;" colspan="3">对方单号:</td> |
| | | <td style="font-size: 15px;font-weight: bold;" colspan="2">订单编号:<span>{{item.DeliveryDetail.orderId}}</span></td> |
| | | </tr> |
| | | |
| | | <tr class="day-in" v-for="(items, index1) in item.DeliveryDetailList" :key="index1"> |
| | | <td>{{items.order_number}}</td> |
| | | <td>{{items.buildingNumber}}</td> |
| | | <td style="font-size: 15px;font-weight: bold;">{{items.width}}x{{items.height}}</td> |
| | | <td>{{items.quantity}}</td> |
| | | <td>{{items.area}}</td> |
| | | <td>{{items.price}}</td> |
| | | <td>{{items.money}}</td> |
| | | <td>{{items.processingNote}}</td> |
| | | </tr> |
| | | <tr class="day-in" > |
| | | <td style="font-size: 15px;font-weight: bold;" colspan="3">小计:</td> |
| | | <td>{{item.DeliveryDetail.quantity}}</td> |
| | | <td>{{item.DeliveryDetail.area}}</td> |
| | | <td></td> |
| | | <td>{{item.DeliveryDetail.money}}</td> |
| | | <td></td> |
| | | </tr> |
| | | |
| | | </template> |
| | | <tr class="day-in"> |
| | | <td style="font-size: 15px;font-weight: bold;" colspan="3">合计:</td> |
| | | <td>{{delivery.quantity}}</td> |
| | | <td>{{delivery.area}}</td> |
| | | <td></td> |
| | | <td>{{delivery.money}}</td> |
| | | <td></td> |
| | | </tr> |
| | | <tr class="day-in"> |
| | | <td style="text-align: left;border-width: 0 1px 0 0; border-style: solid; border-color: #d3dce6" colspan="3"> |
| | | <div style="display: flex;font-size: 10px;"> |
| | | <div>加工费用</div> |
| | | <div style="margin-left: 20%">单价</div> |
| | | <div style="margin-left: 20%">数量</div> |
| | | <div style="margin-left: 20%">金额</div> |
| | | </div> |
| | | |
| | | </td> |
| | | <td style="text-align: left;border:none;font-size: 15px;font-weight: bold;" colspan="5">总金额: {{delivery.money}}</td> |
| | | </tr> |
| | | <tr class="day-in"> |
| | | <td style="text-align: left;border-width: 0 1px 0 0; border-style: solid; border-color: #d3dce6;" colspan="3"></td> |
| | | <td style="text-align: left;border:none;font-size: 15px;font-weight: bold;" colspan="5">大写金额: {{money}}</td> |
| | | </tr> |
| | | </table> |
| | | </div> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="3"><div class="bottom">制单员:<span style="font-size: 10px">{{delivery.creator}}</span></div></el-col> |
| | | <el-col :span="5"><div class="bottom">制单日期:<span style="font-size: 10px">{{delivery.createTime}}</span></div></el-col> |
| | | <el-col :span="4"><div class="bottom">发货员:</div></el-col> |
| | | <el-col :span="4"><div class="bottom">司机:</div></el-col> |
| | | <el-col :span="4"><div class="bottom">客户签字:</div></el-col> |
| | | <el-col :span="4"><div class="bottom">签收日期:</div></el-col> |
| | | |
| | | </el-row> |
| | | <el-row :gutter="20" style="margin-top: 20px;"> |
| | | <el-col :span="3"><div class="bottom">架子 只</div></el-col> |
| | | <el-col :span="21"><div class="bottom">{{takeCare}}</div></el-col> |
| | | </el-row> |
| | | <el-row :gutter="20" style="margin-top: 20px;"> |
| | | <el-col :span="24"><div class="bottom">{{remark}}</div></el-col> |
| | | </el-row> |
| | | |
| | | |
| | | |
| | | </div> |
| | | </div>--> |
| | | </template> |
| | | |
| | | <style> |
| | |
| | | align: 'center',//文字居中 |
| | | stripe:true,//斑马纹 |
| | | rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮 |
| | | id: 'OrderList', |
| | | id: 'SelectDelivery', |
| | | showFooter: true,//显示脚 |
| | | printConfig: {}, |
| | | importConfig: {}, |
| | |
| | | <el-date-picker |
| | | v-model="selectDate" |
| | | type="daterange" |
| | | :start-placeholder="t('basicData.startDate')" |
| | | :end-placeholder="t('basicData.endDate')" |
| | | :start-placeholder="$t('basicData.startDate')" |
| | | :end-placeholder="$t('basicData.endDate')" |
| | | format="YYYY-MM-DD" |
| | | value-format="YYYY-MM-DD" |
| | | |
| | |
| | | align: 'center',//文字居中 |
| | | stripe:true,//斑马纹 |
| | | rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮 |
| | | id: 'OrderList', |
| | | id: 'SelectOrderList', |
| | | showFooter: true,//显示脚 |
| | | printConfig: {}, |
| | | importConfig: {}, |
| | |
| | | item=>item.computeArea*1 < errorArea.value*1 |
| | | ) |
| | | if(errorAreaList.length){ |
| | | ElMessageBox.confirm( |
| | | /*t('order.msg.calculationAreaPrompt1')+ |
| | | ${errorAreaList.length}+ |
| | | t('order.msg.calculationAreaPrompt2')+ |
| | | ${errorArea.value}+ |
| | | t('order.msg.calculationAreaPrompt3')+ |
| | | ${errorArea.value}+*/ |
| | | t('order.msg.calculationAreaPrompt4'), |
| | | 'Warning', |
| | | { |
| | | confirmButtonText: t('basicData.confirmButtonText'), |
| | | cancelButtonText: t('basicData.cancelButtonText'), |
| | | type: 'warning', |
| | | } |
| | | ElMessageBox.confirm(`${t('order.msg.calculationAreaPrompt1')} |
| | | ${errorAreaList.length} |
| | | ${t('order.msg.calculationAreaPrompt2')} |
| | | ${errorArea.value} |
| | | ${t('order.msg.calculationAreaPrompt3')} |
| | | ${errorArea.value} |
| | | ${t('order.msg.calculationAreaPrompt4')}`, |
| | | t('order.msg.warning'), |
| | | { |
| | | confirmButtonText: t('basicData.confirmButtonText'), |
| | | cancelButtonText: t('basicData.cancelButtonText'), |
| | | type: 'warning', |
| | | } |
| | | ).then(()=>{ |
| | | errorAreaComputed() |
| | | saveOrder(order) |
| | |
| | | return Result.seccess(flowCardService.getSelectPrintLabelSv(object)); |
| | | } |
| | | |
| | | @ApiOperation("打印自定义标签数据查询接口") |
| | | @PostMapping("/getSelectPrintCustomLabel/{type}") |
| | | public Result getSelectPrintCustomLabel( @PathVariable String type, |
| | | @RequestBody Map<String, Object> object) { |
| | | return Result.seccess(flowCardService.getSelectPrintCustomLabelSv(type,object)); |
| | | |
| | | } |
| | | |
| | | @ApiOperation("复选框修改排版状态") |
| | | @SaCheckPermission("SelectProcessCard.review") |
| | | @PostMapping("/updateComposing") |
| | |
| | | } |
| | | } |
| | | |
| | | @ApiOperation("自定义标签打印明细接口") |
| | | @PostMapping("/getCustomLabelDetail/{name}/{form}/{id}") |
| | | public Result getCustomLabelDetail( |
| | | @PathVariable String name, |
| | | @PathVariable String form, |
| | | @PathVariable String id, |
| | | @RequestBody FlowCard flowCard) { |
| | | return Result.seccess(flowCardService.getCustomLabelDetailSv(name,form,id, flowCard)); |
| | | |
| | | } |
| | | } |
| | |
| | | return Result.seccess(deliveryService.getSelectDeliveryPrinting(deliveryDetail)); |
| | | } |
| | | |
| | | @ApiOperation("订单发货订单查询接口") |
| | | @SaCheckPermission("selectDelivery.search") |
| | | @PostMapping("/getSelectOrderPrinting") |
| | | public Result getSelectOrderPrinting( @RequestBody OrderDetail orderDetail){ |
| | | return Result.seccess(deliveryService.getSelectOrderPrinting(orderDetail)); |
| | | } |
| | | |
| | | @ApiOperation("发货明细报表") |
| | | @PostMapping("/exportDeliveryDetailReport") |
| | | public void exportDeliveryDetailReport(HttpServletResponse response, @RequestBody List<LocalDate> dates) throws IOException, IllegalAccessException, InstantiationException { |
| | |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.example.erp.entity.pp.FlowCard; |
| | | import com.example.erp.entity.sd.Order; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.sql.Date; |
| | |
| | | |
| | | Boolean printSortMp(String processId, Integer orderNumber, Integer technologyNumber, Integer sort); |
| | | |
| | | List<Map<String,String>> selectType(); |
| | | |
| | | List<Map<String, Object>> getPrintTitle(String type); |
| | | |
| | | List<Map<String, Object>> getCustomLabelDetailMp(String name, String form, String id, FlowCard flowCard); |
| | | |
| | | List<Order> getPrintCustomData(String orderId, Integer orderNumber); |
| | | } |
| | |
| | | |
| | | List<DeliveryDetail> getSelectDeliveryPrinting(@Param("deliveryDetail") DeliveryDetail deliveryDetail); |
| | | |
| | | List<OrderDetail> getSelectOrderPrinting(@Param("orderDetail") OrderDetail orderDetail); |
| | | |
| | | List <Map<String, Object>> getSelectDeliveryDetailPrinting(@Param("deliveryId") String deliveryId, |
| | | @Param("productId") Integer productId,@Param("orderId") String orderId); |
| | | |
| | | List <Map<String, Object>> getSelectOrderDetailPrinting(@Param("productId") Integer productId,@Param("orderId") String orderId); |
| | | |
| | | |
| | | List<DeliveryDetail> getSelectDeliveryDetailReport(@Param("offset") Integer offset, |
| | | @Param("pageSize") Integer pageSize,String startDate, String endDate, |
| | | @Param("deliveryDetail") DeliveryDetail deliveryDetail); |
| | |
| | | |
| | | Delivery getSelectShippingOrderDetailDeliveryPrinting(@Param("deliveryDetail") DeliveryDetail deliveryDetail); |
| | | |
| | | Order getSelectShippingOrderDetailPrinting(@Param("orderDetail") OrderDetail orderDetail); |
| | | |
| | | Order getSelectShippingOrderDetailDeliverys(@Param("offset") Integer offset, |
| | | @Param("pageSize") Integer pageSize, |
| | | @Param("orderDetail") OrderDetail orderDetail); |
| | |
| | | import com.example.erp.mapper.pp.FlowCardMapper; |
| | | import com.example.erp.mapper.sd.OrderGlassDetailMapper; |
| | | import com.example.erp.mapper.sd.OrderProcessDetailMapper; |
| | | import com.fasterxml.jackson.databind.JsonNode; |
| | | import com.fasterxml.jackson.databind.ObjectMapper; |
| | | import jdk.nashorn.internal.parser.JSONParser; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | |
| | | |
| | | import java.io.StringReader; |
| | | import java.sql.Date; |
| | | import java.util.*; |
| | | |
| | |
| | | public Object selectPrintSv(String orderId, FlowCard flowCard) { |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("data", flowCardMapper.selectPrintMp(orderId, flowCard)); |
| | | map.put("type", flowCardMapper.selectType()); |
| | | return map; |
| | | } |
| | | |
| | |
| | | Integer count=flowCard.getQuantity(); |
| | | for (int i = 0; i < count; i++) { |
| | | map.put("data", flowCardMapper.getPrintLabel(flowCard.getProcessId(), flowCard.getTechnologyNumber())); |
| | | //System.out.println(flowCardMapper.getPrintLabel(flowCard.getProcessId(), flowCard.getTechnologyNumber())); |
| | | System.out.println(flowCardMapper.getPrintLabel(flowCard.getProcessId(), flowCard.getTechnologyNumber())); |
| | | } |
| | | } |
| | | } |
| | | |
| | | return map; |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | |
| | | public Map<String, Object> getSelectPrintCustomLabelSv(String type, Map<String, Object> object) { |
| | | Map<String, Object> map = new HashMap<>(); |
| | | List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();//最终结果 |
| | | List<FlowCard> flowCardList = JSONArray.parseArray(JSONObject.toJSONString(object.get("printList")), FlowCard.class); |
| | | if (!flowCardList.isEmpty()) { |
| | | for (FlowCard flowCard : flowCardList) { |
| | | map.put("data", flowCardMapper.getPrintCustomData(flowCard.getOrderId(),flowCard.getOrderNumber())); |
| | | map.put("quantity", flowCard.getQuantity()); |
| | | } |
| | | } |
| | | |
| | | map.put("title", flowCardMapper.getPrintTitle(type)); |
| | | return map; |
| | | } |
| | | |
| | | public Object getCustomLabelDetailSv(String name, String form, String id, FlowCard flowCard) { |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("data", flowCardMapper.getCustomLabelDetailMp(name, form,id, flowCard)); |
| | | return map; |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | } |
| | | |
| | | public Map<String, Object> getSelectOrderPrinting(OrderDetail orderDetail) { |
| | | Map<String, Object> map = new HashMap<>(); |
| | | List <Map<String, Object>> list=new ArrayList<Map<String, Object>>();//最终结果 |
| | | List<OrderDetail> orderDetailList=deliveryDetailMapper.getSelectOrderPrinting(orderDetail); |
| | | for (OrderDetail detail : orderDetailList) { |
| | | |
| | | Map<String, Object> itemmap = new HashMap<>(); |
| | | List<Map<String, Object>> deliveryDetailList2 = deliveryDetailMapper.getSelectOrderDetailPrinting( |
| | | detail.getProductId(), detail.getOrderId()); |
| | | itemmap.put("DeliveryDetail", detail); |
| | | itemmap.put("DeliveryDetailList", deliveryDetailList2); |
| | | list.add(itemmap); |
| | | |
| | | |
| | | } |
| | | Order order=deliveryMapper.getSelectShippingOrderDetailPrinting(orderDetail); |
| | | map.put("data", list); |
| | | map.put("delivery", deliveryMapper.getSelectShippingOrderDetailPrinting(orderDetail)); |
| | | map.put("money", toChinese(order.getMoney().toString(), false)); |
| | | return map; |
| | | |
| | | } |
| | | |
| | | public List<DeliveryDetailDTO> exportDeliveryDetailReport(List<LocalDate> dates) { |
| | | return deliveryDetailMapper.exportDeliveryDetailReport(dates); |
| | | } |
| | |
| | | <result column="g_type" property="glassTypes.type"/>--> |
| | | |
| | | </resultMap> |
| | | |
| | | |
| | | <!-- 流程卡管理查询--> |
| | | <select id="selectFlowCard" resultMap="flowCardMap"> |
| | | select |
| | |
| | | fc.process_id, |
| | | o.customer_name, |
| | | o.project, |
| | | fc.order_number, |
| | | ogd.technology_number, |
| | | ogd.glass_address, |
| | | sum(od.quantity) as quantity, |
| | |
| | | o.processing_note, |
| | | fc.process_id, |
| | | SUM( od.quantity) as quantity, |
| | | SUM(ogd.total_area) as gross_area, |
| | | round(SUM(ogd.total_area),2) as gross_area, |
| | | SUM(od.weight) as weight, |
| | | #{technologyNumber} as technologyNumber, |
| | | concat(fc.process_id,'/',#{technologyNumber}) as processIdNumber |
| | |
| | | |
| | | <select id="getDetailList"> |
| | | select fc.order_number, |
| | | concat(ogd.child_width, "*", ogd.child_height) as child_width, |
| | | concat(round(ogd.child_width), "*", round(ogd.child_height)) as child_width, |
| | | od.quantity, |
| | | round(ogd.total_area,2) as total_area, |
| | | od.perimeter, |
| | |
| | | and technology_number = #{technologyNumber} |
| | | </update> |
| | | |
| | | <select id="selectType"> |
| | | select * from pp.tag_style |
| | | </select> |
| | | <select id="getPrintTitle"> |
| | | select value from pp.tag_style as a where a.name=#{type} |
| | | </select> |
| | | |
| | | <select id="getCustomLabelDetailMp"> |
| | | select #{name} from #{form} where order_id=#{id} |
| | | </select> |
| | | |
| | | <resultMap id="orderDetial" type="com.example.erp.entity.sd.OrderDetail"> |
| | | <result column="width" property="width"/> |
| | | <result column="height" property="height"/> |
| | | <result column="order_id" property="order.orderId"/> |
| | | <result column="project" property="order.project"/> |
| | | <result column="customer_id" property="order.customerId"/> |
| | | <result column="customer_name" property="order.customerName"/> |
| | | <result column="order_type" property="order.orderType"/> |
| | | <result column="order_classify" property="order.orderClassify"/> |
| | | <result column="batch" property="order.batch"/> |
| | | <result column="icon" property="order.icon"/> |
| | | <result column="pack_type" property="order.packType"/> |
| | | <result column="delivery_date" property="order.deliveryDate"/> |
| | | <result column="al_type" property="order.alType"/> |
| | | <result column="money" property="order.money"/> |
| | | <result column="contract_id" property="order.contractId"/> |
| | | <result column="customer_batch" property="order.customerBatch"/> |
| | | <result column="contacts" property="order.contacts"/> |
| | | <result column="delivery_address" property="order.deliveryAddress"/> |
| | | <result column="processing_note" property="processingNote"/> |
| | | <result column="quantity" property="quantity"/> |
| | | </resultMap> |
| | | |
| | | <select id="getPrintCustomData" resultMap="orderDetial"> |
| | | select o.order_id, |
| | | project, |
| | | customer_id, |
| | | customer_name, |
| | | order_type, |
| | | order_classify, |
| | | batch, |
| | | icon, |
| | | pack_type, |
| | | delivery_date, |
| | | al_type, |
| | | money, |
| | | contract_id, |
| | | customer_batch, |
| | | contacts, |
| | | delivery_address, |
| | | od.processing_note, |
| | | width, |
| | | height, |
| | | od.quantity |
| | | |
| | | from sd.order as o |
| | | left join sd.order_detail as od on o.order_id = od.order_id |
| | | where o.order_id = #{orderId} |
| | | and od.order_number = #{orderNumber} |
| | | |
| | | |
| | | </select> |
| | | |
| | | </mapper> |
| | |
| | | group by od.order_id,od.product_name,od.product_id |
| | | </select> |
| | | |
| | | <select id="getSelectOrderPrinting" > |
| | | select od.order_id,od.product_id,od.product_name,sum(od.area) as area,sum(od.gross_amount) as money,sum(od.quantity) as quantity from |
| | | order_detail od |
| | | <where> |
| | | <if test="orderDetail.orderId != null and orderDetail.orderId != ''"> |
| | | and od.order_id like concat('%',#{orderDetail.orderId},'%') |
| | | </if> |
| | | </where> |
| | | group by od.product_name,od.product_id |
| | | </select> |
| | | |
| | | <select id="getSelectDeliveryDetailPrinting" > |
| | | select od.order_id, |
| | | od.order_number, |
| | |
| | | and od.product_id = #{productId} |
| | | </select> |
| | | |
| | | <select id="getSelectOrderDetailPrinting" > |
| | | select od.order_id, |
| | | od.order_number, |
| | | od.product_name, |
| | | od.width, |
| | | od.height, |
| | | od.quantity, |
| | | od.gross_amount, |
| | | od.area, |
| | | ifnull(od.processing_note,"") as processingNote, |
| | | ifnull(od.remarks,"") as buildingNumber, |
| | | od.price |
| | | from order_detail od |
| | | where od.order_id = #{orderId} |
| | | and od.product_id = #{productId} |
| | | </select> |
| | | |
| | | |
| | | <select id="exportDeliveryDetailReport"> |
| | | select dd.id, |
| | |
| | | </where> |
| | | </select> |
| | | |
| | | <select id="getSelectShippingOrderDetailPrinting" > |
| | | select |
| | | d.order_id,d.quantity,d.money,d.area,d.project, |
| | | d.customer_id,d.customer_name,d.creator,d.salesman,d.salesman_id |
| | | from sd.`order` d |
| | | <where> |
| | | <if test="orderDetail.orderId != null and orderDetail.orderId != ''"> |
| | | and d.order_id like concat('%',#{orderDetail.orderId},'%') |
| | | </if> |
| | | |
| | | </where> |
| | | </select> |
| | | |
| | | |
| | | <select id="getSelectShippingOrderDetailDeliverys" > |
| | | select customer_id,customer_name,project,salesman,salesman_id,contacts,contact_number,delivery_address from sd.`order` |