Merge branch 'master' of http://10.153.19.25:10101/r/ERP_override
New file |
| | |
| | | import Sortable from 'sortablejs' |
| | | import {VXETable} from "vxe-table"; |
| | | |
| | | /*表格拖拽*/ |
| | | let sortable2 = null |
| | | function columnDrop2(xGrid){ |
| | | const $grid = xGrid |
| | | sortable2 = Sortable.create($grid.$el.querySelector('.body--wrapper>.vxe-table--header .vxe-header--row'), { |
| | | handle: '.vxe-header--column', |
| | | onEnd: (sortableEvent) => { |
| | | const targetThElem = sortableEvent.item |
| | | const newIndex = sortableEvent.newIndex |
| | | const oldIndex = sortableEvent.oldIndex |
| | | const { fullColumn, tableColumn } = $grid.getTableColumn() |
| | | const wrapperElem = targetThElem.parentNode |
| | | const newColumn = fullColumn[newIndex] |
| | | if (newColumn.fixed) { |
| | | // 错误的移动 |
| | | const oldThElem = wrapperElem.children[oldIndex] |
| | | if (newIndex > oldIndex) { |
| | | wrapperElem.insertBefore(targetThElem, oldThElem) |
| | | } else { |
| | | wrapperElem.insertBefore(targetThElem, oldThElem ? oldThElem.nextElementSibling : oldThElem) |
| | | } |
| | | VXETable.modal.message({ content: '固定列不允许拖动!', status: 'error' }) |
| | | return |
| | | } |
| | | // 获取列索引 columnIndex > fullColumn |
| | | const oldColumnIndex = $grid.getColumnIndex(tableColumn[oldIndex]) |
| | | const newColumnIndex = $grid.getColumnIndex(tableColumn[newIndex]) |
| | | // 移动到目标列 |
| | | const currRow = fullColumn.splice(oldColumnIndex, 1)[0] |
| | | fullColumn.splice(newColumnIndex, 0, currRow) |
| | | $grid.loadColumn(fullColumn) |
| | | } |
| | | }) |
| | | } |
| | | export { |
| | | columnDrop2, |
| | | sortable2 |
| | | } |
| | |
| | | request.post(`/maintenance/openSelectId/${row.id}`).then((res) => { |
| | | if (res.code == 200) { |
| | | |
| | | getMaintenanceRepair.value = res.data.data[0] |
| | | getBasicData.value = res.data.data[0] |
| | | dialogTableVisible.value=true |
| | | } else { |
| | | |
| | |
| | | return count.toFixed(2) |
| | | } |
| | | |
| | | //定义接收加载表头下拉数据 |
| | | const titleSelectJson = ref({ |
| | | processType: [], |
| | | |
| | | }) |
| | | |
| | | //定义接收加载弹窗的值 |
| | | const getBasicData = ref({ |
| | | deviceName: '', |
| | | type: '', |
| | | faultTime: '', |
| | | faultReason: '', |
| | | maintenanceTime: '', |
| | | maintenanceIllustrate: '', |
| | | startTime: '', |
| | | stopTime: '', |
| | | process: '', |
| | | personnel: '', |
| | | cost: '', |
| | | }) |
| | | |
| | | //获取3天前到当前时间 |
| | | function getNowTime() { |
| | | const start = new Date(new Date().getTime() - 3600 * 1000 * 24 * 3) |
| | |
| | | date1: '', |
| | | }) |
| | | |
| | | const getMaintenanceRepair = ref({ |
| | | id: '', |
| | | device_id: '', |
| | | type: '', |
| | | device_name: '', |
| | | fault_time: '', |
| | | fault_reason: '', |
| | | maintenance_time: '', |
| | | maintenance_illustrate: '', |
| | | start_time: '', |
| | | stop_time: '', |
| | | process: '', |
| | | personnel: '', |
| | | cost: '', |
| | | }) |
| | | |
| | | //第一次加载获取近3天时间和默认状态 |
| | | form.date1 = getNowTime() |
| | |
| | | if (res.code == 200) { |
| | | |
| | | xGrid.value.loadData(res.data.data) |
| | | titleSelectJson.value.processType = res.data.process; |
| | | gridOptions.loading = false |
| | | } else { |
| | | ElMessage.warning(res.msg) |
| | |
| | | const dialogTableVisible = ref(false) |
| | | const formLabelWidth = '140px' |
| | | |
| | | const updateBasic = () => { |
| | | |
| | | // request.post(`/basicDataProduce/updateBasic/${id}/${process}/${name}/${type}`).then((res) => { |
| | | // if (res.code == 200) { |
| | | // ElMessage.success(t('processCard.modifySuccessfully')) |
| | | // router.push({path: '/main/productionBasicData/SelectProductionBasicData', query: {random:Math.random()}}) |
| | | // } else { |
| | | // |
| | | // ElMessage.warning(res.msg) |
| | | // } |
| | | // }) |
| | | } |
| | | |
| | | </script> |
| | | |
| | |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item :label-width="formLabelWidth" label="设备名称"> |
| | | <el-input v-model="form.name" autocomplete="off" style="width: 220px"/> |
| | | <el-input v-model="getBasicData.deviceName" autocomplete="off" style="width: 220px"/> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | |
| | | <el-col :span="12"> |
| | | <el-form-item :label-width="formLabelWidth" label="故障日期"> |
| | | <el-date-picker |
| | | v-model="value1" |
| | | v-model="getBasicData.faultTime" |
| | | :size="size" |
| | | placeholder="2023-01-01" |
| | | type="date" |
| | |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item :label-width="formLabelWidth" label="故障原因"> |
| | | <el-input v-model="form.name" autocomplete="off" style="width: 220px"/> |
| | | <el-input v-model="getBasicData.faultReason" autocomplete="off" style="width: 220px"/> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | |
| | | <el-col :span="12"> |
| | | <el-form-item :label-width="formLabelWidth" label="保养日期"> |
| | | <el-date-picker |
| | | v-model="value1" |
| | | v-model="getBasicData.maintenanceTime" |
| | | :size="size" |
| | | placeholder="2023-02-01" |
| | | type="date" |
| | |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item :label-width="formLabelWidth" label="保养说明"> |
| | | <el-input v-model="form.name" autocomplete="off" style="width: 220px"/> |
| | | <el-input v-model="getBasicData.maintenanceIllustrate" autocomplete="off" style="width: 220px"/> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | |
| | | <el-col :span="12"> |
| | | <el-form-item :label-width="formLabelWidth" label="保养/维修开始时间"> |
| | | <el-date-picker |
| | | v-model="value1" |
| | | v-model="getBasicData.startTime" |
| | | :size="size" |
| | | placeholder="2023-02-01" |
| | | type="date" |
| | |
| | | <el-col :span="12"> |
| | | <el-form-item :label-width="formLabelWidth" label="保养/维修完成时间"> |
| | | <el-date-picker |
| | | v-model="value1" |
| | | v-model="getBasicData.stopTime" |
| | | :size="size" |
| | | placeholder="2023-02-01" |
| | | type="date" |
| | |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item :label-width="formLabelWidth" label="所在工艺"> |
| | | <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-select v-model="getBasicData.process" clearable placeholder="" style="width: 220px" |
| | | > |
| | | <el-option |
| | | v-for="item in titleSelectJson['processType']" |
| | | :key="item.id" |
| | | :label="item.basic_name" |
| | | :value="item.basic_name" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item :label-width="formLabelWidth" label="保养/维修人员"> |
| | | <el-input v-model="form.name" autocomplete="off" style="width: 220px"/> |
| | | <el-input v-model="getBasicData.personnel" autocomplete="off" style="width: 220px"/> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-form-item :label-width="formLabelWidth" label="费用"> |
| | | <el-input v-model="form.name" autocomplete="off" style="width: 220px"/> |
| | | <el-input v-model="getBasicData.cost" autocomplete="off" style="width: 220px"/> |
| | | </el-form-item> |
| | | </el-form> |
| | | <template #footer> |
| | |
| | | if ($grid) { |
| | | switch (code) { |
| | | case 'print': { |
| | | console.log( selectRecords) |
| | | if(selectRecords===null ||selectRecords===''||selectRecords.length===0){ |
| | | ElMessage.warning(t('searchOrder.msgList.checkOrder')) |
| | | return |
| | |
| | | if (res.code == 200) { |
| | | |
| | | produceList.value = deepClone(res.data.data) |
| | | |
| | | handleGetQRCode() |
| | | } else { |
| | | ElMessage.warning(res.msg) |
| | |
| | | 数量: |
| | | <label>{{ itemsum.quantity }}</label> |
| | | 面积: |
| | | <label>{{ itemsum.gross_area }}</label> |
| | | <label>{{ parseFloat(itemsum.gross_area,2) }}</label> |
| | | 重量: |
| | | <label>{{ itemsum.weight }}</label> |
| | | </td> |
| | |
| | | } |
| | | case 'delete': { |
| | | request.post(`/processCard/deleteFlowCard/${row.orderId}/${row.processId}`).then((res) => { |
| | | if (res.code == 200) { |
| | | if (res.code == 200 && res.data===true) { |
| | | ElMessage.success(t('workOrder.deleteOk')) |
| | | router.push({path: '/main/processCard/SelectProcessCard', query: {random:Math.random()}}) |
| | | } else { |
| | | |
| | | ElMessage.warning(res.msg) |
| | | ElMessage.warning('删除失败,检查流程卡是否已报工') |
| | | |
| | | } |
| | | }) |
| | | |
| | | break |
| | | } |
| | | } |
| | |
| | | return false; |
| | | }); |
| | | const notFinishList = xGrid.value.getTableData().fullData.filter(item =>{ |
| | | return item.saveFlag === false |
| | | return item.saveFlag === 0 |
| | | }) |
| | | |
| | | for(let item of uniqueByOrderNum){ |
| | | if(!checkSameNumForId(notFinishList,item.order_number)){ |
| | | ElMessage.error(`请检查订单序号: ${item.order_number} 报工数量是否相同!`) |
| | |
| | | const getWork = () => { |
| | | |
| | | let processId = titleUploadData.value.processId |
| | | if (processId == "" || processId == null) { |
| | | ElMessage.warning("流程卡号不能为空") |
| | | return |
| | | } |
| | | let parts = processId.split('/'); |
| | | |
| | | if (processId.indexOf("/") < 0 ||parts[1].trim() == '') { |
| | |
| | | } |
| | | case 'delete':{ |
| | | request.post(`/reportingWork/deleteWork/${row.reportingWorkId}/${row.processId}/${row.thisProcess}`).then((res) => { |
| | | if (res.code == 200) { |
| | | if (res.code == 200 && res.data===true) { |
| | | ElMessage.success(t('workOrder.deleteOk')) |
| | | router.push({path: '/main/reportingWorks/SelectReportingWorks', query: {random:Math.random()}}) |
| | | } else { |
| | | |
| | | ElMessage.warning(res.msg) |
| | | ElMessage.warning('删除失败,检查下工序是否已报工') |
| | | |
| | | } |
| | | }) |
| | |
| | | let endTime = form.date1[1] |
| | | let state = optionVal.value |
| | | request.post(`/workOrder/deleteOrderWork/${row.orderId}/${row.productionId}`).then((res) => { |
| | | if (res.code == 200) { |
| | | ElMessage.success(t('workOrder.deleteOk')) |
| | | //location.reload(); |
| | | router.push({path: '/main/workOrder/SelectWorkOrder', query: {startTime:startTime,endTime:endTime,state:state,random:Math.random()}}) |
| | | } else { |
| | | ElMessage.warning(res.msg) |
| | | } |
| | | if (res.code == 200 && res.data===true) { |
| | | ElMessage.success(t('workOrder.deleteOk')) |
| | | router.push({path: '/main/workOrder/SelectWorkOrder', query: {startTime:startTime,endTime:endTime,state:state,random:Math.random()}}) |
| | | } else { |
| | | |
| | | ElMessage.warning('删除失败,检查是否已分架') |
| | | |
| | | } |
| | | }) |
| | | break |
| | | } |
| | |
| | | const xGrid = ref() |
| | | let cellArea = ref() |
| | | const shapeList = ref([ |
| | | {name:'普形',value:1}, {name:'异形',value: 2} |
| | | {name:'普形',value:1}, {name:'异形',value:2} |
| | | ]) |
| | | |
| | | // 定义表头上传数据 |
| | |
| | | |
| | | //初始化判断是否有id传入 |
| | | onMounted(()=>{ |
| | | |
| | | //启用表格拖动选中 |
| | | addListener(xGrid.value,gridOptions) |
| | | const str = route.query.orderId || history.state.orderId |
| | | if (typeof str === 'undefined' || str === null || str === '' || str === '\n' || str === '\r'){ |
| | | return |
| | | } |
| | | gridOptions.loading = true |
| | | request.post(`/order/getOrderById/${str}`).then((res) => { |
| | | if(res.code==200){ |
| | | titleUploadData.value = res.data.order |
| | |
| | | item.otherColumns = JSON.parse(item.otherColumns) |
| | | }) |
| | | otherMoney.value =res.data.orderOtherMoneyList |
| | | |
| | | //加载副表数据 |
| | | xGrid.value.reloadData(orderDetails) |
| | | gridOptions.loading = false |
| | | |
| | | }else{ |
| | | ElMessage.error(res.msg) |
| | | } |
| | |
| | | const changedCustomerId = titleUploadData.value.customerId |
| | | const customer = titleSelectJson.value.customer.filter(item => item.id === changedCustomerId) |
| | | titleUploadData.value.customerName = customer[0].customerName |
| | | titleUploadData.value.project = customer[0].project |
| | | titleUploadData.value.salesmanId = customer[0].salesmanId |
| | | titleUploadData.value.salesman = customer[0].salesman |
| | | |
| | | //titleSelectJson.value.customer |
| | | } |
| | | |
| | |
| | | <script setup> |
| | | import {Search} from "@element-plus/icons-vue" |
| | | import {useRouter} from "vue-router" |
| | | import {computed, reactive, ref} from "vue" |
| | | import {computed, nextTick, onUnmounted, reactive, ref} from "vue" |
| | | import ProcessCardProgress from '@/views/pp/report/ProcessCardProgress.vue' |
| | | import request from "@/utils/request" |
| | | import deepClone from "@/utils/deepClone" |
| | |
| | | import {VXETable} from "vxe-table" |
| | | import useUserInfoStore from '@/stores/userInfo' |
| | | import {useI18n} from "vue-i18n" |
| | | import {columnDrop2, sortable2} from "@/hook/columnMove"; |
| | | const { t } = useI18n() |
| | | const userStore = useUserInfoStore() |
| | | const router = useRouter() |
| | |
| | | }) |
| | | |
| | | |
| | | let initTime = null |
| | | nextTick(() => { |
| | | // 加载完成之后在绑定拖动事件 |
| | | initTime = setTimeout(() => { |
| | | columnDrop2(xGrid.value) |
| | | }, 500) |
| | | }) |
| | | |
| | | onUnmounted(() => { |
| | | clearTimeout(initTime) |
| | | if (sortable2) { |
| | | sortable2.destroy() |
| | | } |
| | | }) |
| | | |
| | | </script> |
| | | |
| | | <template> |
| | |
| | | import {Search} from "@element-plus/icons-vue" |
| | | import GlassType from "@/components/sd/product/GlassType.vue" |
| | | import {useRouter} from 'vue-router' |
| | | import {columnDrop2,sortable2} from "@/hook/columnMove" |
| | | import Sortable from 'sortablejs' |
| | | import BasicTable from '@/components/sd/product/BasicTable.vue' |
| | | import {VXETable} from "vxe-table"; |
| | |
| | | return regex.test(value); // 返回true/false |
| | | } |
| | | |
| | | /*表格拖拽*/ |
| | | let sortable2: any |
| | | |
| | | const columnDrop2 = () => { |
| | | const $grid = xGrid.value |
| | | sortable2 = Sortable.create($grid.$el.querySelector('.body--wrapper>.vxe-table--header .vxe-header--row'), { |
| | | handle: '.vxe-header--column', |
| | | onEnd: (sortableEvent) => { |
| | | const targetThElem = sortableEvent.item |
| | | const newIndex = sortableEvent.newIndex |
| | | const oldIndex = sortableEvent.oldIndex |
| | | const { fullColumn, tableColumn } = $grid.getTableColumn() |
| | | const wrapperElem = targetThElem.parentNode |
| | | const newColumn = fullColumn[newIndex] |
| | | if (newColumn.fixed) { |
| | | // 错误的移动 |
| | | const oldThElem = wrapperElem.children[oldIndex] |
| | | if (newIndex > oldIndex) { |
| | | wrapperElem.insertBefore(targetThElem, oldThElem) |
| | | } else { |
| | | wrapperElem.insertBefore(targetThElem, oldThElem ? oldThElem.nextElementSibling : oldThElem) |
| | | } |
| | | VXETable.modal.message({ content: '固定列不允许拖动!', status: 'error' }) |
| | | return |
| | | } |
| | | // 获取列索引 columnIndex > fullColumn |
| | | const oldColumnIndex = $grid.getColumnIndex(tableColumn[oldIndex]) |
| | | const newColumnIndex = $grid.getColumnIndex(tableColumn[newIndex]) |
| | | // 移动到目标列 |
| | | const currRow = fullColumn.splice(oldColumnIndex, 1)[0] |
| | | fullColumn.splice(newColumnIndex, 0, currRow) |
| | | $grid.loadColumn(fullColumn) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | let initTime: any |
| | | |
| | | |
| | | let initTime = null |
| | | nextTick(() => { |
| | | // 加载完成之后在绑定拖动事件 |
| | | initTime = setTimeout(() => { |
| | | columnDrop2() |
| | | columnDrop2(xGrid.value) |
| | | }, 500) |
| | | }) |
| | | |
| | |
| | | @PathVariable String orderId, |
| | | @PathVariable String processId |
| | | ){ |
| | | if(flowCardService.deleteFlowCardSv(orderId,processId)){ |
| | | return Result.seccess(); |
| | | }else { |
| | | throw new ServiceException(Constants.Code_500,"删除失败,请检查是否已报工"); |
| | | |
| | | } |
| | | // if(flowCardService.deleteFlowCardSv(orderId,processId)){ |
| | | // return Result.seccess(); |
| | | // }else { |
| | | // throw new ServiceException(Constants.Code_500,"删除失败,请检查是否已报工"); |
| | | // |
| | | // } |
| | | return Result.seccess(flowCardService.deleteFlowCardSv(orderId,processId)); |
| | | } |
| | | |
| | | //修改排版状态 |
| | |
| | | @SaCheckPermission("SelectReportingWorks.delete") |
| | | @PostMapping("/deleteWork/{reportingWorkId}/{processId}/{thisProcess}") |
| | | public Result deleteWork(@PathVariable String reportingWorkId,@PathVariable String processId,@PathVariable String thisProcess){ |
| | | if(reportingWorkService.deleteWorkSv(reportingWorkId,processId,thisProcess)){ |
| | | return Result.seccess(); |
| | | }else { |
| | | throw new ServiceException(Constants.Code_500,"删除失败,请检查是否符合删除条件"); |
| | | // if(reportingWorkService.deleteWorkSv(reportingWorkId,processId,thisProcess)){ |
| | | // return Result.seccess(); |
| | | // }else { |
| | | // throw new ServiceException(Constants.Code_500,"删除失败,请检查是否符合删除条件"); |
| | | // |
| | | // } |
| | | return Result.seccess(reportingWorkService.deleteWorkSv(reportingWorkId,processId,thisProcess)); |
| | | |
| | | } |
| | | } |
| | | |
| | | @ApiOperation("质检审核查询接口") |
| | |
| | | @PathVariable String orderId, |
| | | @PathVariable String productionId |
| | | ){ |
| | | if(workOrderService.deleteOrderWorkSv(orderId,productionId)){ |
| | | return Result.seccess(); |
| | | }else { |
| | | throw new ServiceException(Constants.Code_500,"删除失败"); |
| | | |
| | | } |
| | | // if(workOrderService.deleteOrderWorkSv(orderId,productionId)){ |
| | | // return Result.seccess(); |
| | | // }else { |
| | | // throw new ServiceException(Constants.Code_500,"删除失败"); |
| | | // |
| | | // } |
| | | return Result.seccess(workOrderService.deleteOrderWorkSv(orderId,productionId)); |
| | | } |
| | | } |
| | |
| | | package com.example.erp.entity.sd; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableField; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import lombok.Data; |
| | | |
| | |
| | | private String address; |
| | | private String contact; |
| | | private String phone; |
| | | |
| | | @TableField(select = false,exist = false) |
| | | private String project; |
| | | @TableField(select = false,exist = false) |
| | | private Integer salesmanId; |
| | | @TableField(select = false,exist = false) |
| | | private String salesman; |
| | | } |
| | |
| | | public Map<String, Object> selectMaintenanceSv(Date selectTime1, Date selectTime2) { |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("data", deviceMaintenanceMapper.selectMaintenanceMp(selectTime1,selectTime2)); |
| | | map.put("process", deviceMaintenanceMapper.selectProcessMp()); |
| | | return map; |
| | | } |
| | | |
| | |
| | | //查询流程卡工艺流程 |
| | | String technologicalProcess = reportingWorkMapper.SelectTechnologicalProcess(processIdStr); |
| | | |
| | | //定义-的位置 |
| | | int index = technologicalProcess.indexOf("-"); |
| | | //获取工艺流程第一个工序 |
| | | String interceptProcess = technologicalProcess.substring(0, index); |
| | | |
| | | |
| | | String[] processList = technologicalProcess.split("->"); |
| | | //获取工艺流程第一个工序 |
| | | String interceptProcess = processList[0]; |
| | | int length = processList.length; |
| | | |
| | | //定义当前工序上下工序 |
| | |
| | | o.processing_note, |
| | | fc.process_id, |
| | | SUM( od.quantity) as quantity, |
| | | SUM(od.gross_area) as gross_area, |
| | | SUM(ogd.total_area) as gross_area, |
| | | SUM(od.weight) as weight, |
| | | #{technologyNumber} as technologyNumber, |
| | | concat(fc.process_id,'/',#{technologyNumber}) as processIdNumber |
| | |
| | | select fc.order_number, |
| | | concat(ogd.child_width, "*", ogd.child_height) as child_width, |
| | | od.quantity, |
| | | ogd.total_area, |
| | | round(ogd.total_area,2) as total_area, |
| | | od.perimeter, |
| | | od.bend_radius, |
| | | od.remarks |
| | |
| | | |
| | | <select id="getCustomerList"> |
| | | select |
| | | * |
| | | a.*, |
| | | b.project, |
| | | b.salesman_id, |
| | | b.salesman |
| | | from |
| | | sd.customer |
| | | sd.customer as a |
| | | left join (select o.project,o.salesman_id,o.salesman,o.customer_id |
| | | from sd.order as o |
| | | group by o.customer_id |
| | | order by o.id desc) as b |
| | | on a.id = b.customer_id |
| | | |
| | | </select> |
| | | <select id="getSelectCustomer"> |
| | | select |