chenlu
2024-06-19 d56944a1e0776da3f270353a902d5954e3373cee
Merge branch 'master' of http://bore.pub:10439/r/ERP_override
4个文件已添加
52个文件已修改
1141 ■■■■ 已修改文件
north-glass-erp/northglass-erp/config.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/package-lock.json 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/package.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/BasicTable.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/pp/TagStyle.vue 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/sd/order/OrderCraftDetail.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/sd/order/OrderDetail.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/sd/order/OrderOtherMoney.vue 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/sd/order/OrderProcess.vue 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/sd/order/OrderSizeCheck.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/sd/order/PrintSheet1.vue 290 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/sd/order/PrintSheet2.vue 299 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/sd/order/PrintSheet3.vue 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/sd/product/BasicTable.vue 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/sd/product/GlassType.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/lang/zh.js 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/main.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/stores/sd/companyInfo.js 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/mainIngredient/SelectIngredients.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/mainIngredientStock/CreateOutBound.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/mainIngredientStock/MaterialOutbound.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/mainIngredientStock/ReturnToStorage.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/mainIngredientStock/ReturnToStorageCreate.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/mainIngredientStock/SelectIngredientsStock.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/CreateProductStock.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/FinishedGoodsIssue.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/FinishedProductOut.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/FinishedProductReturn.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/FinishedProductRework.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/OrderAllocation.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/ProductStockList.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/ReworkRecord.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/StorageRecord.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/TakeOutRecord.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/TransferRecord.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/stockReport/WarehouseReport.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/Replenish/AddReplenish.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/Replenish/SelectReplenish.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/rework/AddRework.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/rework/SelectRework.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/customer/CreateCustomer.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/customer/SelectCustomer.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/customer/SelectCustomerOrder.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/delivery/CreateDelivery.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/delivery/SelectDelivery.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/delivery/SelectOrderList.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/order/CreateOrder.vue 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/order/SelectOrder.vue 98 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/controller/sd/OrderController.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/entity/sd/OrderDetail.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/sd/OrderDetailMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/sd/OrderMapper.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/sd/OrderService.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/sd/OrderDetailMapper.xml 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/sd/OrderMapper.xml 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/sd/ProductMapper.xml 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/config.js
@@ -1,4 +1,4 @@
export default {
  serverUrl:"localhost:8086"
  serverUrl:"localhost:8086",
  //serverUrl:"192.168.1.199:8086"
}
north-glass-erp/northglass-erp/package-lock.json
@@ -21,6 +21,7 @@
        "vue-draggable-plus": "^0.5.0",
        "vue-i18n": "^9.10.1",
        "vue-router": "^4.2.4",
        "vue3-print-nb": "^0.1.4",
        "vxe-table": "^4.5.15",
        "xe-utils": "^3.5.14",
        "xlsx": "^0.18.5"
@@ -1824,6 +1825,14 @@
        "vue": "^3.2.0"
      }
    },
    "node_modules/vue3-print-nb": {
      "version": "0.1.4",
      "resolved": "https://registry.npmmirror.com/vue3-print-nb/-/vue3-print-nb-0.1.4.tgz",
      "integrity": "sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==",
      "dependencies": {
        "vue": "^3.0.5"
      }
    },
    "node_modules/vxe-table": {
      "version": "4.5.15",
      "resolved": "https://registry.npmjs.org/vxe-table/-/vxe-table-4.5.15.tgz",
@@ -3078,6 +3087,14 @@
        "@vue/devtools-api": "^6.5.0"
      }
    },
    "vue3-print-nb": {
      "version": "0.1.4",
      "resolved": "https://registry.npmmirror.com/vue3-print-nb/-/vue3-print-nb-0.1.4.tgz",
      "integrity": "sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==",
      "requires": {
        "vue": "^3.0.5"
      }
    },
    "vxe-table": {
      "version": "4.5.15",
      "resolved": "https://registry.npmjs.org/vxe-table/-/vxe-table-4.5.15.tgz",
north-glass-erp/northglass-erp/package.json
@@ -21,6 +21,7 @@
    "vue-draggable-plus": "^0.5.0",
    "vue-i18n": "^9.10.1",
    "vue-router": "^4.2.4",
    "vue3-print-nb": "^0.1.4",
    "vxe-table": "^4.5.15",
    "xe-utils": "^3.5.14",
    "xlsx": "^0.18.5"
north-glass-erp/northglass-erp/src/components/BasicTable.vue
@@ -47,7 +47,7 @@
      options: [
        [
          { code: 'exportExcelChecked', name: '导出选中', prefixIcon: 'vxe-icon-download', visible: true }
          { code: 'exportExcelChecked', name: t('components.exportSelected'), prefixIcon: 'vxe-icon-download', visible: true }
        ]
      ]
    }
@@ -72,7 +72,7 @@
    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)
@@ -191,8 +191,8 @@
    <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"
    />
@@ -201,7 +201,7 @@
        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"
@@ -234,7 +234,7 @@
                      @click="exportExcel(props.childrenData.exportUrl,
                                          props.childrenData.exportName,
                                          basicProp.selectDate)">
            导出</vxe-button>
            {{$t('basicData.export')}}</vxe-button>
        </template>
        <template #pager>
north-glass-erp/northglass-erp/src/components/pp/TagStyle.vue
@@ -61,11 +61,11 @@
})
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
@@ -73,7 +73,7 @@
      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()
        }
      })
@@ -130,7 +130,7 @@
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()
    }
@@ -159,7 +159,7 @@
    <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)">
@@ -176,8 +176,8 @@
                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)"
@@ -230,22 +230,22 @@
        <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>
north-glass-erp/northglass-erp/src/components/sd/order/OrderCraftDetail.vue
@@ -91,7 +91,7 @@
      </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>
north-glass-erp/northglass-erp/src/components/sd/order/OrderDetail.vue
@@ -46,7 +46,7 @@
    {field: 'computeArea',width:180,  title: t('order.computeArea'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'computeGrossArea',width:200,  title: t('order.computeGrossArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'processingNote',width:200,  title: t('order.processingNote'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'remarks',width:140,  title: t('basicData.remarks'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'remarks',width:140,  title: t('order.floorNumber'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'shape',width:120,
      title: t('order.shape'),
      editRender: { name: 'input'},
@@ -93,7 +93,7 @@
      </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>
north-glass-erp/northglass-erp/src/components/sd/order/OrderOtherMoney.vue
@@ -38,10 +38,10 @@
  },//表头参数
  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: {
@@ -69,8 +69,8 @@
  },
  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'}
    ],
@@ -116,7 +116,7 @@
        }
        case 'delete': {
          if(rowClickIndex.value === null){
            ElMessage.warning('请先单击选择行')
            ElMessage.warning(t('components.pleaseClickToSelectARowFirst'))
            return
          }
          deleteColum(rowClickIndex.value.id)
@@ -160,7 +160,7 @@
const validate = async () => {
  const errMap = await xGrid.value.validate(true)
  if (errMap) {
    ElMessage.error(`校验不通过!`)
    ElMessage.error(t('basicData.msg.checkoutLose'))
    return false
  }
  return true
@@ -171,22 +171,22 @@
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'))
        }
      })
    })
@@ -195,23 +195,23 @@
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'))
          }
        })
      })
north-glass-erp/northglass-erp/src/components/sd/order/OrderProcess.vue
@@ -44,19 +44,19 @@
  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]
north-glass-erp/northglass-erp/src/components/sd/order/OrderSizeCheck.vue
@@ -16,7 +16,7 @@
  id:'sizeCheck',
  toolbarConfig: {
    buttons: [
      {'code': 'review', 'name': '审核',status: 'primary'},
      {'code': 'review', 'name': t('basicData.review'),status: 'primary'},
    ]
  },
@@ -49,19 +49,19 @@
    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') }
    ]
  }
})
north-glass-erp/northglass-erp/src/components/sd/order/PrintSheet1.vue
New file
@@ -0,0 +1,290 @@
<script setup>
import request from "@/utils/request"
import {computed, onMounted, ref} from "vue"
//这里是打印的配置项
const  print=ref({
  id: 'printBox',//这里的id就是上面我们的打印区域id,实现指哪打哪
  popTitle: '配置页眉标题', // 打印配置页上方的标题
  extraHead: '', // 最上方的头部文字,附加在head标签上的额外标签,使用逗号分割
  preview: false, // 是否启动预览模式,默认是false
  previewTitle: '预览的标题', // 打印预览的标题
  previewPrintBtnLabel: '预览结束,开始打印', // 打印预览的标题下方的按钮文本,点击可进入打印
  zIndex: 20002, // 预览窗口的z-index,默认是20002,最好比默认值更高
  previewBeforeOpenCallback() { console.log('正在加载预览窗口!'); }, // 预览窗口打开之前的callback
  previewOpenCallback() { console.log('已经加载完预览窗口,预览打开了!') }, // 预览窗口打开时的callback
  beforeOpenCallback() { console.log('开始打印之前!') }, // 开始打印之前的callback
  openCallback() { console.log('执行打印了!') }, // 调用打印时的callback
  closeCallback() { console.log('关闭了打印工具!') }, // 关闭打印的callback(无法区分确认or取消)
  clickMounted() { console.log('点击v-print绑定的按钮了!') },
})
let props = defineProps({
  orderId:null
})
let data = ref({
  order:{
    processingNote:''
  },
  orderProductDetail:[]
})
const grossNum = ref({
  quantity: 0,
  grossArea: 0,
  perimeter: 0
})
const getData = () => {
  request.get(`/order/printOrderProductDetail/${props.orderId}`).then(res => {
    data.value= res.data
    res.data.orderProductDetail.forEach(item => {
        grossNum.value.quantity += getQuantity(item.productDetail)
        grossNum.value.grossArea += getArea(item.productDetail)
        grossNum.value.perimeter += getPerimeter(item.productDetail)
    })
    grossNum.value.quantity = parseFloat(grossNum.value.quantity.toFixed(3))
    grossNum.value.grossArea = parseFloat(grossNum.value.grossArea.toFixed(3))
    grossNum.value.perimeter = parseFloat(grossNum.value.perimeter.toFixed(3))
  })
}
onMounted(() => {
  getData()
})
const getQuantity = (productList) => {
  let quantity = 0
  productList.forEach(item => {
    quantity += item.quantity
  })
  return parseFloat(quantity.toFixed(3))
}
const getArea = (productList) => {
  let area = 0
  productList.forEach(item => {
    area += item.grossArea
  })
  return parseFloat(area.toFixed(3))
}
const getPerimeter = (productList) => {
  let perimeter = 0
  productList.forEach(item => {
    perimeter += item.perimeter
  })
  return parseFloat(perimeter.toFixed(3))
}
const printSheet = () => {
  // printJS({
  //   printable:'sheet',
  //   type:'html',
  //   //style:styleAll(),
  //   targetStyles: ['*']
  //   //scanStyles:false
  // })
}
defineExpose({
  printSheet
});
</script>
<template>
  <div id="sheet">
    <el-row style="margin-bottom: 0.5rem;">
      <el-col :span="24">
        <h1>
          <img src="../../../assets/northGlass.ico" alt="" style="float: left;max-width: 60px;max-height: 60px">
          天津北玻玻璃工业技术有限公司(THBB-QR7.1-01)
        </h1>
      </el-col>
    </el-row >
    <el-row style="text-align: left">
      <el-col :span="2" ></el-col>
      <el-col :span="8" >地址:天津宝坻区节能环保工业区天兴路西侧宝中道南侧</el-col>
      <el-col :span="2"></el-col>
      <el-col :span="5" >电话:022-59280088</el-col>
      <el-col :span="5" >传真:022-59280066</el-col>
    </el-row>
    <hr>
    <hr class="hr-border">
    <el-row >
      <el-col :span="24"><h3>玻璃加工单</h3></el-col>
    </el-row>
    <table >
      <tr>
        <th class="title-1">客户名称</th>
        <th colspan="3">{{data.order.customerName}}</th>
        <th class="title-1">工程名称</th>
        <th colspan="3">{{data.order.project}}</th>
      </tr>
      <tr>
        <th class="title-1">生产单号</th>
        <th>{{data.order.orderId}}</th>
        <th class="title-1">下单日期</th>
        <th>{{data.order.createTime}}</th>
        <th class="title-1">订单类型</th>
        <th>{{data.order.orderType}}</th>
        <th class="title-1">跟单员</th>
        <th>{{data.order.creator}}</th>
      </tr>
      <tr>
        <th>磨边</th>
        <th></th>
        <th>完工日期</th>
        <th>{{data.order.deliveryDate}}</th>
        <th>商标</th>
        <th>{{data.order.icon}}</th>
        <th>包装</th>
        <th>{{data.order.packType}}</th>
      </tr>
    </table>
    <table border="1" >
      <thead>
        <tr>
          <th class="title-1">玻璃图号</th>
          <th>彩釉图号</th>
          <th>编号</th>
          <th>规格(宽W*高H)</th>
          <th>片数</th>
          <th>面积</th>
          <th>延米</th>
          <th>交货日期</th>
          <th>序号</th>
          <th>箱架号</th>
          <th>备注1</th>
          <th>备注2</th>
          <th>磨边/备注/加工内容</th>
        </tr>
      </thead>
      <tbody v-for="(item,index) in data.orderProductDetail" :key="index">
        <tr>
          <td class="no-change-row">品&nbsp;&nbsp;种</td>
          <td colspan="9">{{item.productName}}</td>
          <td class="no-change-row">产品描述</td>
          <td colspan="3"></td>
        </tr>
        <tr v-for="(item1,index1) in item.productDetail" :key="index1">
          <td>{{}}</td>
          <td></td>
          <td></td>
          <td>{{item1.width +'*'+item1.height}}</td>
          <td>{{item1.quantity}}</td>
          <td>{{item1.grossArea}}</td>
          <td>{{item1.perimeter}}</td>
          <td></td>
          <td>{{item1.orderNumber}}</td>
          <td></td>
          <td></td>
          <td></td>
          <td></td>
        </tr>
        <tr>
          <td colspan="4">小计</td>
          <td>{{getQuantity(item.productDetail)}}</td>
          <td>{{getArea(item.productDetail)}}</td>
          <td>{{getPerimeter(item.productDetail)}}</td>
          <td colspan="6"></td>
        </tr>
      </tbody>
      <tfoot>
        <tr>
          <td colspan="4">总计</td>
          <td>{{grossNum.quantity}}</td>
          <td>{{grossNum.grossArea}}</td>
          <td>{{grossNum.perimeter}}</td>
          <td colspan="6"></td>
        </tr>
        <tr>
          <td colspan="13">
<!--            v-model=""-->
            <el-input
                v-model="data.order.processingNote"
                :rows="2"
                type="textarea"
                placeholder=""
                readonly
                autosize
                resize="none"
            />
          </td>
        </tr>
      </tfoot>
    </table>
    <el-row style="text-align: left ">
      <el-col :span="4">下单员:</el-col>
      <el-col :span="4">审核人:</el-col>
      <el-col :span="4">校对:</el-col>
    </el-row>
    <el-row style="text-align: left ">
      <el-col :span="4">创建时间:</el-col>
      <el-col :span="4">审核时间:</el-col>
      <el-col :span="4">打印时间:</el-col>
    </el-row>
  </div>
</template>
<style scoped>
#sheet{
  width: 100%;
  height: 100%;
  text-align: center;
}
h1,h3{
   left:0;
    right:0;
    top:0;
    bottom:0;
    margin:auto;
}
h1{
  font-size: 1.5rem;
}
h3{
  font-size: 1.2rem;
  font-weight: bolder;
}
table{
  border-collapse: collapse;
  border: 1px solid black;
  width: 100%;
}
th,.no-change-row {
  white-space: nowrap;
}
.title-1{
  width: 76px;
}
.hr-border{
  height: 2px;
  width: 100%;
  background-color: black;
  color: black;
}
</style>
north-glass-erp/northglass-erp/src/components/sd/order/PrintSheet2.vue
New file
@@ -0,0 +1,299 @@
<script setup>
import request from "@/utils/request"
import {computed, onMounted, ref} from "vue"
let props = defineProps({
  orderId:null
})
let data = ref({
  order:{
    processingNote:''
  },
  orderProductDetail:[]
})
const grossNum = ref({
  quantity: 0,
  grossArea: 0,
  perimeter: 0
})
const getData = () => {
  request.get(`/order/printOrderProductGlassDetail/${props.orderId}`).then(res => {
    data.value= res.data
    console.log(data.value)
    res.data.orderDetail.forEach(item => {
        grossNum.value.quantity += getQuantity(item.productDetail)
        grossNum.value.grossArea += getArea(item.productDetail)
        grossNum.value.perimeter += getPerimeter(item.productDetail)
    })
    grossNum.value.quantity = parseFloat(grossNum.value.quantity.toFixed(3))
    grossNum.value.grossArea = parseFloat(grossNum.value.grossArea.toFixed(3))
    grossNum.value.perimeter = parseFloat(grossNum.value.perimeter.toFixed(3))
  })
}
onMounted(() => {
  getData()
})
const getQuantity = (productList) => {
  let quantity = 0
  productList.forEach(item => {
    quantity += item.quantity
  })
  return parseFloat(quantity.toFixed(3))
}
const getArea = (productList) => {
  let area = 0
  productList.forEach(item => {
    area += item.grossArea
  })
  return parseFloat(area.toFixed(3))
}
const getPerimeter = (productList) => {
  let perimeter = 0
  productList.forEach(item => {
    perimeter += item.perimeter
  })
  return parseFloat(perimeter.toFixed(3))
}
</script>
<template>
  <div id="sheet">
    <el-row style="margin-bottom: 0.5rem;">
      <img src="../../../assets/northGlass.ico" alt="" style="max-width: 60px;max-height: 60px">
      <h1>天津北玻玻璃工业技术有限公司(THBB-QR7.1-01)</h1>
    </el-row >
    <el-row style="text-align: left">
      <el-col :span="2" ></el-col>
      <el-col :span="8" >地址:天津宝坻区节能环保工业区天兴路西侧宝中道南侧</el-col>
      <el-col :span="2"></el-col>
      <el-col :span="5" >电话:022-59280088</el-col>
      <el-col :span="5" >传真:022-59280066</el-col>
    </el-row>
    <hr>
    <hr class="hr-border">
    <el-row >
      <h3>玻璃加工单</h3>
    </el-row>
    <table>
      <tr>
        <th class="title-1">客户名称</th>
        <th colspan="3"></th>
        <th class="title-1">工程名称</th>
        <th colspan="3"></th>
      </tr>
      <tr>
        <th class="title-1">生产单号</th>
        <th></th>
        <th class="title-1">下单日期</th>
        <th></th>
        <th class="title-1">订单类型</th>
        <th></th>
        <th class="title-1">跟单员</th>
        <th></th>
      </tr>
      <tr>
        <th>磨边</th>
        <th></th>
        <th>完工日期</th>
        <th></th>
        <th>商标</th>
        <th></th>
        <th>包装</th>
        <th></th>
      </tr>
    </table>
    <table  >
      <thead>
      <tr>
        <th >序号</th>
        <th >图号</th>
        <th>彩釉图号</th>
        <th>编号</th>
        <th>规格(宽W*高H)</th>
        <th>片数</th>
        <th>面积</th>
        <th>延米</th>
        <th>交货日期</th>
        <th>序号</th>
        <th>箱架号</th>
        <th>备注1</th>
        <th>备注2</th>
        <th>磨边/备注/加工内容</th>
      </tr>
      </thead>
      <tbody v-for="(item,index) in data.orderDetail" :key="index">
      <tr>
        <td colspan="2" class="no-change-row">产品名称</td>
        <td colspan="8">{{item.productName}}</td>
        <td class="no-change-row">产品描述</td>
        <td colspan="3"></td>
      </tr>
      <template v-for="(item1,index1) in item.productDetail" :key="index1">
        <tr  >
          <td>{{item1.orderNumber}}</td>
          <td></td>
          <td></td>
          <td></td>
          <td>{{item1.width}}*{{item1.height}}</td>
          <td>{{item1.quantity}}</td>
          <td>{{item1.grossArea}}</td>
          <td>{{item1.perimeter}}</td>
          <td>{{item1.bendRadius}}</td>
          <td></td>
          <td></td>
          <td></td>
          <td></td>
          <td></td>
        </tr>
        <tr>
          <td></td>
          <td>标记</td>
          <td colspan="4">半成品名称</td>
          <td>下料-宽</td>
          <td>弧长</td>
          <td>下料-高</td>
          <td>拱高</td>
          <td colspan="4"></td>
        </tr>
          <tr  v-for="(item2,index2) in item1.orderGlassDetails" :key="index2" >
            <td></td>
            <td>{{ item2.technologyNumber }}</td>
            <td colspan="4"> {{item2.glassChild}}</td>
            <td>{{item2.childWidth}}</td>
            <td>{{item1.bendRadius}}</td>
            <td>{{item2.childHeight}}</td>
            <td>{{item2.archRise}}</td>
            <td colspan="4"></td>
          </tr>
      </template>
      <tr>
        <td colspan="5">小计</td>
        <td>{{getQuantity(item.productDetail)}}</td>
        <td>{{getArea(item.productDetail)}}</td>
        <td>{{getPerimeter(item.productDetail)}}</td>
        <td colspan="6"></td>
      </tr>
      </tbody>
      <tfoot>
      <tr>
        <td colspan="5">总计</td>
        <td>{{grossNum.quantity}}</td>
        <td>{{grossNum.grossArea}}</td>
        <td>{{grossNum.perimeter}}</td>
        <td colspan=""></td>
      </tr>
      <tr>
        <td colspan="14">
          <!--            v-model=""-->
          <el-input
              v-model="data.order.processingNote"
              :rows="2"
              type="textarea"
              placeholder=""
              readonly
              autosize
              resize="none"
          />
        </td>
      </tr>
      </tfoot>
    </table>
    <el-row style="text-align: left ">
      <el-col :span="4">下单员:</el-col>
      <el-col :span="4">审核人:</el-col>
      <el-col :span="4">校对:</el-col>
    </el-row>
    <el-row style="text-align: left ">
      <el-col :span="4">创建时间:</el-col>
      <el-col :span="4">审核时间:</el-col>
      <el-col :span="4">打印时间:</el-col>
    </el-row>
  </div>
</template>
<style scoped>
#sheet{
  width: 100%;
  height: 100%;
  text-align: center;
}
h1,h3{
  left:0;
  right:0;
  top:0;
  bottom:0;
  margin:auto;
}
h1{
  font-size: 1.5rem;
}
h3{
  font-size: 1.2rem;
  font-weight: bolder;
}
table{
  border-collapse: collapse;
  border: 1px solid black;
  width: 100%;
}
table, th, td {
  border: 1px solid black;
  border-collapse: collapse;
}
th,.no-change-row {
  white-space: nowrap;
}
.title-1{
  width: 76px;
}
.hr-border{
  height: 2px;
  width: 100%;
  background-color: black;
  color: black;
}
</style>
north-glass-erp/northglass-erp/src/components/sd/order/PrintSheet3.vue
New file
@@ -0,0 +1,16 @@
<script setup>
</script>
<template>
</template>
<style scoped>
</style>
north-glass-erp/northglass-erp/src/components/sd/product/BasicTable.vue
@@ -28,8 +28,8 @@
<!--左边固定显示的插槽-->
      <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 }">
@@ -52,9 +52,10 @@
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:{
@@ -154,7 +155,7 @@
    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)
@@ -172,7 +173,7 @@
      switch (code) {
        case 'checkList': {
          if($grid.getCheckboxRecords().length==0){
            VXETable.modal.message( '请选择一条数据!')
            VXETable.modal.message( t('searchOrder.msg'))
            return
          }
          emit('getCheckList',$grid.getCheckboxRecords())
@@ -188,7 +189,7 @@
        }
        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': {
north-glass-erp/northglass-erp/src/components/sd/product/GlassType.vue
@@ -3,6 +3,8 @@
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([])
@@ -25,7 +27,7 @@
        v-model="productGlassTypeStore.GlassType"
        :options="options"
        clearable
        placeholder="玻璃类别"
        :placeholder="$t('orderBasicData.glassCategory')"
    />
  </div>
</template>
north-glass-erp/northglass-erp/src/lang/zh.js
@@ -56,6 +56,7 @@
        reportForms:'报表',
        print:'打印',
        export:'导出',
        empty:'清空',
        msg:{
            max255:"最多输入255个字符",
            range99999Dec2:
@@ -240,7 +241,7 @@
        msgDelete:'已审核的订单不能删除',
        msgDeleteFail:'删除失败',
        msgDeleteSuccess:'删除成功',
        deleteConfirm:'确认删除订单?',
        deleteConfirm:'确认删除?',
        orderType:'订单类型',
        processFlows:'流程卡进度',
        copy:'复制订单',
@@ -855,7 +856,21 @@
        operateType :'别称',
        type :'类型',
        takeOut :'领出',
    },
    components:{
        addNewSignature :'新增标签名',
        addColumnNames :'新增列名',
        message :'请输入20个字符以内的且不为空的字符',
        activeName :'标签列表',
        orderHeader :'订单表头',
        finishedProduct :'成品',
        semiFinishedProducts :'半成品',
        pleaseClickToSelectARowFirst :'请先单击选择行',
        otherProcessing :'其他加工',
        inconsistentParameters :'必填,参数不一致',
        strip :'条',
        exportSelected :'导出选中',
    }
}
north-glass-erp/northglass-erp/src/main.js
@@ -11,6 +11,7 @@
import VXETable from 'vxe-table'
import 'vxe-table/lib/style.css'
import i18n from "@/lang"
import print from 'vue3-print-nb'
@@ -24,5 +25,6 @@
    locale: zhCn,
})
app.use(i18n)
app.use(print)
app.mount('#app')
north-glass-erp/northglass-erp/src/stores/sd/companyInfo.js
New file
@@ -0,0 +1,14 @@
import {defineStore} from "pinia";
export default defineStore('companyInfo', {
    state: () => ({
        companyName: '天津北玻玻璃工业技术有限公司',
        address:'天津宝坻区节能环保工业区天兴路西侧宝中道南侧',
        telephone:'022-59280088',
        fax:'022-59280066',
    }),
    actions: {
        //
    }
})
north-glass-erp/northglass-erp/src/views/mm/mainIngredient/SelectIngredients.vue
@@ -236,7 +236,7 @@
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮
  id: 'CustomerList',
  id: 'SelectIngredients',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
north-glass-erp/northglass-erp/src/views/mm/mainIngredientStock/CreateOutBound.vue
@@ -85,7 +85,7 @@
let materialStore= ref([])
let arr = [
  {type:'expand',fixed:"left",slots: { content:'content' },width: '60'},
  //{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 },
@@ -418,7 +418,7 @@
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮
  id: 'CustomerList',
  id: 'CreateOutBound',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
north-glass-erp/northglass-erp/src/views/mm/mainIngredientStock/MaterialOutbound.vue
@@ -173,7 +173,7 @@
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮
  id: 'CustomerList',
  id: 'MaterialOutbound',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
north-glass-erp/northglass-erp/src/views/mm/mainIngredientStock/ReturnToStorage.vue
@@ -177,7 +177,7 @@
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮
  id: 'CustomerList',
  id: 'ReturnToStorage',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
north-glass-erp/northglass-erp/src/views/mm/mainIngredientStock/ReturnToStorageCreate.vue
@@ -444,7 +444,7 @@
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮
  id: 'OrderList',
  id: 'ReturnToStorageCreate',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
north-glass-erp/northglass-erp/src/views/mm/mainIngredientStock/SelectIngredientsStock.vue
@@ -259,7 +259,7 @@
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮
  id: 'CustomerList',
  id: 'SelectIngredientsStock',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
@@ -442,7 +442,7 @@
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮
  id: 'CustomerList',
  id: 'SelectIngredientsStocks',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/CreateProductStock.vue
@@ -177,7 +177,7 @@
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮
  id: 'CustomerList',
  id: 'CreateProductStock',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/FinishedGoodsIssue.vue
@@ -261,7 +261,7 @@
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮
  id: 'CustomerList',
  id: 'FinishedGoodsIssue',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/FinishedProductOut.vue
@@ -181,7 +181,7 @@
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮
  id: 'CustomerList',
  id: 'FinishedProductOut',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/FinishedProductReturn.vue
@@ -29,7 +29,7 @@
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮
  id: 'CustomerList',
  id: 'FinishedProductReturn',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/FinishedProductRework.vue
@@ -258,7 +258,7 @@
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮
  id: 'CustomerList',
  id: 'FinishedProductRework',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/OrderAllocation.vue
@@ -172,7 +172,7 @@
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮
  id: 'CustomerList',
  id: 'OrderAllocation',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/ProductStockList.vue
@@ -165,7 +165,7 @@
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮
  id: 'CustomerList',
  id: 'ProductStockList',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/ReworkRecord.vue
@@ -168,7 +168,7 @@
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮
  id: 'CustomerList',
  id: 'ReworkRecord',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/StorageRecord.vue
@@ -178,7 +178,7 @@
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮
  id: 'CustomerList',
  id: 'StorageRecord',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/TakeOutRecord.vue
@@ -168,7 +168,7 @@
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮
  id: 'CustomerList',
  id: 'TakeOutRecord',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/TransferRecord.vue
@@ -172,7 +172,7 @@
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮
  id: 'CustomerList',
  id: 'TransferRecord',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
north-glass-erp/northglass-erp/src/views/mm/stockReport/WarehouseReport.vue
@@ -14,7 +14,7 @@
    {field: 'operationOrderNumber', width:'150', title: t('productStock.operationOrderNumber'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderId', width: '150',title: t('order.orderId'),showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operationNumber', width: '100',title: t('order.OrderNum'), showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operateType', width: '120',title:'类型',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operateType', width: '120',title:t('mainBasicData.type'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'quantity', width: '140',title: t('order.quantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.productId',width: '100', title: t('order.productId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.productName',width: '140', title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
@@ -25,7 +25,7 @@
    {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: t('processCard.processId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'type', width:'140', title: t('productStock.领出类型'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'type', width:'140', title: t('productStock.typeClaim'),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' }},
north-glass-erp/northglass-erp/src/views/pp/Replenish/AddReplenish.vue
@@ -58,7 +58,7 @@
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮
  id: 'CustomerList',
  id: 'AddReplenish',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
north-glass-erp/northglass-erp/src/views/pp/Replenish/SelectReplenish.vue
@@ -84,7 +84,7 @@
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮
  id: 'CustomerList',
  id: 'SelectReplenish',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
north-glass-erp/northglass-erp/src/views/pp/rework/AddRework.vue
@@ -68,7 +68,7 @@
  align: 'center',//文字居中
  stripe: true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true, height: 30},//鼠标移动或选择高亮
  id: 'CustomerList',
  id: 'AddRework',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
north-glass-erp/northglass-erp/src/views/pp/rework/SelectRework.vue
@@ -92,7 +92,7 @@
  align: 'center',//文字居中
  stripe: true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true, height: 30},//鼠标移动或选择高亮
  id: 'CustomerList',
  id: 'SelectRework',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
north-glass-erp/northglass-erp/src/views/sd/customer/CreateCustomer.vue
@@ -58,7 +58,7 @@
    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
@@ -67,7 +67,7 @@
  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'))
north-glass-erp/northglass-erp/src/views/sd/customer/SelectCustomer.vue
@@ -172,7 +172,7 @@
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮
  id: 'CustomerList',
  id: 'SelectCustomer',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
north-glass-erp/northglass-erp/src/views/sd/customer/SelectCustomerOrder.vue
@@ -164,7 +164,7 @@
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮
  id: 'OrderList',
  id: 'SelectCustomerOrder',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
north-glass-erp/northglass-erp/src/views/sd/delivery/CreateDelivery.vue
@@ -34,7 +34,9 @@
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]]
@@ -253,7 +255,7 @@
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮
  id: 'OrderList',
  id: 'CreateDelivery',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
@@ -290,7 +292,7 @@
  },//表头参数
  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},
north-glass-erp/northglass-erp/src/views/sd/delivery/SelectDelivery.vue
@@ -202,7 +202,7 @@
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮
  id: 'OrderList',
  id: 'SelectDelivery',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
north-glass-erp/northglass-erp/src/views/sd/delivery/SelectOrderList.vue
@@ -159,7 +159,7 @@
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮
  id: 'OrderList',
  id: 'SelectOrderList',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
north-glass-erp/northglass-erp/src/views/sd/order/CreateOrder.vue
@@ -58,8 +58,8 @@
  otherMoneyRemarks:'',
  processingNote:'',
  createOrder:0,
  creatorId:userStore.user.userName,
  creator:userStore.user.userId,
  creatorId:userStore.user.userId,
  creator:userStore.user.userName,
})
//定义接收加载表头下拉数据
const titleSelectJson = ref({
@@ -139,7 +139,7 @@
  },//表头参数
  columns:[
    {type: 'seq',fixed:"left", title: t('basicData.Number'), width: 80 },
    // {field: 'buildingNumber',width:120,  title: '楼号',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter'}, sortable: true,filterMethod:filterChanged},
    {field: 'buildingNumber',width:120,  title: '楼号',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter'}, sortable: true,filterMethod:filterChanged},
    {field: 'productId',width:140,  title: t('order.productId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'productName',width:300,  title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'price',width:140,  title: t('order.price'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
@@ -204,6 +204,16 @@
            return new Error(t('basicData.msg.greater0'))
          }
        }}
    ],
    bendRadius:[
      {
        validator ({ cellValue }) {
          const regex = /^(0(\.\d{1,2})?|([1-9]\d{0,4})(\.\d{1,2})?|99999(\.9{1,2})?)$/
          if (cellValue && !regex.test(cellValue)) {
            return new Error(t('basicData.msg.range99999Dec2'))
          }
        }
      }
    ],
    width:[
      {
@@ -691,7 +701,7 @@
// 审核订单
const reviewOrder = (state) => {
  request.post(`/order/reviewOrderById/${titleUploadData.value.orderId}/${state}`).then(res =>{
  request.post(`/order/reviewOrderById/${titleUploadData.value.orderId}/${state}/${userStore.user.userId}/${userStore.user.userName}`).then(res =>{
    if(res.code==200){
      gridOptions.toolbarConfig.buttons[2].disabled = true
      if(state==2){
@@ -1188,4 +1198,6 @@
    width: 100%;
  }
</style>
north-glass-erp/northglass-erp/src/views/sd/order/SelectOrder.vue
@@ -1,25 +1,28 @@
<script setup>
  import {Search} from "@element-plus/icons-vue"
  import {useRouter} from "vue-router"
  import {computed, nextTick, onUnmounted, reactive, ref} from "vue"
  import ProcessCardProgress from '@/views/pp/report/ProcessCardProgress.vue'
  import {computed, reactive, ref} from "vue"
  import request from "@/utils/request"
  import deepClone from "@/utils/deepClone"
  import {ElMessage} from "element-plus"
  import {VXETable} from "vxe-table"
  import {Edit, VXETable} from "vxe-table"
  import  useUserInfoStore from '@/stores/userInfo'
  import footSum from "@/hook/footSum"
  import OrderDetail from "@/components/sd/order/OrderDetail.vue"
  import OrderCraftDetail from "@/components/sd/order/OrderCraftDetail.vue"
  import OrderProcess from "@/components/sd/order/OrderProcess.vue";
  import OrderProcess from "@/components/sd/order/OrderProcess.vue"
  import PrintSheet1 from "@/components/sd/order/PrintSheet1.vue"
  import PrintSheet2 from "@/components/sd/order/PrintSheet2.vue"
  import PrintSheet3 from "@/components/sd/order/PrintSheet3.vue"
  import {useI18n} from "vue-i18n"
  import {columnDrop2, sortable2} from "@/hook/columnMove";
  import {Download, Printer} from "@element-plus/icons-vue/global";
  const { t } = useI18n()
  const userStore = useUserInfoStore()
  const tabsValue=ref('1')
  const router = useRouter()
  let rowClickIndex = ref(null)
  const dialogTableVisible = ref(false)
  let sheetIndex = ref(-1)
  let orderType = ref("2")
  let selectDate = ref(["",""])
  let filterData = ref({})
@@ -30,6 +33,7 @@
    dataTotal : 0,
    pageSize : 100
  })
  const xGrid = ref()
  const gridOptions = reactive({
@@ -66,6 +70,15 @@
          [
            { code: 'copy', name: t('searchOrder.copy'), prefixIcon: 'vxe-icon-copy', visible: true},
            { code: 'copyTitle', name: t('searchOrder.copyTitle'), prefixIcon: 'vxe-icon-copy', visible: true},
            {
              prefixIcon: 'vxe-icon-print',
              name: '加工单',
              children: [
                { code: 'sheet1', name: '横版-普通' },
                { code: 'sheet2', name: '横版-多层明细' },
                { code: 'sheet3', name: '横版-多层弯钢' }
              ]
            }
           // { code: 'getProcessList', name: t('searchOrder.processFlows'), prefixIcon: 'vxe-icon-file-txt', visible: true}
          ]
        ]
@@ -158,12 +171,31 @@
      const $grid = xGrid.value
      if ($grid) {
        switch (menu.code) {
          case 'getProcessList': {
          case 'sheet1': {
            if(rowClickIndex.value===null){
              ElMessage.warning(t('searchOrder.msgList.checkOrder'))
              return
            }
            dialogTableVisible.value = true
            sheetIndex.value=1
            break
          }
          case 'sheet2': {
            if(rowClickIndex.value===null){
              ElMessage.warning(t('searchOrder.msgList.checkOrder'))
              return
            }
            dialogTableVisible.value = true
            sheetIndex.value=2
            break
          }
          case 'sheet3': {
            if(rowClickIndex.value===null){
              ElMessage.warning(t('searchOrder.msgList.checkOrder'))
              return
            }
            dialogTableVisible.value = true
            sheetIndex.value=3
            break
          }
          case 'copy': {
@@ -188,6 +220,10 @@
                orderId:rowClickIndex.value.orderId,
                type:'copyTitle'
              }})
            break
          }
          case 'print':{
            break
          }
@@ -311,20 +347,9 @@
  // let initTime = null
  // nextTick(() => {
  //   // 加载完成之后在绑定拖动事件
  //   initTime = setTimeout(() => {
  //     columnDrop2(xGrid.value)
  //   }, 500)
  // })
  //
  // onUnmounted(() => {
  //   clearTimeout(initTime)
  //   if (sortable2) {
  //     sortable2.destroy()
  //   }
  // })
  const printContent = ref({
    id: 'child',
  })
</script>
@@ -455,16 +480,25 @@
    </div>
<!--    <el-dialog
    <el-dialog
        id="print"
        v-model="dialogTableVisible"
        destroy-on-close
        :title="$t('searchOrder.processFlows')"
        style="width: 80%;height:75% ">
      <ProcessCardProgress
          :orderId="rowClickIndex.orderId"
          style="width: 100%;height: 100%" />
    </el-dialog>-->
        style="width: 75%;height:75% "
    >
      <template #header="{ close, titleId, titleClass }">
        <el-button v-print="printContent"  :icon="Printer" circle />
        <el-button  :icon="Download" circle />
      </template>
      <print-sheet1 id="child"  v-if="sheetIndex===1" :orderId="rowClickIndex.orderId" />
      <print-sheet2 id="child" v-else-if="sheetIndex===2" :orderId="rowClickIndex.orderId" />
      <print-sheet3 id="child" v-else :orderId="rowClickIndex.orderId" />
    </el-dialog>
  </div>
</template>
@@ -477,5 +511,13 @@
  width: 100%;
  height: 100%;
}
:deep(#print .el-dialog__body){
  height: 85%;
  width: 100%;
  overflow-y: auto;
}
</style>
north-glass-erp/src/main/java/com/example/erp/controller/sd/OrderController.java
@@ -90,9 +90,11 @@
    }
    @ApiOperation("审核订单")
    @SaCheckPermission("createOrder.review")
    @PostMapping("/reviewOrderById/{id}/{status}")
    public Result reviewOrderById(@PathVariable String id,@PathVariable Integer status)  {
        return  Result.seccess(orderService.reviewOrderById(id,status));
    @PostMapping("/reviewOrderById/{id}/{status}/{userId}/{userName}")
    public Result reviewOrderById(@PathVariable String id,
                                  @PathVariable Integer status
                                      ,@PathVariable String userId,@PathVariable String userName)  {
        return  Result.seccess(orderService.reviewOrderById(id,status,userId,userName));
    }
    @ApiOperation("审核工艺")
@@ -151,5 +153,19 @@
        return   Result.seccess(orderService.getOrderProductDetailTag(orderId));
    }
    @ApiOperation("订单加工单打印-成品")
    @GetMapping ("/printOrderProductDetail/{orderId}")
    public Result printOrderProductDetail(@PathVariable String orderId)  {
        return   Result.seccess(orderService.printOrderProductDetail(orderId));
    }
    @ApiOperation("订单加工单打印-小片明细")
    @GetMapping ("/printOrderProductGlassDetail/{orderId}")
    public Result printOrderProductGlassDetail(@PathVariable String orderId)  {
        return   Result.seccess(orderService.printOrderProductGlassDetail(orderId));
    }
}
north-glass-erp/src/main/java/com/example/erp/entity/sd/OrderDetail.java
@@ -10,6 +10,7 @@
import lombok.NoArgsConstructor;
import java.time.LocalDate;
import java.util.List;
@Data
public class OrderDetail {
@@ -52,6 +53,9 @@
    private DeliveryDetail deliveryDetail;
    @TableField(select = false,exist= false)
    private FinishedGoodsInventory finishedGoodsInventory;
    @TableField(select = false,exist= false)
    private List<OrderGlassDetail> orderGlassDetails;
    @TableField(exist= false)
    private String levelOne;
    @TableField(exist= false)
north-glass-erp/src/main/java/com/example/erp/mapper/sd/OrderDetailMapper.java
@@ -30,4 +30,10 @@
    List<OrderDTO> exportOrderProductSummary(List<LocalDate> dates);
    Map<String, String> getOrderProductDetailTag(String orderId);
    List<Map<String,Object>> getOrderProductDistinctById(String orderId);
    List<OrderDetail> getOrderProductByProductId(Object productId, String orderId);
}
north-glass-erp/src/main/java/com/example/erp/mapper/sd/OrderMapper.java
@@ -2,11 +2,9 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.erp.entity.sd.Order;
import com.example.erp.entity.sd.Product;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.time.LocalDate;
import java.util.List;
import java.util.Map;
@@ -19,7 +17,7 @@
    List<Order> getOrderList(Integer offset, Integer pageSize, String startDate, String endDate, Order order, Integer orderType);
    Map<String,Integer> getPageTotal(Integer offset, Integer pageSize, String startDate, String endDate, Order order , Integer orderType);
    boolean reviewOrderById(String id,Integer status);
    boolean reviewOrderById(String id, Integer status, String userId, String userName);
    boolean reviewProcessById(String id, Integer status);
north-glass-erp/src/main/java/com/example/erp/service/sd/OrderService.java
@@ -15,7 +15,6 @@
import com.example.erp.exception.ServiceException;
import com.example.erp.mapper.sd.*;
import com.example.erp.service.userInfo.SysErrorService;
import com.sun.org.apache.regexp.internal.RE;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
@@ -236,12 +235,12 @@
        return map;
    }
    //订单审核
    public boolean reviewOrderById(String id,Integer status) {
    public boolean reviewOrderById(String id, Integer status, String userId, String userName) {
        Order order = orderMapper.selectOne(new QueryWrapper<Order>().eq("order_id",id));
        if(order.getProcessReview()!=2){
            throw  new ServiceException(Constants.Code_600,"该订单还未审核");
        }
        return orderMapper.reviewOrderById(id,status);
        return orderMapper.reviewOrderById(id,status,userId,userName);
    }
    //工艺审核界面审核更新数据
    public boolean reviewProcessById(String id, Integer status,List<OrderGlassDetail> orderGlassDetails) {
@@ -369,4 +368,76 @@
    public List<OrderGlassDetail> getOrderCraftDetailById(String id) {
         return orderGlassDetailMapper.selectOrderGlassDetailByOrderId(id);
    }
    public Object printOrderProductDetail(String orderId) {
        List<Map<String,Object>> orderProductDistinct = orderDetailMapper.getOrderProductDistinctById(orderId);
        List<Map<String,Object>> orderProductDetail = new ArrayList<>();
        orderProductDistinct.forEach(map->{
            Map<String,Object> orderProductDetailMap = new HashMap<>();
            orderProductDetailMap.put("productId",map.get("productId"));
            orderProductDetailMap.put("productName",map.get("productName"));
            List<OrderDetail> orderDetails = orderDetailMapper.getOrderProductByProductId(map.get("productId"),orderId);
            orderDetails.forEach(orderDetail->{
                orderDetail.setGrossArea(
                        Double.parseDouble(String.format("%.3f",
                                orderDetail.getWidth()*orderDetail.getHeight()/1000000)
                                ) * orderDetail.getQuantity()
                );
            });
            orderProductDetailMap.put("productDetail",orderDetails);
            orderProductDetail.add(orderProductDetailMap);
        });
        Map<String,Object> returns = new HashMap<>();
        returns.put("orderProductDetail",orderProductDetail);
        returns.put("order",orderMapper.selectOne(new QueryWrapper<Order>().eq("order_id",orderId)));
        return returns;
    }
    public Object printOrderProductGlassDetail(String orderId) {
        Map<String,Object> returns = new HashMap<>();
        returns.put("order",orderMapper.selectOne(new QueryWrapper<Order>().eq("order_id",orderId)));
        List<Map<String,Object>> orderProductDistinct = orderDetailMapper.getOrderProductDistinctById(orderId);
        List<Map<String,Object>> orderProductDetail = new ArrayList<>();
        orderProductDistinct.forEach(map->{
            Map<String,Object> orderProductDetailMap = new HashMap<>();
            orderProductDetailMap.put("productId",map.get("productId"));
            orderProductDetailMap.put("productName",map.get("productName"));
            List<OrderDetail> orderDetails = orderDetailMapper.getOrderProductByProductId(map.get("productId"),orderId);
            orderDetails.forEach(orderDetail->{
                orderDetail.setGrossArea(
                        Double.parseDouble(String.format("%.3f",
                                orderDetail.getWidth()*orderDetail.getHeight()/1000000)
                        ) * orderDetail.getQuantity()
                );
                List<OrderGlassDetail> orderGlassDetails =
                        orderGlassDetailMapper.selectList(
                                new QueryWrapper<OrderGlassDetail>().
                                        eq("order_id",orderId).
                                        eq("order_number",orderDetail.getOrderNumber())
                        );
                orderDetail.setOrderGlassDetails(orderGlassDetails);
            });
            orderProductDetailMap.put("productDetail",orderDetails);
            orderProductDetail.add(orderProductDetailMap);
        });
        returns.put("orderDetail",orderProductDetail);
        return returns;
    }
}
north-glass-erp/src/main/resources/mapper/sd/OrderDetailMapper.xml
@@ -764,5 +764,27 @@
        group by a.glass_child,a.child_width,a.child_height
    </select>
    <select id="getOrderProductDistinctById">
        select
            (a.product_id) as 'productId',
                    a.product_name as 'productName',
                    a.order_number as 'orderNumber'
        from order_detail as a
        where a.order_id = #{orderId}
        group by a.product_id
    </select>
    <select id="getOrderProductByProductId">
        select
            *
        from order_detail as a
        where a.order_id = #{orderId}
        and a.product_id = #{productId}
        order by id;
    </select>
</mapper>
north-glass-erp/src/main/resources/mapper/sd/OrderMapper.xml
@@ -181,7 +181,10 @@
    </select>
    
    <update id="reviewOrderById">
        update `order` set order_review = #{status} where order_id = #{id}
        update `order` set order_review = #{status},
                           verifier_id = #{userId},
                           verifier = #{userName}
                           where order_id = #{id}
    </update>
    <update id="reviewProcessById">
north-glass-erp/src/main/resources/mapper/sd/ProductMapper.xml
@@ -43,25 +43,25 @@
        left join basic_glass_type bgt on bgt.type_id = a.type_id
        <where>
            <if test="glassTypeId != null and glassTypeId != ''">
                and a.type_id regexp #{glassTypeId}
                and a.type_id like concat('%',#{glassTypeId},'%')
            </if>
            <if test="product.id != null and product.id != ''">
                and a.id regexp #{product.id}
                and a.id like like concat('%',#{product.id},'%')
            </if>
            <if test="product.productName != null and product.productName != ''">
                and a.product_name regexp #{product.productName}
                and a.product_name like concat('%',#{product.productName},'%')
            </if>
            <if test="product.basicGlassType.typeName != null and product.basicGlassType.typeName!= ''">
                and bgt.type_name regexp #{product.basicGlassType.typeName}
                and bgt.type_name like concat('%',#{product.basicGlassType.typeName},'%')
            </if>
            <if test="product.query != null and product.query != ''">
                and a.query regexp #{product.query}
                and a.query like concat('%',#{product.query},'%')
            </if>
            <if test="product.creator != null and product.creator != ''">
                and a.creator regexp #{product.creator}
                and a.creator like concat('%',#{product.creator},'%')
            </if>
            <if test="product.createTime != null and product.createTime != ''">
                and date(a.create_time) regexp #{product.createTime}
                and date(a.create_time) like concat('%',#{product.createTime},'%')
            </if>
        </where>