廖井涛
2024-06-17 0dd23cf7defdeb7a58287cacf52d666154c2f798
Merge branch 'master' of http://bore.pub:10439/r/ERP_override
7个文件已修改
1个文件已添加
425 ■■■■■ 已修改文件
north-glass-erp/northglass-erp/src/router/index.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/processCard/PrintCustomLabel.vue 180 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/processCard/PrintFlowCard.vue 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/processCard/ProductionScheduling.vue 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/controller/pp/ProcessCardController.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/pp/FlowCardMapper.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/pp/FlowCardService.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/FolwCard.xml 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/router/index.js
@@ -368,6 +368,11 @@
              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'),
north-glass-erp/northglass-erp/src/views/pp/processCard/PrintCustomLabel.vue
New file
@@ -0,0 +1,180 @@
<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>
north-glass-erp/northglass-erp/src/views/pp/processCard/PrintFlowCard.vue
@@ -11,12 +11,14 @@
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)
@@ -71,6 +73,28 @@
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
@@ -81,6 +105,7 @@
  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 {
@@ -156,6 +181,14 @@
      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: ''}],
@@ -183,6 +216,7 @@
    buttons: [
      {code: 'print', name: t('processCard.print'), status: 'primary'},
      {code: 'printLabel', name: t('processCard.printLabel'), status: 'primary'},
      // {code: 'customLabel', name: '自定义标签打印', status: 'primary'},
    ],
    // import: false,
@@ -213,6 +247,8 @@
  toolbarButtonClick ({ code}) {
    const $grid = xGrid.value
    selectRecords = $grid.getCheckboxRecords()
    let type=printType.value
    let faceOrientation=stateValue.value
    if ($grid) {
      switch (code) {
        case 'print': {
@@ -272,6 +308,29 @@
              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
        }
      }
@@ -415,6 +474,23 @@
<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"
@@ -481,6 +557,15 @@
    </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="流程卡明细"
north-glass-erp/northglass-erp/src/views/pp/processCard/ProductionScheduling.vue
@@ -420,7 +420,7 @@
          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++) {
@@ -429,13 +429,13 @@
              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;
            }
@@ -449,7 +449,7 @@
            //保存排产数据
            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({
@@ -474,10 +474,10 @@
          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,
@@ -485,7 +485,7 @@
              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)
@@ -501,7 +501,7 @@
          const selectRecords = $table.getCheckboxRecords()
          if ($table) {
            if (selectRecords.length == 0) {
              ElMessage.warning(t('processCard.checkProductionScheduling'))
              ElMessage.warning("请勾选排产数据")
              return;
            }
            let schedulingData = ref({
@@ -510,7 +510,7 @@
            })
            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)
@@ -585,7 +585,7 @@
  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
    }
@@ -604,9 +604,9 @@
        <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"
@@ -623,7 +623,7 @@
          />
        </el-select>
        &nbsp;
        <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"
north-glass-erp/src/main/java/com/example/erp/controller/pp/ProcessCardController.java
@@ -189,6 +189,14 @@
        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")
@@ -218,4 +226,14 @@
        }
    }
    @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));
    }
}
north-glass-erp/src/main/java/com/example/erp/mapper/pp/FlowCardMapper.java
@@ -2,7 +2,7 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.erp.entity.pp.FlowCard;
import com.example.erp.entity.pp.PrintSetup;
import com.example.erp.entity.sd.Order;
import org.apache.ibatis.annotations.Mapper;
import java.sql.Date;
@@ -87,4 +87,11 @@
    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);
}
north-glass-erp/src/main/java/com/example/erp/service/pp/FlowCardService.java
@@ -6,15 +6,20 @@
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.erp.entity.pp.FlowCard;
import com.example.erp.entity.pp.PrintSetup;
import com.example.erp.entity.pp.ProductionScheduling;
import com.example.erp.entity.sd.OrderGlassDetail;
import com.example.erp.entity.sd.OrderProcessDetail;
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.*;
@@ -208,6 +213,7 @@
    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;
    }
@@ -257,11 +263,10 @@
                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;
    }
@@ -282,6 +287,27 @@
    }
    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;
    }
}
north-glass-erp/src/main/resources/mapper/pp/FolwCard.xml
@@ -49,6 +49,8 @@
        <result column="g_type" property="glassTypes.type"/>-->
    </resultMap>
    <!--    流程卡管理查询-->
    <select id="selectFlowCard" resultMap="flowCardMap">
        select
@@ -433,6 +435,7 @@
               fc.process_id,
               o.customer_name,
               o.project,
               fc.order_number,
               ogd.technology_number,
               ogd.glass_address,
               sum(od.quantity) as quantity,
@@ -463,7 +466,7 @@
               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
@@ -480,7 +483,7 @@
    <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,
@@ -570,5 +573,68 @@
          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>