廖井涛
8 天以前 bad9ff47e7ed4965c6b3e93aebc38f28e97cca68
north-glass-erp/northglass-erp/src/views/sd/delivery/SelectOrderList.vue
@@ -1,7 +1,7 @@
<script setup>
import {Search} from "@element-plus/icons-vue"
import {useRouter} from "vue-router"
import {reactive, ref} from "vue";
import {onMounted, reactive, ref} from "vue";
import request from "@/utils/request"
import deepClone from "@/utils/deepClone"
import VXETable from "vxe-table";
@@ -19,6 +19,15 @@
const userid = userStore.user.userId
let produceList = ref([])
const props = defineProps({
  customerId: null,
  project: null,
  excludeOrderIds: null
})
const emit = defineEmits(['selectOrders'])
const getTableRow = (row,type) =>{
  switch (type) {
    case 'edit' :{
@@ -27,7 +36,6 @@
      break
    }
    case 'delete':{
      alert('我接收到子组件传送的删除信息')
      break
    }
  }
@@ -53,11 +61,6 @@
//筛选条件,有外键需要先定义明细里面的数据
let filterData = ref({
  finishedGoodsInventory:{
    quantityAvailable:'',
  },
})
let selectDate = ref(["",""])
@@ -69,23 +72,45 @@
})
//第一次调用
request.post(`/Delivery/getSelectOrderInventory/1/${total.pageSize}/${orderInfo.selectOrderListDate}`,filterData.value).then((res) => {
  if(res.code==200){
    total.dataTotal = res.data.total.total*1
    total.pageTotal= res.data.total.pageTotal
    orderInfo.selectOrderListDate = res.data.selectDate
    pageNum.value=1
    produceList = deepClone(res.data.data)
    xGrid.value.loadData(produceList)
    gridOptions.loading=false
  }else{
    ElMessage.warning(res.msg)
    router.push("/login")
// 第一次调用,修改为带筛选条件
const fetchOrders = async () => {
  await request.post(`/delivery/getSelectOrderInventory/${pageNum.value}/${total.pageSize}/${orderInfo.selectOrderListDate}`, filterData.value).then((res) => {
    if(res.code==200){
      total.dataTotal = res.data.total.total*1
      total.pageTotal= res.data.total.pageTotal
      orderInfo.selectOrderListDate = res.data.selectDate
      produceList = deepClone(res.data.data)
      xGrid.value.loadData(produceList)
      gridOptions.loading=false
    }else{
      ElMessage.warning(res.msg)
      router.push("/login")
    }
  })
}
onMounted(async () => {
  if (props.customerId !== undefined) {
    filterData.value.customerId = props.customerId
    filterData.value.project = props.project
    filterData.value.excludeOrderIds = props.excludeOrderIds
    gridOptions.toolbarConfig.buttons[0].visible = false
    await fetchOrders()
  } else {
    gridOptions.toolbarConfig.buttons[1].visible = false
    filterData.value = orderInfo.searchOrderFilter.data
    await fetchOrders()
    orderInfo.searchOrderFilter.list.forEach(item => {
      xGrid.value.getColumnByField(item.field).filters = item.column.filters
    })
  }
})
})
const changeFilterEvent = (event, option, $panel,) => {
  // 手动触发筛选
@@ -105,7 +130,17 @@
  }else{
    filterData.value[column.property] = value
  }
  request.post(`/Delivery/getSelectOrderInventory/1/${total.pageSize}/${orderInfo.selectOrderListDate}`,filterData.value).then((res) => {
  if(props.customerId!==undefined){
    filterData.value.customerId = props.customerId
    filterData.value.project = props.project
    filterData.value.excludeOrderIds = props.excludeOrderIds
    gridOptions.toolbarConfig.buttons[0].visible  = false
  }else{
    gridOptions.toolbarConfig.buttons[1].visible  = false
  }
  request.post(`/delivery/getSelectOrderInventory/1/${total.pageSize}/${orderInfo.selectOrderListDate}`,filterData.value).then((res) => {
    if(res.code==200){
      total.dataTotal = res.data.total.total*1
@@ -114,6 +149,13 @@
      pageNum.value=1
      produceList = deepClone(res.data.data)
      xGrid.value.loadData(produceList)
      //不是弹窗界面
      if(props.customerId===undefined){
        orderInfo.searchOrderFilter.list = xGrid.value.getCheckedFilters()
        orderInfo.searchOrderFilter.data = filterData.value
      }
      gridOptions.loading=false
    }else{
      ElMessage.warning(res.msg)
@@ -123,7 +165,7 @@
}
const selectOrderList = ()=>{
  request.post(`/Delivery/getSelectOrderInventory/${pageNum.value}/${total.pageSize}/${orderInfo.selectOrderListDate}`,filterData.value).then((res) => {
  request.post(`/delivery/getSelectOrderInventory/${pageNum.value}/${total.pageSize}/${orderInfo.selectOrderListDate}`,filterData.value).then((res) => {
    if(res.code==200){
      if (res.data.total!=null){
@@ -131,6 +173,7 @@
        total.pageTotal= res.data.total.pageTotal
      }
      produceList = deepClone(res.data.data)
      orderInfo.selectOrderListDate = res.data.selectDate
      xGrid.value.loadData(produceList)
      gridOptions.loading=false
    }else{
@@ -142,7 +185,7 @@
const changeDate =  ()=>{
  pageNum.value=1
  selectOrderList()
  fetchOrders()
}
//页脚跳转
@@ -150,7 +193,7 @@
  total.pageTotal = pageSize
  pageNum.value=currentPage
  selectOrderList()
  fetchOrders()
}
@@ -201,7 +244,7 @@
    {field: 'customerId',width:120,  title: t('customer.customerNumber'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'customerName',width:120,  title: t('customer.customerName'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'quantity',width:120,  title: t('order.quantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'finishedGoodsInventory.quantityAvailable',width:120,  title: t('delivery.availableStock'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'finishedGoodsInventory.quantityAvailable',width:120,  title: t('delivery.availableStock'), sortable: true},
    {field: 'project',width:120,  title: t('order.project'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'batch',width:120,  title: t('order.batch'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'money',width:120,   title: t('order.money'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
@@ -215,7 +258,8 @@
  ],//表头按钮
  toolbarConfig: {
    buttons: [
      {'code': 'add', 'name': t('delivery.delivery'),status: 'primary',icon: 'vxe-icon-add'}
      {'code': 'add', 'name': t('delivery.delivery'),status: 'primary',icon: 'vxe-icon-add'},
      {'code': 'update', 'name': t('delivery.delivery'),status: 'primary',icon: 'vxe-icon-add'}
    ],
    /*import: false,
   export: true,
@@ -282,6 +326,37 @@
          router.push({path: '/main/delivery/createDelivery', query: { orderId: order_id }})
          break
        }
        case 'update': {
          const selectRecords = $grid.getCheckboxRecords()
          if (selectRecords.length === 0) {
            ElMessage.warning(t('productStock.unselectedData'))
            return
          }
          // 验证所选订单是否符合条件(虽然已筛选,但二次验证更安全)
          const customerIdArray = selectRecords.map(item => item.customerId)
          const projectArray = selectRecords.map(item => item.project?.trim() || '')
          if(!isAllEqual(customerIdArray)){
            ElMessage.warning(t('delivery.pleaseSelectTheSameCustomerOrder'))
            return
          }
          if(!isAllEqual(projectArray)){
            ElMessage.warning(t('delivery.pleaseSelectTheSameCustomerProject'))
            return
          }
          const simpleOrders = selectRecords.map(order => ({
            orderId: order.orderId,
            customerId: order.customerId,
            project: order.project,
            // 可补充其他需要的主订单字段
          }));
          // 通过事件返回给父组件
          emit('select-orders', simpleOrders);
          break
        }
      }
    }
  }
@@ -319,7 +394,7 @@
    </div>
    <div class="main-table">
      <vxe-grid
          max-height="100%"
          height="100%"
          class="mytable-scrollbar"
          @filter-change="filterChanged"
          ref="xGrid"
@@ -338,7 +413,16 @@
        </template>
        <template #state="{ row,column}">
          <el-checkbox @click.native.prevent :indeterminate="row[column.field]===1" :checked="row[column.field]===2"/>
          <el-checkbox
              v-if="row[column.field] === 2"
              @click.native.prevent
              :indeterminate="row[column.field]===1"
              :checked="true"/>
          <el-checkbox
              v-else
              @click.native.prevent
              :indeterminate="row[column.field]===1"
              :checked="false"/>
        </template>
        <!--左边固定显示的插槽-->
@@ -350,7 +434,11 @@
        <template #num1_filter="{ column, $panel }">
          <div>
            <div v-for="(option, index) in column.filters" :key="index">
              <input type="type" v-model="option.data" @input="changeFilterEvent($event, option, $panel)"/>
              <input
                  type="type"
                  v-model="option.data"
                  @keyup.enter.native="$panel.confirmFilter()"
                  @input="changeFilterEvent($event, option, $panel)"/>
            </div>
          </div>
        </template>