Merge branch 'master' of http://bore.pub:10439/r/ERP_override
| | |
| | | <script setup> |
| | | import {reactive, ref} from "vue"; |
| | | import {onMounted, reactive, ref} from "vue"; |
| | | import {useI18n} from "vue-i18n"; |
| | | import { |
| | | Folder, |
| | |
| | | import SetAmount from "@/views/pp/glassOptimize/page/SetAmount.vue"; |
| | | import SetTrimming from "@/views/pp/glassOptimize/page/SetTrimming.vue"; |
| | | import CheckInventory from "@/views/pp/glassOptimize/page/CheckInventory.vue"; |
| | | import request from "@/utils/request"; |
| | | import {ElMessage} from "element-plus"; |
| | | |
| | | const {t} = useI18n() |
| | | |
| | |
| | | ] |
| | | },*/ |
| | | columns: [ |
| | | {title: '订序', width: 70}, |
| | | {field: 'state', width: 100, title: t('order.width'), filters: [{data: ''}], slots: {filter: 'num2_filter'}}, |
| | | {field: 'seq', width: 100, title: t('order.height'),filters: [{data: ''}],slots: {filter: 'num2_filter'}}, |
| | | {field: 'seq', title: '', width: 70}, |
| | | {field: 'order_number', title: '订序', width: 70}, |
| | | {field: 'child_width', width: 100, title: t('order.width'), filters: [{data: ''}], slots: {filter: 'num2_filter'}}, |
| | | {field: 'child_height', width: 100, title: t('order.height'),filters: [{data: ''}],slots: {filter: 'num2_filter'}}, |
| | | {field: 'quantity', width: 150, title: t('order.quantity'), filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: '', width: 150, title: '长磨1', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: '', width: 150, title: '长磨2', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: '', width: 150, title: '短磨1', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: '', width: 150, title: '短磨1', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | { |
| | | field: 'id', |
| | | width: 150, |
| | | title: t('order.quantity'), |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | sortable: true |
| | | }, |
| | | {field: 'id', width: 150, title: '长磨1', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: 'id', width: 150, title: '长磨2', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: 'id', width: 150, title: '短磨1', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: 'id', width: 150, title: '短磨1', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | { |
| | | field: 'id', |
| | | field: 'shape', |
| | | width: 150, |
| | | title: t('order.shape'), |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | sortable: true |
| | | }, |
| | | {field: 'id', width: 150, title: '流程卡号', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: 'process_cards', width: 150, title: '流程卡号', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | { |
| | | field: 'id', |
| | | field: 'product_name', |
| | | width: 150, |
| | | title: t('order.product'), |
| | | filters: [{data: ''}], |
| | |
| | | sortable: true |
| | | }, |
| | | { |
| | | field: 'id', |
| | | field: 'building_number', |
| | | width: 150, |
| | | title: t('order.buildingNumber'), |
| | | filters: [{data: ''}], |
| | |
| | | sortable: true |
| | | }, |
| | | { |
| | | field: 'id', |
| | | field: 'remark', |
| | | width: 150, |
| | | title: t('basicData.remarks'), |
| | | filters: [{data: ''}], |
| | |
| | | sortable: true |
| | | }, |
| | | { |
| | | field: 'id', |
| | | field: 'perimeter', |
| | | width: 150, |
| | | title: t('order.perimeter'), |
| | | filters: [{data: ''}], |
| | |
| | | sortable: true |
| | | }, |
| | | { |
| | | field: 'id', |
| | | field: 'area', |
| | | width: 150, |
| | | title: t('order.grossArea'), |
| | | filters: [{data: ''}], |
| | |
| | | }, |
| | | |
| | | { |
| | | field: 'id', |
| | | field: '', |
| | | width: 150, |
| | | title: t('craft.glassChild'), |
| | | title: '架号', |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | sortable: true |
| | | }, |
| | | { |
| | | field: 'id', |
| | | field: 'technology_number', |
| | | width: 150, |
| | | title: t('craft.glassAddress'), |
| | | title: '层', |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | sortable: true |
| | | }, |
| | | { |
| | | field: 'id', |
| | | field: 'glass_child', |
| | | width: 150, |
| | | title: t('craft.TrademarkAttribute'), |
| | | title: '单片名称', |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | sortable: true |
| | | }, |
| | | { |
| | | field: 'icon', |
| | | width: 150, |
| | | title: '印标类型', |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | sortable: true |
| | |
| | | const openDialog = (index) => { |
| | | dialogVisible.value[index] = true; |
| | | }; |
| | | //工程号 |
| | | const projectNo = ref('P24120301'); |
| | | |
| | | const fetchData = () => { |
| | | request.post(`/glassOptimize/projectInfo/${projectNo.value}`).then((res) => { |
| | | if ((Number(res.code) === 200)) { |
| | | xGrid.value.loadData(res.data.data); |
| | | } else { |
| | | ElMessage.warning(res.msg); |
| | | } |
| | | }).catch((error) => { |
| | | console.error("获取数据出错:", error); |
| | | ElMessage.error('获取数据时出现错误,请稍后再试'); |
| | | }); |
| | | }; |
| | | onMounted(() => { |
| | | fetchData(); |
| | | }); |
| | | |
| | | |
| | | </script> |
| | |
| | | </div> |
| | | </template> |
| | | </vxe-grid> |
| | | |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | </el-select> |
| | | <vxe-grid |
| | | ref="xGrid" |
| | | :checkbox-config="{labelField: 'name', highlight: true, range: true}" |
| | | class="mytable-scrollbar" |
| | | height="100%" |
| | | v-bind="gridOptions" |
| | |
| | | import {VXETable} from "vxe-table"; |
| | | import useUserInfoStore from '@/stores/userInfo' |
| | | import {useI18n} from "vue-i18n"; |
| | | import UpdateOrderCraft from "@/components/sd/order/UpdateOrderCraft.vue"; |
| | | import {filterChanged} from "@/hook"; |
| | | let productGlassTypeStore = useProductGlassTypeStore() |
| | | const { t } = useI18n() |
| | | const userStore = useUserInfoStore() |
| | |
| | | let pageNum=ref(1) |
| | | let pageState = null |
| | | |
| | | let craftVisible = ref(false) |
| | | |
| | | const craftObj = reactive({ |
| | | newCraft: [], |
| | | oldCraft: [], |
| | | }) |
| | | |
| | | const numberList = reactive({ |
| | | technologyNumber:[], |
| | | }) |
| | | |
| | | const saveCraft = () => { |
| | | //rowIndex.value.process = craftObj.newCraft.join('->') |
| | | let orderProcess= craftObj.newCraft.join('->') |
| | | request.post(`/processCard/updateProcess/${rowIndex.value.process_id}/${rowIndex.value.technology_number}/${rowIndex.value.order_id}/${orderProcess}`, craftObj).then((res) => { |
| | | if (res.code == 200 && res.data === true) { |
| | | ElMessage.success(t('basicData.msg.saveSuccess')) |
| | | router.push({ |
| | | path: '/main/processCard/SelectDetailProcessCard', |
| | | query: {processId: processId,random: Math.random()} |
| | | }) |
| | | } else { |
| | | |
| | | ElMessage.warning('保存失败,检查是否报工') |
| | | |
| | | } |
| | | }) |
| | | craftVisible.value= false |
| | | } |
| | | |
| | | |
| | | let process = ref([]) |
| | | request.get(`/basicData/BasicDataByType/product/process`).then((res) =>{ |
| | | if (res.code==200){ |
| | | process.value=res.data |
| | | } |
| | | }) |
| | | |
| | | let rowIndex = ref({}) |
| | | const updateCraft = (row) => { |
| | | craftVisible.value= true |
| | | Object.keys(craftObj).forEach((key) =>{ |
| | | craftObj[key] = row['process'].split('->') |
| | | }) |
| | | Object.keys(numberList).forEach((key) =>{ |
| | | numberList[key] = row['concatNumber'].split(',') |
| | | }) |
| | | craftObj.technologyNumber=[] |
| | | craftObj.technologyNumber.push(...numberList.technologyNumber); |
| | | rowIndex.value = row |
| | | } |
| | | //第一次加载 |
| | | |
| | | const {currentRoute} = useRouter() |
| | |
| | | },//表头参数 |
| | | columns:[ |
| | | {type:'expand',fixed:"left",slots: { content:'content' },width: 50}, |
| | | {title: t('basicData.operate'), width: 100, slots: { default: 'button_slot' },fixed:"left",}, |
| | | { type: 'seq',fixed:"left", title: t('basicData.Number'), width: 50 }, |
| | | {field: 'order_id', title: t('order.orderId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },width: 80 }, |
| | | {field: 'order_id', title: t('order.orderId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },width: 110 }, |
| | | {field: 'process_id', width: 140, title: t('processCard.processId') ,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'order_number', title: t('order.OrderNum') ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },}, |
| | | {field: 'technology_number', title: t('processCard.technologyNumber') ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },}, |
| | | {field: 'order_number', title: t('order.OrderNum') ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },width: 100}, |
| | | {field: 'technology_number', title: t('processCard.technologyNumber') ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },width: 100}, |
| | | {field: 'quantity', title: t('order.quantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, width: 80}, |
| | | {field: 'child_width', title: t('order.width'), }, |
| | | {field: 'child_height', title: t('order.height'), }, |
| | | {field: 'area', title: t('order.area') ,showOverflow:"ellipsis"}, |
| | | {field: 'product_name', title: t('order.product'), }, |
| | | {field: 'glass_child', title: t('reportingWorks.glassChild'), }, |
| | | {field: 'founder', title: t('processCard.founder'), }, |
| | | {field: 'splitFrame_time', title: t('processCard.splitFrameTime'), }, |
| | | {field: 'child_width', title: t('order.width'),width: 80 }, |
| | | {field: 'child_height', title: t('order.height'),width: 80 }, |
| | | {field: 'area', title: t('order.area') ,showOverflow:"ellipsis",width: 70}, |
| | | {field: 'process',width:250, title: t('craft.process'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },}, |
| | | {field: 'product_name', title: t('order.product'),width: 310 }, |
| | | {field: 'glass_child', title: t('reportingWorks.glassChild'),width: 200 }, |
| | | {field: 'founder', title: t('processCard.founder'),width: 110 }, |
| | | {field: 'splitFrame_time', title: t('processCard.splitFrameTime'),width: 110 }, |
| | | {field: 'concatNumber', title: '总序号',width: 110}, |
| | | |
| | | ],//表头按钮 |
| | | |
| | | toolbarConfig: { |
| | | buttons: [ |
| | | {'code': 'add', 'name': t('processCard.merge'),status: 'primary'} |
| | | {'code': 'add', 'name': t('processCard.merge'),status: 'primary'}, |
| | | |
| | | ], |
| | | import: false, |
| | | // export: true, |
| | |
| | | <!--左边固定显示的插槽--> |
| | | |
| | | |
| | | <template #num1_filter="{ column, $panel }"> |
| | | <div> |
| | | <div v-for="(option, index) in column.filters" :key="index"> |
| | | <input type="type" v-model="option.data" |
| | | @keyup.enter.native="$panel.confirmFilter()" |
| | | @input="changeFilterEvent($event, option, $panel)"/> |
| | | </div> |
| | | </div> |
| | | <!--左边固定显示的插槽--> |
| | | <template #button_slot="{ row }"> |
| | | <el-button @click="updateCraft(row)" link type="primary" size="small">{{$t('craft.updateCraft')}}</el-button> |
| | | </template> |
| | | |
| | | |
| | | </vxe-grid> |
| | | |
| | | <el-dialog id="processChange" |
| | | v-model="craftVisible" |
| | | :title="$t('craft.technologicalProcess')" |
| | | :close-on-click-modal="false" |
| | | :close-on-press-escape="false" |
| | | style="width: 60%;height:60% ;position: relative;" > |
| | | |
| | | <update-order-craft |
| | | :craftObj="craftObj" |
| | | :process="process" |
| | | @saveCraft="saveCraft" |
| | | /> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | @Autowired |
| | | GlassOptimizeService glassOptimizeService; |
| | | |
| | | //工程信息 |
| | | @ApiOperation("创建工程查询流程卡接口") |
| | | @PostMapping ("/projectInfo/{projectNo}") |
| | | public Result projectInfo( |
| | | @PathVariable String projectNo){ |
| | | return Result.seccess(glassOptimizeService.projectInfoSv(projectNo)); |
| | | } |
| | | |
| | | |
| | | //工程查询流程卡 |
| | | @ApiOperation("创建工程查询流程卡接口") |
| | | @PostMapping ("/getFlowCardList/{optionVal}/{radio}") |
| | |
| | | } |
| | | |
| | | //模拟计算流程卡详情 |
| | | //模拟计算工程号查询 |
| | | @ApiOperation("模拟计算工程号查询") |
| | | @ApiOperation("模拟计算流程卡详情") |
| | | @PostMapping ("/selectComputeDetail/{processId}") |
| | | public Result selectComputeDetail( |
| | | @PathVariable String processId){ |
| | |
| | | |
| | | } |
| | | |
| | | @ApiOperation("修改工艺流程") |
| | | @PostMapping("/updateProcess/{processId}/{technologyNumber}/{orderId}/{process}") |
| | | public Result updateProcess( |
| | | @PathVariable String processId, |
| | | @PathVariable String technologyNumber, |
| | | @PathVariable String orderId, |
| | | @PathVariable String process, |
| | | @RequestBody Map<String, Object> object |
| | | ) { |
| | | |
| | | return Result.seccess(flowCardService.updateProcessSv(processId,technologyNumber,orderId,process,object)); |
| | | } |
| | | } |
| | |
| | | List<Map<String, Object>> getPrintCustomDataProject(String projectNo); |
| | | |
| | | List<Map<String, String>> getPrintLabel3(String projectNo); |
| | | |
| | | Boolean updateProcessMp(String processId, String technologyNumber, String process, String number); |
| | | |
| | | Boolean deleteProcessMp(String processId, String technologyNumber); |
| | | |
| | | Boolean updateOrderProcessMp(String orderId, String number, String technologyNumber, String orderprocess); |
| | | } |
| | |
| | | |
| | | @Mapper |
| | | public interface GlassOptimizeMapper { |
| | | //工程信息 |
| | | List<Map<String, Object>> projectInfoMp(String projectNo); |
| | | |
| | | |
| | | //工单管理查询未转工单数据 |
| | | List<OrderGlassDetail> selectWordOrder(Date selectTime1, Date selectTime2, OrderGlassDetail orderGlassDetail); |
| | | |
| | |
| | | map.put("title", flowCardMapper.getPrintTitle(type)); |
| | | return map; |
| | | } |
| | | |
| | | public Boolean updateProcessSv(String processId, String technologyNumber, String orderId, String Orderprocess, Map<String, Object> object) { |
| | | |
| | | //判断该流程卡是否报工 |
| | | Integer count = flowCardMapper.reportingWorkCount(processId); |
| | | if (count == 0) { |
| | | //删除小片工艺表对应的数据 |
| | | flowCardMapper.deleteProcessMp(processId,technologyNumber); |
| | | //重新插入修改好工艺流程卡的数据 |
| | | List<String> newCraftList = (List<String>) object.get("newCraft"); |
| | | List<String> numberList = (List<String>) object.get("technologyNumber"); |
| | | // 判断 newCraftList 是否为空 |
| | | if (newCraftList != null) { |
| | | for (String number : numberList) { |
| | | //修改订单小片表工艺流程 |
| | | flowCardMapper.updateOrderProcessMp(orderId,number,technologyNumber,Orderprocess); |
| | | for (String process : newCraftList) { |
| | | flowCardMapper.updateProcessMp(processId,technologyNumber,process,number); |
| | | } |
| | | } |
| | | } |
| | | |
| | | return true; |
| | | }else { |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | | } |
| | | |
| | | |
| | |
| | | GlassOptimizeMapper glassOptimizeMapper; |
| | | |
| | | |
| | | //工程信息 |
| | | public Map<String, Object> projectInfoSv(String projectNo) { |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("data", glassOptimizeMapper.projectInfoMp(projectNo)); |
| | | return map; |
| | | } |
| | | |
| | | |
| | | //工程查询流程卡 |
| | | public Map<String, Object> getFlowCardList(String optionVal, Integer radio) { |
| | | Map<String, Object> map = new HashMap<>(); |
| | |
| | | <select id="reportingWorkCount"> |
| | | select COUNT(rw.process_id) |
| | | from reporting_work as rw |
| | | where rw.process_id = #{processId} |
| | | where rw.process_id = #{processId} and reviewed_state>=0 |
| | | </select> |
| | | <!-- 插入Flow_card表--> |
| | | <insert id="addFlowCardMp"> |
| | |
| | | od.product_name, |
| | | ogd.glass_child, |
| | | fc.founder, |
| | | date(fc.splitFrame_time) as splitFrame_time |
| | | date(fc.splitFrame_time) as splitFrame_time, |
| | | ogd.process, |
| | | c.concatNumber |
| | | from flow_card as fc |
| | | left join sd.order_glass_detail as ogd |
| | | on fc.order_id = ogd.order_id and fc.order_number = ogd.order_number and |
| | | fc.technology_number = ogd.technology_number |
| | | left join sd.order_detail as od on od.order_id = ogd.order_id and od.order_number = ogd.order_number |
| | | left join ( |
| | | select process_id,technology_number, GROUP_CONCAT(order_number) as concatNumber from |
| | | flow_card where process_id = #{processId} GROUP BY process_id,technology_number |
| | | ) as c on c.process_id=fc.process_id |
| | | where fc.process_id = #{processId} |
| | | GROUP BY fc.order_id, fc.process_id, fc.order_number, fc.technology_number |
| | | order by fc.order_number, fc.technology_number |
| | |
| | | group by order_id,od.order_number |
| | | order by ogd.child_width desc,ogd.child_height desc |
| | | </select> |
| | | |
| | | <delete id="deleteProcessMp"> |
| | | delete from sd.order_process_detail where process_id = #{processId} and technology_number= #{technologyNumber} |
| | | </delete> |
| | | |
| | | <insert id="updateProcessMp"> |
| | | insert into sd.order_process_detail (order_id, |
| | | process_id, |
| | | order_number, |
| | | technology_number, |
| | | process, |
| | | create_time) |
| | | select fc.order_id, |
| | | fc.process_id, |
| | | fc.order_number, |
| | | #{technologyNumber}, |
| | | #{process}, |
| | | NOW() |
| | | from pp.flow_card as fc |
| | | where fc.process_id = #{processId} |
| | | and fc.order_number = #{number} |
| | | and fc.technology_number = #{technologyNumber} |
| | | GROUP BY fc.order_number |
| | | </insert> |
| | | |
| | | <update id="updateOrderProcessMp"> |
| | | update sd.order_glass_detail set process=#{orderprocess} |
| | | where order_id=#{orderId} and order_number=#{number} and technology_number=#{technologyNumber} |
| | | </update> |
| | | </mapper> |
| | |
| | | <result property="modifyTime" column="modify time"/> |
| | | </resultMap> |
| | | |
| | | <!--工程信息--> |
| | | <select id="projectInfoMp"> |
| | | SELECT |
| | | f.order_number, |
| | | g.child_width , |
| | | g.child_height , |
| | | f.quantity , |
| | | d.shape , |
| | | op.process_cards , |
| | | d.product_name , |
| | | op.remark , |
| | | d.building_number , |
| | | round(((`g`.`child_width` + g.child_height) * 2 * `f`.`quantity`),2) as perimeter , |
| | | round((`g`.`area` * `f`.`quantity`),4) AS area, |
| | | f.technology_number , |
| | | g.glass_child , |
| | | g.icon |
| | | FROM |
| | | ((pp.flow_card AS f |
| | | LEFT JOIN sd.order_detail AS d ON (((f.order_id = d.order_id) AND (f.order_number = d.order_number)))) |
| | | LEFT JOIN sd.order_glass_detail AS g ON (((f.order_id = g.order_id) AND (f.order_number = g.order_number) AND (f.technology_number = g.technology_number)))) |
| | | INNER JOIN pp.optimize_project AS op ON op.project_no = f.project_no |
| | | WHERE |
| | | f.project_no = #{projectNo} |
| | | GROUP BY |
| | | f.order_id, |
| | | f.technology_number, |
| | | f.order_number; |
| | | </select> |
| | | |
| | | <select id="selectWordOrder" resultMap="wordOrderMap"> |
| | | select |
| | | o.order_id, |
| | |
| | | ORDER BY fc.process_id, fc.technology_number |
| | | </select> |
| | | |
| | | <!--工程管理--> |
| | | <select id="optimizeProjectMangeMp" resultMap="optimizeProjectMangeMap"> |
| | | select p.`id` AS `id`, |
| | | p.`project_no` AS `Project Number`, |