<template>
  <div class="ele-body">
    <el-card shadow="never" v-loading="loading">
      <produceOrder-search
        @search="reload"
        ref="searchRef"
        :statusOpt="statusOpt"
        :planType="planType"
        :activeName="activeName"
      >
      </produceOrder-search>
      <el-tabs v-model="activeName" type="card">
        <el-tab-pane label="未完成工单" name="first"></el-tab-pane>
        <el-tab-pane label="已完成工单" name="second"></el-tab-pane>
      </el-tabs>
      <!-- 数据表格 -->
      <ele-pro-table
        ref="table"
        :key="activeName"
        :initLoad="false"
        :columns="newColumns"
        :datasource="datasource"
        row-key="code"
        :cache-key="`${activeName}produceOrderTable`"
        autoAmendPage
      >
      
  <template v-slot:code="{ row }">
    <span>{{ row.code }}</span>
  </template>
        <template v-slot:formingNum="{ row }">
          <span> {{ row.formingNum }} {{ row.unit }} </span>
        </template>

        <template v-slot:formingWeight="{ row }">
          <span> {{ row.formingNum }} {{ row.weightUnit }} </span>
        </template>

        <template v-slot:status="{ row }">
          <span :class="{ 'ele-text-danger': row.status == 3 }">
            {{ statusFormatter(row.status) }}
          </span>
        </template>
      </ele-pro-table>
    </el-card>
  </div>
</template>
  
  <script>
import { getPage } from '@/api/mes/index.js';

import { fieldModelAPI } from '@/api/main';
import produceOrderSearch from './produceOrder-search.vue';
export default {
  components: {
    produceOrderSearch
  },
  props: {
    saleOrderData: {
      type: Object,
      default: () => {
        return {};
      }
    }
  },
  data() {
    return {
      activeName: 'first',

      // 加载状态
      loading: false,
      statusOpt: {
        first: [
          { label: '所有状态', value: '5,4' },
          { label: '待生产', value: '4' },
          { label: '生产中', value: '5' }
          // { label: '已延期', value: '7' }
        ],
        second: [{ label: '已完成', value: '6' }]
      },
      planType: [
        { label: '所有计划类型', value: null },
        { label: '内销计划', value: '1' },
        { label: '外销计划', value: '2' },
        { label: '预制计划', value: '3' }
      ],
      newColumns: []
    };
  },
  computed: {
    // 表格列配置
    columns() {
      const opt = {
        first: [
          // {
          //   prop: 'deliveryTime',
          //   label: '预测交货日期',
          //   align: 'center',
          //   showOverflowTooltip: true,
          //   minWidth: 110
          // }
        ],
        second: [
          {
            prop: 'completeTime',
            label: '完成时间',
            align: 'center'
          },
          {
            prop: 'cycle',
            label: '生产周期',
            align: 'center'
          }
        ]
      };

      return [
        {
          prop: 'batchNo',
          label: '批次号',
          align: 'center',
          minWidth: 100
        },

        {
          slot: 'code',
          label: '生产工单号',
          align: 'center',
          minWidth: 110
        },
        // {
        //   prop: 'originalCode',
        //   label: '原始工单号',
        //   align: 'center',
        //   minWidth: 110
        // },

        {
          slot: 'QRcode',
          label: '二维码',
          align: 'center',
          minWidth: 110
        },

        {
          prop: 'productionPlanCode',
          label: '计划编号',
          align: 'center',
          minWidth: 110
        },
        {
          prop: 'planType',
          label: '计划类型',
          align: 'center',
          formatter: (row) => {
            const obj = this.planType.find((i) => i.value == row.planType);
            return obj && obj.label;
          }
        },
        {
          prop: 'produceRoutingName',
          label: '工艺路线',
          align: 'center'
        },
        {
          prop: 'productCode',
          label: '物料编码',
          align: 'center'
        },
        {
          prop: 'productName',
          label: '产品名称',
          align: 'center'
        },
        {
          prop: 'brandNo',
          label: '牌号',
          align: 'center'
        },
        {
          prop: 'model',
          label: '型号',
          align: 'center'
        },

        {
          prop: 'priority',
          label: '优先级',
          align: 'center',
          minWidth: 120,
          slot: 'priority',
          sortable: 'custom'
        },

        {
          prop: 'formingNum',
          label: '要求生产数量',
          align: 'center',
          slot: 'formingNum',
          showOverflowTooltip: true,
          minWidth: 110
        },
        {
          prop: 'formingWeight',
          label: '要求生产重量',
          slot: 'formingWeight',
          align: 'center',
          showOverflowTooltip: true,
          minWidth: 110
        },
        {
          prop: 'formedNum',
          label: '已生产数量',
          align: 'center',
          showOverflowTooltip: true,
          minWidth: 110
        },
        {
          prop: 'formedWeight',
          label: '已生产重量',
          align: 'center',
          showOverflowTooltip: true,
          minWidth: 110
        },
        {
          prop: 'planStartTime',
          label: '计划开始时间',
          align: 'center',
          showOverflowTooltip: true,
          minWidth: 110
        },
        {
          prop: 'planCompleteTime',
          label: '计划结束时间',
          align: 'center',
          showOverflowTooltip: true,
          minWidth: 110
        },
        {
          prop: 'startTime',
          label: '实际开始时间',
          align: 'center',
          showOverflowTooltip: true,
          minWidth: 110
        },

        ...opt[this.activeName],
        {
          prop: 'createTime',
          label: '创建时间',
          align: 'center',
          showOverflowTooltip: true,
          minWidth: 110
        },
        {
          slot: 'status',
          label: '状态',
          align: 'center',
          formatter: (row) => {
            const obj = this.statusOpt[this.activeName].find(
              (i) => i.value == row.status
            );
            return obj && obj.label;
          }
        },

        {
          prop: 'teamName',
          label: '班组',
          align: 'center',
          showOverflowTooltip: true
        }
      ];
    },

    clientEnvironmentId() {
      return this.$store.state.user.info.clientEnvironmentId;
    }
  },
  created() {
    this.getFieldModel();
  },
  methods: {
    statusFormatter(status) {
      const obj = this.statusOpt[this.activeName].find(
        (i) => i.value == status
      );

      return obj && obj.label;
    },
    /* 表格数据源 */
    async datasource({ page, limit, where, order }) {
      if (this.saleOrderData.id) {
        where['saleOrderCode'] = this.saleOrderData.orderNo;
      }
      let res = await getPage({
        ...where,
        ...order,
        pageNum: page,
        size: limit,
        ...this.sort
      });
      // res['list'] = this.flattenArray(res.list)
      return res;
    },

    getFieldModel() {
      fieldModelAPI({ fieldModel: 't_main_category' }).then((res) => {
        let newRes = res.map((m) => {
          return {
            prop: 'extField.' + m.prop,
            label: m.label,
            align: 'center',
            showOverflowTooltip: true
          };
        });

        this.newColumns = [...this.columns, ...newRes];

        this.$forceUpdate();
      });
    },

    /* 刷新表格 */
    reload(where = {}) {
      this.$nextTick(() => {
        where.statusList = (
          where.status || this.statusOpt[this.activeName][0].value
        ).split(',');
        this.$refs.table.reload({ page: 1, where });
      });
    }
  }
};
</script>
  