chenlu
2024-12-12 f46f83ab2ce1bd2f34c81cb5750e6d5ce6ffb306
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProcessCard.vue
@@ -1,25 +1,93 @@
<script setup>
import {reactive, ref} from "vue";
import {onMounted, reactive, ref} from "vue";
import {useI18n} from "vue-i18n";
import {Search} from "@element-plus/icons-vue";
import request from "@/utils/request";
import deepClone from "@/utils/deepClone";
import {ElMessage} from "element-plus";
const { t } = useI18n()
import useUserInfoStore from "@/stores/userInfo";
const {t} = useI18n()
const userStore = useUserInfoStore()
const username = userStore.user.userName
let rowClickIndex = ref(null)
let props = defineProps({
  processId: null,
  technologyNumber: null
})
//膜系
const optionVal = ref()
//膜系
const projectNmae = ref()
//工程编号个数
let projectId = ref()
//工程编号
const Id = ref()
let oddNumbers = ref()
//定义接收加载表头下拉数据
const titleSelectJson = ref({
  processType: [],
})
const selectGlassType = () => {
  //查询膜系
  request.post(`/glassOptimize/selectGlassType`).then((res) => {
    if (res.code == 200) {
      titleSelectJson.value.processType = res.data.data
    } else {
      ElMessage.warning(res.msg)
    }
  })
}
//查询最新工程号
const getProjectId = () => {
  request.post(`/glassOptimize/getProjectId`).then((res) => {
    if (res.code == 200) {
      projectId = res.data.data[0].project_no
      // 获取字符串的最后两位数字
      let maximum = projectId.slice(-2);
      let lastTwoInteger = parseInt(maximum, 10);
       // 设置两位不够补0
      let formattedNumber = (lastTwoInteger + 1).toString().padStart(2, '0');
      // 格式化当前日期为 "yyMMdd"
      let currentDate = new Date();
      let formattedDate = currentDate.getFullYear().toString().slice(-2) +
          (currentDate.getMonth() + 1).toString().padStart(2, '0') +
          currentDate.getDate().toString().padStart(2, '0');
      // 拼接成最终的字符串
      oddNumbers.value = 'P' + formattedDate + formattedNumber;
    } else {
      ElMessage.warning(res.msg)
    }
  })
}
onMounted(() => {
  getProjectId();
  selectGlassType();
})
const xGrid = ref()
const gridOptions = reactive({
  height:'100%',
  height: '100%',
  loading: false,
  border:  "full",//表格加边框
  border: "full",//表格加边框
  keepSource: true,//保持源数据
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 30, useKey: true},//鼠标移动或选择高亮
  stripe: true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true, height: 30, useKey: true},//鼠标移动或选择高亮
  id: 'ProcessCard',
  scrollX:{enabled: true},
  scrollY:{ enabled: true ,gt:0},//开启虚拟滚动
  showOverflow:true,
  scrollX: {enabled: true},
  scrollY: {enabled: true, gt: 0},//开启虚拟滚动
  showOverflow: true,
  columnConfig: {
    resizable: true,
    useKey: true
@@ -35,156 +103,202 @@
    mode: 'row',
    showStatus: true
  },
  /*formConfig: {
    data: {
      width: '',
      height: '',
      quantity: ''
    },
    items: [
      { field: 'width', title: t('order.width')+':', itemRender: { name: 'VxeInput' } },
      { field: 'height', title: t('order.height')+':', itemRender: { name: 'VxeInput' } },
      { field: 'quantity', title: t('order.quantity')+':', itemRender: { name: 'VxeInput' } },
      {
        itemRender: {
          name: 'VxeButtonGroup',
          options: [
            { type: 'submit', content: t('craft.sure'), status: 'primary' },
            { type: 'reset', content: t('product.msg.reset') }
          ]
        }
      }
    ]
  },*/
  columns:[
    {type:'expand',fixed:"left",slots: { content:'content' },width: 50},
  columns: [
    {type: 'checkbox', fixed: "left", title: t('basicData.check'), width: 80},
    {field: 'process_id',width: 150, title: t('processCard.processId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'technology_number',width: 70, title: '层',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'TotalFloors',width: 150, title: '总层数',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'TotalNumber',width: 150, title: '规格',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'quantity',width: 150, title: t('order.quantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'shape',width: 150, title: t('order.shape'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'glass_child',width: 150, title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'project', width:150, title: t('order.project'), showOverflow: "ellipsis"},
    {field: 'area',width: 150, title: t('order.area'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {
      field: 'process_id',
      width: 150,
      title: t('processCard.processId'),
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {
      field: 'technology_number',
      width: 70,
      title: '层',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {
      field: 'TotalFloors',
      width: 150,
      title: '总层数',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {
      field: 'TotalNumber',
      width: 150,
      title: '规格',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {
      field: 'quantity',
      width: 150,
      title: t('order.quantity'),
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {
      field: 'shape',
      width: 150,
      title: t('order.shape'),
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {
      field: 'glass_child',
      width: 150,
      title: t('order.product'),
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {field: 'project', width: 150, title: t('order.project'), showOverflow: "ellipsis"},
    {
      field: 'area',
      width: 150,
      title: t('order.area'),
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
  ],//表头参数
  data:null,//表格数据
  data: null,//表格数据
  toolbarConfig: {
    buttons: [],
    slots:{
    slots: {
      buttons: "toolbar_buttons"
    },
  },
})
let emit = defineEmits([
  'changeDialog'
])
//膜系列表
const optionVal = ref('')
const options = [
  {
    value: '白玻',
    label: '白玻',
  },
  {
    value: '灰镜',
    label: '灰镜',
  },
  {
    value: 'Low-e',
    label: 'Low-e',
  },
]
const gridEvents = {
  cellClick({row}) {
    rowClickIndex.value = row
    // Emit 事件将更新后的值传递给父组件
    emit('updateProcessId', rowClickIndex.value.process_id);
    emit('updateTechnologyNumber', rowClickIndex.value.technology_number);
  }
}
const emit = defineEmits(['updateProcessId', 'updateTechnologyNumber']);
//小圆点单选框
let radio = ref(1);
const selectFlowCardList = ()=>{
const selectFlowCardList = () => {
  request.post(`/glassOptimize/getFlowCardList/${optionVal.value}/${radio.value}`).then((res) => {
    if(res.code==200){
    if (res.code == 200) {
      xGrid.value.loadData(res.data.data)
    }else{
    } else {
      ElMessage.warning(res.msg)
    }
  })
}
//创建工程
const addProject = () => {
  const $table = xGrid.value
  if ($table) {
    const selectRecords = $table.getCheckboxRecords()
    if (selectRecords.length == 0) {
      ElMessage.warning(t('reportingWorks.selectProcessCardData'))
      return;
    }
    let projectData = ref({
      projectdetail: selectRecords,
      userName : username
    })
    request.post(`/glassOptimize/addProject/${optionVal.value}/${oddNumbers.value}/${projectNmae.value}`, projectData.value).then((res) => {
      if (res.code == 200 && res.data === true) {
        ElMessage.success(t('basicData.msg.saveSuccess'))
      } else {
        ElMessage.warning(res.msg)
      }
    })
  }
}
</script>
<template>
  <div style="width: 100%;height: 110%; margin-top: -36px">
    <h1>流程卡列表
    <span style="margin-left: 140px;font-size: 14px">工程编号:</span>
    <vxe-input disabled placeholder="" size="small"></vxe-input>&nbsp;
    <span style="font-size: 14px">工程名称:</span>
    <vxe-input placeholder="" size="small"></vxe-input>
      <el-button type="primary" style="margin-left: 20px">创建</el-button>
      <span style="margin-left: 140px;font-size: 14px">工程编号:</span>
<!--      <span>{{oddNumbers}}</span>-->
      <el-input disabled v-model="oddNumbers" style="width: 100px"></el-input>
<!--      <vxe-input :disabled="isDisabled" placeholder="" v-model="oddNumbers" size="small" style="color:black;"></vxe-input>&nbsp;-->
      <span style="font-size: 14px">工程名称:</span>
      <vxe-input placeholder="" v-model="projectNmae" size="small"></vxe-input>
      <el-button style="margin-left: 20px" type="primary" @click="addProject">创建</el-button>
    </h1>
    <vxe-grid
          size="small"
          @filter-change="filterChanged"
          height="100%"
          class="mytable-scrollbar"
          ref="xGrid"
          v-bind="gridOptions"
          v-on="gridEvents"
      >
        <template #num2_filter="{ column, $panel }">
          <div>
            <div v-for="(option, index) in column.filters" :key="index">
              <vxe-select v-model="option.data" :placeholder="$t('processCard.pleaseSelect')"  @change="changeFilterEvent($event, option, $panel)">
                <vxe-option value="0" :label="$t('basicData.unchecked')"></vxe-option>
                <vxe-option value="1" :label="$t('basicData.selected')"></vxe-option>
              </vxe-select>
            </div>
        ref="xGrid"
        class="mytable-scrollbar"
        height="100%"
        size="small"
        v-bind="gridOptions"
        v-on="gridEvents"
        @filter-change="filterChanged"
    >
      <template #num2_filter="{ column, $panel }">
        <div>
          <div v-for="(option, index) in column.filters" :key="index">
            <vxe-select v-model="option.data" :placeholder="$t('processCard.pleaseSelect')"
                        @change="changeFilterEvent($event, option, $panel)">
              <vxe-option :label="$t('basicData.unchecked')" value="0"></vxe-option>
              <vxe-option :label="$t('basicData.selected')" value="1"></vxe-option>
            </vxe-select>
          </div>
        </template>
        </div>
      </template>
        <template #num1_filter="{ column, $panel }">
          <div>
            <div v-for="(option, index) in column.filters" :key="index">
              <input
      <template #num1_filter="{ column, $panel }">
        <div>
          <div v-for="(option, index) in column.filters" :key="index">
            <input
                  type="type"
                  v-model="option.data"
                  @keyup.enter.native="$panel.confirmFilter()"
                  @input="changeFilterEvent($event, option, $panel)"/>
            </div>
                v-model="option.data"
                type="type"
                @input="changeFilterEvent($event, option, $panel)"
                @keyup.enter.native="$panel.confirmFilter()"/>
          </div>
        </template>
        </div>
      </template>
        <template #toolbar_buttons>
          <h1>膜系筛选:</h1>
          <el-select
              placeholder="选择膜系"
              style="margin-left:10px; width: 170px "
              ref="getSelect"
              v-model="optionVal"
              clearable
              class="m-2"
              @change="getWorkOrder"
          >
            <el-option
                v-for="item in options"
                :key="item.value"
                :label="item.label"
                :value="item.value"
            />
          </el-select>
          <el-button type="primary" :icon="Search" style="margin-left: 20px" @click="selectFlowCardList">查询</el-button>
          <vxe-radio-group v-model="radio" style="margin-left: 20px">
            <vxe-radio label="1" content="全部"></vxe-radio>
            <vxe-radio label="2" content="正单"></vxe-radio>
            <vxe-radio label="3" content="补单"></vxe-radio>
          </vxe-radio-group>
        </template>
      <template #toolbar_buttons>
        <h1>膜系筛选:</h1>
        <el-select v-model="optionVal" clearable default-value="default_city" placeholder="选择膜系"
                   style="width: 120px">
          <el-option
              v-for="item in titleSelectJson['processType']"
              :key="item.id"
              :label="item.glassType"
              :value="item.glassType"
          />
        </el-select>
        <el-button :icon="Search" style="margin-left: 20px" type="primary" @click="selectFlowCardList">查询</el-button>
        <vxe-radio-group v-model="radio" style="margin-left: 20px">
          <vxe-radio content="全部" label="1"></vxe-radio>
          <vxe-radio content="正单" label="2"></vxe-radio>
          <vxe-radio content="补单" label="3"></vxe-radio>
        </vxe-radio-group>
      </template>
    </vxe-grid>
  </div>
</template>